arcus-memcached icon indicating copy to clipboard operation
arcus-memcached copied to clipboard

bkey_range, eflag_filter 기능의 모듈화 작업.

Open jhpark816 opened this issue 4 years ago • 4 comments

bkey_range, eflag_filter 기능은 아래 2 부분에서 함께 이용된다.

  • arcus server core 부분
  • arcus server engine 부분

현재의 문제점

  • bkey_range, eflag_filter를 다루는 코드를 필요한 곳에서 제각각 만들어 사용하고 있음.
  • 따라서, 코드 관리 부담이 커지고 실수 우려가 있음.

개선할 부분

  • 구조체 정의와 관련 로직들을 별도의 파일로 관리하면서
  • 공통으로 사용할 로직을 별도의 함수로 제공

jhpark816 avatar Mar 13 '20 11:03 jhpark816

@jhpark816 core에서 btree 관련한 함수들만 보면 아래와 같은데요.

 get_bkey_from_str
 get_eflag_from_str
 get_bkey_range_from_str
 get_position_range_from_str
 get_compare_op_from_str
 get_bitwise_op_from_str
 get_efilter_from_tokens

위 함수들은 모두 input string을 파싱하기 위해서 사용하는 함수들이기 때문에 engine에서 사용하는 코드들과 함께 관리할 필요가 없을 것 같습니다. 다른 부분들에서도 제 생각에는 크게 함께 관리해야할 필요성을 느끼지 못하고 있는데요. 두 부분에서 같이 관리해야하는 코드의 예시로 어떤 부분이 있을지 알려주시면 판단하기 좋을 것 같습니다.

minkikim89 avatar Mar 19 '20 08:03 minkikim89

@minkikim89 core 부분에서는 parsing 관련 코드 밖에 없겠네요. 이번에 persistence 코드를 보니 bkey range와 eflag filter 다루는 코드가 있어, items 모듈과 core에서도 유사 코드가 있을 거라 생각한 것인데, core에는 없는 것이네요. engines 쪽에 유사 코드가 있는 지만 확인하고 수정 여부를 결정하죠.

jhpark816 avatar Mar 19 '20 08:03 jhpark816

@jhpark816 cmdlogrec에서 BTREE_REAL_NBKEY 매크로를 똑같이 정의해서 사용하는 것 외에는 같은 로직을 수행하는 부분이 없어보입니다.

#define BTREE_REAL_NBKEY(nbkey) ((nbkey)==0 ? sizeof(uint64_t) : (nbkey))

이 매크로는 items.c에 있기 때문에 참조할 수 없어 재정의하여 사용하고 있습니다.

minkikim89 avatar Mar 19 '20 10:03 minkikim89

@minkikim89 OK. 본 이슈에 관련한 코드를 확인해 본 후, 수정이 필요 없으면 close 하겠습니다.

jhpark816 avatar Mar 19 '20 10:03 jhpark816