[ 
https://issues.apache.org/jira/browse/HBASE-12751?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14901693#comment-14901693
 ] 

stack commented on HBASE-12751:
-------------------------------

The TestIOFencing failure is because test is parameterized and the DLR run was 
hanging. Fixed.

I removed TestVisibilityLabelsWithDistributedLogReplay because this patch 
breaks DLR and DLR is deprecated as-is.

The TestDistributedLogSplitting and TestServerCrashProcedure are both hung up 
in MVCC waiting on write number to progress. The accounting must be wrong. Let 
me see.... If I do the below hack, tests pass...

{code}
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
index a8ffa8d..e70e7bd 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
@@ -2099,7 +2099,7 @@ public class HRegion implements HeapSize, 
PropagatingConfigurationObserver, Regi
                 writeFlushRequestMarkerToWAL(wal, writeFlushWalMarker));
             // TODO: Lets see if we hang here, if there is a scenario where an 
outstanding reader
             // with a read point is in advance of this write point.
-            mvcc.completeAndWait(writeEntry);
+            mvcc.complete(writeEntry);
             writeEntry = null;
             return new PrepareFlushResult(flushResult, myseqid);
           } else {
@@ -2254,7 +2254,7 @@ public class HRegion implements HeapSize, 
PropagatingConfigurationObserver, Regi
       // uncommitted transactions from being written into HFiles.
       // We have to block before we start the flush, otherwise keys that
       // were removed via a rollbackMemstore could be written to Hfiles.
-      mvcc.completeAndWait(writeEntry);
+      mvcc.complete(writeEntry);
       // set writeEntry to null to prevent mvcc.complete from being called 
again inside finally
       // block
       writeEntry = null;
@@ -3158,7 +3158,7 @@ public class HRegion implements HeapSize, 
PropagatingConfigurationObserver, Regi
       // STEP 8. Advance mvcc. This will make this put visible to scanners and 
getters.
       // ------------------------------------------------------------------
       if (writeEntry != null) {
-        mvcc.completeAndWait(writeEntry);
+        mvcc.complete(writeEntry);
         writeEntry = null;
       } else if (isInReplay) {
         // ensure that the sequence id of the region is at least as big as 
orig log seq id
@@ -3203,7 +3203,7 @@ public class HRegion implements HeapSize, 
PropagatingConfigurationObserver, Regi
         }
         if (writeEntry != null) mvcc.complete(writeEntry);
       } else if (writeEntry != null) {
-        mvcc.completeAndWait(writeEntry);
+        mvcc.complete(writeEntry);
       }

       if (locked) {
@@ -6856,7 +6856,7 @@ public class HRegion implements HeapSize, 
PropagatingConfigurationObserver, Regi
         }
         // 13. Roll mvcc forward
         if (writeEntry != null) {
-          mvcc.completeAndWait(writeEntry);
+          mvcc.complete(writeEntry);
         }
{code}

TestReplicasClient seems broke in a different way altogether. Digging.

> Allow RowLock to be reader writer
> ---------------------------------
>
>                 Key: HBASE-12751
>                 URL: https://issues.apache.org/jira/browse/HBASE-12751
>             Project: HBase
>          Issue Type: Bug
>          Components: regionserver
>    Affects Versions: 2.0.0, 1.3.0
>            Reporter: Elliott Clark
>            Assignee: Elliott Clark
>             Fix For: 2.0.0, 1.3.0
>
>         Attachments: 12751.rebased.v25.txt, 12751.rebased.v26.txt, 
> 12751.rebased.v26.txt, 12751.rebased.v27.txt, 12751.rebased.v29.txt, 
> 12751.rebased.v31.txt, 12751.rebased.v32.txt, 12751.rebased.v32.txt, 
> 12751.rebased.v33.txt, 12751.rebased.v34.txt, 12751.rebased.v35.txt, 
> 12751.rebased.v35.txt, 12751.rebased.v35.txt, 12751.v37.txt, 12751.v38.txt, 
> 12751v22.txt, 12751v23.txt, 12751v23.txt, 12751v23.txt, 12751v23.txt, 
> 12751v36.txt, HBASE-12751-v1.patch, HBASE-12751-v10.patch, 
> HBASE-12751-v10.patch, HBASE-12751-v11.patch, HBASE-12751-v12.patch, 
> HBASE-12751-v13.patch, HBASE-12751-v14.patch, HBASE-12751-v15.patch, 
> HBASE-12751-v16.patch, HBASE-12751-v17.patch, HBASE-12751-v18.patch, 
> HBASE-12751-v19 (1).patch, HBASE-12751-v19.patch, HBASE-12751-v2.patch, 
> HBASE-12751-v20.patch, HBASE-12751-v20.patch, HBASE-12751-v21.patch, 
> HBASE-12751-v3.patch, HBASE-12751-v4.patch, HBASE-12751-v5.patch, 
> HBASE-12751-v6.patch, HBASE-12751-v7.patch, HBASE-12751-v8.patch, 
> HBASE-12751-v9.patch, HBASE-12751.patch
>
>
> Right now every write operation grabs a row lock. This is to prevent values 
> from changing during a read modify write operation (increment or check and 
> put). However it limits parallelism in several different scenarios.
> If there are several puts to the same row but different columns or stores 
> then this is very limiting.
> If there are puts to the same column then mvcc number should ensure a 
> consistent ordering. So locking is not needed.
> However locking for check and put or increment is still needed.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to