gw 의 slot state 가 이상한 값으로 설정되는 경우
lynix94 opened this issue · 0 comments
lynix94 commented
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