jam2in / arcus-java-client

Arcus Java client
Apache License 2.0
0 stars 0 forks source link

Operation Timeout 로그에 TimeUnit 추가 #42

Closed whchoi83 closed 7 years ago

whchoi83 commented 7 years ago

operation timeout 발생 시 아래와 같이 로그가 출력되고 있습니다.

net.spy.memcached.internal.CheckedOperationTimeoutException: Timed out waiting for operation. >3 - failing node: /10.144.146.17:11211 [READING] [#
Tops=406766 #iq=1 #Wops=0 #Rops=1 #CT=1 #TR=-1]

위에서 3이라는 timeout 값이 어떤 단위를 사용하고 있는지 전혀 알 수 없는 상태입니다. 로그에서 TimeUnit 값을 함께 출력하는 것이 분석에 도움이 될 것 같습니다.

whchoi83 commented 7 years ago

Operation Timeout 메시지는 아래와 같이 각 Future 에서 별도로 생성하고 있습니다.

    public T get(long duration, TimeUnit units)
        throws InterruptedException, TimeoutException, ExecutionException {
        if(!latch.await(duration, units)) {
            // whenever timeout occurs, continuous timeout counter will increase by 1.
            MemcachedConnection.opTimedOut(op);
            throw new CheckedOperationTimeoutException(
                    "Timed out waiting for operation. >" + duration, op);
        } else {

OperationFuture, CollectionFuture, BulkGetFuture 등 Future 객체에서 코드가 위와 같은 형태로 중복되어 있고, 아래와 같이 timeout 값을 출력 하지 않는 경우도 있습니다.

    public Map<String, T> get(long to, TimeUnit unit)
            throws InterruptedException, ExecutionException, TimeoutException {
        Collection<Operation> timedoutOps = new HashSet<Operation>();
        Map<String, T> ret = internalGet(to, unit, timedoutOps);
        if (timedoutOps.size() > 0) {
            this.timeout = true;
            throw new CheckedOperationTimeoutException("Operation timed out.",
                    timedoutOps);
        }
        return ret;

OperationTimeout 로그를 출력하는 곳도 일관성을 갖도록 수정하거나, 하나의 양식으로 출력하도록 수정이 필요한 것으로 보입니다.

whchoi83 commented 7 years ago

본 이슈는 naver arcus-java-client Operation Timeout 로그에 TimeUnit 추가 로 이동했습니다. 본 이슈는 close 합니다.