X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2Fpersistence%2Finmemory%2FInMemoryChatHomeService.java;h=13341244db3df7891b0223b8fe22a931fad6ffe3;hb=2ccf8e29b0ffb2366a717392fa996707fde1821d;hp=95a30dbd124045b217e304c735bbbd8a88938182;hpb=6eb03cbe4609eea0b7061b574a7e273ecd0c9813;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 95a30dbd..13341244 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 @@ -1,8 +1,6 @@ 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; @@ -11,20 +9,17 @@ import java.util.*; @Slf4j -public class InMemoryChatHomeService implements ChatHomeService +public class InMemoryChatHomeService { - 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) @@ -41,8 +36,7 @@ public class InMemoryChatHomeService implements ChatHomeService chatroomFlux .filter(chatRoom -> { - int shard = shardingStrategy.selectShard(chatRoom.getId()); - if (owned.contains(shard)) + if (owned.contains(chatRoom.getShard())) { return true; } @@ -53,35 +47,21 @@ public class InMemoryChatHomeService implements ChatHomeService } }) .toStream() - .forEach(chatRoom -> - { - getChatRoomMapFor(chatRoom).put(chatRoom.getId(), chatRoom); - }); + .forEach(chatroom -> chatrooms[chatroom.getShard()].put(chatroom.getId(), chatroom)); } - @Override - public Mono putChatRoom(ChatRoom chatRoom) + public void putChatRoom(ChatRoom chatRoom) { - getChatRoomMapFor(chatRoom).put(chatRoom.getId(), chatRoom); - return Mono.just(chatRoom); + chatrooms[chatRoom.getShard()].put(chatRoom.getId(), chatRoom); } - @Override public Mono getChatRoom(int shard, UUID id) { return Mono.justOrEmpty(chatrooms[shard].get(id)); } - @Override public Flux getChatRooms(int shard) { return Flux.fromStream(chatrooms[shard].values().stream()); } - - - private Map getChatRoomMapFor(ChatRoom chatRoom) - { - int shard = shardingStrategy.selectShard(chatRoom.getId()); - return chatrooms[shard]; - } }