@Override public long requestTimeoutMillis() { return delegate().requestTimeoutMillis(); }
@Override public void sendsTimeoutHeader() { final long configuredTimeoutMinutes = 100; final TestServiceGrpc.TestServiceBlockingStub stub = blockingStub.withDeadlineAfter(configuredTimeoutMinutes, TimeUnit.MINUTES); stub.emptyCall(EMPTY); final long transferredTimeoutMinutes = TimeUnit.MILLISECONDS.toMinutes( ctxCapture.get().requestTimeoutMillis()); Assert.assertTrue( "configuredTimeoutMinutes=" + configuredTimeoutMinutes + ", transferredTimeoutMinutes=" + transferredTimeoutMinutes, configuredTimeoutMinutes - transferredTimeoutMinutes >= 0 && configuredTimeoutMinutes - transferredTimeoutMinutes <= 1); }
@Override public RpcResponse serve(ServiceRequestContext ctx, RpcRequest req) throws Exception { ctx.setRequestTimeoutMillis(((Number) req.params().get(0)).longValue() + ctx.requestTimeoutMillis()); return delegate().serve(ctx, req); } }
@Override public RpcResponse serve(ServiceRequestContext ctx, RpcRequest req) throws Exception { if (ctx.requestTimeoutMillis() > 0) { final String method = req.method(); if ("watchFile".equals(method) || "watchRepository".equals(method)) { final List<Object> params = req.params(); final long timeout = (Long) params.get(params.size() - 1); if (timeout > 0) { if (timeout > Long.MAX_VALUE - ctx.requestTimeoutMillis()) { ctx.setRequestTimeoutMillis(0); } else { ctx.setRequestTimeoutMillis(ctx.requestTimeoutMillis() + timeout); } } } } return delegate().serve(ctx, req); } }
@Override public RpcResponse serve(ServiceRequestContext ctx, RpcRequest req) throws Exception { if (ctx.requestTimeoutMillis() > 0) { final String method = req.method(); if ("watchFile".equals(method) || "watchRepository".equals(method)) { final List<Object> params = req.params(); final long timeout = (Long) params.get(params.size() - 1); if (timeout > 0) { ctx.setRequestTimeoutMillis( WatchTimeout.makeReasonable(timeout, ctx.requestTimeoutMillis())); } } } return delegate().serve(ctx, req); } }
@Override public RpcResponse serve(ServiceRequestContext ctx, RpcRequest req) throws Exception { if (ctx.requestTimeoutMillis() > 0) { final String method = req.method(); if ("watchFile".equals(method) || "watchRepository".equals(method)) { final List<Object> params = req.params(); final long timeout = (Long) params.get(params.size() - 1); if (timeout > 0) { ctx.setRequestTimeoutMillis( WatchTimeout.makeReasonable(timeout, ctx.requestTimeoutMillis())); } } } return delegate().serve(ctx, req); } }
/** * Converts the specified {@code request} to {@link Optional} which contains {@link WatchRequest} when * the request has {@link HttpHeaderNames#IF_NONE_MATCH}. {@link Optional#EMPTY} otherwise. */ @Override public Object convertRequest(ServiceRequestContext ctx, AggregatedHttpMessage request, Class<?> expectedResultType) throws Exception { final String ifNoneMatch = request.headers().get(HttpHeaderNames.IF_NONE_MATCH); if (!isNullOrEmpty(ifNoneMatch)) { final Revision lastKnownRevision = new Revision(ifNoneMatch); final String prefer = request.headers().get(HttpHeaderNames.PREFER); final long timeoutMillis; if (!isNullOrEmpty(prefer)) { timeoutMillis = getTimeoutMillis(prefer); } else { timeoutMillis = DEFAULT_TIMEOUT_MILLIS; } // Update timeout according to the watch API specifications. ctx.setRequestTimeoutMillis( WatchTimeout.makeReasonable(timeoutMillis, ctx.requestTimeoutMillis())); return Optional.of(new WatchRequest(lastKnownRevision, timeoutMillis)); } return Optional.empty(); }
/** * Converts the specified {@code request} to {@link Optional} which contains {@link WatchRequest} when * the request has {@link HttpHeaderNames#IF_NONE_MATCH}. {@link Optional#EMPTY} otherwise. */ @Override public Object convertRequest(ServiceRequestContext ctx, AggregatedHttpMessage request, Class<?> expectedResultType) throws Exception { final String ifNoneMatch = request.headers().get(HttpHeaderNames.IF_NONE_MATCH); if (!isNullOrEmpty(ifNoneMatch)) { final Revision lastKnownRevision = new Revision(ifNoneMatch); final String prefer = request.headers().get(HttpHeaderNames.PREFER); final long timeoutMillis; if (!isNullOrEmpty(prefer)) { timeoutMillis = getTimeoutMillis(prefer); } else { timeoutMillis = DEFAULT_TIMEOUT_MILLIS; } // Update timeout according to the watch API specifications. ctx.setRequestTimeoutMillis( WatchTimeout.makeReasonable(timeoutMillis, ctx.requestTimeoutMillis())); return Optional.of(new WatchRequest(lastKnownRevision, timeoutMillis)); } return Optional.empty(); }