@Override public String[] getShardingEndpoints(IDatabase db) { HashSet<NetEndpoint> oldEndpoints = new HashSet<>(); for (String hostId : db.getHostIds()) { oldEndpoints.add(P2pServer.instance.getTopologyMetaData().getEndpoint(hostId)); } Set<NetEndpoint> liveMembers = Gossiper.instance.getLiveMembers(); liveMembers.removeAll(oldEndpoints); ArrayList<NetEndpoint> list = new ArrayList<>(liveMembers); int size = liveMembers.size(); AbstractReplicationStrategy replicationStrategy = getReplicationStrategy(db); int replicationFactor = replicationStrategy.getReplicationFactor(); Map<String, String> parameters = db.getParameters(); int nodes = replicationFactor + 2; if (parameters != null && parameters.containsKey("nodes")) { nodes = Integer.parseInt(parameters.get("nodes")); } nodes -= db.getHostIds().length; return getHostIds(list, size, nodes); }
public String[] getHostIdsOld(IDatabase db) { RunMode runMode = db.getRunMode(); Set<NetEndpoint> liveMembers = Gossiper.instance.getLiveMembers(); ArrayList<NetEndpoint> list = new ArrayList<>(liveMembers); int size = liveMembers.size(); if (runMode == RunMode.CLIENT_SERVER) { int i = random.nextInt(size); NetEndpoint addr = list.get(i); return new String[] { getHostId(addr) }; } else if (runMode == RunMode.REPLICATION) { AbstractReplicationStrategy replicationStrategy = getReplicationStrategy(db); int replicationFactor = replicationStrategy.getReplicationFactor(); return getHostIds(list, size, replicationFactor); } else if (runMode == RunMode.SHARDING) { AbstractReplicationStrategy replicationStrategy = getReplicationStrategy(db); int replicationFactor = replicationStrategy.getReplicationFactor(); Map<String, String> parameters = db.getParameters(); int nodes = replicationFactor + 2; if (parameters != null && parameters.containsKey("nodes")) { nodes = Integer.parseInt(parameters.get("nodes")); } return getHostIds(list, size, nodes); } return new String[0]; }