From 010eb1a3897f43458830cef58270d8196c3a4459 Mon Sep 17 00:00:00 2001
From: Violette Roche-Montane <violette.roche-montane@forgerock.com>
Date: Thu, 07 Feb 2013 13:27:03 +0000
Subject: [PATCH] OPENDJ-473 CR-1252 Implement a task which allows the administrator to forcefully clear an index's degraded status.

---
 opends/src/server/org/opends/server/backends/jeb/RebuildConfig.java |   94 +++++++++++++++++++++++++++++++----------------
 1 files changed, 62 insertions(+), 32 deletions(-)

diff --git a/opends/src/server/org/opends/server/backends/jeb/RebuildConfig.java b/opends/src/server/org/opends/server/backends/jeb/RebuildConfig.java
index 9910e05..1e1420f 100644
--- a/opends/src/server/org/opends/server/backends/jeb/RebuildConfig.java
+++ b/opends/src/server/org/opends/server/backends/jeb/RebuildConfig.java
@@ -23,7 +23,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2012 ForgeRock AS.
+ *      Portions Copyright 2011-2013 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
 
@@ -39,7 +39,8 @@
   /**
    * Identifies how indexes will be selected for rebuild.
    */
-  public static enum RebuildMode {
+  public static enum RebuildMode
+  {
     /**
      * Rebuild all indexes, including system indexes.
      */
@@ -70,8 +71,10 @@
 
   private String tmpDirectory;
 
+  private boolean isClearDegradedState;
+
   /**
-   * Create a new rebuild configuraiton.
+   * Create a new rebuild configuration.
    */
   public RebuildConfig()
   {
@@ -80,6 +83,7 @@
 
   /**
    * Get the base DN to rebuild.
+   *
    * @return The base DN to rebuild.
    */
   public DN getBaseDN()
@@ -89,7 +93,9 @@
 
   /**
    * Set the base DN to rebuild.
-   * @param baseDN The base DN to rebuild.
+   *
+   * @param baseDN
+   *          The base DN to rebuild.
    */
   public void setBaseDN(DN baseDN)
   {
@@ -109,34 +115,35 @@
   /**
    * Add an index to be rebuilt into the configuration. Duplicate index names
    * will be ignored. Adding an index that causes a mix of complete and partial
-   * rebuild for the same attribute index in the configuration will remove
-   * the partial and just keep the complete attribute index name.
-   * (ie. uid and uid.presence).
+   * rebuild for the same attribute index in the configuration will remove the
+   * partial and just keep the complete attribute index name. (ie. uid and
+   * uid.presence).
    *
-   * @param index The index to add.
+   * @param index
+   *          The index to add.
    */
   public void addRebuildIndex(String index)
   {
     String[] newIndexParts = index.split("\\.");
 
-    for(String s : new ArrayList<String>(rebuildList))
+    for (String s : new ArrayList<String>(rebuildList))
     {
       String[] existingIndexParts = s.split("\\.");
-      if(existingIndexParts[0].equalsIgnoreCase(newIndexParts[0]))
+      if (existingIndexParts[0].equalsIgnoreCase(newIndexParts[0]))
       {
-        if(newIndexParts.length == 1 && existingIndexParts.length == 1)
+        if (newIndexParts.length == 1 && existingIndexParts.length == 1)
         {
           return;
         }
-        else if(newIndexParts.length > 1 && existingIndexParts.length == 1)
+        else if (newIndexParts.length > 1 && existingIndexParts.length == 1)
         {
           return;
         }
-        else if(newIndexParts.length == 1 && existingIndexParts.length > 1)
+        else if (newIndexParts.length == 1 && existingIndexParts.length > 1)
         {
           rebuildList.remove(s);
         }
-        else if(newIndexParts[1].equalsIgnoreCase(existingIndexParts[1]))
+        else if (newIndexParts[1].equalsIgnoreCase(existingIndexParts[1]))
         {
           return;
         }
@@ -150,36 +157,37 @@
    * Check the given config for conflicts with this config. A conflict is
    * detected if both configs specify the same indexType/database to be rebuilt.
    *
-   * @param config The rebuild config to check against.
+   * @param config
+   *          The rebuild config to check against.
    * @return the name of the indexType causing the conflict or null if no
    *         conflict is detected.
    */
   public String checkConflicts(RebuildConfig config)
   {
     //If they specify different base DNs, no conflicts can occur.
-    if(this.baseDN.equals(config.baseDN))
+    if (this.baseDN.equals(config.baseDN))
     {
-      for(String thisIndex : this.rebuildList)
+      for (String thisIndex : this.rebuildList)
       {
-        for(String thatIndex : config.rebuildList)
+        for (String thatIndex : config.rebuildList)
         {
           String[] existingIndexParts = thisIndex.split("\\.");
           String[] newIndexParts = thatIndex.split("\\.");
-          if(existingIndexParts[0].equalsIgnoreCase(newIndexParts[0]))
+          if (existingIndexParts[0].equalsIgnoreCase(newIndexParts[0]))
           {
-            if(newIndexParts.length == 1 && existingIndexParts.length == 1)
+            if (newIndexParts.length == 1 && existingIndexParts.length == 1)
             {
               return thatIndex;
             }
-            else if(newIndexParts.length > 1 && existingIndexParts.length == 1)
+            else if (newIndexParts.length > 1 && existingIndexParts.length == 1)
             {
               return thatIndex;
             }
-            else if(newIndexParts.length == 1 && existingIndexParts.length > 1)
+            else if (newIndexParts.length == 1 && existingIndexParts.length > 1)
             {
               return thatIndex;
             }
-            else if(newIndexParts[1].equalsIgnoreCase(existingIndexParts[1]))
+            else if (newIndexParts[1].equalsIgnoreCase(existingIndexParts[1]))
             {
               return thatIndex;
             }
@@ -198,17 +206,17 @@
    */
   public boolean includesSystemIndex()
   {
-    for(String index : rebuildList)
+    for (String index : rebuildList)
     {
-      if(index.equalsIgnoreCase("id2entry"))
+      if (index.equalsIgnoreCase("id2entry"))
       {
         return true;
       }
-      if(index.equalsIgnoreCase("dn2id"))
+      if (index.equalsIgnoreCase("dn2id"))
       {
         return true;
       }
-      if(index.equalsIgnoreCase("dn2uri"))
+      if (index.equalsIgnoreCase("dn2uri"))
       {
         return true;
       }
@@ -217,11 +225,11 @@
     return false;
   }
 
-
   /**
    * Set the temporary directory to the specified path.
    *
-   * @param path The path to set the temporary directory to.
+   * @param path
+   *          The path to set the temporary directory to.
    */
   public void setTmpDirectory(String path)
   {
@@ -231,18 +239,18 @@
   /**
    * Return the temporary directory path.
    *
-   * @return  The temporary directory string.
+   * @return The temporary directory string.
    */
   public String getTmpDirectory()
   {
     return tmpDirectory;
   }
 
-
   /**
    * Sets the rebuild mode.
    *
-   * @param mode The new rebuild mode.
+   * @param mode
+   *          The new rebuild mode.
    */
   public void setRebuildMode(RebuildMode mode)
   {
@@ -259,5 +267,27 @@
     return rebuildMode;
   }
 
+  /**
+   * Returns {@code true} if indexes should be forcefully marked as valid even
+   * if they are currently degraded.
+   *
+   * @return {@code true} if index should be forcefully marked as valid.
+   */
+  public boolean isClearDegradedState()
+  {
+    return isClearDegradedState;
+  }
+
+  /**
+   * Sets the 'clear degraded index' status.
+   *
+   * @param isClearDegradedState
+   *          {@code true} if indexes should be forcefully marked as valid even
+   *          if they are currently degraded.
+   */
+  public void isClearDegradedState(boolean isClearDegradedState)
+  {
+    this.isClearDegradedState = isClearDegradedState;
+  }
 
 }

--
Gitblit v1.10.0