From 49663fbe506ec7ebe59369e430c067b378a52ab0 Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Tue, 10 Mar 2009 08:54:36 +0000
Subject: [PATCH] Fix for 3851 : The monitor backend does not follow parent order
---
opends/src/server/org/opends/server/backends/MonitorBackend.java | 64 +++++++++++++++++++-------------
1 files changed, 38 insertions(+), 26 deletions(-)
diff --git a/opends/src/server/org/opends/server/backends/MonitorBackend.java b/opends/src/server/org/opends/server/backends/MonitorBackend.java
index ed41ce6..5194590 100644
--- a/opends/src/server/org/opends/server/backends/MonitorBackend.java
+++ b/opends/src/server/org/opends/server/backends/MonitorBackend.java
@@ -808,7 +808,7 @@
* {@inheritDoc}
*/
@Override()
- public void search(SearchOperation searchOperation)
+ public synchronized void search(SearchOperation searchOperation)
throws DirectoryException
{
@@ -869,8 +869,8 @@
}
}
- // Build te internal monitor tree (entries, and children)
- private void initEntryMaps() {
+ // Build the internal monitor tree (entries, and children)
+ private synchronized void initEntryMaps() {
this.entryMap.clear();
this.childDNs.clear();
for (MonitorProvider<? extends MonitorProviderCfg> monitorProvider :
@@ -879,34 +879,46 @@
DN providerdn =
DirectoryServer.getMonitorProviderDN(monitorProvider);
if (!entryMap.containsKey(providerdn)) {
- Entry entry = getEntry(providerdn);
- entryMap.put(providerdn, entry);
- }
- DN parentdn = providerdn.getParentDNInSuffix();
- DN child = providerdn;
- while (parentdn!=null) {
- if (!entryMap.containsKey(parentdn)) {
- Entry entry = getEntry(parentdn);
- entryMap.put(parentdn, entry);
- }
- if (childDNs.containsKey(parentdn)) {
- HashSet<DN> children = childDNs.get(parentdn);
- children.add(child);
- childDNs.put(parentdn, children);
- }
- else {
- HashSet<DN> children = new HashSet<DN>();
- children.add(child);
- childDNs.put(parentdn, children);
- }
- child=parentdn;
- parentdn = parentdn.getParentDNInSuffix();
- }
+ getAndAddParentInMaps(providerdn);
+ Entry entry = getEntry(providerdn);
+ entryMap.put(providerdn, entry);
+ }
} catch (Exception ex) {
}
}
}
+ /**
+ * Recursively builds the entryMap and the childDN Map.
+ */
+ private void getAndAddParentInMaps(DN providerDN)
+ {
+ try
+ {
+ DN parentdn = providerDN.getParentDNInSuffix();
+ DN child = providerDN;
+
+ if ((parentdn != null) && (!entryMap.containsKey(parentdn)))
+ {
+ getAndAddParentInMaps(parentdn);
+ entryMap.put(parentdn, getEntry(parentdn));
+ }
+
+ if (childDNs.containsKey(parentdn))
+ {
+ HashSet<DN> children = childDNs.get(parentdn);
+ children.add(child);
+ childDNs.put(parentdn, children);
+ }
+ else
+ {
+ HashSet<DN> children = new HashSet<DN>();
+ children.add(child);
+ childDNs.put(parentdn, children);
+ }
+ } catch (Exception e)
+ {}
+ }
/**
* {@inheritDoc}
--
Gitblit v1.10.0