Skip to content

Backport "HBASE-28865 Implement proper string builder for MoveRegionRequest in ProtobufUtil.getShortTextFormat" to branch-2 #6362

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2115,7 +2115,9 @@ public static RegionEventDescriptor toRegionEventDescriptor(EventType eventType,
* @return toString of passed <code>m</code>
*/
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);
Expand Down Expand Up @@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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() {
}
Expand Down Expand Up @@ -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);
}
}