static PyObject * Connection_server_nodes(pycbc_Connection *self, void *unused) { const char * const *cnodes; const char **curnode; PyObject *ret_list; cnodes = lcb_get_server_list(self->instance); if (!cnodes) { PYCBC_EXC_WRAP(PYCBC_EXC_INTERNAL, 0, "Can't get server nodes"); return NULL; } ret_list = PyList_New(0); if (!ret_list) { return NULL; } for (curnode = (const char**)cnodes; *curnode; curnode++) { PyObject *tmpstr = pycbc_SimpleStringZ(*curnode); PyList_Append(ret_list, tmpstr); Py_DECREF(tmpstr); } (void)unused; return ret_list; }
static void setup(char **argv, const char *username, const char *password, const char *bucket) { const char *endpoint; struct lcb_create_st options; lcb_assert(session == NULL); lcb_assert(mock == NULL); lcb_assert(io == NULL); if (lcb_create_io_ops(&io, NULL) != LCB_SUCCESS) { fprintf(stderr, "Failed to create IO instance\n"); exit(1); } mock = start_test_server(argv); if (mock == NULL) { err_exit("Failed to start mock server"); } endpoint = get_mock_http_server(mock); memset(&options, 0, sizeof(options)); if (!mock->is_mock) { username = mock->username; password = mock->password; bucket = mock->bucket; } options.version = 2; options.v.v2.host = endpoint; options.v.v2.user = username; options.v.v2.passwd = password; options.v.v2.bucket = bucket; options.v.v2.io = io; options.v.v2.transports = enabled_transports; if (lcb_create(&session, &options) != LCB_SUCCESS) { err_exit("Failed to create libcouchbase session"); } (void)lcb_set_error_callback(session, error_callback); if (lcb_connect(session) != LCB_SUCCESS) { err_exit("Failed to connect to server"); } lcb_wait(session); if (!mock->is_mock) { const char *const *servers; total_node_count = 0; servers = lcb_get_server_list(session); for (; *servers; servers++, total_node_count++); } }
/* verify valid couchbase connection handle */ int mod_conn_alive(UNUSED void *instance, void *handle) { rlm_couchbase_handle_t *chandle = handle; /* connection handle pointer */ lcb_t cb_inst = chandle->handle; /* couchbase instance */ lcb_error_t cb_error = LCB_SUCCESS; /* couchbase error status */ /* attempt to get server list */ const char *const *servers = lcb_get_server_list(cb_inst); /* check error state and server list return */ if (((cb_error = lcb_get_last_error(cb_inst)) != LCB_SUCCESS) || (servers == NULL)) { /* log error */ ERROR("rlm_couchbase: failed to get couchbase server topology: %s (0x%x)", lcb_strerror(NULL, cb_error), cb_error); /* return false */ return false; } return true; }