From 6614261c7b3cab60800622ff0f68bc245f727bf5 Mon Sep 17 00:00:00 2001 From: Umesh Agashe Date: Mon, 5 Feb 2018 12:08:49 -0800 Subject: [PATCH] HBASE-19939 Fixed NPE in tests TestSplitTableRegionProcedure#testSplitWithoutPONR() and testRecoveryAndDoubleExecution() Value of 'htd' is null as it is initialized in the constructor but when the object is deserialized its null. Got rid of member variable htd and made it local to method. --- .../hadoop/hbase/master/assignment/SplitTableRegionProcedure.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java index 1828340e33347559adc0ceab8984afd0874f9fb1..be0741d87305803f6448fd68ecfc8ff786682b83 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java @@ -94,7 +94,6 @@ public class SplitTableRegionProcedure private RegionInfo daughter_1_RI; private RegionInfo daughter_2_RI; private byte[] bestSplitRow; - private TableDescriptor htd; private RegionSplitPolicy splitPolicy; public SplitTableRegionProcedure() { @@ -120,14 +119,14 @@ public class SplitTableRegionProcedure .setSplit(false) .setRegionId(rid) .build(); - this.htd = env.getMasterServices().getTableDescriptors().get(getTableName()); - if(this.htd.getRegionSplitPolicyClassName() != null) { + TableDescriptor htd = env.getMasterServices().getTableDescriptors().get(getTableName()); + if(htd.getRegionSplitPolicyClassName() != null) { // Since we don't have region reference here, creating the split policy instance without it. // This can be used to invoke methods which don't require Region reference. This instantiation // of a class on Master-side though it only makes sense on the RegionServer-side is // for Phoenix Local Indexing. Refer HBASE-12583 for more information. Class clazz = - RegionSplitPolicy.getSplitPolicyClass(this.htd, env.getMasterConfiguration()); + RegionSplitPolicy.getSplitPolicyClass(htd, env.getMasterConfiguration()); this.splitPolicy = ReflectionUtils.newInstance(clazz, env.getMasterConfiguration()); } } @@ -611,6 +610,7 @@ public class SplitTableRegionProcedure maxThreads, Threads.getNamedThreadFactory("StoreFileSplitter-%1$d")); final List>> futures = new ArrayList>>(nbFiles); + TableDescriptor htd = env.getMasterServices().getTableDescriptors().get(getTableName()); // Split each store file. for (Map.Entry>e: files.entrySet()) { byte [] familyName = Bytes.toBytes(e.getKey()); -- 2.14.3 (Apple Git-98)