En esta entrada del blog, voy a revelar algunas de las características menos conocidas de la biblioteca cliente libcouchbase. Describe las herramientas de libcouchbase que están colectivamente bajo cbcel comando originalmente escrito por Trond Norbye. Probablemente no los utilices para escribir tus bindings de alto nivel o implementar tu aplicación, pero siguen siendo útiles de muchas maneras. Son un gran ejemplo del uso de libcouchbase, son útiles como herramientas de diagnóstico o depuración o incluso puedes usarlas en tus scripts.
Debido a que existe una versión actual (1.0) de libcouchbase y una vista previa para desarrolladores de la próxima versión (1.1) que soporta la nueva funcionalidad que viene en Couchbase Server 2.0, describiré la vista previa 1.1 y señalaré qué características no son accesibles en la versión actual.
[Editar] Este blog fue escrito para la nueva funcionalidad en las herramientas que se envían con libcouchbase 2.0. La última versión es ahora la 3.0, y puedes encontrar información sobre cómo instalarla en https://docs.couchbase.com/c-sdk/3.0/hello-world/start-using-sdk.html y lea un poco más sobre la última versión de las herramientas en https://docs.couchbase.com/c-sdk/3.0/hello-world/cbc.html#command-line
Tras la instalación tendrás disponible el comando cbc y podrás comprobar la versión instalada:
cbc construido a partir de: libcouchbase 1.1.0dp8
usando libcouchbase: 1.1.0dp8
Tenga en cuenta que, en el momento de escribir esto, la versión actual es 1.1.0dp6, pero los paquetes para las versiones más recientes están disponibles a través del repositorio de instantáneas. Más información al final.
Puede imprimir todos los subcomandos posibles con la función ayudasubcomando:
Uso: comando cbc [opciones]
comando puede ser:
help mostrar esta ayuda o para un comando dado
cat salida claves a stdout
cp almacenar archivos en el cluster
crear archivos de almacén con opciones
eliminar todas las claves del clúster
hash clave(s) e imprimir información útil
cerradura cerradura llaves
desbloquear desbloquear llaves
rm quitar llaves
estadísticas mostrar estadísticas
verificar el contenido de la caché con archivos
versión mostrar versión
Utilice 'cbc command -help' para mostrar las opciones
El comando "help" acepta el nombre del comando como argumento y muestra la breve descripción del comando y todas las opciones que el comando puede procesar, p. ej. cbc ayuda cp.
Este comando se ha añadido recientemente y puede que no esté disponible en todas las versiones. Todavía es posible obtener la lista de comandos en cualquier versión que tenga instalada: simplemente ejecute cbcsin argumentos y "cbc cp -help" correspondientemente.
Todos los comandos son accesibles como subcomandos o enlaces simbólicos al binario principal, por ejemplo, "cbc cp" y "cbc-cp". Esta última forma es útil en scripts de shell.
Conexión al clúster
Todos los comandos aceptan un conjunto común de argumentos como --host, --bucket, --usuario, --contraseñay --timeout. Estos argumentos deben especificarse en todos los comandos que requieran interacción con clústeres que necesiten opciones de conexión especiales, como nombre de bucket o autorización.
La opción --enable-timingshará que cbc registre los tiempos de todas las operaciones y los enviará a STDERR.
Por defecto utilizará localhostpara --host, por defectopara --bucketnada para --usuario/--contraseñay por último 2500000microsegundos para --timeout.
Si tu configuración de conexión no es la predeterminada, pero aún así no te gusta escribirla cada vez, tenemos la solución: simplemente pon toda la configuración en un archivo en $HOME/.cbcrcy todas las herramientas libcouchbase lo utilizarán antes de comenzar. El formato es bastante simple: todas las líneas vacías y las que empiezan por #se omiten. Este es mi ejemplo de configuración:
uri=ejemplo.com:8091,ejemplo.org:8091
usuario=Administrador
contraseña=s3cr3t
cubo=mi cubo
tiempo de espera=3000000
También hay una forma de anular la función .cbcrcpero respetan los argumentos de la línea de comandos: establecer variables de entorno. Las herramientas cbc de Couchbase consultan las siguientes variables al iniciarse: COUCHBASE_CLUSTER_URI, COUCHBASE_CLUSTER_USER, COUCHBASE_CLUSTER_PASSWORD, COUCHBASE_CLUSTER_BUCKET.
cbc-cpcbc-cp: Copiar archivo(s) al cluster
$ cbc ayuda cp
Uso: cp [opciones] [argumentos]
-? Imprimir este texto de ayuda (-help)
-h val Nombre de host al que conectarse (-host)
-b val Cubo a utilizar (-bucket)
-u val Nombre de usuario para el puerto de resto (-user)
-P val contraseña para el puerto de resto (-password)
-T Activar temporización de comandos (-enable-timings)
-t val Especificar el valor del tiempo de espera (-timeout)
Este comando copia el contenido de un archivo al cluster dado usando el nombre del archivo como clave. Por ejemplo, el siguiente comando almacenará el contenido del archivo JSON buzz.json:
Almacenado "buzz.json" CAS:66f09fa920d0000
Después de almacenar verá el estado en el error estándar. El comando cbc-cputiliza el nombre del archivo como nombre clave y el contenido del archivo como valor. Es posible almacenar varios archivos rápidamente, ya que el comando canalizará las operaciones:
Almacenado "buzz.json" CAS:6c55a2eae30d0000
Almacenado "barbie.json" CAS:bdf8a2eae30d0000
El comando también puede leer la lista de archivos desde STDIN. Por ejemplo, puede alimentar la salida del comando lscomando para cbc cp(tenga en cuenta que los nombres de archivo deben separarse con un carácter de nueva línea):
Almacenado "barbie.json" CAS:8eb154e522020000
Almacenado "buzz.json" CAS:95a67ee922020000
cbc-crear: Crear claves con opciones específicas
$ cbc ayudar a crear
Uso: crear [opciones] [argumentos]
-? Imprimir este texto de ayuda (-help)
-h val Nombre de host al que conectarse (-host)
-b val Cubo a utilizar (-bucket)
-u val Nombre de usuario para el puerto de resto (-user)
-P val contraseña para el puerto de resto (-password)
-T Activar temporización de comandos (-enable-timings)
-t val Especificar el valor del tiempo de espera (-timeout)
-f val Bandera para el nuevo objeto (-flag)
-e val Tiempo de caducidad del nuevo objeto (-exptime)
-a Falla si el objeto existe (-add)
Este comando crea el elemento en el cluster con las opciones dadas, como el tiempo de expiración (--exptime), banderas (--flag) o forzarlo a utilizar el comando ADD (--añadir) que fallará si la clave ya está en el cluster. El comando opera sobre una sola clave y luego espera el valor en STDIN (escriba a ^Dpara insertar el EOF requerido). Por ejemplo:
¡Hola, Couchbase!
Almacenado "hola" CAS:b79b729f70070000
cbc-gato: Imprimir claves en STDOUT
$ cbc ayuda gato
Uso: cat [opciones] [argumentos]
-? Imprimir este texto de ayuda (-help)
-h val Nombre de host al que conectarse (-host)
-b val Cubo a utilizar (-bucket)
-u val Nombre de usuario para el puerto de resto (-user)
-P val contraseña para el puerto de resto (-password)
-T Activar temporización de comandos (-enable-timings)
-t val Especificar el valor del tiempo de espera (-timeout)
Este comando simplemente escribe el contenido de todas las claves a STDOUT como el comando Unix cat(1). También escribe información útil en STDERR. Por ejemplo, podemos obtener la clave holapuesto arriba:
"hola" Tamaño 18 Banderas:deadbeef CAS:853dcf95bc070000
¡Hola, Couchbase!
cbc-rm: Quitar llave
$ cbc ayuda rm
Uso: rm [opciones] [argumentos]
-? Imprimir este texto de ayuda (-help)
-h val Nombre de host al que conectarse (-host)
-b val Cubo a utilizar (-bucket)
-u val Nombre de usuario para el puerto de resto (-user)
-P val contraseña para el puerto de resto (-password)
-T Activar temporización de comandos (-enable-timings)
-t val Especificar el valor del tiempo de espera (-timeout)
Este comando elimina una clave determinada del clúster:
Eliminado "hola"
cbc-hash: Realizar el cálculo hash
$ cbc ayuda hash
Uso: hash [opciones] [argumentos]
-? Imprimir este texto de ayuda (-help)
-h val Nombre de host al que conectarse (-host)
-b val Cubo a utilizar (-bucket)
-u val Nombre de usuario para el puerto de resto (-user)
-P val contraseña para el puerto de resto (-password)
-T Activar temporización de comandos (-enable-timings)
-t val Especificar el valor del tiempo de espera (-timeout)
Este comando calcula el valor hash de la clave y localiza el servidor que debería almacenarla, usando la configuración actual del cluster. También escribe información útil sobre qué vbucket es responsable de la clave, cuál es la dirección de ese vbucket, el endpoint para peticiones de Couchbase Views y la lista de nodos réplica.
"foo" vBucket: 115, Servidor: "172.16.16.193:12000", Couch API: "https://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, Servidor: "172.16.16.193:12009", Couch API: "https://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, Servidor: "172.16.16.193:12000", Couch API: "https://172.16.16.193:9500/default", Replicas: “127.0.0.1:11210”, “172.16.16.193:12000”, “172.16.16.193:12003”
cbc-stats: Volcado de estadísticas de cluster
$ cbc ayuda estadísticas
Uso: stats [opciones] [argumentos]
-? Imprimir este texto de ayuda (-help)
-h val Nombre de host al que conectarse (-host)
-b val Cubo a utilizar (-bucket)
-u val Nombre de usuario para el puerto de resto (-user)
-P val contraseña para el puerto de resto (-password)
-T Activar temporización de comandos (-enable-timings)
-t val Especificar el valor del tiempo de espera (-timeout)
Este comando devuelve tuplas separadas por tabuladores de las estadísticas del servidor. Primero está el nombre de host del nodo con el puerto, luego la clave stat y el valor stat.
Para mostrar un ejemplo sencillo de scripting, así es como se puede calcular la memoria utilizada en todo el cluster (este cluster tiene 5 nodos):
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
La salida de estadísticas no sólo contiene estadísticas del clúster en vivo, sino también sus parámetros de configuración. Puede obtener el tiempo máximo y predeterminado (en segundos) para los bloqueos de teclas (que querremos conocer pronto):
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: Llave de cerradura
$ cbc ayuda bloqueo
Uso: lock [opciones] [argumentos]
-? Imprimir este texto de ayuda (-help)
-h val Nombre de host al que conectarse (-host)
-b val Cubo a utilizar (-bucket)
-u val Nombre de usuario para el puerto de resto (-user)
-P val contraseña para el puerto de resto (-password)
-T Activar temporización de comandos (-enable-timings)
-t val Especificar el valor del tiempo de espera (-timeout)
-e val Tiempo de expiración del bloqueo (-exptime)
Este comando bloquea las claves especificadas, haciendo que todas las peticiones de mutación generen un error. Permite especificar el tiempo de expiración ("-exptime"). Puede inspeccionar los tiempos de expiración máximos y predeterminados del clúster con el comando "cbc-stats", tal y como se ha descrito anteriormente.
Hola
Almacenado "hola" CAS:57fa8b8c01020000
$ cbc rm hola
Error al eliminar "hola":
Argumentos no válidos
$ dormir 20
$ cbc rm hola
Eliminado "hola"
En cbc-lockpermite varias teclas.
cbc-desbloquear: Llave de desbloqueo
$ cbc ayuda desbloquear
Uso: desbloquear [opciones] [argumentos]
-? Imprimir este texto de ayuda (-help)
-h val Nombre de host al que conectarse (-host)
-b val Cubo a utilizar (-bucket)
-u val Nombre de usuario para el puerto de resto (-user)
-P val contraseña para el puerto de resto (-password)
-T Activar temporización de comandos (-enable-timings)
-t val Especificar el valor del tiempo de espera (-timeout)
Este comando desbloquea las claves dadas. Acepta pares de valores clave y CAS. Si coinciden, el servidor libera el bloqueo.
"barbie.json" Tamaño:139 Banderas:0 CAS:900ccb8ea2030000
"buzz.json" Tamaño:93 Banderas:0 CAS:e79acb8ea2030000
$ cbc unlock barbie.json 900ccb8ea2030000 buzz.json e79acb8ea2030000
Desbloqueado "barbie.json"
Desbloqueado "buzz.json"
cbc-verify: Verificar claves
$ cbc ayuda verificar
Uso: verificar [opciones] [argumentos]
-? Imprimir este texto de ayuda (-help)
-h val Nombre de host al que conectarse (-host)
-b val Cubo a utilizar (-bucket)
-u val Nombre de usuario para el puerto de resto (-user)
-P val contraseña para el puerto de resto (-password)
-T Activar temporización de comandos (-enable-timings)
-t val Especificar el valor del tiempo de espera (-timeout)
Este comando verifica la consistencia de las claves. Compara el contenido de las claves con los archivos correspondientes. Si todo está bien, devuelve un código cero a la salida y no imprime nada. Así que es más interesante el caso de que algo vaya mal. Eliminemos buzz.jsony añadir algo a barbie.json:
Almacenado "barbie.json" CAS:59c1a52165050000
Almacenado "buzz.json" CAS:e17da62165050000
$ cbc rm buzz.json
Eliminado "buzz.json"
$ echo "basura" >> barbie.json
$ cbc verificar *.json
Tamaño incorrecto para: "barbie.json"
Error al obtener "buzz.json": No such key
¿$ echo $?
1