public void removeService(ServerServiceDefinition service) { if (service != null) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { methods.remove(method.getMethodDescriptor().getFullMethodName()); } } }
HandlerRegistry build() { final ImmutableMap.Builder<String, ServerMethodDefinition<?, ?>> mapBuilder = ImmutableMap.builder(); for (ServerServiceDefinition service : services.values()) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { mapBuilder.put(method.getMethodDescriptor().getFullMethodName(), method); } } return new HandlerRegistry(ImmutableList.copyOf(services.values()), mapBuilder.build()); } }
@SuppressWarnings({"rawtypes", "unchecked"}) public void addService(ServerServiceDefinition service, Provider provider) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { Method providerMethod = GrpcUtil.getMethod(method.getMethodDescriptor().getFullMethodName(), provider.getInterface()); MotanServerCallHandler handler; if (method.getServerCallHandler() instanceof MotanServerCallHandler) { handler = (MotanServerCallHandler) method.getServerCallHandler(); } else { handler = new MotanServerCallHandler(); method = method.withServerCallHandler(handler); } handler.init(provider, providerMethod); if (GrpcUtil.JSON_CODEC.equals(provider.getUrl().getParameter(URLParamType.serialize.getName()))) { MethodDescriptor jsonDesc = GrpcUtil.convertJsonDescriptor(method.getMethodDescriptor(), providerMethod.getParameterTypes()[0], providerMethod.getReturnType()); if(jsonDesc != null){ method = ServerMethodDefinition.create(jsonDesc, method.getServerCallHandler()); LoggerUtil.info("grpc method " + jsonDesc.getFullMethodName() +" use codec json."); } } methods.put(method.getMethodDescriptor().getFullMethodName(), method); } }
final ArmeriaServerCall<I, O> call = new ArmeriaServerCall<>( headers, methodDef.getMethodDescriptor(), compressorRegistry, decompressorRegistry,
InternalHandlerRegistry build() { Map<String, ServerMethodDefinition<?, ?>> map = new HashMap<String, ServerMethodDefinition<?, ?>>(); for (ServerServiceDefinition service : services.values()) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { map.put(method.getMethodDescriptor().getFullMethodName(), method); } } return new InternalHandlerRegistry( Collections.unmodifiableList(new ArrayList<ServerServiceDefinition>(services.values())), Collections.unmodifiableMap(map)); } }
InternalHandlerRegistry build() { Map<String, ServerMethodDefinition<?, ?>> map = new HashMap<String, ServerMethodDefinition<?, ?>>(); for (ServerServiceDefinition service : services.values()) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { map.put(method.getMethodDescriptor().getFullMethodName(), method); } } return new InternalHandlerRegistry( Collections.unmodifiableList(new ArrayList<>(services.values())), Collections.unmodifiableMap(map)); } }
/** Add a method to be supported by the service. */ public <ReqT, RespT> Builder addMethod(ServerMethodDefinition<ReqT, RespT> def) { MethodDescriptor<ReqT, RespT> method = def.getMethodDescriptor(); checkArgument( serviceName.equals(MethodDescriptor.extractFullServiceName(method.getFullMethodName())), "Method name should be prefixed with service name and separated with '/'. " + "Expected service name: '%s'. Actual fully qualifed method name: '%s'.", serviceName, method.getFullMethodName()); String name = method.getFullMethodName(); checkState(!methods.containsKey(name), "Method by same name already registered: %s", name); methods.put(name, def); return this; }
@SuppressWarnings("unchecked") private ServerServiceDefinition bindService(Supplier<T> factory) { ServerServiceDefinition baseDefinition = factory.get().bindService(); ServiceDescriptor descriptor = baseDefinition.getServiceDescriptor(); Collection<ServerMethodDefinition<?, ?>> methods = baseDefinition.getMethods(); ServerServiceDefinition.Builder builder = ServerServiceDefinition.builder(descriptor); methods.forEach(method -> builder.addMethod(ServerMethodDefinition.create(method.getMethodDescriptor(), new PerCallServerCallHandler(factory)))); return builder.build(); }
@SuppressWarnings("unchecked") private ServerServiceDefinition bindService(Supplier<T> factory) { ServerServiceDefinition baseDefinition = factory.get().bindService(); ServiceDescriptor descriptor = baseDefinition.getServiceDescriptor(); Collection<ServerMethodDefinition<?, ?>> methods = baseDefinition.getMethods(); ServerServiceDefinition.Builder builder = ServerServiceDefinition.builder(descriptor); methods.forEach(method -> builder.addMethod(ServerMethodDefinition.create(method.getMethodDescriptor(), new PerCallServerCallHandler(factory)))); return builder.build(); }
/** * Build the proxy handler registry. * * @return registry builder */ public ProxyHandlerRegistry build() { checkNotNull(finder, "No channel finder defined"); ProxyServerCallHandler<InputStream, InputStream> proxyHandler = new ProxyServerCallHandler<>(finder, CallOptions.DEFAULT); Map<String, ServerMethodDefinition<?, ?>> methods = new HashMap<>(); for (ServerServiceDefinition service : services.values()) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { String methodName = method.getMethodDescriptor().getFullMethodName(); methods.put( methodName, createProxyServerMethodDefinition( method.getMethodDescriptor(), proxyHandler) ); } } return new ProxyHandlerRegistry( Collections.unmodifiableMap(methods)); }
static <OReqT, ORespT, WReqT, WRespT> ServerMethodDefinition<WReqT, WRespT> wrapMethod( final ServerMethodDefinition<OReqT, ORespT> definition, final MethodDescriptor<WReqT, WRespT> wrappedMethod) { final ServerCallHandler<WReqT, WRespT> wrappedHandler = wrapHandler( definition.getServerCallHandler(), definition.getMethodDescriptor(), wrappedMethod); return ServerMethodDefinition.create(wrappedMethod, wrappedHandler); }
static <OReqT, ORespT, WReqT, WRespT> ServerMethodDefinition<WReqT, WRespT> wrapMethod( final ServerMethodDefinition<OReqT, ORespT> definition, final MethodDescriptor<WReqT, WRespT> wrappedMethod) { final ServerCallHandler<WReqT, WRespT> wrappedHandler = wrapHandler( definition.getServerCallHandler(), definition.getMethodDescriptor(), wrappedMethod); return ServerMethodDefinition.create(wrappedMethod, wrappedHandler); }
/** Add a method to be supported by the service. */ public <ReqT, RespT> Builder addMethod(ServerMethodDefinition<ReqT, RespT> def) { MethodDescriptor<ReqT, RespT> method = def.getMethodDescriptor(); checkArgument( serviceName.equals(MethodDescriptor.extractFullServiceName(method.getFullMethodName())), "Method name should be prefixed with service name and separated with '/'. " + "Expected service name: '%s'. Actual fully qualifed method name: '%s'.", serviceName, method.getFullMethodName()); String name = method.getFullMethodName(); checkState(!methods.containsKey(name), "Method by same name already registered: %s", name); methods.put(name, def); return this; }
HandlerRegistry build() { final ImmutableMap.Builder<String, ServerMethodDefinition<?, ?>> mapBuilder = ImmutableMap.builder(); for (ServerServiceDefinition service : services.values()) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { mapBuilder.put(method.getMethodDescriptor().getFullMethodName(), method); } } return new HandlerRegistry(ImmutableList.copyOf(services.values()), mapBuilder.build()); } }
/** * Wraps a {@link ServerMethodDefinition} such that it performs binary logging if needed. */ final <ReqT, RespT> ServerMethodDefinition<?, ?> wrapMethodDefinition( ServerMethodDefinition<ReqT, RespT> oMethodDef) { ServerInterceptor binlogInterceptor = getServerInterceptor(oMethodDef.getMethodDescriptor().getFullMethodName()); if (binlogInterceptor == null) { return oMethodDef; } MethodDescriptor<InputStream, InputStream> binMethod = BinaryLogProvider.toInputStreamMethod(oMethodDef.getMethodDescriptor()); ServerMethodDefinition<InputStream, InputStream> binDef = InternalServerInterceptors .wrapMethod(oMethodDef, binMethod); ServerCallHandler<InputStream, InputStream> binlogHandler = InternalServerInterceptors .interceptCallHandler(binlogInterceptor, binDef.getServerCallHandler()); return ServerMethodDefinition.create(binMethod, binlogHandler); }
private <WReqT, WRespT> ServerStreamListener startWrappedCall( String fullMethodName, ServerMethodDefinition<WReqT, WRespT> methodDef, ServerStream stream, Metadata headers, Context.CancellableContext context) { ServerCallImpl<WReqT, WRespT> call = new ServerCallImpl<WReqT, WRespT>( stream, methodDef.getMethodDescriptor(), headers, context, decompressorRegistry, compressorRegistry, serverCallTracer); ServerCall.Listener<WReqT> listener = methodDef.getServerCallHandler().startCall(call, headers); if (listener == null) { throw new NullPointerException( "startCall() returned a null listener for method " + fullMethodName); } return call.newServerStreamListener(listener); } }
private <WReqT, WRespT> ServerStreamListener startWrappedCall( String fullMethodName, ServerMethodDefinition<WReqT, WRespT> methodDef, ServerStream stream, Metadata headers, Context.CancellableContext context) { ServerCallImpl<WReqT, WRespT> call = new ServerCallImpl<WReqT, WRespT>( stream, methodDef.getMethodDescriptor(), headers, context, decompressorRegistry, compressorRegistry, serverCallTracer); ServerCall.Listener<WReqT> listener = methodDef.getServerCallHandler().startCall(call, headers); if (listener == null) { throw new NullPointerException( "startCall() returned a null listener for method " + fullMethodName); } return call.newServerStreamListener(listener); } }
final ArmeriaServerCall<I, O> call = new ArmeriaServerCall<>( headers, methodDef.getMethodDescriptor(), compressorRegistry, decompressorRegistry,
/** Never returns {@code null}. */ private <ReqT, RespT> ServerStreamListener startCall(ServerStream stream, String fullMethodName, ServerMethodDefinition<ReqT, RespT> methodDef, Metadata headers, Context.CancellableContext context, StatsTraceContext statsTraceCtx) { // TODO(ejona86): should we update fullMethodName to have the canonical path of the method? statsTraceCtx.serverCallStarted( new ServerCallInfoImpl<ReqT, RespT>( methodDef.getMethodDescriptor(), // notify with original method descriptor stream.getAttributes(), stream.getAuthority())); ServerCallHandler<ReqT, RespT> handler = methodDef.getServerCallHandler(); for (ServerInterceptor interceptor : interceptors) { handler = InternalServerInterceptors.interceptCallHandler(interceptor, handler); } ServerMethodDefinition<ReqT, RespT> interceptedDef = methodDef.withServerCallHandler(handler); ServerMethodDefinition<?, ?> wMethodDef = binlog == null ? interceptedDef : binlog.wrapMethodDefinition(interceptedDef); return startWrappedCall(fullMethodName, wMethodDef, stream, headers, context); }
/** Never returns {@code null}. */ private <ReqT, RespT> ServerStreamListener startCall(ServerStream stream, String fullMethodName, ServerMethodDefinition<ReqT, RespT> methodDef, Metadata headers, Context.CancellableContext context, StatsTraceContext statsTraceCtx) { // TODO(ejona86): should we update fullMethodName to have the canonical path of the method? statsTraceCtx.serverCallStarted( new ServerCallInfoImpl<ReqT, RespT>( methodDef.getMethodDescriptor(), // notify with original method descriptor stream.getAttributes(), stream.getAuthority())); ServerCallHandler<ReqT, RespT> handler = methodDef.getServerCallHandler(); for (ServerInterceptor interceptor : interceptors) { handler = InternalServerInterceptors.interceptCallHandler(interceptor, handler); } ServerMethodDefinition<ReqT, RespT> interceptedDef = methodDef.withServerCallHandler(handler); ServerMethodDefinition<?, ?> wMethodDef = binlogProvider == null ? interceptedDef : binlogProvider.wrapMethodDefinition(interceptedDef); return startWrappedCall(fullMethodName, wMethodDef, stream, headers, context); }