Switched to mid=-1 to detect removed mids, drops lfsr_mdir_isdropped
This is a simpler way to track dropped mids. Setting trunk=0 was more a workaround that worked but added more purpose to the trunk field than originally needed. The mdir's trunk usually still exists after all. Using mid=-1 previously didn't work due to conflict with mid=-1 to indicate an mdir is an mroot, but since removed mids only appear in the opened-mdir list, and the opened-mdir list stores inlined mdirs as mid=0, this is no longer a problem. One downside of this change is we no longer get implicit NOENT behavior from lfsr_rbyd_lookup when attempting to lookup a removed mid, but it wasn't clear this behavior was going to be very useful...
This commit is contained in:
+2
-19
@@ -2725,11 +2725,9 @@ code = '''
|
||||
assert(memcmp(buffer, "c", 1) == 0);
|
||||
|
||||
// assert that our neighbors were updated correctly
|
||||
assert(!lfsr_mdir_isdropped(&left_neighbor.mdir));
|
||||
assert(left_neighbor.mdir.mid == 0);
|
||||
assert(memcmp(&left_neighbor.mdir.u.m, &lfs.mroot.u.m,
|
||||
sizeof(lfs.mroot.u.m)) == 0);
|
||||
assert(!lfsr_mdir_isdropped(&right_neighbor.mdir));
|
||||
assert(right_neighbor.mdir.mid == 2);
|
||||
assert(memcmp(&right_neighbor.mdir.u.m, &lfs.mroot.u.m,
|
||||
sizeof(lfs.mroot.u.m)) == 0);
|
||||
@@ -2772,8 +2770,7 @@ code = '''
|
||||
assert(lfs.mroot.u.m.weight == 1);
|
||||
|
||||
// assert that our neighbors were updated correctly
|
||||
assert(lfsr_mdir_isdropped(&left_neighbor.mdir));
|
||||
assert(!lfsr_mdir_isdropped(&right_neighbor.mdir));
|
||||
assert(left_neighbor.mdir.mid == -1);
|
||||
assert(right_neighbor.mdir.mid == 0);
|
||||
assert(memcmp(&right_neighbor.mdir.u.m, &lfs.mroot.u.m,
|
||||
sizeof(lfs.mroot.u.m)) == 0);
|
||||
@@ -2816,11 +2813,10 @@ code = '''
|
||||
assert(lfs.mroot.u.m.weight == 1);
|
||||
|
||||
// assert that our neighbors were updated correctly
|
||||
assert(!lfsr_mdir_isdropped(&left_neighbor.mdir));
|
||||
assert(left_neighbor.mdir.mid == 0);
|
||||
assert(memcmp(&left_neighbor.mdir.u.m, &lfs.mroot.u.m,
|
||||
sizeof(lfs.mroot.u.m)) == 0);
|
||||
assert(lfsr_mdir_isdropped(&right_neighbor.mdir));
|
||||
assert(right_neighbor.mdir.mid == -1);
|
||||
|
||||
lfsr_mdir_removeopened(&lfs, LFS_TYPE_REG, &left_neighbor);
|
||||
lfsr_mdir_removeopened(&lfs, LFS_TYPE_REG, &right_neighbor);
|
||||
@@ -2894,11 +2890,9 @@ code = '''
|
||||
assert(msibling.u.m.weight == 1);
|
||||
|
||||
// assert that our neighbors were updated correctly
|
||||
assert(!lfsr_mdir_isdropped(&left_neighbor.mdir));
|
||||
assert(left_neighbor.mdir.mid == 0*lfsr_mweight(&lfs)+0);
|
||||
assert(memcmp(&left_neighbor.mdir.u.m, &mdir.u.m,
|
||||
sizeof(mdir.u.m)) == 0);
|
||||
assert(!lfsr_mdir_isdropped(&right_neighbor.mdir));
|
||||
assert(right_neighbor.mdir.mid == 1*lfsr_mweight(&lfs)+0);
|
||||
assert(memcmp(&right_neighbor.mdir.u.m, &msibling.u.m,
|
||||
sizeof(msibling.u.m)) == 0);
|
||||
@@ -2970,11 +2964,9 @@ code = '''
|
||||
assert(memcmp(buffer, "d", 1) == 0);
|
||||
|
||||
// assert that our neighbors were updated correctly
|
||||
assert(!lfsr_mdir_isdropped(&left_neighbor.mdir));
|
||||
assert(left_neighbor.mdir.mid == 0*lfsr_mweight(&lfs)+0);
|
||||
assert(memcmp(&left_neighbor.mdir.u.m, &mdir.u.m,
|
||||
sizeof(mdir.u.m)) == 0);
|
||||
assert(!lfsr_mdir_isdropped(&right_neighbor.mdir));
|
||||
assert(right_neighbor.mdir.mid == 1*lfsr_mweight(&lfs)+1);
|
||||
assert(memcmp(&right_neighbor.mdir.u.m, &msibling.u.m,
|
||||
sizeof(msibling.u.m)) == 0);
|
||||
@@ -3073,11 +3065,9 @@ code = '''
|
||||
assert(memcmp(buffer, "e", 1) == 0);
|
||||
|
||||
// assert that our neighbors were updated correctly
|
||||
assert(!lfsr_mdir_isdropped(&left_neighbor.mdir));
|
||||
assert(left_neighbor.mdir.mid == 0*lfsr_mweight(&lfs)+0);
|
||||
assert(memcmp(&left_neighbor.mdir.u.m, &mdir.u.m,
|
||||
sizeof(mdir.u.m)) == 0);
|
||||
assert(!lfsr_mdir_isdropped(&right_neighbor.mdir));
|
||||
assert(right_neighbor.mdir.mid == 1*lfsr_mweight(&lfs)+1);
|
||||
assert(memcmp(&right_neighbor.mdir.u.m, &msibling.u.m,
|
||||
sizeof(msibling.u.m)) == 0);
|
||||
@@ -3141,11 +3131,9 @@ code = '''
|
||||
assert(memcmp(buffer, "b", 1) == 0);
|
||||
|
||||
// assert that our neighbors were updated correctly
|
||||
assert(!lfsr_mdir_isdropped(&left_neighbor.mdir));
|
||||
assert(left_neighbor.mdir.mid == 0);
|
||||
assert(memcmp(&left_neighbor.mdir.u.m, &lfs.mroot.u.m,
|
||||
sizeof(lfs.mroot.u.m)) == 0);
|
||||
assert(!lfsr_mdir_isdropped(&right_neighbor.mdir));
|
||||
assert(right_neighbor.mdir.mid == 1);
|
||||
assert(memcmp(&right_neighbor.mdir.u.m, &lfs.mroot.u.m,
|
||||
sizeof(lfs.mroot.u.m)) == 0);
|
||||
@@ -3238,10 +3226,8 @@ code = '''
|
||||
assert(memcmp(buffer, "e", 1) == 0);
|
||||
|
||||
// assert that our neighbors were updated correctly
|
||||
assert(!lfsr_mdir_isdropped(&left_neighbor.mdir));
|
||||
assert(left_neighbor.mdir.mid == 0*lfsr_mweight(&lfs)+0);
|
||||
assert(memcmp(&left_neighbor.mdir.u.m, &mdir.u.m, sizeof(mdir.u.m)) == 0);
|
||||
assert(!lfsr_mdir_isdropped(&right_neighbor.mdir));
|
||||
assert(right_neighbor.mdir.mid == 0*lfsr_mweight(&lfs)+2);
|
||||
assert(memcmp(&right_neighbor.mdir.u.m, &mdir.u.m, sizeof(mdir.u.m)) == 0);
|
||||
|
||||
@@ -3330,7 +3316,6 @@ code = '''
|
||||
assert(lfsr_mtree_weight(&lfs) == 4*lfsr_mweight(&lfs));
|
||||
|
||||
// assert that our neighbors were updated correctly
|
||||
assert(!lfsr_mdir_isdropped(&left_neighbor.mdir));
|
||||
assert(left_neighbor.mdir.mid == 0*lfsr_mweight(&lfs)+0);
|
||||
lfsr_mtree_lookup(&lfs, 0*lfsr_mweight(&lfs)+0, &mdir) => 0;
|
||||
assert(memcmp(&left_neighbor.mdir.u.m, &mdir.u.m, sizeof(mdir.u.m)) == 0);
|
||||
@@ -3419,12 +3404,10 @@ code = '''
|
||||
assert(lfsr_mtree_weight(&lfs) == 2*lfsr_mweight(&lfs));
|
||||
|
||||
// assert that our neighbors were updated correctly
|
||||
assert(!lfsr_mdir_isdropped(&left_neighbor.mdir));
|
||||
assert(left_neighbor.mdir.mid == 0*lfsr_mweight(&lfs)+0);
|
||||
lfsr_mtree_lookup(&lfs, 0*lfsr_mweight(&lfs)+0, &mdir) => 0;
|
||||
assert(memcmp(&left_neighbor.mdir.u.m, &mdir.u.m, sizeof(mdir.u.m)) == 0);
|
||||
|
||||
assert(!lfsr_mdir_isdropped(&right_neighbor.mdir));
|
||||
assert(right_neighbor.mdir.mid == 1*lfsr_mweight(&lfs)+0);
|
||||
lfsr_mtree_lookup(&lfs, 1*lfsr_mweight(&lfs)+0, &mdir) => 0;
|
||||
assert(memcmp(&right_neighbor.mdir.u.m, &mdir.u.m, sizeof(mdir.u.m)) == 0);
|
||||
|
||||
Reference in New Issue
Block a user