From c78dd9a59f5a59bbc3c265116ba7972c3dc6c645 Mon Sep 17 00:00:00 2001 From: Duncan Coutts Date: Fri, 7 Mar 2025 21:36:20 +0000 Subject: [PATCH 1/3] fixup test roundtrip on snapshot run --- test/Test/Database/LSMTree/Internal/Snapshot/Codec.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/Test/Database/LSMTree/Internal/Snapshot/Codec.hs b/test/Test/Database/LSMTree/Internal/Snapshot/Codec.hs index 6ce1d39bc..1e26f2266 100644 --- a/test/Test/Database/LSMTree/Internal/Snapshot/Codec.hs +++ b/test/Test/Database/LSMTree/Internal/Snapshot/Codec.hs @@ -154,6 +154,7 @@ testAll test = [ test (Proxy @SnapshotMetaData) , test (Proxy @SnapshotLabel) , test (Proxy @SnapshotTableType) + , test (Proxy @SnapshotRun) -- TableConfig , test (Proxy @TableConfig) , test (Proxy @MergePolicy) From f1857f3e0e0f83dbc96d82eaffd8a903d39457bd Mon Sep 17 00:00:00 2001 From: Recursion Ninja Date: Thu, 27 Feb 2025 17:07:34 -0500 Subject: [PATCH 2/3] Adding MertingTree to the snapshot functions, when present in a union merge --- src/Database/LSMTree/Internal.hs | 32 +++- src/Database/LSMTree/Internal/MergingTree.hs | 12 +- src/Database/LSMTree/Internal/Snapshot.hs | 168 +++++++++++++++++- .../LSMTree/Internal/Snapshot/Codec.hs | 121 ++++++++++++- .../LSMTree/Internal/Snapshot/Codec.hs | 90 +++++++++- .../LSMTree/Internal/Snapshot/Codec/Golden.hs | 91 +++++++++- .../Database/LSMTree/Internal/Snapshot/FS.hs | 52 +++--- ...__-__-__-R1-P0-C1-V0-L0-V0.snapshot.golden | Bin 60 -> 0 bytes ...__-__-__-R1-P0-C1-V0-L1-V0.snapshot.golden | Bin 60 -> 0 bytes ...__-__-__-R1-P1-C1-V0-L1-V0.snapshot.golden | Bin 60 -> 0 bytes ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ...0-__-__-__-E0-__-__-__-M1.snapshot.golden} | Bin ...0-__-__-__-E1-C0-__-__-M1.snapshot.golden} | Bin ...0-__-__-__-E1-C1-V0-L0-M1.snapshot.golden} | Bin ...0-__-__-__-E1-C1-V0-L1-M1.snapshot.golden} | Bin ...0-__-__-__-E1-C1-V1-L0-M1.snapshot.golden} | Bin ...0-__-__-__-E1-C1-V1-L1-M1.snapshot.golden} | Bin ...0-__-__-__-E1-C1-V2-L0-M1.snapshot.golden} | Bin ...0-__-__-__-E1-C1-V2-L1-M1.snapshot.golden} | Bin ...0-__-__-__-__-__-__-__-M1.snapshot.golden} | Bin ...1-C0-__-__-E0-__-__-__-M1.snapshot.golden} | Bin ...1-C0-__-__-E1-C0-__-__-M1.snapshot.golden} | Bin ...1-C0-__-__-E1-C1-V0-L0-M1.snapshot.golden} | Bin ...1-C0-__-__-E1-C1-V0-L1-M1.snapshot.golden} | Bin ...1-C0-__-__-E1-C1-V1-L0-M1.snapshot.golden} | Bin ...1-C0-__-__-E1-C1-V1-L1-M1.snapshot.golden} | Bin ...1-C0-__-__-E1-C1-V2-L0-M1.snapshot.golden} | Bin ...1-C0-__-__-E1-C1-V2-L1-M1.snapshot.golden} | Bin ...1-C0-__-__-__-__-__-__-M1.snapshot.golden} | Bin ...1-C1-V0-L0-E0-__-__-__-M1.snapshot.golden} | Bin ...1-C1-V0-L0-E1-C0-__-__-M1.snapshot.golden} | Bin ...1-C1-V0-L0-E1-C1-V0-L0-M1.snapshot.golden} | Bin ...1-C1-V0-L0-E1-C1-V0-L1-M1.snapshot.golden} | Bin ...1-C1-V0-L0-E1-C1-V1-L0-M1.snapshot.golden} | Bin ...1-C1-V0-L0-E1-C1-V1-L1-M1.snapshot.golden} | Bin ...1-C1-V0-L0-E1-C1-V2-L0-M1.snapshot.golden} | Bin ...1-C1-V0-L0-E1-C1-V2-L1-M1.snapshot.golden} | Bin ...1-C1-V0-L0-__-__-__-__-M1.snapshot.golden} | Bin ...1-C1-V0-L1-E0-__-__-__-M1.snapshot.golden} | Bin ...1-C1-V0-L1-E1-C0-__-__-M1.snapshot.golden} | Bin ...1-C1-V0-L1-E1-C1-V0-L0-M1.snapshot.golden} | Bin ...1-C1-V0-L1-E1-C1-V0-L1-M1.snapshot.golden} | Bin ...1-C1-V0-L1-E1-C1-V1-L0-M1.snapshot.golden} | Bin ...1-C1-V0-L1-E1-C1-V1-L1-M1.snapshot.golden} | Bin ...1-C1-V0-L1-E1-C1-V2-L0-M1.snapshot.golden} | Bin ...1-C1-V0-L1-E1-C1-V2-L1-M1.snapshot.golden} | Bin ...1-C1-V0-L1-__-__-__-__-M1.snapshot.golden} | Bin ...1-C1-V1-L0-E0-__-__-__-M1.snapshot.golden} | Bin ...1-C1-V1-L0-E1-C0-__-__-M1.snapshot.golden} | Bin ...1-C1-V1-L0-E1-C1-V0-L0-M1.snapshot.golden} | Bin ...1-C1-V1-L0-E1-C1-V0-L1-M1.snapshot.golden} | Bin ...1-C1-V1-L0-E1-C1-V1-L0-M1.snapshot.golden} | Bin ...1-C1-V1-L0-E1-C1-V1-L1-M1.snapshot.golden} | Bin ...1-C1-V1-L0-E1-C1-V2-L0-M1.snapshot.golden} | Bin ...1-C1-V1-L0-E1-C1-V2-L1-M1.snapshot.golden} | Bin ...1-C1-V1-L0-__-__-__-__-M1.snapshot.golden} | Bin ...1-C1-V1-L1-E0-__-__-__-M1.snapshot.golden} | Bin ...1-C1-V1-L1-E1-C0-__-__-M1.snapshot.golden} | Bin ...1-C1-V1-L1-E1-C1-V0-L0-M1.snapshot.golden} | Bin ...1-C1-V1-L1-E1-C1-V0-L1-M1.snapshot.golden} | Bin ...1-C1-V1-L1-E1-C1-V1-L0-M1.snapshot.golden} | Bin ...1-C1-V1-L1-E1-C1-V1-L1-M1.snapshot.golden} | Bin ...1-C1-V1-L1-E1-C1-V2-L0-M1.snapshot.golden} | Bin ...1-C1-V1-L1-E1-C1-V2-L1-M1.snapshot.golden} | Bin ...1-C1-V1-L1-__-__-__-__-M1.snapshot.golden} | Bin ...1-C1-V2-L0-E0-__-__-__-M1.snapshot.golden} | Bin ...1-C1-V2-L0-E1-C0-__-__-M1.snapshot.golden} | Bin ...1-C1-V2-L0-E1-C1-V0-L0-M1.snapshot.golden} | Bin ...1-C1-V2-L0-E1-C1-V0-L1-M1.snapshot.golden} | Bin ...1-C1-V2-L0-E1-C1-V1-L0-M1.snapshot.golden} | Bin ...1-C1-V2-L0-E1-C1-V1-L1-M1.snapshot.golden} | Bin ...1-C1-V2-L0-E1-C1-V2-L0-M1.snapshot.golden} | Bin ...1-C1-V2-L0-E1-C1-V2-L1-M1.snapshot.golden} | Bin ...1-C1-V2-L0-__-__-__-__-M1.snapshot.golden} | Bin ...1-C1-V2-L1-E0-__-__-__-M1.snapshot.golden} | Bin ...1-C1-V2-L1-E1-C0-__-__-M1.snapshot.golden} | Bin ...1-C1-V2-L1-E1-C1-V0-L0-M1.snapshot.golden} | Bin ...1-C1-V2-L1-E1-C1-V0-L1-M1.snapshot.golden} | Bin ...1-C1-V2-L1-E1-C1-V1-L0-M1.snapshot.golden} | Bin ...1-C1-V2-L1-E1-C1-V1-L1-M1.snapshot.golden} | Bin ...1-C1-V2-L1-E1-C1-V2-L0-M1.snapshot.golden} | Bin ...1-C1-V2-L1-E1-C1-V2-L1-M1.snapshot.golden} | Bin ...1-C1-V2-L1-__-__-__-__-M1.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-M1.snapshot.golden} | Bin ..._-C0-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-C1-V0-T0-__-__-__-__-__.snapshot.golden} | Bin ..._-C1-V0-T1-__-__-__-__-__.snapshot.golden} | Bin ..._-C1-V1-T0-__-__-__-__-__.snapshot.golden} | Bin ..._-C1-V1-T1-__-__-__-__-__.snapshot.golden} | Bin ..._-C1-V2-T0-__-__-__-__-__.snapshot.golden} | Bin ..._-C1-V2-T1-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ...__-__-__-__-__-__-__-__-__.snapshot.golden | Bin 0 -> 62 bytes ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ...__-__-__-__-__-__-__-__-__.snapshot.golden | Bin 0 -> 62 bytes ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ...__-__-__-__-__-__-__-__-__.snapshot.golden | Bin 0 -> 62 bytes ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ...__-__-__-__-__-__-__-__-__.snapshot.golden | Bin 0 -> 62 bytes ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin ..._-__-__-__-__-__-__-__-__.snapshot.golden} | Bin 175 files changed, 514 insertions(+), 52 deletions(-) delete mode 100644 test/golden-file-data/snapshot-codec/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V0.snapshot.golden delete mode 100644 test/golden-file-data/snapshot-codec/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V0.snapshot.golden delete mode 100644 test/golden-file-data/snapshot-codec/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V0.snapshot.golden rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S0-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S0-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E0-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E0-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C0-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C0-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V0-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V0-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V0-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V0-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V1-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V1-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V1-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V1-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V2-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V2-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V2-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V2-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-__-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-__-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E0-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E0-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C0-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C0-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V0-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V0-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V0-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V0-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V1-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V1-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V1-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V1-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V2-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V2-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V2-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V2-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-__-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-__-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E0-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E0-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C0-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C0-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V0-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V0-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V0-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V0-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V1-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V1-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V1-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V1-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V2-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V2-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V2-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V2-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-__-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-__-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E0-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E0-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C0-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C0-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V0-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V0-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V0-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V0-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V1-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V1-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V1-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V1-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V2-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V2-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V2-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V2-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-__-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-__-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E0-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E0-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C0-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C0-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V0-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V0-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V0-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V0-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V1-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V1-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V1-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V1-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V2-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V2-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V2-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V2-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-__-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-__-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E0-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E0-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C0-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C0-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V0-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V0-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V0-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V0-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V1-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V1-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V1-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V1-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V2-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V2-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V2-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V2-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-__-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-__-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E0-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E0-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C0-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C0-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V0-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V0-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V0-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V0-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V1-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V1-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V1-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V1-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V2-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V2-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V2-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V2-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-__-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-__-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E0-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E0-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C0-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C0-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V0-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V0-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V0-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V0-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V1-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V1-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V1-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V1-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V2-L0-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V2-L0-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V2-L1-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V2-L1-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-__-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-__-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P1-__-__-__-__-__-__-__-__-M1.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P1-__-__-__-__-__-__-__-__-M1.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C0-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C0-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V0-T0-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V0-T0-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V0-T1-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V0-T1-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V1-T0-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V1-T0-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V1-T1-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V1-T1-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V2-T0-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V2-T0-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V2-T1-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V2-T1-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R0-__-__-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R0-__-__-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) create mode 100644 test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) create mode 100644 test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) create mode 100644 test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) create mode 100644 test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A0-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A0-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A0-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A0-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A0-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A0-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A0-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A0-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A0-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A0-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A0-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A0-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A0-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A0-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A0-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A0-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A0-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A0-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A0-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A0-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A0-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A0-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A0-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A0-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A1-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A1-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A1-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A1-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A1-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A1-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A1-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A1-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A1-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A1-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A1-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A1-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A1-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A1-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A1-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A1-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A1-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A1-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A1-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A1-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A1-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A1-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A1-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A1-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A2-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A2-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A2-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A2-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A2-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A2-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A2-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A2-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A2-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A2-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A2-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A2-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A2-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A2-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A2-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A2-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A2-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A2-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A2-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A2-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A2-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A2-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N0-T1-A2-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N0-T1-A2-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N1-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N1-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B0-N2-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B0-N2-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) rename test/golden-file-data/snapshot-metadata/{B1-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot => B1-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden} (100%) diff --git a/src/Database/LSMTree/Internal.hs b/src/Database/LSMTree/Internal.hs index 1c636aeff..8473c8b74 100644 --- a/src/Database/LSMTree/Internal.hs +++ b/src/Database/LSMTree/Internal.hs @@ -64,7 +64,7 @@ module Database.LSMTree.Internal ( , openSnapshot , deleteSnapshot , listSnapshots - -- * Mutiple writable tables + -- * Multiple writable tables , duplicate -- * Table union , unions @@ -318,7 +318,7 @@ data SessionState m h = | SessionClosed data SessionEnv m h = SessionEnv { - -- | The path to the directory in which this sesion is live. This is a path + -- | The path to the directory in which this session is live. This is a path -- relative to root of the 'HasFS' instance. -- -- INVARIANT: the session root is never changed during the lifetime of a @@ -1194,10 +1194,22 @@ createSnapshot snap label tableType t = do -- Hard link runs into the named snapshot directory snapLevels' <- traverse (snapshotRun hfs hbio snapUc reg snapDir) snapLevels - -- Release the table content + -- If a merging tree exists, do the same hard-linking for the runs within + mTreeOpt <- case tableUnionLevel content of + NoUnion -> pure Nothing + Union mTreeRef -> do + mTree <- toSnapMergingTree mTreeRef + Just <$> traverse (snapshotRun hfs hbio snapUc reg snapDir) mTree + releaseTableContent reg content - let snapMetaData = SnapshotMetaData label tableType (tableConfig t) snapWriteBufferNumber snapLevels' + let snapMetaData = SnapshotMetaData + label + tableType + (tableConfig t) + snapWriteBufferNumber + snapLevels' + mTreeOpt SnapshotMetaDataFile contentPath = Paths.snapshotMetaDataFile snapDir SnapshotMetaDataChecksumFile checksumPath = Paths.snapshotMetaDataChecksumFile snapDir writeFileSnapshotMetaData hfs contentPath checksumPath snapMetaData @@ -1242,7 +1254,7 @@ openSnapshot sesh label tableType override snap resolve = do Left e -> throwIO (ErrSnapshotDeserialiseFailure e snap) Right x -> pure x - let SnapshotMetaData label' tableType' conf snapWriteBuffer snapLevels = snapMetaData + let SnapshotMetaData label' tableType' conf snapWriteBuffer snapLevels mTreeOpt = snapMetaData unless (tableType == tableType') $ throwIO (ErrSnapshotWrongTableType snap tableType tableType') @@ -1261,10 +1273,16 @@ openSnapshot sesh label tableType override snap resolve = do -- Hard link runs into the active directory, snapLevels' <- traverse (openRun hfs hbio uc reg snapDir activeDir) snapLevels + unionLevel <- case mTreeOpt of + Nothing -> pure NoUnion + Just mTree -> do + snapTree <- traverse (openRun hfs hbio uc reg snapDir activeDir) mTree + Union <$> fromSnapMergingTree reg hfs hbio conf uc resolve activeDir snapTree -- Convert from the snapshot format, restoring merge progress in the process tableLevels <- fromSnapLevels hfs hbio uc conf resolve reg activeDir snapLevels' traverse_ (delayedCommit reg . releaseRef) snapLevels' + --TODO: also delayedCommit unionLevel tableCache <- mkLevelsCache reg tableLevels newWith reg sesh seshEnv conf' am $! TableContent { @@ -1272,7 +1290,7 @@ openSnapshot sesh label tableType override snap resolve = do , tableWriteBufferBlobs , tableLevels , tableCache - , tableUnionLevel = NoUnion -- TODO: at some point also load union level from snapshot + , tableUnionLevel = unionLevel } {-# SPECIALISE deleteSnapshot :: @@ -1322,7 +1340,7 @@ listSnapshots sesh = do else pure $ Nothing {------------------------------------------------------------------------------- - Mutiple writable tables + Multiple writable tables -------------------------------------------------------------------------------} {-# SPECIALISE duplicate :: Table IO h -> IO (Table IO h) #-} diff --git a/src/Database/LSMTree/Internal/MergingTree.hs b/src/Database/LSMTree/Internal/MergingTree.hs index fbcc7012e..e37ac87c2 100644 --- a/src/Database/LSMTree/Internal/MergingTree.hs +++ b/src/Database/LSMTree/Internal/MergingTree.hs @@ -2,6 +2,7 @@ module Database.LSMTree.Internal.MergingTree ( -- $mergingtrees MergingTree (..) + , newOngoingMerge , PreExistingRun (..) , newPendingLevelMerge , newPendingUnionMerge @@ -102,6 +103,15 @@ data PreExistingRun m h = PreExistingRun !(Ref (Run m h)) | PreExistingMergingRun !(Ref (MergingRun MR.LevelMergeType m h)) +-- | Create a new 'MergingTree' representing the merge of an ongoing run. +-- The usage of this function is primarily to facilitate the reloading of an +-- ongoing merge from a persistent snapshot. +newOngoingMerge :: + (MonadMVar m, PrimMonad m, MonadMask m) + => Ref (MergingRun MR.TreeMergeType m h) + -> m (Ref (MergingTree m h)) +newOngoingMerge = mkMergingTree . OngoingTreeMerge + -- | Create a new 'MergingTree' representing the merge of a sequence of -- pre-existing runs (completed or ongoing, plus a optional final tree). -- This is for merging the entire contents of a table down to a single run @@ -183,7 +193,7 @@ newPendingUnionMerge :: -> m (Ref (MergingTree m h)) newPendingUnionMerge mts = do mts' <- V.filterM (fmap not . isStructurallyEmpty) (V.fromList mts) - -- isStructurallyEmpty is interruptable even with async exceptions masked, + -- isStructurallyEmpty is interruptible even with async exceptions masked, -- but we use it before allocating new references. mts'' <- V.mapM dupRef mts' case V.uncons mts'' of diff --git a/src/Database/LSMTree/Internal/Snapshot.hs b/src/Database/LSMTree/Internal/Snapshot.hs index 94198378f..238a5830b 100644 --- a/src/Database/LSMTree/Internal/Snapshot.hs +++ b/src/Database/LSMTree/Internal/Snapshot.hs @@ -9,16 +9,26 @@ module Database.LSMTree.Internal.Snapshot ( , SnapLevel (..) , SnapIncomingRun (..) , SnapMergingRunState (..) + -- * MergeTree snapshot format + , SnapMergingTree(..) + , SnapMergingTreeState(..) + , SnapPendingMerge(..) + , SnapPreExistingRun(..) -- * Conversion to levels snapshot format , toSnapLevels + -- * Conversion to merging tree snapshot format + , toSnapMergingTree -- * Write buffer , snapshotWriteBuffer , openWriteBuffer -- * Run , snapshotRun , openRun - -- * Opening from levels snapshot format + -- * Opening snapshot formats + -- ** Levels format , fromSnapLevels + -- ** Mergeing Tree format + , fromSnapMergingTree -- * Hard links , hardLinkRunFiles ) where @@ -43,6 +53,7 @@ import qualified Database.LSMTree.Internal.Merge as Merge import Database.LSMTree.Internal.MergeSchedule import Database.LSMTree.Internal.MergingRun (NumRuns (..)) import qualified Database.LSMTree.Internal.MergingRun as MR +import qualified Database.LSMTree.Internal.MergingTree as MT import Database.LSMTree.Internal.Paths (ActiveDir (..), ForBlob (..), ForKOps (..), NamedSnapshotDir (..), RunFsPaths (..), WriteBufferFsPaths (..), @@ -93,7 +104,7 @@ data SnapshotMetaData = SnapshotMetaData { -- -- One could argue that the 'SnapshotName' could be used to to hold this -- type information, but the file name of snapshot metadata is not guarded - -- by a checksum, wherease the contents of the file are. Therefore using the + -- by a checksum, whereas the contents of the file are. Therefore using the -- 'SnapshotLabel' is safer. snapMetaLabel :: !SnapshotLabel -- | Whether a table is normal or monoidal. @@ -110,11 +121,15 @@ data SnapshotMetaData = SnapshotMetaData { , snapWriteBuffer :: !RunNumber -- | The shape of the levels of the LSM tree. , snapMetaLevels :: !(SnapLevels SnapshotRun) + -- | The state of tree merging of the LSM tree. + , snapMergingTree :: !(Maybe (SnapMergingTree SnapshotRun)) } deriving stock Eq instance NFData SnapshotMetaData where - rnf (SnapshotMetaData a b c d e) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d `seq` rnf e + rnf (SnapshotMetaData a b c d e f) = + rnf a `seq` rnf b `seq` rnf c `seq` + rnf d `seq` rnf e `seq` rnf f -- | Information needed to open a 'Run' from disk, see 'Run.openFromDisk'. -- @@ -197,6 +212,151 @@ instance (NFData t, NFData r) => NFData (SnapMergingRunState t r) where rnf (SnapCompletedMerge a b c) = rnf a `seq` rnf b `seq` rnf c rnf (SnapOngoingMerge a b c d) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d +{------------------------------------------------------------------------------- + Snapshot MergingTree +-------------------------------------------------------------------------------} + +newtype SnapMergingTree r = SnapMergingTree (SnapMergingTreeState r) + deriving stock (Eq, Functor, Foldable, Traversable) + deriving newtype NFData + +data SnapMergingTreeState r = + SnapCompletedTreeMerge !r + | SnapPendingTreeMerge !(SnapPendingMerge r) + | SnapOngoingTreeMerge + !(SnapMergingRunState MR.TreeMergeType r) + deriving stock (Eq, Functor, Foldable, Traversable) + +instance NFData r => NFData (SnapMergingTreeState r) where + rnf (SnapCompletedTreeMerge a) = rnf a + rnf (SnapPendingTreeMerge a) = rnf a + rnf (SnapOngoingTreeMerge a) = rnf a + +data SnapPendingMerge r = + SnapPendingLevelMerge + ![SnapPreExistingRun r] + !(Maybe (SnapMergingTree r)) + | SnapPendingUnionMerge + ![SnapMergingTree r] + deriving stock (Eq, Functor, Foldable, Traversable) + +instance NFData r => NFData (SnapPendingMerge r) where + rnf (SnapPendingLevelMerge a b) = rnf a `seq` rnf b + rnf (SnapPendingUnionMerge a) = rnf a + +data SnapPreExistingRun r = + SnapPreExistingRun !r + | SnapPreExistingMergingRun + !(SnapMergingRunState MR.LevelMergeType r) + deriving stock (Eq, Functor, Foldable, Traversable) + +instance NFData r => NFData (SnapPreExistingRun r) where + rnf (SnapPreExistingRun a) = rnf a + rnf (SnapPreExistingMergingRun a) = rnf a + +{------------------------------------------------------------------------------- + Opening from merging tree snapshot format +-------------------------------------------------------------------------------} + +{-# SPECIALISE fromSnapMergingTree :: + ActionRegistry IO + -> HasFS IO h + -> HasBlockIO IO h + -> TableConfig + -> UniqCounter IO + -> ResolveSerialisedValue + -> ActiveDir + -> SnapMergingTree (Ref (Run IO h)) + -> IO (Ref (MT.MergingTree IO h)) + #-} +-- | Duplicates runs and re-creates merging runs. +fromSnapMergingTree :: + forall m h. (MonadMask m, MonadMVar m, MonadSTM m, MonadST m) + => ActionRegistry m + -> HasFS m h + -> HasBlockIO m h + -> TableConfig + -> UniqCounter m + -> ResolveSerialisedValue + -> ActiveDir + -> SnapMergingTree (Ref (Run m h)) + -> m (Ref (MT.MergingTree m h)) +fromSnapMergingTree reg hfs hbio conf uc resolve dir (SnapMergingTree snapTreeState) = + fromSnapTreeState snapTreeState + where + -- Partially applied functions for convenience + recurrence :: SnapMergingTree (Ref (Run m h)) -> m (Ref (MT.MergingTree m h)) + recurrence = fromSnapMergingTree reg hfs hbio conf uc resolve dir + + getSnapMergingRunState + :: forall t. + MR.IsMergeType t + => SnapMergingRunState t (Ref (Run m h)) + -> m (Ref (MR.MergingRun t m h)) + getSnapMergingRunState = fromSnapMergingRunState hfs hbio uc resolve dir + + -- Conversion definitions + fromSnapTreeState :: SnapMergingTreeState (Ref (Run m h)) -> m (Ref (MT.MergingTree m h)) + fromSnapTreeState (SnapCompletedTreeMerge run) = + MT.newPendingLevelMerge [MT.PreExistingRun run] Nothing + fromSnapTreeState (SnapPendingTreeMerge pMerge) = case pMerge of + SnapPendingLevelMerge peRuns maybeMergeTree -> do + peRuns' <- traverse fromSnapPreExistingRun peRuns + maybeMergeTree' <- traverse recurrence maybeMergeTree + MT.newPendingLevelMerge peRuns' maybeMergeTree' + SnapPendingUnionMerge mergeTrees -> + MT.newPendingUnionMerge =<< traverse recurrence mergeTrees + fromSnapTreeState (SnapOngoingTreeMerge smrs) = + MT.newOngoingMerge =<< getSnapMergingRunState smrs + + fromSnapPreExistingRun :: SnapPreExistingRun (Ref (Run m h)) -> m (MT.PreExistingRun m h) + fromSnapPreExistingRun (SnapPreExistingRun run) = pure $ MT.PreExistingRun run + fromSnapPreExistingRun (SnapPreExistingMergingRun smrs) = + MT.PreExistingMergingRun <$> getSnapMergingRunState smrs + +{------------------------------------------------------------------------------- + Conversion to merge tree snapshot format +-------------------------------------------------------------------------------} + +{-# SPECIALISE toSnapMergingTree :: Ref (MT.MergingTree IO h) -> IO (SnapMergingTree (Ref (Run IO h))) #-} +toSnapMergingTree :: + (PrimMonad m, MonadMVar m) + => Ref (MT.MergingTree m h) + -> m (SnapMergingTree (Ref (Run m h))) +toSnapMergingTree (DeRef (MT.MergingTree mStateVar _mCounter)) = + withMVar mStateVar $ \mState -> SnapMergingTree <$> toSnapMergingTreeState mState + +{-# SPECIALISE toSnapMergingTreeState :: MT.MergingTreeState IO h -> IO (SnapMergingTreeState (Ref (Run IO h))) #-} +toSnapMergingTreeState :: + (PrimMonad m, MonadMVar m) + => MT.MergingTreeState m h + -> m (SnapMergingTreeState (Ref (Run m h))) +toSnapMergingTreeState (MT.CompletedTreeMerge r) = pure $ SnapCompletedTreeMerge r +toSnapMergingTreeState (MT.PendingTreeMerge p) = SnapPendingTreeMerge <$> toSnapPendingMerge p +toSnapMergingTreeState (MT.OngoingTreeMerge mergingRun) = + SnapOngoingTreeMerge <$> toSnapMergingRunState mergingRun + +{-# SPECIALISE toSnapPendingMerge :: MT.PendingMerge IO h -> IO (SnapPendingMerge (Ref (Run IO h))) #-} +toSnapPendingMerge :: + (PrimMonad m, MonadMVar m) + => MT.PendingMerge m h + -> m (SnapPendingMerge (Ref (Run m h))) +toSnapPendingMerge (MT.PendingUnionMerge mts) = + SnapPendingUnionMerge <$> traverse toSnapMergingTree (V.toList mts) +toSnapPendingMerge (MT.PendingLevelMerge pes mmt) = do + pes' <- traverse toSnapPreExistingRun pes + mmt' <- traverse toSnapMergingTree mmt + pure $ SnapPendingLevelMerge (V.toList pes') mmt' + +{-# SPECIALISE toSnapPreExistingRun :: MT.PreExistingRun IO h -> IO (SnapPreExistingRun (Ref (Run IO h))) #-} +toSnapPreExistingRun :: + (PrimMonad m, MonadMVar m) + => MT.PreExistingRun m h + -> m (SnapPreExistingRun (Ref (Run m h))) +toSnapPreExistingRun (MT.PreExistingRun run) = pure $ SnapPreExistingRun run +toSnapPreExistingRun (MT.PreExistingMergingRun peMergingRun) = + SnapPreExistingMergingRun <$> toSnapMergingRunState peMergingRun + {------------------------------------------------------------------------------- Conversion to levels snapshot format -------------------------------------------------------------------------------} @@ -247,7 +407,7 @@ toSnapMergingRunState :: -> m (SnapMergingRunState t (Ref (Run m h))) toSnapMergingRunState !mr = do -- TODO: MR.snapshot needs to return duplicated run references, and we - -- need to arrange to release them when the snapshoting is done. + -- need to arrange to release them when the snapshotting is done. (numRuns, mergeDebt, mergeCredits, state) <- MR.snapshot mr case state of MR.CompletedMerge r -> diff --git a/src/Database/LSMTree/Internal/Snapshot/Codec.hs b/src/Database/LSMTree/Internal/Snapshot/Codec.hs index 8aa6d5631..1bae8dfdd 100644 --- a/src/Database/LSMTree/Internal/Snapshot/Codec.hs +++ b/src/Database/LSMTree/Internal/Snapshot/Codec.hs @@ -5,6 +5,7 @@ module Database.LSMTree.Internal.Snapshot.Codec ( , prettySnapshotVersion , currentSnapshotVersion -- * Writing and reading files + -- ** Metadata , writeFileSnapshotMetaData , readFileSnapshotMetaData , encodeSnapshotMetaData @@ -20,11 +21,12 @@ import Codec.CBOR.Decoding import Codec.CBOR.Encoding import Codec.CBOR.Read import Codec.CBOR.Write -import Control.Monad (when) +import Control.Monad (replicateM, when) import Control.Monad.Class.MonadThrow (MonadThrow (..)) import Data.Bifunctor import qualified Data.ByteString.Char8 as BSC import Data.ByteString.Lazy (ByteString) +import Data.Foldable (fold) import qualified Data.Map.Strict as Map import qualified Data.Vector as V import Database.LSMTree.Internal.Config @@ -149,6 +151,7 @@ encodeSnapshotMetaData = toLazyByteString . encode . Versioned decodeSnapshotMetaData :: ByteString -> Either DeserialiseFailure SnapshotMetaData decodeSnapshotMetaData bs = second (getVersioned . snd) (deserialiseFromBytes decode bs) + {------------------------------------------------------------------------------- Encoding and decoding -------------------------------------------------------------------------------} @@ -159,7 +162,7 @@ class Encode a where -- | Decoder that is not parameterised by a 'SnapshotVersion'. -- -- Used only for 'SnapshotVersion' and 'Versioned', which live outside the --- 'SnapshotMetaData' type hierachy. +-- 'SnapshotMetaData' type hierarchy. class Decode a where decode :: Decoder s a @@ -220,23 +223,25 @@ instance Decode SnapshotVersion where -- SnapshotMetaData instance Encode SnapshotMetaData where - encode (SnapshotMetaData label tableType config writeBuffer levels) = - encodeListLen 5 + encode (SnapshotMetaData label tableType config writeBuffer levels mergingTree) = + encodeListLen 7 <> encode label <> encode tableType <> encode config <> encode writeBuffer <> encode levels + <> encodeMaybe mergingTree instance DecodeVersioned SnapshotMetaData where decodeVersioned ver@V0 = do - _ <- decodeListLenOf 5 + _ <- decodeListLenOf 7 SnapshotMetaData <$> decodeVersioned ver <*> decodeVersioned ver <*> decodeVersioned ver <*> decodeVersioned ver <*> decodeVersioned ver + <*> decodeMaybe ver -- SnapshotLabel @@ -705,3 +710,109 @@ instance DecodeVersioned MR.TreeMergeType where 1 -> pure MR.MergeLevel 2 -> pure MR.MergeUnion _ -> fail ("[TreeMergeType] Unexpected tag: " <> show tag) + +{------------------------------------------------------------------------------- + Encoding and decoding: SnapMergingTree +-------------------------------------------------------------------------------} + +-- SnapMergingTree + +instance Encode r => Encode (SnapMergingTree r) where + encode (SnapMergingTree tState) = encode tState + +instance DecodeVersioned r => DecodeVersioned (SnapMergingTree r) where + decodeVersioned ver@V0 = SnapMergingTree <$> decodeVersioned ver + +-- SnapMergingTreeState + +instance Encode r => Encode (SnapMergingTreeState r) where + encode (SnapCompletedTreeMerge x) = + encodeListLen 2 + <> encodeWord 0 + <> encode x + encode (SnapPendingTreeMerge x) = + encodeListLen 2 + <> encodeWord 1 + <> encode x + encode (SnapOngoingTreeMerge smrs) = + encodeListLen 2 + <> encodeWord 2 + <> encode smrs + +instance DecodeVersioned r => DecodeVersioned (SnapMergingTreeState r) where + decodeVersioned v@V0 = do + n <- decodeListLen + tag <- decodeWord + case (n, tag) of + (2, 0) -> SnapCompletedTreeMerge <$> decodeVersioned v + (2, 1) -> SnapPendingTreeMerge <$> decodeVersioned v + (2, 2) -> SnapOngoingTreeMerge <$> decodeVersioned v + _ -> fail ("[SnapMergingTreeState] Unexpected combination of list length and tag: " <> show (n, tag)) + +-- SnapPendingMerge + +instance Encode r => Encode (SnapPendingMerge r) where + encode (SnapPendingLevelMerge pe mt) = fold + [ encodeListLen 4 + , encodeWord 0 + , encodeMaybe mt + , encodeListLen . toEnum $ length pe + , foldMap encode pe + ] + encode (SnapPendingUnionMerge mts) = + encodeListLen 2 + <> encodeWord 1 + <> encodeListLen (toEnum $ length mts) + <> foldMap encode mts + +instance DecodeVersioned r => DecodeVersioned (SnapPendingMerge r) where + decodeVersioned v@V0 = do + n <- decodeListLen + tag <- decodeWord + case (n, tag) of + (4, 0) -> do + -- Get the whether or not the levels merge exists + peLvls <- decodeMaybe v + peLen <- decodeListLen + peRuns <- replicateM peLen (decodeVersioned v) + pure $ SnapPendingLevelMerge peRuns peLvls + (2, 1) -> do + -- Get the number of pre-existsing unions to read + peLen <- decodeListLen + SnapPendingUnionMerge <$> replicateM peLen (decodeVersioned v) + _ -> fail ("[SnapPendingMerge] Unexpected combination of list length and tag: " <> show (n, tag)) + +-- SnapPreExistingRun + +instance Encode r => Encode (SnapPreExistingRun r) where + encode (SnapPreExistingRun x) = + encodeListLen 2 + <> encodeWord 0 + <> encode x + encode (SnapPreExistingMergingRun smrs) = + encodeListLen 2 + <> encodeWord 1 + <> encode smrs + +instance DecodeVersioned r => DecodeVersioned (SnapPreExistingRun r) where + decodeVersioned v@V0 = do + n <- decodeListLen + tag <- decodeWord + case (n, tag) of + (2, 0) -> SnapPreExistingRun <$> decodeVersioned v + (2, 1) -> SnapPreExistingMergingRun <$> decodeVersioned v + _ -> fail ("[SnapPreExistingRun] Unexpected combination of list length and tag: " <> show (n, tag)) + +-- Utilities for encoding/decoding Maybe values + +encodeMaybe :: Encode a => Maybe a -> Encoding +encodeMaybe = \case + Nothing -> encodeBool False <> encodeNull + Just en -> encodeBool True <> encode en + + +decodeMaybe :: DecodeVersioned a => SnapshotVersion -> Decoder s (Maybe a) +decodeMaybe v@V0 = decodeBool >>= \exist -> + if exist + then Just <$> decodeVersioned v + else Nothing <$ decodeNull diff --git a/test/Test/Database/LSMTree/Internal/Snapshot/Codec.hs b/test/Test/Database/LSMTree/Internal/Snapshot/Codec.hs index 1e26f2266..fee4d2bb2 100644 --- a/test/Test/Database/LSMTree/Internal/Snapshot/Codec.hs +++ b/test/Test/Database/LSMTree/Internal/Snapshot/Codec.hs @@ -34,10 +34,6 @@ tests = testGroup "Test.Database.LSMTree.Internal.Snapshot.Codec" [ testProperty "roundtripCBOR" $ roundtripCBOR (Proxy @SnapshotVersion) , testProperty "roundtripFlatTerm" $ roundtripFlatTerm (Proxy @SnapshotVersion) ] - , testGroup "Versioned SnapshotMetaData" [ - testProperty "roundtripCBOR" $ roundtripCBOR (Proxy @(Versioned SnapshotMetaData)) - , testProperty "roundtripFlatTerm" $ roundtripFlatTerm (Proxy @(Versioned SnapshotMetaData)) - ] , testGroup "roundtripCBOR'" $ propAll roundtripCBOR' , testGroup "roundtripFlatTerm'" $ @@ -179,6 +175,10 @@ testAll test = [ , test (Proxy @NominalCredits) , test (Proxy @LevelMergeType) , test (Proxy @TreeMergeType) + , test (Proxy @(SnapMergingTree SnapshotRun)) + , test (Proxy @(SnapMergingTreeState SnapshotRun)) + , test (Proxy @(SnapPendingMerge SnapshotRun)) + , test (Proxy @(SnapPreExistingRun SnapshotRun)) ] {------------------------------------------------------------------------------- @@ -196,10 +196,12 @@ deriving newtype instance Arbitrary a => Arbitrary (Versioned a) -------------------------------------------------------------------------------} instance Arbitrary SnapshotMetaData where - arbitrary = SnapshotMetaData <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary - shrink (SnapshotMetaData a b c d e) = - [ SnapshotMetaData a' b' c' d' e' - | (a', b', c', d', e') <- shrink (a, b, c, d, e)] + arbitrary = SnapshotMetaData <$> + arbitrary <*> arbitrary <*> arbitrary <*> + arbitrary <*> arbitrary <*> arbitrary + shrink (SnapshotMetaData a b c d e f) = + [ SnapshotMetaData a' b' c' d' e' f' + | (a', b', c', d', e', f') <- shrink (a, b, c, d, e, f)] deriving newtype instance Arbitrary SnapshotLabel @@ -360,7 +362,79 @@ deriving stock instance Show r => Show (SnapLevels r) deriving stock instance Show r => Show (SnapLevel r) deriving stock instance Show r => Show (SnapIncomingRun r) deriving stock instance (Show t, Show r) => Show (SnapMergingRunState t r) + +deriving stock instance Show r => Show (SnapMergingTree r) +deriving stock instance Show r => Show (SnapMergingTreeState r) +deriving stock instance Show r => Show (SnapPendingMerge r) +deriving stock instance Show r => Show (SnapPreExistingRun r) + deriving stock instance Show MergeDebt deriving stock instance Show MergeCredits deriving stock instance Show NominalDebt deriving stock instance Show NominalCredits + +{------------------------------------------------------------------------------- + Arbitrary: SnapshotMetaData +-------------------------------------------------------------------------------} + +deriving newtype instance Arbitrary r => Arbitrary (SnapMergingTree r) + +instance Arbitrary r => Arbitrary (SnapMergingTreeState r) where + arbitrary = inductiveMergingTreeState inductiveLimit + shrink (SnapCompletedTreeMerge a) = SnapCompletedTreeMerge <$> shrink a + shrink (SnapPendingTreeMerge a) = SnapPendingTreeMerge <$> shrink a + shrink (SnapOngoingTreeMerge a) = SnapOngoingTreeMerge <$> shrink a + +instance Arbitrary r => Arbitrary (SnapPendingMerge r) where + arbitrary = inductivePendingTreeMerge inductiveLimit + shrink (SnapPendingUnionMerge a) = SnapPendingUnionMerge <$> shrinkList shrink a + shrink (SnapPendingLevelMerge a b) = + [ SnapPendingLevelMerge a' b' | a' <- shrinkList shrink a, b' <- shrink b ] + + +instance Arbitrary r => Arbitrary (SnapPreExistingRun r) where + arbitrary = oneof [ + SnapPreExistingRun <$> arbitrary + , SnapPreExistingMergingRun <$> arbitrary + ] + shrink (SnapPreExistingRun a) = SnapPreExistingRun <$> shrink a + shrink (SnapPreExistingMergingRun a) = SnapPreExistingMergingRun <$> shrink a + +-- | The 'SnapMergingTree' is an inductive data-type and therefore we must limit +-- the recursive depth at which new 'Arbitrary' sub-trees are generated. Hence +-- the need for this limit. This limit is the "gas" for the inductive functions. +-- At reach recursive call, the "gas" value decremented until it reaches zero. +-- Each inductive function ensures it never create a forest of sub-trees greater +-- than the /monotonically decreasing/ gas parameter it received. +inductiveLimit :: Int +inductiveLimit = 4 + +-- | +-- Generate an 'Arbitrary', "gas-limited" 'SnapMergingTree'. +inductiveSized :: Arbitrary r => Int -> Gen (SnapMergingTree r) +inductiveSized = fmap SnapMergingTree . inductiveMergingTreeState + +-- | +-- Generate an 'Arbitrary', "gas-limited" 'SnapMergingTreeState'. +inductiveMergingTreeState :: Arbitrary a => Int -> Gen (SnapMergingTreeState a) +inductiveMergingTreeState gas = oneof [ + SnapCompletedTreeMerge <$> arbitrary + , SnapPendingTreeMerge <$> inductivePendingTreeMerge gas + , SnapOngoingTreeMerge <$> arbitrary + ] + +-- | +-- Generate an 'Arbitrary', "gas-limited" 'SnapPendingMerge'. +inductivePendingTreeMerge :: Arbitrary a => Int -> Gen (SnapPendingMerge a) +inductivePendingTreeMerge gas = oneof [ + SnapPendingLevelMerge <$> genPreExistings <*> genMaybeSubTree + , SnapPendingUnionMerge <$> genListSubtrees + ] + where + subGen = inductiveSized . max 0 $ gas - 1 + -- Define custom generators to ensure that the sub-trees are less than + -- or equal to the "gas" parameter. + genPreExistings = genVectorsUpToBound gas arbitrary + genListSubtrees = genVectorsUpToBound gas subGen + genMaybeSubTree = oneof [ pure Nothing, Just <$> subGen ] + genVectorsUpToBound x gen = oneof $ flip vectorOf gen <$> [ 0 .. x ] diff --git a/test/Test/Database/LSMTree/Internal/Snapshot/Codec/Golden.hs b/test/Test/Database/LSMTree/Internal/Snapshot/Codec/Golden.hs index fccb8b429..40d6f658e 100644 --- a/test/Test/Database/LSMTree/Internal/Snapshot/Codec/Golden.hs +++ b/test/Test/Database/LSMTree/Internal/Snapshot/Codec/Golden.hs @@ -4,6 +4,7 @@ module Test.Database.LSMTree.Internal.Snapshot.Codec.Golden import Codec.CBOR.Write (toLazyByteString) import Control.Monad (when) +import Data.Bifunctor (second) import qualified Data.ByteString.Lazy as BSL (writeFile) import Data.Foldable (fold) import qualified Data.List as List @@ -40,15 +41,16 @@ tests = handleOutputFiles . testGroup , testCodecSnapshotTableType , testCodecTableConfig , testCodecSnapLevels + , testCodecMergingTree ] -- | The mount point is defined as the location of the golden file data directory -- relative to the project root. goldenDataMountPoint :: MountPoint -goldenDataMountPoint = MountPoint "test/golden-file-data/snapshot-codec" +goldenDataMountPoint = MountPoint "test/golden-file-data/snapshot-metadata" -- | Delete output files on test-case success. --- Change the option here if this is undesireable. +-- Change the option here if this is undesirable. handleOutputFiles :: TestTree -> TestTree handleOutputFiles = Tasty.localOption Au.OnPass @@ -83,7 +85,7 @@ snapshotCodecTest name datum = outputAction = do -- Ensure that if the output file already exists, we remove it and -- re-write out the serialized data. This ensures that there are no - -- false-positives, false-negatives, or irrelavent I/O exceptions. + -- false-positives, false-negatives, or irrelevant I/O exceptions. removeIfExists snapshotFsPath BSL.writeFile snapshotHsPath . toLazyByteString $ encode datum @@ -96,7 +98,8 @@ testCodecSnapshotLabel = (tagC, valC) = basicTableConfig valD = basicRunNumber (tagE, valE) = basicSnapLevels - in (fuseAnnotations [tagA, tagB, tagC, tagE ], SnapshotMetaData valA valB valC valD valE) + (tagF, valF) = basicSnapMergingTree + in (fuseAnnotations [tagA, tagB, tagC, tagE, tagF ], SnapshotMetaData valA valB valC valD valE valF) in testCodecBuilder "SnapshotLabels" $ assembler <$> enumerateSnapshotLabel testCodecSnapshotTableType :: TestTree @@ -106,7 +109,8 @@ testCodecSnapshotTableType = (tagC, valC) = basicTableConfig valD = basicRunNumber (tagE, valE) = basicSnapLevels - in (fuseAnnotations [tagA, tagB, tagC, tagE ], SnapshotMetaData valA valB valC valD valE) + (tagF, valF) = basicSnapMergingTree + in (fuseAnnotations [tagA, tagB, tagC, tagE, tagF ], SnapshotMetaData valA valB valC valD valE valF) in testCodecBuilder "SnapshotTables" $ assembler <$> enumerateSnapshotTableType testCodecTableConfig :: TestTree @@ -116,7 +120,8 @@ testCodecTableConfig = (tagB, valB) = basicSnapshotTableType valD = basicRunNumber (tagE, valE) = basicSnapLevels - in (fuseAnnotations [tagA, tagB, tagC, tagE ], SnapshotMetaData valA valB valC valD valE) + (tagF, valF) = basicSnapMergingTree + in (fuseAnnotations [tagA, tagB, tagC, tagE, tagF ], SnapshotMetaData valA valB valC valD valE valF) in testCodecBuilder "SnapshotConfig" $ assembler <$> enumerateTableConfig testCodecSnapLevels :: TestTree @@ -126,9 +131,21 @@ testCodecSnapLevels = (tagB, valB) = basicSnapshotTableType (tagC, valC) = basicTableConfig valD = basicRunNumber - in (fuseAnnotations [tagA, tagB, tagC, tagE ], SnapshotMetaData valA valB valC valD valE) + (tagF, valF) = basicSnapMergingTree + in (fuseAnnotations [tagA, tagB, tagC, tagE, tagF ], SnapshotMetaData valA valB valC valD valE valF) in testCodecBuilder "SnapshotLevels" $ assembler <$> enumerateSnapLevels +testCodecMergingTree :: TestTree +testCodecMergingTree = + let assembler (tagF, valF) = + let (tagA, valA) = basicSnapshotLabel + (tagB, valB) = basicSnapshotTableType + (tagC, valC) = basicTableConfig + valD = basicRunNumber + (tagE, valE) = basicSnapLevels + in (fuseAnnotations [tagA, tagB, tagC, tagE, tagF ], SnapshotMetaData valA valB valC valD valE valF) + in testCodecBuilder "SnapshotMergingTree" $ assembler <$> enumerateSnapMergingTree + testCodecBuilder :: TestName -> [(ComponentAnnotation, SnapshotMetaData)] -> TestTree testCodecBuilder tName metadata = testGroup tName $ uncurry snapshotCodecTest <$> metadata @@ -160,6 +177,9 @@ basicRunNumber = enumerateRunNumbers basicSnapLevels :: (ComponentAnnotation, SnapLevels SnapshotRun) basicSnapLevels = head enumerateSnapLevels +basicSnapMergingTree :: (ComponentAnnotation, Maybe (SnapMergingTree SnapshotRun)) +basicSnapMergingTree = head enumerateSnapMergingTree + {---------------- Enumeration of SnapshotMetaData sub-components ----------------} @@ -263,6 +283,63 @@ enumerateVectorRunInfo = } ]) ] +{---------------- +Enumeration of SnapMergingTree sub-components +----------------} + +enumerateSnapMergingTree :: [(ComponentAnnotation, Maybe (SnapMergingTree SnapshotRun))] +enumerateSnapMergingTree = + let noneTrees = (fuseAnnotations $ "M0" : replicate 11 blank, Nothing) + someTrees = reannotate <$> enumerateSnapMergingTreeState True + reannotate (tag, val) = (fuseAnnotations ["M1", tag], Just val) + in noneTrees : someTrees + +enumerateSnapMergingTreeState :: Bool -> [(ComponentAnnotation, SnapMergingTree SnapshotRun)] +enumerateSnapMergingTreeState expandable = + let s0 = [ (fuseAnnotations $ "S0" : replicate 10 blank, SnapCompletedTreeMerge enumerateOpenRunInfo) ] + s1 = do + (tagX, valX) <- enumerateSnapPendingMerge expandable + [ (fuseAnnotations ["S1", tagX], SnapPendingTreeMerge valX) ] + s2 = do + (tagX, valX) <- enumerateSnapOngoingTreeMerge + [ (fuseAnnotations ["S2", tagX], valX) ] + in second SnapMergingTree <$> fold [ s0, s1, s2 ] + +enumerateSnapOngoingTreeMerge :: [(ComponentAnnotation, SnapMergingTreeState SnapshotRun)] +enumerateSnapOngoingTreeMerge = do + (tagX, valX) <- enumerateSnapMergingRunState enumerateTreeMergeType + let value = SnapOngoingTreeMerge valX + pure ( fuseAnnotations $ ["G0", blank, tagX] <> replicate 5 blank, value ) + +enumerateSnapPendingMerge :: Bool -> [(ComponentAnnotation, SnapPendingMerge SnapshotRun)] +enumerateSnapPendingMerge expandable = + let (tagTrees, subTrees) + | not expandable = ("M0", []) + | otherwise = ("M1", snd <$> enumerateSnapMergingTreeState False) + headMay [] = Nothing + headMay (x:_) = Just x + prefix = do + extra <- [False, True ] + (tagPre, valPre) <- enumerateSnapPreExistingRun + (tagExt, valExt) <- + if extra + then second pure <$> enumerateSnapPreExistingRun + else [(fuseAnnotations $ replicate 4 blank, [])] + let preValues = [ valPre ] <> valExt + pure (fuseAnnotations [ "P0", tagPre, tagExt, tagTrees], SnapPendingLevelMerge preValues $ headMay subTrees) + in prefix <> [(fuseAnnotations $ fold [["P1"], replicate 8 blank, [tagTrees]], SnapPendingUnionMerge subTrees)] + +enumerateSnapPreExistingRun :: [(ComponentAnnotation, SnapPreExistingRun SnapshotRun)] +enumerateSnapPreExistingRun = + ( fuseAnnotations ("E0" : replicate 3 blank), SnapPreExistingRun enumerateOpenRunInfo) + : [ (fuseAnnotations ["E1", tagX], SnapPreExistingMergingRun valX) + | (tagX, valX) <- enumerateSnapMergingRunState enumerateLevelMergeType + ] + +enumerateTreeMergeType :: [(ComponentAnnotation, MR.TreeMergeType)] +enumerateTreeMergeType = + [("T0", MR.MergeLevel), ("T1", MR.MergeUnion)] + {---------------- Enumeration of SnapshotMetaData sub-sub-components and so on... ----------------} diff --git a/test/Test/Database/LSMTree/Internal/Snapshot/FS.hs b/test/Test/Database/LSMTree/Internal/Snapshot/FS.hs index 010075437..7cc028cc7 100644 --- a/test/Test/Database/LSMTree/Internal/Snapshot/FS.hs +++ b/test/Test/Database/LSMTree/Internal/Snapshot/FS.hs @@ -23,6 +23,7 @@ import Database.LSMTree.Internal.Snapshot import Database.LSMTree.Internal.Snapshot.Codec import qualified System.FS.API as FS import System.FS.API +import System.FS.IO (HandleIO) import System.FS.Sim.Error hiding (genErrors) import qualified System.FS.Sim.MockFS as MockFS import Test.Database.LSMTree.Internal.Snapshot.Codec () @@ -34,25 +35,30 @@ import Test.Util.QC (Choice) tests :: TestTree tests = testGroup "Test.Database.LSMTree.Internal.Snapshot.FS" [ - testProperty "prop_fsRoundtripSnapshotMetaData" $ - prop_fsRoundtripSnapshotMetaData - , testProperty "prop_fault_fsRoundtripSnapshotMetaData" - prop_fault_fsRoundtripSnapshotMetaData + testProperty "prop_fsRoundtrip - SnapshotMetaData" $ + prop_fsRoundtrip readFileSnapshotMetaData writeFileSnapshotMetaData + , testProperty "prop_fault_fsRoundtrip - SnapshotMetaData" $ + prop_fault_fsRoundtrip readFileSnapshotMetaData writeFileSnapshotMetaData , testProperty "prop_flipSnapshotBit" prop_flipSnapshotBit ] -- | @readFileSnapshotMetaData . writeFileSnapshotMetaData = id@ -- --- NOTE: prop_fault_fsRoundtripSnapshotMetaData with empty errors is equivalent --- to prop_fsRoundtripSnapshotMetaData. I (Joris) chose to keep the properties +-- NOTE: prop_fault_fsRoundtrip with empty errors is equivalent +-- to prop_fsRoundtrip. I (Joris) chose to keep the properties -- separate, so that there are fewer cases to account for (like @allNull@ --- errors) in prop_fault_fsRoundtripSnapshotMetaData -prop_fsRoundtripSnapshotMetaData :: SnapshotMetaData -> Property -prop_fsRoundtripSnapshotMetaData metaData = +-- errors) in prop_fault_fsRoundtrip +prop_fsRoundtrip :: + (Eq x, Show x) + => (HasFS IO HandleIO -> FsPath -> FsPath -> IO (Either DeserialiseFailure x)) -- ^ Reader + -> (HasFS IO HandleIO -> FsPath -> FsPath -> x -> IO ()) -- ^ Writer + -> x + -> Property +prop_fsRoundtrip reader writer metaData = ioProperty $ withTempIOHasFS "temp" $ \hfs -> do - writeFileSnapshotMetaData hfs contentPath checksumPath metaData - eMetaData' <- readFileSnapshotMetaData hfs contentPath checksumPath + writer hfs contentPath checksumPath metaData + eMetaData' <- reader hfs contentPath checksumPath pure $ case eMetaData' of Left e -> counterexample (show e) False Right metaData' -> metaData === metaData' @@ -60,6 +66,8 @@ prop_fsRoundtripSnapshotMetaData metaData = contentPath = mkFsPath ["content"] checksumPath = mkFsPath ["checksum"] + + -- | @readFileSnapshotMetaData . writeFileSnapshotMetaData = id@, even if -- exceptions happened. -- @@ -67,22 +75,26 @@ prop_fsRoundtripSnapshotMetaData metaData = -- but it complicates the test a lot, so I (Joris) decided not to include it for -- now. For example, if the read part fails with a deserialise failure, then we -- *could* check that file corruption took place during the write part. -prop_fault_fsRoundtripSnapshotMetaData :: - TestErrors - -> SnapshotMetaData +prop_fault_fsRoundtrip :: + forall x. + (Eq x, Show x) + => (HasFS IO MockFS.HandleMock -> FsPath -> FsPath -> IO (Either DeserialiseFailure x)) -- ^ Reader + -> (HasFS IO MockFS.HandleMock -> FsPath -> FsPath -> x -> IO ()) -- ^ Writer + -> TestErrors + -> x -> Property -prop_fault_fsRoundtripSnapshotMetaData testErrs metadata = +prop_fault_fsRoundtrip reader writer testErrs metadata = ioProperty $ withSimErrorHasFS propNoOpenHandles MockFS.empty emptyErrors $ \hfs _fsVar errsVar -> do writeResult <- try @_ @FsError $ withErrors errsVar (writeErrors testErrs) $ - writeFileSnapshotMetaData hfs metadataPath checksumPath metadata + writer hfs metadataPath checksumPath metadata readResult <- try @_ @SomeException $ withErrors errsVar (readErrors testErrs) $ - readFileSnapshotMetaData hfs metadataPath checksumPath + reader hfs metadataPath checksumPath let -- Regardless of whether the write part failed with an exception, if @@ -114,7 +126,7 @@ prop_fault_fsRoundtripSnapshotMetaData testErrs metadata = -- contents are not printed. mkLabel :: Either FsError () - -> Either SomeException (Either DeserialiseFailure SnapshotMetaData) + -> Either SomeException (Either DeserialiseFailure x) -> String mkLabel writeResult readResult = "(" <> mkLabelWriteResult writeResult <> @@ -127,7 +139,7 @@ prop_fault_fsRoundtripSnapshotMetaData testErrs metadata = Right () -> "Right ()" mkLabelReadResult :: - Either SomeException (Either DeserialiseFailure SnapshotMetaData) + Either SomeException (Either DeserialiseFailure x) -> String mkLabelReadResult = \case Left e @@ -141,7 +153,7 @@ prop_fault_fsRoundtripSnapshotMetaData testErrs metadata = error ("impossible: " <> show e) Right (Left (_ :: DeserialiseFailure)) -> "Right (Left DeserialiseFailure)" - Right (Right (_ :: SnapshotMetaData)) -> + Right (Right (_ :: x)) -> "Right (Right SnapshotMetaData)" data TestErrors = TestErrors { diff --git a/test/golden-file-data/snapshot-codec/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V0.snapshot.golden b/test/golden-file-data/snapshot-codec/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V0.snapshot.golden deleted file mode 100644 index 71944d96f48364114fb18a84b4a5a7b2551fa8b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60 zcmZoI3@uJA3Mk4i%S=g4@kvZd&0%O~U}<8I^iybJ;9_WGV3dexY-(j-kcg1bYGrI; MU<3*S#TpnI05ZZ52LJ#7 diff --git a/test/golden-file-data/snapshot-codec/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V0.snapshot.golden b/test/golden-file-data/snapshot-codec/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V0.snapshot.golden deleted file mode 100644 index 3cde03f37828c1583f142e2f2aca6648f21e31d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60 zcmZoI3@uJA3Mk4i%S=g4@kvZd&0%O~U}<8I^iybJ;9_WGV3dexY-(j-kcg1bYGrI; MU<3*S#TpnJ05Zf72mk;8 diff --git a/test/golden-file-data/snapshot-codec/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V0.snapshot.golden b/test/golden-file-data/snapshot-codec/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V0.snapshot.golden deleted file mode 100644 index 7e844821b81e4ef57f5c5e23a95fc52221a771c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60 zcmZoI3@uJA3Mk4i%S=g4@kvZd&0%O~U}<8I^iybJ;9_WGV3dexY-$Bj5?ZZ{Eewo6 KVIZf0u>k-w*ANK+ diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S0-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S0-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S0-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S0-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E0-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E0-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E0-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E0-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C0-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C0-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C0-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C0-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V0-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V0-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V0-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V0-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V0-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V0-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V0-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V0-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V1-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V1-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V1-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V1-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V1-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V1-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V1-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V1-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V2-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V2-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V2-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V2-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V2-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V2-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V2-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-E1-C1-V2-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-__-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-__-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-__-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E0-__-__-__-__-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E0-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E0-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E0-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E0-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C0-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C0-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C0-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C0-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V0-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V0-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V0-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V0-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V0-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V0-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V0-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V0-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V1-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V1-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V1-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V1-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V1-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V1-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V1-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V1-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V2-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V2-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V2-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V2-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V2-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V2-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V2-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-E1-C1-V2-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-__-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-__-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-__-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C0-__-__-__-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E0-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E0-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E0-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E0-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C0-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C0-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C0-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C0-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V0-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V0-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V0-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V0-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V0-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V0-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V0-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V0-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V1-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V1-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V1-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V1-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V1-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V1-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V1-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V1-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V2-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V2-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V2-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V2-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V2-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V2-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V2-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-E1-C1-V2-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-__-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-__-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-__-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L0-__-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E0-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E0-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E0-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E0-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C0-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C0-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C0-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C0-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V0-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V0-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V0-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V0-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V0-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V0-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V0-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V0-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V1-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V1-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V1-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V1-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V1-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V1-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V1-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V1-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V2-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V2-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V2-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V2-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V2-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V2-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V2-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-E1-C1-V2-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-__-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-__-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-__-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V0-L1-__-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E0-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E0-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E0-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E0-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C0-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C0-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C0-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C0-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V0-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V0-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V0-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V0-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V0-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V0-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V0-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V0-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V1-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V1-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V1-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V1-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V1-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V1-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V1-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V1-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V2-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V2-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V2-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V2-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V2-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V2-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V2-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-E1-C1-V2-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-__-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-__-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-__-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L0-__-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E0-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E0-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E0-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E0-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C0-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C0-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C0-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C0-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V0-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V0-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V0-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V0-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V0-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V0-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V0-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V0-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V1-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V1-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V1-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V1-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V1-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V1-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V1-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V1-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V2-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V2-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V2-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V2-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V2-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V2-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V2-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-E1-C1-V2-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-__-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-__-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-__-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V1-L1-__-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E0-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E0-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E0-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E0-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C0-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C0-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C0-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C0-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V0-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V0-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V0-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V0-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V0-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V0-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V0-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V0-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V1-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V1-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V1-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V1-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V1-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V1-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V1-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V1-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V2-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V2-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V2-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V2-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V2-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V2-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V2-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-E1-C1-V2-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-__-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-__-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-__-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L0-__-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E0-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E0-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E0-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E0-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C0-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C0-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C0-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C0-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V0-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V0-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V0-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V0-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V0-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V0-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V0-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V0-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V1-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V1-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V1-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V1-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V1-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V1-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V1-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V1-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V2-L0-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V2-L0-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V2-L0-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V2-L0-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V2-L1-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V2-L1-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V2-L1-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-E1-C1-V2-L1-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-__-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-__-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-__-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P0-E1-C1-V2-L1-__-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P1-__-__-__-__-__-__-__-__-M1.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P1-__-__-__-__-__-__-__-__-M1.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P1-__-__-__-__-__-__-__-__-M1.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S1-P1-__-__-__-__-__-__-__-__-M1.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C0-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C0-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C0-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C0-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V0-T0-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V0-T0-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V0-T0-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V0-T0-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V0-T1-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V0-T1-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V0-T1-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V0-T1-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V1-T0-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V1-T0-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V1-T0-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V1-T0-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V1-T1-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V1-T1-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V1-T1-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V1-T1-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V2-T0-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V2-T0-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V2-T0-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V2-T0-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V2-T1-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V2-T1-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V2-T1-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M1-S2-G0-__-C1-V2-T1-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R0-__-__-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C0-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden new file mode 100644 index 0000000000000000000000000000000000000000..158710c0ed979b09064633d1f4af98fe7895dae6 GIT binary patch literal 62 zcmZoK3@uJA3Mk4i%S=g4@kvZd&0%O~U}<8I^iybJ;9_WGV3dexY-(j-kcg1bYGrI; PU<3*S#TpnIzI+1!Rw@zm literal 0 HcmV?d00001 diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden new file mode 100644 index 0000000000000000000000000000000000000000..84f10cdc4f18dd1db8b7de374b4168ae9b6e447b GIT binary patch literal 62 zcmZoK3@uJA3Mk4i%S=g4@kvZd&0%O~U}<8I^iybJ;9_WGV3dexY-(j-kcg1bYGrI; PU<3*S#TpnJzI+1!RxT0r literal 0 HcmV?d00001 diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V0-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V1-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P0-C1-V2-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C0-__-__-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden new file mode 100644 index 0000000000000000000000000000000000000000..e829a52e7e3bd2f55bb8744ab09f6b039cc1207b GIT binary patch literal 62 zcmZoK3@uJA3Mk4i%S=g4@kvZd&0%O~U}<8I^iybJ;9_WGV3dexY-$Bj5?ZZ{Eewo6 MVIZf0q2bFn09HQ{^Z)<= literal 0 HcmV?d00001 diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden new file mode 100644 index 0000000000000000000000000000000000000000..3551b7cf9bcb1347be1465d277b0c2309b5da188 GIT binary patch literal 62 zcmZoK3@uJA3Mk4i%S=g4@kvZd&0%O~U}<8I^iybJ;9_WGV3dexY-$Bj5?ZZ{Eewo6 MVIZf0vEj=%09Hd0^#A|> literal 0 HcmV?d00001 diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V0-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V1-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L0-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V1-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T0-__-__-__-__-R1-P1-C1-V2-L1-V2-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A0-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A1-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I0-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D0-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D0-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D1-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D1-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D2-G0-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N0-T1-A2-I1-D2-G1-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N1-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N1-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N1-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N1-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B0-N2-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B0-N2-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B0-N2-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B0-N2-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden diff --git a/test/golden-file-data/snapshot-metadata/B1-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot b/test/golden-file-data/snapshot-metadata/B1-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden similarity index 100% rename from test/golden-file-data/snapshot-metadata/B1-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot rename to test/golden-file-data/snapshot-metadata/B1-N0-T0-__-__-__-__-R0-__-__-__-__-V0-M0-__-__-__-__-__-__-__-__-__-__-__.snapshot.golden From ca1a591cdb41cb7d372df59cfcb7f87980c5c1f1 Mon Sep 17 00:00:00 2001 From: Duncan Coutts Date: Fri, 7 Mar 2025 21:42:07 +0000 Subject: [PATCH 3/3] Make the snapshot codec CBOR encoding more regular. Use utils for maybe, list and vector. And use a single-item encoding for Maybe, rather than it being a pair of things. The pair style means one has to remember to count it as two when setting the tuple lengths. --- .../LSMTree/Internal/Snapshot/Codec.hs | 91 ++++++++++--------- 1 file changed, 47 insertions(+), 44 deletions(-) diff --git a/src/Database/LSMTree/Internal/Snapshot/Codec.hs b/src/Database/LSMTree/Internal/Snapshot/Codec.hs index 1bae8dfdd..64dca96da 100644 --- a/src/Database/LSMTree/Internal/Snapshot/Codec.hs +++ b/src/Database/LSMTree/Internal/Snapshot/Codec.hs @@ -21,12 +21,11 @@ import Codec.CBOR.Decoding import Codec.CBOR.Encoding import Codec.CBOR.Read import Codec.CBOR.Write -import Control.Monad (replicateM, when) +import Control.Monad (when) import Control.Monad.Class.MonadThrow (MonadThrow (..)) import Data.Bifunctor import qualified Data.ByteString.Char8 as BSC import Data.ByteString.Lazy (ByteString) -import Data.Foldable (fold) import qualified Data.Map.Strict as Map import qualified Data.Vector as V import Database.LSMTree.Internal.Config @@ -224,7 +223,7 @@ instance Decode SnapshotVersion where instance Encode SnapshotMetaData where encode (SnapshotMetaData label tableType config writeBuffer levels mergingTree) = - encodeListLen 7 + encodeListLen 6 <> encode label <> encode tableType <> encode config @@ -234,7 +233,7 @@ instance Encode SnapshotMetaData where instance DecodeVersioned SnapshotMetaData where decodeVersioned ver@V0 = do - _ <- decodeListLenOf 7 + _ <- decodeListLenOf 6 SnapshotMetaData <$> decodeVersioned ver <*> decodeVersioned ver @@ -524,14 +523,10 @@ instance DecodeVersioned MergeSchedule where -- SnapLevels instance Encode r => Encode (SnapLevels r) where - encode (SnapLevels levels) = - encodeListLen (fromIntegral (V.length levels)) - <> V.foldMap encode levels + encode (SnapLevels levels) = encode levels instance DecodeVersioned r => DecodeVersioned (SnapLevels r) where - decodeVersioned v@V0 = do - n <- decodeListLen - SnapLevels <$> V.replicateM n (decodeVersioned v) + decodeVersioned v@V0 = SnapLevels <$> decodeVersioned v -- SnapLevel @@ -550,14 +545,10 @@ instance DecodeVersioned r => DecodeVersioned (SnapLevel r) where -- Vector instance Encode r => Encode (V.Vector r) where - encode rns = - encodeListLen (fromIntegral (V.length rns)) - <> V.foldMap encode rns + encode = encodeVector instance DecodeVersioned r => DecodeVersioned (V.Vector r) where - decodeVersioned v@V0 = do - n <- decodeListLen - V.replicateM n (decodeVersioned v) + decodeVersioned = decodeVector -- RunNumber @@ -752,34 +743,23 @@ instance DecodeVersioned r => DecodeVersioned (SnapMergingTreeState r) where -- SnapPendingMerge instance Encode r => Encode (SnapPendingMerge r) where - encode (SnapPendingLevelMerge pe mt) = fold - [ encodeListLen 4 - , encodeWord 0 - , encodeMaybe mt - , encodeListLen . toEnum $ length pe - , foldMap encode pe - ] + encode (SnapPendingLevelMerge pe mt) = + encodeListLen 3 + <> encodeWord 0 + <> encodeList pe + <> encodeMaybe mt encode (SnapPendingUnionMerge mts) = - encodeListLen 2 - <> encodeWord 1 - <> encodeListLen (toEnum $ length mts) - <> foldMap encode mts + encodeListLen 2 + <> encodeWord 1 + <> encodeList mts instance DecodeVersioned r => DecodeVersioned (SnapPendingMerge r) where decodeVersioned v@V0 = do n <- decodeListLen tag <- decodeWord case (n, tag) of - (4, 0) -> do - -- Get the whether or not the levels merge exists - peLvls <- decodeMaybe v - peLen <- decodeListLen - peRuns <- replicateM peLen (decodeVersioned v) - pure $ SnapPendingLevelMerge peRuns peLvls - (2, 1) -> do - -- Get the number of pre-existsing unions to read - peLen <- decodeListLen - SnapPendingUnionMerge <$> replicateM peLen (decodeVersioned v) + (3, 0) -> SnapPendingLevelMerge <$> decodeList v <*> decodeMaybe v + (2, 1) -> SnapPendingUnionMerge <$> decodeList v _ -> fail ("[SnapPendingMerge] Unexpected combination of list length and tag: " <> show (n, tag)) -- SnapPreExistingRun @@ -805,14 +785,37 @@ instance DecodeVersioned r => DecodeVersioned (SnapPreExistingRun r) where -- Utilities for encoding/decoding Maybe values +--Note: the Maybe encoding cannot be nested like (Maybe (Maybe a)), but it is +-- ok for fields of records. encodeMaybe :: Encode a => Maybe a -> Encoding encodeMaybe = \case - Nothing -> encodeBool False <> encodeNull - Just en -> encodeBool True <> encode en - + Nothing -> encodeNull + Just en -> encode en decodeMaybe :: DecodeVersioned a => SnapshotVersion -> Decoder s (Maybe a) -decodeMaybe v@V0 = decodeBool >>= \exist -> - if exist - then Just <$> decodeVersioned v - else Nothing <$ decodeNull +decodeMaybe v@V0 = do + tok <- peekTokenType + case tok of + TypeNull -> Nothing <$ decodeNull + _ -> Just <$> decodeVersioned v + +encodeList :: Encode a => [a] -> Encoding +encodeList xs = + encodeListLen (fromIntegral (length xs)) + <> foldr (\x r -> encode x <> r) mempty xs + +decodeList :: DecodeVersioned a => SnapshotVersion -> Decoder s [a] +decodeList v = do + n <- decodeListLen + decodeSequenceLenN (flip (:)) [] reverse n (decodeVersioned v) + +encodeVector :: Encode a => V.Vector a -> Encoding +encodeVector xs = + encodeListLen (fromIntegral (V.length xs)) + <> foldr (\x r -> encode x <> r) mempty xs + +decodeVector :: DecodeVersioned a => SnapshotVersion -> Decoder s (V.Vector a) +decodeVector v = do + n <- decodeListLen + decodeSequenceLenN (flip (:)) [] (V.reverse . V.fromList) + n (decodeVersioned v)