in out_writeapi.go [331:362]
func sendRequestRetries(ctx context.Context, data [][]byte, config **outputConfig, streamIndex int) error {
retryer := newStatelessRetryer((*config).numRetries)
attempt := 0
currStream := (*(*config).managedStreamSlice)[streamIndex]
for {
err := sendRequestExactlyOnce(ctx, data, config, streamIndex)
if err == nil {
break
}
// Unsuccesful data append
if rebuildPredicate(err) {
currStream.managedstream.Finalize(ctx)
currStream.managedstream.Close()
// Rebuild stream
err := buildStream(ctx, config, streamIndex)
if err != nil {
return err
}
// Retry sending data without incrementing number of attempts or waiting between attempts
} else {
backoffPeriod, shouldRetry := retryer.Retry(err, attempt)
if !shouldRetry {
return err
}
// Retry sending data after incrementing attempt count and waiting for designated amount of time
attempt++
time.Sleep(backoffPeriod)
}
}
return nil
}