Commit 682e7c17 authored by Tomasz Zawadzki's avatar Tomasz Zawadzki
Browse files

ut/blob: add common function for dirty shutdown



Operation of dirty shutdown of blobstore and reloading
it occurs often enough in UT to provide a common function
to perform it.

Added ut_bs_dirty_load() to facilitate this.

Signed-off-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Change-Id: I0079dfabd64eaec6495db02fe200be1d6116f0c7
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1092


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarPaul Luse <paul.e.luse@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent b8fedfa3
Loading
Loading
Loading
Loading
+28 −81
Original line number Diff line number Diff line
@@ -186,6 +186,26 @@ ut_bs_reload(struct spdk_blob_store **bs, struct spdk_bs_opts *opts)
	g_bserrno = -1;
}

static void
ut_bs_dirty_load(struct spdk_blob_store **bs, struct spdk_bs_opts *opts)
{
	struct spdk_bs_dev *dev;

	/* Dirty shutdown */
	_spdk_bs_free(*bs);

	dev = init_dev();
	/* Load an existing blob store */
	spdk_bs_load(dev, opts, bs_op_with_handle_complete, NULL);
	poll_threads();
	CU_ASSERT(g_bserrno == 0);
	SPDK_CU_ASSERT_FATAL(g_bs != NULL);
	*bs = g_bs;

	g_bs = NULL;
	g_bserrno = -1;
}

