mirror of
https://github.com/versity/scoutfs.git
synced 2026-09-19 14:34:16 +00:00
scoutfs-utils: update compaction item printing
We now only use one srch file compaction struct and we store it in PENDING and BUSY key types. Signed-off-by: Zach Brown <zab@versity.com>
This commit is contained in:
+28
-15
@@ -374,27 +374,39 @@ struct scoutfs_srch_block {
|
||||
#define SCOUTFS_SRCH_COMPACT_ORDER 3
|
||||
#define SCOUTFS_SRCH_COMPACT_NR (1 << SCOUTFS_SRCH_COMPACT_ORDER)
|
||||
|
||||
struct scoutfs_srch_compact_input {
|
||||
/*
|
||||
* A persistent record of a srch file compaction operation in progress.
|
||||
*
|
||||
* When compacting log files blk and pos aren't used. When compacting
|
||||
* sorted files blk is the logical block number and pos is the byte
|
||||
* offset of the next entry. When deleting files pos is the height of
|
||||
* the level that we're deleting, and blk is the logical block offset of
|
||||
* the next parent ref array index to descend through.
|
||||
*/
|
||||
struct scoutfs_srch_compact {
|
||||
struct scoutfs_alloc_list_head meta_avail;
|
||||
struct scoutfs_alloc_list_head meta_freed;
|
||||
__le64 id;
|
||||
__u8 nr;
|
||||
__u8 flags;
|
||||
struct scoutfs_srch_file sfl[SCOUTFS_SRCH_COMPACT_NR];
|
||||
struct scoutfs_srch_file out;
|
||||
struct scoutfs_srch_compact_input {
|
||||
struct scoutfs_srch_file sfl;
|
||||
__le64 blk;
|
||||
__le64 pos;
|
||||
} in[SCOUTFS_SRCH_COMPACT_NR] __packed;
|
||||
} __packed;
|
||||
|
||||
struct scoutfs_srch_compact_result {
|
||||
struct scoutfs_alloc_list_head meta_avail;
|
||||
struct scoutfs_alloc_list_head meta_freed;
|
||||
__le64 id;
|
||||
__u8 flags;
|
||||
struct scoutfs_srch_file sfl;
|
||||
} __packed;
|
||||
|
||||
/* files are insorted logs */
|
||||
#define SCOUTFS_SRCH_COMPACT_FLAG_LOG (1 << 0)
|
||||
/* compaction failed, release inputs */
|
||||
#define SCOUTFS_SRCH_COMPACT_FLAG_ERROR (1 << 1)
|
||||
/* server -> client: combine input log file entries into output file */
|
||||
#define SCOUTFS_SRCH_COMPACT_FLAG_LOG (1 << 0)
|
||||
/* server -> client: combine input sorted file entries into output file */
|
||||
#define SCOUTFS_SRCH_COMPACT_FLAG_SORTED (1 << 1)
|
||||
/* server -> client: delete input files */
|
||||
#define SCOUTFS_SRCH_COMPACT_FLAG_DELETE (1 << 2)
|
||||
/* client -> server: compaction phase (LOG,SORTED,DELETE) done */
|
||||
#define SCOUTFS_SRCH_COMPACT_FLAG_DONE (1 << 4)
|
||||
/* client -> server: compaction failed */
|
||||
#define SCOUTFS_SRCH_COMPACT_FLAG_ERROR (1 << 5)
|
||||
|
||||
/*
|
||||
* XXX I imagine we should rename these now that they've evolved to track
|
||||
@@ -496,7 +508,8 @@ struct scoutfs_bloom_block {
|
||||
/* srch zone, only in server btrees */
|
||||
#define SCOUTFS_SRCH_LOG_TYPE 1
|
||||
#define SCOUTFS_SRCH_BLOCKS_TYPE 2
|
||||
#define SCOUTFS_SRCH_BUSY_TYPE 3
|
||||
#define SCOUTFS_SRCH_PENDING_TYPE 3
|
||||
#define SCOUTFS_SRCH_BUSY_TYPE 4
|
||||
|
||||
/* free extents in allocator btrees in client and server, by blkno or len */
|
||||
#define SCOUTFS_FREE_EXTENT_BLKNO_TYPE 1
|
||||
|
||||
+20
-15
@@ -322,22 +322,26 @@ static int print_log_trees_item(struct scoutfs_key *key, void *val,
|
||||
static int print_srch_root_item(struct scoutfs_key *key, void *val,
|
||||
unsigned val_len, void *arg)
|
||||
{
|
||||
struct scoutfs_srch_file *sfl = val;
|
||||
struct scoutfs_srch_compact_input *scin = val;
|
||||
struct scoutfs_srch_compact *sc;
|
||||
struct scoutfs_srch_file *sfl;
|
||||
int i;
|
||||
|
||||
printf(" "SK_FMT"\n", SK_ARG(key));
|
||||
|
||||
/* only items in leaf blocks have values */
|
||||
if (val) {
|
||||
if (key->sk_type == SCOUTFS_SRCH_BUSY_TYPE) {
|
||||
scin = val;
|
||||
printf(" compact: nr_in %u in_flags 0x%x\n",
|
||||
scin->nr, scin->flags);
|
||||
for (i = 0; i < scin->nr; i++) {
|
||||
sfl = &scin->sfl[i];
|
||||
printf(" [%u] "SRF_FMT"\n",
|
||||
i, SRF_A(sfl));
|
||||
if (key->sk_type == SCOUTFS_SRCH_PENDING_TYPE ||
|
||||
key->sk_type == SCOUTFS_SRCH_BUSY_TYPE) {
|
||||
sc = val;
|
||||
printf(" compact %s: nr %u flags 0x%x\n",
|
||||
key->sk_type == SCOUTFS_SRCH_PENDING_TYPE ?
|
||||
"pending" : "busy",
|
||||
sc->nr, sc->flags);
|
||||
for (i = 0; i < sc->nr; i++) {
|
||||
printf(" [%u] blk %llu pos %llu sfl "SRF_FMT"\n",
|
||||
i, le64_to_cpu(sc->in[i].blk),
|
||||
le64_to_cpu(sc->in[i].pos),
|
||||
SRF_A(&sc->in[i].sfl));
|
||||
}
|
||||
} else {
|
||||
sfl = val;
|
||||
@@ -716,15 +720,16 @@ static int print_srch_root_files(struct scoutfs_key *key, void *val,
|
||||
unsigned val_len, void *arg)
|
||||
{
|
||||
struct print_recursion_args *pa = arg;
|
||||
struct scoutfs_srch_compact_input *scin;
|
||||
struct scoutfs_srch_compact *sc;
|
||||
struct scoutfs_srch_file *sfl;
|
||||
int ret = 0;
|
||||
int i;
|
||||
|
||||
if (key->sk_type == SCOUTFS_SRCH_BUSY_TYPE) {
|
||||
scin = val;
|
||||
for (i = 0; i < scin->nr; i++) {
|
||||
sfl = &scin->sfl[i];
|
||||
if (key->sk_type == SCOUTFS_SRCH_PENDING_TYPE ||
|
||||
key->sk_type == SCOUTFS_SRCH_BUSY_TYPE) {
|
||||
sc = val;
|
||||
for (i = 0; i < sc->nr; i++) {
|
||||
sfl = &sc->in[i].sfl;
|
||||
ret = print_srch_block(pa->fd, &sfl->ref,
|
||||
sfl->height - 1);
|
||||
if (ret < 0)
|
||||
|
||||
Reference in New Issue
Block a user