X-Git-Url: http://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2Fimplementation%2Fkafka%2FDataChannel.java;h=ae544e41ad939ec2ee7c44c81ec219ba5ee71b91;hb=8300dcd98f681893a077051560151a8f1b94e38d;hp=63f36f53d504ec2bb30219e253069f270d13dbb4;hpb=465e722c9cd504932bc544c0f66e0b54007bdcdf;p=demos%2Fkafka%2Fchat diff --git a/src/main/java/de/juplo/kafka/chat/backend/implementation/kafka/DataChannel.java b/src/main/java/de/juplo/kafka/chat/backend/implementation/kafka/DataChannel.java index 63f36f53..ae544e41 100644 --- a/src/main/java/de/juplo/kafka/chat/backend/implementation/kafka/DataChannel.java +++ b/src/main/java/de/juplo/kafka/chat/backend/implementation/kafka/DataChannel.java @@ -178,7 +178,13 @@ public class DataChannel implements Channel, ConsumerRebalanceListener int partition = topicPartition.partition(); isShardOwned[partition] = false; nextOffset[partition] = consumer.position(topicPartition); + log.info("Partition revoked: {} - next={}", partition, nextOffset[partition]); + + chatRoomData[partition] + .values() + .forEach(chatRoomData -> chatRoomData.deactivate()); + channelMediator.shardRevoked(partition); }); } @@ -213,6 +219,7 @@ public class DataChannel implements Channel, ConsumerRebalanceListener { log.info("Loading of messages completed! Pausing all owned partitions..."); pauseAllOwnedPartions(); + activateAllOwnedChatRooms(); log.info("Resuming normal operations..."); channelState = ChannelState.READY; } @@ -313,6 +320,16 @@ public class DataChannel implements Channel, ConsumerRebalanceListener .toList()); } + private void activateAllOwnedChatRooms() + { + IntStream + .range(0, numShards) + .filter(shard -> isShardOwned[shard]) + .forEach(shard -> chatRoomData[shard] + .values() + .forEach(chatRoomData -> chatRoomData.activate())); + } + int[] getOwnedShards() { @@ -324,7 +341,10 @@ public class DataChannel implements Channel, ConsumerRebalanceListener void createChatRoomData(ChatRoomInfo chatRoomInfo) { - computeChatRoomData(chatRoomInfo.getId(), chatRoomInfo.getShard()); + ChatRoomData chatRoomData = computeChatRoomData( + chatRoomInfo.getId(), + chatRoomInfo.getShard()); + chatRoomData.activate(); } Mono getChatRoomData(int shard, UUID id)