From d3f720ebd77231a9703f59c3932fb9c80f4c7acb Mon Sep 17 00:00:00 2001
From: abobrov <abobrov@localhost>
Date: Tue, 24 Nov 2009 15:14:33 +0000
Subject: [PATCH] - upgrade to BDB JE 4 [ 4.0.73 ]

---
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JECompressedSchema.java      |    4 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java             |   29 +++------
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EnvManager.java              |    4 
 opendj-sdk/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java  |    6 -
 opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java         |    4 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDB.java     |    6 +-
 opendj-sdk/opends/src/messages/messages/jeb.properties                                   |    3 +
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java           |   26 +++-----
 opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDB.java         |    6 +-
 opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java  |    4 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDbEnv.java  |    4 
 opendj-sdk/opends/lib/je.jar                                                             |    0 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java                   |    4 
 opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java |   26 +++++---
 14 files changed, 56 insertions(+), 70 deletions(-)

diff --git a/opendj-sdk/opends/lib/je.jar b/opendj-sdk/opends/lib/je.jar
index 90f8e56..5f5cc3c 100644
--- a/opendj-sdk/opends/lib/je.jar
+++ b/opendj-sdk/opends/lib/je.jar
Binary files differ
diff --git a/opendj-sdk/opends/src/messages/messages/jeb.properties b/opendj-sdk/opends/src/messages/messages/jeb.properties
index 75266f8..14b248f 100644
--- a/opendj-sdk/opends/src/messages/messages/jeb.properties
+++ b/opendj-sdk/opends/src/messages/messages/jeb.properties
@@ -386,3 +386,6 @@
  entries to process
 SEVERE_ERR_JEB_REBUILD_SUFFIX_ERROR_205=Rebuild of base DN %s failed \
 because it not available
+SEVERE_ERR_CONFIG_JEB_DURABILITY_CONFLICT_206=Configuration attributes \
+ ds-cfg-db-txn-no-sync and ds-cfg-db-txn-write-no-sync are mutually \
+ exclusive and cannot be both set at the same time
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
index 5996971..d3328ca 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
@@ -40,8 +40,10 @@
 
 import com.sleepycat.je.DatabaseException;
 import com.sleepycat.je.EnvironmentConfig;
-import com.sleepycat.je.RunRecoveryException;
+import com.sleepycat.je.EnvironmentFailureException;
 
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
 import org.opends.server.backends.jeb.importLDIF.*;
 import org.opends.server.admin.std.meta.LocalDBIndexCfgDefn;
 import org.opends.server.admin.std.server.MonitorProviderCfg;
@@ -312,7 +314,7 @@
     {
       EnvironmentConfig envConfig =
           ConfigurableEnvironment.parseConfigEntry(cfg);
-      envConfig.setLockTimeout(0);
+      envConfig.setLockTimeout(0, TimeUnit.MICROSECONDS);
       rootContainer = initializeRootContainer(envConfig);
     }
 
@@ -997,7 +999,6 @@
         envConfig.setReadOnly(true);
         envConfig.setAllowCreate(false);
         envConfig.setTransactional(false);
-        envConfig.setTxnNoSync(false);
         envConfig.setConfigParam("je.env.isLocking", "true");
         envConfig.setConfigParam("je.env.runCheckpointer", "true");
 
@@ -1130,7 +1131,6 @@
       envConfig.setReadOnly(false);
       envConfig.setAllowCreate(true);
       envConfig.setTransactional(false);
-      envConfig.setTxnNoSync(false);
       envConfig.setConfigParam(EnvironmentConfig.ENV_IS_LOCKING, "true");
       envConfig.setConfigParam(EnvironmentConfig.ENV_RUN_CHECKPOINTER, "false");
       envConfig.setConfigParam(EnvironmentConfig.ENV_RUN_CLEANER, "false");
@@ -1273,7 +1273,6 @@
         envConfig.setReadOnly(true);
         envConfig.setAllowCreate(false);
         envConfig.setTransactional(false);
-        envConfig.setTxnNoSync(false);
         envConfig.setConfigParam("je.env.isLocking", "true");
         envConfig.setConfigParam("je.env.runCheckpointer", "true");
 
@@ -1364,7 +1363,6 @@
         envConfig.setReadOnly(false);
         envConfig.setAllowCreate(true);
         envConfig.setTransactional(false);
-        envConfig.setTxnNoSync(false);
         envConfig.setConfigParam(EnvironmentConfig.ENV_IS_LOCKING, "true");
         envConfig.setConfigParam(
                                EnvironmentConfig.ENV_RUN_CHECKPOINTER, "false");
