Skip to content

Commit 77a5402

Browse files
committed
Write warning if waiting for in-flight request
Signed-off-by: Peter Verraedt <peter@verraedt.be>
1 parent 4014bfa commit 77a5402

File tree

1 file changed

+30
-25
lines changed

1 file changed

+30
-25
lines changed

msg/message.go

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ type Message struct {
3636

3737
// Wait at least a second before canceling a request
3838
// if the context gets canceled.
39-
var MinimumRequestWaitTime = time.Second
39+
var MinimumRequestWaitTime = 10 * time.Second
4040

4141
// WriteContext calls Write with the provided context.
4242
// Note that Message cannot be reused if this function returns a context error.
@@ -47,18 +47,7 @@ func (msg *Message) WriteContext(ctx context.Context, w io.Writer) error {
4747
ch <- msg.Write(w)
4848
}()
4949

50-
select {
51-
case err := <-ch:
52-
return err
53-
case <-time.After(MinimumRequestWaitTime):
54-
}
55-
56-
select {
57-
case <-ctx.Done():
58-
return ctx.Err()
59-
case err := <-ch:
60-
return err
61-
}
50+
return waitContext(ctx, ch)
6251
}
6352

6453
// Write writes an iRODS message to w
@@ -138,18 +127,7 @@ func (msg *Message) ReadContext(ctx context.Context, r io.Reader) error {
138127
ch <- msg.Read(r)
139128
}()
140129

141-
select {
142-
case err := <-ch:
143-
return err
144-
case <-time.After(MinimumRequestWaitTime):
145-
}
146-
147-
select {
148-
case <-ctx.Done():
149-
return ctx.Err()
150-
case err := <-ch:
151-
return err
152-
}
130+
return waitContext(ctx, ch)
153131
}
154132

155133
// Read decodes an iRODS message from r.
@@ -220,3 +198,30 @@ func (body *Body) Read(r io.Reader, header Header) error {
220198

221199
return nil
222200
}
201+
202+
func waitContext(ctx context.Context, ch chan error) error {
203+
timer := time.NewTimer(MinimumRequestWaitTime)
204+
205+
defer timer.Stop()
206+
207+
select {
208+
case err := <-ch:
209+
return err
210+
case <-ctx.Done():
211+
logrus.Warnf("%s, but waiting %s for in-flight request to complete...", ctx.Err(), MinimumRequestWaitTime)
212+
213+
select {
214+
case err := <-ch:
215+
return err
216+
case <-timer.C:
217+
return ctx.Err()
218+
}
219+
case <-timer.C:
220+
select {
221+
case <-ctx.Done():
222+
return ctx.Err()
223+
case err := <-ch:
224+
return err
225+
}
226+
}
227+
}

0 commit comments

Comments
 (0)