From 9a552aef277a332fa08036bc8b4c23777b4294bf Mon Sep 17 00:00:00 2001 From: Frederik Rothenberger Date: Mon, 18 Mar 2024 13:22:15 +0100 Subject: [PATCH] Migrate stable memory back-ups to v9 (#2368) This PR migrates all the stable memory back-ups to storage layout `v9` in preparation for removing support for `v8`. --- src/internet_identity/stable_memory/README.md | 11 +++-- ....gz => buffered_archive_entries_v9.bin.gz} | Bin 18491 -> 27158 bytes .../genesis-layout-migrated-to-v8.bin.gz | Bin 28130 -> 0 bytes .../genesis-layout-migrated-to-v9.bin.gz | Bin 0 -> 36713 bytes ...gz => multiple-recovery-phrases-v9.bin.gz} | Bin 17433 -> 26016 bytes .../no-persistent-state-v8.bin.gz | Bin 8412 -> 0 bytes ....gz => persistent_state_archive_v9.bin.gz} | Bin 17720 -> 26382 bytes ... => persistent_state_no_archive_v9.bin.gz} | Bin 132212 -> 197845 bytes .../tests/integration/archive_integration.rs | 2 +- .../tests/integration/stable_memory.rs | 41 +++--------------- 10 files changed, 13 insertions(+), 41 deletions(-) rename src/internet_identity/stable_memory/{buffered_archive_entries_v8.bin.gz => buffered_archive_entries_v9.bin.gz} (58%) delete mode 100644 src/internet_identity/stable_memory/genesis-layout-migrated-to-v8.bin.gz create mode 100644 src/internet_identity/stable_memory/genesis-layout-migrated-to-v9.bin.gz rename src/internet_identity/stable_memory/{multiple-recovery-phrases-v8.bin.gz => multiple-recovery-phrases-v9.bin.gz} (61%) delete mode 100644 src/internet_identity/stable_memory/no-persistent-state-v8.bin.gz rename src/internet_identity/stable_memory/{persistent_state_archive_v8.bin.gz => persistent_state_archive_v9.bin.gz} (60%) rename src/internet_identity/stable_memory/{persistent_state_no_archive_v8.bin.gz => persistent_state_no_archive_v9.bin.gz} (65%) diff --git a/src/internet_identity/stable_memory/README.md b/src/internet_identity/stable_memory/README.md index d720d741e1..388cdfd6c3 100644 --- a/src/internet_identity/stable_memory/README.md +++ b/src/internet_identity/stable_memory/README.md @@ -8,15 +8,14 @@ These tests serve two purposes: ## Stable Memory Backups The following stable memory backups are currently used: -* `buffered_archive_entries_v8.bin.gz`: a backup with buffered archive entries. +* `buffered_archive_entries_v9.bin.gz`: a backup with buffered archive entries. * `clean_init_v8.bin.gz`: a clean initial state with storage layout v8. Used to test that II can be upgraded from v8 storage layout. -* `genesis-layout-migrated-to-v8.bin.gz`: a backup initially created with the first version of the stable memory layout and then incrementally migrated to the v8 layout. It contains a few well-known identities / devices, see `known_devices` in `tests/integration/stable_memory.rs`. +* `genesis-layout-migrated-to-v9.bin.gz`: a backup initially created with the first version of the stable memory layout and then incrementally migrated to the v8 layout. It contains a few well-known identities / devices, see `known_devices` in `tests/integration/stable_memory.rs`. * `genesis-memory-layout.bin`: a backup of the initial memory layout. Not migrated. Mainly used to test behavior with respect to outdated / unsupported memory layouts. -* `multiple-recovery-phrases-v8.bin.gz`: a backup with an identity that has multiple recovery phrases. The input validation does no longer allow to create such an identity (only one recovery phrase is allowed). However, legacy users that are in that state need a way to make their identity consistent again. This backup is used to test exactly that. -* `no-persistent-state-v8.bin.gz`: a backup without persistent state. Used to check that II indeed fails to upgrade from such a state. -* `persistent_state_archive_v8.bin.gz`: a backup to check that archive state and configuration are restored correctly. -* `persistent_state_no_archive_v8.bin.gz`: a backup to check that persistent state without an archive is restored correctly. +* `multiple-recovery-phrases-v9.bin.gz`: a backup with an identity that has multiple recovery phrases. The input validation does no longer allow to create such an identity (only one recovery phrase is allowed). However, legacy users that are in that state need a way to make their identity consistent again. This backup is used to test exactly that. +* `persistent_state_archive_v9.bin.gz`: a backup to check that archive state and configuration are restored correctly. +* `persistent_state_no_archive_v9.bin.gz`: a backup to check that persistent state without an archive is restored correctly. ## Creating New Test Memory Backups diff --git a/src/internet_identity/stable_memory/buffered_archive_entries_v8.bin.gz b/src/internet_identity/stable_memory/buffered_archive_entries_v9.bin.gz similarity index 58% rename from src/internet_identity/stable_memory/buffered_archive_entries_v8.bin.gz rename to src/internet_identity/stable_memory/buffered_archive_entries_v9.bin.gz index 54d5f0a3e27b13003f77d255fa6948e521ef7208..1aaf3b6c46102e030e943acdac92b9d86cdb89e5 100644 GIT binary patch literal 27158 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 literal 18491 zcmeI)=~I(Q8USz|4=fH*5m69yTt&entOtl(Itr+W8HEH#AP5Kng`nI=AR`KnM92(s zg(yKW9EJqLkq8125R?Q0;f4^xB}W1Tgh;}bb>|NlYihP?Yij!W*!@)3)4%TO5AWO6 zyRaKJtojkqbi-P@MJ zg1^l_57*P%U2>y77JGUV_rUJv!}go>?43N3>q00=JuffF(0vo7W=*D}vWz19s8Nc!)k{g zLg9P;TLV10?b&gZ*%$Q{@d?F7lh{;9j}g-H=n0XyfCAOsWTB9$voJZYZsFXbOG5cmpWZK6hD*MeQ!{twvd2)b?|uSV zi?A_JC*Qk4Lzsm*Bv3b;3X5p34|F%*y#7p@rWplwbHqfg&NKQ>mozr^f*o`E-5Rwz zkIyP}mnas_y z@4Lqa#kifSN~1)JyGP(3t(1(YJVaE;Y|U&!PV8{(utiFIx{-VwT}};{kB-d4rE&z0 zrWn5{FT-vg$}?hq>f8WBjvh??6tj-9h=CzaE)BtWETvRWzn=&~kwmQ)em3ANq=`ej z=2Gk$s#`ul^!vJw;qjUhiNb!^9Lj~dR+*jMqxy8^r$bKV7)e!V7%$zrL-#6M(9@33 zUm8fXPECR_%P{py9-l@zDCUpwvA$V`h8=^ki$FUX2{qTJc)8cA`xX`(#%pwD&!G2c ziJiG9wA;AqU`#>^G9_7^-XwTy%4ftKK8V17-1j*KeahiVzQxwhux_uWZVJX$J*8rX z)A8zu$fag(yal8HFYm2w9j~K0D|9&YF5Ma>Ajzou*n<4!#yVDy4|-OHZ8{e-GS%)l z6oWV6abEg`&%LkS2NSSuo2()nO?WLaEy>(;qUp-brH&Sa509qJr~S|xV^?%_C}gT4 zuzZBxo9R zgL2K$0{!pbZ;AZS5~=0d6>`Wc-Z{z*)ubCfIyQknT=XOc7U0=<@nJ=G_W4UsOENQ_hB%jP#|1GC`G~^8 zS#g%6P+D%%fo;i&wgFK_MlkrH!=$f`fwWwEE;BcYkO673t%Q4zTPWGo`$*ejEsm$w z7P`*3vx>MyY)G*6iP|i)8oiFUx3KriN>AoGQZ+f0+JRoUCdXDXkZqmO(`8p744atE zLzlIMd}cl9>~lyLi1cr)quq-kV;+Wuu;YwU5<9N-^?%%+2Cs%-rG#y+ncJlZJ#1L0r6h`kEM$R*8A0 zjmQ@%>vllW`sEQc^R$ygBz{0&k?8TUJ_zT%g4+4%ohyku5EC39D3n z5jdJD#hZ@9%HPPWFj_t^`v}MgFKHm`@;hY zbOHe&00jPoz}i2N3sQjq5C8%|00;m9AOHk_01yBIKmZ8*GX<8g6$_a7vV@^kQN$)b z3T5Q?rBPAw3$_hfv_umefAr#L?#jJ?@01yBI zKmZ5;0U!VbfWS8d`sLm=L%7)AuI)YQ`0GJFS;`aStHx>2N}ISX%i1Tfoq`DY{WAvQ zc|vvd9y6LHnVsx{4k}2CM&*Ml8c2Bx9%X@$3BV z!b#Ste{tEhMo9gUI85c8Vv|1OUS2y)yFq;(H({LSb@2mnhiv)$antF>sd`pAlF8#g zyCxfaH>UL{-F?5nm~m9r%7x@4l8+5M8Y)V4D95-5(UB%g%II4@e z@pjz&TvUexOeUNq&hL8_tfH+0g@-^BaGkn^jx7USs=F?)mvN6RA_`axA2!viJCWKY zpPU;AjT)@L`tAP=iH~2t@cp2`x?3@~z=H zcVeGx7+)0$a}BHVmv!3Ml=aRK5)qy)Rnaf+_otAbpvuXW&nbr!C%k+ww3m#eU!4pZ zZ|kshLogcBG%^$jI;DOe;$&*mD=oU2Xsd=;-5X(Qn~tRYe9e0!HExkO**|N;EOL3=kM=*Y*>)@?AZ2q`FaZK1OoqmfzYpi_T}<5tDe&vvc5hT GwE91Hj4uZO diff --git a/src/internet_identity/stable_memory/genesis-layout-migrated-to-v8.bin.gz b/src/internet_identity/stable_memory/genesis-layout-migrated-to-v8.bin.gz deleted file mode 100644 index 6449cab9f856cbad94f1c0f12e8cf8db0ae72800..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28130 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 M6l(RCg>`Cw0`B(qE&u=k diff --git a/src/internet_identity/stable_memory/no-persistent-state-v8.bin.gz b/src/internet_identity/stable_memory/no-persistent-state-v8.bin.gz deleted file mode 100644 index 921e94fcf41567fb635f9ac105023df89ad60b6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8412 zcmb2|=HOre0;d0Y`ML$EMa7xLC8>EOy2T}lC8@e)7J5mUc?@svZscuZ5MjCSyY0{< zUY)tl8dD^s4{`84dX}|elfgu>d#m;A!|yWHOZ=+6cPlyVt>RgA7LcLjg9hH6bC0jG z`SM-6a+8y1!+YS3bK?bN{{lufI>DUPtoa)ix?Q8Umvs zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFyum@LEO5)feGkr zg%|%{*R_CHqhK@yMnhmU1V%$(Gz3ONU^E0qLtr!nMnho8g@8UI1H=FS%naG9TPzqD Gniv2`mqpP4 diff --git a/src/internet_identity/stable_memory/persistent_state_archive_v8.bin.gz b/src/internet_identity/stable_memory/persistent_state_archive_v9.bin.gz similarity index 60% rename from src/internet_identity/stable_memory/persistent_state_archive_v8.bin.gz rename to src/internet_identity/stable_memory/persistent_state_archive_v9.bin.gz index 99859fb67cd61f77b3da1b9775ff3ff8200f70b7..15a70b42d02c152d14c5bf0da4554c54a676cabc 100644 GIT binary patch delta 1863 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 YfeC~K5I6(?0RR630GbM=pa1{@3_={;xBvhE delta 1844 zcmV-42g~@?i463J2n!#J2nYZG00092FOdoze>g5;X>I`Q*lCbd)foohzTG`LixCtB z!2y>jvSv{em13EwC`82yTH=DhDC6`rFbvv&I*br@k32R;^npNh6OwF|yrft-)FVjFjlA&ehvDejweJiGdh8jw^_z^8yuR@s zx#2l`-d!6M7Ju>Tf0VSs+-S*HI~FGwE}M63Rz~6IIde`{Djd4(n_*Q7Gq<2y z_p(2sW0U)vR7y_2DmjP-{pYm`g2*33F9+es<(Wa)ooa7?1^`(@4Nl=LHizA z*W#{Icm92R(YA42Th8usYx+g??#`^7yRWtXP+lye$5q z>x)}-YX9Z#q|t|q4ka&Nx#`%$pO##?^u&~$*K+Uf`sT{h@vAr3lL(~@@A%}{BfDBP zp1pEnq)E}#q}y{6*|D=mSl+T(VeKQIjXE^`fAg#RAL!NMj#e$YG#izh{@AYHZm#*{ z0|(0@+;-nJQ*VgZs`-ySYd+~Yaq&%ko*DdY&gd0azqO=jZ)xymr_&Ky1fxq|?6hUT z%C9@^J#gdn$y1MK?Vo<(#=*tS^Pipjc$;3g_Udp|-;tYYw5fEkcC(Vv&(tY7XIsgX ze}$o}J9=-aI$-XR*`G$bJd`L)+n`DPCP~SWtFpUC>W22eeO2$K|w%xA}9I(Cfk}-Fb%&1>| zN~l`@L6M*Ra})po{vWh%efym)!e`D;?*v>HODoyDe|98zZquuuMN^BX51g5l_R@Fj z79>|1J7Lg-lq$1q0>4}P&DdjVh z@{;0-czRw&`CdXIUO5(Ce`x8hw8W%uPcE&T$c=vS^`f^@tB!j4#QyZcwd*#|%{X`Y zg1v_-SBnMj&U}ASrE_A@_l}-;e=(dGR{HAFXrgF!@xk<84B9hpLghYrePiJb(-st` zCn{!!r@!{}m}vEiPmyIiKP-(T1{~k_R9e^78&2)6dS2f7vFMp^zuPx{K*}%1JUw-I zdg9C)@e3;Yy|BFBiz>RPS>8p>c&%9Y#OFJ92Z=LXSB%y!AFY*FD}HfBT6Jc5^(7VK zb<4-=#_PqB&(sx_lzyC)So!^kg{g_r(>DDrHL>-tQVv0S+l2bc_NZ3 Result<(), CallError> restore_compressed_stable_memory( &env, canister_id, - "stable_memory/genesis-layout-migrated-to-v8.bin.gz", + "stable_memory/genesis-layout-migrated-to-v9.bin.gz", ); upgrade_ii_canister(&env, canister_id, II_WASM.clone()); @@ -110,7 +110,7 @@ fn should_modify_devices_after_restoring_backup() -> Result<(), CallError> { restore_compressed_stable_memory( &env, canister_id, - "stable_memory/genesis-layout-migrated-to-v8.bin.gz", + "stable_memory/genesis-layout-migrated-to-v9.bin.gz", ); upgrade_ii_canister(&env, canister_id, II_WASM.clone()); @@ -144,7 +144,7 @@ fn should_not_break_on_multiple_legacy_recovery_phrases() -> Result<(), CallErro restore_compressed_stable_memory( &env, canister_id, - "stable_memory/multiple-recovery-phrases-v8.bin.gz", + "stable_memory/multiple-recovery-phrases-v9.bin.gz", ); upgrade_ii_canister(&env, canister_id, II_WASM.clone()); @@ -179,7 +179,7 @@ fn should_allow_modification_after_deleting_second_recovery_phrase() -> Result<( restore_compressed_stable_memory( &env, canister_id, - "stable_memory/multiple-recovery-phrases-v8.bin.gz", + "stable_memory/multiple-recovery-phrases-v9.bin.gz", ); upgrade_ii_canister(&env, canister_id, II_WASM.clone()); @@ -220,14 +220,14 @@ fn should_allow_modification_after_deleting_second_recovery_phrase() -> Result<( } #[test] -fn should_read_persistent_state_v8() -> Result<(), CallError> { +fn should_read_persistent_state_without_archive() -> Result<(), CallError> { let env = env(); let canister_id = install_ii_canister(&env, EMPTY_WASM.clone()); restore_compressed_stable_memory( &env, canister_id, - "stable_memory/persistent_state_no_archive_v8.bin.gz", + "stable_memory/persistent_state_no_archive_v9.bin.gz", ); upgrade_ii_canister(&env, canister_id, II_WASM.clone()); @@ -251,7 +251,7 @@ fn should_read_persistent_state_with_archive() -> Result<(), CallError> { restore_compressed_stable_memory( &env, canister_id, - "stable_memory/persistent_state_archive_v8.bin.gz", + "stable_memory/persistent_state_archive_v9.bin.gz", ); upgrade_ii_canister(&env, canister_id, II_WASM.clone()); @@ -300,30 +300,3 @@ fn should_trap_on_old_stable_memory() -> Result<(), CallError> { } Ok(()) } - -/// Tests that II will refuse to upgrade on stable memory without persistent state. -#[test] -fn should_trap_on_missing_persistent_state() -> Result<(), CallError> { - let env = env(); - let canister_id = install_ii_canister(&env, EMPTY_WASM.clone()); - restore_compressed_stable_memory( - &env, - canister_id, - "stable_memory/no-persistent-state-v8.bin.gz", - ); - - let result = upgrade_ii_canister_with_arg(&env, canister_id, II_WASM.clone(), None); - - assert!(result.is_err()); - let err = result.err().unwrap(); - match err { - CallError::Reject(err) => panic!("unexpected error {err}"), - CallError::UserError(err) => { - assert_eq!(err.code, CanisterCalledTrap); - assert!(err - .description - .contains("failed to recover persistent state!")); - } - } - Ok(()) -}