28 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_M0D 157 *
cctx->cc_ha_addr !=
'\0')) &&
178 return m0_reqh_context_bob_check(
rctx);
198 return m0_reqh_rpc_mach_tlist_head(&
motr2reqh(
motr)->rh_rpc_machines);
219 for (
i = 0;
i < xprts_nr; ++
i)
233 fprintf(
out,
"\nSupported transports:\n");
234 for (
i = 0;
i < xprts_nr; ++
i)
245 fprintf(
out,
"\nSupported stob types:\n");
267 static int (*
cmp[])(
const char *s1,
const char *s2) = {
277 M0_ASSERT(cs_endpoint_and_xprt_bob_check(ex));
306 const char *xprt_name)
314 return M0_RC(-EINVAL);
318 return M0_RC(-EINVAL);
347 endpoint = strtok_r(
NULL,
"\0", &sptr);
348 if (endpoint ==
NULL)
352 cs_endpoint_and_xprt_bob_init(epx);
353 cs_eps_tlink_init(epx);
363 M0_PRE(cs_endpoint_and_xprt_bob_check(epx));
366 cs_eps_tlink_fini(epx);
367 cs_endpoint_and_xprt_bob_fini(epx);
391 cs_eps_tlist_add_tail(
head, epx);
437 m0_reqh_context_bob_init(
rctx);
449 m0_reqh_context_bob_fini(
rctx);
488 cs_bp =
m0_tl_find(cs_buffer_pools, cs_bp, &
cctx->cc_buffer_pools,
511 const char *
ep,
const uint32_t tm_colour,
512 const uint32_t recv_queue_min_length,
536 recv_queue_min_length);
555 ep->ex_endpoint,
ep->ex_tm_colour,
571 M0_ASSERT(m0_rpc_machine_bob_check(rpcmach));
589 ep = cs_eps_tlist_head(&
cctx->cc_reqh_ctx.rc_eps)->ex_endpoint;
591 cctx->cc_no_all2all_connections =
true;
597 .hdc_enable_keepalive =
true,
598 .hdc_enable_fvec =
true,
600 .mhc_addr =
cctx->cc_ha_addr,
602 .mhc_reqh = &
cctx->cc_reqh_ctx.rc_reqh,
603 .mhc_process_fid =
cctx->cc_reqh_ctx.rc_fid,
609 cctx->cc_ha_is_started =
true;
625 if (
cctx->cc_ha_is_started && !
cctx->cc_no_conf &&
628 cctx->cc_motr_ha.mh_link,
629 &
cctx->cc_reqh_ctx.rc_fid,
640 if (!
cctx->cc_ha_is_started)
643 cctx->cc_ha_is_started =
false;
648 if (!
cctx->cc_no_conf)
670 ep->ex_tm_colour =
n++;
699 cs_buffer_pools_tlink_del_fini(cs_bp);
711 uint32_t max_recv_queue_len;
725 dom, &
bp->cs_buffer_pool,
732 cs_buffer_pools_tlink_init_at_tail(
bp, &
cctx->cc_buffer_pools);
745 yaml_node_pair_t *
pair;
747 for (
pair =
node->data.mapping.pairs.start;
749 key_str = (
const char *)yaml_document_get_node(doc,
750 pair->key)->data.scalar.value;
752 *
id = strtoll((
const char *)yaml_document_get_node(doc,
753 pair->value)->data.scalar.value, &endptr,
755 return *endptr ==
'\0' ?
M0_RC(0) :
M0_ERR(-EINVAL);
758 return M0_RC(-ENOENT);
764 yaml_node_pair_t *
pair;
766 for (
pair =
node->data.mapping.pairs.start;
768 key_str = (
const char *)yaml_document_get_node(doc,
769 pair->key)->data.scalar.value;
771 return (
const char *)yaml_document_get_node(doc,
772 pair->value)->data.scalar.value;
782 yaml_document_t *document;
785 f = fopen(dfile,
"r");
789 document = &
stob->s_sfile.sf_document;
790 rc = yaml_parser_initialize(&
parser);
794 yaml_parser_set_input_file(&
parser,
f);
795 rc = yaml_parser_load(&
parser, document);
799 stob->s_sfile.sf_is_initialised =
true;
800 yaml_parser_delete(&
parser);
823 const char *stob_path,
825 bool disable_direct_io)
830 uint64_t stob_file_id;
834 yaml_document_t *doc;
837 yaml_node_item_t *
item;
859 if (
stob->s_sfile.sf_is_initialised) {
861 doc = &
stob->s_sfile.sf_document;
862 for (
node = doc->nodes.start; node < doc->
nodes.top; ++
node) {
865 s_node = yaml_document_get_node(doc, *
item);
871 cid = stob_file_id - 1;
876 rc = m0_conf_sdev_get(
confc, &sdev_fid,
880 "Cannot open sdev "FID_F,
885 " -> sdev_fid:"FID_F" idx:0x%x",
886 cid,
FID_P(&sdev_fid),
897 size = 1024ULL *1024 * 256;
899 conf_sdev, force, &dev);
911 if (conf_sdev !=
NULL)
958 static const char prefix[] =
"linuxstob:";
972 const char *str_cfg_init)
998 const char *str_cfg_init,
1017 if (!M0_IN(
rc, (0, -ENOENT))) {
1029 "m0_stob_domain_create: rc=%d",
rc);
1037 return M0_RC(rc1 == 0 ?
rc : rc1);
1048 const char *stob_path,
1052 bool mkfs,
bool force,
1053 bool disable_direct_io)
1055 const char *ldom_cfg_init;
1068 ldom_cfg_init = disable_direct_io ?
"directio=false" :
"directio=true";
1073 linux_stob && stob_path !=
NULL && !
stob->s_ad_disks_init &&
1074 !
stob->s_sfile.sf_is_initialised;
1077 if (mkfs && force && (fake_storage || !linux_stob))
1081 NULL, stob_path, force,
1090 seg, stob_path,
false,
1107 if (
stob->s_sfile.sf_is_initialised)
1108 yaml_document_delete(&
stob->s_sfile.sf_document);
1130 return M0_ERR_INFO(-EINVAL,
"Unknown reqh service type: %s",
1156 M0_IN(
i, (M0_CST_HA, M0_CST_SSS)))
1158 if (
i == M0_CST_FIS) {
1208 M0_IN(
i, (M0_CST_HA, M0_CST_SSS)))
1253 M0_PRE(cs_endpoint_and_xprt_bob_check(
ep));
1273 m0_net_domain_bob_init(ndom);
1274 ndom_tlink_init_at_tail(ndom, &
cctx->cc_ndoms);
1311 M0_ASSERT(m0_net_domain_bob_check(ndom));
1313 ndom_tlink_del_fini(ndom);
1314 m0_net_domain_bob_fini(ndom);
1355 "m0_mdstore_destroy()", rc2);
1366 const char *stob_create_cfg,
1380 stob_create_cfg, &
seg);
1399 uint32_t *repair_zone_pcnt)
1407 *repair_zone_pcnt = 0;
1413 M0_CONF_ROOT_POOLS_FID,
1414 M0_CONF_POOL_PVERS_FID);
1455 uint32_t repair_zone_pcnt;
1475 enum { len = 1024 };
1482 snprintf(*loc, len,
"linuxstob:%s%s",
name[0] ==
'/' ?
"" :
"./",
name);
1590 bool mkfs =
cctx->cc_mkfs;
1591 bool force =
cctx->cc_force;
1597 if (
cctx->cc_no_storage)
1618 "Failed to load device configuration file");
1647 m0_get()->i_mds_cdom_key);
1655 if (
rc != 0 &&
rc != -ENOENT) {
1661 if ((
rc == 0 && force) ||
rc == -ENOENT)
1675 !mkfs ?
"Did you run mkfs?" :
"Mkfs failed?");
1790 ndom_tlist_init(&
cctx->cc_ndoms);
1792 cs_buffer_pools_tlist_init(&
cctx->cc_buffer_pools);
1798 cs_eps_tlist_init(&
cctx->cc_ios_eps);
1799 cs_eps_tlist_init(&
cctx->cc_mds_eps);
1801 cctx->cc_args.ca_argc = 0;
1802 cctx->cc_args.ca_argc_max = 0;
1817 cs_eps_tlist_fini(&
cctx->cc_ios_eps);
1823 cs_eps_tlist_fini(&
cctx->cc_mds_eps);
1825 if (
cctx->cc_stats_svc_epx.ex_endpoint !=
NULL)
1827 cs_buffer_pools_tlist_fini(&
cctx->cc_buffer_pools);
1828 ndom_tlist_fini(&
cctx->cc_ndoms);
1830 if (
cctx->cc_enable_finj)
1832 while (
cctx->cc_args.ca_argc > 0)
1843 "Usage: %s [-h] [-x] [-l]\n" 1844 " or %s <global options> <reqh>+\n" 1856 " -h Display this help.\n" 1857 " -v Show version information and exit.\n" 1858 " -x List supported network transports.\n" 1859 " -l List supported services.\n" 1862 " -F Force mkfs to override found filesystem.\n" 1863 " -Q num Minimum length of TM receive queue.\n" 1864 " -M num Maximum RPC message size.\n" 1865 " -H addr Endpoint address of HA service.\n" 1866 " -G addr Endpoint address of MD service.\n" 1867 " -R addr Endpoint address of stats service.\n" 1868 " -i addr Add new entry to the list of IOS endpoint addresses.\n" 1869 " -w num Pool width.\n" 1870 " -Z Run as daemon.\n" 1871 " -E num Number of net buffers used by IOS.\n" 1872 " -J num Number of net buffers used by SNS.\n" 1873 " -o str Enable fault injection point with given name.\n" 1874 " -g Disable ADDB storage.\n" 1876 "Request handler options:\n" 1877 " -D str BE stob domain file path (used by UT only).\n" 1878 " -L str BE log file path.\n" 1879 " -b str BE seg0 file path.\n" 1880 " -B str BE primary segment file path.\n" 1881 " -z num BE primary segment size in bytes (used by m0mkfs only).\n" 1882 " -V num BE log size.\n" 1883 " -n num BE tx group tx nr max.\n" 1884 " -k num BE tx group reg nr max.\n" 1885 " -K num BE tx group reg size max.\n" 1886 " -p num BE tx group payload size max.\n" 1887 " -C num BE tx reg nr max.\n" 1888 " -N num BE tx reg size max.\n" 1889 " -s num BE tx payload size max.\n" 1890 " -y num BE tx group freeze timeout min, ms.\n" 1891 " -Y num BE tx group freeze timeout max, ms.\n" 1892 " -a Preallocate BE segment.\n" 1893 " -c str [optional] Path to the configuration database." 1894 " Mandatory for confd service.\n" 1895 " -T str Type of storage. Supported types: linux, ad.\n" 1896 " -S str Stob file path.\n" 1897 " -A str ADDB stob file path.\n" 1898 " -d str [optional] Path to device configuration file.\n" 1899 " Device configuration file should contain device id and the\n" 1900 " corresponding device path.\n" 1901 " if -U option is specified, disks.conf file is not used.\n" 1903 " filename: /dev/sda\n" 1904 " Note that only AD type stob domain can be configured over device.\n" 1905 " -U Use confc API instead of `-d` to obtain device configuration.\n" 1906 " -q num [optional] Minimum length of TM receive queue.\n" 1907 " Defaults to the value set with '-Q' option.\n" 1908 " -m num [optional] Maximum RPC message size.\n" 1909 " Defaults to the value set with '-M' option.\n" 1910 " -e addr Network layer endpoint of a service.\n" 1911 " Format: <transport>:<address>.\n" 1912 " Currently supported transport is lnet.\n" 1914 " lnet takes 4-tuple endpoint address in the form\n" 1915 " NID : PID : PortalNumber : TransferMachineIdentifier\n" 1916 " e.g. lnet:172.18.50.40@o2ib1:12345:34:1\n" 1918 " If multiple '-e' options are provided, network transport\n" 1919 " will have several endpoints, distinguished by transfer machine id\n" 1920 " (the 4th component of 4-tuple endpoint address in lnet).\n" 1921 " -f fid Process fid (mandatory for m0d).\n" 1922 " -I Disable direct I/O for data.\n" 1923 " -j Enable fault injection service (FIS).\n" 1926 " %s -Q 4 -M 4096 -T linux -D bepath -S stobfile \\\n" 1927 " -e lnet:172.18.50.40@o2ib1:12345:34:1 \\\n" 1928 " -q 8 -m 65536 \\\n" 1929 " -f '<0x7200000000000001:1>'\n",
1939 if (!
cctx->cc_no_storage) {
1941 return M0_ERR_INFO(-EINVAL,
"rc_stype is not set");
1943 return M0_ERR_INFO(-EINVAL,
"rc_stpath is not set");
1945 return M0_ERR_INFO(-EINVAL,
"rc_bepath is not set");
1947 cctx->cc_recv_queue_min_length =
max64(
cctx->cc_recv_queue_min_length,
1955 if (
cctx->cc_no_storage)
1960 return M0_ERR_INFO(-EINVAL,
"Invalid service type");
1967 return M0_ERR_INFO(-EINVAL,
"Endpoint is missing");
1997 "Service is not registered: %s",
2001 return M0_ERR_INFO(-EEXIST,
"Service is not unique: %s",
2021 if (
cctx->cc_daemon) {
2022 struct sigaction hup_act = { .sa_handler = SIG_IGN };
2023 return daemon(1, 0) ?: sigaction(SIGHUP, &hup_act,
NULL);
2058 return M0_RC(-EINVAL);
2071 M0_VOIDARG(
'v',
"Show version information and exit",
2077 M0_VOIDARG(
'x',
"List supported network transports",
2088 printf(
"Supported services:\n");
2096 "Force mkfs to override found filesystem",
2099 cctx->cc_force =
true;
2101 M0_FORMATARG(
'Q',
"Minimum length of TM receive queue",
2102 "%i", &
cctx->cc_recv_queue_min_length),
2104 &
cctx->cc_max_rpc_msg_size),
2115 &
cctx->cc_mds_eps,
s);
2123 &
cctx->cc_stats_svc_epx,
s);
2126 " endpoint addresses",
2130 &
cctx->cc_ios_eps,
s);
2135 &
cctx->cc_pool_width),
2139 cctx->cc_daemon =
true;
2149 cctx->cc_sns_buf_nr =
n;
2155 cctx->cc_enable_finj =
true;
2240 M0_NUMBERARG(
'y',
"BE tx group freeze timeout min, ms",
2246 M0_NUMBERARG(
'Y',
"BE tx group freeze timeout max, ms",
2257 M0_STRINGARG(
'c',
"Path to the configuration database",
2276 sprintf(tmp_buf,
"%s-%d",
s, (
int)
m0_pid());
2284 M0_VOIDARG(
'U',
"Use confc API instead of `-d`" 2285 " to obtain device configuration",
2291 LAMBDA(
void, (int64_t length)
2306 " e.g. transport:address",
2316 M0_VOIDARG(
'I',
"Disable direct I/O for data",
2321 M0_VOIDARG(
'j',
"Enable fault injection service (FIS)",
2338 return M0_RC(rc_getops ?:
rc);
2363 if (
cctx->cc_reqh_ctx.rc_confdb !=
NULL) {
2386 if (
cctx->cc_pools_common.pc_confc !=
NULL)
2410 if (kill(getpid(), signum) != 0)
2554 cctx->cc_setup_env_argc,
2555 cctx->cc_setup_env_argv));
2571 if (
cctx->cc_no_conf)
2573 if (
cctx->cc_reqh_ctx.rc_confdb ==
NULL)
2583 if (
cctx->cc_no_conf)
2587 if (
cctx->cc_no_conf)
2590 &
cctx->cc_conf_root);
2595 if (
cctx->cc_no_conf)
2599 if (
cctx->cc_no_conf)
2603 if (
cctx->cc_no_conf)
2606 cctx->cc_conf_root));
2608 if (
cctx->cc_no_conf)
2611 cctx->cc_args.ca_argv));
2613 if (
cctx->cc_no_conf)
2615 if (
cctx->cc_reqh_ctx.rc_confdb !=
NULL)
2619 if (
cctx->cc_no_conf)
2624 if (
cctx->cc_no_conf)
2629 if (
cctx->cc_no_conf)
2631 if (
cctx->cc_pools_common.pc_md_redundancy > 0)
2635 if (
cctx->cc_no_conf)
2641 if (
cctx->cc_no_conf)
2663 if (
cctx->cc_mkfs) {
2676 if (!
cctx->cc_no_conf) {
2699 cctx->cc_skip_pools_and_ha_update =
cctx->cc_no_conf ||
2701 cctx->cc_no_all2all_connections;
2704 if (
cctx->cc_skip_pools_and_ha_update)
2707 &
cctx->cc_conf_root);
2712 if (
cctx->cc_skip_pools_and_ha_update)
2716 if (
cctx->cc_skip_pools_and_ha_update)
2722 if (
cctx->cc_skip_pools_and_ha_update)
2725 return M0_RC(-EINVAL);
2728 if (
cctx->cc_skip_pools_and_ha_update)
2793 if (
cctx->cc_ha_is_started)
2794 cctx->cc_ha_was_started =
true;
2801 if (
cctx->cc_ha_was_started &&
2808 if (
cctx->cc_no_conf)
2835 if (
cctx->cc_ha_was_started)
2839 if (
cctx->cc_pools_common.pc_confc !=
NULL)
2843 if (
cctx->cc_pools_common.pc_confc !=
NULL)
2882 if (
cctx->cc_pools_common.pc_confc !=
NULL)
2888 if (
cctx->cc_pools_common.pc_confc !=
NULL)
2898 cctx->cc_ha_was_started =
cctx->cc_ha_is_started;
2918 #define CS_MODULE_LEVEL(level) [level] = { \ 2919 .ml_name = #level, \ 2920 .ml_enter = cs_level_enter, \ 2921 .ml_leave = cs_level_leave, \ 2970 #undef CS_MODULE_LEVEL 2979 cctx->cc_setup_env_argc = argc;
2980 cctx->cc_setup_env_argv = argv;
3000 size_t xprts_nr, FILE *
out,
bool mkfs)
3011 cctx->cc_xprts_nr = xprts_nr;
3013 cctx->cc_mkfs = mkfs;
3014 cctx->cc_force =
false;
3015 cctx->cc_no_all2all_connections =
false;
3016 cctx->cc_sns_buf_nr = 1 << 6;
3020 m0_motr_bob_init(
cctx);
3024 m0_motr_bob_fini(
cctx);
3034 m0_motr_bob_fini(
cctx);
3050 yaml_document_t *doc;
3052 yaml_node_t *s_node;
3053 yaml_node_item_t *
item;
3061 doc = &
stob->s_sfile.sf_document;
3064 if (!
stob->s_sfile.sf_is_initialised)
3066 for (
node = doc->nodes.start; node < doc->
nodes.top; ++
node) {
3069 s_node = yaml_document_get_node(doc, *
item);
3073 if (cid == dev_id) {
3087 #undef M0_TRACE_SUBSYSTEM m0_bcount_t tgc_payload_max
const struct m0_conf_obj_type * m0_conf_obj_type(const struct m0_conf_obj *obj)
M0_INTERNAL int m0_reqh_service_state_get(const struct m0_reqh_service *s)
#define M0_GETOPTS(progname, argc, argv,...)
static void cs_buffer_pool_fini(struct m0_motr *cctx)
M0_INTERNAL uint64_t m0_process(void)
M0_INTERNAL void m0_net_buffer_pool_fini(struct m0_net_buffer_pool *pool)
M0_INTERNAL void m0_mdstore_fini(struct m0_mdstore *md)
M0_INTERNAL void m0_reqh_be_fini(struct m0_reqh *reqh)
static void cs_ha_process_event(struct m0_motr *cctx, enum m0_conf_ha_process_event event)
M0_INTERNAL void m0_pools_common_fini(struct m0_pools_common *pc)
struct m0_be_domain * bs_domain
M0_INTERNAL int cs_conf_storage_init(struct cs_stobs *stob, struct m0_storage_devs *devs, bool force)
void m0_rpc_machine_fini(struct m0_rpc_machine *machine)
m0_time_t bec_group_freeze_timeout_max
#define M0_ALLOC_ARR(arr, nr)
M0_INTERNAL struct m0_reqh_service * m0_reqh_service_lookup(const struct m0_reqh *reqh, const struct m0_fid *fid)
static int reqh_services_start(struct m0_reqh_context *rctx, struct m0_motr *cctx)
m0_bcount_t rc_addb_record_file_size
void m0_net_domain_fini(struct m0_net_domain *dom)
M0_INTERNAL int m0_be_ut_backend_init_cfg(struct m0_be_ut_backend *ut_be, const struct m0_be_domain_cfg *cfg, bool mkfs)
struct m0_cob_domain * md_dom
struct m0_reqh * m0_cs_reqh_get(struct m0_motr *cctx)
M0_INTERNAL int m0_motr_ha_start(struct m0_motr_ha *mha)
m0_bcount_t rc_be_tx_group_reg_size_max
M0_INTERNAL int m0_cob_domain_mkfs(struct m0_cob_domain *dom, const struct m0_fid *rootfid, struct m0_be_tx *tx)
M0_INTERNAL void m0_reqh_service_stop(struct m0_reqh_service *service)
static void cs_rpc_machines_fini(struct m0_reqh *reqh)
struct m0_pdclust_attr pvs_attr
static void cs_rconfc_fatal_cb(struct m0_rconfc *rconfc)
static int cs_level_enter(struct m0_module *module)
static int cs_reqh_ctx_init(struct m0_motr *cctx)
m0_bcount_t rc_be_tx_group_reg_nr_max
static int reqh_context_services_init(struct m0_reqh_context *rctx, struct m0_motr *cctx)
static int ep_and_xprt_append(struct m0_tl *head, const char *ep)
M0_INTERNAL int m0_conf_full_load(struct m0_conf_root *r)
struct m0_cob_domain_id rc_cdom_id
m0_bcount_t rc_be_tx_group_tx_nr_max
M0_INTERNAL int m0_mdstore_init(struct m0_mdstore *md, struct m0_be_seg *db, bool init_root)
#define M0_REQH_INIT(reqh,...)
M0_INTERNAL void m0_uuid_generate(struct m0_uint128 *u)
struct m0_net_buffer_pool cs_buffer_pool
M0_INTERNAL int m0_motr_stob_reopen(struct m0_reqh *reqh, struct m0_poolmach *pm, uint32_t dev_id)
M0_INTERNAL void m0_storage_dev_attach(struct m0_storage_dev *dev, struct m0_storage_devs *devs)
static void cs_conf_fini(struct m0_motr *cctx)
static int cs_args_parse(struct m0_motr *cctx, int argc, char **argv)
static uint32_t max_rpc_msg_size
struct m0_be_0type_seg_cfg bc_seg0_cfg
static struct m0_net_xprt * cs_xprt_lookup(const char *xprt_name, struct m0_net_xprt **xprts, size_t xprts_nr)
static struct m0_sm_group * grp
struct m0_conf_obj rt_obj
static struct m0_motr_ha_cfg motr_ha_cfg
#define M0_LOG(level,...)
M0_INTERNAL void m0_reqh_layouts_cleanup(struct m0_reqh *reqh)
static int cs_reqh_start(struct m0_reqh_context *rctx)
M0_INTERNAL void m0_reqh_service_prepare_to_stop(struct m0_reqh_service *service)
enum m0_trace_level level
static void be_seg_init(struct m0_be_ut_backend *be, m0_bcount_t size, bool preallocate, bool format, const char *stob_create_cfg, struct m0_be_seg **out)
M0_INTERNAL int m0_file_read(const char *path, char **out)
const struct m0_conf_obj_type M0_CONF_PVER_TYPE
M0_INTERNAL int m0_stob_domain_destroy(struct m0_stob_domain *dom)
static void cs_storage_devs_fini(void)
static void cs_dtm0_fini(struct m0_reqh_context *rctx)
M0_INTERNAL const char * m0_cs_stypes[M0_STOB_TYPE_NR]
int m0_cs_setup_env(struct m0_motr *cctx, int argc, char **argv)
static struct net_test_cmd_node * node
static void cs_ha_stop(struct m0_motr *cctx)
static uint32_t cs_domain_tms_nr(struct m0_reqh_context *rctx, struct m0_net_domain *dom)
M0_INTERNAL void m0_dtx_init(struct m0_dtx *tx, struct m0_be_domain *be_domain, struct m0_sm_group *sm_group)
static struct m0_uint128 prefix
static bool m0_is_po2(uint64_t val)
void m0_cs_fini(struct m0_motr *cctx)
#define m0_strcaseeq(a, b)
M0_INTERNAL void cs_service_fini(struct m0_reqh_service *service)
static void leave(struct m0_locality_chore *chore, struct m0_locality *loc, void *place)
M0_INTERNAL void m0_rwlock_write_lock(struct m0_rwlock *lock)
M0_INTERNAL int m0_conf_diter_next_sync(struct m0_conf_diter *it, bool(*filter)(const struct m0_conf_obj *obj))
char * but_stob_domain_location
m0_time_t rc_be_tx_group_freeze_timeout_max
bool rc_be_seg_preallocate
static void cs_help(FILE *out, const char *progname)
M0_INTERNAL void m0_rconfc_stop_sync(struct m0_rconfc *rconfc)
uint32_t bc_zone_pcnt[M0_BAP_NR]
M0_INTERNAL int m0_dtm0_domain_init(struct m0_dtm0_domain *dod, struct m0_dtm0_domain_cfg *dod_cfg)
M0_INTERNAL void m0_net_xprt_default_set(const struct m0_net_xprt *xprt)
M0_INTERNAL uint8_t m0_fid_tget(const struct m0_fid *fid)
static struct m0_rpc_client_ctx cctx
static struct m0_be_emap_cursor it
struct m0_conf_obj pv_obj
static int cs_be_init(struct m0_reqh_context *rctx, struct m0_be_ut_backend *be, const char *name, bool preallocate, bool format, struct m0_be_seg **out)
M0_INTERNAL void m0_rconfc_fatal_cb_set(struct m0_rconfc *rconfc, m0_rconfc_cb_t cb)
static void cs_usage(FILE *out, const char *progname)
static int cs_rpc_machines_init(struct m0_motr *cctx)
M0_INTERNAL int m0_stob_linux_reopen(struct m0_stob_id *stob_id, const char *f_path)
volatile sig_atomic_t gotsignal
static char * cs_storage_ldom_location_gen(const char *stob_path)
M0_INTERNAL void m0_be_ut_backend_seg_add2(struct m0_be_ut_backend *ut_be, m0_bcount_t size, bool preallocate, const char *stob_create_cfg, struct m0_be_seg **out)
M0_INTERNAL struct m0 * m0_get(void)
static int process_fid_parse(const char *str, struct m0_fid *fid)
static void cs_reqh_storage_fini(struct m0_reqh_context *rctx)
#define container_of(ptr, type, member)
static const struct m0_modlev cs_module_levels[]
M0_INTERNAL int cs_service_init(const char *name, struct m0_reqh_context *rctx, struct m0_reqh *reqh, struct m0_fid *fid)
M0_INTERNAL int m0_pools_setup(struct m0_pools_common *pc, const struct m0_fid *profile, struct m0_sm_group *sm_grp, struct m0_dtm *dtm)
static int cs_storage_ldom_destroy(const char *stob_path, const char *str_cfg_init)
struct m0_be_tx_credit bec_tx_size_max
M0_INTERNAL void m0_reqh_fini(struct m0_reqh *reqh)
M0_INTERNAL int m0_motr_ha_init(struct m0_motr_ha *mha, struct m0_motr_ha_cfg *mha_cfg)
static void cs_motr_fini(struct m0_motr *cctx)
M0_INTERNAL struct m0_rpc_machine * m0_motr_to_rmach(struct m0_motr *motr)
M0_INTERNAL bool m0_fid_is_set(const struct m0_fid *fid)
static void cs_xprts_list(FILE *out, struct m0_net_xprt **xprts, size_t xprts_nr)
static struct m0_rpc_item * item
M0_INTERNAL int m0_reqh_addb2_init(struct m0_reqh *reqh, const char *location, uint64_t key, bool mkfs, bool force, m0_bcount_t size)
static int cs_ha_init(struct m0_motr *cctx)
const char * rc_dfilepath
struct m0_be_ut_backend rc_be
M0_INTERNAL int m0_dtx_done_sync(struct m0_dtx *tx)
#define M0_VOIDARG(ch, desc, func)
M0_INTERNAL void m0_storage_devs_use_directio(struct m0_storage_devs *devs, bool directio)
static int cs_be_dom_cfg_zone_pcnt_fill(struct m0_reqh *reqh, struct m0_be_domain_cfg *dom_cfg)
m0_bcount_t rc_be_tx_reg_size_max
M0_INTERNAL int m0_net_lnet_ep_addr_net_cmp(const char *addr1, const char *addr2)
M0_INTERNAL struct m0_reqh_service_type * m0_reqh_service_type_find(const char *sname)
M0_TL_DESCR_DEFINE(cs_buffer_pools, "buffer pools in the motr context", static, struct cs_buffer_pool, cs_bp_linkage, cs_bp_magic, M0_CS_BUFFER_POOL_MAGIC, M0_CS_BUFFER_POOL_HEAD_MAGIC)
M0_INTERNAL void m0_rwlock_init(struct m0_rwlock *lock)
M0_INTERNAL void m0_reqh_shutdown_wait(struct m0_reqh *reqh)
M0_INTERNAL int m0_fi_init(void)
M0_INTERNAL void m0_motr_ha_disconnect(struct m0_motr_ha *mha)
#define M0_NUMBERARG(ch, desc, func)
#define M0_CHECK_EX(cond)
M0_INTERNAL int m0_confc_root_open(struct m0_confc *confc, struct m0_conf_root **root)
M0_INTERNAL void m0_cob_tx_credit(struct m0_cob_domain *dom, enum m0_cob_op optype, struct m0_be_tx_credit *accum)
m0_time_t rc_be_tx_group_freeze_timeout_min
static int head(struct m0_sm *mach)
#define M0_BE_TX_CREDIT(nr, size)
static void cs_ha_connect(struct m0_motr *cctx)
struct m0_reqh_context rctx
M0_INTERNAL void m0_be_ut_backend_seg_del(struct m0_be_ut_backend *ut_be, struct m0_be_seg *seg)
struct m0_reqh * bec_reqh
static void cs_storage_fini(struct cs_stobs *stob)
M0_INTERNAL void m0_sm_group_unlock(struct m0_sm_group *grp)
#define CS_MODULE_LEVEL(level)
struct m0_storage_devs i_storage_devs
M0_INTERNAL bool m0_reqh_service_is_registered(const char *sname)
#define M0_STRINGARG(ch, desc, func)
void m0_build_info_print(void)
M0_BOB_DEFINE(extern, &cs_eps_bob, cs_endpoint_and_xprt)
struct m0_be_log_store_cfg lc_store_cfg
M0_INTERNAL int m0_stob_domain_create(const char *location, const char *str_cfg_init, uint64_t dom_key, const char *str_cfg_create, struct m0_stob_domain **out)
static void cs_net_domains_fini(struct m0_motr *cctx)
static int cs_storage_setup(struct m0_motr *cctx)
M0_INTERNAL int m0_storage_dev_new(struct m0_storage_devs *devs, uint64_t cid, const char *path, uint64_t size, struct m0_conf_sdev *conf_sdev, bool force, struct m0_storage_dev **dev)
void m0_be_ut_backend_cfg_default(struct m0_be_domain_cfg *cfg)
M0_INTERNAL bool m0_reqh_invariant(const struct m0_reqh *reqh)
static int64_t max64(int64_t a, int64_t b)
uint32_t rc_recv_queue_min_length
static int _args_parse(struct m0_motr *cctx, int argc, char **argv)
#define M0_ERR_INFO(rc, fmt,...)
static struct m0_bob_type ndom_bob
return M0_ERR(-EOPNOTSUPP)
m0_bcount_t rc_be_tx_payload_size_max
M0_INTERNAL const struct m0_fid M0_MDSERVICE_SLASH_FID
static const char * stob_file_path_get(yaml_document_t *doc, yaml_node_t *node)
static int cs_dtm0_init(struct m0_reqh_context *rctx)
M0_INTERNAL struct m0_confc * m0_reqh2confc(struct m0_reqh *reqh)
static const struct socktype stype[]
static uint32_t cs_dom_tm_min_recv_queue_total(struct m0_reqh_context *rctx, struct m0_net_domain *dom)
#define m0_tl_teardown(name, head, obj)
const char * bsc_stob_create_cfg
struct m0_fid rt_imeta_pver
#define M0_FORMATARG(ch, desc, fmt, ptr)
M0_INTERNAL void m0_storage_devs_lock(struct m0_storage_devs *devs)
m0_bcount_t rc_be_tx_group_payload_size_max
static bool stype_is_valid(const char *stype)
static int cs_buffer_pool_setup(struct m0_motr *cctx)
const struct m0_fid_type cot_ftype
M0_INTERNAL int m0_reqh_conf_setup(struct m0_reqh *reqh, struct m0_confc_args *args)
static struct m0_stob * stob
struct m0_be_seg * rc_beseg
bool i_disable_addb2_storage
struct m0_be_tx_credit tgc_size_max
static struct m0_confc * confc
const struct m0_net_xprt * nd_xprt
m0_bcount_t rc_be_seg_size
static int cs_stob_file_load(const char *dfile, struct cs_stobs *stob)
static int cs_reqh_ctx_validate(struct m0_motr *cctx)
static bool reqh_context_invariant(const struct m0_reqh_context *rctx)
M0_INTERNAL int m0_rpc_net_buffer_pool_setup(struct m0_net_domain *ndom, struct m0_net_buffer_pool *app_pool, uint32_t bufs_nr, uint32_t tm_nr)
union m0_conf_pver::@122 pv_u
static bool reqh_ctx_services_are_valid(const struct m0_reqh_context *rctx)
static struct net_test_cmd_node nodes[NTC_MULTIPLE_NODES]
M0_INTERNAL void m0_reqh_service_fini(struct m0_reqh_service *service)
static struct m0_thread t[8]
#define bob_of(ptr, type, field, bt)
static int cs_conf_setup(struct m0_motr *cctx)
M0_INTERNAL struct m0_reqh_context * m0_cs_reqh_context(struct m0_reqh *reqh)
M0_INTERNAL uint32_t m0_rpc_bufs_nr(uint32_t len, uint32_t tms_nr)
struct m0_tl rh_rpc_machines
static struct m0_stob_domain * dom
M0_INTERNAL bool m0_reqh_service_invariant(const struct m0_reqh_service *svc)
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 void m0_module_setup(struct m0_module *module, const char *name, const struct m0_modlev *level, int level_nr, struct m0 *instance)
M0_INTERNAL int cs_conf_device_reopen(struct m0_poolmach *pm, struct cs_stobs *stob, uint32_t dev_id)
M0_INTERNAL int m0_rpc_machine_init(struct m0_rpc_machine *machine, struct m0_net_domain *net_dom, const char *ep_addr, struct m0_reqh *reqh, struct m0_net_buffer_pool *receive_pool, uint32_t colour, m0_bcount_t msg_size, uint32_t queue_len)
struct m0_be_tx_credit tx_betx_cred
struct m0_net_xprt * m0_net_xprt_default_get(void)
unsigned long tgc_tx_nr_max
M0_INTERNAL void m0_pools_service_ctx_destroy(struct m0_pools_common *pc)
static void process_fid_generate_conditional(struct m0_reqh_context *rctx)
static int cmp(const struct m0_ut_suite **s0, const struct m0_ut_suite **s1)
M0_INTERNAL int m0_reqh_mdpool_layout_build(struct m0_reqh *reqh)
void * m0_alloc(size_t size)
static int cs_endpoint_validate(struct m0_motr *cctx, const char *ep, const char *xprt_name)
static const char * progname
static int cs_storage_prepare(struct m0_reqh_context *rctx, bool erase)
struct m0_reqh_service_type m0_ss_svc_type
M0_INTERNAL void cs_be_fini(struct m0_be_ut_backend *be)
static int m0_rconfc_start_sync(struct m0_rconfc *rconfc)
M0_INTERNAL int m0_conf_confc_ha_update(struct m0_confc *confc)
static void cs_reqh_stop(struct m0_reqh_context *rctx)
M0_INTERNAL struct m0_confc * m0_motr2confc(struct m0_motr *motr)
M0_INTERNAL void m0_dtx_fini(struct m0_dtx *tx)
M0_INTERNAL void m0_rconfc_lock(struct m0_rconfc *rconfc)
M0_INTERNAL void m0_ios_net_buffer_pool_size_set(uint32_t buffer_pool_size)
M0_INTERNAL int cs_conf_to_args(struct cs_args *dest, struct m0_conf_root *root)
struct m0_sm_group * lo_grp
M0_INTERNAL m0_bcount_t m0_net_domain_get_max_buffer_size(struct m0_net_domain *dom)
M0_INTERNAL struct m0_net_domain * m0_cs_net_domain_locate(struct m0_motr *cctx, const char *xprt_name)
M0_INTERNAL void m0_reqh_post_storage_fini_svcs_stop(struct m0_reqh *reqh)
const char * rc_be_seg_path
M0_INTERNAL void m0_rwlock_write_unlock(struct m0_rwlock *lock)
M0_INTERNAL void m0_motr_ha_connect(struct m0_motr_ha *mha)
struct ping_xprt xprts[1]
M0_INTERNAL void m0_storage_devs_fini(struct m0_storage_devs *devs)
const char * lsc_stob_create_cfg
#define M0_CONF_CAST(ptr, type)
static bool pver_is_actual(const struct m0_conf_obj *obj)
M0_INTERNAL int m0_reqh_service_setup(struct m0_reqh_service **out, struct m0_reqh_service_type *stype, struct m0_reqh *reqh, struct m0_reqh_context *rctx, const struct m0_fid *fid)
M0_INTERNAL int m0_fid_sscanf(const char *s, struct m0_fid *fid)
static struct m0_net_buffer_pool * cs_buffer_pool_get(struct m0_motr *cctx, struct m0_net_domain *ndom)
uint32_t rc_max_rpc_msg_size
struct m0_be_domain but_dom
static struct m0_bob_type rhctx_bob
M0_INTERNAL struct m0_storage_devs * m0_cs_storage_devs_get(void)
M0_INTERNAL void m0_storage_devs_detach_all(struct m0_storage_devs *devs)
static int cs_storage_bstore_prepare(const char *stob_path, const char *str_cfg_init, uint64_t dom_key, bool mkfs, struct m0_stob_domain **out)
static bool cs_endpoint_is_duplicate(const struct m0_reqh_context *rctx, const struct m0_net_xprt *xprt, const char *ep)
M0_INTERNAL void m0_rconfc_fini(struct m0_rconfc *rconfc)
M0_INTERNAL int m0_storage_devs_init(struct m0_storage_devs *devs, enum m0_storage_dev_type type, struct m0_be_seg *be_seg, struct m0_stob_domain *bstore_dom, struct m0_reqh *reqh)
M0_INTERNAL int m0_reqh_state_get(struct m0_reqh *reqh)
M0_INTERNAL void m0_stob_domain_fini(struct m0_stob_domain *dom)
struct m0_conf_pver_subtree subtree
M0_INTERNAL int m0_conf_device_cid_to_fid(struct m0_confc *confc, uint64_t cid, struct m0_fid *fid)
m0_bcount_t rc_be_tx_reg_nr_max
struct m0_dtm0_domain rc_dtm0_domain
M0_INTERNAL bool m0_fid_eq(const struct m0_fid *fid0, const struct m0_fid *fid1)
struct m0_net_domain * nbp_ndom
static bool service_is_duplicate(const struct m0_reqh_context *rctx, const char *sname)
M0_INTERNAL struct m0_conf_obj * m0_conf_diter_result(const struct m0_conf_diter *it)
M0_INTERNAL int m0_stob_domain_destroy_location(const char *location)
struct m0_be_domain_cfg but_dom_cfg
#define m0_conf_diter_init(iter, confc, origin,...)
M0_INTERNAL void m0_reqh_start(struct m0_reqh *reqh)
int m0_cs_init(struct m0_motr *cctx, struct m0_net_xprt **xprts, size_t xprts_nr, FILE *out, bool mkfs)
M0_INTERNAL void m0_rconfc_unlock(struct m0_rconfc *rconfc)
M0_INTERNAL int m0_fi_enable_fault_point(const char *str)
M0_INTERNAL struct m0_reqh_service * m0_reqh_service_find(const struct m0_reqh_service_type *st, const struct m0_reqh *reqh)
static bool reqh_context_check(const void *bob)
#define M0_MAGIX_OFFSET(type, field)
static uint32_t min32u(uint32_t a, uint32_t b)
int m0_net_domain_init(struct m0_net_domain *dom, const struct m0_net_xprt *xprt)
M0_INTERNAL int m0_pools_common_init(struct m0_pools_common *pc, struct m0_rpc_machine *rmach)
M0_INTERNAL struct m0_locality * m0_locality0_get(void)
M0_INTERNAL int m0_stob_domain_init(const char *location, const char *str_cfg_init, struct m0_stob_domain **out)
struct m0_reqh_context cc_reqh_ctx
#define M0_FI_ENABLED(tag)
M0_INTERNAL bool m0_tlist_invariant(const struct m0_tl_descr *d, const struct m0_tl *list)
struct m0_ha_dispatcher_cfg mhc_dispatcher_cfg
M0_INTERNAL int m0_mdstore_create(struct m0_mdstore *md, struct m0_sm_group *grp, struct m0_cob_domain_id *id, struct m0_be_domain *bedom, struct m0_be_seg *db)
const struct m0_reqh_service_type * rs_type
static int cs_net_domains_init(struct m0_motr *cctx)
static void cs_stob_types_list(FILE *out)
#define M0_ALLOC_PTR(ptr)
static int stob_file_id_get(yaml_document_t *doc, yaml_node_t *node, uint64_t *id)
m0_time_t bec_group_freeze_timeout_min
static void cs_reqh_shutdown(struct m0_reqh_context *rctx)
M0_INTERNAL void m0_conf_ha_process_event_post(struct m0_ha *ha, struct m0_ha_link *hl, const struct m0_fid *process_fid, uint64_t pid, enum m0_conf_ha_process_event event, enum m0_conf_ha_process_type type)
M0_INTERNAL int m0_pools_service_ctx_create(struct m0_pools_common *pc)
M0_INTERNAL void m0_conf_diter_fini(struct m0_conf_diter *it)
M0_INTERNAL void m0_reqh_service_list_print(void)
static struct m0_bob_type cs_eps_bob
const char * rc_be_log_path
struct cs_stob_file s_sfile
struct m0_conf_obj sd_obj
struct m0_fid * rc_service_fids
const char * rc_be_seg0_path
static struct m0_motr * cs_module2motr(struct m0_module *module)
struct m0_pools_common * rh_pools
M0_INTERNAL void m0_reqh_pre_storage_fini_svcs_stop(struct m0_reqh *reqh)
M0_TL_DEFINE(cs_buffer_pools, static, struct cs_buffer_pool)
static int cs_reqh_mdpool_layouts_setup(struct m0_motr *cctx)
M0_INTERNAL void m0_rwlock_read_lock(struct m0_rwlock *lock)
void m0_be_ut_backend_fini(struct m0_be_ut_backend *ut_be)
M0_INTERNAL void m0_rwlock_fini(struct m0_rwlock *lock)
M0_INTERNAL void m0_reqh_idle_wait_for(struct m0_reqh *reqh, struct m0_reqh_service *service)
M0_INTERNAL void m0_sm_group_lock(struct m0_sm_group *grp)
static int cs_storage_init(const char *stob_type, const char *stob_path, uint64_t dom_key, struct cs_stobs *stob, struct m0_be_seg *seg, bool mkfs, bool force, bool disable_direct_io)
struct m0_be_log_cfg bc_log
static struct m0_rconfc * motr2rconfc(struct m0_motr *motr)
static int cs_daemonize(struct m0_motr *cctx)
M0_INTERNAL void m0_storage_devs_unlock(struct m0_storage_devs *devs)
M0_INTERNAL struct m0_confc * m0_confc_from_obj(const struct m0_conf_obj *obj)
M0_INTERNAL int m0_dtx_open_sync(struct m0_dtx *tx)
static struct m0_be_seg * seg
static struct m0_rconfc * rconfc(struct m0_client *m0c)
int m0_cs_start(struct m0_motr *cctx)
M0_INTERNAL void m0_confc_close(struct m0_conf_obj *obj)
M0_INTERNAL int m0_ep_and_xprt_extract(struct cs_endpoint_and_xprt *epx, const char *ep)
static int be_repair_zone_pcnt_get(struct m0_reqh *reqh, uint32_t *repair_zone_pcnt)
struct m0_rconfc rh_rconfc
M0_INTERNAL int m0_mdstore_destroy(struct m0_mdstore *md, struct m0_sm_group *grp, struct m0_be_domain *bedom)
struct m0_be_tx_group_cfg bec_group_cfg
enum cs_reqh_ctx_states rc_state
static int cs_net_domain_init(struct cs_endpoint_and_xprt *ep, struct m0_motr *cctx)
M0_INTERNAL struct m0_be_seg * m0_be_domain_seg_first(const struct m0_be_domain *dom)
M0_INTERNAL void m0_motr_ha_stop(struct m0_motr_ha *mha)
static void reqh_context_services_fini(struct m0_reqh_context *rctx, struct m0_motr *cctx)
M0_INTERNAL int m0_dtm0_log_create(struct m0_sm_group *grp, struct m0_be_domain *bedom, struct m0_be_seg *seg)
static struct bulkio_params * bp
M0_INTERNAL void m0_dtm0_domain_fini(struct m0_dtm0_domain *dod)
M0_INTERNAL void m0_rwlock_read_unlock(struct m0_rwlock *lock)
const struct m0_conf_obj_type M0_CONF_PROCESS_TYPE
M0_INTERNAL uint64_t m0_pid(void)
M0_INTERNAL int m0_pool_versions_setup(struct m0_pools_common *pc)
static const struct m0_bob_type cs_bob_type
struct m0_net_xprt * xprt
bool rc_disable_direct_io
struct m0_pools_common cc_pools_common
struct m0_mdstore rc_mdstore
static int cs_rpc_machine_init(struct m0_motr *cctx, const char *xprt_name, const char *ep, const uint32_t tm_colour, const uint32_t recv_queue_min_length, const uint32_t max_rpc_msg_size, struct m0_reqh *reqh)
M0_INTERNAL void m0_pool_versions_destroy(struct m0_pools_common *pc)
M0_INTERNAL bool m0_fid_is_valid(const struct m0_fid *fid)
const char * rc_addb_stlocation
M0_INTERNAL void m0_motr_ha_fini(struct m0_motr_ha *mha)
#define m0_tl_find(name, var, head,...)
M0_INTERNAL void m0_fi_fini(void)
static struct m0_reqh * motr2reqh(struct m0_motr *motr)
M0_INTERNAL void m0_reqh_addb2_fini(struct m0_reqh *reqh)
#define m0_tl_for(name, head, obj)
M0_INTERNAL int m0_cs_dix_setup(struct m0_motr *cctx)
M0_INTERNAL int m0_reqh_be_init(struct m0_reqh *reqh, struct m0_be_seg *seg)
static struct m0_addb2_source * s
static void cs_reqh_ctx_fini(struct m0_reqh_context *rctx)
struct m0_be_engine_cfg bc_engine
static struct m0_reqh_service * service[REQH_IN_UT_MAX]
M0_INTERNAL struct m0_motr * m0_cs_ctx_get(struct m0_reqh *reqh)
M0_INTERNAL int cs_conf_services_init(struct m0_motr *cctx)
M0_INTERNAL void m0_bob_type_tlist_init(struct m0_bob_type *bt, const struct m0_tl_descr *td)
M0_INTERNAL void m0_reqh_service_ctxs_shutdown_prepare(struct m0_reqh *reqh)
static void cs_ha_fini(struct m0_motr *cctx)
m0_bcount_t rc_be_log_size
M0_INTERNAL void m0_ep_and_xprt_fini(struct cs_endpoint_and_xprt *epx)
static int cs_reqh_ctx_services_validate(struct m0_motr *cctx)
M0_INTERNAL void m0_module_fini(struct m0_module *module, int level)
static int cs_storage_devs_init(struct cs_stobs *stob, enum m0_storage_dev_type type, struct m0_be_seg *seg, const char *stob_path, bool force, bool disable_direct_io)
static struct m0_be_ut_backend be
static void cs_motr_init(struct m0_motr *cctx)
static void cs_level_leave(struct m0_module *module)
M0_INTERNAL void m0_cs_gotsignal_reset(void)
static bool bad_address(char *addr)
M0_INTERNAL int m0_module_init(struct m0_module *module, int level)
M0_INTERNAL void m0_fid_tassume(struct m0_fid *fid, const struct m0_fid_type *ft)
#define M0_IMPOSSIBLE(fmt,...)
m0_bcount_t bec_tx_payload_max
M0_INTERNAL void m0_pools_destroy(struct m0_pools_common *pc)
struct m0_module cc_module