From 0aac3576864aa130aac13292604804806bd13255 Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Wed, 15 Feb 2012 23:01:26 +0000
Subject: [PATCH] Code and Typo cleanup. Some reformatting included.
---
opends/src/ads/org/opends/admin/ads/TopologyCache.java | 251 +++++++++++++++++++++++++++----------------------
1 files changed, 139 insertions(+), 112 deletions(-)
diff --git a/opends/src/ads/org/opends/admin/ads/TopologyCache.java b/opends/src/ads/org/opends/admin/ads/TopologyCache.java
index e9e92c6..27603a8 100644
--- a/opends/src/ads/org/opends/admin/ads/TopologyCache.java
+++ b/opends/src/ads/org/opends/admin/ads/TopologyCache.java
@@ -23,15 +23,14 @@
*
*
* Copyright 2008-2010 Sun Microsystems, Inc.
- * Portions copyright 2011 ForgeRock AS
+ * Portions copyright 2011-2012 ForgeRock AS
*/
-
package org.opends.admin.ads;
-import static org.opends.messages.QuickSetupMessages.
- INFO_ERROR_READING_CONFIG_LDAP_CERTIFICATE_SERVER;
-import static org.opends.messages.QuickSetupMessages.
- INFO_NOT_GLOBAL_ADMINISTRATOR_PROVIDED;
+import static org.opends.messages.QuickSetupMessages
+ .INFO_ERROR_READING_CONFIG_LDAP_CERTIFICATE_SERVER;
+import static org.opends.messages.QuickSetupMessages
+ .INFO_NOT_GLOBAL_ADMINISTRATOR_PROVIDED;
import java.util.Collection;
import java.util.Date;
@@ -61,33 +60,34 @@
import org.opends.quicksetup.util.Utils;
/**
- * This class allows to read the configuration of the different servers that
- * are registered in a given ADS server. It provides a read only view of the
- * configuration of the servers and of the replication topologies that might
- * be configured between them.
+ * This class allows to read the configuration of the different servers that are
+ * registered in a given ADS server. It provides a read only view of the
+ * configuration of the servers and of the replication topologies that might be
+ * configured between them.
*/
public class TopologyCache
{
- private ADSContext adsContext;
- private ApplicationTrustManager trustManager;
- private int timeout;
- private String dn;
- private String pwd;
- private Set<ServerDescriptor> servers = new HashSet<ServerDescriptor>();
- private Set<SuffixDescriptor> suffixes = new HashSet<SuffixDescriptor>();
- private LinkedHashSet<PreferredConnection> preferredConnections =
- new LinkedHashSet<PreferredConnection>();
- private TopologyCacheFilter filter = new TopologyCacheFilter();
+ private final ADSContext adsContext;
+ private final ApplicationTrustManager trustManager;
+ private final int timeout;
+ private final String bindDN;
+ private final String bindPwd;
+ private final Set<ServerDescriptor> servers =
+ new HashSet<ServerDescriptor>();
+ private final Set<SuffixDescriptor> suffixes =
+ new HashSet<SuffixDescriptor>();
+ private final LinkedHashSet<PreferredConnection> preferredConnections =
+ new LinkedHashSet<PreferredConnection>();
+ private final TopologyCacheFilter filter = new TopologyCacheFilter();
private final boolean isMultiThreaded = true;
private final static int MULTITHREAD_TIMEOUT = 90 * 1000;
-
private static final Logger LOG =
- Logger.getLogger(TopologyCache.class.getName());
-
+ Logger.getLogger(TopologyCache.class.getName());
/**
* Constructor of the TopologyCache.
+ *
* @param adsContext the adsContext to the ADS registry.
* @param trustManager the ApplicationTrustManager that must be used to trust
* certificates when we create connections to the registered servers to read
@@ -96,18 +96,19 @@
* Use {@code 0} to express no timeout.
*/
public TopologyCache(ADSContext adsContext,
- ApplicationTrustManager trustManager,
- int timeout)
+ ApplicationTrustManager trustManager,
+ int timeout)
{
this.adsContext = adsContext;
this.trustManager = trustManager;
this.timeout = timeout;
- dn = ConnectionUtils.getBindDN(adsContext.getDirContext());
- pwd = ConnectionUtils.getBindPassword(adsContext.getDirContext());
+ bindDN = ConnectionUtils.getBindDN(adsContext.getDirContext());
+ bindPwd = ConnectionUtils.getBindPassword(adsContext.getDirContext());
}
/**
* Reads the configuration of the registered servers.
+ *
* @throws TopologyCacheException if there is an issue reading the
* configuration of the registered servers.
*/
@@ -117,38 +118,40 @@
servers.clear();
try
{
- Set<Map<ServerProperty,Object>> adsServers =
- adsContext.readServerRegistry();
+ Set<Map<ServerProperty, Object>> adsServers =
+ adsContext.readServerRegistry();
Set<ServerLoader> threadSet = new HashSet<ServerLoader>();
- for (Map<ServerProperty,Object> serverProperties : adsServers)
+ for (Map<ServerProperty, Object> serverProperties : adsServers)
{
ServerLoader t = getServerLoader(serverProperties);
if (isMultiThreaded)
{
- t.start();
- threadSet.add(t);
+ t.start();
+ threadSet.add(t);
}
else
{
- t.run();
+ t.run();
}
}
if (isMultiThreaded)
{
joinThreadSet(threadSet);
}
- /* Try to consolidate things (even if the data is not complete). */
+ /*
+ * Try to consolidate things (even if the data is not complete).
+ */
HashMap<LdapName, Set<SuffixDescriptor>> hmSuffixes =
- new HashMap<LdapName, Set<SuffixDescriptor>>();
+ new HashMap<LdapName, Set<SuffixDescriptor>>();
for (ServerLoader loader : threadSet)
{
ServerDescriptor descriptor = loader.getServerDescriptor();
for (ReplicaDescriptor replica : descriptor.getReplicas())
{
- LOG.log(Level.INFO, "Handling replica with dn: "+
- replica.getSuffix().getDN());
+ LOG.log(Level.INFO, "Handling replica with dn: "
+ + replica.getSuffix().getDN());
boolean suffixFound = false;
LdapName dn = new LdapName(replica.getSuffix().getDN());
@@ -205,6 +208,7 @@
/**
* Returns the trust manager used by this class.
+ *
* @return the trust manager used by this class.
*/
public ApplicationTrustManager getTrustManager()
@@ -214,6 +218,7 @@
/**
* Returns the timeout to establish the connection in milliseconds.
+ *
* @return the timeout to establish the connection in milliseconds. Returns
* {@code 0} to express no timeout.
*/
@@ -224,6 +229,7 @@
/**
* Reads the replication monitoring.
+ *
* @throws NamingException if an error occurs reading the replication
* monitoring.
*/
@@ -248,7 +254,7 @@
// configuration, so assume that we might be able to read monitoring
// (even if an exception occurred before).
Set<ReplicaDescriptor> candidateReplicas =
- new HashSet<ReplicaDescriptor>();
+ new HashSet<ReplicaDescriptor>();
// It contains replication information: analyze it.
String repServer = server.getReplicationServerHostPort();
for (SuffixDescriptor suffix : getSuffixes())
@@ -266,7 +272,7 @@
if (!candidateReplicas.isEmpty())
{
Set<ReplicaDescriptor> updatedReplicas =
- new HashSet<ReplicaDescriptor>();
+ new HashSet<ReplicaDescriptor>();
try
{
updateReplicas(server, candidateReplicas, updatedReplicas);
@@ -289,8 +295,9 @@
/**
* 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
+ * used to connect to the servers. When we have a server to which we can
* connect using a URL on the list we will try to use it.
+ *
* @param cnx the list of preferred connections.
*/
public void setPreferredConnections(LinkedHashSet<PreferredConnection> cnx)
@@ -301,9 +308,10 @@
/**
* Returns the list of LDAP URLs and connection type that are preferred to be
- * used to connect to the servers. If a URL is on this list, when we have a
+ * used to connect to the servers. If a URL is on this list, when we have a
* server to which we can connect using that URL and the associated connection
* type we will try to use it.
+ *
* @return the list of preferred connections.
*/
public LinkedHashSet<PreferredConnection> getPreferredConnections()
@@ -313,6 +321,7 @@
/**
* Returns a Set containing all the servers that are registered in the ADS.
+ *
* @return a Set containing all the servers that are registered in the ADS.
*/
public Set<ServerDescriptor> getServers()
@@ -325,6 +334,7 @@
/**
* Returns a Set containing the suffixes (replication topologies) that could
* be retrieved after the last call to reloadTopology.
+ *
* @return a Set containing the suffixes (replication topologies) that could
* be retrieved after the last call to reloadTopology.
*/
@@ -337,6 +347,7 @@
/**
* Returns the filter to be used when retrieving information.
+ *
* @return the filter to be used when retrieving information.
*/
public TopologyCacheFilter getFilter()
@@ -347,16 +358,17 @@
/**
* Method used to wait at most a certain time (MULTITHREAD_TIMEOUT) for the
* different threads to finish.
- * @param threadSet the list of threads (we assume that they are started)
- * that we must wait for.
+ *
+ * @param threadSet the list of threads (we assume that they are started) that
+ * we must wait for.
*/
private void joinThreadSet(Set<ServerLoader> threadSet)
{
Date startDate = new Date();
for (ServerLoader t : threadSet)
{
- long timeToJoin = MULTITHREAD_TIMEOUT - System.currentTimeMillis() +
- startDate.getTime();
+ long timeToJoin = MULTITHREAD_TIMEOUT - System.currentTimeMillis()
+ + startDate.getTime();
try
{
if (timeToJoin > 0)
@@ -375,26 +387,28 @@
}
Date endDate = new Date();
long workingTime = endDate.getTime() - startDate.getTime();
- LOG.log(Level.INFO, "Loading ended at "+ workingTime + " ms");
+ LOG.log(Level.INFO, "Loading ended at " + workingTime + " ms");
}
/**
* Creates a ServerLoader object based on the provided server properties.
- * @param serverProperties the server properties to be used to generate
- * the ServerLoader.
+ *
+ * @param serverProperties the server properties to be used to generate the
+ * ServerLoader.
* @return a ServerLoader object based on the provided server properties.
*/
private ServerLoader getServerLoader(
- Map<ServerProperty,Object> serverProperties)
+ Map<ServerProperty, Object> serverProperties)
{
- return new ServerLoader(serverProperties, dn, pwd,
+ return new ServerLoader(serverProperties, bindDN, bindPwd,
trustManager == null ? null : trustManager.createCopy(),
- timeout,
- getPreferredConnections(), getFilter());
+ timeout,
+ getPreferredConnections(), getFilter());
}
/**
* Returns the adsContext used by this TopologyCache.
+ *
* @return the adsContext used by this TopologyCache.
*/
public ADSContext getAdsContext()
@@ -402,19 +416,18 @@
return adsContext;
}
-
-
/**
* Returns a set of error messages encountered in the TopologyCache.
+ *
* @return a set of error messages encountered in the TopologyCache.
*/
public LinkedHashSet<Message> getErrorMessages()
{
Set<TopologyCacheException> exceptions =
- new HashSet<TopologyCacheException>();
- Set<ServerDescriptor> servers = getServers();
+ new HashSet<TopologyCacheException>();
+ Set<ServerDescriptor> theServers = getServers();
LinkedHashSet<Message> exceptionMsgs = new LinkedHashSet<Message>();
- for (ServerDescriptor server : servers)
+ for (ServerDescriptor server : theServers)
{
TopologyCacheException e = server.getLastException();
if (e != null)
@@ -422,7 +435,9 @@
exceptions.add(e);
}
}
- /* Check the exceptions and see if we throw them or not. */
+ /*
+ * Check the exceptions and see if we throw them or not.
+ */
for (TopologyCacheException e : exceptions)
{
switch (e.getType())
@@ -430,61 +445,62 @@
case NOT_GLOBAL_ADMINISTRATOR:
exceptionMsgs.add(INFO_NOT_GLOBAL_ADMINISTRATOR_PROVIDED.get());
- break;
- case GENERIC_CREATING_CONNECTION:
- if ((e.getCause() != null) &&
- Utils.isCertificateException(e.getCause()))
- {
- exceptionMsgs.add(
- INFO_ERROR_READING_CONFIG_LDAP_CERTIFICATE_SERVER.get(
- e.getHostPort(), e.getCause().getMessage()));
- }
- else
- {
+ break;
+ case GENERIC_CREATING_CONNECTION:
+ if ((e.getCause() != null)
+ && Utils.isCertificateException(e.getCause()))
+ {
+ exceptionMsgs.add(
+ INFO_ERROR_READING_CONFIG_LDAP_CERTIFICATE_SERVER.get(
+ e.getHostPort(), e.getCause().getMessage()));
+ }
+ else
+ {
+ exceptionMsgs.add(Utils.getMessage(e));
+ }
+ break;
+ default:
exceptionMsgs.add(Utils.getMessage(e));
- }
- break;
- default:
- exceptionMsgs.add(Utils.getMessage(e));
}
}
return exceptionMsgs;
}
-
/**
* Updates the monitoring information of the provided replicas using the
* information located in cn=monitor of a given replication server.
+ *
* @param replicationServer the replication server.
* @param candidateReplicas the collection of replicas that must be updated.
* @param updatedReplicas the collection of replicas that are actually
- * updated. This list is updated by the method.
+ * updated. This list is updated by the method.
*/
private void updateReplicas(ServerDescriptor replicationServer,
- Collection<ReplicaDescriptor> candidateReplicas,
- Collection<ReplicaDescriptor> updatedReplicas) throws NamingException
+ Collection<ReplicaDescriptor> candidateReplicas,
+ Collection<ReplicaDescriptor> updatedReplicas)
+ throws NamingException
{
SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
ctls.setReturningAttributes(
- new String[] {
- "approx-older-change-not-synchronized-millis", "missing-changes",
- "domain-name", "server-id"
+ new String[]
+ {
+ "approx-older-change-not-synchronized-millis", "missing-changes",
+ "domain-name", "server-id"
});
- String filter = "(missing-changes=*)";
-
- LdapName jndiName = new LdapName("cn=monitor");
InitialLdapContext ctx = null;
NamingEnumeration<SearchResult> monitorEntries = null;
try
{
ServerLoader loader =
- getServerLoader(replicationServer.getAdsProperties());
+ getServerLoader(replicationServer.getAdsProperties());
ctx = loader.createContext();
- monitorEntries = ctx.search(jndiName, filter, ctls);
- while(monitorEntries.hasMore())
+ monitorEntries = ctx.search(
+ new LdapName("cn=monitor"), "(missing-changes=*)", ctls);
+
+ while (monitorEntries.hasMore())
{
SearchResult sr = monitorEntries.next();
@@ -493,44 +509,47 @@
try
{
replicaId =
- new Integer(ConnectionUtils.getFirstValue(sr, "server-id"));
+ new Integer(ConnectionUtils.getFirstValue(sr, "server-id"));
}
catch (Throwable t)
{
- LOG.log(Level.WARNING, "Unexpected error reading replica ID: "+t, t);
+ LOG.log(Level.WARNING, "Unexpected error reading replica ID: " + t,
+ t);
}
- for (ReplicaDescriptor replica: candidateReplicas)
+ for (ReplicaDescriptor replica : candidateReplicas)
{
- if (Utils.areDnsEqual(dn, replica.getSuffix().getDN()) &&
- replica.isReplicated() &&
- (replica.getReplicationId() == replicaId))
+ if (Utils.areDnsEqual(dn, replica.getSuffix().getDN())
+ && replica.isReplicated()
+ && (replica.getReplicationId() == replicaId))
{
- try
+ // This statistic is optional.
+ String s = ConnectionUtils.getFirstValue(sr,
+ "approx-older-change-not-synchronized-millis");
+ if (s != null)
{
- // This statistic is optional.
- String s = ConnectionUtils.getFirstValue(sr,
- "approx-older-change-not-synchronized-millis");
- if (s != null)
+ try
{
replica.setAgeOfOldestMissingChange(Long.valueOf(s));
}
+ catch (Throwable t)
+ {
+ LOG.log(Level.WARNING,
+ "Unexpected error reading age of oldest change: " + t, t);
+ }
}
- catch (Throwable t)
+ s = ConnectionUtils.getFirstValue(sr, "missing-changes");
+ if (s != null)
{
- LOG.log(Level.WARNING,
- "Unexpected error reading age of oldest change: "+t, t);
- }
- try
- {
- replica.setMissingChanges(
- new Integer(ConnectionUtils.getFirstValue(sr,
- "missing-changes")));
- }
- catch (Throwable t)
- {
- LOG.log(Level.WARNING,
- "Unexpected error reading missing changes: "+t, t);
+ try
+ {
+ replica.setMissingChanges(new Integer(s));
+ }
+ catch (Throwable t)
+ {
+ LOG.log(Level.WARNING,
+ "Unexpected error reading missing changes: " + t, t);
+ }
}
updatedReplicas.add(replica);
}
@@ -544,7 +563,15 @@
{
if (monitorEntries != null)
{
- monitorEntries.close();
+ try
+ {
+ monitorEntries.close();
+ }
+ catch (Throwable t)
+ {
+ LOG.log(Level.WARNING,
+ "Unexpected error closing enumeration on monitor entries" + t, t);
+ }
}
if (ctx != null)
{
--
Gitblit v1.10.0