From 6f1bea9c0164f4b1a7673c9f41d4aa69d2e688a9 Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <ylecaillez@forgerock.com>
Date: Wed, 27 Apr 2016 14:08:40 +0000
Subject: [PATCH] Fix: Allow to change PDB's commit policy without restart.

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java
index 7f41304..81b74bd 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java
@@ -83,6 +83,7 @@
 import com.persistit.Key;
 import com.persistit.Persistit;
 import com.persistit.Transaction;
+import com.persistit.Transaction.CommitPolicy;
 import com.persistit.Value;
 import com.persistit.Volume;
 import com.persistit.VolumeSpecification;
@@ -295,7 +296,7 @@
       {
         txn.begin();
         getNewExchange(treeName, true);
-        txn.commit();
+        txn.commit(commitPolicy);
       }
       catch (PersistitException e)
       {
@@ -315,7 +316,7 @@
         txn.begin();
         ex = getNewExchange(treeName, true);
         ex.removeTree();
-        txn.commit();
+        txn.commit(commitPolicy);
       }
       catch (PersistitException e)
       {
@@ -701,6 +702,7 @@
 
   private final ServerContext serverContext;
   private final File backendDirectory;
+  private CommitPolicy commitPolicy;
   private AccessMode accessMode;
   private Persistit db;
   private Volume volume;
@@ -732,7 +734,7 @@
   {
     final Configuration dbCfg = buildConfiguration(AccessMode.READ_WRITE);
     getBufferPoolCfg(dbCfg).setMaximumMemory(IMPORT_DB_CACHE_SIZE);
-    dbCfg.setCommitPolicy(SOFT);
+    commitPolicy = SOFT;
     return dbCfg;
   }
 
@@ -762,7 +764,7 @@
       bufferPoolCfg.setMaximumMemory(memQuota.memPercentToBytes(config.getDBCachePercent()));
       memQuota.acquireMemory(memQuota.memPercentToBytes(config.getDBCachePercent()));
     }
-    dbCfg.setCommitPolicy(config.isDBTxnNoSync() ? SOFT : GROUP);
+    commitPolicy = config.isDBTxnNoSync() ? SOFT : GROUP;
     dbCfg.setJmxEnabled(false);
     return dbCfg;
   }
@@ -855,7 +857,7 @@
         try (final StorageImpl storageImpl = newStorageImpl())
         {
           final T result = operation.run(storageImpl);
-          txn.commit();
+          txn.commit(commitPolicy);
           return result;
         }
         catch (final StorageRuntimeException e)
@@ -905,7 +907,7 @@
         try (final StorageImpl storageImpl = newStorageImpl())
         {
           operation.run(storageImpl);
-          txn.commit();
+          txn.commit(commitPolicy);
           return;
         }
         catch (final StorageRuntimeException e)
@@ -1267,6 +1269,7 @@
       }
       registerMonitoredDirectory(cfg);
       config = cfg;
+      commitPolicy = config.isDBTxnNoSync() ? SOFT : GROUP;
     }
     catch (Exception e)
     {

--
Gitblit v1.10.0