Skip to content

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

@lynix94

Description

@lynix94

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions