Todo aplicativo acabará tendo que lidar com uma exceção - erros de tempo de execução ocorrem inesperadamente e seu aplicativo deve saber como lidar com eles e se recuperar. É sempre bom quando o tratamento de erros é transparente para o usuário final, mas, no mínimo, um bom tratamento de erros deve solucionar o problema, fornecer informações suficientes ao usuário sobre o que fazer em seguida e encerrar o programa de forma elegante. Se você se esforçou muito para escrever seu aplicativo personalizado, por que deixar que um erro de tempo de execução estrague tudo? Este blog explica o que os diferentes códigos de retorno significam nos clientes derivados da libCouchbase (Ruby, PHP, Python, C/C++) e o que seu aplicativo deve fazer quando encontrar um deles.

Os clientes do Couchbase são inteligente. Isso significa que eles são reconhecimento da topologia do cluster - se um nó falhar, o cliente estará ciente disso. Se um novo nó for adicionado ao cluster, o cliente também estará ciente desse novo nó. Em comparação com os clientes memcached, os clientes inteligentes oferecem melhor desempenho e disponibilidade durante as falhas, encaminhando automaticamente as solicitações para o servidor Couchbase correto. Os clientes inteligentes são derivados de libcouchbase (Ruby, Python, Perl, node.js e PHP) ou são escritos em uma linguagem nativa, como Java e .NET. Este blog abordará os códigos de erro retornados pelos clientes da libcouchbase.

Os aplicativos usam APIs de clientes inteligentes para enviar solicitações ao Couchbase. O Couchbase escuta em 4 portos - 11210 (porta direta), 11211 (porta proxy), 8091 (console administrativo) e 8092 (exibições do couchbase). Uma vez conectados, os clientes podem enviar um fluxo de solicitações na mesma conexão com o servidor. As mensagens de solicitação normalmente incluem um cabeçalho binário do memcached de 24 bytes e uma carga útil que é opcional. O comprimento da carga útil é especificado no cabeçalho. As mutações de documentos vão primeiro para o cache gerenciado por objeto e, em seguida, são replicadas e persistidas de forma assíncrona. O Couchbase retorna um sucesso (0) ou uma falha (código de erro diferente de zero) assim que o documento é adicionado ao cache gerenciado por objeto. O código de retorno indica o sucesso ou a falha geral da chamada à API.

É uma boa prática de programação verificar os códigos de erro em seu aplicativo para saber quando tentar novamente a solicitação ou lançar um erro de usuário. A tabela abaixo lista os códigos de erro no Couchbase e sugere o que os clientes devem fazer se encontrarem um erro listado:

Se você estiver usando um cliente derivado da libCouchbase tais como Ruby, Python, Perl, node.js e PHP, a seguir estão alguns dos códigos de erro que você pode ver:

Código de erro recebido

O que isso significa?

O que o cliente deve fazer?

LCB_SUCCESS Operação bem-sucedida Não fazer nada. O Couchbase executou com êxito a solicitação do cliente.
LCB_AUTH_ERROR Falha na autenticação. Nome de usuário ou senha inválidos foram fornecidos Verifique o nome de usuário e a senha fornecidos. Os clientes devem tentar novamente com o nome de usuário e a senha corretos.
LCB_DELTA_BADVAL

 

A operação não pode ser executada com os argumentos solicitados. Verifique os argumentos e a operação que está sendo executada nos argumentos.

Por exemplo: Incrementar um valor não numérico usando o incr ou incrementar por um valor não numérico

LCB_E2BIG O servidor informou que o objeto é muito grande O tamanho máximo da chave no Couchbase é de 250 bytes. O tamanho máximo do documento no Couchbase é de 20 Mb.

 

O cliente deve tentar novamente e usar objetos com tamanhos dentro desses limites.

LCB_EBUSY O servidor está muito ocupado para atender às suas solicitações no momento. Use o backoff no código do seu aplicativo e tente novamente a operação após algum tempo.
LCB_EINTERNAL Há um erro interno na biblioteca. Destrua o contexto de conexão e crie um novo.
LCB_EINVAL Argumentos inválidos especificados Certifique-se de passar os argumentos corretos
LCB_ENOMEM O servidor está sem memória Isso pode ocorrer durante a pressão da memória, quando os documentos na memória ainda não foram transferidos para o disco. Faça um backoff e tente novamente após algum tempo.
LCB_RANGE Intervalo inválido especificado Certifique-se de ter especificado os intervalos adequados
LCB_ETMPFAIL O servidor tentou executar a operação, mas falhou devido a uma restrição temporária Recuar e tentar novamente após algum tempo.
LCB_KEY_EEXISTS A chave já existe (com outro valor CAS) As chaves são exclusivas no Couchbase. Tente outra chave.
LCB_KEY_ENOENT A chave não existe A chave não foi encontrada. Tente procurar outra chave.
LCB_NETWORK_ERROR Ocorreu um problema relacionado à rede Solucione o problema de sua rede e tente novamente.
LCB_NOT_MY_VBUCKET O servidor que recebeu essa solicitação não é mais responsável por esse objeto. Isso acontece durante alterações na topologia do cluster ou no rebalanceamento. O cliente obtém automaticamente um novo mapa de cluster do servidor e fica sabendo para onde deve enviar as solicitações subsequentes.

 

