Example #1
0
static void
_init_nsinfo(struct namespace_info_s *nsinfo, const gchar *ns)
{
	memset(nsinfo, 0, sizeof(*nsinfo));
	metautils_strlcpy_physical_ns(nsinfo->name, ns, sizeof(nsinfo->name));
	nsinfo->chunk_size = chunk_size;

	nsinfo->writable_vns = g_slist_prepend(nsinfo->writable_vns, g_strdup("NS.VNS0"));
	nsinfo->writable_vns = g_slist_prepend(nsinfo->writable_vns, g_strdup("NS.VNS1"));

	nsinfo->storage_policy = g_hash_table_new_full(g_str_hash, g_str_equal,
			g_free, metautils_gba_unref);
	nsinfo->data_security = g_hash_table_new_full(g_str_hash, g_str_equal,
			g_free, metautils_gba_unref);
	nsinfo->data_treatments = g_hash_table_new_full(g_str_hash, g_str_equal,
			g_free, metautils_gba_unref);

	g_hash_table_insert(nsinfo->storage_policy, g_strdup("classic"),
			metautils_gba_from_string("DUMMY:DUPONETWO:NONE"));
	g_hash_table_insert(nsinfo->storage_policy, g_strdup("polcheck"),
			metautils_gba_from_string("DUMMY:DUPONETHREE:SIMCOMP"));
	g_hash_table_insert(nsinfo->storage_policy, g_strdup("secure"),
			metautils_gba_from_string("DUMMY:DUP_SECURE:NONE"));

	g_hash_table_insert(nsinfo->data_security, g_strdup("DUPONETWO"),
			metautils_gba_from_string("DUP:distance=1|nb_copy=2"));
	g_hash_table_insert(nsinfo->data_security, g_strdup("DUPONETHREE"),
			metautils_gba_from_string("DUP:distance=1|nb_copy=3"));
	g_hash_table_insert(nsinfo->data_security, g_strdup("DUP_SECURE"),
			metautils_gba_from_string("DUP:distance=4|nb_copy=2"));

	g_hash_table_insert(nsinfo->data_treatments, g_strdup("SIMCOMP"),
			metautils_gba_from_string("COMP:algo=ZLIB|blocksize=262144"));
}
namespace_data_t*
get_namespace(const char *ns_name, GError **error)
{
	gchar ns[LIMIT_LENGTH_NSNAME];
	namespace_data_t *ns_data = NULL;

	metautils_strlcpy_physical_ns(ns, ns_name, sizeof(ns));

	/* Get namespace data */
	ns_data = g_hash_table_lookup(namespaces, ns);
	if (ns_data == NULL) {
		GSETERROR(error, "Namespace [%s] unknown in config", ns);
		goto end_label;
	}

	if (!ns_data->configured) {
		GSETERROR(error, "Namespace [%s] unavailable", ns);
		ns_data = NULL;
		goto end_label;
	}

	if (!ns_data->local_services
		|| !ns_data->down_services
		|| !ns_data->conscience)
	{
		GSETERROR(error,"Namespace [%s] misconfigured", ns);
		ns_data = NULL;
	}

end_label:
	return ns_data;
}
Example #3
0
GError *
namespace_info_init_json_object(struct json_object *obj,
		struct namespace_info_s *ni)
{
	EXTRA_ASSERT(ni != NULL);

	struct json_object *ns=NULL, *sz=NULL;
	struct oio_ext_json_mapping_s mapping[] = {
		{"ns",        &ns, json_type_string, 1},
		{"chunksize", &sz, json_type_int,    1},
		{NULL, NULL, 0, 0}
	};
	GError *err = oio_ext_extract_json (obj, mapping);
	if (err) return err;

	metautils_strlcpy_physical_ns(ni->name, json_object_get_string(ns), sizeof(ni->name));
	ni->chunk_size = json_object_get_int64(sz);

	if (NULL != (err = _load_hash(obj, "options", ni->options))
			|| NULL != (err = _load_hash(obj, "storage_policy", ni->storage_policy))
			|| NULL != (err = _load_hash(obj, "data_security", ni->data_security))
			|| NULL != (err = _load_hash(obj, "data_treatments", ni->data_treatments))
			|| NULL != (err = _load_hash(obj, "storage_class", ni->storage_class)))
		return err;

	return NULL;
}
Example #4
0
static void
test_strlcpy_pns(void)
{
	gchar * _trans(const gchar *s0) {
		gchar *s = g_strdup(s0);
		metautils_strlcpy_physical_ns(s, s0, strlen(s0)+1);
		return s;
	}
Example #5
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;
}
Example #6
0
static struct grid_lbpool_s *
_init_lb(const gchar *ns)
{
	struct def_s { const gchar *url, *loc; };
	static struct def_s defs[] = {
		{"127.0.0.1:1025","site0.salle0.baie0.device0"},
		{"127.0.0.1:1026","site0.salle0.baie0.device1"},
		{"127.0.0.1:1027","site0.salle0.baie1.device0"},
		{"127.0.0.1:1028","site0.salle1.baie0.device0"},
		{"127.0.0.1:1029","site0.salle1.baie1.device0"},
		{"127.0.0.1:1030","site0.salle1.baie0.device1"},
		{NULL,NULL}
	};

	struct def_s *pdef = defs;
	gint score = 0;

	gboolean provide(struct service_info_s **p_si) {
		struct service_info_s *si;
		if (!pdef->url)
			return FALSE;

		si = g_malloc0(sizeof(*si));
		metautils_strlcpy_physical_ns(si->ns_name, "NS", sizeof(si->ns_name));
		g_strlcpy(si->type, "rawx", sizeof(si->type));
		si->score.timestamp = time(0);
		si->score.value = ++score;
		grid_string_to_addrinfo(pdef->url, NULL, &(si->addr));

		pdef++;
		*p_si = si;
		return TRUE;
	}

	struct grid_lbpool_s *glp = grid_lbpool_create(ns);
	g_assert(glp != NULL);
	grid_lbpool_configure_string(glp, "rawx", "RR");
	grid_lbpool_reload(glp, "rawx", provide);
	return glp;
}
Example #7
0
struct meta1_backend_s *
meta1_backend_init(const gchar *ns, struct sqlx_repository_s *repo,
		struct grid_lbpool_s *glp)
{
	struct meta1_backend_s *m1;

	EXTRA_ASSERT(ns != NULL);
	EXTRA_ASSERT(*ns != '\0');
	EXTRA_ASSERT(glp != NULL);
	EXTRA_ASSERT(repo != NULL);

	m1 = g_malloc0(sizeof(*m1));
	metautils_strlcpy_physical_ns(m1->backend.ns_name, ns,
			sizeof(m1->backend.ns_name));
	m1->backend.type = NAME_SRVTYPE_META1;
	m1->backend.lb = glp;
	m1->backend.repo = repo;
	m1->prefixes = meta1_prefixes_init();
	m1->svcupdate = service_update_policies_create();

	return m1;
}