void * omap_rm(omap_t * omap, uint64_t id);
static inline omap_iter_t omap_iter(omap_t * omap);
static inline uint64_t omap_iter_id(omap_iter_t iter);
-#define omap_each(iter__, dt__, var__) \
- dt__ * var__; \
- iter__ && \
- (var__ = (dt__ *) iter__->data_); \
+#define omap_loop(iter__, var__) \
+ ;iter__ && \
+ (var__ = iter__->data_); \
iter__ = iter__->next_
struct omap_s
siridb_t * siridb,
uint64_t end_ts,
uint8_t tp);
+size_t siridb_shards_n(siridb_t * siridb);
+vec_t * siridb_shards_vec(siridb_t * siridb);
#endif /* SIRIDB_SHARDS_H_ */
}
double percent = (double)
- q_drop->shards_list->len / siridb->shards->len;
+ q_drop->shards_list->len / siridb_shards_n(siridb);
if (IS_MASTER &&
q_drop->shards_list->len &&
return siri_err;
}
+static inline int SHARDS_count_cb(omap_t * omap, size_t * n)
+{
+ *n += omap->n;
+ return 0;
+}
+
+size_t siridb_shards_n(siridb_t * siridb)
+{
+ size_t n = 0;
+ imap_walk(siridb->shards, (imap_cb) SHARDS_count_cb, &n);
+ return n;
+}
+
+static inline int SHARDS_to_vec_cb(omap_t * omap, vec_t * v)
+{
+ omap_iter_t iter = omap_iter(omap);
+ siridb_shard_t * shard;
+ for (;iter && (shard = iter->data_); iter = iter->next_)
+ {
+ vec_append(v, shard);
+ ++shard->ref;
+ }
+ return 0;
+}
+
+vec_t * siridb_shards_vec(siridb_t * siridb)
+{
+ size_t n = siridb_shards_n(siridb);
+ vec_t * vec = vec_new(n);
+ if (vec == NULL)
+ {
+ return NULL;
+ }
+ imap_walk(siridb->shards, (imap_cb) SHARDS_to_vec_cb, &n);
+ return vec;
+}
+
double siridb_shards_count_percent(
siridb_t * siridb,
uint64_t end_ts,
#include <assert.h>
#include <logger/logger.h>
#include <siri/db/shard.h>
+#include <siri/db/shards.h>
#include <siri/optimize.h>
#include <siri/siri.h>
#include <vec/vec.h>
uv_mutex_lock(&siridb->shards_mutex);
- slshards = imap_2vec_ref(siridb->shards);
+ slshards = siridb_shards_vec(siridb);
uv_mutex_unlock(&siridb->shards_mutex);