Skip to content

Commit f0382cf

Browse files
committed
fix region_metrics slow and region_metics test case
1 parent 4bb2291 commit f0382cf

File tree

3 files changed

+43
-34
lines changed

3 files changed

+43
-34
lines changed

src/main/java/com/alipay/oceanbase/hbase/util/OHRegionLocatorExecutor.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,12 @@ private OHRegionLocator createHashPartitionLocator(
230230
(int) hostInfo.get(1),
231231
i
232232
);
233+
long tabletId = (long) partition.get(1);
233234
final HRegionInfo regionInfo = new HRegionInfo(
234235
TableName.valueOf(tableName),
235-
startKeys[0],
236-
endKeys[0]
236+
null, null,
237+
false,
238+
tabletId
237239
);
238240
HRegionLocation location = new HRegionLocation(regionInfo, serverName, i);
239241
Boolean role = (int) partition.get(4) == 1;

src/main/java/com/alipay/oceanbase/hbase/util/OHRegionMetricsExecutor.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,11 @@
2525
import com.alipay.oceanbase.rpc.meta.ObTableMetaRequest;
2626
import com.alipay.oceanbase.rpc.meta.ObTableMetaResponse;
2727
import com.alipay.oceanbase.rpc.meta.ObTableRpcMetaType;
28+
import org.apache.hadoop.hbase.HRegionInfo;
2829
import org.apache.hadoop.hbase.RegionMetrics;
2930
import org.apache.hadoop.hbase.Size;
31+
import org.apache.hadoop.hbase.TableName;
32+
import org.apache.hadoop.hbase.client.Table;
3033

