public static boolean isUpToDate(RingGroup ringGroup) throws IOException { return isUpToDate(ringGroup, ringGroup.getDomainGroup()); }
@Override public Set<RingGroup> getRingGroupsForDomainGroup(DomainGroup domainGroup) { String domainGroupName = domainGroup.getName(); Set<RingGroup> groups = new HashSet<RingGroup>(); for (RingGroup group : ringGroups.values()) { if (group.getDomainGroup().getName().equals(domainGroupName)) { groups.add(group); } } return groups; }
@Override protected String formatCore(NotificationFormatter formatter) { try { return "Domain Group for " + formatter.getWebUiLink(RingGroupController.getRingGroupUrl(ringGroup), ringGroup.getName()) + " is now:" + UiUtils.formatDomainGroupDomainVersionsTable(ringGroup.getDomainGroup(), "", false); } catch (IOException e) { throw new RuntimeException(e); } }
public void stop() { for (RingMonitor ringMonitor : ringMonitors) { ringMonitor.stop(); } ringGroup.removeRingGroupConductorModeListener(ringGroupConductorStatusMonitor); ringGroup.getDomainGroup().removeListener(domainGroupMetadataMonitor); } }
protected DomainDeployStatus getDomainDeployStatus(Domain domain) throws IOException { DomainDeployStatus status = new DomainDeployStatus(); status.domainName = domain.getName(); Map<String, DomainDeployStatusForRingGroup> ringGroupsMap = new HashMap<String, DomainDeployStatusForRingGroup>(); for (RingGroup ringGroup : coordinator.getRingGroups()) { DomainGroup domainGroup = ringGroup.getDomainGroup(); if (domainGroup != null && domainGroup.getDomainVersion(domain) != null) { ringGroupsMap.put(ringGroup.getName(), getDomainDeployStatusForRingGroup(domainGroup, domain, ringGroup)); } } status.ringGroupsMap = ringGroupsMap; return status; }
PartitionUtils.domainToPartitionToHostsServingInBucket(domainToPartitionToHostsFullyServing, status); DomainGroup domainGroup = ringGroup.getDomainGroup();
public static boolean isServingOnlyUpToDate(RingGroup ringGroup) throws IOException { DomainGroup domainGroup = ringGroup.getDomainGroup(); for (Ring ring : ringGroup.getRings()) { for (Host host : ring.getHosts()) { if (host.getState() == HostState.SERVING && !Hosts.isUpToDate(host, domainGroup)) { return false; } } } return true; }
protected void addDomainsToRingGroup(Coordinator coordinator, RingGroup ringGroup) throws IOException { // for each configured domain for (RingGroupConfiguredDomain configuredDomain : configuredDomains) { Domain domain = coordinator.getDomain(configuredDomain.getName()); DomainAndVersion version = ringGroup.getDomainGroup().getDomainVersion(domain); if (version == null) { // either there are no versions, which is fine DomainVersion latestClosedVersion = Domains.getLatestVersionNotOpenNotDefunct(domain); if (latestClosedVersion != null) { int versionToAdd = latestClosedVersion.getVersionNumber(); LOG.info("Adding domain " + domain.getName() + " version " + versionToAdd + " to domain group: " + ringGroup.getName()); ringGroup.getDomainGroup().setDomainVersion(domain, versionToAdd); } } } }
public RingGroupMonitor(RingGroup ringGroup, List<Notifier> notifiers) throws IOException { this.notifiers = notifiers; this.ringGroup = ringGroup; for (Ring ring : ringGroup.getRings()) { ringMonitors.add(new RingMonitor(ringGroup, ring, notifiers)); } this.ringGroupConductorStatusMonitor = new RingGroupConductorModeMonitor(); this.domainGroupMetadataMonitor = new DomainGroupMetadataMonitor(); ringGroup.addRingGroupConductorModeListener(ringGroupConductorStatusMonitor); ringGroup.getDomainGroup().addListener(domainGroupMetadataMonitor); }
protected void removeExcessHosts(RingGroup ringGroup) throws IOException { int totalRings = ringGroup.getRings().size(); DomainGroup domainGroup = ringGroup.getDomainGroup(); Map<Domain, Map<Integer, Set<Host>>> domainToPartitionToHostsFullyServing = PartitionUtils.domainToPartitionToHostsServing(ringGroup, status); ThreeNestedMap<Domain, Integer, String, Long> domainPartitionBucketHostCounts = PartitionUtils.domainToPartitionToHostsServingInBucket(domainToPartitionToHostsFullyServing, status); for (Ring ring : ringGroup.getRings()) { if (ring.getHosts().size() > targetHostsPerRing) { if (!ring.getHosts().isEmpty()) { for (Host host : ring.getHosts()) { if (removeHostIfReplicated(totalRings, domainGroup, domainToPartitionToHostsFullyServing, domainPartitionBucketHostCounts, ring, host)) { return; } } } } } }
protected DomainGroupDeployStatusForRingGroup getDomainGroupDeployStatusForRingGroup(RingGroup ringGroup) throws IOException { DomainGroupDeployStatusForRingGroup status = new DomainGroupDeployStatusForRingGroup(); status.ringGroupName = ringGroup.getName(); ServingStatus servingStatus = RingGroups.computeServingStatusAggregator(ringGroup, ringGroup.getDomainGroup()).computeServingStatus(); status.numPartitions = servingStatus.getNumPartitions(); status.numPartitionsServedAndUpToDate = servingStatus.getNumPartitionsServedAndUpToDate(); return status; }
@Override public void manageTransitions(Coordinator coordinator, RingGroup ringGroup) throws IOException { DomainGroup domainGroup = ringGroup.getDomainGroup(); if (domainGroup == null) { // Nothing to do LOG.info("Domain group not found. Nothing to do."); return; } Map<Domain, Map<Integer, Set<Host>>> domainToPartitionToHostsFullyServing = PartitionUtils.domainToPartitionToHostsServing(ringGroup, status); ThreeNestedMap<Domain, Integer, String, Long> domainPartitionBucketHostCounts = PartitionUtils.domainToPartitionToHostsServingInBucket(domainToPartitionToHostsFullyServing, status); SortedSet<Ring> rings = ringGroup.getRingsSorted(); int ringCount = rings.size(); for (Ring ring : rings) { partitionAssigner.prepare(ring, domainGroup.getDomainVersions(), ringGroup.getRingGroupConductorMode()); for (Host host : ring.getHostsSorted()) { manageTransitions(ringCount, host, domainGroup, domainToPartitionToHostsFullyServing, domainPartitionBucketHostCounts); } } }
protected RingGroupData getRingGroupData(RingGroup ringGroup) throws IOException { RingGroupData data = new RingGroupData(); data.name = ringGroup.getName(); data.isRingGroupConductorOnline = ringGroup.isRingGroupConductorOnline(); data.ringGroupConductorMode = ringGroup.getRingGroupConductorMode(); data.domainGroupName = ringGroup.getDomainGroup().getName(); ServingStatus servingStatus = RingGroups.computeServingStatusAggregator(ringGroup, ringGroup.getDomainGroup()).computeServingStatus(); data.numPartitions = servingStatus.getNumPartitions(); data.numPartitionsServedAndUpToDate = servingStatus.getNumPartitionsServedAndUpToDate(); Map<Integer, RingData> ringsMap = new HashMap<Integer, RingData>(); for (Ring ring : ringGroup.getRings()) { ringsMap.put(ring.getRingNumber(), getRingData(ring)); } data.ringsMap = ringsMap; data.clients = Maps.newHashMap(); for (ClientMetadata clientData : ringGroup.getClients()) { data.clients.put(clientData.get_host(), new ConnectedHostData( clientData.get_host(), Long.toString(clientData.get_connected_at()), clientData.get_type(), clientData.get_version() )); } return data; }
private boolean isInUse(Domain domain) throws IOException { String domainName = domain.getName(); for (RingGroup rg : coordinator.getRingGroups()) { for (Ring ring : rg.getRings()) { for (Host host : ring.getHosts()) { for (HostDomain hostDomain : host.getAssignedDomains()) { if(hostDomain.getDomain().getName().equals(domainName)){ return true; } } } } DomainGroup dg = rg.getDomainGroup(); for (Domain dgd : dg.getDomains()) { if(dgd.getName().equals(domainName)){ return true; } } } return false; }
ringGroup.getDomainGroup().getDomainVersion(domain);
DomainGroup domainGroup = ring.getRingGroup().getDomainGroup(); if (domainGroup == null) { throw new IOException(String.format("Could not get DomainGroup of Ring %s", ring));