21
21
import com .google .common .base .Preconditions ;
22
22
import io .grpc .Deadline ;
23
23
import io .grpc .ExperimentalApi ;
24
+ import io .grpc .ForwardingServerBuilder ;
25
+ import io .grpc .Internal ;
26
+ import io .grpc .ServerBuilder ;
24
27
import io .grpc .ServerStreamTracer ;
25
- import io .grpc .internal .AbstractServerImplBuilder ;
26
28
import io .grpc .internal .FixedObjectPool ;
27
29
import io .grpc .internal .GrpcUtil ;
30
+ import io .grpc .internal .InternalServer ;
28
31
import io .grpc .internal .ObjectPool ;
32
+ import io .grpc .internal .ServerImplBuilder ;
33
+ import io .grpc .internal .ServerImplBuilder .ClientTransportServersBuilder ;
29
34
import io .grpc .internal .SharedResourcePool ;
30
35
import java .io .File ;
31
36
import java .util .Collections ;
67
72
* </pre>
68
73
*/
69
74
@ ExperimentalApi ("https://github.com/grpc/grpc-java/issues/1783" )
70
- public final class InProcessServerBuilder
71
- extends AbstractServerImplBuilder <InProcessServerBuilder > {
75
+ public final class InProcessServerBuilder extends ForwardingServerBuilder <InProcessServerBuilder > {
72
76
/**
73
77
* Create a server builder that will bind with the given name.
74
78
*
@@ -93,22 +97,40 @@ public static String generateName() {
93
97
return UUID .randomUUID ().toString ();
94
98
}
95
99
100
+ private final ServerImplBuilder serverImplBuilder ;
96
101
final String name ;
97
102
int maxInboundMetadataSize = Integer .MAX_VALUE ;
98
103
ObjectPool <ScheduledExecutorService > schedulerPool =
99
104
SharedResourcePool .forResource (GrpcUtil .TIMER_SERVICE );
100
105
101
106
private InProcessServerBuilder (String name ) {
102
107
this .name = Preconditions .checkNotNull (name , "name" );
108
+
109
+ final class InProcessClientTransportServersBuilder implements ClientTransportServersBuilder {
110
+ @ Override
111
+ public List <? extends InternalServer > buildClientTransportServers (
112
+ List <? extends ServerStreamTracer .Factory > streamTracerFactories ) {
113
+ return buildTransportServers (streamTracerFactories );
114
+ }
115
+ }
116
+
117
+ serverImplBuilder = new ServerImplBuilder (new InProcessClientTransportServersBuilder ());
118
+
103
119
// In-process transport should not record its traffic to the stats module.
104
120
// https://github.com/grpc/grpc-java/issues/2284
105
- setStatsRecordStartedRpcs (false );
106
- setStatsRecordFinishedRpcs (false );
121
+ serverImplBuilder . setStatsRecordStartedRpcs (false );
122
+ serverImplBuilder . setStatsRecordFinishedRpcs (false );
107
123
// Disable handshake timeout because it is unnecessary, and can trigger Thread creation that can
108
124
// break some environments (like tests).
109
125
handshakeTimeout (Long .MAX_VALUE , TimeUnit .SECONDS );
110
126
}
111
127
128
+ @ Internal
129
+ @ Override
130
+ protected ServerBuilder <?> delegate () {
131
+ return serverImplBuilder ;
132
+ }
133
+
112
134
/**
113
135
* Provides a custom scheduled executor service.
114
136
*
@@ -140,7 +162,7 @@ public InProcessServerBuilder scheduledExecutorService(
140
162
* @since 1.24.0
141
163
*/
142
164
public InProcessServerBuilder deadlineTicker (Deadline .Ticker ticker ) {
143
- setDeadlineTicker (ticker );
165
+ serverImplBuilder . setDeadlineTicker (ticker );
144
166
return this ;
145
167
}
146
168
@@ -164,8 +186,7 @@ public InProcessServerBuilder maxInboundMetadataSize(int bytes) {
164
186
return this ;
165
187
}
166
188
167
- @ Override
168
- protected List <InProcessServer > buildTransportServers (
189
+ List <InProcessServer > buildTransportServers (
169
190
List <? extends ServerStreamTracer .Factory > streamTracerFactories ) {
170
191
return Collections .singletonList (new InProcessServer (this , streamTracerFactories ));
171
192
}
@@ -174,4 +195,8 @@ protected List<InProcessServer> buildTransportServers(
174
195
public InProcessServerBuilder useTransportSecurity (File certChain , File privateKey ) {
175
196
throw new UnsupportedOperationException ("TLS not supported in InProcessServer" );
176
197
}
198
+
199
+ void setStatsEnabled (boolean value ) {
200
+ this .serverImplBuilder .setStatsEnabled (value );
201
+ }
177
202
}
0 commit comments