From da62427f3da608acc65cea059cff0232d7980727 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 04 Dec 2014 17:02:39 +0000
Subject: [PATCH] OPENDJ-1602 (CR-5566) New pluggable storage based backend
---
opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryContainer.java | 101 ++++++++++++++++++++------------------------------
1 files changed, 41 insertions(+), 60 deletions(-)
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryContainer.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryContainer.java
index 1997c79..e5058a5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryContainer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryContainer.java
@@ -90,8 +90,6 @@
private static final String REFERRAL_DATABASE_NAME = REFERRAL_INDEX_NAME;
/** The name of the state database. */
private static final String STATE_DATABASE_NAME = STATE_INDEX_NAME;
- /** The attribute used to return a search index debug string to the client. */
- public static final String ATTR_DEBUG_SEARCH_INDEX = "debugsearchindex";
/** The attribute index configuration manager. */
private final AttributeJEIndexCfgManager attributeJEIndexCfgManager;
@@ -769,8 +767,7 @@
searchOperation.setResultCode(ResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
return;
}
- VLVRequestControl vlvRequest = searchOperation
- .getRequestControl(VLVRequestControl.DECODER);
+ VLVRequestControl vlvRequest = searchOperation.getRequestControl(VLVRequestControl.DECODER);
if (vlvRequest != null && pageRequest != null)
{
@@ -889,8 +886,7 @@
{
LocalizableMessage message = ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(aBaseDN);
DN matchedDN = getMatchedDN(aBaseDN);
- throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
- message, matchedDN, null);
+ throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message, matchedDN, null);
}
DatabaseEntry baseIDData = baseID.getDatabaseEntry();
@@ -940,11 +936,11 @@
else
{
/*
- There is no sort key associated with the sort control. Since it
- came here it means that the criticality is false so let the
- server return all search results unsorted and include the
- sortKeyResponseControl in the searchResultDone message.
- */
+ * There is no sort key associated with the sort control. Since it
+ * came here it means that the criticality is false so let the
+ * server return all search results unsorted and include the
+ * sortKeyResponseControl in the searchResultDone message.
+ */
searchOperation.addResponseControl(new ServerSideSortResponseControl(NO_SUCH_ATTRIBUTE, null));
}
}
@@ -1018,8 +1014,7 @@
if (sortRequest.isCritical())
{
LocalizableMessage message = ERR_JEB_SEARCH_CANNOT_SORT_UNINDEXED.get();
- throw new DirectoryException(
- ResultCode.UNAVAILABLE_CRITICAL_EXTENSION, message);
+ throw new DirectoryException(ResultCode.UNAVAILABLE_CRITICAL_EXTENSION, message);
}
}
@@ -1048,7 +1043,6 @@
private void searchNotIndexed(SearchOperation searchOperation, PagedResultsControl pageRequest)
throws DirectoryException, CanceledOperationException
{
- EntryCache<?> entryCache = DirectoryServer.getEntryCache();
DN aBaseDN = searchOperation.getBaseDN();
SearchScope searchScope = searchOperation.getScope();
boolean manageDsaIT = isManageDsaITOperation(searchOperation);
@@ -1171,20 +1165,8 @@
|| findDNKeyParent(key.getData(), 0, key.getSize()) == baseDNKey.length;
if (isInScope)
{
- // Try the entry cache first.
- final Entry cacheEntry = entryCache.getEntry(backend, entryID.longValue());
-
- final Entry entry;
- if (cacheEntry != null)
- {
- entry = cacheEntry;
- }
- else
- {
- entry = id2entry.get(null, entryID, LockMode.DEFAULT);
- }
-
// Process the candidate entry.
+ final Entry entry = getEntry(entryID);
if (entry != null)
{
lookthroughCount++;
@@ -1238,6 +1220,28 @@
}
}
+ /** {@inheritDoc} */
+ @Override
+ public Entry getEntry(EntryID entryID) throws DirectoryException
+ {
+ // Try the entry cache first.
+ final EntryCache entryCache = getEntryCache();
+ final Entry cacheEntry = entryCache.getEntry(backend, entryID.longValue());
+ if (cacheEntry != null)
+ {
+ return cacheEntry;
+ }
+
+ final Entry entry = id2entry.get(null, entryID, LockMode.DEFAULT);
+ if (entry != null)
+ {
+ // Put the entry in the cache making sure not to overwrite a newer copy
+ // that may have been inserted since the time we read the cache.
+ entryCache.putEntryIfAbsent(entry, backend, entryID.longValue());
+ }
+ return entry;
+ }
+
/**
* We were able to obtain a set of candidate entry IDs for the
* search from the indexes.
@@ -1266,7 +1270,6 @@
PagedResultsControl pageRequest)
throws DirectoryException, CanceledOperationException
{
- EntryCache<?> entryCache = DirectoryServer.getEntryCache();
SearchScope searchScope = searchOperation.getScope();
DN aBaseDN = searchOperation.getBaseDN();
boolean manageDsaIT = isManageDsaITOperation(searchOperation);
@@ -1315,49 +1318,27 @@
{
final EntryID id = it.next();
- // Try the entry cache first.
Entry entry;
- Entry cacheEntry = entryCache.getEntry(backend, id.longValue());
- if (cacheEntry == null)
+ try
{
- // Fetch the candidate entry from the database.
- try
- {
- entry = id2entry.get(null, id, LockMode.DEFAULT);
- }
- catch (Exception e)
- {
- logger.traceException(e);
- continue;
- }
+ entry = getEntry(id);
}
- else
+ catch (Exception e)
{
- entry = cacheEntry;
+ logger.traceException(e);
+ continue;
}
// Process the candidate entry.
if (entry != null)
{
- boolean isInScope = isInScope(candidatesAreInScope, searchScope, aBaseDN, entry);
-
- // Put this entry in the cache if it did not come from the cache.
- if (cacheEntry == null)
- {
- // Put the entry in the cache making sure not to overwrite
- // a newer copy that may have been inserted since the time
- // we read the cache.
- entryCache.putEntryIfAbsent(entry, backend, id.longValue());
- }
-
// Filter the entry if it is in scope.
- if (isInScope
+ if (isInScope(candidatesAreInScope, searchScope, aBaseDN, entry)
&& (manageDsaIT || entry.getReferralURLs() == null)
&& searchOperation.getFilter().matchesEntry(entry))
{
- if (pageRequest != null &&
- searchOperation.getEntriesSent() ==
- pageRequest.getSize())
+ if (pageRequest != null
+ && searchOperation.getEntriesSent() == pageRequest.getSize())
{
// The current page is full.
// Set the cookie to remember where we were.
@@ -1384,8 +1365,8 @@
// Before we return success from the search we must ensure the base entry
// exists. However, if we have returned at least one entry or subordinate
// reference it implies the base does exist, so we can omit the check.
- if (searchOperation.getEntriesSent() == 0 &&
- searchOperation.getReferencesSent() == 0)
+ if (searchOperation.getEntriesSent() == 0
+ && searchOperation.getReferencesSent() == 0)
{
// Fetch the base entry if it exists.
Entry baseEntry = fetchBaseEntry(aBaseDN, searchScope);
--
Gitblit v1.10.0