/* * test_open -- test rpmemd_db_pool_open() */ static int test_open(const char *root_dir, const char *pool_desc) { struct rpmem_pool_attr attr1, attr2; struct rpmemd_db_pool *prp; struct rpmemd_db *db; int ret; memset(&attr1, 0, sizeof(attr1)); attr1.major = 1; db = rpmemd_db_init(root_dir, POOL_MODE); if (db == NULL) { FAILED_FUNC("rpmemd_db_init"); } prp = rpmemd_db_pool_create(db, pool_desc, 0, &attr1); if (prp == NULL) { FAILED_FUNC("rpmemd_db_pool_create"); } rpmemd_db_pool_close(db, prp); prp = rpmemd_db_pool_open(db, pool_desc, 0, &attr2); if (prp == NULL) { FAILED_FUNC("rpmemd_db_pool_open"); } rpmemd_db_pool_close(db, prp); ret = rpmemd_db_pool_remove(db, pool_desc); if (ret) { FAILED_FUNC("rpmemd_db_pool_remove"); } rpmemd_db_fini(db); compare_attr(&attr1, &attr2); return 0; }
/* * test_init -- test rpmemd_db_init() and rpmemd_db_fini() */ static int test_init(const char *root_dir) { struct rpmemd_db *db; db = rpmemd_db_init(root_dir, POOL_MODE); if (db == NULL) { FAILED_FUNC("rpmemd_db_init"); } rpmemd_db_fini(db); return 0; }
/* * test_create -- test rpmemd_db_pool_create() */ static int test_create(const char *root_dir, const char *pool_desc) { struct rpmem_pool_attr attr; struct rpmemd_db_pool *prp; struct rpmemd_db *db; int ret; db = rpmemd_db_init(root_dir, POOL_MODE); if (db == NULL) { FAILED_FUNC("rpmemd_db_init"); } prp = rpmemd_db_pool_create(db, pool_desc, 0, &attr); if (prp == NULL) { FAILED_FUNC("rpmemd_db_pool_create"); } rpmemd_db_pool_close(db, prp); ret = rpmemd_db_pool_remove(db, pool_desc); if (ret) { FAILED_FUNC("rpmemd_db_pool_remove"); } rpmemd_db_fini(db); return 0; }
int main(int argc, char *argv[]) { util_init(); int send_status = 1; int ret = 1; struct rpmemd *rpmemd = calloc(1, sizeof(*rpmemd)); if (!rpmemd) { RPMEMD_LOG(ERR, "!calloc"); goto err_rpmemd; } rpmemd->obc = rpmemd_obc_init(STDIN_FILENO, STDOUT_FILENO); if (!rpmemd->obc) { RPMEMD_LOG(ERR, "out-of-band connection intitialization"); goto err_obc; } if (rpmemd_log_init(DAEMON_NAME, NULL, 0)) { RPMEMD_LOG(ERR, "logging subsystem initialization failed"); goto err_log_init; } if (rpmemd_config_read(&rpmemd->config, argc, argv) != 0) { RPMEMD_LOG(ERR, "reading configuration failed"); goto err_config; } rpmemd_log_close(); rpmemd_log_level = rpmemd->config.log_level; if (rpmemd_log_init(DAEMON_NAME, rpmemd->config.log_file, rpmemd->config.use_syslog)) { RPMEMD_LOG(ERR, "logging subsystem initialization" " failed (%s, %d)", rpmemd->config.log_file, rpmemd->config.use_syslog); goto err_log_init_config; } RPMEMD_LOG(INFO, "%s version %s", DAEMON_NAME, SRCVERSION); rpmemd->persist = pmem_persist; rpmemd->persist_method = rpmemd_get_pm(&rpmemd->config); rpmemd->nthreads = rpmemd_get_nthreads(); if (!rpmemd->nthreads) { RPMEMD_LOG(ERR, "invalid number of threads -- '%lu'", rpmemd->nthreads); goto err_nthreads; } rpmemd->db = rpmemd_db_init(rpmemd->config.poolset_dir, 0666); if (!rpmemd->db) { RPMEMD_LOG(ERR, "!pool set db initialization"); goto err_db_init; } if (rpmemd->config.rm_poolset) { RPMEMD_LOG(INFO, "removing '%s'", rpmemd->config.rm_poolset); if (rpmemd_db_pool_remove(rpmemd->db, rpmemd->config.rm_poolset, rpmemd->config.force)) { RPMEMD_LOG(ERR, "removing '%s' failed", rpmemd->config.rm_poolset); } else { RPMEMD_LOG(NOTICE, "removed '%s'", rpmemd->config.rm_poolset); ret = 0; } send_status = 0; goto out_rm; } ret = rpmemd_obc_status(rpmemd->obc, 0); if (ret) { RPMEMD_LOG(ERR, "writing status failed"); goto err_status; } rpmemd_print_info(rpmemd); while (!ret) { ret = rpmemd_obc_process(rpmemd->obc, &rpmemd_req, rpmemd); if (ret) { RPMEMD_LOG(ERR, "out-of-band connection" " process failed"); goto err; } if (rpmemd->closing) break; } rpmemd_db_fini(rpmemd->db); rpmemd_config_free(&rpmemd->config); rpmemd_log_close(); rpmemd_obc_fini(rpmemd->obc); free(rpmemd); return 0; err: rpmemd_req_cleanup(rpmemd); err_status: out_rm: rpmemd_db_fini(rpmemd->db); err_db_init: err_nthreads: err_log_init_config: rpmemd_config_free(&rpmemd->config); err_config: rpmemd_log_close(); err_log_init: if (send_status) { if (rpmemd_obc_status(rpmemd->obc, (uint32_t)errno)) RPMEMD_LOG(ERR, "writing status failed"); } rpmemd_obc_fini(rpmemd->obc); err_obc: free(rpmemd); err_rpmemd: return ret; }
int main(int argc, char *argv[]) { int ret; util_init(); struct rpmemd_config config; rpmemd_log_init(DAEMON_NAME, NULL, 0); if (rpmemd_config_read(&config, argc, argv) != 0) { ret = 1; goto err_config; } rpmemd_log_level = config.log_level; rpmemd_log_init(DAEMON_NAME, config.log_file, config.use_syslog); RPMEMD_LOG(INFO, "%s version %s", DAEMON_NAME, SRCVERSION); struct rpmemd_obc *obc = rpmemd_obc_init(STDIN_FILENO, STDOUT_FILENO); if (!obc) { RPMEMD_LOG(ERR, "out-of-band connection intitialization"); ret = 1; goto err_obc; } struct rpmemd *rpmemd = calloc(1, sizeof(*rpmemd)); if (!rpmemd) { RPMEMD_LOG(ERR, "!calloc"); ret = rpmemd_obc_status(obc, (uint32_t)errno); if (ret) RPMEMD_LOG(ERR, "writing status failed"); goto err_rpmemd; } rpmemd->persist = pmem_persist; rpmemd->persist_method = rpmemd_get_pm(&config); rpmemd->nthreads = rpmemd_get_nthreads(); if (!rpmemd->nthreads) { RPMEMD_LOG(ERR, "invalid number of threads -- '%lu'", rpmemd->nthreads); ret = rpmemd_obc_status(obc, (uint32_t)errno); if (ret) RPMEMD_LOG(ERR, "writing status failed"); goto err_nthreads; } rpmemd->db = rpmemd_db_init(config.poolset_dir, 0666); if (!rpmemd->db) { RPMEMD_LOG(ERR, "!pool set db initialization"); ret = rpmemd_obc_status(obc, (uint32_t)errno); if (ret) RPMEMD_LOG(ERR, "writing status failed"); goto err_db_init; } rpmemd->obc = obc; ret = rpmemd_obc_status(obc, 0); if (ret) { RPMEMD_LOG(ERR, "writing status failed"); goto err_status; } while (!ret) { ret = rpmemd_obc_process(obc, &rpmemd_req, rpmemd); if (ret) { RPMEMD_LOG(ERR, "out-of-band connection" " process failed"); goto err; } if (rpmemd->closing) break; } rpmemd_obc_fini(rpmemd->obc); rpmemd_db_fini(rpmemd->db); free(rpmemd); rpmemd_log_close(); rpmemd_config_free(&config); return 0; err: err_status: err_db_init: err_nthreads: free(rpmemd); err_rpmemd: rpmemd_obc_fini(obc); err_obc: rpmemd_log_close(); rpmemd_config_free(&config); err_config: return ret; }