Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gw 의 slot state 가 이상한 값으로 설정되는 경우 #183

Open
lynix94 opened this issue Dec 30, 2019 · 0 comments
Open

gw 의 slot state 가 이상한 값으로 설정되는 경우 #183

lynix94 opened this issue Dec 30, 2019 · 0 comments

Comments

@lynix94
Copy link
Contributor

lynix94 commented Dec 30, 2019

live migration 테스트 중 delay 명령이
-ERR Slot is out of range or can't be blocked 에러를 나는 경우가 발생하였다.

해당 에러는 check_delay_cmd 에서 발생하는데, slot from, to 가 잘못되거나, conf->slot_state 가 NORMAL 이 아닌경우 발생한다.

확인결과 아래의 값과 같이 slot_state[0] 의 값이 0, 1, 2 (NORMAL, BLOCKING, BLOCKED) 가 아니라 garbage 값으로 되어 있으며 다른 slot_state 들도 마찬가지 이다.

이로 인해 delay 명령이 실패했다.

live migration 시험 중에는 cluster_info, pgs_add, pg_add, delay, redirect 명령을 사용하였으며 이 명령들이 무작위로 실행되던 중 아래와 같은 현상이 나타났다. (아래 현상이 나타나기 전에는 정상동작했음)

개발 중 위 명령들이 무작위로 실행되는 도중 slot_state 가 침범되는 상황이 발생한 것으로 보인다.

   │135     check_delay_cmd (cluster_conf * conf, long long slot_from, long long slot_to)                           │
   │136     {                                                                                                       │
   │137       block_range *range;                                                                                   │
   │138       int i;                                                                                                │
B+ │139       if (slot_from < 0 || slot_to >= conf->nslot || slot_from > slot_to)                                   │
   │140         {                                                                                                   │
   │141           return ERR;                                                                                       │
   │142         }                                                                                                   │
   │143       for (i = slot_from; i <= slot_to; i++)                                                                │
   │144         {                                                                                                   │
  >│145           if (conf->slot_state[i] != SLOT_STATE_NORMAL)                                                     │
   │146             {                                                                                               │
   │147               return ERR;                                                                                   │
   │148             }                                                                                               │
   │149         }                         
(gdb) p	conf->slot_state[0]   
$23 = 971088048
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant