Example #1
0
/*
 * rpmemd_req_close -- handle close request
 */
static int
rpmemd_req_close(struct rpmemd_obc *obc, void *arg)
{
    RPMEMD_ASSERT(arg != NULL);
    RPMEMD_LOG(NOTICE, "close request");

    struct rpmemd *rpmemd = (struct rpmemd *)arg;

    rpmemd->closing = 1;

    int ret;
    int status = 0;

    if (!rpmemd->pool) {
        RPMEMD_LOG(ERR, "pool not opened");
        status = RPMEM_ERR_FATAL;
        return rpmemd_obc_close_resp(rpmemd->obc, status);
    }

    ret = rpmemd_fip_stop(rpmemd);
    if (ret) {
        status = RPMEM_ERR_FATAL;
    } else {
        rpmemd_fip_close(rpmemd->fip);
        rpmemd_fip_fini(rpmemd->fip);
    }

    int remove = rpmemd->created && status;
    ret = rpmemd_close_pool(rpmemd, remove);

    RPMEMD_LOG(NOTICE, "close request response (status = %u)", status);
    ret = rpmemd_obc_close_resp(rpmemd->obc, status);

    return ret;
}
Example #2
0
/*
 * rpmemd_req_close -- handle close request
 */
static int
rpmemd_req_close(struct rpmemd_obc *obc, void *arg)
{
	RPMEMD_ASSERT(arg != NULL);

	struct rpmemd *rpmemd = (struct rpmemd *)arg;

	rpmemd->closing = 1;

	int ret;
	int status = 0;

	if (!rpmemd->pool) {
		RPMEMD_LOG(ERR, "pool not opened");
		status = RPMEM_ERR_FATAL;
		return rpmemd_obc_close_resp(rpmemd->obc, status);
	}

	rpmemd_db_pool_close(rpmemd->db, rpmemd->pool);

	ret = rpmemd_fip_process_stop(rpmemd->fip);
	if (ret) {
		RPMEMD_LOG(ERR, "!stopping fip process failed");
		status = errno;
	}

	ret = rpmemd_obc_close_resp(rpmemd->obc, status);
	if (!ret)
		rpmemd_fip_wait_close(rpmemd->fip, -1);

	rpmemd_fip_close(rpmemd->fip);
	rpmemd_fip_fini(rpmemd->fip);

	return ret;
}
Example #3
0
/*
 * req_close -- process close request
 */
static int
req_close(struct rpmemd_obc *obc, void *arg)
{
	UT_ASSERTne(arg, NULL);

	struct req_arg *args = arg;
	args->closing = 1;

	return rpmemd_obc_close_resp(obc, 0);
}
Example #4
0
/*
 * req_cb_close -- callback for close request operation
 *
 * This function behaves according to arguments specified via
 * struct req_cb_arg.
 */
static int
req_cb_close(struct rpmemd_obc *obc, void *arg)
{
	UT_ASSERTne(arg, NULL);

	struct req_cb_arg *args = arg;

	args->types |= (1 << RPMEM_MSG_TYPE_CLOSE);

	int ret = args->ret;

	if (args->resp)
		ret = rpmemd_obc_close_resp(obc, args->status);

	if (args->force_ret)
		ret = args->ret;

	return ret;
}