From caa38c1354824a2da50a8fbc8fc85ba1b0dfc7fe Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 06 Oct 2015 14:43:56 +0000
Subject: [PATCH] OPENDJ-1719 Consider migrating JE backend to new PluggableBackend framework

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendMonitor.java |  132 ++++++++++++++++++++++---------------------
 1 files changed, 67 insertions(+), 65 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendMonitor.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendMonitor.java
index 90e4ee4..b09f3bd 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendMonitor.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendMonitor.java
@@ -29,6 +29,7 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -49,14 +50,15 @@
 class BackendMonitor extends MonitorProvider<MonitorProviderCfg>
 {
   /** Represents the statistical information kept for each search filter. */
-  private static class FilterStats implements Comparable<FilterStats>
+  private static final class FilterStats implements Comparable<FilterStats>
   {
     private volatile LocalizableMessage failureReason = LocalizableMessage.EMPTY;
     private long maxMatchingEntries = -1;
     private final AtomicInteger hits = new AtomicInteger();
 
     @Override
-    public int compareTo(FilterStats that) {
+    public int compareTo(FilterStats that)
+    {
       return this.hits.get() - that.hits.get();
     }
 
@@ -70,9 +72,9 @@
     {
       this.hits.getAndAdd(hitCount);
       this.failureReason = LocalizableMessage.EMPTY;
-      synchronized(this)
+      synchronized (this)
       {
-        if(matchingEntries > maxMatchingEntries)
+        if (matchingEntries > maxMatchingEntries)
         {
           maxMatchingEntries = matchingEntries;
         }
@@ -82,7 +84,6 @@
 
   /** The name of this monitor instance. */
   private final String name;
-
   /** The root container to be monitored. */
   private final RootContainer rootContainer;
 
@@ -107,16 +108,10 @@
 
   @Override
   public void initializeMonitorProvider(MonitorProviderCfg configuration)
-       throws ConfigException, InitializationException
+      throws ConfigException, InitializationException
   {
   }
 
-  /**
-   * Retrieves the name of this monitor provider.  It should be unique among all
-   * monitor providers, including all instances of the same monitor provider.
-   *
-   * @return The name of this monitor provider.
-   */
   @Override
   public String getMonitorInstanceName()
   {
@@ -128,61 +123,69 @@
    * returned to the client if the corresponding monitor entry is requested.
    *
    * @return A set of attributes containing monitor data that should be
-   *         returned to the client if the corresponding monitor entry is
-   *         requested.
+   *         returned to the client if the corresponding monitor entry is requested.
    */
   @Override
-  public ArrayList<Attribute> getMonitorData()
+  public List<Attribute> getMonitorData()
   {
-    ArrayList<Attribute> monitorAttrs = new ArrayList<>();
+    List<Attribute> monitorAttrs = new ArrayList<>();
 
-    AttributeBuilder needReindex = new AttributeBuilder("need-reindex");
-    for(EntryContainer ec : rootContainer.getEntryContainers())
+    AttributeBuilder needReindex = createNeedReindex("need-reindex");
+    if (needReindex.size() > 0)
     {
-      for(Tree tree : ec.listTrees())
+      monitorAttrs.add(needReindex.toAttribute());
+    }
+
+    if (filterUseEnabled)
+    {
+      monitorAttrs.add(createAttribute("filter-use-startTime", startTimeStamp));
+      monitorAttrs.add(createFilterUse("filter-use"));
+      monitorAttrs.add(createAttribute("filter-use-indexed", indexedSearchCount));
+      monitorAttrs.add(createAttribute("filter-use-unindexed", unindexedSearchCount));
+    }
+
+    return monitorAttrs;
+  }
+
+  private AttributeBuilder createNeedReindex(String attrName)
+  {
+    AttributeBuilder needReindex = new AttributeBuilder(attrName);
+    for (EntryContainer ec : rootContainer.getEntryContainers())
+    {
+      for (Tree tree : ec.listTrees())
       {
-        if(tree instanceof Index && !((Index)tree).isTrusted())
+        if (tree instanceof Index && !((Index) tree).isTrusted())
         {
           needReindex.add(tree.getName().toString());
         }
       }
     }
-    if(needReindex.size() > 0)
-    {
-      monitorAttrs.add(needReindex.toAttribute());
-    }
+    return needReindex;
+  }
 
-    if(filterUseEnabled)
-    {
-      monitorAttrs.add(Attributes.create("filter-use-startTime",
-          startTimeStamp));
-      AttributeBuilder builder = new AttributeBuilder("filter-use");
+  private Attribute createFilterUse(String attrName)
+  {
+    AttributeBuilder builder = new AttributeBuilder(attrName);
 
-      StringBuilder stringBuilder = new StringBuilder();
-      synchronized(filterToStats)
+    StringBuilder value = new StringBuilder();
+    synchronized (filterToStats)
+    {
+      for (Map.Entry<SearchFilter, FilterStats> entry : filterToStats.entrySet())
       {
-        for(Map.Entry<SearchFilter, FilterStats> entry :
-            filterToStats.entrySet())
-        {
-          entry.getKey().toString(stringBuilder);
-          stringBuilder.append(" hits:");
-          stringBuilder.append(entry.getValue().hits.get());
-          stringBuilder.append(" maxmatches:");
-          stringBuilder.append(entry.getValue().maxMatchingEntries);
-          stringBuilder.append(" message:");
-          stringBuilder.append(entry.getValue().failureReason);
-          builder.add(stringBuilder.toString());
-          stringBuilder.setLength(0);
-        }
+        entry.getKey().toString(value);
+        value.append(" hits:").append(entry.getValue().hits.get());
+        value.append(" maxmatches:").append(entry.getValue().maxMatchingEntries);
+        value.append(" message:").append(entry.getValue().failureReason);
+        builder.add(value.toString());
+        value.setLength(0);
       }
-      monitorAttrs.add(builder.toAttribute());
-      monitorAttrs.add(Attributes.create("filter-use-indexed",
-          String.valueOf(indexedSearchCount.get())));
-      monitorAttrs.add(Attributes.create("filter-use-unindexed",
-          String.valueOf(unindexedSearchCount.get())));
     }
+    return builder.toAttribute();
+  }
 
-    return monitorAttrs;
+  private Attribute createAttribute(String attrName, Object value)
+  {
+    return Attributes.create(attrName, String.valueOf(value));
   }
 
   /**
@@ -194,17 +197,17 @@
    */
   void updateStats(SearchFilter searchFilter, LocalizableMessage failureMessage)
   {
-    if(!filterUseEnabled)
+    if (!filterUseEnabled)
     {
       return;
     }
 
     FilterStats stats;
-    synchronized(filterToStats)
+    synchronized (filterToStats)
     {
       stats = filterToStats.get(searchFilter);
 
-      if(stats != null)
+      if (stats != null)
       {
         stats.update(1, failureMessage);
       }
@@ -228,17 +231,17 @@
    */
   void updateStats(SearchFilter searchFilter, long matchingEntries)
   {
-    if(!filterUseEnabled)
+    if (!filterUseEnabled)
     {
       return;
     }
 
     FilterStats stats;
-    synchronized(filterToStats)
+    synchronized (filterToStats)
     {
       stats = filterToStats.get(searchFilter);
 
-      if(stats != null)
+      if (stats != null)
       {
         stats.update(1, matchingEntries);
       }
@@ -259,13 +262,13 @@
    */
   void enableFilterUseStats(boolean enabled)
   {
-    if(enabled && !filterUseEnabled)
+    if (enabled && !filterUseEnabled)
     {
       startTimeStamp = TimeThread.getGMTTime();
       indexedSearchCount.set(0);
       unindexedSearchCount.set(0);
     }
-    else if(!enabled)
+    else if (!enabled)
     {
       filterToStats.clear();
     }
@@ -314,16 +317,15 @@
 
   private void removeLowestHit()
   {
-    while(!filterToStats.isEmpty() && filterToStats.size() > maxEntries)
+    while (!filterToStats.isEmpty() && filterToStats.size() > maxEntries)
     {
-      Iterator<Map.Entry<SearchFilter, FilterStats>> i =
-          filterToStats.entrySet().iterator();
-      Map.Entry<SearchFilter, FilterStats> lowest = i.next();
+      Iterator<Map.Entry<SearchFilter, FilterStats>> it = filterToStats.entrySet().iterator();
+      Map.Entry<SearchFilter, FilterStats> lowest = it.next();
       Map.Entry<SearchFilter, FilterStats> entry;
-      while(lowest.getValue().hits.get() > 1 && i.hasNext())
+      while (lowest.getValue().hits.get() > 1 && it.hasNext())
       {
-        entry = i.next();
-        if(entry.getValue().hits.get() < lowest.getValue().hits.get())
+        entry = it.next();
+        if (entry.getValue().hits.get() < lowest.getValue().hits.get())
         {
           lowest = entry;
         }

--
Gitblit v1.10.0