From 5c17f67c916fb8ed2094857ca565e5b3aa1130a7 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 17 Dec 2014 13:24:18 +0000
Subject: [PATCH] OPENDJ-1602 (CR-5566) New pluggable storage based backend
---
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/BackendImpl.java | 150 ++++++-------------------------------------------
1 files changed, 20 insertions(+), 130 deletions(-)
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/BackendImpl.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/BackendImpl.java
index db78443..11676d3 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/BackendImpl.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/BackendImpl.java
@@ -79,10 +79,10 @@
private LocalDBBackendCfg cfg;
/** The root JE container to use for this backend. */
private RootContainer rootContainer;
+
+ // FIXME: this is broken. Replace with read-write lock.
/** A count of the total operation threads currently in the backend. */
private final AtomicInteger threadTotalCount = new AtomicInteger(0);
- /** A count of the write operation threads currently in the backend. */
- private final AtomicInteger threadWriteCount = new AtomicInteger(0);
/** The base DNs defined for this backend instance. */
private DN[] baseDNs;
@@ -99,34 +99,18 @@
OID_SERVER_SIDE_SORT_REQUEST_CONTROL,
OID_VLV_REQUEST_CONTROL));
- /** Begin a Backend API method that reads the database. */
- private void readerBegin()
+ /** Begin a Backend API method that accesses the database. */
+ private void accessBegin()
{
threadTotalCount.getAndIncrement();
}
- /** End a Backend API method that reads the database. */
- private void readerEnd()
+ /** End a Backend API method that accesses the database. */
+ private void accessEnd()
{
threadTotalCount.getAndDecrement();
}
- /** Begin a Backend API method that writes the database. */
- private void writerBegin()
- {
- threadTotalCount.getAndIncrement();
- threadWriteCount.getAndIncrement();
- }
-
- /** End a Backend API method that writes the database. */
- private void writerEnd()
- {
- threadWriteCount.getAndDecrement();
- threadTotalCount.getAndDecrement();
- }
-
-
-
/**
* Wait until there are no more threads accessing the database. It is assumed
* that new threads have been prevented from entering the database at the time
@@ -309,7 +293,6 @@
// Make sure the thread counts are zero for next initialization.
threadTotalCount.set(0);
- threadWriteCount.set(0);
// Log an informational message.
logger.info(NOTE_BACKEND_OFFLINE, cfg.getBackendId());
@@ -476,7 +459,7 @@
return -1;
}
- readerBegin();
+ accessBegin();
ec.sharedLock.lock();
try
{
@@ -496,7 +479,7 @@
finally
{
ec.sharedLock.unlock();
- readerEnd();
+ accessEnd();
}
}
@@ -506,7 +489,7 @@
@Override
public Entry getEntry(DN entryDN) throws DirectoryException
{
- readerBegin();
+ accessBegin();
checkRootContainerInitialized();
EntryContainer ec = rootContainer.getEntryContainer(entryDN);
@@ -524,7 +507,7 @@
finally
{
ec.sharedLock.unlock();
- readerEnd();
+ accessEnd();
}
return entry;
@@ -538,7 +521,7 @@
throws DirectoryException, CanceledOperationException
{
checkDiskSpace(addOperation);
- writerBegin();
+ accessBegin();
checkRootContainerInitialized();
EntryContainer ec = rootContainer.getEntryContainer(entry.getName());
@@ -555,7 +538,7 @@
finally
{
ec.sharedLock.unlock();
- writerEnd();
+ accessEnd();
}
}
@@ -567,7 +550,7 @@
throws DirectoryException, CanceledOperationException
{
checkDiskSpace(deleteOperation);
- writerBegin();
+ accessBegin();
checkRootContainerInitialized();
EntryContainer ec = rootContainer.getEntryContainer(entryDN);
@@ -584,7 +567,7 @@
finally
{
ec.sharedLock.unlock();
- writerEnd();
+ accessEnd();
}
}
@@ -597,7 +580,7 @@
CanceledOperationException
{
checkDiskSpace(modifyOperation);
- writerBegin();
+ accessBegin();
checkRootContainerInitialized();
EntryContainer ec = rootContainer.getEntryContainer(newEntry.getName());
@@ -615,7 +598,7 @@
finally
{
ec.sharedLock.unlock();
- writerEnd();
+ accessEnd();
}
}
@@ -628,7 +611,7 @@
throws DirectoryException, CanceledOperationException
{
checkDiskSpace(modifyDNOperation);
- writerBegin();
+ accessBegin();
checkRootContainerInitialized();
EntryContainer currentContainer = rootContainer.getEntryContainer(currentDN);
@@ -655,7 +638,7 @@
finally
{
currentContainer.sharedLock.unlock();
- writerEnd();
+ accessEnd();
}
}
@@ -666,7 +649,7 @@
public void search(SearchOperation searchOperation)
throws DirectoryException, CanceledOperationException
{
- readerBegin();
+ accessBegin();
checkRootContainerInitialized();
EntryContainer ec = rootContainer.getEntryContainer(searchOperation.getBaseDN());
@@ -684,7 +667,7 @@
finally
{
ec.sharedLock.unlock();
- readerEnd();
+ accessEnd();
}
}
@@ -848,21 +831,6 @@
}
}
- private EnvironmentConfig getEnvConfigForImport()
- {
- final EnvironmentConfig envConfig = new EnvironmentConfig();
- envConfig.setAllowCreate(true);
- envConfig.setTransactional(false);
- envConfig.setDurability(Durability.COMMIT_NO_SYNC);
- envConfig.setLockTimeout(0, TimeUnit.SECONDS);
- envConfig.setTxnTimeout(0, TimeUnit.SECONDS);
- envConfig.setConfigParam(CLEANER_MIN_FILE_UTILIZATION,
- String.valueOf(cfg.getDBCleanerMinUtilization()));
- envConfig.setConfigParam(LOG_FILE_MAX,
- String.valueOf(cfg.getDBLogFileMax()));
- return envConfig;
- }
-
/**
* Verify the integrity of the backend instance.
* @param verifyConfig The verify configuration.
@@ -902,84 +870,6 @@
}
}
-
- /**
- * Rebuild index(es) in the backend instance. Note that the server will not
- * explicitly initialize this backend before calling this method.
- * @param rebuildConfig The rebuild configuration.
- * @throws ConfigException If an unrecoverable problem arises during
- * initialization.
- * @throws InitializationException If a problem occurs during initialization
- * that is not related to the server
- * configuration.
- * @throws DirectoryException If a Directory Server error occurs.
- */
- public void rebuildBackend(RebuildConfig rebuildConfig)
- throws InitializationException, ConfigException, DirectoryException
- {
- // If the backend already has the root container open, we must use the same
- // underlying root container
- boolean openRootContainer = mustOpenRootContainer();
-
- /*
- * If the rootContainer is open, the backend is initialized by something
- * else. We can't do any rebuild of system indexes while others are using
- * this backend.
- */
- final ResultCode errorRC = DirectoryServer.getServerErrorResultCode();
- if(!openRootContainer && rebuildConfig.includesSystemIndex())
- {
- throw new DirectoryException(errorRC, ERR_JEB_REBUILD_BACKEND_ONLINE.get());
- }
-
- try
- {
- final EnvironmentConfig envConfig;
- if (openRootContainer)
- {
- envConfig = getEnvConfigForImport();
- rootContainer = initializeRootContainer();
- }
- else
- {
- envConfig = parseConfigEntry(cfg);
-
- }
- throw new NotImplementedException();
-// final Importer importer = new Importer(rebuildConfig, cfg, envConfig);
-// importer.rebuildIndexes(rootContainer);
- }
- catch (ExecutionException execEx)
- {
- logger.traceException(execEx);
- throw new DirectoryException(errorRC, ERR_EXECUTION_ERROR.get(execEx.getMessage()));
- }
- catch (InterruptedException intEx)
- {
- logger.traceException(intEx);
- throw new DirectoryException(errorRC, ERR_INTERRUPTED_ERROR.get(intEx.getMessage()));
- }
- catch (ConfigException ce)
- {
- logger.traceException(ce);
- throw new DirectoryException(errorRC, ce.getMessageObject());
- }
- catch (StorageRuntimeException e)
- {
- logger.traceException(e);
- throw new DirectoryException(errorRC, LocalizableMessage.raw(e.getMessage()));
- }
- catch (InitializationException e)
- {
- logger.traceException(e);
- throw new InitializationException(e.getMessageObject());
- }
- finally
- {
- closeTemporaryRootContainer(openRootContainer);
- }
- }
-
/**
* If a root container was opened in the calling method method as read only,
* close it to leave the backend in the same state.
--
Gitblit v1.10.0