File tree Expand file tree Collapse file tree 3 files changed +22
-3
lines changed Expand file tree Collapse file tree 3 files changed +22
-3
lines changed Original file line number Diff line number Diff line change @@ -2836,6 +2836,10 @@ func (sub *Subscription) ConsumerInfo() (*ConsumerInfo, error) {
2836
2836
sub .mu .Lock ()
2837
2837
// TODO(dlc) - Better way to mark especially if we attach.
2838
2838
if sub .jsi == nil || sub .jsi .consumer == _EMPTY_ {
2839
+ if sub .jsi .ordered {
2840
+ sub .mu .Unlock ()
2841
+ return nil , ErrConsumerInfoOnOrderedReset
2842
+ }
2839
2843
sub .mu .Unlock ()
2840
2844
return nil , ErrTypeSubscription
2841
2845
}
Original file line number Diff line number Diff line change @@ -150,6 +150,9 @@ var (
150
150
// ErrConsumerLeadershipChanged is returned when pending requests are no longer valid after leadership has changed
151
151
ErrConsumerLeadershipChanged JetStreamError = & jsError {message : "Leadership Changed" }
152
152
153
+ // ErrConsumerInfoOnOrderedReset is returned when attempting to fetch consumer info for an ordered consumer that is currently being recreated.
154
+ ErrConsumerInfoOnOrderedReset JetStreamError = & jsError {message : "cannot fetch consumer info; ordered consumer is being reset" }
155
+
153
156
// ErrNoHeartbeat is returned when no heartbeat is received from server when sending requests with pull consumer.
154
157
ErrNoHeartbeat JetStreamError = & jsError {message : "no heartbeat received" }
155
158
Original file line number Diff line number Diff line change @@ -10105,9 +10105,21 @@ func TestJetStreamOrderedConsumerRecreateAfterReconnect(t *testing.T) {
10105
10105
if err != nil {
10106
10106
t .Fatalf ("Unexpected error: %v" , err )
10107
10107
}
10108
- consInfo , err = sub .ConsumerInfo ()
10109
- if err != nil {
10110
- t .Fatalf ("Unexpected error: %v" , err )
10108
+ var infoErr error
10109
+ for range 5 {
10110
+ consInfo , infoErr = sub .ConsumerInfo ()
10111
+ if infoErr != nil {
10112
+ if errors .Is (infoErr , nats .ErrConsumerInfoOnOrderedReset ) {
10113
+ time .Sleep (100 * time .Millisecond )
10114
+ continue
10115
+ }
10116
+ t .Fatalf ("Unexpected error: %v" , err )
10117
+ }
10118
+ infoErr = nil
10119
+ break
10120
+ }
10121
+ if infoErr != nil {
10122
+ t .Fatalf ("Unexpected error: %v" , infoErr )
10111
10123
}
10112
10124
if consInfo .Name == consName || len (consInfo .Name ) != 8 {
10113
10125
t .Fatalf ("Unexpected consumer name: %q" , consInfo .Name )
You can’t perform that action at this time.
0 commit comments