You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2018/09/26 08:34:05 UTC

[directory-server] 06/06: commit the open txns after using them

This is an automated email from the ASF dual-hosted git repository.

kayyagari pushed a commit to branch bdb-je-partition
in repository https://gitbox.apache.org/repos/asf/directory-server.git

commit e52b4730aa3984adef731b9c6fe99fe181110c26
Author: kayyagari <ka...@apache.org>
AuthorDate: Wed Sep 26 14:02:34 2018 +0530

    commit the open txns after using them
---
 .../directory/server/core/api/filtering/CursorList.java    | 14 ++++++++++++++
 .../core/shared/partition/DefaultPartitionNexus.java       |  6 ++++--
 .../org/apache/directory/server/core/authz/GroupCache.java |  5 ++++-
 .../org/apache/directory/server/core/authz/TupleCache.java |  5 ++++-
 4 files changed, 26 insertions(+), 4 deletions(-)

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 @@ public class CursorList extends AbstractCursor<Entry> implements EntryFilteringC
                 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.AbstractPartition;
 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 @@ public class DefaultPartitionNexus extends AbstractPartition implements Partitio
     @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.filtering.EntryFilteringCursor;
 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 @@ public class GroupCache
                 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.filtering.EntryFilteringCursor;
 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 @@ public class TupleCache
                 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();