Na libcouchbaseEsse erro não é realmente exposto ao usuário. A biblioteca gerencia automaticamente a reconexão com o servidor correto.

 

Tente novamente a operação após algum tempo.

LCB_NOT_STORED O objeto não foi armazenado no servidor Use o backoff no código do seu aplicativo e tente novamente a operação após algum tempo.
LCB_NOT_SUPPORTED O servidor não é compatível com o comando solicitado. Verifique a solicitação enviada ao servidor.
LCB_UNKNOWN_COMMAND O servidor não sabe qual é o comando. Verifique a solicitação enviada ao servidor.
LCB_UNKNOWN_HOST O servidor não conseguiu resolver o nome de host solicitado Verifique o nome do host especificado.
LCB_PROTOCOL_ERROR Há algo errado no fluxo de dados recebido pelo servidor O conjunto de resultados deve ser descartado e não deve ser usado. O cliente deve tentar novamente a operação.
LCB_ETIMEOUT A operação do servidor atingiu o tempo limite Isso pode ocorrer se um servidor no cluster falhar e o Couchbase ainda tiver que detectar essa falha.

O cliente deve tentar novamente após algum tempo.

LCB_CONNECT_ERROR O cliente não conseguiu se conectar ao servidor solicitado O cliente deve tentar novamente após algum tempo.
LCB_BUCKET_ENOINT O bucket solicitado não existe Verifique se o bucket existe no servidor e tente novamente.
LCB_CLIENT_ENOMEM O cliente ficou sem memória Isso pode ocorrer se os contextos de conexão não forem liberados corretamente no lado do cliente. Destrua o contexto de conexão atual e tente novamente.
LCB_CLIENT_ETMPFAIL O cliente encontrou um erro temporário. O aplicativo pode tentar novamente após algum tempo.
LCB_SERVER_BUG O uso inesperado do protocolo do servidor causou resultados inesperados. O conjunto de resultados deve ser descartado e não deve ser usado.

 

O desenvolvedor deve registrar suas etapas para reproduzir o problema e registrar um bug.

LCB_INVALID_HOST_FORMAT A lista de hosts bootstrap usou um formato inválido/não suportado. Verifique o formato do nome do host usado, corrija-o e tente novamente.
LCB_INVALID_CHAR Caractere inválido usado no componente de caminho de um URL Verifique se o caminho do URL está codificado corretamente.

Depois de receber um código de erro do Couchbase, os aplicativos podem converter esses códigos em uma cadeia de caracteres - conforme mostrado no trecho de código de exemplo abaixo, lcb_strerror() retorna uma cadeia de caracteres com terminação 0 que representa o erro.

        #incluir <libcouchbase/couchbase.h>

        …
        fprintf(saída, "A cadeia de caracteres textual para LCB_SUCCESS é: %sn,
        lcb_strerror(NULL, LCB_SUCCESS));
        …

Por mais confiante que você esteja, não é possível prever todos os problemas que poderá encontrar. Sem um mecanismo para verificar se há erros, você pode pensar que o Couchbase não funciona corretamente. Certifique-se de verificar os códigos de erro em seu aplicativo para saber por que os erros ocorrem. 

Boa sorte na criação de seus aplicativos no Couchbase!

Autor

Postado por Don Pinto, gerente principal de produtos da Couchbase

Don Pinto é gerente de produto principal da Couchbase e atualmente está concentrado no avanço dos recursos do Couchbase Server. Ele é extremamente apaixonado por tecnologia de dados e, no passado, foi autor de vários artigos sobre o Couchbase Server, incluindo blogs técnicos e white papers. Antes de ingressar no Couchbase, Don passou vários anos na IBM, onde ocupou a função de desenvolvedor de software no grupo de gerenciamento de informações DB2 e, mais recentemente, como gerente de programa na equipe do SQL Server na Microsoft. Don tem mestrado em ciência da computação e é bacharel em engenharia da computação pela Universidade de Toronto, no Canadá.

Um comentário

  1. [Em meu artigo anterior do blog, examinamos os erros lançados pelos clientes da libCouchbase, como ruby, python, C e C++. Este blog [...]

Deixar uma resposta