Closed whchoi83 closed 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 로그를 출력하는 곳도 일관성을 갖도록 수정하거나, 하나의 양식으로 출력하도록 수정이 필요한 것으로 보입니다.
본 이슈는 naver arcus-java-client Operation Timeout 로그에 TimeUnit 추가 로 이동했습니다. 본 이슈는 close 합니다.
operation timeout 발생 시 아래와 같이 로그가 출력되고 있습니다.
위에서 3이라는 timeout 값이 어떤 단위를 사용하고 있는지 전혀 알 수 없는 상태입니다. 로그에서 TimeUnit 값을 함께 출력하는 것이 분석에 도움이 될 것 같습니다.