arcus에서 명령어를 받는 함수

Dong Wook Lee (Michael)·2021년 1월 6일
0

arcus에서 명령어를 받는 부분은 아래 그림에 나와 있다.

위의 그림은 명령어를 입력 받는 상태를 나타내는 상태이다.
각각의 상태 값을 가지며 아래와 같은 과정을 거치게 된다.

여기서 우리가 중점적으로 살펴봐야할 함수는 process_command 함수인데, 중요한 이유는 연산의 거의 대부분의 분기가 여기서 이루어지게 되기 때문이다. 이 함수에 대한 자세한 내용은 아래에서 다루겠다.

process_command() 함수는 try_read_command() 함수에서 호출하게 되며 위의 함수는 또 conn_parse_cmd() 함수에서 호출하는 것을 확인할 수 있다.

내가 중점적으로 살펴보려는 BOP 명령어는 process_bop_command() 함수에서 처리하고 있는 모습을 살펴 볼 수 있다. 위에서 말한 함수에서는 인자를 받고 있는데, 첫 번째 인자로 메모리가 할당된 conn 객체의 구조체를 받고 있다.
그리고 명령어를 받는 함수에서는 strcmp 함수를 굉장히 빈번하게 사용하고 있는 것을 확인할 수 있다. 아래의 그림에서는 subcommand와 "insert", "upsert" 명령어인지 아닌지 확인하는 부분에서, strcmp 함수를 사용한 것을 확인할 수 있다.

strcmp는 c언어 표준 함수로써 굉장히 자주 사용하고 있는 것을 확인할 수 있다.
따라서 나중에 어떻게 구현이 되어 있는지 살펴보면 좋을 것 같다.

CLIENT_ERROR bad command line format 에러

위의 사진에서 조건문을 살펴보면, nkey > KEY_MAX_LENGTH 보다 클 경우에 에러를 반환한다는 것을 확인할 수 있다.

여기에서 내가 이해가 잘되지 않는 부분은, nkey가 무슨 역할을 하는 것이길래, KEY_MAX_LENGTH를 초과하면 에러가 발생하는지 궁금했다.

우선 문서를 살펴보아서 CLIENT_ERROR bad command line이 무엇인지 부터 알아보았다.

조사를 해보았더니, protocol syntax 를 틀렸다는 것이다. protocol syntax 를 틀렸다는 것이 정확이 어떤 의미를 가지는지 궁금하였다.

이는 다음시간에 알아보도록 하겠다.

profile
오픈소스 메인테이너를 꿈꾸는 개발자!

0개의 댓글