From 0bd57577bb85119b2b4495c5ef525ba189d8d17c Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 04 Mar 2015 23:14:55 +0000
Subject: [PATCH] OPENDJ-1848: in-line and remove various storage related access methods from DatabaseContainer.

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DatabaseContainer.java |  154 +++++----------------------------------------------
 1 files changed, 15 insertions(+), 139 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DatabaseContainer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DatabaseContainer.java
index 2291103..05a81f6 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DatabaseContainer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DatabaseContainer.java
@@ -28,17 +28,12 @@
 
 import java.io.Closeable;
 
-import org.forgerock.i18n.slf4j.LocalizedLogger;
-import org.forgerock.opendj.ldap.ByteSequence;
-import org.forgerock.opendj.ldap.ByteString;
 import org.opends.server.backends.pluggable.spi.Cursor;
 import org.opends.server.backends.pluggable.spi.ReadableStorage;
 import org.opends.server.backends.pluggable.spi.Storage;
 import org.opends.server.backends.pluggable.spi.StorageRuntimeException;
 import org.opends.server.backends.pluggable.spi.TreeName;
 import org.opends.server.backends.pluggable.spi.WriteableStorage;
-import org.opends.server.util.ServerConstants;
-import org.opends.server.util.StaticUtils;
 
 /**
  * This class is a wrapper around the JE database object and provides basic
@@ -46,12 +41,11 @@
  */
 abstract class DatabaseContainer implements Closeable
 {
-  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
-
   /** The database entryContainer. */
   final EntryContainer entryContainer;
+
   /** The name of the database within the entryContainer. */
-  TreeName treeName;
+  private TreeName name;
 
   /** The reference to the JE Storage. */
   final Storage storage;
@@ -67,7 +61,7 @@
   {
     this.storage = storage;
     this.entryContainer = entryContainer;
-    this.treeName = treeName;
+    this.name = treeName;
   }
 
   /**
@@ -81,11 +75,8 @@
    */
   void open(WriteableStorage txn) throws StorageRuntimeException
   {
-    txn.openTree(treeName);
-    if (logger.isTraceEnabled())
-    {
-      logger.trace("JE database %s opened. txn=%s", treeName, txn);
-    }
+    // FIXME: remove?
+    txn.openTree(name);
   }
 
   /**
@@ -106,83 +97,8 @@
   @Override
   public synchronized void close() throws StorageRuntimeException
   {
-    storage.closeTree(treeName);
-
-    if(logger.isTraceEnabled())
-    {
-      logger.trace("Closed tree %s", treeName);
-    }
-  }
-
-  void put(WriteableStorage txn, ByteSequence key, ByteSequence value) throws StorageRuntimeException
-  {
-    txn.create(treeName, key, value);
-    if (logger.isTraceEnabled())
-    {
-      logger.trace(messageToLog(true, treeName, txn, key, value));
-    }
-  }
-
-  ByteString read(ReadableStorage txn, ByteSequence key, boolean isRMW) throws StorageRuntimeException
-  {
-    ByteString value = isRMW ? txn.getRMW(treeName, key) : txn.read(treeName, key);
-    if (logger.isTraceEnabled())
-    {
-      logger.trace(messageToLog(value != null, treeName, txn, key, value));
-    }
-    return value;
-  }
-
-  /**
-   * Insert a record into a JE database, with optional debug logging. This is a
-   * simple wrapper around the JE Database.putNoOverwrite method.
-   * @param txn The JE transaction handle, or null if none.
-   * @param key The record key.
-   * @param value The record value.
-   * @return {@code true} if the key-value mapping could be inserted,
-   *         {@code false} if the key was already mapped to another value
-   * @throws StorageRuntimeException If an error occurs in the JE operation.
-   */
-  boolean insert(WriteableStorage txn, ByteString key, ByteString value) throws StorageRuntimeException
-  {
-    boolean result = txn.putIfAbsent(treeName, key, value);
-    if (logger.isTraceEnabled())
-    {
-      logger.trace(messageToLog(result, treeName, txn, key, value));
-    }
-    return result;
-  }
-
-  /**
-   * Delete a record from a JE database, with optional debug logging. This is a
-   * simple wrapper around the JE Database.delete method.
-   * @param txn The JE transaction handle, or null if none.
-   * @param key The key of the record to be read.
-   * @return {@code true} if the key mapping was removed, {@code false} otherwise
-   * @throws StorageRuntimeException If an error occurs in the JE operation.
-   */
-  boolean delete(WriteableStorage txn, ByteSequence key) throws StorageRuntimeException
-  {
-    final boolean result = txn.delete(treeName, key);
-    if (logger.isTraceEnabled())
-    {
-      logger.trace(messageToLog(result, treeName, txn, key, null));
-    }
-    return result;
-  }
-
-  /**
-   * Open a JE cursor on the JE database.  This is a simple wrapper around
-   * the JE Database.openCursor method.
-   * @param txn A JE database transaction to be used by the cursor,
-   * or null if none.
-   * @return A JE cursor.
-   * @throws StorageRuntimeException If an error occurs while attempting to open
-   * the cursor.
-   */
-  final Cursor openCursor(ReadableStorage txn) throws StorageRuntimeException
-  {
-    return txn.openCursor(treeName);
+    // FIXME: is this method needed?
+    storage.closeTree(name);
   }
 
   /**
@@ -194,17 +110,11 @@
    */
   long getRecordCount(ReadableStorage txn) throws StorageRuntimeException
   {
-    long count = count(txn);
-    if (logger.isTraceEnabled())
-    {
-      logger.trace(messageToLog(true, treeName, txn, null, null));
-    }
-    return count;
-  }
-
-  private long count(ReadableStorage txn)
-  {
-    final Cursor cursor = txn.openCursor(treeName);
+    /*
+     * FIXME: push down to storage. Some DBs have native support for this, e.g. using counted
+     * B-Trees.
+     */
+    final Cursor cursor = txn.openCursor(name);
     try
     {
       long count = 0;
@@ -227,7 +137,7 @@
   @Override
   public String toString()
   {
-    return treeName.toString();
+    return name.toString();
   }
 
   /**
@@ -237,7 +147,7 @@
    */
   final TreeName getName()
   {
-    return treeName;
+    return name;
   }
 
   /**
@@ -247,40 +157,6 @@
    */
   final void setName(TreeName name)
   {
-    this.treeName = name;
+    this.name = name;
   }
-
-  /** Returns the message to log given the provided information. */
-  private String messageToLog(boolean success, TreeName treeName, ReadableStorage txn, ByteSequence key,
-      ByteSequence value)
-  {
-    StringBuilder builder = new StringBuilder();
-    builder.append(" (");
-    builder.append(success ? "SUCCESS" : "ERROR");
-    builder.append(")");
-    builder.append(" db=");
-    builder.append(treeName);
-    builder.append(" txn=");
-    builder.append(txn);
-    builder.append(ServerConstants.EOL);
-    if (key != null)
-    {
-      builder.append("key:");
-      builder.append(ServerConstants.EOL);
-      StaticUtils.byteArrayToHexPlusAscii(builder, key.toByteArray(), 4);
-    }
-
-    // If the operation was successful we log the same common information
-    // plus the data
-    if (value != null)
-    {
-      builder.append("value(len=");
-      builder.append(value.length());
-      builder.append("):");
-      builder.append(ServerConstants.EOL);
-      StaticUtils.byteArrayToHexPlusAscii(builder, value.toByteArray(), 4);
-    }
-    return builder.toString();
-  }
-
 }

--
Gitblit v1.10.0