Skip to content

Commit 03c38dc

Browse files
update logic to fix failing tests
1 parent 0379b05 commit 03c38dc

File tree

5 files changed

+22
-22
lines changed

5 files changed

+22
-22
lines changed

in_session.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ func (state inSession) handleResendRequest(session *session, msg *Message) (next
208208
}
209209

210210
if err := state.resendMessages(session, int(beginSeqNo), endSeqNo, *msg); err != nil {
211+
session.isResendRequestActive = false
211212
return handleStateError(session, err)
212213
}
213214
session.isResendRequestActive = false
@@ -282,7 +283,6 @@ func (state inSession) resendMessages(session *session, beginSeqNo, endSeqNo int
282283
}
283284

284285
func (state inSession) processReject(session *session, msg *Message, rej MessageRejectError) sessionState {
285-
session.isResendRequestActive = false
286286
switch TypedError := rej.(type) {
287287
case targetTooHigh:
288288

@@ -293,7 +293,7 @@ func (state inSession) processReject(session *session, msg *Message, rej Message
293293
nextState = currentState
294294
default:
295295
var err error
296-
if nextState, err = session.doTargetTooHigh(TypedError); err != nil {
296+
if nextState, err = session.doTargetTooHigh(TypedError, true); err != nil {
297297
return handleStateError(session, err)
298298
}
299299
}

in_session_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -377,18 +377,18 @@ func (s *InSessionTestSuite) TestIsResendRequestActive() {
377377
s.MockApp.On("FromAdmin").Return(nil)
378378
s.MockApp.On("ToApp").Return(nil)
379379
s.MockApp.On("ToAdmin")
380-
s.sendResendRequest(5, 10)
380+
s.sendResendRequest(5, 10, false)
381381
s.True(s.isResendRequestActive)
382382

383383
nos := s.NewOrderSingle()
384-
err := s.session.sendInReplyTo(nos, nil)
384+
err := s.session.send(nos)
385385

386386
s.Error(err)
387387
s.EqualError(err, "cannot send message while resend request is active")
388388
s.fixMsgIn(s.session, s.ResendRequest(5))
389389
s.False(s.isResendRequestActive)
390390

391-
err = s.session.sendInReplyTo(nos, nil)
391+
err = s.session.send(nos)
392392

393393
s.NoError(err)
394394
}

logon_state.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func (s logonState) FixMsgIn(session *session, msg *Message) (nextState sessionS
4646

4747
case targetTooHigh:
4848
var tooHighErr error
49-
if nextState, tooHighErr = session.doTargetTooHigh(err); tooHighErr != nil {
49+
if nextState, tooHighErr = session.doTargetTooHigh(err, false); tooHighErr != nil {
5050
return shutdownWithReason(session, msg, false, tooHighErr.Error())
5151
}
5252

resend_state.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func (s resendState) FixMsgIn(session *session, msg *Message) (nextState session
4848
}
4949

5050
if s.currentResendRangeEnd != 0 && s.currentResendRangeEnd < session.store.NextTargetMsgSeqNum() {
51-
nextResendState, err := session.sendResendRequest(session.store.NextTargetMsgSeqNum(), s.resendRangeEnd)
51+
nextResendState, err := session.sendResendRequest(session.store.NextTargetMsgSeqNum(), s.resendRangeEnd, false)
5252
if err != nil {
5353
return handleStateError(session, err)
5454
}
@@ -64,7 +64,7 @@ func (s resendState) FixMsgIn(session *session, msg *Message) (nextState session
6464
}
6565

6666
if bool(gapFillFlag) && s.currentResendRangeEnd != 0 && s.currentResendRangeEnd == session.store.NextTargetMsgSeqNum() {
67-
nextResendState, err := session.sendResendRequest(session.store.NextTargetMsgSeqNum(), s.resendRangeEnd)
67+
nextResendState, err := session.sendResendRequest(session.store.NextTargetMsgSeqNum(), s.resendRangeEnd, false)
6868
if err != nil {
6969
return handleStateError(session, err)
7070
}

session.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,10 @@ func (s *session) notifyMessageOut() {
297297

298298
// send will validate, persist, queue the message. If the session is logged on, send all messages in the queue.
299299
func (s *session) send(msg *Message) error {
300+
if err := s.isResendRequestBlocking(msg); err != nil {
301+
return err
302+
}
303+
300304
return s.sendInReplyTo(msg, nil)
301305
}
302306
func (s *session) sendInReplyTo(msg *Message, inReplyTo *Message) error {
@@ -307,12 +311,6 @@ func (s *session) sendInReplyTo(msg *Message, inReplyTo *Message) error {
307311
s.sendMutex.Lock()
308312
defer s.sendMutex.Unlock()
309313

310-
if blocked, err := s.isResendRequestBlocking(msg); err != nil {
311-
return err
312-
} else if blocked {
313-
return nil
314-
}
315-
316314
msgBytes, err := s.prepMessageForSend(msg, inReplyTo)
317315
if err != nil {
318316
return err
@@ -324,18 +322,18 @@ func (s *session) sendInReplyTo(msg *Message, inReplyTo *Message) error {
324322
return nil
325323
}
326324

327-
func (s *session) isResendRequestBlocking(msg *Message) (bool, error) {
325+
func (s *session) isResendRequestBlocking(msg *Message) error {
328326
msgType, err := msg.Header.GetBytes(tagMsgType)
329327
if err != nil {
330-
return false, err
328+
return err
331329
}
332330

333331
if s.isResendRequestActive && !bytes.Equal(msgType, msgTypeResendRequest) {
334332
s.log.OnEvent("Message blocked: resend request in progress")
335-
return true, errors.New("cannot send message while resend request is active")
333+
return errors.New("cannot send message while resend request is active")
336334
}
337335

338-
return false, nil
336+
return nil
339337
}
340338

341339
// dropAndReset will drop the send queue and reset the message store.
@@ -465,12 +463,12 @@ func (s *session) sendBytes(msg []byte, blockUntilSent bool) bool {
465463
}
466464
}
467465

468-
func (s *session) doTargetTooHigh(reject targetTooHigh) (nextState resendState, err error) {
466+
func (s *session) doTargetTooHigh(reject targetTooHigh, isReject bool) (nextState resendState, err error) {
469467
s.log.OnEventf("MsgSeqNum too high, expecting %v but received %v", reject.ExpectedTarget, reject.ReceivedTarget)
470-
return s.sendResendRequest(reject.ExpectedTarget, reject.ReceivedTarget-1)
468+
return s.sendResendRequest(reject.ExpectedTarget, reject.ReceivedTarget-1, isReject)
471469
}
472470

473-
func (s *session) sendResendRequest(beginSeq, endSeq int) (nextState resendState, err error) {
471+
func (s *session) sendResendRequest(beginSeq, endSeq int, isReject bool) (nextState resendState, err error) {
474472
nextState.resendRangeEnd = endSeq
475473

476474
resend := NewMessage()
@@ -499,7 +497,9 @@ func (s *session) sendResendRequest(beginSeq, endSeq int) (nextState resendState
499497
return
500498
}
501499
s.log.OnEventf("Sent ResendRequest FROM: %v TO: %v", beginSeq, endSeqNo)
502-
s.isResendRequestActive = true
500+
if !isReject {
501+
s.isResendRequestActive = true
502+
}
503503

504504
return
505505
}

0 commit comments

Comments
 (0)