3134
import java.io.IOException;
3235
import java.util.*;
@@ -74,8 +77,12 @@ public List<RegionMetrics> parse(ObTableMetaResponse response) throws IOExceptio
7477
throw new IOException("size length has to be the same");
7578
}
7679
for (int i = 0; i < regions.size(); ++i) {
77-
String name_str = Integer.toString(regions.get(i));
78-
byte[] name = name_str.getBytes();
80+
byte[] name = HRegionInfo.createRegionName(
81+
TableName.valueOf(tableGroupName),
82+
null,
83+
regions.get(i),
84+
HRegionInfo.DEFAULT_REPLICA_ID, true
85+
);
7986
Size storeFileSize = new Size(((double) ssTableSizeList.get(i)) / (1024 * 1024) , Size.Unit.MEGABYTE); // The unit in original HBase is MEGABYTE, for us it is BYTE
8087
Size memStoreSize = new Size(((double) memTableSizeList.get(i)) / (1024 * 1024), Size.Unit.MEGABYTE); // The unit in original HBase is MEGABYTE, for us it is BYTE
8188
OHRegionMetrics ohRegionMetrics = new OHRegionMetrics(tableGroupName, name, storeFileSize, memStoreSize);

src/test/java/com/alipay/oceanbase/hbase/OHTableAdminInterfaceTest.java

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -515,72 +515,72 @@ public void testAdminGetRegionMetrics() throws Exception {
515515
" `T` bigint(20) NOT NULL,\n" +
516516
" `V` varbinary(1024) DEFAULT NULL,\n" +
517517
" PRIMARY KEY (`K`, `Q`, `T`)\n" +
518-
") TABLEGROUP = test_get_region_metrics PARTITION BY KEY(`K`) PARTITIONS 3;\n" +
518+
") TABLEGROUP = test_get_region_metrics PARTITION BY KEY(`K`) PARTITIONS 10;\n" +
519519
"\n" +
520520
"CREATE TABLE IF NOT EXISTS `test_get_region_metrics$cf2` (\n" +
521521
" `K` varbinary(1024) NOT NULL,\n" +
522522
" `Q` varbinary(256) NOT NULL,\n" +
523523
" `T` bigint(20) NOT NULL,\n" +
524524
" `V` varbinary(1024) DEFAULT NULL,\n" +
525525
" PRIMARY KEY (`K`, `Q`, `T`)\n" +
526-
") TABLEGROUP = test_get_region_metrics PARTITION BY KEY(`K`) PARTITIONS 3;\n" +
526+
") TABLEGROUP = test_get_region_metrics PARTITION BY KEY(`K`) PARTITIONS 10;\n" +
527527
"\n" +
528528
"CREATE TABLE IF NOT EXISTS `test_get_region_metrics$cf3` (\n" +
529529
" `K` varbinary(1024) NOT NULL,\n" +
530530
" `Q` varbinary(256) NOT NULL,\n" +
531531
" `T` bigint(20) NOT NULL,\n" +
532532
" `V` varbinary(1024) DEFAULT NULL,\n" +
533533
" PRIMARY KEY (`K`, `Q`, `T`)\n" +
534-
") TABLEGROUP = test_get_region_metrics PARTITION BY KEY(`K`) PARTITIONS 3;\n" +
534+
") TABLEGROUP = test_get_region_metrics PARTITION BY KEY(`K`) PARTITIONS 10;\n" +
535535
"\n" +
536-
"CREATE DATABASE IF NOT EXISTS `get_region`;\n" +
537-
"use `get_region`;\n" +
538-
"CREATE TABLEGROUP IF NOT EXISTS `get_region:test_multi_cf` SHARDING = 'ADAPTIVE';\n" +
539-
"CREATE TABLE IF NOT EXISTS `get_region:test_multi_cf$cf1` (\n" +
536+
"CREATE TABLEGROUP IF NOT EXISTS test_no_part SHARDING = 'ADAPTIVE';\n" +
537+
"CREATE TABLE IF NOT EXISTS `test_no_part$cf1` (\n" +
540538
" `K` varbinary(1024) NOT NULL,\n" +
541539
" `Q` varbinary(256) NOT NULL,\n" +
542540
" `T` bigint(20) NOT NULL,\n" +
543541
" `V` varbinary(1024) DEFAULT NULL,\n" +
544-
" PRIMARY KEY (`K`, `Q`, `T`)\n" +
545-
") TABLEGROUP = `get_region:test_multi_cf` PARTITION BY KEY(`K`) PARTITIONS 3;\n" +
546-
"CREATE TABLE IF NOT EXISTS `get_region:test_multi_cf$cf2` (\n" +
542+
" PRIMARY KEY (`K`, `Q`, `T`)\n" +
543+
") TABLEGROUP = test_no_part;\n" +
544+
"CREATE TABLE IF NOT EXISTS `test_no_part$cf2` (\n" +
547545
" `K` varbinary(1024) NOT NULL,\n" +
548546
" `Q` varbinary(256) NOT NULL,\n" +
549547
" `T` bigint(20) NOT NULL,\n" +
550548
" `V` varbinary(1024) DEFAULT NULL,\n" +
551549
" PRIMARY KEY (`K`, `Q`, `T`)\n" +
552-
") TABLEGROUP = `get_region:test_multi_cf` PARTITION BY KEY(`K`) PARTITIONS 3;\n" +
553-
"CREATE TABLE IF NOT EXISTS `get_region:test_multi_cf$cf3` (\n" +
550+
") TABLEGROUP = test_no_part;\n" +
551+
"CREATE TABLE IF NOT EXISTS `test_no_part$cf3` (\n" +
554552
" `K` varbinary(1024) NOT NULL,\n" +
555553
" `Q` varbinary(256) NOT NULL,\n" +
556554
" `T` bigint(20) NOT NULL,\n" +
557555
" `V` varbinary(1024) DEFAULT NULL,\n" +
558556
" PRIMARY KEY (`K`, `Q`, `T`)\n" +
559-
") TABLEGROUP = `get_region:test_multi_cf` PARTITION BY KEY(`K`) PARTITIONS 3;" +
560-
"USE `test`;" +
561-
"CREATE TABLEGROUP IF NOT EXISTS test_no_part SHARDING = 'ADAPTIVE';" +
562-
"CREATE TABLE IF NOT EXISTS `test_no_part$cf1` (\n" +
557+
") TABLEGROUP = test_no_part;\n" +
558+
"CREATE DATABASE IF NOT EXISTS `get_region`;\n" +
559+
"use `get_region`;\n" +
560+
"CREATE TABLEGROUP IF NOT EXISTS `get_region:test_multi_cf` SHARDING = 'ADAPTIVE';\n" +
561+
"CREATE TABLE IF NOT EXISTS `get_region:test_multi_cf$cf1` (\n" +
563562
" `K` varbinary(1024) NOT NULL,\n" +
564563
" `Q` varbinary(256) NOT NULL,\n" +
565564
" `T` bigint(20) NOT NULL,\n" +
566565
" `V` varbinary(1024) DEFAULT NULL,\n" +
567566
" PRIMARY KEY (`K`, `Q`, `T`)\n" +
568-
") TABLEGROUP = `test_no_part`;\n" +
569-
"CREATE TABLE IF NOT EXISTS `test_no_part$cf2` (\n" +
567+
") TABLEGROUP = `get_region:test_multi_cf` PARTITION BY KEY(`K`) PARTITIONS 3;\n" +
568+
"CREATE TABLE IF NOT EXISTS `get_region:test_multi_cf$cf2` (\n" +
570569
" `K` varbinary(1024) NOT NULL,\n" +
571570
" `Q` varbinary(256) NOT NULL,\n" +
572571
" `T` bigint(20) NOT NULL,\n" +
573572
" `V` varbinary(1024) DEFAULT NULL,\n" +
574573
" PRIMARY KEY (`K`, `Q`, `T`)\n" +
575-
") TABLEGROUP = `test_no_part`;\n" +
576-
"CREATE TABLE IF NOT EXISTS `test_no_part$cf3` (\n" +
574+
") TABLEGROUP = `get_region:test_multi_cf` PARTITION BY KEY(`K`) PARTITIONS 3;\n" +
575+
"CREATE TABLE IF NOT EXISTS `get_region:test_multi_cf$cf3` (\n" +
577576
" `K` varbinary(1024) NOT NULL,\n" +
578577
" `Q` varbinary(256) NOT NULL,\n" +
579578
" `T` bigint(20) NOT NULL,\n" +
580579
" `V` varbinary(1024) DEFAULT NULL,\n" +
581580
" PRIMARY KEY (`K`, `Q`, `T`)\n" +
582-
") TABLEGROUP = `test_no_part`;");
581+
") TABLEGROUP = `get_region:test_multi_cf` PARTITION BY KEY(`K`) PARTITIONS 3;");
583582
st.close();
583+
conn.close();
584584
String tablegroup1 = "test_get_region_metrics";
585585
String tablegroup2 = "get_region:test_multi_cf";
586586
Configuration conf = ObHTableTestUtil.newConfiguration();
@@ -594,11 +594,11 @@ public void testAdminGetRegionMetrics() throws Exception {
594594
Assert.assertTrue(thrown.getCause() instanceof ObTableException);
595595
Assert.assertEquals(ResultCodes.OB_KV_HBASE_TABLE_NOT_EXISTS.errorCode, ((ObTableException) thrown.getCause()).getErrorCode());
596596

597-
// test use serverName without tableName to get region metrics
598-
assertThrows(FeatureNotSupportedException.class,
599-
() -> {
600-
admin.getRegionMetrics(ServerName.valueOf("localhost,1,1"));
601-
});
597+
// test use serverName without tableName to get region metrics
598+
assertThrows(FeatureNotSupportedException.class,
599+
() -> {
600+
admin.getRegionMetrics(ServerName.valueOf("localhost,1,1"));
601+
});
602602

603603
// test single-thread getRegionMetrics after writing
604604
batchInsert(10000, tablegroup1);
@@ -607,7 +607,7 @@ public void testAdminGetRegionMetrics() throws Exception {
607607
List<RegionMetrics> metrics = admin.getRegionMetrics(ServerName.valueOf("localhost,1,1"), TableName.valueOf(tablegroup1));
608608
long cost = System.currentTimeMillis() - start;
609609
System.out.println("get region metrics time usage: " + cost + "ms, tablegroup: " + tablegroup1);
610-
assertEquals(9, metrics.size());
610+
assertEquals(10, metrics.size());
611611

612612
// test getRegionMetrics concurrently reading while writing
613613
ExecutorService executorService = Executors.newFixedThreadPool(10);
@@ -625,16 +625,16 @@ public void testAdminGetRegionMetrics() throws Exception {
625625
regionMetrics = admin.getRegionMetrics(null, TableName.valueOf(tablegroup1));
626626
long thrCost = System.currentTimeMillis() - thrStart;
627627
System.out.println("task: " + taskId + ", get region metrics time usage: " + thrCost + "ms, tablegroup: " + tablegroup1);
628-
if (regionMetrics.size() != 9) {
628+
if (regionMetrics.size() != 10) {
629629
throw new ObTableGetException(
630630
"the number of region metrics does not match the number of tablets, the number of region metrics: " + regionMetrics.size());
631631
}
632632
} else {
633633
long thrStart = System.currentTimeMillis();
634634
regionMetrics = admin.getRegionMetrics(null, TableName.valueOf(tablegroup2));
635635
long thrCost = System.currentTimeMillis() - thrStart;
636-
System.out.println("task: " + taskId + ", get region metrics time usage: " + thrCost + "ms, tablegroup: " + tablegroup2);
637-
if (regionMetrics.size() != 9) {
636+
System.out.println("task: " + taskId + ", get region metrics time usage: " + thrCost + "ms, tablegroup: " + tablegroup1);
637+
if (regionMetrics.size() != 3) {
638638
throw new ObTableGetException(
639639
"the number of region metrics does not match the number of tablets, the number of region metrics: " + regionMetrics.size());
640640
}

0 commit comments

Comments
 (0)