50 #include "rpc/rpc_opcodes_xc.h" 55 #include "stob/addb2_xc.h" 59 #include "rpc/bulk_xc.h" 61 #include "rpc/addb2_xc.h" 63 #include "be/addb2_xc.h" 65 #include "motr/client_internal_xc.h" 66 #include "motr/addb_xc.h" 67 #include "motr/client_xc.h" 69 #include "ioservice/io_addb2_xc.h" 70 #include "dix/dix_addb_xc.h" 71 #include "dix/req_xc.h" 72 #include "cas/cas_addb2_xc.h" 81 #include "cob/cob_xc.h" 83 #include "stob/addb2_xc.h" 148 const uint64_t start_time,
const uint64_t stop_time);
159 static void flate(
void);
165 #define DOM "./_addb2-dump_%d" 195 int main(
int argc,
char **argv)
202 uint64_t start_time = 0;
203 uint64_t stop_time = (uint64_t)-1;
211 err(EX_CONFIG,
"Cannot initialise motr: %d", result);
215 result =
M0_GETOPTS(
"m0addb2dump", argc, argv,
221 LAMBDA(
void, (
const char *path) {
226 LAMBDA(
void, (
const char *path) {
230 err(EX_OSERR,
"Memory allocation failed");
235 M0_STRINGARG(
'J',
"Embed extra JSON data into every record",
236 LAMBDA(
void, (
const char *json_text) {
239 M0_FORMATARG(
's',
"Capture start time in nanosecs since epoch",
241 M0_FORMATARG(
'e',
"Capture finish time in nanosecs since epoch",
245 err(EX_USAGE,
"Wrong option: %d", result);
248 err(EX_USAGE,
"De-flattening is exclusive.");
258 "Staring offset and continuous dump imply single file.");
262 else if (result != -ENOENT)
263 err(EX_CONFIG,
"Cannot destroy domain: %d", result);
268 err(EX_CANTCREAT,
"Cannot create domain: %d", result);
273 err(EX_CONFIG,
"Plugins loading failed");
357 const uint64_t start_time,
const uint64_t stop_time)
369 err(EX_CANTCREAT,
"Cannot find stob: %d", result);
373 err(EX_CANTCREAT,
"Cannot locate stob: %d", result);
377 err(EX_NOINPUT,
"Cannot create stob: %d", result);
381 err(EX_NOINPUT,
"Cannot stat: %d", result);
384 if (
delay > 0 && result == -EPROTO) {
385 printf(
"Sleeping for %i seconds (%" PRIx64 ").\n",
391 err(EX_DATAERR,
"Cannot initialise iterator: %d",
394 if (start_time <= rec->ar_val.va_time &&
402 err(EX_DATAERR,
"Iterator error: %d", result);
444 sprintf(
buf,
"{\"ptr\":%" PRIu64 "}", (uint64_t)*(
void **)v);
446 sprintf(
buf,
"@%p", *(
void **)v);
451 sprintf(
buf,
"%s", v[0] ?
"true" :
"false");
458 sprintf(
buf,
"{\"container\":%" PRId64 "," 476 sprintf(
buf,
"[FIXME]");
490 sprintf(
buf,
"\"%04d-%02d-%02dT%02d:%02d:%02d.%09" PRIu64 "Z\"",
491 tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
492 tm.tm_hour, tm.tm_min, tm.tm_sec,
495 localtime_r(&ts, &tm);
496 sprintf(
buf,
"%04d-%02d-%02d-%02d:%02d:%02d.%09"PRIu64,
497 tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
498 tm.tm_hour, tm.tm_min, tm.tm_sec,
526 "\"type\":\"%s\",\"transitions\":%"PRId64 528 :
"'%s' transitions: %" PRId64 " phase: %s";
530 conf->scf_state[v[2]].sd_name);
533 "\"type\":\"UNKNOWN-%" PRId64 "\",\"transitions\":%"PRId64 537 sprintf(
buf,
fmt,
ctx->c_fom.fo_tid, v[1], v[2]);
556 "{\"sm_id\":%" PRId64 ",\"tgt_state\":\"%s\"}" :
557 "sm_id: %" PRIu64 " --> %s";
558 sprintf(
buf,
fmt, v[0],
conf->scf_state[v[2]].sd_name);
561 if (v[1] == (uint32_t)~0) {
563 "{\"sm_id\":%" PRId64 ",\"tgt_state\":\"%s\"}" :
564 "sm_id: %" PRIu64 " o--> %s";
565 sprintf(
buf,
fmt, v[0],
conf->scf_state[v[2]].sd_name);
572 ",\"src_state\":\"%s\"" 574 ",\"tgt_state\":\"%s\"}" 575 :
"sm_id: %" PRIu64 " %s -[%s]-> %s";
602 if (
ctx->c_fom.fo_type !=
NULL) {
603 conf = &
ctx->c_fom.fo_type->ft_conf;
606 s = &
conf->scf_state[v[2]];
608 "{\"sm_id\":%" PRId64 ",\"tgt_state\":\"%s\"}" :
609 "sm_id: %" PRIu64 " --> %s";
610 sprintf(
buf,
fmt, v[0],
s->sd_name);
611 }
else if (v[1] <
conf->scf_trans_nr) {
612 d = &
conf->scf_trans[v[1]];
616 ",\"src_state\":\"%s\"" 618 ",\"tgt_state\":\"%s\"}" 619 :
"sm_id: %" PRIu64 " %s -[%s]-> %s";
626 ",\"tgt_state\":\"phase transition %i\"}" 627 :
"sm_id: %" PRIu64 " phase transition %i";
628 sprintf(
buf,
fmt, v[0], (
int)v[1]);
633 ",\"tgt_state\":\"phase ast transition %i\"}" 634 :
"sm_id: %" PRIu64 " phase ast transition %i";
635 sprintf(
buf,
fmt, v[0], (
int)v[1]);
647 it->rit_opcode, area));
648 }
else if (v[0] == 0) {
666 if (
rc != 0 && info.dli_sname !=
NULL) {
669 "{\"name\":\"%s\",\"addr\":%lu}," 671 info.dli_sname,
addr - info.dli_saddr);
675 sprintf(
buf,
"\"symbol\":{\"addr\":%" PRIu64 "," 676 "\"addr_ptr_wrap\":%" PRIu64 "}",
677 (uint64_t)
addr, v[0]);
703 " avg: %f dev: %f datum: %" PRIx64 " ";
711 if (strlen(sym_buf) > 0)
712 sprintf(
buf + strlen(
buf),
",%s", sym_buf);
721 static const char p[] =
722 "************************************************************";
724 len =
val * strlen(
p) /
m;
725 sprintf(
buf + strlen(
buf),
"%*.*s", len, len,
p);
736 char cr =
flatten ?
' ' :
'\n';
767 int idx =
ctx->c_val->va_id -
conf->scf_addb2_counter;
771 M0_PRE(0 <= idx && idx < 200);
775 ",\"sm_name\":\"%s\"" 776 ",\"src_state\":\"%s\"" 778 ",\"tgt_state\":\"%s\"}," 779 :
"%s/%s: %s -[%s]-> %s ";
798 switch ((mask >> 8) & 0xf) {
817 sprintf(
buf + strlen(
buf),
818 "{\"error\":\"unknown-fop-mask\"" 819 ",\"msg\":\"Unknown FOP mask 0x%" PRIx64 "\"" 820 ",\"fop_mask\":%" PRId64 "},",
823 sprintf(
buf + strlen(
buf),
824 " unknown-fop-mask: %"PRIx64, mask);
924 &m0_xc_m0_cob_req_states_enum.xe_val[
id];
941 const uint64_t *v,
char *
buf)
955 static const struct range_xen {
961 &m0_xc_m0_avi_labels_enum },
963 &m0_xc_m0_avi_dix_labels_enum },
965 &m0_xc_m0_avi_cas_labels_enum },
967 &m0_xc_m0_avi_rpc_labels_enum },
969 &m0_xc_m0_avi_ios_io_labels_enum },
971 &m0_xc_m0_avi_stob_io_labels_enum },
973 &m0_xc_m0_avi_be_labels_enum },
974 }, client_opcode_xc[] = {
976 &m0_xc_m0_entity_opcode_enum },
978 &m0_xc_m0_obj_opcode_enum },
980 &m0_xc_m0_idx_opcode_enum },
982 static const struct attr_name_val {
985 } client_values[] = {
987 &m0_xc_m0_entity_type_enum },
998 const struct attr_name_val *name_val;
1001 { &m0_xc_m0_avi_labels_enum, client_values,
1003 { &m0_xc_m0_avi_ios_io_labels_enum, ios_values,
1005 { &m0_xc_m0_avi_dix_labels_enum, dix_values,
1007 { &m0_xc_m0_avi_rpc_labels_enum, rpc_values,
1010 uint64_t attr_name = v[0];
1011 uint64_t attr_val = v[1];
1020 if (attr_name >= names[
i].
start && attr_name < names[
i].end) {
1021 attr_name_xen = names[
i].xen;
1028 sprintf(buf_ptr,
json_output ?
"\"%s\":" :
"%s: ",
1031 buf_ptr += strlen(
buf);
1035 if (attr_name_xen == vnmap[
i].attr_name_xen) {
1039 for (
i = 0; vn &&
i < vn->name_val_nr;
i++)
1040 if (attr_name == vn->name_val[
i].attr_name) {
1041 attr_val_xen = vn->name_val[
i].val_xen;
1052 if (attr_val >= client_opcode_xc[
i].
start &&
1053 attr_val < client_opcode_xc[
i].end) {
1054 attr_val_xen = client_opcode_xc[
i].xen;
1064 sprintf(buf_ptr,
"%"PRId64, attr_val);
1067 #define COUNTER &counter, &skip, &skip, &skip, &skip, &skip, &skip 1068 #define FID &fid, &skip 1069 #define TIMED &duration, &sym 1070 #define HIST &hist, &skip, &skip, &skip, &skip, &skip, &skip, &skip, &skip, \ 1071 &skip, &skip, &skip, &skip, &skip, &skip 1072 #define SKIP2 &skip, &skip 1091 {
"size",
"addr" } },
1095 {
"service",
NULL,
"sender",
1096 "req-opcode",
"rep-opcode",
"local",
"rpc_sm_id",
1097 "fom_sm_id",
"fom_state_sm_id" } },
1112 "seg-nr",
"count",
"offset",
"descr-nr",
"colour" }},
1121 {
"offset",
"rc" }},
1125 {
"req_state",
NULL,
NULL,
"unit_type",
"device_state",
1126 "frame",
"target",
"group",
"unit" }},
1129 {
"fid",
NULL,
"count",
"bvec-nr",
"ivec-nr",
"offset" } },
1132 {
"fid",
NULL,
"duration",
"rc",
"count",
"frag" } },
1143 { &
dec, &
dec, &
dec, &
dec }, {
"id",
"opcode",
"xid",
"session_id" } },
1145 { &
dec, &
dec, &
dec, &
dec }, {
"id",
"opcode",
"xid",
"session_id" } },
1160 {
"tx_id",
"gr_id",
"inout" } },
1163 {
"buf",
"qtype",
"time",
"duration",
"status",
"len" } },
1169 {
"seq",
"offset",
"prev",
"next",
"size",
"idx",
"nr",
"fid" } },
1171 {
"fom",
"wait",
"hold"} },
1173 {
"ifid",
NULL,
"ksize",
"vsize"} },
1193 {
"client_id",
"dix_id" } },
1195 {
"dix_id",
"mdix_id" } },
1197 {
"dix_id",
"cas_id" } },
1199 {
"cas_id",
"rpc_id" } },
1201 {
"fom_id",
"tx_id" } },
1203 {
"fom_id",
"stio_id" } },
1205 {
"fom_id",
"crow_fom_id" } },
1209 {
"cob_id",
"cob_state" } },
1211 {
"client_id",
"cob_id" } },
1213 {
"cob_id",
"rpc_id" } },
1215 {
"client_id",
"ioo_id" } },
1217 {
"ioo_id",
"rpc_id" } },
1224 {
"stio_id",
"stio_state" } },
1230 {
"tgid",
"pid",
"addr",
"wr",
"fault",
"delta_t" } },
1233 {
"prev_tgid",
"prev_pid",
"next_tgid",
"next_pid",
"delta_t" } },
1235 {
"bulk_id",
"rpc_id" } },
1237 {
"fom_sm_id",
"bulk_id" } },
1239 {
"bulk_id",
"state" } },
1253 err(EX_CONFIG,
"Cannot initialise array: %d", result);
1258 uint32_t e_id_nr = 0;
1261 for(; !
intrps_equal(&
p->p_intrp[e_id_nr], &z_intrp); e_id_nr++);
1311 #define U64 "%16"PRIx64 1353 for (
i = 0,
c = 0; intrp !=
NULL &&
i <
val->va_nr; ++
i)
1365 bool need_braces =
false;
1368 #define BEND (buf + strlen(buf)) 1371 if (output_timestamp &&
val->va_time != 0) {
1373 printf(
"\"timestamp\":%s,",
buf);
1378 printf(
"\"spec\":%s",
buf);
1381 if (intrp !=
NULL) {
1383 printf(
"\"%s\":%s", intrp->
ii_name, need_braces ?
"{" :
"");
1385 if (
val->va_nr == 0)
1392 printf(
"\"m0addb2dump[%s:%u]:%" PRIu64 "\"",
1393 __FILE__, __LINE__,
val->va_id);
1395 for (
i = 0;
i <
val->va_nr; ++
i) {
1398 sprintf(
buf,
"\"m0addb2dump[%s:%u]:%" PRIu64 "\"",
1399 __FILE__, __LINE__,
val->va_data[
i]);
1404 need_comma = (
i <
val->va_nr - 2 &&
1406 (i < val->va_nr - 1 &&
1412 need_comma ?
"," :
"");
1419 need_comma =
i <
val->va_nr - 1;
1420 printf(
"%s%s",
buf, need_comma ?
"," :
"");
1435 enum {
WIDTH = 12 };
1437 #define BEND (buf + strlen(buf)) 1448 printf(
"%s%s",
buf, cr ?
"\n" :
" ");
1452 printf(
"%-16s ", intrp->
ii_name);
1454 printf(
U64" ",
val->va_id);
1475 printf(
"%s", cr ?
"\n" :
" ");
1492 switch (
val->va_id) {
1494 ctx->c_fom.fo_addr =
val->va_data[0];
1495 ctx->c_fom.fo_tid =
val->va_data[1];
1509 const asymbol *
const* s0 = a0;
1510 const asymbol *
const* s1 = a1;
1512 return ((
int)bfd_asymbol_value(*s0)) - ((
int)bfd_asymbol_value(*s1));
1520 unsigned symtab_size;
1524 abfd = bfd_openr(libpath, 0);
1526 err(EX_OSERR,
"bfd_openr(): %d.", errno);
1527 bfd_check_format(
abfd, bfd_object);
1528 symtab_size = bfd_get_symtab_upper_bound(
abfd);
1531 err(EX_UNAVAILABLE,
"Cannot allocate symtab.");
1533 for (
i = 0;
i <
nr; ++
i) {
1534 if (strcmp(
syms[
i]->
name,
"m0_ptr_wrap") == 0) {
1540 err(EX_CONFIG,
"No base symbol found.");
1551 static uint64_t cached = 0;
1556 else if (delta == cached)
1565 while (
left + 1 < right) {
1568 mid = (
left + right) / 2;
1571 if (bfd_asymbol_value(
sym) > delta)
1573 else if (bfd_asymbol_value(
sym) < delta)
1589 while ((
ch = getchar()) != EOF) {
1601 for (prev = 0; (
ch = getchar()) != EOF; prev =
ch) {
1602 if (prev ==
'\n' &&
ch ==
'|')
struct m0_sm_conf dix_req_sm_conf
static void sm_state(const struct m0_sm_conf *conf, struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
struct m0_sm_conf be_tx_sm_conf
void m0_dix_cm_repair_cpx_init(void)
#define M0_GETOPTS(progname, argc, argv,...)
static void ptr(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
static void bulk_op_state(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
static struct m0_addb2_philter p
static void id_init(void)
static struct m0_addb2__id_intrp * id_get(uint64_t id)
static void val_dump_plaintext(struct m0_addb2__context *ctx, const char *prefix, const struct m0_addb2_value *val, int indent, bool cr)
static const char * json_extra_data
void m0_dix_cm_repair_cpx_fini(void)
struct m0_sm_conf op_states_conf
void(* ii_print[M0_ADDB2__FIELD_MAX])(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
const struct m0_sm_conf incoming_item_sm_conf
static void id_set_nr(struct m0_addb2__id_intrp *intrp, int nr)
#define M0_FLAGARG(ch, desc, ptr)
M0_INTERNAL int struct dentry struct kstat * stat
static void misc_fini(void)
static struct m0_addb2_mach * m
M0_INTERNAL int m0_stob_locate(struct m0_stob *stob)
struct m0_sm_conf fom_states_conf
M0_INTERNAL void m0_sns_cm_repair_sw_onwire_fop_fini(void)
static void beop_state_counter(struct m0_addb2__context *ctx, char *buf)
static void sym(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
static void fom_state_counter(struct m0_addb2__context *ctx, char *buf)
static void id_set(struct m0_addb2__id_intrp *intrp)
static void id_fini(void)
static int pad(int indent)
static void ioo_req_state(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
M0_INTERNAL int m0_stob_domain_destroy(struct m0_stob_domain *dom)
M0_INTERNAL void m0_sns_cm_rebalance_trigger_fop_init(void)
M0_INTERNAL void m0_sns_cm_rebalance_sw_onwire_fop_fini(void)
uint64_t m0_time_nanoseconds(const m0_time_t time)
static struct m0_uint128 prefix
static void rpc_in(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
struct m0_sm_conf io_sm_conf
static struct m0_be_emap_cursor it
M0_INTERNAL struct m0_rpc_item_type * m0_rpc_item_type_lookup(uint32_t opcode)
struct m0_sm_conf rit_incoming_conf
static void dtx0_state_counter(struct m0_addb2__context *ctx, char *buf)
static struct m0_varr value_id
M0_INTERNAL void m0_sns_cm_rebalance_sw_onwire_fop_init(void)
int m0_init(struct m0 *instance)
static int32_t max32(int32_t a, int32_t b)
static void hist(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
void m0_dix_cm_rebalance_cpx_fini(void)
struct m0_fom_type ft_fom_type
const struct m0_fom_type * fo_type
static void dix_state_counter(struct m0_addb2__context *ctx, char *buf)
M0_INTERNAL void m0_sns_cm_repair_trigger_fop_init(void)
static bool intrps_equal(const struct m0_addb2__id_intrp *intrp0, const struct m0_addb2__id_intrp *intrp1)
void(* ii_spec)(struct m0_addb2__context *ctx, char *buf)
m0_addb2__intrp_load_t p_intrp_load
static void hex0x(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
#define M0_STRINGARG(ch, desc, func)
static void rpc_out(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
const struct m0_addb2_record * c_rec
#define M0_ERR_INFO(rc, fmt,...)
static void tx_state_counter(struct m0_addb2__context *ctx, char *buf)
return M0_ERR(-EOPNOTSUPP)
static void fom_phase(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
static void cas_op_state(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
static void plugin_unload(struct plugin *plugin)
static void attr(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
static struct m0_addb2_sit * sit
#define M0_FORMATARG(ch, desc, fmt, ptr)
M0_INTERNAL uint64_t m0_varr_size(const struct m0_varr *arr)
static struct m0_stob * stob
static void tx_state(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
static void counter(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
static void duration(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
struct m0_sm_conf rit_outgoing_conf
static struct m0_addb2_callback c
void m0_node_uuid_string_set(const char *uuid)
static void libbfd_fini(void)
static unsigned int count_nonempty_vals(const struct m0_addb2_value *val)
uint32_t hd_bucket[M0_ADDB2_HIST_BUCKETS]
struct m0_sm_conf cas_req_sm_conf
const struct m0_addb2_value * c_val
M0_INTERNAL int m0_varr_init(struct m0_varr *arr, uint64_t nr, size_t size, size_t bufsize)
static struct m0_stob_domain * dom
M0_INTERNAL void m0_stob_id_make(uint64_t container, uint64_t key, const struct m0_fid *dom_id, struct m0_stob_id *stob_id)
M0_INTERNAL const void * m0_ptr_unwrap(uint64_t val)
static int plugin_add(const char *path)
struct m0_addb2__id_intrp * p_intrp
static void rec_dump(struct m0_addb2__context *ctx, const struct m0_addb2_record *rec)
int m0_addb2_sit_init(struct m0_addb2_sit **out, struct m0_stob *stob, m0_bindex_t start)
static void val_dump_json(struct m0_addb2__context *ctx, const struct m0_addb2_value *val, bool output_timestamp)
char * fmt(const char *format,...) __attribute__((format(printf
void * m0_alloc(size_t size)
struct m0_addb2_value ar_label[M0_ADDB2_LABEL_MAX]
static m0_bindex_t offset
static void context_fill(struct m0_addb2__context *ctx, const struct m0_addb2_value *val)
struct m0_sm_conf m0_dtx_sm_conf
int(* m0_addb2__intrp_load_t)(uint64_t flags, struct m0_addb2__id_intrp **intrp)
static void rpcop(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
static void fop_counter(struct m0_addb2__context *ctx, char *buf)
struct m0_addb2__id_intrp ids[]
static struct fdmi_ctx ctx
uint64_t m0_time_seconds(const m0_time_t time)
const char * m0_xcode_enum_print(const struct m0_xcode_enum *en, uint64_t val, char *buf)
int main(int argc, char **argv)
Test server for m0console.
M0_INTERNAL struct m0_fop_type * m0_fop_type_find(uint32_t opcode)
static int asymbol_cmp(const void *a0, const void *a1)
static void _clock(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
M0_INTERNAL void m0_sns_cm_repair_sw_onwire_fop_init(void)
static void indent(int depth)
M0_INTERNAL int m0_stob_create(struct m0_stob *stob, struct m0_dtx *dtx, const char *str_cfg)
static void val_dump(struct m0_addb2__context *ctx, const char *prefix, const struct m0_addb2_value *val, int indent, bool cr)
M0_INTERNAL int m0_stob_destroy(struct m0_stob *stob, struct m0_dtx *dtx)
M0_INTERNAL void m0_sns_cm_rebalance_trigger_fop_fini(void)
M0_INTERNAL enum m0_stob_state m0_stob_state_get(struct m0_stob *stob)
static int plugin_load(struct plugin *plugin)
static void misc_init(void)
M0_INTERNAL void m0_varr_fini(struct m0_varr *arr)
static void stob_io_req_state(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
M0_INTERNAL int m0_stob_domain_init(const char *location, const char *str_cfg_init, struct m0_stob_domain **out)
static void libbfd_init(const char *libpath)
#define M0_ADDB2__PLUGIN_FUNC_NAME
M0_INTERNAL int m0_stob_domain_create_or_init(const char *location, const char *str_cfg_init, uint64_t dom_key, const char *str_cfg_create, struct m0_stob_domain **out)
int m0_addb2_sit_next(struct m0_addb2_sit *it, struct m0_addb2_record **out)
static struct m0_sm_trans_descr trans[]
struct m0_addb2_value ar_val
static struct plugin plugins[PLUGINS_MAX]
static void dtx0_state(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
void m0_dix_cm_rebalance_cpx_init(void)
const struct m0_sm_conf outgoing_item_sm_conf
static void op_state(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
struct m0_fom_type * m0_fom__types[M0_OPCODES_NR]
static void libbfd_resolve(uint64_t delta, char *buf)
static void file_dump(struct m0_stob_domain *dom, const char *fname, const uint64_t start_time, const uint64_t stop_time)
struct m0_sm_conf ft_conf
static int start(struct m0_fom *fom)
struct m0_rpc_item_type ft_rpc_item_type
static struct m0 instance
static void plugins_unload(void)
static void oct(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
static void bol(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
M0_INTERNAL int m0_stob_find(const struct m0_stob_id *id, struct m0_stob **out)
static void skip(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
#define M0_ASSERT_INFO(cond, fmt,...)
static void fom_state(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
static void fom_type(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
const char * ii_field[M0_ADDB2__FIELD_MAX]
static void fid(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
struct m0_tlink fo_linkage
static void sm_trans(const struct m0_sm_conf *conf, const char *name, struct m0_addb2__context *ctx, char *buf)
M0_INTERNAL uint64_t m0_pid(void)
static void cob_req_state(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
static void ioo_state_counter(struct m0_addb2__context *ctx, char *buf)
static void dix_op_state(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
static void cas_state_counter(struct m0_addb2__context *ctx, char *buf)
static struct m0_addb2_source * s
M0_INTERNAL void m0_sns_cm_repair_trigger_fop_fini(void)
static void state_counter(struct m0_addb2__context *ctx, char *buf)
static int plugins_load(void)
static void hbar(char *buf, uint32_t val, uint32_t m)
struct m0_sm_conf m0_op_conf
static void dec(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
struct m0_sm_conf ft_state_conf
static void deflate(void)
M0_INTERNAL void * m0_varr_ele_get(struct m0_varr *arr, uint64_t index)
static void hex(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
#define M0_IMPOSSIBLE(fmt,...)
void m0_addb2_sit_fini(struct m0_addb2_sit *it)