Skip to content

Commit d7a5d0e

Browse files
committed
[#9666] Added null-check before converting thrift to grpc
1 parent e0e86ee commit d7a5d0e

File tree

4 files changed

+205
-121
lines changed

4 files changed

+205
-121
lines changed

realtime/realtime-common/src/main/java/com/navercorp/pinpoint/realtime/dto/mapper/ThriftToGrpcConverter.java

+111-72
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,8 @@
1616
package com.navercorp.pinpoint.realtime.dto.mapper;
1717

1818
import com.google.protobuf.GeneratedMessageV3;
19-
import com.navercorp.pinpoint.grpc.trace.PActiveThreadDump;
20-
import com.navercorp.pinpoint.grpc.trace.PActiveThreadLightDump;
21-
import com.navercorp.pinpoint.grpc.trace.PCmdActiveThreadCountRes;
22-
import com.navercorp.pinpoint.grpc.trace.PCmdActiveThreadDumpRes;
23-
import com.navercorp.pinpoint.grpc.trace.PCmdActiveThreadLightDumpRes;
24-
import com.navercorp.pinpoint.grpc.trace.PCmdEchoResponse;
25-
import com.navercorp.pinpoint.grpc.trace.PMonitorInfo;
26-
import com.navercorp.pinpoint.grpc.trace.PThreadDump;
27-
import com.navercorp.pinpoint.grpc.trace.PThreadLightDump;
28-
import com.navercorp.pinpoint.grpc.trace.PThreadState;
29-
import com.navercorp.pinpoint.thrift.dto.command.TActiveThreadDump;
30-
import com.navercorp.pinpoint.thrift.dto.command.TActiveThreadLightDump;
31-
import com.navercorp.pinpoint.thrift.dto.command.TCmdActiveThreadCountRes;
32-
import com.navercorp.pinpoint.thrift.dto.command.TCmdActiveThreadDumpRes;
33-
import com.navercorp.pinpoint.thrift.dto.command.TCmdActiveThreadLightDumpRes;
34-
import com.navercorp.pinpoint.thrift.dto.command.TCommandEcho;
35-
import com.navercorp.pinpoint.thrift.dto.command.TMonitorInfo;
36-
import com.navercorp.pinpoint.thrift.dto.command.TThreadDump;
37-
import com.navercorp.pinpoint.thrift.dto.command.TThreadLightDump;
19+
import com.navercorp.pinpoint.grpc.trace.*;
20+
import com.navercorp.pinpoint.thrift.dto.command.*;
3821
import org.apache.thrift.TBase;
3922

4023
import java.util.ArrayList;
@@ -64,78 +47,134 @@ public static GeneratedMessageV3 convert(TBase<?, ?> s) {
6447
}
6548

6649
private static PCmdActiveThreadDumpRes convert(TCmdActiveThreadDumpRes s) {
67-
return PCmdActiveThreadDumpRes.newBuilder()
68-
.setSubType(s.getSubType())
69-
.setType(s.getType())
70-
.setVersion(s.getVersion())
71-
.addAllThreadDump(mapList(s.getThreadDumps(), ThriftToGrpcConverter::convert))
72-
.build();
50+
PCmdActiveThreadDumpRes.Builder builder = PCmdActiveThreadDumpRes.newBuilder();
51+
if (s.getSubType() != null) {
52+
builder.setSubType(s.getSubType());
53+
}
54+
if (s.getType() != null) {
55+
builder.setType(s.getType());
56+
}
57+
if (s.getVersion() != null) {
58+
builder.setVersion(s.getVersion());
59+
}
60+
builder.addAllThreadDump(mapList(s.getThreadDumps(), ThriftToGrpcConverter::convert));
61+
return builder.build();
7362
}
7463

75-
private static PActiveThreadDump convert(TActiveThreadDump s2) {
76-
final TThreadDump s3 = s2.getThreadDump();
77-
return PActiveThreadDump.newBuilder()
78-
.setStartTime(s2.getStartTime())
79-
.setLocalTraceId(s2.getLocalTraceId())
80-
.setSampled(s2.isSampled())
81-
.setTransactionId(s2.getTransactionId())
82-
.setEntryPoint(s2.getEntryPoint())
83-
.setThreadDump(PThreadDump.newBuilder()
84-
.setThreadName(s3.getThreadName())
85-
.setThreadId(s3.getThreadId())
86-
.setBlockedTime(s3.getBlockedTime())
87-
.setBlockedCount(s3.getBlockedCount())
88-
.setWaitedTime(s3.getWaitedTime())
89-
.setWaitedCount(s3.getWaitedCount())
90-
.setLockName(s3.getLockName())
91-
.setLockOwnerId(s3.getLockOwnerId())
92-
.setLockOwnerName(s3.getLockOwnerName())
93-
.setInNative(s3.isInNative())
94-
.setSuspended(s3.isSuspended())
95-
.setThreadState(PThreadState.forNumber(s3.getThreadState().getValue()))
96-
.addAllStackTrace(nonNullList(s3.getStackTrace()))
97-
.addAllLockedSynchronizer(nonNullList(s3.getLockedSynchronizers()))
98-
.addAllLockedMonitor(mapList(s3.getLockedMonitors(), ThriftToGrpcConverter::convert))
99-
.build())
100-
.build();
64+
private static PActiveThreadDump convert(TActiveThreadDump s) {
65+
final PActiveThreadDump.Builder builder = PActiveThreadDump.newBuilder()
66+
.setStartTime(s.getStartTime())
67+
.setLocalTraceId(s.getLocalTraceId())
68+
.setSampled(s.isSampled());
69+
70+
if (s.getThreadDump() != null) {
71+
builder.setThreadDump(buildPThreadDump(s.getThreadDump()));
72+
}
73+
if (s.getTransactionId() != null) {
74+
builder.setTransactionId(s.getTransactionId());
75+
}
76+
if (s.getEntryPoint() != null) {
77+
builder.setEntryPoint(s.getEntryPoint());
78+
}
79+
80+
return builder.build();
81+
}
82+
83+
private static PThreadDump buildPThreadDump(TThreadDump s) {
84+
PThreadDump.Builder builder = PThreadDump.newBuilder()
85+
.setThreadId(s.getThreadId())
86+
.setBlockedTime(s.getBlockedTime())
87+
.setBlockedCount(s.getBlockedCount())
88+
.setWaitedTime(s.getWaitedTime())
89+
.setWaitedCount(s.getWaitedCount())
90+
.setLockOwnerId(s.getLockOwnerId())
91+
.setInNative(s.isInNative())
92+
.setSuspended(s.isSuspended());
93+
94+
if (s.getThreadName() != null) {
95+
builder.setThreadName(s.getThreadName());
96+
}
97+
if (s.getLockName() != null) {
98+
builder.setLockName(s.getLockName());
99+
}
100+
if (s.getLockOwnerName() != null) {
101+
builder.setLockOwnerName(s.getLockOwnerName());
102+
}
103+
if (s.getThreadState() != null) {
104+
builder.setThreadState(PThreadState.forNumber(s.getThreadState().getValue()));
105+
}
106+
if (s.getStackTrace() != null) {
107+
builder.addAllStackTrace(nonNullList(s.getStackTrace()));
108+
}
109+
if (s.getLockedMonitors() != null) {
110+
builder.addAllLockedMonitor(mapList(s.getLockedMonitors(), ThriftToGrpcConverter::convert));
111+
}
112+
if (s.getLockedSynchronizers() != null) {
113+
builder.addAllLockedSynchronizer(nonNullList(s.getLockedSynchronizers()));
114+
}
115+
return builder.build();
101116
}
102117

103118
private static PMonitorInfo convert(TMonitorInfo s) {
104-
return PMonitorInfo.newBuilder()
105-
.setStackDepth(s.getStackDepth())
106-
.setStackFrame(s.getStackFrame())
107-
.build();
119+
PMonitorInfo.Builder builder = PMonitorInfo.newBuilder()
120+
.setStackDepth(s.getStackDepth());
121+
if (s.getStackFrame() != null) {
122+
builder.setStackFrame(s.getStackFrame());
123+
}
124+
return builder.build();
108125
}
109126

110127
private static PCmdActiveThreadLightDumpRes convert(TCmdActiveThreadLightDumpRes s) {
111-
final PCmdActiveThreadLightDumpRes.Builder builder = PCmdActiveThreadLightDumpRes.newBuilder()
112-
.setSubType(s.getSubType())
113-
.setType(s.getType())
114-
.setVersion(s.getVersion())
128+
PCmdActiveThreadLightDumpRes.Builder builder = PCmdActiveThreadLightDumpRes.newBuilder()
115129
.addAllThreadDump(mapList(s.getThreadDumps(), ThriftToGrpcConverter::convert));
130+
if (s.getSubType() != null) {
131+
builder.setSubType(s.getSubType());
132+
}
133+
if (s.getType() != null) {
134+
builder.setType(s.getType());
135+
}
136+
if (s.getVersion() != null) {
137+
builder.setVersion(s.getVersion());
138+
}
116139
return builder.build();
117140
}
118141

119142
private static PActiveThreadLightDump convert(TActiveThreadLightDump s) {
120-
final TThreadLightDump s2 = s.getThreadDump();
121-
return PActiveThreadLightDump.newBuilder()
143+
PActiveThreadLightDump.Builder builder = PActiveThreadLightDump.newBuilder()
122144
.setStartTime(s.getStartTime())
123145
.setLocalTraceId(s.getLocalTraceId())
124146
.setSampled(s.isSampled())
125-
.setTransactionId(s.getTransactionId())
126-
.setEntryPoint(s.getEntryPoint())
127-
.setThreadDump(PThreadLightDump.newBuilder()
128-
.setThreadName(s2.getThreadName())
129-
.setThreadId(s2.getThreadId())
130-
.setThreadState(PThreadState.forNumber(s2.getThreadState().getValue()))
131-
.build())
132-
.build();
147+
.setTransactionId(s.getTransactionId());
148+
if (s.getTransactionId() != null) {
149+
builder.setTransactionId(s.getTransactionId());
150+
}
151+
if (s.getEntryPoint() != null) {
152+
builder.setEntryPoint(s.getEntryPoint());
153+
}
154+
if (s.getThreadDump() != null) {
155+
builder.setThreadDump(buildPThreadLightDump(s.getThreadDump()));
156+
}
157+
return builder.build();
158+
}
159+
160+
private static PThreadLightDump buildPThreadLightDump(TThreadLightDump s) {
161+
PThreadLightDump.Builder builder = PThreadLightDump.newBuilder()
162+
.setThreadId(s.getThreadId());
163+
if (s.getThreadName() != null) {
164+
builder.setThreadName(s.getThreadName());
165+
}
166+
if (s.getThreadState() != null) {
167+
builder.setThreadState(PThreadState.forNumber(s.getThreadState().getValue()));
168+
}
169+
return builder.build();
133170
}
134171

135172
private static PCmdEchoResponse convert(TCommandEcho s) {
136-
return PCmdEchoResponse.newBuilder()
137-
.setMessage(s.getMessage())
138-
.build();
173+
PCmdEchoResponse.Builder builder = PCmdEchoResponse.newBuilder();
174+
if (s.getMessage() != null) {
175+
builder.setMessage(s.getMessage());
176+
}
177+
return builder.build();
139178
}
140179

141180
private static PCmdActiveThreadCountRes convert(TCmdActiveThreadCountRes s) {

realtime/realtime-common/src/main/java/com/navercorp/pinpoint/realtime/dto/mapper/grpc/ATDSupplyMapper.java

+24-12
Original file line numberDiff line numberDiff line change
@@ -56,21 +56,33 @@ static ATDSupply from(PCmdActiveThreadLightDumpRes s) {
5656
}
5757

5858
static PCmdActiveThreadDumpRes buildDetailedDumpResult(ATDSupply s) {
59-
return PCmdActiveThreadDumpRes.newBuilder()
60-
.setType(s.getType())
61-
.setVersion(s.getVersion())
62-
.setSubType(s.getSubType())
63-
.addAllThreadDump(mapList(s.getThreadDumps(), ActiveThreadDumpMapper::into))
64-
.build();
59+
PCmdActiveThreadDumpRes.Builder builder = PCmdActiveThreadDumpRes.newBuilder()
60+
.addAllThreadDump(mapList(s.getThreadDumps(), ActiveThreadDumpMapper::into));
61+
if (s.getType() != null) {
62+
builder.setType(s.getType());
63+
}
64+
if (s.getVersion() != null) {
65+
builder.setVersion(s.getVersion());
66+
}
67+
if (s.getSubType() != null) {
68+
builder.setSubType(s.getSubType());
69+
}
70+
return builder.build();
6571
}
6672

6773
static PCmdActiveThreadLightDumpRes buildLightDumpResult(ATDSupply s) {
68-
return PCmdActiveThreadLightDumpRes.newBuilder()
69-
.setType(s.getType())
70-
.setVersion(s.getVersion())
71-
.setSubType(s.getSubType())
72-
.addAllThreadDump(mapList(s.getThreadDumps(), ActiveThreadDumpMapper::intoLight))
73-
.build();
74+
PCmdActiveThreadLightDumpRes.Builder builder = PCmdActiveThreadLightDumpRes.newBuilder()
75+
.addAllThreadDump(mapList(s.getThreadDumps(), ActiveThreadDumpMapper::intoLight));
76+
if (s.getType() != null) {
77+
builder.setType(s.getType());
78+
}
79+
if (s.getVersion() != null) {
80+
builder.setVersion(s.getVersion());
81+
}
82+
if (s.getSubType() != null) {
83+
builder.setSubType(s.getSubType());
84+
}
85+
return builder.build();
7486
}
7587

7688
}

realtime/realtime-common/src/main/java/com/navercorp/pinpoint/realtime/dto/mapper/grpc/ActiveThreadDumpMapper.java

+26-13
Original file line numberDiff line numberDiff line change
@@ -47,27 +47,40 @@ static ActiveThreadDump fromLight(PActiveThreadLightDump s) {
4747
}
4848

4949
static PActiveThreadDump into(ActiveThreadDump s) {
50-
assert s.getThreadDump() != null;
51-
return PActiveThreadDump.newBuilder()
50+
final PActiveThreadDump.Builder builder = PActiveThreadDump.newBuilder()
5251
.setStartTime(s.getStartTime())
5352
.setLocalTraceId(s.getLocalTraceId())
54-
.setThreadDump(ThreadDumpMapper.into(s.getThreadDump()))
55-
.setSampled(s.isSampled())
56-
.setTransactionId(s.getTransactionId())
57-
.setEntryPoint(s.getEntryPoint())
58-
.build();
53+
.setSampled(s.isSampled());
54+
55+
if (s.getThreadDump() != null) {
56+
builder.setThreadDump(ThreadDumpMapper.into(s.getThreadDump()));
57+
}
58+
if (s.getTransactionId() != null) {
59+
builder.setTransactionId(s.getTransactionId());
60+
}
61+
if (s.getEntryPoint() != null) {
62+
builder.setEntryPoint(s.getEntryPoint());
63+
}
64+
65+
return builder.build();
5966
}
6067

6168
static PActiveThreadLightDump intoLight(ActiveThreadDump s) {
62-
assert s.getThreadDump() != null;
63-
return PActiveThreadLightDump.newBuilder()
69+
PActiveThreadLightDump.Builder builder = PActiveThreadLightDump.newBuilder()
6470
.setStartTime(s.getStartTime())
6571
.setLocalTraceId(s.getLocalTraceId())
66-
.setThreadDump(ThreadDumpMapper.intoLight(s.getThreadDump()))
6772
.setSampled(s.isSampled())
68-
.setTransactionId(s.getTransactionId())
69-
.setEntryPoint(s.getEntryPoint())
70-
.build();
73+
.setTransactionId(s.getTransactionId());
74+
if (s.getTransactionId() != null) {
75+
builder.setTransactionId(s.getTransactionId());
76+
}
77+
if (s.getEntryPoint() != null) {
78+
builder.setEntryPoint(s.getEntryPoint());
79+
}
80+
if (s.getThreadDump() != null) {
81+
builder.setThreadDump(ThreadDumpMapper.intoLight(s.getThreadDump()));
82+
}
83+
return builder.build();
7184
}
7285

7386
}

0 commit comments

Comments
 (0)