Skip to content

Commit 7b3a71e

Browse files
author
Dávid Paksy
committed
HBASE-28865 Implement proper string builder for MoveRegionRequest in ProtobufUtil.getShortTextFormat
1 parent 8efd67b commit 7b3a71e

2 files changed

Lines changed: 154 additions & 1 deletion

File tree

hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2150,7 +2150,9 @@ public static RegionEventDescriptor toRegionEventDescriptor(EventType eventType,
21502150
* @return toString of passed <code>m</code>
21512151
*/
21522152
public static String getShortTextFormat(Message m) {
2153-
if (m == null) return "null";
2153+
if (m == null) {
2154+
return "null";
2155+
}
21542156
if (m instanceof ScanRequest) {
21552157
// This should be small and safe to output. No data.
21562158
return TextFormat.shortDebugString(m);
@@ -2192,6 +2194,9 @@ public static String getShortTextFormat(Message m) {
21922194
ClientProtos.CoprocessorServiceRequest r = (ClientProtos.CoprocessorServiceRequest) m;
21932195
return "coprocessorService= " + r.getCall().getServiceName() + ":"
21942196
+ r.getCall().getMethodName();
2197+
} else if (m instanceof MasterProtos.MoveRegionRequest) {
2198+
// This should be small and safe to output. No data.
2199+
return TextFormat.shortDebugString(m);
21952200
}
21962201
return "TODO: " + m.getClass().toString();
21972202
}

hbase-client/src/test/java/org/apache/hadoop/hbase/shaded/protobuf/TestProtobufUtil.java

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;
5858
import org.apache.hbase.thirdparty.com.google.protobuf.BytesValue;
5959
import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;
60+
import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;
6061

6162
import org.apache.hadoop.hbase.shaded.protobuf.generated.CellProtos;
6263
import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;
@@ -69,7 +70,9 @@
6970
import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;
7071
import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;
7172
import org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos;
73+
import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos;
7274
import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;
75+
import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos;
7376

7477
@Category(SmallTests.class)
7578
public class TestProtobufUtil {
@@ -623,4 +626,149 @@ public void testSlowLogParamsMutateRequest() {
623626
assertTrue(slowLogParams.getParams()
624627
.contains(Bytes.toStringBinary(mutationProto.getRow().toByteArray())));
625628
}
629+
630+
@Test
631+
public void testGetShortTextFormatNull() {
632+
String actual = ProtobufUtil.getShortTextFormat(null);
633+
assertNotNull(actual);
634+
assertEquals("null", actual);
635+
}
636+
637+
@Test
638+
public void testGetShortTextFormatScanRequest() {
639+
ClientProtos.ScanRequest.Builder builder = ClientProtos.ScanRequest.newBuilder();
640+
builder.setRegion(givenRegion());
641+
ClientProtos.ScanRequest scanRequest = builder.build();
642+
643+
String actual = ProtobufUtil.getShortTextFormat(scanRequest);
644+
645+
assertNotNull(actual);
646+
assertEquals("region { type: REGION_NAME value: \"test\" }", actual);
647+
}
648+
649+
@Test
650+
public void testGetShortTextFormatRegionServerReportRequest() {
651+
RegionServerStatusProtos.RegionServerReportRequest.Builder builder =
652+
RegionServerStatusProtos.RegionServerReportRequest.newBuilder();
653+
builder.setServer(givenServerName());
654+
RegionServerStatusProtos.RegionServerReportRequest request = builder.build();
655+
656+
String actual = ProtobufUtil.getShortTextFormat(request);
657+
658+
assertNotNull(actual);
659+
assertEquals("server host_name: \"a.b.com\" load { numberOfRequests: 0 }", actual);
660+
}
661+
662+
@Test
663+
public void testGetShortTextFormatRegionServerStartupRequest() {
664+
RegionServerStatusProtos.RegionServerStartupRequest.Builder builder =
665+
RegionServerStatusProtos.RegionServerStartupRequest.newBuilder();
666+
builder.setPort(8080);
667+
builder.setServerCurrentTime(111111L);
668+
builder.setServerStartCode(15L);
669+
builder.setUseThisHostnameInstead("some-host-name");
670+
RegionServerStatusProtos.RegionServerStartupRequest regionServerStartupRequest =
671+
builder.build();
672+
673+
String actual = ProtobufUtil.getShortTextFormat(regionServerStartupRequest);
674+
675+
assertNotNull(actual);
676+
assertEquals(
677+
"port: 8080 server_start_code: 15 server_current_time: 111111 use_this_hostname_instead: \"some-host-name\"",
678+
actual);
679+
}
680+
681+
@Test
682+
public void testGetShortTextFormatMutationProto() {
683+
MutationProto mutationProto =
684+
ClientProtos.MutationProto.newBuilder().setRow(ByteString.copyFromUtf8("row123")).build();
685+
686+
String actual = ProtobufUtil.getShortTextFormat(mutationProto);
687+
688+
assertNotNull(actual);
689+
assertEquals("row=row123, type=APPEND", actual);
690+
}
691+
692+
@Test
693+
public void testGetShortTextFormatGetRequest() throws IOException {
694+
ClientProtos.GetRequest getRequest = ClientProtos.GetRequest.newBuilder()
695+
.setRegion(givenRegion()).setGet(ProtobufUtil.toGet(new Get(Bytes.toBytes("foo")))).build();
696+
697+
String actual = ProtobufUtil.getShortTextFormat(getRequest);
698+
699+
assertNotNull(actual);
700+
assertEquals("region= test, row=foo", actual);
701+
}
702+
703+
@Test
704+
public void testGetShortTextFormatMultiRequest() throws IOException {
705+
ClientProtos.Action action = ClientProtos.Action.newBuilder()
706+
.setGet(ProtobufUtil.toGet(new Get(Bytes.toBytes("foo")))).build();
707+
ClientProtos.RegionAction regionAction =
708+
ClientProtos.RegionAction.newBuilder().addAction(action).setRegion(givenRegion()).build();
709+
710+
ClientProtos.MultiRequest multiRequest =
711+
ClientProtos.MultiRequest.newBuilder().addRegionAction(regionAction).build();
712+
713+
String actual = ProtobufUtil.getShortTextFormat(multiRequest);
714+
715+
assertNotNull(actual);
716+
assertEquals("region= test, for 1 action(s) and 1st row key=foo", actual);
717+
}
718+
719+
@Test
720+
public void testGetShortTextFormatMutateRequest() throws IOException {
721+
ClientProtos.MutateRequest mutateRequest = ClientProtos.MutateRequest.newBuilder()
722+
.setMutation(
723+
ProtobufUtil.toMutation(MutationType.INCREMENT, new Increment(Bytes.toBytes("foo"))))
724+
.setRegion(givenRegion()).build();
725+
726+
String actual = ProtobufUtil.getShortTextFormat(mutateRequest);
727+
728+
assertNotNull(actual);
729+
assertEquals("region= test, row=foo", actual);
730+
}
731+
732+
@Test
733+
public void testGetShortTextFormatCoprocessorServiceRequest() {
734+
ClientProtos.CoprocessorServiceCall call = ClientProtos.CoprocessorServiceCall.newBuilder()
735+
.setRow(UnsafeByteOperations.unsafeWrap(Bytes.toBytes("foo"))).setMethodName("awesomeMethod")
736+
.setServiceName("awesomeService")
737+
.setRequest(UnsafeByteOperations.unsafeWrap(Bytes.toBytes("foo-request"))).build();
738+
739+
ClientProtos.CoprocessorServiceRequest.Builder builder =
740+
ClientProtos.CoprocessorServiceRequest.newBuilder();
741+
builder.setRegion(givenRegion());
742+
builder.setCall(call);
743+
ClientProtos.CoprocessorServiceRequest coprocessorServiceRequest = builder.build();
744+
745+
String actual = ProtobufUtil.getShortTextFormat(coprocessorServiceRequest);
746+
747+
assertNotNull(actual);
748+
assertEquals("coprocessorService= awesomeService:awesomeMethod", actual);
749+
}
750+
751+
@Test
752+
public void testGetShortTextFormatMoveRegionRequest() {
753+
MasterProtos.MoveRegionRequest.Builder builder = MasterProtos.MoveRegionRequest.newBuilder();
754+
builder.setRegion(givenRegion());
755+
builder.setDestServerName(givenServerName());
756+
MasterProtos.MoveRegionRequest moveRegionRequest = builder.build();
757+
758+
String actual = ProtobufUtil.getShortTextFormat(moveRegionRequest);
759+
760+
assertNotNull(actual);
761+
assertEquals(
762+
"region { type: REGION_NAME value: \"test\" } dest_server_name { host_name: \"a.b.com\" }",
763+
actual);
764+
}
765+
766+
private static HBaseProtos.ServerName givenServerName() {
767+
return HBaseProtos.ServerName.newBuilder().setHostName("a.b.com").build();
768+
}
769+
770+
private static HBaseProtos.RegionSpecifier givenRegion() {
771+
return HBaseProtos.RegionSpecifier.newBuilder().setValue(ByteString.copyFromUtf8("test"))
772+
.setType(HBaseProtos.RegionSpecifier.RegionSpecifierType.REGION_NAME).build();
773+
}
626774
}

0 commit comments

Comments
 (0)