From 3fb5dfdd53827ebacd1601e88ace25a4a26a7e7a Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <yannick.lecaillez@forgerock.com>
Date: Fri, 10 Jul 2015 09:14:19 +0000
Subject: [PATCH] OPENDJ-2217: Contended keys generate too many rollbacks
---
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/ID2Entry.java | 60 ++++++++++++++++++++++++++----------------------------------
1 files changed, 26 insertions(+), 34 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/ID2Entry.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/ID2Entry.java
index 319dffb..9e49a68 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/ID2Entry.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/ID2Entry.java
@@ -41,6 +41,7 @@
import org.forgerock.opendj.io.ASN1;
import org.forgerock.opendj.io.ASN1Reader;
import org.forgerock.opendj.io.ASN1Writer;
+import org.forgerock.opendj.ldap.ByteSequence;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.ByteStringBuilder;
import org.forgerock.opendj.ldap.DecodeException;
@@ -166,15 +167,7 @@
}
}
- private ByteString encodeCopy(Entry entry, DataConfig dataConfig)
- throws DirectoryException
- {
- encodeVolatile(entry, dataConfig);
- return encodedBuffer.toByteString();
- }
-
- private ByteString encodeInternal(Entry entry, DataConfig dataConfig)
- throws DirectoryException
+ private ByteString encode(Entry entry, DataConfig dataConfig) throws DirectoryException
{
encodeVolatile(entry, dataConfig);
return encodedBuffer.toByteString();
@@ -304,7 +297,19 @@
EntryCodec codec = acquireEntryCodec();
try
{
- return codec.encodeCopy(entry, dataConfig);
+ return codec.encode(entry, dataConfig);
+ }
+ finally
+ {
+ codec.release();
+ }
+ }
+
+ ByteString encode(Entry entry) throws DirectoryException {
+ final EntryCodec codec = acquireEntryCodec();
+ try
+ {
+ return codec.encode(entry, dataConfig);
}
finally
{
@@ -325,18 +330,15 @@
public void put(WriteableTransaction txn, EntryID id, Entry entry)
throws StorageRuntimeException, DirectoryException
{
- Reject.ifNull(txn);
- ByteString key = id.toByteString();
- EntryCodec codec = acquireEntryCodec();
- try
- {
- ByteString value = codec.encodeInternal(entry, dataConfig);
- txn.put(getName(), key, value);
- }
- finally
- {
- codec.release();
- }
+ Reject.ifNull(txn, "txn must not be null.");
+ txn.put(getName(), id.toByteString(), encode(entry));
+ }
+
+ public void put(WriteableTransaction txn, EntryID id, ByteSequence encodedEntry)
+ throws StorageRuntimeException, DirectoryException
+ {
+ Reject.ifNull(txn, "txn must not be null.");
+ txn.put(getName(), id.toByteString(), encodedEntry);
}
/**
@@ -351,18 +353,8 @@
public void importPut(Importer importer, EntryID id, Entry entry)
throws StorageRuntimeException, DirectoryException
{
- Reject.ifNull(importer);
- ByteString key = id.toByteString();
- EntryCodec codec = acquireEntryCodec();
- try
- {
- ByteString value = codec.encodeInternal(entry, dataConfig);
- importer.put(getName(), key, value);
- }
- finally
- {
- codec.release();
- }
+ Reject.ifNull(importer, "importer must not be null.");
+ importer.put(getName(), id.toByteString(), encode(entry));
}
/**
--
Gitblit v1.10.0