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

Josh Elser commented on PHOENIX-6067:
-------------------------------------

Tried to get through as much of this as I could before my eyes glazed over :). 
Thanks for your hard work on this.

{code:java}
[INFO] Running org.apache.phoenix.index.VerifySingleIndexRowTest
[ERROR] 
testIfOptionsArePassedToIndexTool[IndexUpgradeToolTest_mutable={1}](org.apache.phoenix.index.IndexUpgradeToolTest)
  Time elapsed: 0.026 s  <<< ERROR!
java.lang.IllegalStateException: Can't do incremental index verification on 
this version of HBase because raw skip scan filters are not supported.
        at 
org.apache.phoenix.mapreduce.index.IndexTool.parseOptions(IndexTool.java:388)
        at 
org.apache.phoenix.index.IndexUpgradeToolTest.testIfOptionsArePassedToIndexTool(IndexUpgradeToolTest.java:124)
 {code}

Should we {{Assume}} this test off (rather than fail) when running against 
HBase 2.1?

{code:java}
-                    System.out.println(current);
+                    System.out.println(current + "column= " +
{code}

nit: missing a space

{code:java}
+        if (!familyMap.containsKey(family)) {
+            return false;
+        }
+        NavigableSet<byte[]> set = familyMap.get(family);
+        if (set == null || set.isEmpty()) {
+            return true;
+        }
{code}

This is a little strange at a glance. If we don't have an entry in the map, we 
return false. But if there is a mapping (but the value is null) we return true.

{code:java}
+        familyMap = scan.getFamilyMap();
+        if (familyMap.isEmpty()) {
+            familyMap = null;
+        }
{code}
This code will null out `familyMap` but `isColumnIncluded(Cell)` in the same 
class isn't checking for a null `familyMap`. Looks like a bug waiting to happen?

{code:java}
+        byte[] valueBytes = 
scan.getAttribute(BaseScannerRegionObserver.INDEX_REBUILD_VERIFY_TYPE);
+        if (valueBytes != null) {
+            verifyType = IndexTool.IndexVerifyType.fromValue(valueBytes);
+            if (verifyType != IndexTool.IndexVerifyType.NONE) {
+                verify = true;
+            }
+        }
{code}

What happens if the client gives a serialized value which we can't parse (e.g. 
newer client with a new IndexVerifyType enum value)? Or if they just give 
garbage data. I'm assuming that we'll fail gracefully back to the client (and 
not hit some retry loop).

{code:java}
     public void close() throws IOException {
         innerScanner.close();
+        if (indexRowKeyforReadRepair != null) {
+            hTableFactory.shutdown();
+            indexHTable.close();
+            return;
+        }
{code}

Closing `hTableFactory` should be done in the parent GlobalIndexRegionScanner, 
not in child IndexRebuildRegionScanner? Looks like the htableFactory is never 
cleaned up in the parent, nor the `indexHTable`. Any reason we to not put a 
`close()` on GlobalIndexRegionScanner and have IndexRebuildRegionScanner call 
super.close()? Looks like the same could be applied to IndexerRegionScanner.

{code:java}
-                keys.remove(keyRange);
+                indexKeyToMutationMap.remove(result.getRow());
+                //keys.remove(keyRange);
{code}

Remove commented code?

All in all, most of these are nit-picky or me worrying about edge-cases. What 
else do you all think should be done before this lands in master? Lars, you 
mentioned "your wringer" -- is that something we should run to make sure the 
implementation is reasonably solid before committing?

> (5.x) Global Secondary Index Parity with 4.x
> --------------------------------------------
>
>                 Key: PHOENIX-6067
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-6067
>             Project: Phoenix
>          Issue Type: Improvement
>            Reporter: Swaroopa Kadam
>            Assignee: Geoffrey Jacoby
>            Priority: Blocker
>             Fix For: 5.1.0
>
>         Attachments: PHOENIX-6067.v1.patch, PHOENIX-6067.v2.patch
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> A large number of indexing JIRAs were done for Phoenix 4.16 but were 
> originally unable to be ported to 5.x because of the lack of HBase 2.x 
> support for PHOENIX-5645, max lookback age. This was eventually fixed in 
> HBASE-24321 and PHOENIX-5881. Because some JIRAs later than the missing ones 
> _were_ ported to 5.x, applying them all one-by-one and testing each 
> intermediate version would be impractical.
> This JIRA will import the 4.16 global index implementation into 5.1.0, then 
> fix HBase API usage to conform to HBase 2.x standards and Phoenix's HBase 2.x 
> compatibility shim between minor versions. (For example, max lookback age 
> features aren't supported in 2.1 and 2.2 because they lack HBASE-24321, and 
> incremental index validation will be deactivated when running against HBase 
> 2.1, because of the lack of HBASE-22710 to use raw Filters.) 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to