static void
_round_open_close (void)
{
	sqlx_repository_t *repo = NULL;
	GError *err;

	err = sqlx_repository_init("/tmp", NULL, &repo);
	g_assert_no_error (err);
	g_assert_true (sqlx_repository_running (repo));
	err = sqlx_repository_configure_type(repo, type, SCHEMA);
	g_assert_no_error (err);
	sqlx_repository_set_locator (repo, _locator, NULL);

	for (int i=0; i<5 ;i++) {
		struct sqlx_sqlite3_s *sq3 = NULL;
		struct sqlx_name_s n = { .base = name, .type = type, .ns = nsname, };

		err = sqlx_repository_open_and_lock(repo, &n, SQLX_OPEN_LOCAL, &sq3, NULL);
		g_assert_no_error (err);
		g_assert_nonnull (sq3);

		err = sqlx_repository_unlock_and_close(sq3);
		g_assert_no_error (err);
	}

	sqlx_repository_clean(repo);
}
Exemple #2
0
GError *
meta2_backend_init(struct meta2_backend_s **result,
		struct sqlx_repository_s *repo, const gchar *ns,
		struct grid_lbpool_s *glp, struct hc_resolver_s *resolver)
{
	GError *err = NULL;
	struct meta2_backend_s *m2 = NULL;
	gsize s;

	EXTRA_ASSERT(result != NULL);
	EXTRA_ASSERT(glp != NULL);
	EXTRA_ASSERT(repo != NULL);
	EXTRA_ASSERT(resolver != NULL);

	m2 = g_malloc0(sizeof(struct meta2_backend_s));
	s = metautils_strlcpy_physical_ns(m2->backend.ns_name, ns,
			sizeof(m2->backend.ns_name));
	if (sizeof(m2->backend.ns_name) <= s) {
		g_free(m2);
		return NEWERROR(CODE_BAD_REQUEST, "Namespace too long");
	}

	m2->backend.type = NAME_SRVTYPE_META2;
	m2->backend.repo = repo;
	m2->backend.lb = glp;
	m2->policies = service_update_policies_create();
	g_mutex_init(&m2->nsinfo_lock);

	m2->flag_precheck_on_generate = TRUE;

	err = sqlx_repository_configure_type(m2->backend.repo,
			NAME_SRVTYPE_META2, schema);
	if (NULL != err) {
		meta2_backend_clean(m2);
		g_prefix_error(&err, "Backend init error: ");
		return err;
	}

	m2->resolver = resolver;

	GRID_DEBUG("M2V2 backend created for NS[%s] and repo[%p]",
			m2->backend.ns_name, m2->backend.repo);

	*result = m2;
	return NULL;
}
static void
_round_init (void)
{
	sqlx_repository_t *repo = NULL;
	GError *err;

	err = sqlx_repository_init("/tmp", NULL, &repo);
	g_assert_no_error (err);
	for (int i=0; i<5 ;i++)
		sqlx_repository_set_locator (repo, _locator, NULL);
	for (int i=0; i<5 ;i++)
		g_assert_true (sqlx_repository_running (repo));
	for (int i=0; i<5 ;i++) {
		err = sqlx_repository_configure_type(repo, type, SCHEMA);
		g_assert_no_error (err);
	}
	sqlx_repository_clean(repo);
}
Exemple #4
0
static gboolean
_configure_backend(struct sqlx_service_s *ss)
{
	struct sqlx_repo_config_s repository_config = {0};
	repository_config.flags = 0;
	repository_config.flags |= ss->flag_delete_on ? SQLX_REPO_DELETEON : 0;
	repository_config.flags |= ss->flag_cached_bases ? 0 : SQLX_REPO_NOCACHE;
	repository_config.flags |= ss->flag_autocreate ? SQLX_REPO_AUTOCREATE : 0;
	repository_config.sync_solo = ss->sync_mode_solo;
	repository_config.sync_repli = ss->sync_mode_repli;

	repository_config.page_size = SQLX_DEFAULT_PAGE_SIZE;
	if (ss->cfg_page_size >= 512)
		repository_config.page_size = ss->cfg_page_size;

	GError *err = sqlx_repository_init(ss->volume, &repository_config,
			&ss->repository);
	if (err) {
		GRID_ERROR("SQLX repository init failure : (%d) %s",
				err->code, err->message);
		g_clear_error(&err);
		return FALSE;
	}

	err = sqlx_repository_configure_type(ss->repository,
			ss->service_config->srvtype, ss->service_config->schema);

	if (err) {
		GRID_ERROR("SQLX schema init failure : (%d) %s", err->code, err->message);
		g_clear_error(&err);
		return FALSE;
	}

	sqlx_repository_configure_open_timeout (ss->repository,
			ss->open_timeout * G_TIME_SPAN_MILLISECOND);

	sqlx_repository_configure_hash (ss->repository,
			ss->service_config->repo_hash_width,
			ss->service_config->repo_hash_depth);

	GRID_TRACE("SQLX repository initiated");
	return TRUE;
}