mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

gbellato
10.54.2009 49663fbe506ec7ebe59369e430c067b378a52ab0
Fix for 3851 : The monitor backend does not follow parent order

With these changes the monitor backend now returns the parent
monitoring entries before their children.
1 files modified
64 ■■■■■ changed files
opends/src/server/org/opends/server/backends/MonitorBackend.java 64 ●●●●● patch | view | raw | blame | history
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}