|
- // Copyright (c) Vitaliy Filippov, 2019+
- // License: VNPL-1.0 (see README.md for details)
-
- #define _LARGEFILE64_SOURCE
-
- #include "osd_peering_pg.h"
- #define STRIPE_SHIFT 12
-
- /**
- * TODO tests for object & pg state calculation.
- *
- * 1) pg=1,2,3. objects:
- * v1=1s,2s,3s -> clean
- * v1=1s,2s,3 v2=1s,2s,_ -> degraded + needs_rollback
- * v1=1s,2s,_ -> degraded
- * v1=1s,2s,3s v2=1,6,_ -> degraded + needs_stabilize
- * v1=2s,1s,3s -> misplaced
- * v1=4,5,6 -> misplaced + needs_stabilize
- * v1=1s,2s,6s -> misplaced
- * 2) ...
- */
- int main(int argc, char *argv[])
- {
- pg_t pg = {
- .state = PG_PEERING,
- .pg_num = 1,
- .target_set = { 1, 2, 3 },
- .cur_set = { 1, 2, 3 },
- .peering_state = new pg_peering_state_t(),
- };
- for (uint64_t osd_num = 1; osd_num <= 3; osd_num++)
- {
- pg_list_result_t r = {
- .buf = (obj_ver_id*)malloc_or_die(sizeof(obj_ver_id) * 1024*1024*8),
- .total_count = 1024*1024*8,
- .stable_count = (uint64_t)(1024*1024*8 - (osd_num == 1 ? 10 : 0)),
- };
- for (uint64_t i = 0; i < r.total_count; i++)
- {
- r.buf[i] = {
- .oid = {
- .inode = 1,
- .stripe = (i << STRIPE_SHIFT) | (osd_num-1),
- },
- .version = (uint64_t)(osd_num == 1 && i >= r.total_count - 10 ? 2 : 1),
- };
- }
- pg.peering_state->list_results[osd_num] = r;
- }
- pg.calc_object_states(0);
- printf("deviation variants=%ld clean=%lu\n", pg.state_dict.size(), pg.clean_count);
- for (auto it: pg.state_dict)
- {
- printf("dev: state=%lx\n", it.second.state);
- }
- return 0;
- }
|