opendj-server-legacy/src/main/java/org/opends/admin/ads/ReplicaDescriptor.java
@@ -19,6 +19,8 @@ import java.util.HashSet; import java.util.Set; import org.opends.server.types.HostPort; /** * The object of this class represent a Replica, i.e. a suffix in a given server instance. * <p> @@ -30,7 +32,7 @@ /** Number of entries held by this replica. */ private int nbEntries = -1; private ServerDescriptor server; private final Set<String> replicationServers = new HashSet<>(); private final Set<HostPort> replicationServers = new HashSet<>(); /** This corresponds to the server-id of this replica. */ private int replicationId = -1; private int missingChanges = -1; @@ -125,7 +127,7 @@ * @return a set containing the String representation of the replication * servers that are defined in the replication domain for this replica. */ public Set<String> getReplicationServers() public Set<HostPort> getReplicationServers() { return new HashSet<>(replicationServers); } @@ -137,7 +139,7 @@ * representation) that are defined in the replication domain for this * replica. */ public void setReplicationServers(Set<String> replicationServers) public void setReplicationServers(Set<HostPort> replicationServers) { this.replicationServers.clear(); this.replicationServers.addAll(replicationServers); opendj-server-legacy/src/main/java/org/opends/admin/ads/ServerDescriptor.java
@@ -200,7 +200,7 @@ * on the information we have ("hostname":"replication port") and * {@code null} if this is not a replication server. */ public String getReplicationServerHostPort() public HostPort getReplicationServerHostPort() { return isReplicationServer() ? getReplicationServer(getHostName(), getReplicationServerPort()) : null; } @@ -270,7 +270,7 @@ */ public HostPort getLdapHostPort() { return getHostPort0(ServerProperty.LDAP_ENABLED, ServerProperty.LDAP_PORT, false); return getHostPort(getLdapPort(-1)); } /** @@ -280,26 +280,7 @@ */ public HostPort getLdapsHostPort() { return getHostPort0(ServerProperty.LDAPS_ENABLED, ServerProperty.LDAPS_PORT, true); } private HostPort getHostPort0(ServerProperty enabledProp, ServerProperty portProp, boolean useSSL) { int port = getPort(enabledProp, portProp); if (port != -1) { return new HostPort(getHostName(), port); } return null; } private int getPort(ServerProperty enabledProp, ServerProperty portProp) { if (!serverProperties.isEmpty()) { return getPort(enabledProp, portProp, -1); } return -1; return getHostPort(getLdapsPort(-1)); } /** @@ -309,7 +290,12 @@ */ public HostPort getAdminConnectorHostPort() { return getHostPort0(ServerProperty.ADMIN_ENABLED, ServerProperty.ADMIN_PORT, true); return getHostPort(getAdminPort(-1)); } private HostPort getHostPort(final int port) { return port != -1 ? new HostPort(getHostName(), port) : null; } /** @@ -854,16 +840,17 @@ private static void updateReplication(ServerDescriptor desc, ConnectionWrapper conn, TopologyCacheFilter cacheFilter) throws IOException { final Map<ServerProperty, Object> serverProps = desc.serverProperties; SearchRequest request = newSearchRequest( "cn=Multimaster Synchronization,cn=Synchronization Providers,cn=config", WHOLE_SUBTREE, "(objectclass=ds-cfg-synchronization-provider)", "ds-cfg-enabled"); SearchResultEntry sre = conn.getConnection().searchSingleEntry(request); Boolean replicationEnabled = asBoolean(sre, "ds-cfg-enabled"); desc.serverProperties.put(ServerProperty.IS_REPLICATION_ENABLED, replicationEnabled); serverProps.put(ServerProperty.IS_REPLICATION_ENABLED, asBoolean(sre, "ds-cfg-enabled")); Set<String> allReplicationServers = new LinkedHashSet<>(); Set<HostPort> allReplicationServers = new LinkedHashSet<>(); if (cacheFilter.searchBaseDNInformation()) { @@ -882,7 +869,7 @@ SearchResultEntry sr = entryReader.readEntry(); int id = asInteger(sr, "ds-cfg-server-id"); Set<String> replicationServers = asSetOfString(sr, "ds-cfg-replication-server"); Set<HostPort> replicationServers = toHostPorts(asSetOfString(sr, "ds-cfg-replication-server")); Set<DN> dns = asSetOfDN(sr, "ds-cfg-base-dn"); for (DN dn : dns) { @@ -891,9 +878,8 @@ if (replica.getSuffix().getDN().equals(dn)) { replica.setReplicationId(id); LinkedHashSet<String> repServers = toLowercase(replicationServers); replica.setReplicationServers(repServers); allReplicationServers.addAll(repServers); replica.setReplicationServers(replicationServers); allReplicationServers.addAll(replicationServers); } } } @@ -901,7 +887,7 @@ } } desc.serverProperties.put(ServerProperty.IS_REPLICATION_SERVER, Boolean.FALSE); serverProps.put(ServerProperty.IS_REPLICATION_SERVER, Boolean.FALSE); request = newSearchRequest( "cn=Multimaster Synchronization,cn=Synchronization Providers,cn=config", @@ -917,32 +903,25 @@ { SearchResultEntry sr = entryReader.readEntry(); desc.serverProperties.put(ServerProperty.IS_REPLICATION_SERVER, Boolean.TRUE); Integer port = asInteger(sr, "ds-cfg-replication-port"); desc.serverProperties.put(ServerProperty.REPLICATION_SERVER_PORT, port); Integer serverId = asInteger(sr, "ds-cfg-replication-server-id"); desc.serverProperties.put(ServerProperty.REPLICATION_SERVER_ID, serverId); LinkedHashSet<String> repServers = toLowercase(asSetOfString(sr, "ds-cfg-replication-server")); allReplicationServers.addAll(repServers); desc.serverProperties.put(ServerProperty.EXTERNAL_REPLICATION_SERVERS, allReplicationServers); serverProps.put(ServerProperty.IS_REPLICATION_SERVER, Boolean.TRUE); serverProps.put(ServerProperty.REPLICATION_SERVER_PORT, asInteger(sr, "ds-cfg-replication-port")); serverProps.put(ServerProperty.REPLICATION_SERVER_ID, asInteger(sr, "ds-cfg-replication-server-id")); allReplicationServers.addAll(toHostPorts(asSetOfString(sr, "ds-cfg-replication-server"))); serverProps.put(ServerProperty.EXTERNAL_REPLICATION_SERVERS, allReplicationServers); } } Boolean replicationSecure = isReplicationSecure(conn, replicationEnabled); desc.serverProperties.put(ServerProperty.IS_REPLICATION_SECURE, replicationSecure); serverProps.put(ServerProperty.IS_REPLICATION_SECURE, isReplicationSecure(conn, asBoolean(sre, "ds-cfg-enabled"))); } /** * Keep the values of the replication servers in lower case to make use of Sets as String simpler. */ private static LinkedHashSet<String> toLowercase(Set<String> values) private static Set<HostPort> toHostPorts(Set<String> hostPorts) { LinkedHashSet<String> repServers = new LinkedHashSet<>(); for (String s: values) final LinkedHashSet<HostPort> results = new LinkedHashSet<>(); for (String hostPort : hostPorts) { repServers.add(s.toLowerCase()); results.add(HostPort.valueOf(hostPort)); } return repServers; return results; } private static boolean isReplicationSecure(ConnectionWrapper conn, boolean replicationEnabled) throws IOException @@ -1142,9 +1121,9 @@ * @return the replication server normalized String for a given host name * and replication port. */ public static String getReplicationServer(String hostName, int replicationPort) public static HostPort getReplicationServer(String hostName, int replicationPort) { return HostPort.toString(hostName, replicationPort); return new HostPort(hostName, replicationPort); } /** opendj-server-legacy/src/main/java/org/opends/admin/ads/SuffixDescriptor.java
@@ -21,6 +21,7 @@ import java.util.TreeSet; import org.forgerock.opendj.ldap.DN; import org.opends.server.types.HostPort; /** * The object of this class represent a topology of replicas across servers that @@ -95,9 +96,9 @@ * * @return the Set of Replication servers for the whole suffix topology. */ public Set<String> getReplicationServers() public Set<HostPort> getReplicationServers() { Set<String> replicationServers = new HashSet<>(); Set<HostPort> replicationServers = new HashSet<>(); for (ReplicaDescriptor replica : getReplicas()) { replicationServers.addAll(replica.getReplicationServers()); opendj-server-legacy/src/main/java/org/opends/admin/ads/TopologyCache.java
@@ -171,8 +171,7 @@ { for (SuffixDescriptor suffix : sufs) { Set<String> rssInSuffix = suffix.getReplicationServers(); for (String replicationServer : rssInSuffix) for (HostPort replicationServer : suffix.getReplicationServers()) { if (replica.getReplicationServers().contains(replicationServer)) { @@ -256,10 +255,10 @@ { Set<ReplicaDescriptor> candidateReplicas = new HashSet<>(); // It contains replication information: analyze it. String repServer = server.getReplicationServerHostPort(); HostPort repServer = server.getReplicationServerHostPort(); for (SuffixDescriptor suffix : getSuffixes()) { if (containsIgnoreCase(suffix.getReplicationServers(), repServer)) if (suffix.getReplicationServers().contains(repServer)) { candidateReplicas.addAll(suffix.getReplicas()); } @@ -267,18 +266,6 @@ return candidateReplicas; } private boolean containsIgnoreCase(Set<String> col, String toFind) { for (String s : col) { if (s.equalsIgnoreCase(toFind)) { return true; } } return false; } /** * Sets the list of LDAP URLs and connection type that are preferred to be * used to connect to the servers. When we have a server to which we can opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/UninstallCliHelper.java
@@ -212,14 +212,12 @@ try { UninstallData d = new UninstallData(Installation.getLocal()); userData.setReplicationServer( referencedHostName+":"+d.getReplicationServerPort()); userData.setReplicationServer(new HostPort(referencedHostName, d.getReplicationServerPort())); } catch (Throwable t) { logger.error(LocalizableMessage.raw("Could not create UninstallData: "+t, t)); userData.setReplicationServer( referencedHostName+":8989"); userData.setReplicationServer(new HostPort(referencedHostName, 8989)); } info = ControlPanelInfo.getInstance(); info.setTrustManager(userData.getTrustManager()); @@ -877,8 +875,7 @@ try { UninstallData d = new UninstallData(Installation.getLocal()); userData.setReplicationServer( referencedHostName+":"+d.getReplicationServerPort()); userData.setReplicationServer(new HostPort(referencedHostName, d.getReplicationServerPort())); userData.setReferencedHostName(referencedHostName); } catch (Throwable t) opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/UninstallUserData.java
@@ -42,7 +42,7 @@ private HostPort localServerHostPort; private boolean localServerSecure; private Set<ServerDescriptor> remoteServers = new HashSet<>(); private String replicationServer; private HostPort replicationServer; private String referencedHostName; /** @@ -280,7 +280,7 @@ * Returns the replication server as referenced in other servers. * @return the replication server as referenced in other servers. */ public String getReplicationServer() { public HostPort getReplicationServer() { return replicationServer; } @@ -289,7 +289,7 @@ * @param replicationServer the replication server as referenced in other * servers. */ public void setReplicationServer(String replicationServer) { public void setReplicationServer(HostPort replicationServer) { this.replicationServer = replicationServer; } opendj-server-legacy/src/main/java/org/opends/guitools/uninstaller/Uninstaller.java
@@ -41,11 +41,13 @@ import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.config.ConfigurationFramework; import org.forgerock.opendj.config.ManagedObjectNotFoundException; import org.forgerock.opendj.config.OperationsException; import org.forgerock.opendj.config.client.OperationRejectedException; import org.forgerock.opendj.ldap.DN; import org.forgerock.opendj.ldap.LdapException; import org.forgerock.opendj.server.config.client.ReplicationDomainCfgClient; import org.forgerock.opendj.server.config.client.ReplicationServerCfgClient; import org.forgerock.opendj.server.config.client.ReplicationSynchronizationProviderCfgClient; import org.forgerock.opendj.server.config.client.RootCfgClient; import org.opends.admin.ads.ADSContext; import org.opends.admin.ads.ADSContextException; import org.opends.admin.ads.ReplicaDescriptor; @@ -1454,14 +1456,15 @@ loginDialog.setVisible(true); if (!loginDialog.isCanceled()) { getUninstallUserData().setAdminUID(loginDialog.getAdministratorUid()); getUninstallUserData().setAdminPwd(loginDialog.getAdministratorPwd()); final UninstallUserData uData = getUninstallUserData(); uData.setAdminUID(loginDialog.getAdministratorUid()); uData.setAdminPwd(loginDialog.getAdministratorPwd()); final ConnectionWrapper conn = loginDialog.getConnection(); getUninstallUserData().setLocalServer(conn.getHostPort(), conn.isLdaps()); getUninstallUserData().setReplicationServer( loginDialog.getHostName() + ":" + conf.getReplicationServerPort()); getUninstallUserData().setReferencedHostName(loginDialog.getHostName()); uData.setLocalServer(conn.getHostPort(), conn.isLdaps()); uData.setReplicationServer(new HostPort( loginDialog.getHostName(), conf.getReplicationServerPort())); uData.setReferencedHostName(loginDialog.getHostName()); BackgroundTask<TopologyCache> worker = new BackgroundTask<TopologyCache>() { @@ -1756,39 +1759,38 @@ * @throws ApplicationException if we are not working on force on error mode * and there is an error. */ private void removeReferences(ServerDescriptor server, Map<ADSContext.ServerProperty, Object> serverADSProperties) throws ApplicationException private void removeReferences(ServerDescriptor server, Map<ADSContext.ServerProperty, Object> serverADSProperties) throws ApplicationException { /* First check if the server must be updated based in the contents of the * ServerDescriptor object. */ UninstallUserData uData = getUninstallUserData(); String rsUrl = uData.getReplicationServer(); if (!isReferenced(server.getServerProperties(), rsUrl) && !isReferenced(server.getReplicas(), rsUrl)) HostPort rsHp = uData.getReplicationServer(); HostPort serverHostPort = server.getHostPort(true); if (!isReferenced(server.getServerProperties(), rsHp) && !isReferenced(server.getReplicas(), rsHp)) { logger.info(LocalizableMessage.raw("No references in: " + server.getHostPort(true))); logger.info(LocalizableMessage.raw("No references in: " + serverHostPort)); return; } logger.info(LocalizableMessage.raw("Updating references in: " + server.getHostPort(true))); notifyListeners(getFormattedWithPoints(INFO_PROGRESS_REMOVING_REFERENCES.get(server.getHostPort(true)))); logger.info(LocalizableMessage.raw("Updating references in: " + serverHostPort)); notifyListeners(getFormattedWithPoints(INFO_PROGRESS_REMOVING_REFERENCES.get(serverHostPort))); DN dn = ADSContext.getAdministratorDN(uData.getAdminUID()); String pwd = uData.getAdminPwd(); try (ConnectionWrapper connWrapper = getRemoteConnection(server, dn, pwd, getConnectTimeout(), new LinkedHashSet<PreferredConnection>())) { // Update replication servers and domains. If the domain // is an ADS, then remove it from there. removeReferences(connWrapper, server.getHostPort(true), serverADSProperties); // Update replication servers and domains. If the domain is an ADS, then remove it from there. removeReferences(connWrapper, serverHostPort, serverADSProperties); notifyListeners(getFormattedDoneWithLineBreak()); } catch (ApplicationException ae) { errorOnRemoteOccurred = true; logger.info(LocalizableMessage.raw("Error updating replication references in: " + server.getHostPort(true), ae)); logger.info(LocalizableMessage.raw("Error updating replication references in: " + serverHostPort, ae)); if (!uData.isForceOnError()) { @@ -1805,40 +1807,26 @@ } } private boolean isReferenced(Map<ServerProperty, Object> serverProperties, String toFind) private boolean isReferenced(Map<ServerProperty, Object> serverProperties, HostPort toFind) { Object v = serverProperties.get(ServerDescriptor.ServerProperty.IS_REPLICATION_SERVER); if (Boolean.TRUE.equals(v)) { Set<?> replicationServers = (Set<?>) Set<HostPort> replicationServers = (Set) serverProperties.get(ServerDescriptor.ServerProperty.EXTERNAL_REPLICATION_SERVERS); if (replicationServers != null) { for (Object rsUrl : replicationServers) { if (toFind.equalsIgnoreCase((String) rsUrl)) { return true; } } } return replicationServers != null && replicationServers.contains(toFind); } return false; } private boolean isReferenced(Set<ReplicaDescriptor> replicas, String toFind) private boolean isReferenced(Set<ReplicaDescriptor> replicas, HostPort toFind) { for (ReplicaDescriptor replica : replicas) { if (replica.isReplicated()) if (replica.isReplicated() && replica.getReplicationServers().contains(toFind)) { for (String rsUrl : replica.getReplicationServers()) { if (toFind.equalsIgnoreCase(rsUrl)) { return true; } } return true; } } return false; @@ -1848,95 +1836,37 @@ * This method updates the replication in the remote server using the provided connection. * It also tries to delete the server registration entry from the remote ADS * servers if the serverADSProperties object passed is not null. * * @param connWrapper the connection to the remote server where we want to remove * references to the server that we are trying to uninstall. * @param serverDisplay an String representation that is used to identify * the remote server in the log messages we present to the user. * @param serverToUpdate the server where to remove references to the remote server * @param serverADSProperties the Map with the ADS properties of the server * that we are trying to uninstall. * @throws ApplicationException if an error occurs while updating the remote * OpenDS server configuration. */ private void removeReferences(ConnectionWrapper connWrapper, HostPort serverDisplay, Map<ADSContext.ServerProperty, Object> serverADSProperties) throws ApplicationException private void removeReferences(ConnectionWrapper connWrapper, HostPort serverToUpdate, Map<ADSContext.ServerProperty, Object> serverADSProperties) throws ApplicationException { try { RootCfgClient root = connWrapper.getRootConfiguration(); ReplicationSynchronizationProviderCfgClient sync = (ReplicationSynchronizationProviderCfgClient) root.getSynchronizationProvider("Multimaster Synchronization"); if (sync.hasReplicationServer()) { ReplicationServerCfgClient replicationServer = sync.getReplicationServer(); Set<String> replServers = replicationServer.getReplicationServer(); if (replServers != null) { String replServer = findReplicationServer(replServers); if (replServer != null) { logger.info(LocalizableMessage.raw("Updating references in replication server on "+ serverDisplay+".")); replServers.remove(replServer); if (!replServers.isEmpty()) { replicationServer.setReplicationServer(replServers); replicationServer.commit(); } else { sync.removeReplicationServer(); sync.commit(); } } } } String[] domainNames = sync.listReplicationDomains(); if (domainNames != null) { for (String domainName : domainNames) { ReplicationDomainCfgClient domain = sync.getReplicationDomain(domainName); Set<String> replServers = domain.getReplicationServer(); if (replServers != null) { String replServer = findReplicationServer(replServers); if (replServer != null) { logger.info(LocalizableMessage.raw("Updating references in domain " + domain.getBaseDN()+" on " + serverDisplay + ".")); replServers.remove(replServer); if (!replServers.isEmpty()) { domain.setReplicationServer(replServers); domain.commit(); } else { sync.removeReplicationDomain(domainName); sync.commit(); } } } } } ReplicationSynchronizationProviderCfgClient sync = (ReplicationSynchronizationProviderCfgClient) connWrapper.getRootConfiguration().getSynchronizationProvider("Multimaster Synchronization"); removeReferenceInReplicatonServer(sync, serverToUpdate); removeReferenceInReplicationDomain(sync, serverToUpdate); } catch (ManagedObjectNotFoundException monfe) { // It does not exist. logger.info(LocalizableMessage.raw("No synchronization found on "+ serverDisplay+".", monfe)); logger.info(LocalizableMessage.raw("No synchronization found on " + serverToUpdate + ".", monfe)); } catch (Throwable t) { logger.warn(LocalizableMessage.raw( "Error removing references in replication server on "+ serverDisplay+": "+t, t)); serverToUpdate+": "+t, t)); LocalizableMessage errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get( serverDisplay, t); serverToUpdate, t); throw new ApplicationException( ReturnCode.CONFIGURATION_ERROR, errorMessage, t); } @@ -1958,7 +1888,7 @@ { throw new ApplicationException( ReturnCode.CONFIGURATION_ERROR, INFO_REMOTE_ADS_EXCEPTION.get(serverDisplay, ace), INFO_REMOTE_ADS_EXCEPTION.get(serverToUpdate, ace), ace); } else @@ -1970,16 +1900,78 @@ } } private String findReplicationServer(Set<String> replServers) private void removeReferenceInReplicatonServer(ReplicationSynchronizationProviderCfgClient sync, HostPort serverToUpdate) throws OperationsException, LdapException, OperationRejectedException { for (String s : replServers) if (sync.hasReplicationServer()) { if (getUninstallUserData().getReplicationServer().equalsIgnoreCase(s)) final ReplicationServerCfgClient replicationServer = sync.getReplicationServer(); final Set<String> replServers = replicationServer.getReplicationServer(); if (removeReplicationServer(replServers)) { return s; logger.info(LocalizableMessage.raw("Updating references in replication server on " + serverToUpdate + ".")); if (!replServers.isEmpty()) { replicationServer.setReplicationServer(replServers); replicationServer.commit(); } else { sync.removeReplicationServer(); sync.commit(); } } } return null; } private void removeReferenceInReplicationDomain(ReplicationSynchronizationProviderCfgClient sync, HostPort serverToUpdate) throws OperationsException, LdapException, OperationRejectedException { final String[] domainNames = sync.listReplicationDomains(); if (domainNames == null) { return; } for (String domainName : domainNames) { final ReplicationDomainCfgClient domain = sync.getReplicationDomain(domainName); final Set<String> replServers = domain.getReplicationServer(); if (removeReplicationServer(replServers)) { logger.info(LocalizableMessage.raw( "Updating references in domain " + domain.getBaseDN() + " on " + serverToUpdate + ".")); if (!replServers.isEmpty()) { domain.setReplicationServer(replServers); domain.commit(); } else { sync.removeReplicationDomain(domainName); sync.commit(); } } } } private boolean removeReplicationServer(Set<String> replServers) { if (replServers == null) { return false; } final String toFind = getUninstallUserData().getReplicationServer().toString(); for (Iterator<String> it = replServers.iterator(); it.hasNext();) { final String rs = it.next(); if (toFind.equalsIgnoreCase(rs)) { it.remove(); return true; } } return false; } /** opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/Installer.java
@@ -2009,13 +2009,13 @@ * as the set of ADS suffix replicas (all instances hosting the replication * server also replicate ADS). */ Map<DN, Set<String>> replicationServers = new HashMap<>(); Set<String> adsServers = new HashSet<>(); Map<DN, Set<HostPort>> replicationServers = new HashMap<>(); Set<HostPort> adsServers = new HashSet<>(); if (getUserData().getReplicationOptions().getType() == DataReplicationOptions.Type.FIRST_IN_TOPOLOGY) { List<String> baseDns = getUserData().getNewSuffixOptions().getBaseDns(); Set<String> h = new HashSet<>(); Set<HostPort> h = new HashSet<>(); h.add(getLocalReplicationServer()); adsServers.add(getLocalReplicationServer()); for (String dnStr : baseDns) @@ -2028,7 +2028,7 @@ Set<SuffixDescriptor> suffixes = getUserData().getSuffixesToReplicateOptions().getSuffixes(); for (SuffixDescriptor suffix : suffixes) { Set<String> h = new HashSet<>(suffix.getReplicationServers()); Set<HostPort> h = new HashSet<>(suffix.getReplicationServers()); adsServers.addAll(suffix.getReplicationServers()); h.add(getLocalReplicationServer()); adsServers.add(getLocalReplicationServer()); @@ -2038,7 +2038,7 @@ AuthenticationData repPort = getUserData().getRemoteWithNoReplicationPort().get(server); if (repPort != null) { String serverDisplay = server.getHostName() + ":" + repPort.getPort(); HostPort serverDisplay = new HostPort(server.getHostName(), repPort.getPort()); h.add(serverDisplay); adsServers.add(serverDisplay); } @@ -2047,7 +2047,7 @@ } } replicationServers.put(ADSContext.getAdministrationSuffixDN(), adsServers); replicationServers.put(Constants.SCHEMA_DN, new HashSet<String>(adsServers)); replicationServers.put(Constants.SCHEMA_DN, new HashSet<HostPort>(adsServers)); long localTime = -1; long localTimeMeasureTime = -1; @@ -2120,10 +2120,10 @@ } dns.add(ADSContext.getAdministrationSuffixDN()); dns.add(Constants.SCHEMA_DN); Map<DN, Set<String>> remoteReplicationServers = new HashMap<>(); Map<DN, Set<HostPort>> remoteReplicationServers = new HashMap<>(); for (DN dn : dns) { Set<String> repServer = replicationServers.get(dn); Set<HostPort> repServer = replicationServers.get(dn); if (repServer == null) { // Do the comparison manually @@ -4375,9 +4375,10 @@ return getPath(getInstallation().getCurrentConfigurationFile()); } private String getLocalReplicationServer() private HostPort getLocalReplicationServer() { return getUserData().getHostName() + ":" + getUserData().getReplicationOptions().getReplicationPort(); final UserData uData = getUserData(); return new HostPort(uData.getHostName(), uData.getReplicationOptions().getReplicationPort()); } private void resetGenerationId(ConnectionWrapper conn, DN suffixDn, HostPort sourceServerDisplay) opendj-server-legacy/src/main/java/org/opends/quicksetup/installer/InstallerHelper.java
@@ -22,6 +22,7 @@ import static org.opends.messages.QuickSetupMessages.*; import static org.opends.quicksetup.Installation.*; import static org.opends.server.types.ExistingFileBehavior.*; import static org.opends.server.types.HostPort.*; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -78,6 +79,7 @@ import org.opends.server.tools.ConfigureDS; import org.opends.server.tools.ConfigureWindowsService; import org.opends.server.tools.JavaPropertiesTool; import org.opends.server.types.HostPort; import org.opends.server.types.LDIFExportConfig; import org.opends.server.types.OpenDsException; import org.opends.server.util.LDIFException; @@ -371,7 +373,7 @@ * @return a ConfiguredReplication object describing what has been configured. */ public ConfiguredReplication configureReplication( ConnectionWrapper conn, Map<DN, Set<String>> replicationServers, ConnectionWrapper conn, Map<DN, Set<HostPort>> replicationServers, int replicationPort, boolean useSecureReplication, Set<Integer> usedReplicationServerIds, Set<Integer> usedServerIds) throws ApplicationException @@ -476,9 +478,9 @@ servers = new HashSet<>(); } Set<String> oldServers = new HashSet<>(servers); for (Set<String> rs : replicationServers.values()) for (Set<HostPort> rs : replicationServers.values()) { servers.addAll(rs); servers.addAll(toLowerCaseStrings(rs)); } replicationServer.setReplicationServer(servers); @@ -535,15 +537,13 @@ { oldServers = new TreeSet<>(); } servers = replicationServers.get(dn); servers = toLowerCaseStrings(replicationServers.get(dn)); domain.setReplicationServer(servers); usedServerIds.add(domain.getServerId()); domain.commit(); Set<String> addedServers = intersect(servers, oldServers); ConfiguredDomain domainConf = new ConfiguredDomain(domainName, isCreated, addedServers); domainsConf.add(domainConf); domainsConf.add(new ConfiguredDomain(domainName, isCreated, addedServers)); } return new ConfiguredReplication(synchProviderCreated, synchProviderEnabled, replicationServerCreated, opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java
@@ -37,6 +37,7 @@ import static org.opends.server.backends.task.TaskState.*; import static org.opends.server.tools.dsreplication.ReplicationCliArgumentParser.*; import static org.opends.server.tools.dsreplication.ReplicationCliReturnCode.*; import static org.opends.server.types.HostPort.*; import static org.opends.server.util.StaticUtils.*; import java.io.BufferedWriter; @@ -57,6 +58,7 @@ import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Set; @@ -3520,18 +3522,17 @@ * replicated using the replication server and replication port information * and {@code false} otherwise. */ private boolean areFullyReplicated(ReplicaDescriptor rep1, ReplicaDescriptor rep2) private boolean areFullyReplicated(ReplicaDescriptor rep1, ReplicaDescriptor rep2) { if (rep1.getSuffix().getDN().equals(rep2.getSuffix().getDN()) && rep1.isReplicated() && rep2.isReplicated() && rep1.getServer().isReplicationServer() && rep2.getServer().isReplicationServer()) { Set<String> servers1 = rep1.getReplicationServers(); Set<String> servers2 = rep2.getReplicationServers(); String server1 = rep1.getServer().getReplicationServerHostPort(); String server2 = rep2.getServer().getReplicationServerHostPort(); Set<HostPort> servers1 = rep1.getReplicationServers(); Set<HostPort> servers2 = rep2.getReplicationServers(); HostPort server1 = rep1.getServer().getReplicationServerHostPort(); HostPort server2 = rep2.getServer().getReplicationServerHostPort(); return servers1.contains(server2) && servers2.contains(server1); } return false; @@ -3543,16 +3544,16 @@ * have at least one common replication server referenced. * @param rep1 the first replica. * @param rep2 the second replica. * @return {@code true} if we can assure that the two replicas are * replicated and {@code false} otherwise. * @return {@code true} if we can assure that the two replicas are replicated, * {@code false} otherwise. */ private boolean areReplicated(ReplicaDescriptor rep1, ReplicaDescriptor rep2) { if (rep1.getSuffix().getDN().equals(rep2.getSuffix().getDN()) && rep1.isReplicated() && rep2.isReplicated()) { Set<String> servers1 = rep1.getReplicationServers(); Set<String> servers2 = rep2.getReplicationServers(); Set<HostPort> servers1 = rep1.getReplicationServers(); Set<HostPort> servers2 = rep2.getReplicationServers(); servers1.retainAll(servers2); return !servers1.isEmpty(); } @@ -4792,15 +4793,15 @@ ERROR_READING_TOPOLOGY_CACHE, tce); } final Set<String> twoReplServers = new LinkedHashSet<>(); final Set<HostPort> twoReplServers = new LinkedHashSet<>(); addToSets(serverDesc1, uData.getServer1(), conn1, twoReplServers, usedReplicationServerIds); addToSets(serverDesc2, uData.getServer2(), conn2, twoReplServers, usedReplicationServerIds); final Map<DN, Set<String>> hmRepServers = new HashMap<>(); final Map<DN, Set<HostPort>> hmRepServers = new HashMap<>(); final Map<DN, Set<Integer>> hmUsedReplicationDomainIds = new HashMap<>(); for (DN baseDN : uData.getBaseDNs()) { Set<String> repServersForBaseDN = new LinkedHashSet<>(); Set<HostPort> repServersForBaseDN = new LinkedHashSet<>(); repServersForBaseDN.addAll(getReplicationServers(baseDN, cache1, serverDesc1)); repServersForBaseDN.addAll(getReplicationServers(baseDN, cache2, serverDesc2)); repServersForBaseDN.addAll(twoReplServers); @@ -4826,8 +4827,8 @@ hmUsedReplicationDomainIds.put(baseDN, ids); } final Set<String> allRepServers = new LinkedHashSet<>(); for (Set<String> v : hmRepServers.values()) final Set<HostPort> allRepServers = new LinkedHashSet<>(); for (Set<HostPort> v : hmRepServers.values()) { allRepServers.addAll(v); } @@ -4842,7 +4843,7 @@ for (DN baseDN : uData.getBaseDNs()) { Set<String> repServers = hmRepServers.get(baseDN); Set<HostPort> repServers = hmRepServers.get(baseDN); Set<Integer> usedIds = hmUsedReplicationDomainIds.get(baseDN); Set<String> alreadyConfiguredServers = new HashSet<>(); @@ -5031,7 +5032,7 @@ } private void addToSets(ServerDescriptor serverDesc, EnableReplicationServerData serverData, ConnectionWrapper conn, final Set<String> twoReplServers, final Set<Integer> usedReplicationServerIds) final Set<HostPort> twoReplServers, final Set<Integer> usedReplicationServerIds) { if (serverDesc.isReplicationServer()) { @@ -5046,7 +5047,7 @@ private void configureToReplicateBaseDN(EnableReplicationServerData server, ConnectionWrapper conn, ServerDescriptor serverDesc, TopologyCache cache, DN baseDN, Set<Integer> usedIds, Set<String> alreadyConfiguredServers, Set<String> repServers, final Set<String> allRepServers, Set<String> alreadyConfiguredServers, Set<HostPort> repServers, final Set<HostPort> allRepServers, Set<String> alreadyConfiguredReplicationServers) throws ReplicationCliException { if (server.configureReplicationDomain() @@ -5073,7 +5074,7 @@ private void configureServer(ConnectionWrapper conn, ServerDescriptor serverDesc, EnableReplicationServerData enableServer, IntegerArgument replicationPortArg, Set<Integer> usedReplicationServerIds, Set<String> allRepServers, Set<Integer> usedReplicationServerIds, Set<HostPort> allRepServers, Set<String> alreadyConfiguredReplicationServers, Arg2<Number, Number> replicationServerAlreadyConfiguredMsg) throws ReplicationCliException { @@ -5223,7 +5224,7 @@ && (uData.disableReplicationServer() || uData.disableAll()); if (cache != null && disableReplicationServer) { String replicationServer = server.getReplicationServerHostPort(); HostPort replicationServer = server.getReplicationServerHostPort(); // Figure out if this is the last replication server for a given // topology (containing a different replica) or there will be only // another replication server left (single point of failure). @@ -5238,9 +5239,9 @@ continue; } Set<String> repServers = suffix.getReplicationServers(); Set<HostPort> repServers = suffix.getReplicationServers(); if (repServers.size() <= 2 && containsIgnoreCase(repServers, replicationServer)) && repServers.contains(replicationServer)) { if (repServers.size() == 2) { @@ -5423,8 +5424,7 @@ } } String replicationServerHostPort = server.isReplicationServer() ? server.getReplicationServerHostPort() : null; HostPort replicationServerHostPort = server.getReplicationServerHostPort(); for (DN baseDN : suffixesToDisable) { @@ -5460,7 +5460,7 @@ // Find references in all servers. for (SuffixDescriptor suffix : cache.getSuffixes()) { if (containsIgnoreCase(suffix.getReplicationServers(), replicationServerHostPort)) if (suffix.getReplicationServers().contains(replicationServerHostPort)) { baseDNsToUpdate.add(suffix.getDN()); for (ReplicaDescriptor replica : suffix.getReplicas()) @@ -5474,7 +5474,7 @@ String pwd = conn.getBindPassword(); for (ServerDescriptor s : serversToUpdate) { removeReferencesInServer(s, replicationServerHostPort, bindDn, pwd, removeReferencesInServer(s, replicationServerHostPort.toString(), bindDn, pwd, baseDNsToUpdate, disableReplicationServer, getPreferredConnections(conn)); } @@ -5973,12 +5973,12 @@ { boolean isDomain = false; boolean isRepServer = false; String replicationServer = server.getReplicationServerHostPort(); HostPort replicationServer = server.getReplicationServerHostPort(); for (ReplicaDescriptor replica : replicas) { if (!isRepServer) { isRepServer = containsIgnoreCase(replica.getReplicationServers(), replicationServer); isRepServer = isRepServer || replica.getReplicationServers().contains(replicationServer); } if (replica.getServer() == server) { @@ -6064,21 +6064,21 @@ * to replicate the baseDN defined in the server described by the * ServerDescriptor. */ private Set<String> getReplicationServers(DN baseDN, TopologyCache cache, ServerDescriptor server) private Set<HostPort> getReplicationServers(DN baseDN, TopologyCache cache, ServerDescriptor server) { Set<String> servers = getAllReplicationServers(baseDN, server); Set<HostPort> servers = getAllReplicationServers(baseDN, server); if (cache != null) { for (SuffixDescriptor suffix : cache.getSuffixes()) { if (suffix.getDN().equals(baseDN)) { Set<String> s = suffix.getReplicationServers(); Set<HostPort> s = suffix.getReplicationServers(); // Test that at least we share one of the replication servers. // If we do: we are dealing with the same replication topology // (we must consider the case of disjoint replication topologies // replicating the same base DN). Set<String> copy = new HashSet<>(s); Set<HostPort> copy = new HashSet<>(s); copy.retainAll(servers); if (!copy.isEmpty()) { @@ -6086,7 +6086,7 @@ break; } else if (server.isReplicationServer() && containsIgnoreCase(s, server.getReplicationServerHostPort())) && s.contains(server.getReplicationServerHostPort())) { // this server is acting as replication server with no domain. servers.addAll(s); @@ -6098,18 +6098,6 @@ return servers; } private boolean containsIgnoreCase(Set<String> col, String toFind) { for (String s : col) { if (s.equalsIgnoreCase(toFind)) { return true; } } return false; } private String findIgnoreCase(Set<String> col, String toFind) { for (String s : col) @@ -6133,30 +6121,26 @@ */ private SuffixDescriptor getSuffix(DN baseDN, TopologyCache cache, ServerDescriptor server) { String replicationServer = null; if (server.isReplicationServer()) { replicationServer = server.getReplicationServerHostPort(); } final HostPort replicationServer = server.getReplicationServerHostPort(); SuffixDescriptor returnValue = null; Set<String> servers = getAllReplicationServers(baseDN, server); Set<HostPort> servers = getAllReplicationServers(baseDN, server); for (SuffixDescriptor suffix : cache.getSuffixes()) { if (suffix.getDN().equals(baseDN)) { Set<String> s = suffix.getReplicationServers(); Set<HostPort> s = suffix.getReplicationServers(); // Test that at least we share one of the replication servers. // If we do: we are dealing with the same replication topology // (we must consider the case of disjoint replication topologies // replicating the same base DN). HashSet<String> copy = new HashSet<>(s); HashSet<HostPort> copy = new HashSet<>(s); copy.retainAll(servers); if (!copy.isEmpty()) { return suffix; } else if (replicationServer != null && containsIgnoreCase(s, replicationServer)) else if (replicationServer != null && s.contains(replicationServer)) { returnValue = suffix; } @@ -6165,10 +6149,10 @@ return returnValue; } private Set<String> getAllReplicationServers(DN baseDN, ServerDescriptor server) private Set<HostPort> getAllReplicationServers(DN baseDN, ServerDescriptor server) { ReplicaDescriptor replica = findReplicaForSuffixDN(server.getReplicas(), baseDN); Set<String> servers = new LinkedHashSet<>(); Set<HostPort> servers = new LinkedHashSet<>(); if (replica != null) { servers.addAll(replica.getReplicationServers()); @@ -6192,9 +6176,10 @@ */ private void configureAsReplicationServer(ConnectionWrapper conn, int replicationPort, boolean useSecureReplication, Set<String> replicationServers, Set<HostPort> replicationServers, Set<Integer> usedReplicationServerIds) throws Exception { Set<String> replicationServersLC = toLowerCaseStrings(replicationServers); print(formatter.getFormattedWithPoints( INFO_REPLICATION_ENABLE_CONFIGURING_REPLICATION_SERVER.get(conn.getHostPort()))); @@ -6229,10 +6214,8 @@ sync.commit(); /* Configure the replication server. */ ReplicationServerCfgClient replicationServer; ReplicationServerCfgClient rsCfgClient; boolean mustCommit = false; if (!sync.hasReplicationServer()) { CryptoManagerCfgClient crypto = root.getCryptoManager(); @@ -6243,35 +6226,23 @@ } int id = InstallerHelper.getReplicationId(usedReplicationServerIds); usedReplicationServerIds.add(id); replicationServer = sync.createReplicationServer( rsCfgClient = sync.createReplicationServer( ReplicationServerCfgDefn.getInstance(), new ArrayList<PropertyException>()); replicationServer.setReplicationServerId(id); replicationServer.setReplicationPort(replicationPort); replicationServer.setReplicationServer(replicationServers); rsCfgClient.setReplicationServerId(id); rsCfgClient.setReplicationPort(replicationPort); rsCfgClient.setReplicationServer(replicationServersLC); mustCommit = true; } else { replicationServer = sync.getReplicationServer(); usedReplicationServerIds.add( replicationServer.getReplicationServerId()); Set<String> servers = replicationServer.getReplicationServer(); if (servers == null) { replicationServer.setReplicationServer(replicationServers); mustCommit = true; } else if (!areReplicationServersEqual(servers, replicationServers)) { replicationServer.setReplicationServer( mergeReplicationServers(replicationServers, servers)); mustCommit = true; } rsCfgClient = sync.getReplicationServer(); usedReplicationServerIds.add(rsCfgClient.getReplicationServerId()); mustCommit = addAllReplicationServers(rsCfgClient, replicationServersLC); } if (mustCommit) { replicationServer.commit(); rsCfgClient.commit(); } print(formatter.getFormattedDone()); @@ -6289,37 +6260,41 @@ * @throws OpenDsException * if there is an error updating the configuration. */ private void updateReplicationServer(ConnectionWrapper conn, Set<String> replicationServers) throws Exception private void updateReplicationServer(ConnectionWrapper conn, Set<HostPort> replicationServers) throws Exception { Set<String> replicationServersLC = toLowerCaseStrings(replicationServers); print(formatter.getFormattedWithPoints( INFO_REPLICATION_ENABLE_UPDATING_REPLICATION_SERVER.get(conn.getHostPort()))); ReplicationSynchronizationProviderCfgClient sync = getMultimasterSynchronization(conn); boolean mustCommit = false; ReplicationServerCfgClient replicationServer = sync.getReplicationServer(); Set<String> servers = replicationServer.getReplicationServer(); if (servers == null) ReplicationServerCfgClient rsCfgClient = getMultimasterSynchronization(conn).getReplicationServer(); if (addAllReplicationServers(rsCfgClient, replicationServersLC)) { replicationServer.setReplicationServer(replicationServers); mustCommit = true; } else if (!areReplicationServersEqual(servers, replicationServers)) { replicationServers.addAll(servers); replicationServer.setReplicationServer( mergeReplicationServers(replicationServers, servers)); mustCommit = true; } if (mustCommit) { replicationServer.commit(); rsCfgClient.commit(); } print(formatter.getFormattedDone()); println(); } private boolean addAllReplicationServers(ReplicationServerCfgClient rsCfgClient, Set<String> replicationServersLC) { final Set<String> servers = rsCfgClient.getReplicationServer(); if (servers == null) { rsCfgClient.setReplicationServer(replicationServersLC); return true; } final Set<String> serversLC = toLowerCase(servers); if (!serversLC.equals(replicationServersLC)) { serversLC.addAll(replicationServersLC); rsCfgClient.setReplicationServer(replicationServersLC); return true; } return false; } /** * Returns a Set containing all the replication server ids found in the * servers of a given TopologyCache object. @@ -6358,9 +6333,11 @@ */ private void configureToReplicateBaseDN(ConnectionWrapper conn, DN baseDN, Set<String> replicationServers, Set<HostPort> replicationServers, Set<Integer> usedReplicationDomainIds) throws Exception { Set<String> replicationServersLC = toLowerCaseStrings(replicationServers); boolean userSpecifiedAdminBaseDN = false; List<DN> baseDNs = toDNs(argParser.getBaseDNs()); if (baseDNs != null) @@ -6398,7 +6375,7 @@ null); domain.setServerId(domainId); domain.setBaseDN(baseDN); domain.setReplicationServer(replicationServers); domain.setReplicationServer(replicationServersLC); mustCommit = true; } else @@ -6409,10 +6386,15 @@ domain.setReplicationServer(null); mustCommit = true; } else if (!areReplicationServersEqual(servers, replicationServers)) else { domain.setReplicationServer(mergeReplicationServers(replicationServers, servers)); mustCommit = true; Set<String> serversLC = toLowerCase(servers); if (!serversLC.equals(replicationServersLC)) { serversLC.addAll(replicationServersLC); domain.setReplicationServer(replicationServersLC); mustCommit = true; } } } @@ -6443,6 +6425,16 @@ return null; } private static Set<String> toLowerCase(Set<String> strings) { Set<String> results = new HashSet<>(); for (String s : strings) { results.add(s.toLowerCase(Locale.ROOT)); } return results; } /** * Configures the baseDN to replicate in all the Replicas found in a Topology * Cache that are replicated with the Replica of the same base DN in the @@ -6464,9 +6456,9 @@ * @throws ReplicationCliException if something goes wrong. */ private void configureToReplicateBaseDN(DN baseDN, Set<String> repServers, Set<Integer> usedIds, Set<HostPort> repServers, Set<Integer> usedIds, TopologyCache cache, ServerDescriptor server, Set<String> alreadyConfiguredServers, Set<String> allRepServers, Set<String> alreadyConfiguredServers, Set<HostPort> allRepServers, Set<String> alreadyConfiguredReplicationServers) throws ReplicationCliException { @@ -6492,7 +6484,7 @@ if (s.isReplicationServer() && !alreadyConfiguredReplicationServers.contains(s.getId()) // Check if it is part of the replication topology && containsIgnoreCase(repServers, s.getReplicationServerHostPort())) && repServers.contains(s.getReplicationServerHostPort())) { replicationServersToConfigure.add(s); } @@ -7369,50 +7361,6 @@ } /** * Convenience method used to know if one Set of replication servers equals * another set of replication servers. * @param s1 the first set of replication servers. * @param s2 the second set of replication servers. * @return {@code true} if the two sets represent the same replication * servers and {@code false} otherwise. */ private boolean areReplicationServersEqual(Set<String> s1, Set<String> s2) { Set<String> c1 = new HashSet<>(); for (String s : s1) { c1.add(s.toLowerCase()); } Set<String> c2 = new HashSet<>(); for (String s : s2) { c2.add(s.toLowerCase()); } return c1.equals(c2); } /** * Convenience method used to merge two Sets of replication servers. * @param s1 the first set of replication servers. * @param s2 the second set of replication servers. * @return a Set of replication servers containing all the replication servers * specified in the provided Sets. */ private Set<String> mergeReplicationServers(Set<String> s1, Set<String> s2) { Set<String> c1 = new HashSet<>(); for (String s : s1) { c1.add(s.toLowerCase()); } for (String s : s2) { c1.add(s.toLowerCase()); } return c1; } /** * Returns the message that must be displayed to the user for a given * exception. This is assumed to be a critical exception that stops all * the processing. @@ -8499,7 +8447,7 @@ { int replicationPort = getReplicationPort(connOther); boolean isReplicationServerConfigured = replicationPort != -1; String replicationServer = getReplicationServer(connOther.getHostPort().getHost(), replicationPort); HostPort replicationServer = getReplicationServer(connOther.getHostPort().getHost(), replicationPort); Collection<ReplicaDescriptor> replicas = getReplicas(connDomain); for (ReplicaDescriptor replica : replicas) @@ -8522,7 +8470,7 @@ { availableSuffixes.add(suffixDn); } else if (containsIgnoreCase(replica.getReplicationServers(), replicationServer)) else if (replica.getReplicationServers().contains(replicationServer)) { alreadyReplicatedSuffixes.add(suffixDn); } @@ -8539,11 +8487,11 @@ { int replicationPort1 = getReplicationPort(conn1); boolean isReplicationServer1Configured = replicationPort1 != -1; String replicationServer1 = getReplicationServer(conn1.getHostPort().getHost(), replicationPort1); HostPort replicationServer1 = getReplicationServer(conn1.getHostPort().getHost(), replicationPort1); int replicationPort2 = getReplicationPort(conn2); boolean isReplicationServer2Configured = replicationPort2 != -1; String replicationServer2 = getReplicationServer(conn2.getHostPort().getHost(), replicationPort2); HostPort replicationServer2 = getReplicationServer(conn2.getHostPort().getHost(), replicationPort2); TopologyCache cache1 = isReplicationServer1Configured ? createTopologyCache(conn1) : null; TopologyCache cache2 = isReplicationServer2Configured ? createTopologyCache(conn2) : null; @@ -8589,13 +8537,13 @@ } private void addAllAvailableSuffixes(Collection<DN> availableSuffixes, Set<SuffixDescriptor> suffixes, String rsToFind) Set<SuffixDescriptor> suffixes, HostPort rsToFind) { for (SuffixDescriptor suffix : suffixes) { for (String rs : suffix.getReplicationServers()) for (HostPort rs : suffix.getReplicationServers()) { if (rs.equalsIgnoreCase(rsToFind)) if (rs.equals(rsToFind)) { availableSuffixes.add(suffix.getDN()); } @@ -8604,14 +8552,14 @@ } private void updateAvailableAndReplicatedSuffixesForNoDomainOneSense( TopologyCache cache1, TopologyCache cache2, String replicationServer1, String replicationServer2, TopologyCache cache1, TopologyCache cache2, HostPort replicationServer1, HostPort replicationServer2, Set<DN> availableSuffixes, Set<DN> alreadyReplicatedSuffixes) { for (SuffixDescriptor suffix : cache1.getSuffixes()) { for (String rServer : suffix.getReplicationServers()) for (HostPort rServer : suffix.getReplicationServers()) { if (rServer.equalsIgnoreCase(replicationServer1)) if (rServer.equals(replicationServer1)) { boolean isSecondReplicatedInSameTopology = false; boolean isSecondReplicated = false; @@ -8620,13 +8568,13 @@ { if (suffix.getDN().equals(suffix2.getDN())) { for (String rServer2 : suffix2.getReplicationServers()) for (HostPort rServer2 : suffix2.getReplicationServers()) { if (rServer2.equalsIgnoreCase(replicationServer2)) if (rServer2.equals(replicationServer2)) { isSecondReplicated = true; } if (rServer.equalsIgnoreCase(replicationServer2)) if (rServer.equals(replicationServer2)) { isFirstReplicated = true; } @@ -8670,9 +8618,9 @@ createTopologyCache(adsCtx2, uData, suffixes); int repPort1 = getReplicationPort(adsCtx1.getConnection()); String repServer1 = getReplicationServer(server1.getHostName(), repPort1); HostPort repServer1 = getReplicationServer(server1.getHostName(), repPort1); int repPort2 = getReplicationPort(adsCtx2.getConnection()); String repServer2 = getReplicationServer(server2.getHostName(), repPort2); HostPort repServer2 = getReplicationServer(server2.getHostName(), repPort2); for (DN baseDN : uData.getBaseDNs()) { int nReplicationServers = 0; @@ -8680,17 +8628,17 @@ { if (suffix.getDN().equals(baseDN)) { Set<String> replicationServers = suffix.getReplicationServers(); Set<HostPort> replicationServers = suffix.getReplicationServers(); nReplicationServers += replicationServers.size(); for (String repServer : replicationServers) for (HostPort repServer : replicationServers) { if (server1.configureReplicationServer() && repServer.equalsIgnoreCase(repServer1)) repServer.equals(repServer1)) { nReplicationServers --; } if (server2.configureReplicationServer() && repServer.equalsIgnoreCase(repServer2)) repServer.equals(repServer2)) { nReplicationServers --; } @@ -8962,11 +8910,11 @@ } int replicationID1 = serverToFind.getReplicationServerId(); String replServerHostPort1 = serverToFind.getReplicationServerHostPort(); HostPort replServerHostPort1 = serverToFind.getReplicationServerHostPort(); for (ServerDescriptor server2 : servers) { if (server2.isReplicationServer() && server2.getReplicationServerId() == replicationID1 && !server2.getReplicationServerHostPort().equalsIgnoreCase(replServerHostPort1)) && !server2.getReplicationServerHostPort().equals(replServerHostPort1)) { commonRepServerIDErrors.add(ERR_REPLICATION_ENABLE_COMMON_REPLICATION_SERVER_ID_ARG.get( serverToFind.getHostPort(true), server2.getHostPort(true), replicationID1)); @@ -9074,11 +9022,11 @@ final ReplicaDescriptor replica2 = findReplicaForSuffixDN(server2.getReplicas(), baseDN); if (replica1 != null && replica2 != null) { Set<String> replServers1 = replica1.getSuffix().getReplicationServers(); Set<String> replServers2 = replica1.getSuffix().getReplicationServers(); for (String replServer1 : replServers1) Set<HostPort> replServers1 = replica1.getSuffix().getReplicationServers(); Set<HostPort> replServers2 = replica1.getSuffix().getReplicationServers(); for (HostPort replServer1 : replServers1) { if (containsIgnoreCase(replServers2, replServer1)) if (replServers2.contains(replServer1)) { // it is replicated in both return true; opendj-server-legacy/src/main/java/org/opends/server/types/HostPort.java
@@ -16,6 +16,8 @@ */ package org.opends.server.types; import static org.opends.messages.ReplicationMessages.*; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.NetworkInterface; @@ -23,13 +25,12 @@ import java.net.UnknownHostException; import java.util.Enumeration; import java.util.HashSet; import java.util.Locale; import java.util.Objects; import java.util.Set; import org.forgerock.i18n.slf4j.LocalizedLogger; import static org.opends.messages.ReplicationMessages.*; /** * This class defines a data structure that combines an address and port number, * as may be used to accept a connection from or initiate a connection to a @@ -151,6 +152,16 @@ return localAddresses; } public static Set<String> toLowerCaseStrings(Set<HostPort> hps) { final Set<String> results = new HashSet<>(); for (HostPort hp : hps) { results.add(hp.toString().toLowerCase(Locale.ROOT)); } return results; } /** * Returns a a new HostPort for all addresses, also known as a wildcard * address.