diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java index 0fe181b5039e..c104fdcfa33a 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java @@ -2115,7 +2115,9 @@ public static RegionEventDescriptor toRegionEventDescriptor(EventType eventType, * @return toString of passed m */ public static String getShortTextFormat(Message m) { - if (m == null) return "null"; + if (m == null) { + return "null"; + } if (m instanceof ScanRequest) { // This should be small and safe to output. No data. return TextFormat.shortDebugString(m); @@ -2157,6 +2159,8 @@ public static String getShortTextFormat(Message m) { ClientProtos.CoprocessorServiceRequest r = (ClientProtos.CoprocessorServiceRequest) m; return "coprocessorService= " + r.getCall().getServiceName() + ":" + r.getCall().getMethodName(); + } else if (m instanceof MasterProtos.MoveRegionRequest) { + return TextFormat.shortDebugString(m); } return "TODO: " + m.getClass().toString(); } diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/shaded/protobuf/TestProtobufUtil.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/shaded/protobuf/TestProtobufUtil.java index 2b4380dfbb6d..39fa2eb06c0a 100644 --- a/hbase-client/src/test/java/org/apache/hadoop/hbase/shaded/protobuf/TestProtobufUtil.java +++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/shaded/protobuf/TestProtobufUtil.java @@ -68,7 +68,9 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair; import org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos; +import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos; import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos; +import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos; @Category(SmallTests.class) public class TestProtobufUtil { @@ -77,6 +79,11 @@ public class TestProtobufUtil { HBaseClassTestRule.forClass(TestProtobufUtil.class); private static final String TAG_STR = "tag-1"; private static final byte TAG_TYPE = (byte) 10; + private static final HBaseProtos.ServerName SERVER_NAME = + HBaseProtos.ServerName.newBuilder().setHostName("a.b.com").build(); + private static final HBaseProtos.RegionSpecifier REGION = + HBaseProtos.RegionSpecifier.newBuilder().setValue(ByteString.copyFromUtf8("test")) + .setType(HBaseProtos.RegionSpecifier.RegionSpecifierType.REGION_NAME).build(); public TestProtobufUtil() { } @@ -623,4 +630,139 @@ public void testSlowLogParamsMutateRequest() { assertTrue(slowLogParams.getParams() .contains(Bytes.toStringBinary(mutationProto.getRow().toByteArray()))); } + + @Test + public void testGetShortTextFormatNull() { + String actual = ProtobufUtil.getShortTextFormat(null); + assertNotNull(actual); + assertEquals("null", actual); + } + + @Test + public void testGetShortTextFormatScanRequest() { + ClientProtos.ScanRequest.Builder builder = ClientProtos.ScanRequest.newBuilder(); + builder.setRegion(REGION); + ClientProtos.ScanRequest scanRequest = builder.build(); + + String actual = ProtobufUtil.getShortTextFormat(scanRequest); + + assertNotNull(actual); + assertEquals("region { type: REGION_NAME value: \"test\" }", actual); + } + + @Test + public void testGetShortTextFormatRegionServerReportRequest() { + RegionServerStatusProtos.RegionServerReportRequest.Builder builder = + RegionServerStatusProtos.RegionServerReportRequest.newBuilder(); + builder.setServer(SERVER_NAME); + RegionServerStatusProtos.RegionServerReportRequest request = builder.build(); + + String actual = ProtobufUtil.getShortTextFormat(request); + + assertNotNull(actual); + assertEquals("server host_name: \"a.b.com\" load { numberOfRequests: 0 }", actual); + } + + @Test + public void testGetShortTextFormatRegionServerStartupRequest() { + RegionServerStatusProtos.RegionServerStartupRequest.Builder builder = + RegionServerStatusProtos.RegionServerStartupRequest.newBuilder(); + builder.setPort(8080); + builder.setServerCurrentTime(111111L); + builder.setServerStartCode(15L); + builder.setUseThisHostnameInstead("some-host-name"); + RegionServerStatusProtos.RegionServerStartupRequest regionServerStartupRequest = + builder.build(); + + String actual = ProtobufUtil.getShortTextFormat(regionServerStartupRequest); + + assertNotNull(actual); + assertEquals("port: 8080 server_start_code: 15 server_current_time: 111111" + + " use_this_hostname_instead: \"some-host-name\"", actual); + } + + @Test + public void testGetShortTextFormatMutationProto() { + MutationProto mutationProto = + ClientProtos.MutationProto.newBuilder().setRow(ByteString.copyFromUtf8("row123")).build(); + + String actual = ProtobufUtil.getShortTextFormat(mutationProto); + + assertNotNull(actual); + assertEquals("row=row123, type=APPEND", actual); + } + + @Test + public void testGetShortTextFormatGetRequest() throws IOException { + ClientProtos.GetRequest getRequest = ClientProtos.GetRequest.newBuilder().setRegion(REGION) + .setGet(ProtobufUtil.toGet(new Get(Bytes.toBytes("foo")))).build(); + + String actual = ProtobufUtil.getShortTextFormat(getRequest); + + assertNotNull(actual); + assertEquals("region= test, row=foo", actual); + } + + @Test + public void testGetShortTextFormatMultiRequest() throws IOException { + ClientProtos.Action action = ClientProtos.Action.newBuilder() + .setGet(ProtobufUtil.toGet(new Get(Bytes.toBytes("foo")))).build(); + ClientProtos.RegionAction regionAction = + ClientProtos.RegionAction.newBuilder().addAction(action).setRegion(REGION).build(); + + ClientProtos.MultiRequest multiRequest = + ClientProtos.MultiRequest.newBuilder().addRegionAction(regionAction).build(); + + String actual = ProtobufUtil.getShortTextFormat(multiRequest); + + assertNotNull(actual); + assertEquals("region= test, for 1 action(s) and 1st row key=foo", actual); + } + + @Test + public void testGetShortTextFormatMutateRequest() throws IOException { + ClientProtos.MutateRequest mutateRequest = ClientProtos.MutateRequest.newBuilder() + .setMutation( + ProtobufUtil.toMutation(MutationType.INCREMENT, new Increment(Bytes.toBytes("foo")))) + .setRegion(REGION).build(); + + String actual = ProtobufUtil.getShortTextFormat(mutateRequest); + + assertNotNull(actual); + assertEquals("region= test, row=foo", actual); + } + + @Test + public void testGetShortTextFormatCoprocessorServiceRequest() { + ClientProtos.CoprocessorServiceCall call = ClientProtos.CoprocessorServiceCall.newBuilder() + .setRow(ByteString.copyFrom(Bytes.toBytes("foo"))).setMethodName("awesomeMethod") + .setServiceName("awesomeService") + .setRequest(ByteString.copyFrom(Bytes.toBytes("foo-request"))).build(); + + ClientProtos.CoprocessorServiceRequest.Builder builder = + ClientProtos.CoprocessorServiceRequest.newBuilder(); + builder.setRegion(REGION); + builder.setCall(call); + ClientProtos.CoprocessorServiceRequest coprocessorServiceRequest = builder.build(); + + String actual = ProtobufUtil.getShortTextFormat(coprocessorServiceRequest); + + assertNotNull(actual); + assertEquals("coprocessorService= awesomeService:awesomeMethod", actual); + } + + @Test + public void testGetShortTextFormatMoveRegionRequest() { + MasterProtos.MoveRegionRequest.Builder builder = MasterProtos.MoveRegionRequest.newBuilder(); + builder.setRegion(REGION); + builder.setDestServerName(SERVER_NAME); + MasterProtos.MoveRegionRequest moveRegionRequest = builder.build(); + + String actual = ProtobufUtil.getShortTextFormat(moveRegionRequest); + + assertNotNull(actual); + assertEquals( + "region { type: REGION_NAME value: \"test\" } dest_server_name { host_name: \"a.b.com\" }", + actual); + } }