nx_store_id_probe.nx source
↩ module page · 36 lines · 1468 B
1import "nx_store_id_lookup_lib.nx"
2import "nx_fsops_lib.nx"
3func main(argc: i64, argv: *i64) -> i64 {
4 if argc != 3 { fsx_puts("usage: nx_store_id_probe <prefix> <id>
5" as *u8); return 2 }
6 let prefix: *u8 = argv[1] as *u8
7 let id: *u8 = argv[2] as *u8
8 if fsx_denied(prefix) == 1 { return FSX_RC_DENIED }
9 let generation: i64 = ss_max_segid(prefix)
10 if generation < 0 { return 3 }
11 var reference: i64 = 0 - 2
12 var round: i64 = 0
13 while round < 4 {
14 var lane: i64 = 0
15 while lane < 2 {
16 let direct: i64 = (round+lane)%2
17 let start: i64 = sys_now_us()
18 var seq: i64 = 0 - 1
19 if direct == 1 { seq=sid_find_seq(prefix,id) } else { seq=sts_find_seq(prefix,id) }
20 let elapsed: i64 = sys_now_us()-start
21 fsx_puts("round=" as *u8);fsx_putn(round);fsx_puts(" direct=" as *u8);fsx_putn(direct)
22 fsx_puts(" seq=" as *u8);fsx_putn(seq);fsx_puts(" elapsed_us=" as *u8);fsx_putn(elapsed);fsx_puts("
23" as *u8)
24 if reference == 0-2 { reference=seq }
25 if ss_max_segid(prefix) != generation { fsx_puts("INCONCLUSIVE generation-changed
26" as *u8);return 4 }
27 if seq != reference { fsx_puts("MISMATCH same-generation
28" as *u8);return 5 }
29 lane=lane+1
30 }
31 round=round+1
32 }
33 fsx_puts("MATCH same-generation; first lookup includes cold handle setup; later timings are warm; read-only
34" as *u8)
35 return 0
36}