public Shard(Gondola gondola, String shardId) throws GondolaException { this.gondola = gondola; this.shardId = shardId; config = gondola.getConfig(); stats = gondola.getStats(); List<Config.ConfigMember> configMembers = config.getMembersInShard(shardId); List<Integer> peerIds = configMembers.stream() .filter(cm -> !cm.hostId.equals(gondola.getHostId())) .map(cm -> cm.memberId).collect(Collectors.toList()); // First create the local member, because it's needed when creating the remote members. for (int i = 0; i < configMembers.size(); i++) { Config.ConfigMember cm = configMembers.get(i); if (gondola.getHostId().equals(cm.hostId)) { // Local member boolean isPrimary = i == 0; cmember = new CoreMember(gondola, this, cm.memberId, peerIds, isPrimary); localMember = new Member(gondola, cmember, null); members.add(localMember); break; } } if (cmember == null) { throw new IllegalStateException(String.format("Host id %s not found in %d", config.getIdentifier())); } // Create list of peers for (Peer p : cmember.peers.values()) { members.add(new Member(gondola, cmember, p)); } }
Cluster(Gondola gondola, String clusterId) throws Exception { this.gondola = gondola; this.clusterId = clusterId; config = gondola.getConfig(); stats = gondola.getStats(); List<Config.ConfigMember> configMembers = config.getMembersInCluster(clusterId); List<Integer> peerIds = configMembers.stream() .filter(cm -> !cm.hostId.equals(gondola.getHostId())) .map(cm -> cm.memberId).collect(Collectors.toList()); // First create the local member, because it's needed when creating the remote members. for (int i = 0; i < configMembers.size(); i++) { Config.ConfigMember cm = configMembers.get(i); if (gondola.getHostId().equals(cm.hostId)) { // Local member boolean isPrimary = i == 0; cmember = new CoreMember(gondola, this, cm.memberId, peerIds, isPrimary); localMember = new Member(gondola, cmember, null); members.add(localMember); break; } } if (cmember == null) { throw new IllegalStateException(String.format("Host id %s not found in %d", config.getIdentifier())); } // Create list of peers for (Peer p : cmember.peers) { members.add(new Member(gondola, cmember, p)); } }