From be9f94f921957835e36578e31b5905a91de24cd3 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 18 Dec 2014 17:04:27 +0000
Subject: [PATCH] OPENDJ-1602 New pluggable storage based backend
---
opendj3-server-dev/src/server/org/opends/server/backends/pluggable/DbPreloadComparator.java | 2 -
opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java | 37 ++++++++++++++++++
opendj3-server-dev/src/server/org/opends/server/backends/pluggable/DatabaseContainer.java | 1
opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/WriteableStorage.java | 2 +
opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Storage.java | 7 ++-
opendj3-server-dev/src/server/org/opends/server/backends/pluggable/IndexQueryFactoryImpl.java | 4 +-
opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java | 10 ++--
opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryIDSetSorter.java | 8 ++-
8 files changed, 55 insertions(+), 16 deletions(-)
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java b/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
index fa12c03..01a5b2e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
@@ -235,6 +235,33 @@
db.releaseExchange(ex);
}
}
+
+ @Override
+ public void truncateTree(TreeName treeName) {
+ try {
+ getVolume(treeName).truncate();
+ } catch (PersistitException e) {
+ throw new StorageRuntimeException(e);
+ }
+ }
+
+ @Override
+ public void renameTree(TreeName oldTreeName, TreeName newTreeName) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void deleteTree(TreeName treeName) {
+ Exchange ex = null;
+ try {
+ ex = getExchange(treeName);
+ ex.removeTree();
+ } catch (PersistitException e) {
+ throw new StorageRuntimeException(e);
+ } finally {
+ db.releaseExchange(ex);
+ }
+ }
}
private final class CursorImpl implements Cursor {
@@ -472,4 +499,14 @@
private Exchange getExchange0(TreeName treeName, boolean create) throws PersistitException {
return db.getExchange(getVolume(treeName), treeName.toString(), create);
}
+
+ @Override
+ public void closeTree(TreeName treeName) {
+ // nothing to do, in persistit you close the volume itself
+ }
+
+ @Override
+ public boolean isValid() {
+ return !db.isFatal();
+ }
}
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/DatabaseContainer.java b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/DatabaseContainer.java
index 49bee84..6fa9842 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/DatabaseContainer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/DatabaseContainer.java
@@ -106,7 +106,6 @@
public synchronized void close() throws StorageRuntimeException
{
storage.closeTree(treeName);
- treeName = null;
if(logger.isTraceEnabled())
{
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/DbPreloadComparator.java b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/DbPreloadComparator.java
index bc3e971..744e28e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/DbPreloadComparator.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/DbPreloadComparator.java
@@ -28,8 +28,6 @@
import java.util.Comparator;
-import org.opends.server.backends.pluggable.spi.TreeName;
-
/**
* This comparator is used to sort databases in order of priority
* for preloading into the cache.
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java
index 5c4c648..ef0dfee 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java
@@ -988,7 +988,7 @@
// default ordering. VLV search request goes through as if
// this sort key was not found in the user entry.
entryIDList =
- EntryIDSetSorter.sort(EntryContainer.this, entryIDList, searchOperation,
+ EntryIDSetSorter.sort(EntryContainer.this, txn, entryIDList, searchOperation,
sortRequest.getSortOrder(), vlvRequest);
if (sortRequest.containsSortKeys())
{
@@ -1236,7 +1236,7 @@
if (isInScope)
{
// Process the candidate entry.
- final Entry entry = getEntry(entryID);
+ final Entry entry = getEntry(txn, entryID);
if (entry != null)
{
lookthroughCount++;
@@ -1299,7 +1299,7 @@
* @throws DirectoryException
* If an error occurs retrieving the entry
*/
- public Entry getEntry(EntryID entryID) throws DirectoryException
+ public Entry getEntry(ReadableStorage txn, EntryID entryID) throws DirectoryException
{
// Try the entry cache first.
final EntryCache entryCache = getEntryCache();
@@ -1309,7 +1309,7 @@
return cacheEntry;
}
- final Entry entry = id2entry.get(null, entryID, false);
+ final Entry entry = id2entry.get(txn, entryID, false);
if (entry != null)
{
// Put the entry in the cache making sure not to overwrite a newer copy
@@ -1391,7 +1391,7 @@
Entry entry;
try
{
- entry = getEntry(id);
+ entry = getEntry(txn, id);
}
catch (Exception e)
{
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryIDSetSorter.java b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryIDSetSorter.java
index 6febd17..92372fd 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryIDSetSorter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryIDSetSorter.java
@@ -35,6 +35,7 @@
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.ResultCode;
import org.forgerock.opendj.ldap.SearchScope;
+import org.opends.server.backends.pluggable.spi.ReadableStorage;
import org.opends.server.controls.VLVRequestControl;
import org.opends.server.controls.VLVResponseControl;
import org.opends.server.core.DirectoryServer;
@@ -55,7 +56,7 @@
* Creates a new entry ID set which is a sorted representation of the provided
* set using the given sort order.
*
- * @param suffixContainer The suffix container with which the ID list is associated.
+ * @param entryContainer The entry container with which the ID list is associated.
* @param entryIDSet The entry ID set to be sorted.
* @param searchOperation The search operation being processed.
* @param sortOrder The sort order to use for the entry ID set.
@@ -67,7 +68,8 @@
*
* @throws DirectoryException If an error occurs while performing the sort.
*/
- public static EntryIDSet sort(EntryContainer suffixContainer,
+ public static EntryIDSet sort(EntryContainer entryContainer,
+ ReadableStorage txn,
EntryIDSet entryIDSet,
SearchOperation searchOperation,
SortOrder sortOrder,
@@ -88,7 +90,7 @@
{
try
{
- Entry e = suffixContainer.getEntry(id);
+ Entry e = entryContainer.getEntry(txn, id);
if (e.matchesBaseAndScope(baseDN, scope) && filter.matchesEntry(e))
{
sortMap.put(new SortValues(id, e, sortOrder), id);
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/IndexQueryFactoryImpl.java b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/IndexQueryFactoryImpl.java
index f1398e8..9d18446 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/IndexQueryFactoryImpl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/IndexQueryFactoryImpl.java
@@ -84,7 +84,7 @@
return createMatchAllQuery().evaluate(debugMessage);
}
- final EntryIDSet entrySet = index.readKey(key, null);
+ final EntryIDSet entrySet = index.readKey(key, txn);
if(debugMessage != null && !entrySet.isDefined())
{
updateStatsUndefinedResults(debugMessage, index);
@@ -166,7 +166,7 @@
return new EntryIDSet();
}
- final EntryIDSet entrySet = index.readKey(PresenceIndexer.presenceKey, null);
+ final EntryIDSet entrySet = index.readKey(PresenceIndexer.presenceKey, txn);
if (debugMessage != null && !entrySet.isDefined())
{
updateStatsUndefinedResults(debugMessage, index);
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Storage.java b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Storage.java
index da87828..a195da9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Storage.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Storage.java
@@ -23,15 +23,12 @@
*
* Copyright 2014 ForgeRock AS
*/
-
package org.opends.server.backends.pluggable.spi;
import java.io.Closeable;
import org.opends.server.admin.std.server.PersistitBackendCfg;
-
-
public interface Storage extends Closeable
{
void initialize(PersistitBackendCfg cfg) throws Exception;
@@ -44,6 +41,10 @@
void write(WriteOperation updateTransaction) throws Exception;
+ void closeTree(TreeName treeName);
+
+ boolean isValid();
+
@Override
void close();
}
\ No newline at end of file
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/WriteableStorage.java b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/WriteableStorage.java
index f4d56a8..1af739a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/WriteableStorage.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/WriteableStorage.java
@@ -33,6 +33,8 @@
void truncateTree(TreeName name);
+ void renameTree(TreeName oldName, TreeName newName);
+
void deleteTree(TreeName name);
void create(TreeName name, ByteSequence key, ByteSequence value);
--
Gitblit v1.10.0