Skip to content

Commit e2e2abb

Browse files
authored
Merge pull request #175 from DataDog/fricounet/probe-first
Restore ProbeForever behavior of probing first before sleeping
2 parents 565ff53 + a8003ad commit e2e2abb

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

rpc/common.go

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -136,32 +136,35 @@ func GetGroupControllerCapabilities(ctx context.Context, conn *grpc.ClientConn)
136136
func ProbeForever(ctx context.Context, conn *grpc.ClientConn, singleProbeTimeout time.Duration) error {
137137
logger := klog.FromContext(ctx)
138138
ticker := time.NewTicker(probeInterval)
139+
defer ticker.Stop()
139140

140141
for {
142+
// Run the probe once before waiting for the ticker
143+
logger.Info("Probing CSI driver for readiness")
144+
ready, err := probeOnce(ctx, conn, singleProbeTimeout)
145+
if err != nil {
146+
st, ok := status.FromError(err)
147+
if !ok {
148+
// This is not gRPC error. The probe must have failed before gRPC
149+
// method was called, otherwise we would get gRPC error.
150+
return fmt.Errorf("CSI driver probe failed: %s", err)
151+
}
152+
if st.Code() != codes.DeadlineExceeded {
153+
return fmt.Errorf("CSI driver probe failed: %s", err)
154+
}
155+
// Timeout -> driver is not ready. Fall through to sleep() below.
156+
logger.Info("CSI driver probe timed out")
157+
} else {
158+
if ready {
159+
return nil
160+
}
161+
logger.Info("CSI driver is not ready")
162+
}
141163
select {
142164
case <-ctx.Done():
143165
return ctx.Err()
144166
case <-ticker.C:
145-
logger.Info("Probing CSI driver for readiness")
146-
ready, err := probeOnce(ctx, conn, singleProbeTimeout)
147-
if err != nil {
148-
st, ok := status.FromError(err)
149-
if !ok {
150-
// This is not gRPC error. The probe must have failed before gRPC
151-
// method was called, otherwise we would get gRPC error.
152-
return fmt.Errorf("CSI driver probe failed: %s", err)
153-
}
154-
if st.Code() != codes.DeadlineExceeded {
155-
return fmt.Errorf("CSI driver probe failed: %s", err)
156-
}
157-
// Timeout -> driver is not ready. Fall through to sleep() below.
158-
logger.Info("CSI driver probe timed out")
159-
} else {
160-
if ready {
161-
return nil
162-
}
163-
logger.Info("CSI driver is not ready")
164-
}
167+
continue
165168
}
166169
}
167170
}

0 commit comments

Comments
 (0)