1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.linecorp.centraldogma.server.internal.thrift;
18
19 import java.util.List;
20
21 import com.linecorp.armeria.common.RpcRequest;
22 import com.linecorp.armeria.common.RpcResponse;
23 import com.linecorp.armeria.common.util.TimeoutMode;
24 import com.linecorp.armeria.server.RpcService;
25 import com.linecorp.armeria.server.ServiceRequestContext;
26 import com.linecorp.armeria.server.SimpleDecoratingRpcService;
27 import com.linecorp.centraldogma.internal.api.v1.WatchTimeout;
28
29 public final class CentralDogmaTimeoutScheduler extends SimpleDecoratingRpcService {
30
31 public CentralDogmaTimeoutScheduler(RpcService delegate) {
32 super(delegate);
33 }
34
35 @Override
36 public RpcResponse serve(ServiceRequestContext ctx, RpcRequest req) throws Exception {
37 if (ctx.requestTimeoutMillis() > 0) {
38 final String method = req.method();
39 if ("watchFile".equals(method) || "watchRepository".equals(method)) {
40 final List<Object> params = req.params();
41 final long timeout = (Long) params.get(params.size() - 1);
42 if (timeout > 0) {
43 ctx.setRequestTimeoutMillis(
44 TimeoutMode.EXTEND,
45 WatchTimeout.availableTimeout(timeout, ctx.requestTimeoutMillis()));
46 }
47 }
48 }
49
50 return unwrap().serve(ctx, req);
51 }
52 }