Skip to content

Commit a8003ad

Browse files
committed
[rpc] Run the probe first
The previous beheavior of ProbeForever was to try a probe and then sleep for the `probeInterval` duration. When it was modified to use a `time.Ticker` instead of a sleep, it changed the behavior to wait the `probeInterval` first and then do the probe. This commit restore the previous behavior by running the probe first. Based on https://stackoverflow.com/a/54752803.
1 parent 856c5da commit a8003ad

File tree

1 file changed

+22
-20
lines changed

1 file changed

+22
-20
lines changed

rpc/common.go

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -139,30 +139,32 @@ func ProbeForever(ctx context.Context, conn *grpc.ClientConn, singleProbeTimeout
139139
defer ticker.Stop()
140140

141141
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+
}
142163
select {
143164
case <-ctx.Done():
144165
return ctx.Err()
145166
case <-ticker.C:
146-
logger.Info("Probing CSI driver for readiness")
147-
ready, err := probeOnce(ctx, conn, singleProbeTimeout)
148-
if err != nil {
149-
st, ok := status.FromError(err)
150-
if !ok {
151-
// This is not gRPC error. The probe must have failed before gRPC
152-
// method was called, otherwise we would get gRPC error.
153-
return fmt.Errorf("CSI driver probe failed: %s", err)
154-
}
155-
if st.Code() != codes.DeadlineExceeded {
156-
return fmt.Errorf("CSI driver probe failed: %s", err)
157-
}
158-
// Timeout -> driver is not ready. Fall through to sleep() below.
159-
logger.Info("CSI driver probe timed out")
160-
} else {
161-
if ready {
162-
return nil
163-
}
164-
logger.Info("CSI driver is not ready")
165-
}
167+
continue
166168
}
167169
}
168170
}

0 commit comments

Comments
 (0)