[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16400863#comment-16400863 ] Mike Drob commented on HBASE-19805: --- Are we still seeing this? [~sergey.soldatov] [~elserj] > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv > env, > final ServerName regionLocation, final RegionInfo hri, boolean > includeBestSplitRow) > throws IOException { > // TODO: There is no timeout on this controller. Set one! > HBaseRpcController controller = > env.getMasterServices().getClusterConnection(). > getRpcControllerFactory().newController(); > final AdminService.BlockingInterface admin = > > env.getMasterServices().getClusterConnection().getAdmin(regionLocation); > {code} > We don't valida
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16367941#comment-16367941 ] Sergey Soldatov commented on HBASE-19805: - [~stack] Sorry, missed the previous notification. Last time I ended up with some weird scenarios where everything get stuck without any visible problems and didn't have a chance to dig it due $dayjob. Will try to get back to this stuff during the weekend. > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv > env, > final ServerName regionLocation, final RegionInfo hri, boolean > includeBestSplitRow) > throws IOException { > // TODO: There is no timeout on this controller. Set one! > HBaseRpcController controller = > env.getMasterServices().getClusterConnection().
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16367929#comment-16367929 ] stack commented on HBASE-19805: --- Bad bug but not enough to block a beta-2. Moving it out. > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv > env, > final ServerName regionLocation, final RegionInfo hri, boolean > includeBestSplitRow) > throws IOException { > // TODO: There is no timeout on this controller. Set one! > HBaseRpcController controller = > env.getMasterServices().getClusterConnection(). > getRpcControllerFactory().newController(); > final AdminService.BlockingInterface admin = > > env.getMasterServices().getClusterConnection().getAdmin(regionLocation); > {code} > We don't validate tha
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16367928#comment-16367928 ] stack commented on HBASE-19805: --- [~elserj] Where is the script to manufacture this Exception? Post it and I can take a look see. > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0-beta-2 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv > env, > final ServerName regionLocation, final RegionInfo hri, boolean > includeBestSplitRow) > throws IOException { > // TODO: There is no timeout on this controller. Set one! > HBaseRpcController controller = > env.getMasterServices().getClusterConnection(). > getRpcControllerFactory().newController(); > final AdminService.BlockingInterface admin = > > env.getMasterServices().getClusterConnection().getAdmin(re
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16350786#comment-16350786 ] stack commented on HBASE-19805: --- Any luck [~sergey.soldatov] ? > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0-beta-2 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv > env, > final ServerName regionLocation, final RegionInfo hri, boolean > includeBestSplitRow) > throws IOException { > // TODO: There is no timeout on this controller. Set one! > HBaseRpcController controller = > env.getMasterServices().getClusterConnection(). > getRpcControllerFactory().newController(); > final AdminService.BlockingInterface admin = > > env.getMasterServices().getClusterConnection().getAdmin(regionLocation); > {code} > We don't validate that we have a non-null
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16328342#comment-16328342 ] Sergey Soldatov commented on HBASE-19805: - an update. An additional check for empty region location as well as for CLOSING state in checkSplittable method helps to avoid multiple splits for the same region as well as it solves this exception. But now I see that it may to get stuck somewhere during the split execution, so I'm trying to find the reason and fix it before submitting a patch. > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0-beta-2 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv > env, > final ServerName regionLocation, final RegionInfo hri, boolean > includeBestSplitRow) > throws IOException { > // TODO: There is no timeout on this controller
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16327990#comment-16327990 ] Sergey Soldatov commented on HBASE-19805: - well, here is a short RCA: checkSplittable method relies on Region.isSplittable which is just a simple check that region is available (not closing nor not closed) and has no references. But HRegion.closing flag we set only when we actually execute doClose(). At first glance, it would be reasonable to add a check that the region state (RegionStateNode) is not CLOSING. > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0-beta-2 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv > env, > final ServerName regionLocation, final RegionInfo hri, boolean > includeBestSplitRow) > throws IOException { > // TODO: There is no ti
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16327908#comment-16327908 ] Josh Elser commented on HBASE-19805: {quote}It should be numRegions, not newRegionSize. Otherwise this check is valid for the first split only and that's why it run splits for the same region without stop. {quote} Well, don't I have egg on my face :) > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0-beta-2 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv > env, > final ServerName regionLocation, final RegionInfo hri, boolean > includeBestSplitRow) > throws IOException { > // TODO: There is no timeout on this controller. Set one! > HBaseRpcController controller = > env.getMasterServices().getClusterConnection(). > getRpcControllerFactory().newControl
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16327901#comment-16327901 ] Sergey Soldatov commented on HBASE-19805: - [~stack] yep, that's exactly what I've expected. Let me dig why it happen on my own. [~elserj] You have an error in your code: {noformat} Thread.sleep(50); newRegionSize = admin.getRegions(tn).size(); {noformat} It should be numRegions, not newRegionSize. Otherwise this check is valid for the first split only and that's why it run splits for the same region without stop. > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0-beta-2 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv > env, > final ServerName regionLocation, final RegionInfo hri, boolean > includeBestSplitRow) > throws IOException { >
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16327887#comment-16327887 ] stack commented on HBASE-19805: --- A region can only be split once. Something wrong if we are doing it multiple times. FYI. I can look at log if you want to paste sir. > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0-beta-2 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv > env, > final ServerName regionLocation, final RegionInfo hri, boolean > includeBestSplitRow) > throws IOException { > // TODO: There is no timeout on this controller. Set one! > HBaseRpcController controller = > env.getMasterServices().getClusterConnection(). > getRpcControllerFactory().newController(); > final AdminService.BlockingInterface admin = > > env.getMasterServices
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16327873#comment-16327873 ] Sergey Soldatov commented on HBASE-19805: - [~stack] almost. Actually, that happens when one split is already in progress. We are closing parent (so, we are setting location to null) and if at this time we try to check whether this region is splittable, we hit this problem. I'm not sure yet why we allow to split the same region many times. From my log scheduled splits: {noformat} parent=af7ddfb3943627b825ddfe3fedb27590, daughterA=fde4b311dd76909e05cd57f2d19a8ebc, daughterB=4381a4dd9da46c6e7ce91ab6419fb708 parent=af7ddfb3943627b825ddfe3fedb27590, daughterA=38d5fffbe693017be0d2fcc97eec3e3e, daughterB=e76bfc1dddfca511c00dfd3477dc003d parent=af7ddfb3943627b825ddfe3fedb27590, daughterA=ef89483bc4117a31536e1c25def4f64e, daughterB=ccf1c2f5f43f478af438b6c3f2ca7ef5 {noformat} And only the first one is actually happen. > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0-beta-2 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sl
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16327772#comment-16327772 ] stack commented on HBASE-19805: --- Is it because the region is not assigned yet [~sergey.soldatov] ? Thanks. > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0-beta-2 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv > env, > final ServerName regionLocation, final RegionInfo hri, boolean > includeBestSplitRow) > throws IOException { > // TODO: There is no timeout on this controller. Set one! > HBaseRpcController controller = > env.getMasterServices().getClusterConnection(). > getRpcControllerFactory().newController(); > final AdminService.BlockingInterface admin = > > env.getMasterServices().getClusterConnection().getAdmin(regionLocation); > {code}
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16327738#comment-16327738 ] Josh Elser commented on HBASE-19805: Oh, and a workaround is just to sleep a bit client-side :) > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0-beta-2 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv > env, > final ServerName regionLocation, final RegionInfo hri, boolean > includeBestSplitRow) > throws IOException { > // TODO: There is no timeout on this controller. Set one! > HBaseRpcController controller = > env.getMasterServices().getClusterConnection(). > getRpcControllerFactory().newController(); > final AdminService.BlockingInterface admin = > > env.getMasterServices().getClusterConnection().getAdmin(regionLocation); > {code} > We
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16327728#comment-16327728 ] Josh Elser commented on HBASE-19805: Seems like a race condition from the client's view of the Regions to what the Master's states are when the RPC makes it there. The Client turns {{split(TableName, byte[])}} into {{splitRegion(regionId, byte[]). }}The region ID is passed over to the master, where it performs a lookup on that Region given the current state of the cluster. I would have to assume that the RegionStates object from the AssignmentManager is "consistent", so there was a change in that state. I think the Master should just be gracefully saying "nope, can't split this" (like what happens in HBaseAdmin for `split`) > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0-beta-2 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegion
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16327715#comment-16327715 ] Josh Elser commented on HBASE-19805: {noformat} 2018-01-16 14:07:46,054 INFO [main] client.HBaseAdmin: Started disable of myTestTable 2018-01-16 14:07:46,930 INFO [main] client.HBaseAdmin: Operation: DISABLE, Table Name: default:myTestTable completed 2018-01-16 14:07:47,420 INFO [main] client.HBaseAdmin: Operation: DELETE, Table Name: default:myTestTable completed 2018-01-16 14:07:48,918 INFO [main] client.HBaseAdmin: Operation: CREATE, Table Name: default:myTestTable completed Splits: [1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, 10] Splitting on 1 Splitting on 2 2018-01-16 14:07:50,159 DEBUG [main] client.ConnectionImplementation: locateRegionInMeta parentTable=hbase:meta, metaLocation=, attempt=0 of 16 failed; retrying after sleep of 100 because: No server address listed in hbase:meta for region myTestTable,,1516129669054.e104c084caeff64848c0aea66a41fdc0. containing row 2018-01-16 14:07:50,267 DEBUG [main] client.ConnectionImplementation: locateRegionInMeta parentTable=hbase:meta, metaLocation=, attempt=1 of 16 failed; retrying after sleep of 200 because: No server address listed in hbase:meta for region myTestTable,,1516129669054.e104c084caeff64848c0aea66a41fdc0. containing row 2018-01-16 14:07:50,473 DEBUG [main] client.ConnectionImplementation: locateRegionInMeta parentTable=hbase:meta, metaLocation=, attempt=2 of 16 failed; retrying after sleep of 301 because: No server address listed in hbase:meta for region myTestTable,,1516129669054.e104c084caeff64848c0aea66a41fdc0. containing row 2018-01-16 14:07:50,785 DEBUG [main] client.ConnectionImplementation: locateRegionInMeta parentTable=hbase:meta, metaLocation=, attempt=3 of 16 failed; retrying after sleep of 504 because: No server address listed in hbase:meta for region myTestTable,,1516129669054.e104c084caeff64848c0aea66a41fdc0. containing row Splitting on 3 2018-01-16 14:07:55,828 DEBUG [main] client.RpcRetryingCallerImpl: Call exception, tries=6, retries=6, started=4193 ms ago, cancelled=false, msg=java.io.IOException at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:463) at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) Caused by: java.lang.NullPointerException at org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) at org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) at org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) at org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) at org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) at org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) at org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) at org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) at org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) at org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) ... 3 more , details=, exception=java.io.IOException: java.io.IOException at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:463) at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) Caused by: java.lang.NullPointerException at org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) at org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) at org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) at org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) at org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:14
[jira] [Commented] (HBASE-19805) NPE in HMaster while issuing a sequence of table splits
[ https://issues.apache.org/jira/browse/HBASE-19805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16327631#comment-16327631 ] Josh Elser commented on HBASE-19805: Asked Sergey if he'd like to try to take a stab at this one. My thinking is that this should bubble up an IOException to propagate back to the client. FYI [~stack]. > NPE in HMaster while issuing a sequence of table splits > --- > > Key: HBASE-19805 > URL: https://issues.apache.org/jira/browse/HBASE-19805 > Project: HBase > Issue Type: Bug > Components: master >Affects Versions: 2.0.0-beta-1 >Reporter: Josh Elser >Assignee: Sergey Soldatov >Priority: Critical > Fix For: 2.0.0-beta-2 > > > I wrote a toy program to test the client tarball in HBASE-19735. After the > first few region splits, I see the following error in the Master log. > {noformat} > 2018-01-16 14:07:52,797 INFO > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] master.HMaster: > Client=jelser//192.168.1.23 split > myTestTable,1,1516129669054.8313b755f74092118f9dd30a4190ee23. > 2018-01-16 14:07:52,797 ERROR > [RpcServer.default.FPBQ.Fifo.handler=28,queue=1,port=16000] ipc.RpcServer: > Unexpected throwable object > java.lang.NullPointerException > at > org.apache.hadoop.hbase.client.ConnectionUtils.getStubKey(ConnectionUtils.java:229) > at > org.apache.hadoop.hbase.client.ConnectionImplementation.getAdmin(ConnectionImplementation.java:1175) > at > org.apache.hadoop.hbase.client.ConnectionUtils$ShortCircuitingClusterConnection.getAdmin(ConnectionUtils.java:149) > at > org.apache.hadoop.hbase.master.assignment.Util.getRegionInfoResponse(Util.java:59) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.checkSplittable(SplitTableRegionProcedure.java:146) > at > org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.(SplitTableRegionProcedure.java:103) > at > org.apache.hadoop.hbase.master.assignment.AssignmentManager.createSplitProcedure(AssignmentManager.java:761) > at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1626) > at > org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:134) > at org.apache.hadoop.hbase.master.HMaster.splitRegion(HMaster.java:1618) > at > org.apache.hadoop.hbase.master.MasterRpcServices.splitRegion(MasterRpcServices.java:778) > at > org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java) > at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:404) > at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324) > at > org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304) > {noformat} > {code} > public static void main(String[] args) throws Exception { > Configuration conf = HBaseConfiguration.create(); > try (Connection conn = ConnectionFactory.createConnection(conf); > Admin admin = conn.getAdmin()) { > final TableName tn = TableName.valueOf("myTestTable"); > if (admin.tableExists(tn)) { > admin.disableTable(tn); > admin.deleteTable(tn); > } > final TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn) > > .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1")).build()) > .build(); > admin.createTable(desc); > List splitPoints = new ArrayList<>(16); > for (int i = 1; i <= 16; i++) { > splitPoints.add(Integer.toString(i, 16)); > } > > System.out.println("Splits: " + splitPoints); > int numRegions = admin.getRegions(tn).size(); > for (String splitPoint : splitPoints) { > System.out.println("Splitting on " + splitPoint); > admin.split(tn, Bytes.toBytes(splitPoint)); > Thread.sleep(200); > int newRegionSize = admin.getRegions(tn).size(); > while (numRegions == newRegionSize) { > Thread.sleep(50); > newRegionSize = admin.getRegions(tn).size(); > } > } > {code} > A quick glance, looks like {{Util.getRegionInfoResponse}} is to blame. > {code} > static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv > env, > final ServerName regionLocation, final RegionInfo hri, boolean > includeBestSplitRow) > throws IOException { > // TODO: There is no timeout on this controller. Set one! > HBaseRpcController controller = > env.getMasterServices().getClusterConnection(). > getRpcControllerFactory().newController(); > final AdminService.BlockingInterfac