Repository: phoenix
Updated Branches:
  refs/heads/master f31ece1dc -> 8d41ab0b4


PHOENIX-2401 Split table is failing when the table is local indexed in secure 
cluster(Ted Yu)


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/8d41ab0b
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/8d41ab0b
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/8d41ab0b

Branch: refs/heads/master
Commit: 8d41ab0b4d70969b59136cce01ef71c6b8c754f8
Parents: f31ece1
Author: Rajeshbabu Chintaguntla <[email protected]>
Authored: Thu Nov 19 09:54:21 2015 +0530
Committer: Rajeshbabu Chintaguntla <[email protected]>
Committed: Thu Nov 19 09:54:21 2015 +0530

----------------------------------------------------------------------
 .../hbase/regionserver/LocalIndexSplitter.java  | 12 ++++++--
 .../UngroupedAggregateRegionObserver.java       | 31 +++++++++++++-------
 2 files changed, 31 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/8d41ab0b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexSplitter.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexSplitter.java
 
b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexSplitter.java
index 7882e25..63dc1e8 100644
--- 
a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexSplitter.java
+++ 
b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/LocalIndexSplitter.java
@@ -28,6 +28,7 @@ import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;
 import org.apache.hadoop.hbase.coprocessor.ObserverContext;
 import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
+import org.apache.hadoop.hbase.security.User;
 import org.apache.hadoop.hbase.util.PairOfSameType;
 import org.apache.phoenix.hbase.index.util.VersionUtil;
 import org.apache.phoenix.jdbc.PhoenixConnection;
@@ -45,6 +46,7 @@ import org.apache.phoenix.util.QueryUtil;
 import org.apache.phoenix.util.SchemaUtil;
 
 import java.io.IOException;
+import java.security.PrivilegedExceptionAction;
 import java.sql.SQLException;
 import java.util.List;
 
@@ -66,7 +68,7 @@ public class LocalIndexSplitter extends BaseRegionObserver {
         if (SchemaUtil.isSystemTable(tableDesc.getName())) {
             return;
         }
-        RegionServerServices rss = 
ctx.getEnvironment().getRegionServerServices();
+        final RegionServerServices rss = 
ctx.getEnvironment().getRegionServerServices();
         if (tableDesc.getValue(MetaDataUtil.IS_LOCAL_INDEX_TABLE_PROP_BYTES) 
== null
                 || !Boolean.TRUE.equals(PBoolean.INSTANCE.toObject(tableDesc
                         
.getValue(MetaDataUtil.IS_LOCAL_INDEX_TABLE_PROP_BYTES)))) {
@@ -100,7 +102,13 @@ public class LocalIndexSplitter extends BaseRegionObserver 
{
                     return;
                 }
                 ((HRegion)indexRegion).forceSplit(splitKey);
-                daughterRegions = st.stepsBeforePONR(rss, rss, false);
+                User.runAsLoginUser(new PrivilegedExceptionAction<Void>() {
+                  @Override
+                  public Void run() throws Exception {                  
+                    daughterRegions = st.stepsBeforePONR(rss, rss, false);
+                    return null;
+                  }
+                });
                 HRegionInfo copyOfParent = new 
HRegionInfo(indexRegion.getRegionInfo());
                 copyOfParent.setOffline(true);
                 copyOfParent.setSplit(true);

http://git-wip-us.apache.org/repos/asf/phoenix/blob/8d41ab0b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java
index 6b51138..5133cb2 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java
@@ -28,6 +28,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
+import java.security.PrivilegedExceptionAction;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -54,6 +55,7 @@ import org.apache.hadoop.hbase.regionserver.Region;
 import org.apache.hadoop.hbase.regionserver.RegionScanner;
 import org.apache.hadoop.hbase.regionserver.ScanType;
 import org.apache.hadoop.hbase.regionserver.Store;
+import org.apache.hadoop.hbase.security.User;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.io.WritableUtils;
 import org.apache.phoenix.coprocessor.generated.PTableProtos;
@@ -642,11 +644,10 @@ public class UngroupedAggregateRegionObserver extends 
BaseScannerRegionObserver{
 
 
     @Override
-    public void postSplit(ObserverContext<RegionCoprocessorEnvironment> e, 
Region l, Region r)
-            throws IOException {
-        Region region = e.getEnvironment().getRegion();
-        TableName table = region.getRegionInfo().getTable();
-        StatisticsCollector stats = null;
+    public void postSplit(final ObserverContext<RegionCoprocessorEnvironment> 
e, final Region l,
+        final Region r) throws IOException {
+        final Region region = e.getEnvironment().getRegion();
+        final TableName table = region.getRegionInfo().getTable();
         try {
             boolean useCurrentTime =
                     
e.getEnvironment().getConfiguration().getBoolean(QueryServices.STATS_USE_CURRENT_TIME_ATTRIB,
@@ -654,15 +655,25 @@ public class UngroupedAggregateRegionObserver extends 
BaseScannerRegionObserver{
             // Provides a means of clients controlling their timestamps to not 
use current time
             // when background tasks are updating stats. Instead we track the 
max timestamp of
             // the cells and use that.
-            long clientTimeStamp = useCurrentTime ? 
TimeKeeper.SYSTEM.getCurrentTime() : StatisticsCollector.NO_TIMESTAMP;
-            stats = new StatisticsCollector(e.getEnvironment(), 
table.getNameAsString(), clientTimeStamp);
-            stats.splitStats(region, l, r);
+            final long clientTimeStamp = useCurrentTime ? 
TimeKeeper.SYSTEM.getCurrentTime() :
+              StatisticsCollector.NO_TIMESTAMP;
+            User.runAsLoginUser(new PrivilegedExceptionAction<Void>() {
+              @Override
+              public Void run() throws Exception {
+                StatisticsCollector stats = new 
StatisticsCollector(e.getEnvironment(),
+                  table.getNameAsString(), clientTimeStamp);
+                try {
+                  stats.splitStats(region, l, r);
+                  return null;
+                } finally {
+                  if (stats != null) stats.close();
+                }
+              }
+            });
         } catch (IOException ioe) {
             if(logger.isWarnEnabled()) {
                 logger.warn("Error while collecting stats during split for " + 
table,ioe);
             }
-        } finally {
-            if (stats != null) stats.close();
         }
     }
 

Reply via email to