From 7fdf07271031cd4a88af9280b41ece5dc7c1d580 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Wed, 24 Feb 2016 17:04:04 -0500 Subject: [PATCH] deltas: Heuristically detect endianness for older deltas If the average object size is greater than 4GiB, let's assume we're dealing with opposite endianness. I'm fairly confident no one is going to be shipping peta- or exa- byte size ostree deltas, period. Past the gigabyte scale you really want bittorrent or something. --- Makefile-tests.am | 2 + src/libostree/ostree-repo-static-delta-core.c | 74 +++++++++++++++--- .../ostree-repo-static-delta-private.h | 3 +- tests/pre-endian-deltas-repo-big.tar.xz | Bin 0 -> 5760 bytes tests/pre-endian-deltas-repo-little.tar.xz | Bin 0 -> 5752 bytes tests/test-delta.sh | 21 +++++ 6 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 tests/pre-endian-deltas-repo-big.tar.xz create mode 100644 tests/pre-endian-deltas-repo-little.tar.xz diff --git a/Makefile-tests.am b/Makefile-tests.am index 475519d7..6ec58357 100644 --- a/Makefile-tests.am +++ b/Makefile-tests.am @@ -85,6 +85,8 @@ insttest_DATA = tests/archive-test.sh \ tests/test-basic-user.sh \ tests/test-local-pull.sh \ tests/corrupt-repo-ref.js \ + tests/pre-endian-deltas-repo-big.tar.xz \ + tests/pre-endian-deltas-repo-little.tar.xz \ $(NULL) insttest_SCRIPTS += \ diff --git a/src/libostree/ostree-repo-static-delta-core.c b/src/libostree/ostree-repo-static-delta-core.c index 97cdb8c5..0669f691 100644 --- a/src/libostree/ostree-repo-static-delta-core.c +++ b/src/libostree/ostree-repo-static-delta-core.c @@ -670,15 +670,22 @@ show_one_part (OstreeRepo *self, } OstreeDeltaEndianness -_ostree_delta_get_endianness (GVariant *superblock) +_ostree_delta_get_endianness (GVariant *superblock, + gboolean *out_was_heuristic) { guint8 endianness_char; g_autoptr(GVariant) delta_meta = NULL; g_autoptr(GVariantDict) delta_metadict = NULL; + guint64 total_size = 0; + guint64 total_usize = 0; + guint total_objects = 0; delta_meta = g_variant_get_child_value (superblock, 0); delta_metadict = g_variant_dict_new (delta_meta); + if (out_was_heuristic) + *out_was_heuristic = FALSE; + if (g_variant_dict_lookup (delta_metadict, "ostree.endianness", "y", &endianness_char)) { switch (endianness_char) @@ -691,13 +698,58 @@ _ostree_delta_get_endianness (GVariant *superblock) return OSTREE_DELTA_ENDIAN_INVALID; } } - return OSTREE_DELTA_ENDIAN_UNKNOWN; + + if (out_was_heuristic) + *out_was_heuristic = TRUE; + + { g_autoptr(GVariant) meta_entries = NULL; + guint n_parts; + guint i; + + g_variant_get_child (superblock, 6, "@a" OSTREE_STATIC_DELTA_META_ENTRY_FORMAT, &meta_entries); + n_parts = g_variant_n_children (meta_entries); + + for (i = 0; i < n_parts; i++) + { + g_autoptr(GVariant) objects = NULL; + guint64 size, usize; + guint n_objects; + + g_variant_get_child (meta_entries, i, "(u@aytt@ay)", NULL, NULL, &size, &usize, &objects); + n_objects = (guint)(g_variant_get_size (objects) / OSTREE_STATIC_DELTA_OBJTYPE_CSUM_LEN); + + total_objects += n_objects; + total_size += size; + total_usize += usize; + } + + /* If the average object size is greater than 4GiB, let's assume + * we're dealing with opposite endianness. I'm fairly confident + * no one is going to be shipping peta- or exa- byte size ostree + * deltas, period. Past the gigabyte scale you really want + * bittorrent or something. + */ + if ((total_size / total_objects) > G_MAXUINT32) + { + switch (G_BYTE_ORDER) + { + case G_BIG_ENDIAN: + return OSTREE_DELTA_ENDIAN_LITTLE; + case G_LITTLE_ENDIAN: + return OSTREE_DELTA_ENDIAN_BIG; + default: + g_assert_not_reached (); + } + } + + return G_BYTE_ORDER; + } } gboolean _ostree_delta_needs_byteswap (GVariant *superblock) { - switch (_ostree_delta_get_endianness (superblock)) + switch (_ostree_delta_get_endianness (superblock, NULL)) { case OSTREE_DELTA_ENDIAN_BIG: return G_BYTE_ORDER == G_LITTLE_ENDIAN; @@ -738,24 +790,28 @@ _ostree_repo_static_delta_dump (OstreeRepo *self, g_print ("Delta: %s\n", delta_id); { const char *endianness_description; + gboolean was_heuristic; - endianness = _ostree_delta_get_endianness (delta_superblock); + endianness = _ostree_delta_get_endianness (delta_superblock, &was_heuristic); switch (endianness) { case OSTREE_DELTA_ENDIAN_BIG: - endianness_description = "big"; + if (was_heuristic) + endianness_description = "big (heuristic)"; + else + endianness_description = "big"; if (G_BYTE_ORDER == G_LITTLE_ENDIAN) swap_endian = TRUE; break; case OSTREE_DELTA_ENDIAN_LITTLE: - endianness_description = "little"; + if (was_heuristic) + endianness_description = "little (heuristic)"; + else + endianness_description = "little"; if (G_BYTE_ORDER == G_BIG_ENDIAN) swap_endian = TRUE; break; - case OSTREE_DELTA_ENDIAN_UNKNOWN: - endianness_description = "unknown"; - break; case OSTREE_DELTA_ENDIAN_INVALID: endianness_description = "invalid"; break; diff --git a/src/libostree/ostree-repo-static-delta-private.h b/src/libostree/ostree-repo-static-delta-private.h index d9e5c456..41ddad48 100644 --- a/src/libostree/ostree-repo-static-delta-private.h +++ b/src/libostree/ostree-repo-static-delta-private.h @@ -222,11 +222,10 @@ maybe_swap_endian_u64 (gboolean swap, typedef enum { OSTREE_DELTA_ENDIAN_BIG, OSTREE_DELTA_ENDIAN_LITTLE, - OSTREE_DELTA_ENDIAN_UNKNOWN, OSTREE_DELTA_ENDIAN_INVALID } OstreeDeltaEndianness; -OstreeDeltaEndianness _ostree_delta_get_endianness (GVariant *superblock); +OstreeDeltaEndianness _ostree_delta_get_endianness (GVariant *superblock, gboolean *out_was_heuristic); gboolean _ostree_delta_needs_byteswap (GVariant *superblock); diff --git a/tests/pre-endian-deltas-repo-big.tar.xz b/tests/pre-endian-deltas-repo-big.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..05e51d6933fde7853bc773e50e8dedb73a00842e GIT binary patch literal 5760 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 literal 0 HcmV?d00001 diff --git a/tests/pre-endian-deltas-repo-little.tar.xz b/tests/pre-endian-deltas-repo-little.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..ef05045c0444ac4c5c04c1230dc13fe00f5623c5 GIT binary patch literal 5752 zcmV-;7KiEmH+ooF000E$*0e?f03iVu0001VFXf}*-~SdjT>v;7h{^DB@yqY7q66O5 zH)NzQ(+^~?d1y2q(#UCD_p}~pUXoO}cNFt5j=Of z7oLK-Sd1CSm*46-b!KAqO{!4iU{F6H`?hyii17V;Z@l*YRR~J$+Ms%kMWLsbBmQ~< z{?u?iV~f5r$If}4X%;M=LpdP;Towyx{FV*Zazy~pT`H10Ge^;3@G!}Ny#1m_WB>)E zNeZ`1z(PhMlFU_vqRC$f3ClF$}pQomsnEO8D{~!1+lkL#C0_sl!ez9F`mi zVy0wzYxvTRG%h ziX>rRHO6XwWa`rR_U9aaHm~up1^hP&ix$DuqIHJordSaZXFf?^lVJqS^%%C~K@&%5 zpM28U*KjbANDAE2U<)xldwA^EAD+HRsHP_0OIM^IBO)Hi9j3y0$J=>L3$r&Nts;Y8 zvH`!@UR0Qy?9}qbh1s5_8)t^pR1Rh#|7;yJ*t7p85LHzZW40})6E_DBz3aia_*gZ< zE}aSWl|JVK@ltvNuS-o7I3S#K6RIbO>%ru+A$i6ZVddzM9SOvGq$$3pK(P{b5RS64 z1<|C0hiZl(X@%pZA>~Mpy4(shzd5mI=cURd(gY+urRl?+#N>)p)ik0`SLECqHQ`b= z#({~avf>FHR%Yd%R1lx1e#D(osTY!skq&Mf4u2L{&lKZaVir77sJ*xZ8=U~HX>_Rz zChl*#4S|PSf&C2H=~iNuz#2^e1()e7o~Y6ngmmKr6#O4nU%kG=f0Wp~uTM?#96Bpl zR}Hqu*16m`p0($go1%6^wJ$RJ;+c)0CgzOu9~SNh>F!V1CjNQMArp2h8}+20Alz#; z-&rUM5VwtOJvx80k{y6Hi|3xEFulpHq2j`BbDOe#M_tIQ4_K6*L9OKstnR}0J^5gN z#w2P55QJHurs7Hi_SjQ)Mw`l^G()FBn%o?{ay^2jEkvL8)V)=0zQ!!UHV5xxC$Oa{ z2xYZRnDf2+~hQsPg++aAsGo24tmS z1VAdXwqYVpi-<<~2L`P`mZDsB%+{sdMVL?-$?rdy$(}?}A9j#xXLrqAg-%;U6&Jxvf9_845=H~q@1jquGy__C(sK`C<6&!zMRP8E<_;I zg`+hPD#q`smMn!uc-M$4Yk(xFiMq3EMol8yb6_E~gLay=cEg9J3My^itbuf2^)(5~ zJb9leWt+6`epbpAU(+Zkhsvli34ewCid9CwUQ&u{1oGJ3mP$ret|Uy|L&g*Zp06;e zAxi!;$+X$Ur4f;&2r}gMM3kLkB5= zVce=!AMi?Y&e&mgxuN1wz(d1oI@@1(>1OW`=_aW1xX6l;B!MU{UmgLzoUc%;Y#kNL zq%=YVr#pS|1OWWk`xj!4Y%&pJ?eF@W@hfE_Nq|6we+PtUXAK`QUxywJSj{dU;I{%7 zS}u1dT=$iMEC-T5;a~>F8o`}}0aNkxCi_*I`)JobE5_}@foIgv@V^msaxO;53T|<} zAFM&kH13?LE3G||l4gA#8rVNskiso#l%Pfycz(%2arWLG#w*G2`qSL)EF8;@Vr^}7$$ zOXgW{23m!pqLS5iQtLxZ7)*fdhS;c*0d*y-&hLIj%4JXQ_*xCNTJ81npC#RO8hJD}ctS4{9L?9Av{8 zdJ|%M{;sld?$i~xQnGE*u*x~%#Rmm#JEPX zSW0+;Vas~V0Z*^O_rBX4dQli`4u#kKcl@W+0OOHIEnxr?so!Um?Ru{$7P8M0r6}8K zjXS63I^fb0@7l%j1bgD=WMPHn83M6zqpF+t>6u3KSSw9n+{v3wz`^v~ z>tm@}$qKI3$;vMv3ZKbQK`;z{si&88VxF>($GqR@Q#-ECk3%l3%}0OKfd<>tY?-g2 zM%kQYV-JF|1TQX0RrO1M4N=5!xV0=L!d3k%0chf-&G3(A$Nsf>3$TQHlJ+fBYOG*3 z3v<-jOiuez2%s8^JbL#|CMMyy16p7yzwG|})^x!1nmF0&!{ga;g8b`uilQe{dOVS2 zeILGAl&A*IL;)NBsc~g9%UD-a(XRWSa6CirP9)-L#Jo!V)yNSJ0dL&H)iC@oknrG>nq5$6$>HZ#Oaw^|E2pOVUB3-BKz4)i<%w-s> z5ECt)`F3cPBU-+Y3~v|(sLRPF9B)d<1h|V}*!9qEYLfo@s{B#wQPcm3#az}SdAfet|t zuj}pw7ipWPHGnp;c>doELaB%;N|%@n3z4-yKl=h-z?|~Q)N4?e+e+#f`tJtWCn};G zvw!cW^9ifY>Hqc3Eyyt8mt}5iDjd>w#x6sR%Oe_Per&W_wR*|H_zCC7x}njW%v+ir zI#kNo3wH^Pzl|8jy$wDM(xC88!bNxKGPe&<7?Vkt(#ihS1Mwv-@({y?@~sql$*C-K zc|Oncm4|IYd3D9{?SfE{p*_mf^2ThVtnOE`*thsTK)e6X)<;=EIQF~#I1PxR>f(@j z0u)vf!~Sl(K$EGE3jxu%dJe#qst?%TpCb-HEHw%|nT_uI@!T;AJQC1h4DS71e?_e< z0|aJ#UjAd6`qU+Yd(>L9Xn!1dcv`JDAop681(YWo_OBoP5InVd)SO|z=;#4F{o-^U z<+1H+_#`J8zr@SqjA$-TP3H!!g>#xzi>33bNV~}Q;zxR*m@M|b(O;)RuG45bCT~0q zMo3JQ&bX)vE@mgJWOV!n;ki)OUo71VO*96B#>gN23Xi_dy{nfz^U?c1Vw@$!{)*2jj@8) zIAbKEmez<&s^OM&1DhWG)LPtHpk*fZvzH-NL;8>$0`<95r;)d%XavM|Hdw3AT`L#K z{^NDhM7eM><$9EwpbUPCT`q|105to7^~#Yy0`XJwYYAmWAaDix98pZFqxIS4feXok zW^Cdr40y`3Kg+8mi>@yoq@7}EYj0!zbG#4y%5KAw}27>{DhS?6)(RW6YoKy2>>{l~_|p-wI2D_vs9UmpLyI{fpeJA8LT893%1zPBxkXV#Itf86C$cYSXohv?POeV)B52zcvbWugSG zCj<67&VP<-DM9@ZS>|-)nD?}|Tq<`?R76euR*5R%zd5_an~+9MLS6;C3>2{jeP z>!nNe`Mhr?(ruB}h4oC&E=pE_Vzf#*UXbR#kNB50(3j>e**#G*2$~p3-;ls9;FsV( zKD3X=tHTEd-r=MZznX~*=sW-sYY?juivgFi6cF=#UDTvo7c>eT-WTIDAoTKX-bZhX zsgKm01pJEQTHvitd`u~S5U7vjxvf@dSvTT=#w{QlQLH|LC1^AV)35iJ%iCk`wey^X zaTAxuVNeg^2e+0~&-Y=pp=}nWmR>Wn?2LAnW+zvbK|p6tbUS9Y=MY+-dOe=Y-!xb- z`+CN$dlrB7Htg$>A*_-y;jWDr^hds{miMOc#i~lSxze*EMJ(Q6gg&k0E1?MNLrTDG z4$oUkKboG<3#?^l;C4-|Pninj z`fg)-j3wJV<#$}gtEPtbl4|kXaE+Vx{uNyLV3>94=Y#G;O;VT;bXI9GG{_#>3h4Fz z$@M?r6>JuANMkhrWU(?M=Gv)uo;klQ5gx=ekb+KtBqn{ zOffCS7$m+7Qmf>3)KM7-_s)M9*oD*{{7`>o!y7_>cDpKtkbFF-#|iUEfTL-4{;0Xq zq7&}OXM)qt>7qI&6v4=5`<;Po?E@*k_3k22Ze$lJe%agI#6UR;yb)frCUnp`bEmj} zuz@P#_|ZoKY8~EL)PRsssiD$sMj0h&O?$yud4kH)|oMX7{0 zk2CC!lgTX}5ZS$dyV>bs={vtUNAjlvL#v_=8tjNl4vdd%b!TzcEi7&$EWj$X-J_b6~_MLKth2#*7bzuJlDf+G10j+EDOnzv5tr<_X6Eq!JnJx{d34Y;QxNiq9y zj#=rApNQ4MEZ^q78)R<GG|Om+ODsQZqqbBY`;mn4(xsrgY%F-EcT> zb}1&tr0MIDp30Lo5E=n{Ovvv{rjV|~A*QtCPSB&X3VBF!2}kN$eS&eDs24*l8zPO) zsV|tTR}R~?T+EweYD>Sf;j6!XxDT#ey7{mxmeF8ZS&93HrGMja6o)my9*)h^%z;P? zVtS!NZ*$FU!uPjwKrt1*g)pm#nC`+;kA1k_-hpF=l9z$p%h|+;9tl0eBRSJLwJwdX zz;AKk?W-gjg4zrUy~W}TzHmTSXG(0WJAD50XW|}{EtESK!KF1czI*-&3@8Q@et%;3 z-#j9-#lw()%(kipo?sAsufDOiBv{>RS7G~v!mStY!z;v9tb?d^VPfPc+r@BdA3qK`A`5PCMWveLvQs!U6oMfnCw#upDGVC8JTy`X@O!JxrRC{p zN}yapy1nfu>kLT04CI6bJyyQ% zD9al$G^9aKnKr)Zw}MB4?G(k;gY(zGF#so7R}^c4$Nc+OB>rDb^- zbZ6<}qmx_~=@~vEM~TJfnVinLfl_Ph=U;g(4)|+eyw_H?n@?mM?D(`MDDFNV9FHL`g@YA)H0@!#8w}IBExL7lo&A=~YI$ zluF7&n)Q5GgmcKWU;qWuEO>ZH3NCgi5(2yA0?9SD-p`YSJFdrPjS3<4r<~2P(&WeS zH6oEHg@STS3k7XG6+s4*3&e=o6ukjiDPWtvF-to1Io|QbrFl`;Op8g=@PQhuxTpWn zGUv!X4n?(iU+TuwmQ7CX2Q^2JwgG7fD5NL=e^Mssn4c)jlPJ+cWRoQDT$1e>BTw)! zM+e@Z^-lb5Wt#U?(UXe&Aoj8kKNP+>|F#FtDkXqzjw)u(@LQQXuoRRV6RuqPyYcLl z`>N&J3D(u0;wbpqlyB@5O$`B4AK)}jZ_KEHRe?_(Xr5Qbh)3SwqXN~=U7ZtNx+SSg z`}bQ|w=$1bFp&QNZ)WMW1kIv>f!ii0MHNyoO*rkxq9pnIe6H;U7Y5}d-|N16Jh}A* zz1rK=4Oa<sryBSBb z%CG2eRaW1e_+#uuc9Pi;aUN{{jmK7eIzFX?h^A4(;_z3BI>H*B4;@>SWh{g1%7#%+ qcQVEtn*acr#WCggtQs@`0n;pizy|>3&Us+5#Ao{g000001X)@eiYm4M literal 0 HcmV?d00001 diff --git a/tests/test-delta.sh b/tests/test-delta.sh index 4679ab8e..ebe35571 100755 --- a/tests/test-delta.sh +++ b/tests/test-delta.sh @@ -128,6 +128,27 @@ assert_streq "${totalsize_orig}" "${totalsize_swapped}" echo 'ok generate + show endian swapped' +tar xf ${SRCDIR}/pre-endian-deltas-repo-big.tar.xz +mv pre-endian-deltas-repo{,-big} +tar xf ${SRCDIR}/pre-endian-deltas-repo-little.tar.xz +mv pre-endian-deltas-repo{,-little} +legacy_origrev=$(${CMD_PREFIX} ostree --repo=pre-endian-deltas-repo-big rev-parse main^) +legacy_newrev=$(${CMD_PREFIX} ostree --repo=pre-endian-deltas-repo-big rev-parse main) +${CMD_PREFIX} ostree --repo=pre-endian-deltas-repo-big static-delta show ${legacy_origrev}-${legacy_newrev} > show-legacy-big.txt +totalsize_legacy_big=$(grep 'Total Size:' show-legacy-big.txt) +${CMD_PREFIX} ostree --repo=pre-endian-deltas-repo-big static-delta show ${legacy_origrev}-${legacy_newrev} > show-legacy-little.txt +totalsize_legacy_little=$(grep 'Total Size:' show-legacy-little.txt) +for f in show-legacy-{big,little}.txt; do + if grep 'Endianness:.*heuristic' $f; then + found_heuristic=yes + break + fi +done +assert_streq "${found_heuristic}" "yes" +assert_streq "${totalsize_legacy_big}" "${totalsize_legacy_little}" + +echo 'ok heuristic endian detection' + mkdir repo2 && ${CMD_PREFIX} ostree --repo=repo2 init --mode=archive-z2 ${CMD_PREFIX} ostree --repo=repo2 pull-local repo ${newrev} ${CMD_PREFIX} ostree --repo=repo2 fsck