X-Git-Url: http://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2Fpersistence%2Finmemory%2FInMemoryChatHomeService.java;fp=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2Fpersistence%2Finmemory%2FInMemoryChatHomeService.java;h=0beb7f362a872b80bacb9e007d3b51804f4ab1cf;hb=7dc64266c5675ead8214edb36173b80363e08b1f;hp=87fa61fa1329d339e64d1d7258ac69b80a0f8f9d;hpb=b4b3b9dff26d99f11d21c54ff004a73247bbc84d;p=demos%2Fkafka%2Fchat diff --git a/src/main/java/de/juplo/kafka/chat/backend/persistence/inmemory/InMemoryChatHomeService.java b/src/main/java/de/juplo/kafka/chat/backend/persistence/inmemory/InMemoryChatHomeService.java index 87fa61fa..0beb7f36 100644 --- a/src/main/java/de/juplo/kafka/chat/backend/persistence/inmemory/InMemoryChatHomeService.java +++ b/src/main/java/de/juplo/kafka/chat/backend/persistence/inmemory/InMemoryChatHomeService.java @@ -2,6 +2,7 @@ package de.juplo.kafka.chat.backend.persistence.inmemory; import de.juplo.kafka.chat.backend.domain.ChatRoom; import de.juplo.kafka.chat.backend.domain.ChatHomeService; +import de.juplo.kafka.chat.backend.domain.ShardingStrategy; import lombok.extern.slf4j.Slf4j; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -12,15 +13,18 @@ import java.util.*; @Slf4j public class InMemoryChatHomeService implements ChatHomeService { + private final ShardingStrategy shardingStrategy; private final Map[] chatrooms; public InMemoryChatHomeService( + ShardingStrategy shardingStrategy, int numShards, int[] ownedShards, Flux chatroomFlux) { log.debug("Creating InMemoryChatHomeService"); + this.shardingStrategy = shardingStrategy; this.chatrooms = new Map[numShards]; Set owned = Arrays .stream(ownedShards) @@ -37,7 +41,8 @@ public class InMemoryChatHomeService implements ChatHomeService { - if (owned.contains(chatRoom.getShard())) + int shard = shardingStrategy.selectShard(chatRoom.getId()); + if (owned.contains(shard)) { return true; } @@ -48,13 +53,16 @@ public class InMemoryChatHomeService implements ChatHomeService chatrooms[chatroom.getShard()].put(chatroom.getId(), chatroom)); + .forEach(chatRoom -> + { + getChatRoomMapFor(chatRoom).put(chatRoom.getId(), chatRoom); + }); } @Override public Mono putChatRoom(ChatRoom chatRoom) { - chatrooms[chatRoom.getShard()].put(chatRoom.getId(), chatRoom); + getChatRoomMapFor(chatRoom).put(chatRoom.getId(), chatRoom); return Mono.just(chatRoom); } @@ -69,4 +77,11 @@ public class InMemoryChatHomeService implements ChatHomeService getChatRoomMapFor(ChatRoom chatRoom) + { + int shard = shardingStrategy.selectShard(chatRoom.getId()); + return chatrooms[shard]; + } }