From f7fe6c1339f1a7da5723036cbae27ab74e13a9a2 Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <yannick.lecaillez@forgerock.com>
Date: Thu, 21 May 2015 12:42:58 +0000
Subject: [PATCH] OPENDJ-1763: verify-index fails with InitializationException when the server is started

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
index ef5b39e..ee81598 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
@@ -27,7 +27,6 @@
 
 import static com.persistit.Transaction.CommitPolicy.*;
 import static java.util.Arrays.*;
-
 import static org.opends.messages.BackendMessages.*;
 import static org.opends.messages.ConfigMessages.*;
 import static org.opends.messages.UtilityMessages.*;
@@ -55,6 +54,7 @@
 import org.forgerock.opendj.config.server.ConfigException;
 import org.forgerock.opendj.ldap.ByteSequence;
 import org.forgerock.opendj.ldap.ByteString;
+import org.forgerock.util.Reject;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.PersistitBackendCfg;
 import org.opends.server.api.Backupable;
@@ -63,6 +63,7 @@
 import org.opends.server.backends.pluggable.spi.Importer;
 import org.opends.server.backends.pluggable.spi.ReadOperation;
 import org.opends.server.backends.pluggable.spi.Storage;
+import org.opends.server.backends.pluggable.spi.StorageInUseException;
 import org.opends.server.backends.pluggable.spi.StorageRuntimeException;
 import org.opends.server.backends.pluggable.spi.StorageStatus;
 import org.opends.server.backends.pluggable.spi.TreeName;
@@ -90,6 +91,7 @@
 import com.persistit.Value;
 import com.persistit.Volume;
 import com.persistit.VolumeSpecification;
+import com.persistit.exception.InUseException;
 import com.persistit.exception.PersistitException;
 import com.persistit.exception.RollbackException;
 
@@ -580,13 +582,13 @@
     cfg.addPersistitChangeListener(this);
   }
 
-  private Configuration buildConfiguration()
+  private Configuration buildConfiguration(AccessMode accessMode)
   {
     final Configuration dbCfg = new Configuration();
     dbCfg.setLogFile(new File(backendDirectory, VOLUME_NAME + ".log").getPath());
     dbCfg.setJournalPath(new File(backendDirectory, JOURNAL_NAME).getPath());
     dbCfg.setVolumeList(asList(new VolumeSpecification(new File(backendDirectory, VOLUME_NAME).getPath(), null,
-        BUFFER_SIZE, 4096, Long.MAX_VALUE / BUFFER_SIZE, 2048, true, false, false)));
+        BUFFER_SIZE, 4096, Long.MAX_VALUE / BUFFER_SIZE, 2048, true, false, accessMode.equals(AccessMode.READ_ONLY))));
     final BufferPoolConfiguration bufferPoolCfg = getBufferPoolCfg(dbCfg);
     bufferPoolCfg.setMaximumCount(Integer.MAX_VALUE);
 
@@ -642,9 +644,10 @@
 
   /** {@inheritDoc} */
   @Override
-  public void open() throws ConfigException, StorageRuntimeException
+  public void open(AccessMode accessMode) throws ConfigException, StorageRuntimeException
   {
-    open0(buildConfiguration());
+    Reject.ifNull(accessMode, "accessMode must not be null");
+    open0(buildConfiguration(accessMode));
   }
 
   private void open0(final Configuration dbCfg) throws ConfigException
@@ -666,6 +669,9 @@
       db.initialize();
       volume = db.loadVolume(VOLUME_NAME);
     }
+    catch(final InUseException e) {
+      throw new StorageInUseException(e);
+    }
     catch (final PersistitException e)
     {
       throw new StorageRuntimeException(e);
@@ -728,7 +734,7 @@
   @Override
   public Importer startImport() throws ConfigException, StorageRuntimeException
   {
-    open0(buildConfiguration());
+    open0(buildConfiguration(AccessMode.READ_WRITE));
     return new ImporterImpl();
   }
 

--
Gitblit v1.10.0