Nesta publicação do blog, revelarei alguns dos recursos menos conhecidos da biblioteca cliente libcouchbase. Ele descreve as ferramentas da libcouchbase que estão coletivamente sob cbco comando originalmente escrito por Trond Norbye. Você provavelmente não os usará para escrever suas ligações de alto nível ou implementar seu aplicativo, mas eles ainda são úteis de várias maneiras. Eles são um ótimo exemplo de uso da libcouchbase, são úteis como ferramentas de diagnóstico ou depuração ou você pode até mesmo usá-los em seus scripts.
Como há uma versão atual (1.0) da libcouchbase e uma prévia para desenvolvedores da próxima versão (1.1) que oferece suporte à nova funcionalidade do Couchbase Server 2.0, descreverei a prévia da 1.1 e observarei quais recursos não estão acessíveis na versão atual.
[Editar] Este blog foi escrito para a nova funcionalidade das ferramentas enviadas com a libcouchbase 2.0. A versão mais recente agora é a 3.0, e você pode descobrir como instalá-la em https://docs.couchbase.com/c-sdk/3.0/hello-world/start-using-sdk.html e leia um pouco mais sobre a versão mais recente das ferramentas em https://docs.couchbase.com/c-sdk/3.0/hello-world/cbc.html#command-line
Após a instalação, você terá o comando cbc disponível e poderá verificar a versão instalada:
cbc construído a partir de: libcouchbase 1.1.0dp8
usando libcouchbase: 1.1.0dp8
Observe que, no momento em que este texto foi escrito, a versão lançada atualmente é a 1.1.0dp6, mas os pacotes para as compilações mais recentes estão disponíveis no repositório de snapshot. Mais informações sobre isso no final.
Você pode imprimir todos os subcomandos possíveis usando o comando ajuda
subcomando:
Uso: comando cbc [opções]
comando pode ser:
help mostra essa ajuda ou para um determinado comando
chaves de saída do cat para stdout
cp armazenar arquivos no cluster
criar arquivos de armazenamento com opções
remover todas as chaves do cluster
hash hash key(s) e imprime informações úteis
chaves de bloqueio
desbloquear chaves de desbloqueio
rm remover chaves
estatísticas mostrar estatísticas
verificar verificar o conteúdo no cache com arquivos
version show version
Use 'cbc command -help' para mostrar as opções
O comando "help" aceita o nome do comando como um argumento e mostra a descrição resumida do comando e todas as opções que o comando pode processar, por exemplo cbc ajuda cp
.
Esse comando foi adicionado recentemente e pode não estar disponível em todas as versões. Ainda é possível obter a lista de comandos em qualquer versão que você tenha instalado: basta executar cbc
sem argumentos e "cbc cp -help", respectivamente.
Todos os comandos podem ser acessados como subcomandos ou links simbólicos para o binário principal, por exemplo, "cbc cp" e "cbc-cp". A última forma é útil em scripts de shell.
Conexão com o cluster
Todos os comandos aceitam um conjunto comum de argumentos, como --Hospedagem
, --bucket
, --usuário
, -senha
e --timeout
. Esses argumentos devem ser especificados em todos os comandos que exigem interação com clusters que precisam de opções especiais de conexão, como nome do bucket ou autorização.
A opção --enable-timings
definirá os tempos de registro do make cbc para todas as operações e os enviará para STDERR.
Por padrão, ele usará localhost
para --Hospedagem
, padrão
para --bucket
, nada para --usuário
/-senha
e, finalmente 2500000
microssegundos para --timeout
.
Se suas configurações de conexão não forem as padrão, mas você ainda não gosta de digitá-las todas as vezes, temos uma solução: basta colocar todas as configurações em um arquivo em $HOME/.cbcrc
e todas as ferramentas da libcouchbase usarão isso antes de iniciar. O formato é bastante simples: todas as linhas vazias e as linhas que começam com #
são ignorados. Este é o meu exemplo de configuração:
uri=example.com:8091,example.org:8091
usuário=Administrador
senha=s3cr3t
bucket=meubucket
tempo limite=3000000
Há também uma maneira de substituir o .cbcrc
mas respeitam os argumentos da linha de comando: definir variáveis de ambiente. As ferramentas cbc do Couchbase examinam as seguintes variáveis na inicialização: COUCHBASE_CLUSTER_URI
, COUCHBASE_CLUSTER_USER
, COUCHBASE_CLUSTER_PASSWORD
, COUCHBASE_CLUSTER_BUCKET
.
cbc-cp
cbc-cp: Copiar arquivo(s) para o cluster
$ cbc help cp
Uso: cp [opções] [argumentos]
-? Imprimir este texto de ajuda (-help)
-h val Nome do host ao qual se conectar (-host)
-b val Bucket a ser usado (-bucket)
-u val Nome de usuário para a porta restante (-user)
-P val senha para a porta restante (-password)
-T Habilitar os tempos de comando (-enable-timings)
-t val Especificar o valor do tempo limite (-timeout)
Esse comando copia o conteúdo do arquivo para o cluster fornecido usando o nome do arquivo como chave. Por exemplo, o comando a seguir armazenará o conteúdo do arquivo JSON buzz.json
:
Armazenado "buzz.json" CAS:66f09fa920d0000
Após o armazenamento, você verá o status no erro padrão. O comando cbc-cp
usa o nome do arquivo como o nome da chave e o conteúdo do arquivo como um valor. É possível armazenar vários arquivos rapidamente, já que o comando canalizará as operações:
Armazenado "buzz.json" CAS:6c55a2eae30d0000
Armazenado "barbie.json" CAS:bdf8a2eae30d0000
O comando também pode ler a lista de arquivos do STDIN. Por exemplo, você pode alimentar a saída do comando ls
comando para cbc cp
(observe que os nomes de arquivos devem ser separados por um caractere de nova linha):
Armazenado "barbie.json" CAS:8eb154e522020000
Armazenado "buzz.json" CAS:95a67ee922020000
cbc-create
: Criar chaves com opções específicas
$ cbc help create
Uso: create [opções] [argumentos]
-? Imprimir este texto de ajuda (-help)
-h val Nome do host ao qual se conectar (-host)
-b val Bucket a ser usado (-bucket)
-u val Nome de usuário para a porta restante (-user)
-P val senha para a porta restante (-password)
-T Habilitar os tempos de comando (-enable-timings)
-t val Especificar o valor do tempo limite (-timeout)
-f val Sinalizador para o novo objeto (-flag)
-e val Tempo de expiração do novo objeto (-exptime)
-a Falha se o objeto existir (-add)
Esse comando cria o item no cluster com as opções fornecidas, como o tempo de expiração (--exptime
), sinalizadores (--flag
) ou forçá-lo a usar o comando ADD (--adicionar
), que falhará se a chave já estiver no cluster. O comando opera somente em uma única chave e, em seguida, aguarda o valor em STDIN (digite um ^D
para inserir o EOF necessário). Por exemplo:
Olá, Couchbase!
"hello" armazenado CAS:b79b729f70070000
cbc-gato
: Imprimir chaves para STDOUT
$ cbc help cat
Uso: cat [opções] [argumentos]
-? Imprimir este texto de ajuda (-help)
-h val Nome do host ao qual se conectar (-host)
-b val Bucket a ser usado (-bucket)
-u val Nome de usuário para a porta restante (-user)
-P val senha para a porta restante (-password)
-T Habilitar os tempos de comando (-enable-timings)
-t val Especificar o valor do tempo limite (-timeout)
Esse comando simplesmente grava o conteúdo de todas as chaves no STDOUT, como o comando Unix cat(1)
. Além disso, ele grava informações úteis no STDERR. Por exemplo, vamos gerar a chave Olá
definido acima:
"hello" Tamanho 18 Flags:deadbeef CAS:853dcf95bc070000
Olá, Couchbase!
cbc-rm: Remover chave
$ cbc help rm
Uso: rm [opções] [argumentos]
-? Imprimir este texto de ajuda (-help)
-h val Nome do host ao qual se conectar (-host)
-b val Bucket a ser usado (-bucket)
-u val Nome de usuário para a porta restante (-user)
-P val senha para a porta restante (-password)
-T Habilitar os tempos de comando (-enable-timings)
-t val Especificar o valor do tempo limite (-timeout)
Esse comando remove uma determinada chave do cluster:
Removido "hello"
cbc-hash
: Executar cálculo de hash
$ cbc help hash
Uso: hash [opções] [argumentos]
-? Imprimir este texto de ajuda (-help)
-h val Nome do host ao qual se conectar (-host)
-b val Bucket a ser usado (-bucket)
-u val Nome de usuário para a porta restante (-user)
-P val senha para a porta restante (-password)
-T Habilitar os tempos de comando (-enable-timings)
-t val Especificar o valor do tempo limite (-timeout)
Esse comando calcula o valor de hash da chave e localiza o servidor que deve armazená-la, usando a configuração atual do cluster. Ele também grava informações úteis sobre qual vbucket é responsável pela chave, qual é o endereço desse vbucket, o ponto de extremidade para solicitações de visualizações do Couchbase e a lista de nós de réplica.
"foo" vBucket: 115, Server: "172.16.16.193:12000", Couch API: "http://172.16.16.193:9500/default", Replicas: “127.0.0.1:11210”, “172.16.16.193:12000”, “172.16.16.193:12003”
"bar" vBucket: 767, Server: "172.16.16.193:12009", Couch API: "http://172.16.16.193:9503/default", Replicas: “127.0.0.1:11210”, “172.16.16.193:12000”, “172.16.16.193:12003”
"baz" vBucket: 36, Server: "172.16.16.193:12000", Couch API: "http://172.16.16.193:9500/default", Replicas: “127.0.0.1:11210”, “172.16.16.193:12000”, “172.16.16.193:12003”
Estatísticas da cbc
: Estatísticas do cluster de despejo
$ cbc help stats
Uso: stats [opções] [argumentos]
-? Imprimir este texto de ajuda (-help)
-h val Nome do host ao qual se conectar (-host)
-b val Bucket a ser usado (-bucket)
-u val Nome de usuário para a porta restante (-user)
-P val senha para a porta restante (-password)
-T Habilitar os tempos de comando (-enable-timings)
-t val Especificar o valor do tempo limite (-timeout)
Esse comando retorna tuplas separadas por tabulação das estatísticas do servidor. O primeiro é o nome do host do nó com a porta, depois a chave e o valor da estatística.
Para mostrar um exemplo simples de script, veja como você pode calcular a memória usada em todo o cluster (esse cluster tem 5 nós):
192.168.1.3:12000: 20369582
192.168.1.3:12003: 22086752
192.168.1.3:12006: 21664064
127.0.0.1:11210: 27053336
192.168.1.3:12009: 22086752
total: 113260486
A saída de estatísticas contém não apenas estatísticas do cluster ativo, mas também seus parâmetros de configuração. Você pode obter o tempo máximo e o tempo padrão (em segundos) para bloqueios de chaves (que precisaremos saber em breve):
127.0.0.1:11210 ep_getl_default_timeout 15
127.0.0.1:11210 ep_getl_max_timeout 30
192.168.1.3:12000 ep_getl_default_timeout 15
192.168.1.3:12000 ep_getl_max_timeout 30
192.168.1.3:12003 ep_getl_default_timeout 15
192.168.1.3:12003 ep_getl_max_timeout 30
192.168.1.3:12009 ep_getl_default_timeout 15
192.168.1.3:12009 ep_getl_max_timeout 30
192.168.1.3:12006 ep_getl_default_timeout 15
192.168.1.3:12006 ep_getl_max_timeout 30
cbc-lock
: Chave de bloqueio
$ cbc help lock
Uso: lock [opções] [argumentos]
-? Imprimir este texto de ajuda (-help)
-h val Nome do host ao qual se conectar (-host)
-b val Bucket a ser usado (-bucket)
-u val Nome de usuário para a porta restante (-user)
-P val senha para a porta restante (-password)
-T Habilitar os tempos de comando (-enable-timings)
-t val Especificar o valor do tempo limite (-timeout)
-e val Tempo de expiração do bloqueio (-exptime)
Esse comando bloqueia as chaves especificadas, fazendo com que todas as solicitações de mutação gerem um erro. Ele permite que você especifique o tempo de expiração ("-exptime"). Você pode inspecionar os tempos limite máximo e padrão do cluster com o comando "cbc-stats", conforme descrito acima.
Hi
Armazenado "hello" CAS:57fa8b8c01020000
$ cbc rm hello
Falha ao remover "hello":
Argumentos inválidos
$ sleep 20
$ cbc rm hello
Removido "hello"
O cbc-lock
permite várias teclas.
cbc-desbloqueio
: Chave de desbloqueio
$ cbc ajuda a desbloquear
Uso: unlock [opções] [argumentos]
-? Imprimir este texto de ajuda (-help)
-h val Nome do host ao qual se conectar (-host)
-b val Bucket a ser usado (-bucket)
-u val Nome de usuário para a porta restante (-user)
-P val senha para a porta restante (-password)
-T Habilitar os tempos de comando (-enable-timings)
-t val Especificar o valor do tempo limite (-timeout)
Esse comando desbloqueia as chaves fornecidas. Ele aceita pares de valores de chave e CAS. Se eles corresponderem, o servidor libera o bloqueio.
"barbie.json" Tamanho:139 Flags:0 CAS:900ccb8ea2030000
"buzz.json" Tamanho:93 Sinalizadores:0 CAS:e79acb8ea2030000
$ cbc unlock barbie.json 900ccb8ea2030000 buzz.json e79acb8ea2030000
Desbloqueado "barbie.json"
Desbloqueado "buzz.json"
cbc-verify
: Verificar chaves
$ cbc help verify
Uso: verify [opções] [argumentos]
-? Imprimir este texto de ajuda (-help)
-h val Nome do host ao qual se conectar (-host)
-b val Bucket a ser usado (-bucket)
-u val Nome de usuário para a porta restante (-user)
-P val senha para a porta restante (-password)
-T Habilitar os tempos de comando (-enable-timings)
-t val Especificar o valor do tempo limite (-timeout)
Esse comando verifica a consistência das chaves. Ele compara o conteúdo das chaves com os arquivos correspondentes. Se tudo estiver ok, ele apenas retorna o código zero na saída e não imprime nada. Portanto, é mais interessante o caso em que algo está errado. Vamos remover buzz.json
e adicionar algo a barbie.json
:
Armazenado "barbie.json" CAS:59c1a52165050000
Armazenado "buzz.json" CAS:e17da62165050000
$ cbc rm buzz.json
Removido "buzz.json"
$ echo "garbage" >> barbie.json
$ cbc verify *.json
Tamanho incorreto para: "barbie.json"
Falha ao obter "buzz.json": Não existe tal chave
$ echo $?
1