commit the open txns after using them
diff --git a/core-api/src/main/java/org/apache/directory/server/core/api/filtering/CursorList.java b/core-api/src/main/java/org/apache/directory/server/core/api/filtering/CursorList.java
index 7affbcd..923fe26 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/api/filtering/CursorList.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/api/filtering/CursorList.java
@@ -19,6 +19,7 @@
package org.apache.directory.server.core.api.filtering;
+import java.io.IOException;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -442,6 +443,19 @@
LOG.warn( "Failed to close the cursor" );
}
}
+ try
+ {
+ // FIXME this is incorrect instead close the txn associated with each cursor
+ // the below code only commits the last searched partition's txn
+ // the fix is to modify the cursor impls to accept a flag and a txn handle
+ // and then decide whether the caller wants the txn to be closed at the time of
+ // closing the cursor
+ searchContext.getTransaction().commit();
+ }
+ catch ( IOException e )
+ {
+ //ignore
+ }
}
diff --git a/core-shared/src/main/java/org/apache/directory/server/core/shared/partition/DefaultPartitionNexus.java b/core-shared/src/main/java/org/apache/directory/server/core/shared/partition/DefaultPartitionNexus.java
index 208cf56..077838d 100644
--- a/core-shared/src/main/java/org/apache/directory/server/core/shared/partition/DefaultPartitionNexus.java
+++ b/core-shared/src/main/java/org/apache/directory/server/core/shared/partition/DefaultPartitionNexus.java
@@ -81,8 +81,10 @@
import org.apache.directory.server.core.api.partition.Partition;
import org.apache.directory.server.core.api.partition.PartitionNexus;
import org.apache.directory.server.core.api.partition.PartitionReadTxn;
+import org.apache.directory.server.core.api.partition.PartitionReadTxnImpl;
import org.apache.directory.server.core.api.partition.PartitionTxn;
import org.apache.directory.server.core.api.partition.PartitionWriteTxn;
+import org.apache.directory.server.core.api.partition.PartitionWriteTxnImpl;
import org.apache.directory.server.core.api.partition.Subordinates;
import org.apache.directory.server.i18n.I18n;
import org.slf4j.Logger;
@@ -1121,13 +1123,13 @@
@Override
public PartitionReadTxn beginReadTransaction()
{
- return new PartitionReadTxn();
+ return new PartitionReadTxnImpl();
}
@Override
public PartitionWriteTxn beginWriteTransaction()
{
- return new PartitionWriteTxn();
+ return new PartitionWriteTxnImpl();
}
}
diff --git a/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java b/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
index 1564c72..b764879 100644
--- a/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
+++ b/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
@@ -52,6 +52,7 @@
import org.apache.directory.server.core.api.interceptor.context.SearchOperationContext;
import org.apache.directory.server.core.api.partition.Partition;
import org.apache.directory.server.core.api.partition.PartitionNexus;
+import org.apache.directory.server.core.api.partition.PartitionTxn;
import org.apache.directory.server.i18n.I18n;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -156,11 +157,13 @@
baseDn, filter, ctls );
searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
searchOperationContext.setPartition( partition );
- searchOperationContext.setTransaction( partition.beginReadTransaction() );
+ PartitionTxn tx = partition.beginReadTransaction();
+ searchOperationContext.setTransaction( tx );
EntryFilteringCursor results = nexus.search( searchOperationContext );
try
{
+ tx.commit();
while ( results.next() )
{
Entry result = results.get();
diff --git a/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/TupleCache.java b/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/TupleCache.java
index d38cc49..e3132981 100644
--- a/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/TupleCache.java
+++ b/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/TupleCache.java
@@ -57,6 +57,7 @@
import org.apache.directory.server.core.api.interceptor.context.SearchOperationContext;
import org.apache.directory.server.core.api.partition.Partition;
import org.apache.directory.server.core.api.partition.PartitionNexus;
+import org.apache.directory.server.core.api.partition.PartitionTxn;
import org.apache.directory.server.i18n.I18n;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -133,12 +134,14 @@
baseDn, filter, ctls );
searchOperationContext.setAliasDerefMode( AliasDerefMode.NEVER_DEREF_ALIASES );
searchOperationContext.setPartition( partition );
- searchOperationContext.setTransaction( partition.beginReadTransaction() );
+ PartitionTxn tx = partition.beginReadTransaction();
+ searchOperationContext.setTransaction( tx );
EntryFilteringCursor results = nexus.search( searchOperationContext );
try
{
+ tx.commit();
while ( results.next() )
{
Entry result = results.get();