static void
blob_init(void)
{
@@ -576,17 +596,7 @@ blob_thin_provision(void)
	 *  and try to recover a valid used_cluster map, that blobstore will
	 *  ignore clusters with index 0 since these are unallocated clusters.
	 */
	_spdk_bs_free(bs);

	/* Load an existing blob store and check if invalid_flags is set */
	dev = init_dev();
	snprintf(bs_opts.bstype.bstype, sizeof(bs_opts.bstype.bstype), "TESTTYPE");
	spdk_bs_load(dev, &bs_opts, bs_op_with_handle_complete, NULL);
	poll_threads();
	CU_ASSERT(g_bserrno == 0);
	SPDK_CU_ASSERT_FATAL(g_bs != NULL);

	bs = g_bs;
	ut_bs_dirty_load(&bs, &bs_opts);

	spdk_bs_open_blob(bs, blobid, blob_op_with_handle_complete, NULL);
	poll_threads();
@@ -3722,17 +3732,7 @@ blob_dirty_shutdown(void)
	g_blob = NULL;
	g_blobid = SPDK_BLOBID_INVALID;

	/* Dirty shutdown */
	_spdk_bs_free(bs);

	/* reload blobstore */
	dev = init_dev();
	spdk_bs_opts_init(&opts);
	spdk_bs_load(dev, &opts, bs_op_with_handle_complete, NULL);
	poll_threads();
	CU_ASSERT(g_bserrno == 0);
	SPDK_CU_ASSERT_FATAL(g_bs != NULL);
	bs = g_bs;
	ut_bs_dirty_load(&bs, &opts);

	/* Get the super blob */
	spdk_bs_get_super(bs, blob_op_with_id_complete, NULL);
@@ -3771,18 +3771,7 @@ blob_dirty_shutdown(void)
	g_blob = NULL;
	g_blobid = SPDK_BLOBID_INVALID;

	/* Dirty shutdown */
	_spdk_bs_free(bs);

	/* reload the blobstore */
	dev = init_dev();
	spdk_bs_opts_init(&opts);
	/* Load an existing blob store */
	spdk_bs_load(dev, &opts, bs_op_with_handle_complete, NULL);
	poll_threads();
	CU_ASSERT(g_bserrno == 0);
	SPDK_CU_ASSERT_FATAL(g_bs != NULL);
	bs = g_bs;
	ut_bs_dirty_load(&bs, &opts);

	spdk_bs_open_blob(bs, blobid1, blob_op_with_handle_complete, NULL);
	poll_threads();
@@ -3834,17 +3823,7 @@ blob_dirty_shutdown(void)
	g_blob = NULL;
	g_blobid = SPDK_BLOBID_INVALID;

	/* Dirty shutdown */
	_spdk_bs_free(bs);

	/* reload the blobstore */
	dev = init_dev();
	spdk_bs_opts_init(&opts);
	spdk_bs_load(dev, &opts, bs_op_with_handle_complete, NULL);
	poll_threads();
	CU_ASSERT(g_bserrno == 0);
	SPDK_CU_ASSERT_FATAL(g_bs != NULL);
	bs = g_bs;
	ut_bs_dirty_load(&bs, &opts);

	spdk_bs_open_blob(bs, blobid2, blob_op_with_handle_complete, NULL);
	poll_threads();
@@ -3871,16 +3850,7 @@ blob_dirty_shutdown(void)

	free_clusters = spdk_bs_free_cluster_count(bs);

	/* Dirty shutdown */
	_spdk_bs_free(bs);
	/* reload the blobstore */
	dev = init_dev();
	spdk_bs_opts_init(&opts);
	spdk_bs_load(dev, &opts, bs_op_with_handle_complete, NULL);
	poll_threads();
	CU_ASSERT(g_bserrno == 0);
	SPDK_CU_ASSERT_FATAL(g_bs != NULL);
	bs = g_bs;
	ut_bs_dirty_load(&bs, &opts);

	spdk_bs_open_blob(bs, blobid2, blob_op_with_handle_complete, NULL);
	poll_threads();
@@ -3964,16 +3934,7 @@ blob_dirty_shutdown(void)

	free_clusters = spdk_bs_free_cluster_count(bs);

	/* Dirty shutdown */
	_spdk_bs_free(bs);
	/* reload the blobstore */
	dev = init_dev();
	spdk_bs_opts_init(&opts);
	spdk_bs_load(dev, &opts, bs_op_with_handle_complete, NULL);
	poll_threads();
	CU_ASSERT(g_bserrno == 0);
	SPDK_CU_ASSERT_FATAL(g_bs != NULL);
	bs = g_bs;
	ut_bs_dirty_load(&bs, &opts);

	spdk_bs_open_blob(bs, blobid2, blob_op_with_handle_complete, NULL);
	poll_threads();
@@ -6436,16 +6397,9 @@ blob_delete_snapshot_power_failure(void)

		/* Do not shut down cleanly. Assumption is that after snapshot deletion
		 * reports success, changes to both blobs should already persisted. */
		_spdk_bs_free(bs);

		dev_reset_power_failure_event();
		ut_bs_dirty_load(&bs, NULL);

		dev = init_dev();
		spdk_bs_load(dev, NULL, bs_op_with_handle_complete, NULL);
		poll_threads();
		CU_ASSERT(g_bserrno == 0);
		SPDK_CU_ASSERT_FATAL(g_bs != NULL);
		bs = g_bs;
		SPDK_CU_ASSERT_FATAL(spdk_bit_array_get(bs->used_clusters, 1));
		SPDK_CU_ASSERT_FATAL(!spdk_bit_array_get(bs->used_clusters, 11));

@@ -6548,16 +6502,9 @@ blob_create_snapshot_power_failure(void)

		/* Do not shut down cleanly. Assumption is that after create snapshot
		 * reports success, both blobs should be power-fail safe. */
		_spdk_bs_free(bs);

		dev_reset_power_failure_event();
		ut_bs_dirty_load(&bs, NULL);

		dev = init_dev();
		spdk_bs_load(dev, NULL, bs_op_with_handle_complete, NULL);
		poll_threads();
		CU_ASSERT(g_bserrno == 0);
		SPDK_CU_ASSERT_FATAL(g_bs != NULL);
		bs = g_bs;
		SPDK_CU_ASSERT_FATAL(spdk_bit_array_get(bs->used_clusters, 1));
		SPDK_CU_ASSERT_FATAL(!spdk_bit_array_get(bs->used_clusters, 11));