jam2in / arcus-java-client

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

Migration 기능 추가 #20

Closed whchoi83 closed 7 years ago

whchoi83 commented 8 years ago

Server 의 Migration 동작에 맞춰 client 에 기능을 추가한다. (본 이슈는 Server 의 개발 진척에 따라 점진적으로 이슈의 내용을 아래에 추가/완성해 나가는 것으로 한다.)

whchoi83 commented 8 years ago

@jhpark816 hash slice 의 state 의 용도에 대해서 다시 한 번 설명 부탁드립니다. 코멘트로 간단히 정리해주시면 좋을 것 같습니다.

jhpark816 commented 8 years ago

@whchoi83 현재의 state도 변경될 가능성이 조금 있어요.. 그래서, migration 설계/개발하면서 좀 더 명확해지면, 다시 알려 줄께요..

whchoi83 commented 8 years ago

네. 가능하시면 기간의 여유가 있었으면 좋겠습니다. 기존 TreeMap 으로 관리하고 있는 hash ring 의 형태가 부적합해서 다른 구조로 변경해야 될 것으로 판단됩니다.

추가 코멘트 주실 때까지 개발은 보류하고 있겠습니다.

whchoi83 commented 8 years ago

migration 기능이 추가된 java client 의 경우 cloud_stat znode 가 없으면 어떻게 동작해야 되나요?

기존에 migration 기능이 없는 클라우드에 migration 기능을 추가하는 작업을 생각해보면

  1. cloud_stat znode 생성 및 하위 znode 작업
  2. java-client 교체
  3. 노드 migration 작업 순서로 작업을 하게 될 것 같습니다. 그러면 client 는 시작 시점에 cloud_stat znode 가 존재하지 않는다면 실패 로그를 출력하고 기동하지 않는 것이 맞는 것으로 판단됩니다.
jhpark816 commented 8 years ago

내 생각엔 cloud_stat znode가 있는 경우에만, client 내에서 migration 기능을 enable하는 것이 좋을 것 같습니다. Enterprise edition과 community edition 모두에 동작해야 하기 때문입니다. 어떤가요 ??

Cache_list znode가 없는 경우에는 실패 로그 출력하고 기동하지 않으면 될 것 같습니다. 이는 아예 ARCUS 기본 동작을 수행할 수 없는 상태니까요.. 현재 이렇게 동작하는 지도 궁금합니다.

whchoi83 commented 8 years ago

@jhpark816

네이버와 같이 Enterprise edition 과 community edition 이 모두 한 ZooKeeper 를 통해 동작하는 경우를 고려해보면, 항상 migration 이 enable 되어 동작하게 됩니다. (물론 이렇게 동작해도 community edtion node 와 동작하는 건 문제 없을 것 같습니다.)

cache_list znode 가 없는 경우에 대한 처리는 되어 있지 않고,

if (zk.exists(cacheListZPath + serviceCode, false) != null) {
    getLogger().info("Connecting to Arcus %scluster", arcusReplEnabled ? "replication " : "");
} else {
    getLogger().fatal("Arcus %s cluster not found for %s service.", arcusReplEnabled ? "replication " : "", serviceCode);
    throw new NotExistsServiceCodeException(serviceCode);
}

Service code znode 를 확인하는 과정에서 에러가 발생해 "NotExistsServiceCodeException" 에러를 출력하고 종료합니다.

jhpark816 commented 8 years ago

@whchoi83 아래와 같이 수행하면 될 것 같네요.. 다른 의견 있으면 알려주고요..

whchoi83 commented 7 years ago

migration 기능을 추가하기 위해서 CacheManager 와 CacheMonitor 쪽 코드를 refactoring 하고 있습니다. 기존에 작성된 코드의 의도와 필요성을 파악해가면서 하고 있기 때문에 refactoring 관련 이슈는 코드를 좀 더 수정한 후에 등록하도록 하겠습니다.

whchoi83 commented 7 years ago

본 이슈는 naver repository Migration 기능 추가로 이동했습니다. 본 이슈는 close 합니다.