naver / arcus-java-client

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

FIX: allNodes concurrency ploblem. #838

Closed brido4125 closed 2 weeks ago

brido4125 commented 2 weeks ago

🔗 Related Issue

N / A

⌨️ What I did

brocast 연산 호출 시 locator의 getAllNodes가 호출된다. brocast의 getAllNodes()와 캐시 리스트 update가 함께 발생하면 하나의 ArrayList에 대해 read / write가 동시에 발생하여 문제가 발생한다.

이를 방지하기 위해 allNodes 인스턴스의 데이터 타입을 CopyOnWriteArrayList로 변경하였다.

uhm0311 commented 2 weeks ago

지난번에도 비슷한 PR이 있지 않았나요?

brido4125 commented 2 weeks ago

@uhm0311

아래 PR이긴 한데 현재 구현이 locator에 영향을 주지 않아 더 간결하다고 생각됩니다.

https://github.com/naver/arcus-java-client/pull/769 (delay된 이유가 locator에 영향을 많이 주는 구현이라 delay 시켰었네요) 본 PR 머지되면 위에도 close 하겠습니다

uhm0311 commented 2 weeks ago

저는 CopyOnWriteArrayList를 사용하는 것보단 과거 PR처럼 Replace 방식을 사용하는 것이 더 나아 보입니다.

brido4125 commented 2 weeks ago

close하고 이미 생성된 PR의 replace 방식을 사용하겠습니다.