@@ -1522,18 +1520,9 @@
       List<Message> unacceptableReasons)
   {
     // Make sure that the logging level value is acceptable.
-    String loggingLevel = cfg.getDBLoggingLevel();
-    if (! (loggingLevel.equals("OFF") ||
-           loggingLevel.equals("SEVERE") ||
-           loggingLevel.equals("WARNING") ||
-           loggingLevel.equals("INFORMATION") ||
-           loggingLevel.equals("CONFIG") ||
-           loggingLevel.equals("FINE") ||
-           loggingLevel.equals("FINER") ||
-           loggingLevel.equals("FINEST") ||
-           loggingLevel.equals("OFF")))
-    {
-
+    try {
+      Level.parse(cfg.getDBLoggingLevel());
+    } catch (Exception e) {
       Message message = ERR_JEB_INVALID_LOGGING_LEVEL.get(
               String.valueOf(cfg.getDBLoggingLevel()),
               String.valueOf(cfg.dn()));
@@ -1665,7 +1654,6 @@
     envConfig.setReadOnly(true);
     envConfig.setAllowCreate(false);
     envConfig.setTransactional(false);
-    envConfig.setTxnNoSync(false);
     envConfig.setConfigParam("je.env.isLocking", "true");
     envConfig.setConfigParam("je.env.runCheckpointer", "true");
 
@@ -1700,7 +1688,8 @@
   DirectoryException createDirectoryException(DatabaseException e) {
     ResultCode resultCode = DirectoryServer.getServerErrorResultCode();
     Message message;
-    if (e instanceof RunRecoveryException) {
+    if ((e instanceof EnvironmentFailureException) &&
+            !rootContainer.isValid()) {
       message = NOTE_BACKEND_ENVIRONMENT_UNUSABLE.get(getBackendID());
       logError(message);
       DirectoryServer.sendAlertNotification(DirectoryServer.getInstance(),
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java
index 2ef8332..9fcaf4d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java
@@ -26,6 +26,7 @@
  */
 package org.opends.server.backends.jeb;
 
+import com.sleepycat.je.Durability;
 import com.sleepycat.je.EnvironmentConfig;
 import com.sleepycat.je.dbi.MemoryBudget;
 
@@ -370,9 +371,6 @@
       registerProp("je.evictor.lruOnly", ATTR_EVICTOR_LRU_ONLY);
       registerProp("je.evictor.nodesPerScan", ATTR_EVICTOR_NODES_PER_SCAN);
       registerProp("je.log.fileMax", ATTR_DATABASE_LOG_FILE_MAX);
-      registerProp("java.util.logging.FileHandler.on",
-                   ATTR_LOGGING_FILE_HANDLER_ON);
-      registerProp("java.util.logging.level", ATTR_LOGGING_LEVEL);
       registerProp("je.checkpointer.bytesInterval",
                    ATTR_CHECKPOINTER_BYTES_INTERVAL);
       registerProp("je.checkpointer.wakeupInterval",
@@ -469,9 +467,20 @@
 
     EnvironmentConfig envConfig = defaultConfig();
 
-    // Handle the attributes that do not have a JE property.
-    envConfig.setTxnNoSync(cfg.isDBTxnNoSync());
-    envConfig.setTxnWriteNoSync(cfg.isDBTxnWriteNoSync());
+    // Durability settings.
+    if (cfg.isDBTxnNoSync() && cfg.isDBTxnWriteNoSync())
+    {
+      throw new ConfigException(
+              ERR_CONFIG_JEB_DURABILITY_CONFLICT.get());
+    }
+    if (cfg.isDBTxnNoSync())
+    {
+      envConfig.setDurability(Durability.COMMIT_NO_SYNC);
+    }
+    if (cfg.isDBTxnWriteNoSync())
+    {
+      envConfig.setDurability(Durability.COMMIT_WRITE_NO_SYNC);
+    }
 
     // Iterate through the config attributes associated with a JE property.
     for (Map.Entry<String, String> mapEntry : attrMap.entrySet())
@@ -534,11 +543,6 @@
         // Set JE property.
         try {
           envConfig.setConfigParam(jePropertyName, jePropertyValue);
-          // This is a special case that JE cannot validate before
-          // actually setting it. Validate it before it gets to JE.
-          if (jePropertyName.equals("java.util.logging.level")) {
-            java.util.logging.Level.parse(jePropertyValue);
-          }
           // If this property shadows an existing config attribute.
           if (configAttrMap.containsKey(jePropertyName)) {
             Message message = ERR_CONFIG_JE_PROPERTY_SHADOWS_CONFIG.get(
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EnvManager.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EnvManager.java
index 1385c65..06e78d7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EnvManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/EnvManager.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2009 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
 import org.opends.messages.Message;
@@ -62,7 +62,7 @@
       {
         return name.endsWith(".jdb") ||
                name.endsWith(".del") ||
-               name.equals("je.lck");
+               name.startsWith("je.");
       }
     };
   }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java
index 1e3fad5..7568d67 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java
@@ -314,7 +314,7 @@
   private void
   deleteKey(DatabaseEntry key, ImportIDSet importIdSet,
          DatabaseEntry data) throws DatabaseException {
-    OperationStatus status  = read(null, key, data, LockMode.RMW);
+    OperationStatus status  = read(null, key, data, LockMode.DEFAULT);
     if(status == OperationStatus.SUCCESS) {
       newImportIDSet.clear(false);
       newImportIDSet.remove(data.getData(), importIdSet);
@@ -337,7 +337,7 @@
   private void
   insertKey(DatabaseEntry key, ImportIDSet importIdSet,
          DatabaseEntry data) throws DatabaseException {
-    OperationStatus status  = read(null, key, data, LockMode.RMW);
+    OperationStatus status  = read(null, key, data, LockMode.DEFAULT);
     if(status == OperationStatus.SUCCESS) {
       newImportIDSet.clear(false);
       if (newImportIDSet.merge(data.getData(), importIdSet))
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JECompressedSchema.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JECompressedSchema.java
index b02101f..5e0365e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JECompressedSchema.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/JECompressedSchema.java
@@ -52,8 +52,8 @@
 import com.sleepycat.je.DatabaseConfig;
 import com.sleepycat.je.DatabaseEntry;
 import com.sleepycat.je.DatabaseException;
-import com.sleepycat.je.DeadlockException;
 import com.sleepycat.je.Environment;
+import com.sleepycat.je.LockConflictException;
 import com.sleepycat.je.LockMode;
 import com.sleepycat.je.OperationStatus;
 
@@ -655,7 +655,7 @@
                          DirectoryServer.getServerErrorResultCode(), m);
         }
       }
-      catch (DeadlockException de)
+      catch (LockConflictException ce)
       {
         continue;
       }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
index 3d2e316..219c6c7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
@@ -637,22 +637,6 @@
   }
 
   /**
-   * Get the environment lock stats of the JE environment used in this
-   * root container.
-   *
-   * @param statsConfig The configuration to use for the EnvironmentStats
-   *                    object.
-   * @return The environment status of the JE environment.
-   * @throws DatabaseException If an error occurs while retriving the stats
-   *                           object.
-   */
-  public LockStats getEnvironmentLockStats(StatsConfig statsConfig)
-      throws DatabaseException
-  {
-    return env.getLockStats(statsConfig);
-  }
-
-  /**
    * Get the environment transaction stats of the JE environment used
    * in this root container.
    *
@@ -1060,4 +1044,14 @@
     }
     return totalCleaned;
   }
+
+  /**
+   * Returns whether this container JE database environment is
+   * open, valid and can be used.
+   *
+   * @return {@code true} if valid, or {@code false} otherwise.
+   */
+  public boolean isValid() {
+    return env.isValid();
+  }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java b/opendj-sdk/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java
index c411090..fcf0bed 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Copyright 2006-2009 Sun Microsystems, Inc.
  */
 package org.opends.server.monitors;
 
@@ -49,7 +49,6 @@
 import com.sleepycat.je.DatabaseException;
 import com.sleepycat.je.EnvironmentStats;
 import com.sleepycat.je.JEVersion;
-import com.sleepycat.je.LockStats;
 import com.sleepycat.je.StatsConfig;
 import com.sleepycat.je.TransactionStats;
 
@@ -210,14 +209,12 @@
   public ArrayList<Attribute> getMonitorData()
   {
     EnvironmentStats environmentStats = null;
-    LockStats lockStats = null;
     TransactionStats transactionStats = null;
     StatsConfig statsConfig = new StatsConfig();
 
     try
     {
       environmentStats = rootContainer.getEnvironmentStats(statsConfig);
-      lockStats = rootContainer.getEnvironmentLockStats(statsConfig);
       transactionStats =
           rootContainer.getEnvironmentTransactionStats(statsConfig);
     } catch (DatabaseException e)
@@ -237,7 +234,6 @@
     monitorAttrs.add(Attributes.create(versionType, jeVersion));
 
     addAttributesForStatsObject(monitorAttrs, environmentStats, "Environment");
-    addAttributesForStatsObject(monitorAttrs, lockStats, "Lock");
     addAttributesForStatsObject(monitorAttrs, transactionStats, "Transaction");
 
     return monitorAttrs;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java
index c92f881..590ac3f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DbHandler.java
@@ -50,7 +50,7 @@
 import org.opends.server.replication.server.ReplicationDB.ReplServerDBCursor;
 
 import com.sleepycat.je.DatabaseException;
-import com.sleepycat.je.DeadlockException;
+import com.sleepycat.je.LockConflictException;
 
 /**
  * This class is used for managing the replicationServer database for each
@@ -460,7 +460,7 @@
           cursor.close();
           done = true;
         }
-        catch (DeadlockException e)
+        catch (LockConflictException e)
         {
           cursor.abort();
           if (tries == DEADLOCK_RETRIES)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDB.java
index 629100d..c2f2440 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDB.java
@@ -42,7 +42,7 @@
 import com.sleepycat.je.Database;
 import com.sleepycat.je.DatabaseEntry;
 import com.sleepycat.je.DatabaseException;
-import com.sleepycat.je.DeadlockException;
+import com.sleepycat.je.LockConflictException;
 import com.sleepycat.je.LockMode;
 import com.sleepycat.je.OperationStatus;
 import com.sleepycat.je.Transaction;
@@ -126,7 +126,7 @@
           txn = null;
           done = true;
         }
-        catch (DeadlockException e)
+        catch (LockConflictException e)
         {
           if (txn != null)
             txn.abort();
@@ -565,7 +565,7 @@
         closeLockedCursor(cursor);
         cursor = null;
       }
-      catch (DeadlockException e1)
+      catch (LockConflictException e1)
       {
         // The DB documentation states that a DeadlockException
         // on the close method of a cursor that is aborting should
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java
index f3e1e4f..3c3d18d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java
@@ -49,7 +49,7 @@
 import org.opends.server.types.InitializationException;
 
 import com.sleepycat.je.DatabaseException;
-import com.sleepycat.je.DeadlockException;
+import com.sleepycat.je.LockConflictException;
 
 /**
  * This class is used for managing the replicationServer database for each
@@ -365,7 +365,7 @@
       cursor.close();
       done = true;
     }
-    catch (DeadlockException e)
+    catch (LockConflictException e)
     {
       cursor.abort();
       if (tries == DEADLOCK_RETRIES)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDB.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDB.java
index a86bb11..0e045bc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDB.java
@@ -42,7 +42,7 @@
 import com.sleepycat.je.DatabaseEntry;
 import com.sleepycat.je.DatabaseException;
 import com.sleepycat.je.Database;
-import com.sleepycat.je.DeadlockException;
+import com.sleepycat.je.LockConflictException;
 import com.sleepycat.je.LockMode;
 import com.sleepycat.je.OperationStatus;
 import com.sleepycat.je.Transaction;
@@ -130,7 +130,7 @@
           txn = null;
           done = true;
         }
-        catch (DeadlockException e)
+        catch (LockConflictException e)
         {
           if (txn != null)
             txn.abort();
@@ -535,7 +535,7 @@
         closeLockedCursor(cursor);
         cursor = null;
       }
-      catch (DeadlockException e1)
+      catch (LockConflictException e1)
       {
         // The DB documentation states that a DeadlockException
         // on the close method of a cursor that is aborting should
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDbEnv.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDbEnv.java
index cc9b74e..cc9d667 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDbEnv.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationDbEnv.java
@@ -47,6 +47,7 @@
 import com.sleepycat.je.LockMode;
 import com.sleepycat.je.OperationStatus;
 import com.sleepycat.je.Transaction;
+import java.util.concurrent.TimeUnit;
 
 /**
  * This class is used to represent a Db environment that can be used
@@ -89,7 +90,6 @@
     envConfig.setAllowCreate(true);
     envConfig.setTransactional(true);
     envConfig.setConfigParam("je.cleaner.expunge", "true");
-    envConfig.setConfigParam("java.util.logging.FileHandler.on", "true");
     envConfig.setConfigParam("je.cleaner.threads", "2");
     envConfig.setConfigParam("je.checkpointer.highPriority", "true");
 
@@ -102,7 +102,7 @@
     // deleted at the beginning of the Replication log, this should never
     // cause any deadlock. It is therefore safe to increase the TXN timeout
     // to 10 seconds.
-    envConfig.setTxnTimeout(10000000);
+    envConfig.setTxnTimeout(10, TimeUnit.SECONDS);
     dbEnvironment = new Environment(new File(path), envConfig);
 
     /*

--
Gitblit v1.10.0