모든 앱은 결국 예기치 않게 발생하는 런타임 오류라는 예외를 처리해야 하며 앱은 오류를 처리하고 복구하는 방법을 알고 있어야 합니다. 오류 처리가 최종 사용자에게 투명하면 좋겠지만, 최소한 좋은 오류 처리는 문제를 해결하고 사용자에게 다음에 수행할 작업에 대한 충분한 정보를 제공한 후 프로그램을 정상적으로 종료할 수 있어야 합니다. 사용자 지정 앱을 작성하는 데 많은 노력을 기울였다면 런타임 오류로 인해 모든 것을 망칠 이유가 없겠죠? 이 블로그에서는 libCouchbase 파생 클라이언트(Ruby, PHP, Python, C/C++)에서 다양한 반환 코드의 의미와 앱에서 반환 코드가 발생했을 때 수행해야 하는 작업에 대해 설명합니다..
카우치베이스 클라이언트는 다음과 같습니다. 스마트. 즉, 다음과 같습니다. 클러스터 토폴로지 인식 - 노드가 실패하면 클라이언트는 이를 인식합니다. 클러스터에 새 노드가 추가되면 클라이언트도 이 새 노드를 인식합니다. 멤캐시드 클라이언트에 비해 스마트 클라이언트는 요청을 올바른 Couchbase 서버로 자동 라우팅하여 장애 발생 시 더 나은 성능과 가용성을 제공합니다. 스마트 클라이언트는 다음에서 파생됩니다. libcouchbase (루비, 파이썬, 펄, node.js 및 PHP) 또는 Java 및 .NET과 같은 모국어로 작성되었습니다. 이 블로그에서는 libcouchbase 클라이언트에서 반환되는 오류 코드를 다룹니다.
애플리케이션은 스마트 클라이언트 API를 사용하여 Couchbase에 요청을 보냅니다. 카우치베이스는 4 포트 - 11210(직접 포트), 11211(프록시 포트), 8091(관리자 콘솔), 8092(카우치베이스 보기). 연결되면 클라이언트는 동일한 연결로 서버에 요청 스트림을 보낼 수 있습니다. 요청 메시지에는 일반적으로 24바이트의 멤캐시된 바이너리 헤더와 선택 사항인 페이로드가 포함됩니다. 페이로드의 길이는 헤더에 지정됩니다. 문서 변경은 먼저 객체 관리 캐시로 이동한 다음 비동기적으로 복제 및 유지됩니다. Couchbase는 문서가 개체 관리형 캐시에 추가되는 즉시 성공(0) 또는 실패(0이 아닌 오류 코드)를 반환합니다. 반환 코드는 API 호출의 전반적인 성공 또는 실패를 나타냅니다.
애플리케이션에서 오류 코드를 확인하여 요청을 다시 시도하거나 사용자 오류를 던질 때를 파악하는 것은 좋은 프로그래밍 관행입니다. 아래 표에는 Couchbase의 오류 코드가 나열되어 있으며 나열된 오류가 발생할 경우 클라이언트가 수행해야 할 작업이 제시되어 있습니다:
libCouchbase에서 파생된 클라이언트를 사용하는 경우 다음과 같은 루비, 파이썬, 펄, node.js 및 PHP에서 표시될 수 있는 오류 코드는 다음과 같습니다:
오류 코드 수신 |
무슨 뜻인가요? |
클라이언트는 어떻게 해야 하나요? |
LCB_SUCCESS | 작업 성공 | 아무것도 하지 않습니다. 카우치베이스가 클라이언트 요청을 성공적으로 실행했습니다. |
LCB_AUTH_ERROR | 인증에 실패했습니다. 잘못된 사용자 이름 또는 비밀번호를 제공했습니다. | 제공된 사용자 아이디와 비밀번호를 확인합니다. 고객은 올바른 사용자 아이디와 비밀번호로 다시 시도해야 합니다. |
LCB_DELTA_BADVAL
|
요청된 인수를 사용하여 작업을 실행할 수 없습니다. | 인자와 인자에 대해 실행되는 연산을 확인합니다.
예를 들어 incr을 사용하여 숫자가 아닌 값을 증가시키거나 숫자가 아닌 값만큼 증가시키기 |
LCB_E2BIG | 서버가 개체가 너무 크다고 보고했습니다. | Couchbase의 최대 키 크기는 250바이트입니다. Couchbase의 최대 문서 크기는 20Mb입니다.
클라이언트는 이 제한 범위 내의 크기를 가진 오브젝트를 다시 시도하고 사용해야 합니다. |
LCB_EBUSY | 서버가 너무 바빠서 지금 요청을 처리할 수 없습니다. | 앱 코드에서 백오프를 사용하고 잠시 후 작업을 다시 시도하세요. |
LCB_EINTERNAL | 라이브러리 내부에 내부 오류가 있습니다. | 연결 컨텍스트를 삭제하고 새 컨텍스트를 만듭니다. |
LCB_EINVAL | 잘못된 인수가 지정되었습니다. | 올바른 인수를 전달했는지 확인하세요. |
LCB_ENOMEM | 서버의 메모리가 부족합니다. | 메모리에 있는 문서가 아직 디스크로 플러시되지 않은 경우 메모리 압박 중에 이 문제가 발생할 수 있습니다. 잠시 후 백오프하고 다시 시도하세요. |
LCB_RANGE | 지정한 범위가 잘못되었습니다. | 적절한 범위를 지정했는지 확인하세요. |
LCB_ETMPFAIL | 서버가 작업을 수행하려고 했지만 일시적인 제약 조건으로 인해 실패했습니다. | 잠시 후 다시 시도하세요. |
LCB_KEY_EXIST | 키가 이미 존재합니다(다른 CAS 값 포함). | 카우치베이스의 키는 고유합니다. 다른 키를 사용해 보세요. |
LCB_KEY_ENOENT | 키가 존재하지 않습니다. | 키를 찾을 수 없습니다. 다른 키를 찾아보세요. |
lcb_network_error | 네트워크 관련 문제가 발생했습니다. | 네트워크 문제를 해결하고 다시 시도하세요. |
lcb_not_my_vbucket | 이 요청을 받은 서버는 더 이상 이 오브젝트에 대한 책임이 없습니다. 이는 클러스터 토폴로지 변경 또는 리밸런싱 중에 발생합니다. | 클라이언트는 서버에서 새 클러스터 맵을 자동으로 가져와서 후속 요청을 보낼 위치를 학습합니다.
라이브러리 카우치베이스에서이 오류는 사용자에게 실제로 노출되지 않습니다. 라이브러리는 올바른 서버에 다시 연결할 수 있도록 자동으로 관리합니다.
잠시 후 작업을 다시 시도하세요. |
LCB_NOT_STORED | 개체가 서버에 저장되지 않았습니다. | 앱 코드에서 백오프를 사용하고 잠시 후 작업을 다시 시도하세요. |
LCB_NOT_지원됨 | 서버가 요청된 명령을 지원하지 않습니다. | 서버로 전송된 요청을 확인합니다. |
LCB_UNKNOWN_COMMAND | 서버는 명령이 무엇인지 알지 못합니다. | 서버로 전송된 요청을 확인합니다. |
LCB_UNKNOWN_HOST | 서버가 요청된 호스트 이름을 확인하지 못했습니다. | 지정된 호스트 이름을 확인합니다. |
LCB_프로토콜_오류 | 서버에서 수신한 데이터 스트림에 문제가 있습니다. | 결과 세트는 폐기하고 사용하지 않아야 합니다. 클라이언트가 작업을 다시 시도해야 합니다. |
LCB_ETIMEOUT | 서버 작업이 시간 초과되었습니다. | 클러스터의 서버에 장애가 발생했지만 Couchbase가 아직 이 장애를 감지하지 못한 경우 이 문제가 발생할 수 있습니다.
클라이언트는 잠시 후 다시 시도해야 합니다. |
lcb_connect_error | 클라이언트가 요청된 서버에 연결하지 못했습니다. | 클라이언트는 잠시 후 다시 시도해야 합니다. |
LCB_BUCKET_ENOINT | 요청한 버킷이 존재하지 않습니다. | 서버에 버킷이 있는지 확인한 후 다시 시도하세요. |
LCB_CLIENT_ENOMEM | 클라이언트의 메모리가 부족합니다. | 클라이언트 측에서 연결 컨텍스트가 제대로 해제되지 않은 경우 이 문제가 발생할 수 있습니다. 현재 연결 컨텍스트를 삭제하고 다시 시도하세요. |
LCB_CLIENT_ETMPFAIL | 클라이언트에서 일시적인 오류가 발생했습니다. | 잠시 후 애플리케이션이 다시 시도할 수 있습니다. |
LCB_SERVER_BUG | 예기치 않은 서버 프로토콜 사용으로 인해 예기치 않은 결과가 발생했습니다. | 결과 세트는 사용하지 말고 폐기해야 합니다.
개발자는 문제를 재현하기 위해 자신의 단계를 기록하고 버그 제출. |
LCB_INVALID_HOST_FORMAT | 부트스트랩 호스트 목록에 유효하지 않거나 지원되지 않는 형식이 사용되었습니다. | 사용된 호스트 이름 형식을 확인하고 수정한 후 다시 시도하세요. |
LCB_INVALID_CHAR | URL의 경로 구성 요소에 잘못된 문자가 사용되었습니다. | URL 경로가 올바르게 인코딩되었는지 확인합니다. |
아래 코드 스니펫 예시에서 볼 수 있듯이, 애플리케이션은 Couchbase에서 오류 코드를 수신한 후 이 코드를 문자열로 변환할 수 있습니다.
#포함 <libcouchbase/카우치베이스.h>
아무리 자신감이 있어도 발생할 수 있는 모든 문제를 예측할 수는 없습니다. 오류를 확인하는 메커니즘이 없으면 Couchbase가 제대로 작동하지 않는다고 생각할 수 있습니다. 오류가 발생하는 이유를 알 수 있도록 앱에서 오류 코드를 확인해야 합니다.
Couchbase에서 앱을 잘 만들어 보세요!
[...] 이전 블로그 글에서는 루비, 파이썬, C 및 C++와 같은 libCouchbase 클라이언트에서 발생하는 오류에 대해 살펴봤습니다. 이 블로그 [...]