MCPcopy Create free account
hub / github.com/ElementsProject/lightning / plugin_hook_db_sync

Function plugin_hook_db_sync

lightningd/plugin_hook.c:463–538  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

461}
462
463void plugin_hook_db_sync(struct db *db)
464{
465 struct plugin_hook *hook = &db_write_hook;
466 struct jsonrpc_request *req;
467 struct plugin_hook_request *ph_req;
468 void *ret;
469 struct plugin **plugin_arr;
470 struct plugins *plugins;
471 size_t i;
472 size_t num_live_hooks;
473 const char **changes = db_changes(db);
474
475 /* Common fast path */
476 if (tal_count(hook->hooks) == 0)
477 return;
478
479 /* Could still have no non-NULL ones, if a plugin was removed. */
480 plugin_arr = tal_arr(NULL, struct plugin *, 0);
481 for (i = 0; i < tal_count(hook->hooks); ++i) {
482 if (hook->hooks[i])
483 tal_arr_expand(&plugin_arr, hook->hooks[i]->plugin);
484 }
485 num_live_hooks = tal_count(plugin_arr);
486 if (num_live_hooks == 0) {
487 tal_free(plugin_arr);
488 return;
489 }
490
491 plugins = plugin_arr[0]->plugins;
492 ph_req = notleak(tal(hook->hooks, struct plugin_hook_request));
493 ph_req->hook = hook;
494 ph_req->db = db;
495 ph_req->cb_arg = &num_live_hooks;
496
497 for (i = 0; i < num_live_hooks; ++i) {
498 /* Create an object for this plugin. */
499 struct db_write_hook_req *dwh_req;
500 dwh_req = tal(ph_req, struct db_write_hook_req);
501 dwh_req->plugin = plugin_arr[i];
502 dwh_req->ph_req = ph_req;
503 dwh_req->num_hooks = &num_live_hooks;
504
505 /* FIXME: id_prefix from caller? */
506 /* FIXME: do IO logging for this! */
507 req = jsonrpc_request_start(NULL, hook->name, NULL,
508 NULL, NULL,
509 db_hook_response,
510 dwh_req);
511
512 json_add_num(req->stream, "data_version",
513 db_data_version_get(db));
514
515 json_array_start(req->stream, "writes");
516 for (size_t j = 0; j < tal_count(changes); j++)
517 json_add_string(req->stream, NULL, changes[j]);
518 json_array_end(req->stream);
519 jsonrpc_request_end(req);
520

Callers

nothing calls this directly

Calls 11

db_changesFunction · 0.85
tal_freeFunction · 0.85
json_add_numFunction · 0.85
db_data_version_getFunction · 0.85
json_array_startFunction · 0.85
json_array_endFunction · 0.85
plugins_exclusive_loopFunction · 0.85
io_breakFunction · 0.85
jsonrpc_request_endFunction · 0.70
plugin_request_sendFunction · 0.70
json_add_stringFunction · 0.50

Tested by

no test coverage detected