Couchbase C Client  3.3.14
Asynchronous C Client for Couchbase
utils.h
Go to the documentation of this file.
1/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2/*
3 * Copyright 2011-2020 Couchbase, Inc.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#ifndef LCB_UTILS_H
19#define LCB_UTILS_H
20
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32#define LCB_CONFIG_MCD_PORT 11210
33#define LCB_CONFIG_MCD_SSL_PORT 11207
34#define LCB_CONFIG_HTTP_PORT 8091
35#define LCB_CONFIG_HTTP_SSL_PORT 18091
36#define LCB_CONFIG_MCCOMPAT_PORT 11211
37
52#define LCB_CMD_SET_KEY(cmd, keybuf, keylen) LCB_KREQ_SIMPLE(&(cmd)->key, keybuf, keylen)
53
65typedef struct {
69 lcb_U32 cmdflags;
70
79 lcb_U32 exptime;
80
86 lcb_U64 cas;
87
89 lcb_U32 cid;
90 const char *scope;
91 size_t nscope;
92 const char *collection;
93 size_t ncollection;
95 lcb_KEYBUF key;
96
98 lcb_U32 timeout;
100 lcbtrace_SPAN *pspan;
101} lcb_CMDCBFLUSH;
102
103typedef struct {
104 lcb_STATUS rc;
105 void *cookie;
106 lcb_U16 rflags;
107} lcb_RESPCBFLUSH;
108
131LIBCOUCHBASE_API
132lcb_STATUS lcb_cbflush3(lcb_INSTANCE *instance, void *cookie, const lcb_CMDCBFLUSH *cmd);
133
218typedef enum lcb_timeunit_t lcb_timeunit_t;
219
232LIBCOUCHBASE_API
234
243LIBCOUCHBASE_API
245
261typedef void (*lcb_timings_callback)(lcb_INSTANCE *instance, const void *cookie, lcb_timeunit_t timeunit, lcb_U32 min,
262 lcb_U32 max, lcb_U32 total, lcb_U32 maxtotal);
263
273LIBCOUCHBASE_API
274lcb_STATUS lcb_get_timings(lcb_INSTANCE *instance, const void *cookie, lcb_timings_callback callback);
289
304LIBCOUCHBASE_API
305void lcb_dump(lcb_INSTANCE *instance, FILE *fp, lcb_U32 flags);
306
308struct lcb_histogram_st;
309typedef struct lcb_histogram_st lcb_HISTOGRAM;
310
316LIBCOUCHBASE_API
317lcb_HISTOGRAM *lcb_histogram_create(void);
318
323LIBCOUCHBASE_API
324void lcb_histogram_destroy(lcb_HISTOGRAM *hg);
325
332LIBCOUCHBASE_API
333void lcb_histogram_record(lcb_HISTOGRAM *hg, lcb_U64 duration);
334
335typedef void (*lcb_HISTOGRAM_CALLBACK)(const void *cookie, lcb_timeunit_t timeunit, lcb_U32 min, lcb_U32 max,
336 lcb_U32 total, lcb_U32 maxtotal);
337
345LIBCOUCHBASE_API
346void lcb_histogram_read(const lcb_HISTOGRAM *hg, const void *cookie, lcb_HISTOGRAM_CALLBACK cb);
347
358LIBCOUCHBASE_API
359void lcb_histogram_print(lcb_HISTOGRAM *hg, FILE *stream);
360
366/*
367 * @addtogroup lcb-collection-api
368 * @{
369 */
370
371typedef struct lcb_RESPGETMANIFEST_ lcb_RESPGETMANIFEST;
372
373LIBCOUCHBASE_API lcb_STATUS lcb_respgetmanifest_status(const lcb_RESPGETMANIFEST *resp);
374LIBCOUCHBASE_API lcb_STATUS lcb_respgetmanifest_cookie(const lcb_RESPGETMANIFEST *resp, void **cookie);
375LIBCOUCHBASE_API lcb_STATUS lcb_respgetmanifest_value(const lcb_RESPGETMANIFEST *resp, const char **json,
376 size_t *json_len);
377
378typedef struct lcb_CMDGETMANIFEST_ lcb_CMDGETMANIFEST;
379
380LIBCOUCHBASE_API lcb_STATUS lcb_cmdgetmanifest_create(lcb_CMDGETMANIFEST **cmd);
381LIBCOUCHBASE_API lcb_STATUS lcb_cmdgetmanifest_destroy(lcb_CMDGETMANIFEST *cmd);
382LIBCOUCHBASE_API lcb_STATUS lcb_cmdgetmanifest_timeout(lcb_CMDGETMANIFEST *cmd, uint32_t timeout);
383LIBCOUCHBASE_API lcb_STATUS lcb_getmanifest(lcb_INSTANCE *instance, void *cookie, const lcb_CMDGETMANIFEST *cmd);
384
385typedef struct lcb_RESPGETCID_ lcb_RESPGETCID;
386
387LIBCOUCHBASE_API lcb_STATUS lcb_respgetcid_status(const lcb_RESPGETCID *resp);
388LIBCOUCHBASE_API lcb_STATUS lcb_respgetcid_cookie(const lcb_RESPGETCID *resp, void **cookie);
389LIBCOUCHBASE_API lcb_STATUS lcb_respgetcid_manifest_id(const lcb_RESPGETCID *resp, uint64_t *id);
390LIBCOUCHBASE_API lcb_STATUS lcb_respgetcid_collection_id(const lcb_RESPGETCID *resp, uint32_t *id);
391LIBCOUCHBASE_API lcb_STATUS lcb_respgetcid_scoped_collection(const lcb_RESPGETCID *resp, const char **name,
392 size_t *name_len);
393
394typedef struct lcb_CMDGETCID_ lcb_CMDGETCID;
395
396LIBCOUCHBASE_API lcb_STATUS lcb_cmdgetcid_create(lcb_CMDGETCID **cmd);
397LIBCOUCHBASE_API lcb_STATUS lcb_cmdgetcid_destroy(lcb_CMDGETCID *cmd);
398LIBCOUCHBASE_API lcb_STATUS lcb_cmdgetcid_scope(lcb_CMDGETCID *cmd, const char *scope, size_t scope_len);
399LIBCOUCHBASE_API lcb_STATUS lcb_cmdgetcid_collection(lcb_CMDGETCID *cmd, const char *collection, size_t collection_len);
400LIBCOUCHBASE_API lcb_STATUS lcb_cmdgetcid_timeout(lcb_CMDGETCID *cmd, uint32_t timeout);
401
402LIBCOUCHBASE_API lcb_STATUS lcb_getcid(lcb_INSTANCE *instance, void *cookie, const lcb_CMDGETCID *cmd);
445
448#define LCB_GETNODE_UNAVAILABLE "invalid_host:0"
449
492LIBCOUCHBASE_API
493const char *lcb_get_node(lcb_INSTANCE *instance, lcb_GETNODETYPE type, unsigned index);
494
512LIBCOUCHBASE_API
513const char *lcb_get_keynode(lcb_INSTANCE *instance, const void *key, size_t nkey);
514
523LIBCOUCHBASE_API
525
532LIBCOUCHBASE_API
534
552LIBCOUCHBASE_API
553const char *const *lcb_get_server_list(lcb_INSTANCE *instance);
554
562LIBCOUCHBASE_API
563void *lcb_mem_alloc(lcb_SIZE size);
564
566LIBCOUCHBASE_API
567void lcb_mem_free(void *ptr);
568
578LCB_INTERNAL_API
580
582LCB_INTERNAL_API
584
586/* This returns the library's idea of time */
587LCB_INTERNAL_API
588lcb_U64 lcb_nstime(void);
589
590#ifdef __cplusplus
591}
592#endif
593#endif /* LCB_UTILS_H */
const char * lcb_get_node(lcb_INSTANCE *instance, lcb_GETNODETYPE type, unsigned index)
Return a string of host:port for a node of the given type.
lcb_S32 lcb_get_num_nodes(lcb_INSTANCE *instance)
Get the number of the nodes in the cluster.
lcb_GETNODETYPE
Type of node to retrieve for the lcb_get_node() function.
Definition utils.h:420
lcb_S32 lcb_get_num_replicas(lcb_INSTANCE *instance)
Get the number of the replicas in the cluster.
const char *const * lcb_get_server_list(lcb_INSTANCE *instance)
Get a list of nodes in the cluster.
const char * lcb_get_keynode(lcb_INSTANCE *instance, const void *key, size_t nkey)
Get the target server for a given key.
@ LCB_NODE_DATA
Get a data (memcached) node.
Definition utils.h:424
@ LCB_NODE_NEVERNULL
Specifying this flag adds additional semantics which instruct the library to search additional resour...
Definition utils.h:434
@ LCB_NODE_VIEWS
Get a view (CAPI) node.
Definition utils.h:426
@ LCB_NODE_CONNECTED
Only return a node which is connected, or a node which is known to be up.
Definition utils.h:428
@ LCB_NODE_HTCONFIG_CONNECTED
Equivalent to LCB_NODE_HTCONFIG|LCB_NODE_CONNECTED
Definition utils.h:437
@ LCB_NODE_HTCONFIG_ANY
Equivalent to LCB_NODE_HTCONFIG|LCB_NODE_NEVERNULL.
Definition utils.h:443
@ LCB_NODE_HTCONFIG
Get an HTTP configuration (Rest API) node.
Definition utils.h:422
lcb_STATUS
Error codes returned by the library.
Definition error.h:213
lcb_STATUS lcb_cbflush3(lcb_INSTANCE *instance, void *cookie, const lcb_CMDCBFLUSH *cmd)
struct lcb_st lcb_INSTANCE
Library handle representing a connection to a cluster and its data buckets.
Definition couchbase.h:35
lcb_STATUS lcb_disable_timings(lcb_INSTANCE *instance)
Stop recording (and release all resources from previous measurements) timing metrics.
void(* lcb_timings_callback)(lcb_INSTANCE *instance, const void *cookie, lcb_timeunit_t timeunit, lcb_U32 min, lcb_U32 max, lcb_U32 total, lcb_U32 maxtotal)
The following function is called for each bucket in the timings histogram when you call lcb_get_timin...
Definition utils.h:261
lcb_STATUS lcb_enable_timings(lcb_INSTANCE *instance)
Start recording timing metrics for the different operations.
lcb_timeunit_t
Time units reported by lcb_get_timings()
Definition utils.h:212
lcb_STATUS lcb_get_timings(lcb_INSTANCE *instance, const void *cookie, lcb_timings_callback callback)
Get the timings histogram.
@ LCB_TIMEUNIT_USEC
Time is in microseconds.
Definition utils.h:214
@ LCB_TIMEUNIT_MSEC
Time is in milliseconds.
Definition utils.h:215
@ LCB_TIMEUNIT_NSEC
Time is in nanoseconds.
Definition utils.h:213
@ LCB_TIMEUNIT_SEC
Time is in seconds.
Definition utils.h:216
Common request header for all keys.
Definition kvbuf.h:58
void lcb_histogram_read(const lcb_HISTOGRAM *hg, const void *cookie, lcb_HISTOGRAM_CALLBACK cb)
void lcb_dump(lcb_INSTANCE *instance, FILE *fp, lcb_U32 flags)
Write a textual dump to a file.
void lcb_histogram_print(lcb_HISTOGRAM *hg, FILE *stream)
Print the histogram to the specified FILE.
lcb_HISTOGRAM * lcb_histogram_create(void)
LCB_INTERNAL_API lcb_U64 lcb_nstime(void)
void lcb_histogram_destroy(lcb_HISTOGRAM *hg)
void * lcb_mem_alloc(lcb_SIZE size)
Functions to allocate and free memory related to libcouchbase.
LCB_INTERNAL_API void lcb_run_loop(lcb_INSTANCE *instance)
void lcb_histogram_record(lcb_HISTOGRAM *hg, lcb_U64 duration)
void lcb_mem_free(void *ptr)
Use this to free memory allocated with lcb_mem_alloc.
LCB_INTERNAL_API void lcb_stop_loop(lcb_INSTANCE *instance)
lcb_DUMPFLAGS
Definition utils.h:277
@ LCB_DUMP_METRICS
Dump various metrics information.
Definition utils.h:285
@ LCB_DUMP_ALL
Dump everything.
Definition utils.h:287
@ LCB_DUMP_BUFINFO
Dump memory usage/reservation information about buffers.
Definition utils.h:283
@ LCB_DUMP_PKTINFO
Dump information about each packet.
Definition utils.h:281
@ LCB_DUMP_VBCONFIG
Dump the raw vbucket configuration.
Definition utils.h:279