static void domain_wait_trigger_handler(octopus_mode_t mode, char* record, void* state) { errval_t err; struct wait_state *ws = state; oct_remove_trigger(ws->tid); xphi_dom_id_t domid = 0; err = oct_read(record, "_ { domid: %d }", &domid); if (err_is_fail(err) || domid == 0) { err = err_push(err, XEON_PHI_ERR_CLIENT_DOMAIN_VOID); } interphi_domain_wait_reply(ws->node, err, ws->usr_state, domid); free(state); free(record); }
int main(int argc, char *argv[]) { oct_init(); errval_t err = SYS_ERR_OK; octopus_trigger_id_t tid; size_t received = 0; err = oct_set("obj1 { attr: 1 }"); ASSERT_ERR_OK(err); err = oct_set("obj2 { attr: 2 }"); ASSERT_ERR_OK(err); err = oct_set("obj3 { attr: 3 }"); ASSERT_ERR_OK(err); struct octopus_thc_client_binding_t* c = oct_get_thc_client(); octopus_trigger_t record_deleted = oct_mktrigger(SYS_ERR_OK, octopus_BINDING_EVENT, OCT_ON_DEL, trigger_handler, &received); errval_t error_code = SYS_ERR_OK; char* output = NULL; err = c->call_seq.get(c, "r'^obj.$' { attr: 3 } ", record_deleted, &output, &tid, &error_code); ASSERT_ERR_OK(err); ASSERT_ERR_OK(error_code); ASSERT_STRING(output, "obj3 { attr: 3 }"); debug_printf("tid is: %lu\n", tid); free(output); oct_del("obj3"); while (received != 1) { messages_wait_and_handle_next(); } received = 0; tid = 0; octopus_mode_t m = OCT_ON_SET | OCT_ON_DEL | OCT_PERSIST; octopus_trigger_t ptrigger = oct_mktrigger(SYS_ERR_OK, octopus_BINDING_EVENT, m, persistent_trigger, &received); output = NULL; err = c->call_seq.get(c, "obj2", ptrigger, &output, &tid, &error_code); ASSERT_ERR_OK(err); ASSERT_ERR_OK(error_code); debug_printf("tid is: %lu\n", tid); ASSERT_STRING(output, "obj2 { attr: 2 }"); oct_del("obj2"); while (received != 1) { messages_wait_and_handle_next(); } received = 0; oct_set("obj2 { attr: 'asdf' }"); while (received != 1) { messages_wait_and_handle_next(); } received = 0; err = oct_remove_trigger(tid); DEBUG_ERR(err, "remove trigger"); ASSERT_ERR_OK(err); while (received != 1) { messages_wait_and_handle_next(); } printf("d2trigger SUCCESS!\n"); return EXIT_SUCCESS; }