void pycbc_callbacks_init(lcb_t instance) { lcb_set_store_callback(instance, store_callback); lcb_set_unlock_callback(instance, unlock_callback); lcb_set_get_callback(instance, get_callback); lcb_set_touch_callback(instance, touch_callback); lcb_set_arithmetic_callback(instance, arithmetic_callback); lcb_set_remove_callback(instance, delete_callback); lcb_set_stat_callback(instance, stat_callback); lcb_set_error_callback(instance, error_callback); lcb_set_observe_callback(instance, observe_callback); pycbc_http_callbacks_init(instance); }
PHP_COUCHBASE_LOCAL lcb_error_t simple_observe(lcb_t instance, struct observe_entry *entries, int nentries, long persist_to, long replicate_to) { lcb_error_t err = LCB_SUCCESS; lcb_observe_cmd_t *cmds = ecalloc(nentries, sizeof(lcb_observe_cmd_t)); lcb_observe_cmd_t **commands = ecalloc(nentries, sizeof(lcb_observe_cmd_t *)); int ii; lcb_observe_callback org = lcb_set_observe_callback(instance, simple_observe_callback); struct observe_cookie cookie; int xx; int done = 0; int numtries = 0; int interval = INI_INT(PCBC_INIENT_OBS_INTERVAL); int maxretry = INI_INT(PCBC_INIENT_OBS_TIMEOUT) / interval; cookie.entries = entries; cookie.num = nentries; cookie.error = LCB_SUCCESS; lcb_behavior_set_syncmode(instance, LCB_SYNCHRONOUS); do { /* set up the commands */ for (xx = 0, ii = 0; ii < nentries; ++ii) { cmds[ii].v.v0.key = entries[ii].key; cmds[ii].v.v0.nkey = entries[ii].nkey; if (should_add(&entries[ii], persist_to, replicate_to)) { commands[xx++] = cmds + ii; } } if (xx > 0) { if (numtries > 0) { usleep(interval); } ++numtries; err = lcb_observe(instance, &cookie, xx, (const lcb_observe_cmd_t * const *)commands); } else { done = 1; } } while (!done && numtries < maxretry); efree(cmds); efree(commands); lcb_behavior_set_syncmode(instance, LCB_ASYNCHRONOUS); lcb_set_observe_callback(instance, org); if (!done) { return LCB_ETIMEDOUT; } return (err == LCB_SUCCESS) ? cookie.error : err; }
PHP_COUCHBASE_LOCAL void php_couchbase_callbacks_observe_init(lcb_t handle) { lcb_set_observe_callback(handle, php_couchbase_observe_callback); }