@Override public void onNodeRemoved(OperationsNodeInfo node) { for (int i = 0; i < replicas; i++) { LOG.trace("Removing node {} replica {} from the circle", node.getConnectionInfo(), i); circle.remove(hash(node, i)); } }
private byte[] hash(OperationsNodeInfo node, int replica) { byte[] key = node.getConnectionInfo().getPublicKey().array(); ByteBuffer data = ByteBuffer.wrap(new byte[key.length + SIZE_OF_INT]); data.put(key); data.putInt(replica); return md5.get().digest(data.array()); }
@Override public void onNodeAdded(OperationsNodeInfo node) { for (int i = 0; i < replicas; i++) { LOG.trace("Adding node {} replica {} to the circle", node.getConnectionInfo(), i); circle.put(hash(node, i), node); } }
@Test public void testOnNodeRemoved() { OperationsNodeInfo nodeInfo = Mockito.mock(OperationsNodeInfo.class); ConnectionInfo connectionInfo = Mockito.mock(ConnectionInfo.class); Mockito.when(nodeInfo.getConnectionInfo()).thenReturn(connectionInfo); Map<String, OperationsNodeInfo> opsMap = Mockito.mock(Map.class); ReflectionTestUtils.setField(service, "opsMap", opsMap); DefaultOperationsServerListService.Memorizer memorizer = Mockito.mock(DefaultOperationsServerListService.Memorizer.class); ReflectionTestUtils.setField(service, "cache", memorizer); service.onNodeRemoved(nodeInfo); Mockito.verify(opsMap, Mockito.only()).remove(Mockito.anyString()); Mockito.verify(memorizer, Mockito.only()).clear(); }