jam2in / arcus-java-client

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

Wooseok/fix test timeout #12

Closed aiceru closed 8 years ago

aiceru commented 8 years ago
  1. timeout test 를 USE_ZK false 일 때만 실행 (USE_ZK 에 관련없이 동일한 로직이므로)
  2. fake address node 를 이용하여 확실히 timeout 이 발생함을 보장 (random 하게 build 가 성공/실패 하는 것을 방지)
    • 간혹 testIPv6Host() 테스트가 fail되는 경우가 있습니다. 테스트결과가 일관적이지 않아서 검색해보니, travis 자체의 버그인듯 합니다. 우선, 원래의 코드를 그대로 유지하는 방향으로 하고 추후 문제가 발생할 경우 다시 검토하도록 하겠습니다.

Review 부탁드립니다.

jhpark816 commented 8 years ago

훈민님 의견입니다..

11:00 김훈민 / Hoonmin Kim 말씀해주신 ~~SingleClient() 테스트들 쭉 살펴봤는데요 11:01 김훈민 / Hoonmin Kim 정확한 의도는 잘 모르겠지만 아마도 ArcusClientPool, ArcusClient 두 가지를 각각 테스트하려는 의도로 생각됩니다. 11:04 김훈민 / Hoonmin Kim 저 의도가 맞다면 BaseIntegrationTest나 각 테스트 케이스에 ArcusClientPool 객체를 추가하고 ~SingleClient 가 아닌 테스트는 pool로 테스트하는게 맞을 것 같아요

aiceru commented 8 years ago

말씀하신 대로, single client 를 사용하는 경우와 client pool 을 사용하는 경우를 구분하는 것은 큰 의미는 없는 것 같습니다. ~~~UsingSingleClient 테스트를 삭제하였습니다.

테스트 순서도 collection 별로 정렬하여 수정하였습니다.

bulk set 의 경우는 thread 여러개(6개), 1개 를 사용하는 경우로 나누어, testBulkSetTimeout(), testBulkSetTimeoutUsingSingleThread() 의 2가지 테스트 코드로 작성하였습니다.

이외 다른 부분에서의 (timeout 과 관련없는) ~~~UsingSingleThread() 코드의 중복에 대해서는 별도의 PR 로 작업하도록 하겠습니다.

whchoi83 commented 8 years ago

테스트에 사용했던 key 들은 삭제해야 되지 않을까 싶습니다. CI 테스트 경우야 문제가 없지만 local 에서 테스트를 진행하는 경우는 테스트에 사용했던 key 들은 그대로 남아 있습니다. (꼭 이 테스트의 문제가 아니라 테스트 코드의 전체적인 점검이 필요한 상태입니다. teardown 시에 지우는 테스트도 있고 아닌 테스트들도 있는 것 같습니다.)

aiceru commented 8 years ago

이 테스트에서는 key 를 삭제할 필요가 없습니다... 라기보단 삭제를 할 수도 없어요 😞 실제 존재하지 않는 node ("127.0.0.1:64213") 에 request 를 보내고 timeout exception 발생을 확인하는 테스트이기 때문입니다.

teardown 시에 flush 하는 케이스도 있고 아닌 케이스도 있는데, 지금은 그 구분의 이유를 명확히 파악하기가 어렵네요. 똑같은 최상위 base class 라도, 어떤 경우는 shutdown, restart, flush, shutdown 을 하고 있고, 어떤 경우는 또 단순히 shutdown 만 하고 있고 그렇습니다. 아마 코드 형태로 보아 spymemcached -> arcus 로 확장시 테스트 케이스를 작성하면서 필요에 의해 넣은 것 같긴 합니다. 좀 더 코드를 살펴보고 필요하다고 판단될 시 별도의 이슈로 등록하여 진행하도록 하겠습니다.

whchoi83 commented 8 years ago

@aiceru 아. 그렇네요. 바보 같은 착각을 했습니다. 😅

이 외의 테스트는 별도의 이슈로 처리하면 될 것 같습니다.

whchoi83 commented 8 years ago

리뷰 완료했습니다. 최신 develop branch 내용만 반영해주시면 될 것 같습니다.

jhpark816 commented 8 years ago

질문이 있어요

일단, review는 완료했고요.. 3개의 commit으로 구성되어 있는 데, 의미상 하나의 commit으로 merge하는 것이 좋을 것 같아요..

aiceru commented 8 years ago

@jhpark816 명시적으로 operation 을 inputQueue 에서 제거하는 부분은 없지만, 말씀하신 대로 MemcachedClient, MemcachedConnection, MemcachedNode 의 shutdown 과정을 거치면서 큐 자체가 소멸하게 됩니다. Selector 와 SocketChannel 도 모두 close 처리되구요.

commit 은, 이전에 다른 브랜치에서 CI test pass 를 위하여 이 브랜치의 내용을 merge 한 이력이 있어 rebase 시 혼란이 예상됩니다. 커밋 로그를 헷갈리지 않도록 신경써서 정리해 두었으니 이대로 merge 해도 무리 없지 않을까 싶습니다 ^^;;

whchoi83 commented 8 years ago

@aiceru merge 할 때 (conflict 가 아닌 이상) 최신 branch 의 내용이 반영되어야 할 필요가 없네요. 이것도 착각했네요.

jhpark816 commented 8 years ago

commit 관련하여,

aiceru commented 8 years ago

@jhpark816 이전에 민우씨의 map collection 기능추가 브랜치에서 CI test pass 를 위해 merge 한 이력이 있습니다 ^^;;;

jhpark816 commented 8 years ago

@aiceru 그렇다면, 현재 상태로 merge 하세요..

aiceru commented 8 years ago

Fix issue #5