Пример #1
0
void
as_namespace_get_bins_info(as_namespace *ns, cf_dyn_buf *db, bool show_ns)
{
	if (show_ns) {
		cf_dyn_buf_append_string(db, ns->name);
		cf_dyn_buf_append_char(db, ':');
	}

	if (ns->single_bin) {
		cf_dyn_buf_append_string(db, "[single-bin]");
	}
	else {
		uint32_t bin_count = cf_vmapx_count(ns->p_bin_name_vmap);

		cf_dyn_buf_append_string(db, "num-bin-names=");
		cf_dyn_buf_append_uint32(db, bin_count);
		cf_dyn_buf_append_string(db, ",bin-names-quota=");
		cf_dyn_buf_append_uint32(db, BIN_NAMES_QUOTA);

		for (uint32_t i = 0; i < bin_count; i++) {
			cf_dyn_buf_append_char(db, ',');
			cf_dyn_buf_append_string(db, as_bin_get_name_from_id(ns, (uint16_t)i));
		}
	}

	if (show_ns) {
		cf_dyn_buf_append_char(db, ';');
	}
}
Пример #2
0
void
info_append_uint64_x(cf_dyn_buf *db, const char *name, uint64_t value)
{
	cf_dyn_buf_append_string(db, name);
	cf_dyn_buf_append_char(db, '=');
	cf_dyn_buf_append_uint64_x(db, value);
	cf_dyn_buf_append_char(db, ';');
}
Пример #3
0
void
info_append_string_safe(cf_dyn_buf *db, const char *name, const char *value)
{
	cf_dyn_buf_append_string(db, name);
	cf_dyn_buf_append_char(db, '=');
	cf_dyn_buf_append_string(db, value ? value : "null");
	cf_dyn_buf_append_char(db, ';');
}
Пример #4
0
void
info_append_int(cf_dyn_buf *db, const char *name, int value)
{
	cf_dyn_buf_append_string(db, name);
	cf_dyn_buf_append_char(db, '=');
	cf_dyn_buf_append_int(db, value);
	cf_dyn_buf_append_char(db, ';');
}
Пример #5
0
void
info_append_bool(cf_dyn_buf *db, const char *name, bool value)
{
	cf_dyn_buf_append_string(db, name);
	cf_dyn_buf_append_char(db, '=');
	cf_dyn_buf_append_bool(db, value);
	cf_dyn_buf_append_char(db, ';');
}
Пример #6
0
int
cf_fault_sink_strlist(cf_dyn_buf *db)
{
	for (int i = 0; i < cf_fault_sinks_inuse; i++) {
		cf_dyn_buf_append_int(db, i);
		cf_dyn_buf_append_char(db, ':');
		cf_dyn_buf_append_string(db,cf_fault_sinks[i].path);
		cf_dyn_buf_append_char(db, ';');
	}
	cf_dyn_buf_chomp(db);
	return(0);
}
Пример #7
0
void
info_append_format(cf_dyn_buf *db, const char *name, const char *form, ...)
{
	va_list va;
	va_start(va, form);

	cf_dyn_buf_append_string(db, name);
	cf_dyn_buf_append_char(db, '=');
	cf_dyn_buf_append_format_va(db, form, va);
	cf_dyn_buf_append_char(db, ';');

	va_end(va);
}
Пример #8
0
int
cf_fault_sink_context_strlist(int sink_id, char *context, cf_dyn_buf *db)
{
	// get the sink
	if (sink_id > cf_fault_sinks_inuse)	return(-1);
	cf_fault_sink *s = &cf_fault_sinks[sink_id];

	// get the severity
	uint i;
	for (i=0;i<CF_FAULT_CONTEXT_UNDEF;i++) {
		if (0 == strcmp(cf_fault_context_strings[i],context))
			break;
	}
	if (i == CF_FAULT_CONTEXT_UNDEF) {
		cf_dyn_buf_append_string(db, context);
		cf_dyn_buf_append_string(db, ":unknown");
		return(0);
	}

	// get the string
	cf_dyn_buf_append_string(db, context);
	cf_dyn_buf_append_char(db, ':');
	cf_dyn_buf_append_string(db, cf_fault_severity_strings[s->limit[i]]);
	return(0);
}
Пример #9
0
int
cf_fault_sink_context_all_strlist(int sink_id, cf_dyn_buf *db)
{
	// get the sink
	if (sink_id > cf_fault_sinks_inuse)	return(-1);
	cf_fault_sink *s = &cf_fault_sinks[sink_id];

	for (uint i=0; i<CF_FAULT_CONTEXT_UNDEF; i++) {
		cf_dyn_buf_append_string(db, cf_fault_context_strings[i]);
		cf_dyn_buf_append_char(db, ':');
		cf_dyn_buf_append_string(db, cf_fault_severity_strings[s->limit[i]]);
		cf_dyn_buf_append_char(db, ';');
	}
	cf_dyn_buf_chomp(db);
	return(0);
}
Пример #10
0
static inline void
append_indexed_name(cf_dyn_buf *db, const char *name, uint32_t ix,
		const char *attr)
{
	cf_dyn_buf_append_string(db, name);
	cf_dyn_buf_append_char(db, '[');
	cf_dyn_buf_append_uint32(db, ix);
	cf_dyn_buf_append_char(db, ']');

	if (attr) {
		cf_dyn_buf_append_char(db, '.');
		cf_dyn_buf_append_string(db, attr);
	}

	cf_dyn_buf_append_char(db, '=');
}
Пример #11
0
void
info_append_indexed_uint64(cf_dyn_buf *db, const char *name, uint32_t ix,
		const char *attr, uint64_t value)
{
	append_indexed_name(db, name, ix, attr);
	cf_dyn_buf_append_uint64(db, value);
	cf_dyn_buf_append_char(db, ';');
}
Пример #12
0
void as_namespace_get_set_info(as_namespace *ns, const char *set_name, cf_dyn_buf *db)
{
	as_set *p_set;

	if (set_name) {
		if (cf_vmapx_get_by_name(ns->p_sets_vmap, set_name, (void**)&p_set) == CF_VMAPX_OK) {
			append_set_props(p_set, db);
		}

		return;
	}

	for (uint32_t idx = 0; idx < cf_vmapx_count(ns->p_sets_vmap); idx++) {
		if (cf_vmapx_get_by_index(ns->p_sets_vmap, idx, (void**)&p_set) == CF_VMAPX_OK) {
			cf_dyn_buf_append_string(db, "ns_name=");
			cf_dyn_buf_append_string(db, ns->name);
			cf_dyn_buf_append_char(db, ':');
			cf_dyn_buf_append_string(db, "set_name=");
			cf_dyn_buf_append_string(db, p_set->name);
			cf_dyn_buf_append_char(db, ':');
			append_set_props(p_set, db);
		}
	}
}
Пример #13
0
static void
append_set_props(as_set *p_set, cf_dyn_buf *db)
{
	cf_dyn_buf_append_string(db, "n_objects=");
	cf_dyn_buf_append_uint64(db, cf_atomic64_get(p_set->num_elements));
	cf_dyn_buf_append_char(db, ':');
	cf_dyn_buf_append_string(db, "n-bytes-memory=");
	cf_dyn_buf_append_uint64(db, cf_atomic64_get(p_set->n_bytes_memory));
	cf_dyn_buf_append_char(db, ':');
	cf_dyn_buf_append_string(db, "stop-writes-count=");
	cf_dyn_buf_append_uint64(db, cf_atomic64_get(p_set->stop_writes_count));
	cf_dyn_buf_append_char(db, ':');
	cf_dyn_buf_append_string(db, "set-enable-xdr=");
	if (cf_atomic32_get(p_set->enable_xdr) == AS_SET_ENABLE_XDR_TRUE) {
		cf_dyn_buf_append_string(db, "true");
	}
	else if (cf_atomic32_get(p_set->enable_xdr) == AS_SET_ENABLE_XDR_FALSE) {
		cf_dyn_buf_append_string(db, "false");
	}
	else if (cf_atomic32_get(p_set->enable_xdr) == AS_SET_ENABLE_XDR_DEFAULT) {
		cf_dyn_buf_append_string(db, "use-default");
	}
	else {
		cf_dyn_buf_append_uint32(db, cf_atomic32_get(p_set->enable_xdr));
	}
	cf_dyn_buf_append_char(db, ':');
	cf_dyn_buf_append_string(db, "disable-eviction=");
	if (IS_SET_EVICTION_DISABLED(p_set)) {
		cf_dyn_buf_append_string(db, "true");
	}
	else {
		cf_dyn_buf_append_string(db, "false");
	}
	cf_dyn_buf_append_char(db, ':');
	cf_dyn_buf_append_string(db, "set-delete=");
	if (IS_SET_DELETED(p_set)) {
		cf_dyn_buf_append_string(db, "true");
	}
	else {
		cf_dyn_buf_append_string(db, "false");
	}
	cf_dyn_buf_append_char(db, ';');
}
Пример #14
0
void
as_namespace_get_hist_info(as_namespace *ns, char *set_name, char *hist_name,
		cf_dyn_buf *db, bool show_ns)
{
	if (show_ns) {
		cf_dyn_buf_append_string(db, ns->name);
		cf_dyn_buf_append_char(db, ':');
	}

	if (set_name == NULL || set_name[0] == 0) {
		if (strcmp(hist_name, "ttl") == 0) {
			cf_dyn_buf_append_string(db, "ttl=");
			linear_histogram_get_info(ns->ttl_hist, db);
			cf_dyn_buf_append_char(db, ';');
		} else if (strcmp(hist_name, "evict") == 0) {
			cf_dyn_buf_append_string(db, "evict=");
			linear_histogram_get_info(ns->evict_hist, db);
			cf_dyn_buf_append_char(db, ';');
		} else if (strcmp(hist_name, "evictc") == 0) {
			cf_dyn_buf_append_string(db, "evictc=");
			linear_histogram_get_info(ns->evict_coarse_hist, db);
			cf_dyn_buf_append_char(db, ';');
		} else if (strcmp(hist_name, "objsz") == 0) {
			if (ns->storage_type == AS_STORAGE_ENGINE_SSD) {
				cf_dyn_buf_append_string(db, "objsz=");
				linear_histogram_get_info(ns->obj_size_hist, db);
				cf_dyn_buf_append_char(db, ';');
			} else {
				cf_dyn_buf_append_string(db, "hist-not-applicable");
			}
		} else {
			cf_dyn_buf_append_string(db, "error-unknown-hist-name");
		}
	} else {
		uint16_t set_id = as_namespace_get_set_id(ns, set_name);
		if (set_id != INVALID_SET_ID) {
			if (strcmp(hist_name, "ttl") == 0) {
				if (ns->set_ttl_hists[set_id]) {
					cf_dyn_buf_append_string(db, "ttl=");
					linear_histogram_get_info(ns->set_ttl_hists[set_id], db);
					cf_dyn_buf_append_char(db, ';');
				} else {
					cf_dyn_buf_append_string(db, "hist-unavailable");
				}
			} else if (strcmp(hist_name, "objsz") == 0) {
				if (ns->storage_type == AS_STORAGE_ENGINE_SSD) {
					if (ns->set_obj_size_hists[set_id]) {
						cf_dyn_buf_append_string(db, "objsz=");
						linear_histogram_get_info(ns->set_obj_size_hists[set_id], db);
						cf_dyn_buf_append_char(db, ';');
					} else {
						cf_dyn_buf_append_string(db, "hist-unavailable");
					}
				} else {
					cf_dyn_buf_append_string(db, "hist-not-applicable");
				}
			} else {
				cf_dyn_buf_append_string(db, "error-unknown-hist-name");
			}
		} else {
			cf_dyn_buf_append_string(db, "error-unknown-set-name");
		}
	}
}
Пример #15
0
int udf_cask_info_list(char *name, cf_dyn_buf * out) {

	DIR 		  * dir	             = NULL;
	bool 		    not_empty        = false;
	struct dirent * entry            = NULL;
	int 		    count 	         = 0;
	uint8_t       * content          = NULL;
	size_t          content_len      = 0;
	unsigned char   content_gen[256] = {0};
	unsigned char   hash[SHA_DIGEST_LENGTH];
	// hex string to be returned to the client
	unsigned char   sha1_hex_buff[CF_SHA_HEX_BUFF_LEN];

	cf_debug(AS_INFO, "UDF CASK INFO LIST");

	// Currently just return directly for LUA
	uint8_t 		udf_type 	    = AS_UDF_TYPE_LUA;
	dir = opendir(g_config.mod_lua.user_path);
	if ( dir == 0 ) {
		cf_warning(AS_UDF, "could not open udf directory %s: %s", g_config.mod_lua.user_path, cf_strerror(errno));
		return -1;
	}

	while ( (entry = readdir(dir)) && entry->d_name ) {

		char * name = entry->d_name;
		size_t len = strlen(name);

		// if ( len < 4 ) continue;

		if ( name[0] == '.' ) continue;

		if ( not_empty ) {
			cf_dyn_buf_append_char(out, ';');
		}
		else {
			not_empty = true;
		}

		cf_dyn_buf_append_string(out, "filename=");
		cf_dyn_buf_append_buf(out, (uint8_t *) name, len);
		cf_dyn_buf_append_string(out, ",");
		mod_lua_rdlock(&mod_lua);
		if (file_read(name, &content, &content_len, content_gen) != 0) {
			cf_info(AS_UDF, "UDF-list : file not readable");
			cf_dyn_buf_append_string(out, "error=file_not_readable");
			mod_lua_unlock(&mod_lua);
			return 0;
		}
		mod_lua_unlock(&mod_lua);
		SHA1(content, content_len, hash);
		// Convert to a hexadecimal string
		cf_convert_sha1_to_hex(hash, sha1_hex_buff);
		cf_dyn_buf_append_string(out, "hash=");
		cf_dyn_buf_append_buf(out, sha1_hex_buff, CF_SHA_HEX_BUFF_LEN);
		cf_dyn_buf_append_string(out, ",type=");
		cf_dyn_buf_append_string(out, as_udf_type_name[udf_type]);
		count ++;
	}
	if (not_empty)
	{
		cf_dyn_buf_append_string(out, ";");
	}

	closedir(dir);

	return 0;
}