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, ';'); } }
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, ';'); }
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, ';'); }
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, ';'); }
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, ';'); }
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); }
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); }
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); }
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); }
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, '='); }
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, ';'); }
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); } } }
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, ';'); }
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"); } } }
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; }