naver / arcus-java-client

ARCUS Java client
Apache License 2.0
50 stars 47 forks source link

Operation I/O 도중 Exception 발생시 노드 정보 출력 #366

Closed hjyun328 closed 2 years ago

hjyun328 commented 3 years ago

operation I/O 도중 Exception이 발생될 경우, 메시지에 노드 정보가 포함되지 않아 logging level을 warn으로 설정하지 않으면 원인 파악이 어렵다.

TimeoutException 외의 다른 Exception이 발생하더라도 Exception 메시지에 노드 정보를 출력하여 어떤 노드에서 이슈가 발생하였는지 파악할 수 있도록 변경한다.

아래는 operation을 read하는 시점에서 연결이 끊어졌을 때 출력되는 메시지이다.

2021-07-15 13:53:37.235 WARN net.spy.memcached.MemcachedConnection:  Reconnecting due to exception on {QA name=ArcusClient(1-1) for test /1.2.3.4:11211, #Rops=0, #Wops=0, #iq=3, topRop=null, topWop=null, toWrite=0, interested=1}
java.io.IOException: Disconnected unexpected, will reconnect.
    at net.spy.memcached.MemcachedConnection.handleReads(MemcachedConnection.java:817)
    at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:725)
    at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:246)
    at net.spy.memcached.MemcachedClient.run(MemcachedClient.java:2217)
jhpark816 commented 3 years ago

@hjyun328 위에 출력된 메세지를 보면, node 정보가 포함되어 있습니다. 현재는 log level이 warning 경우만 출력되므로, info인 경우도 위의 메세지가 출력되게 수정하자는 것인가요 ?

hjyun328 commented 3 years ago

@jhpark816 네. 맞습니다.

SEONGMINY commented 3 years ago

@hjyun328 @jhpark816 log level 을 수정하는 것이 아닌 exception 메시지에 노드 정보를 출력해야할 것 같습니다.

hjyun328 commented 3 years ago

@SEONGMINY @jhpark816 제가 잠시 헷갈렸네요. 죄송합니다. 제 의도는 로그 메시지를 info level로 설정했을 때도 출력하자는 것이 아닌,

exception message에 노드 정보를 추가하자는 것입니다. 어플리케이션에서 log level을 error로 설정하면, exception이 발생될 때 warn level의 로그는 출력되지 않으므로, 어떤 노드에 원인이 존재하는지 알 수가 없기 떄문입니다.

SEONGMINY commented 3 years ago

@jhpark816 형준 전임과 논의한 결과 3가지 방안이나왔습니다.

위 3가지 방안 중 어떠한 방안으로 진행하면 좋을지 조언 여쭙고 싶습니다.

jhpark816 commented 2 years ago

@SEONGMINY @hjyun328 어떻게 처리할 것인지 논의하여 결정하고 알려주세요.

hjyun328 commented 2 years ago

@jhpark816 @SEONGMINY

logger xml에서 java class 별로 log level을 설정할 수 있었네요. 노드 정보 출력을 위해 응용에서 전체 log level을 warn으로 바꾸지 않고, MemcachedConnection 쪽만 warn으로 설정하여 해결해도 될 것 같습니다.

<!-- 전체 로그 레벨 -->
<Root level="ERROR"> 
    <AppenderRef ref="console" />
</Root>

<!-- MemcachedConnection 로그 레벨 -->
<Logger name="net.spy.memcached.MemcachedConnection" level="WARN" additivity="false">
    <AppenderRef ref="console" />
</Logger>
jhpark816 commented 2 years ago

@hjyun328 @SEONGMINY

hjyun328 commented 2 years ago

@jhpark816

네. 응용에서 설정해주어야 합니다. 라이브러리에서 강제할 수 있는 방법은 없습니다.

jhpark816 commented 2 years ago

@hjyun328 logger 설정으로 해결하는 것으로 정하고, 이슈와 PR을 close 바랍니다.

hjyun328 commented 2 years ago

https://github.com/naver/arcus-java-client/pull/367 PR 클로즈 하였고, 이슈 클로즈하겠습니다.