GH-90: Rework locking logic in the KinesisMDChA
Fixes https://github.com/spring-projects/spring-integration-aws/issues/90 * Add an internal `ShardConsumerManager` which is responsible to initiate a locking for the shard key in the provided consumer group and populating a `ShardConsumer` if `tryLock()` is successful or no `LockRegistry` at all * Additional logic is added to always iterate over candidate shards if `tryLock()` on the matter is not successful. This way the current `KinesisMessageDrivenChannelAdapter` picks up those shards which have been locked by the consumer which has just left a cluster and unlocked distributed locks * Now all the shards are considered as candidates independently of the `streams` or `shardOffsets` configuration * Improve Kinesis tests performance
This commit is contained in:
@@ -156,7 +156,7 @@ public class KinesisMessageDrivenChannelAdapterTests {
|
||||
|
||||
Map<?, ?> forLocking =
|
||||
TestUtils.getPropertyValue(this.kinesisMessageDrivenChannelAdapter,
|
||||
"shardLocksMonitor.forLocking", Map.class);
|
||||
"shardConsumerManager.locks", Map.class);
|
||||
|
||||
Assert.assertThat(0, eventually(100, 100, equalsResult(forLocking::size)));
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ import org.junit.ClassRule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import org.springframework.beans.DirectFieldAccessor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -170,6 +171,12 @@ public class KinesisIntegrationTests {
|
||||
adapter.setCheckpointStore(checkpointStore());
|
||||
adapter.setLockRegistry(lockRegistry());
|
||||
adapter.setEmbeddedHeadersMapper(new EmbeddedJsonHeadersMessageMapper("foo"));
|
||||
|
||||
DirectFieldAccessor dfa = new DirectFieldAccessor(adapter);
|
||||
dfa.setPropertyValue("describeStreamBackoff", 10);
|
||||
dfa.setPropertyValue("consumerBackoff", 10);
|
||||
dfa.setPropertyValue("idleBetweenPolls", 1);
|
||||
|
||||
return adapter;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user