-
Notifications
You must be signed in to change notification settings - Fork 168
Description
In what version(s) of Spring Integration AWS are you seeing this issue?
3.0.0-M2
Describe the bug
This issue originally was described in this issue: spring-cloud/spring-cloud-stream-binder-aws-kinesis#190
I have a localstack running locally and 3 dummy app instances that send and receive messages. My system gets into sleep mode, and after woke up from it one of app instances started to report an exception:
2023-05-01T14:54:10.459-04:00 INFO 16112 --- [esis-consumer-1] a.i.k.KinesisMessageDrivenChannelAdapter : Got an exception java.util.concurrent.CompletionException: software.amazon.awssdk.services.kinesis.model.ExpiredIteratorException: The shard iterator has expired. Shard iterators are only valid for 300 seconds (Service: Kinesis, Status Code: 400, Request ID: AKSSPO8S0D2O3C4WWIF4QKMEL8VJSL2NANQN52N899PIFJFO7I09) during [ShardConsumer{shardOffset=KinesisShardOffset{iteratorType=AFTER_SEQUENCE_NUMBER, sequenceNumber='49640352981598798030864787941543021567332992185863766098', timestamp=null, stream='stream-v0', shard='shardId-000000000005', reset=false}, state=CONSUME}] task invocation.
To Reproduce
- Clone the repository https://github.com/RomanAbakumov/kinesis-lock-issues-demo
- run localstack using startLocalstack.cmd/startLocalstack.sh
- start 3 application instances using mvnw spring-boot:run
- wait for some time (5 min) so applications allocate locks and start to consume messages
- Put your system to sleep for some time, mine was in sleep mode for more than 30 minutes
Expected behavior
No such errors in the logs, locks should be reallocated if the shard iterator is expired.
After I shut down all app instances and start it again I see old messages have been consumed, so I suppose that iterator was expired, but locks were allocated so messages from this shard were not consumed until the problematic instance dies.