Repository navigation
Woodpecker: segments with V6 footer (LAC) can't be read after downgrading Milvus 3.0.x -> 2.6.x (failed to decode footer record: buffer too short for record: expected N, got 45) — is downgrade supported? #54048
Unanswered
Siddeshvr
asked this question in
Q&A and General discussion
Replies: 1 comment 1 reply
|
3.0 -> 2.6.x downgrade is not supported. We don't recommend any kind of downgrade. You can backup and restore to a older cluster if ncessary. |
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Summary
After a cluster running Milvus 3.0.x (Woodpecker WAL, MixCoord + StreamingNode) was moved to a 2.6.22-based build (a downgrade),
StreamingNode WAL recovery fails on many channels with:
Channels never get assigned (
assignment not found), soCreateCollectionblocks until the client times out.Moving back to a 3.0.x build immediately fixes it (no data changes). We reproduced this on two independent clusters (EKS and AKS).
We believe this is a Woodpecker on-disk format incompatibility (format V6 footer read by a V5-only reader), and would like to confirm:
Symptoms and logs
StreamingNode (2.6.22-line build), per channel:
MixCoord:
Proxy (client request):
Observed counts (2.6.22-line build): 39,725 decode errors / 5 min on 9 channels (AKS); 12,644 / 4 min on 13 channels (EKS).
Same data on the 3.0.1-line build: 0 decode errors, 0
assignment not found.Each stuck channel's recovery scanner
startMessageIDpoints at one specific segment (segId/entry), e.g.dml_15 -> 4818/53,dml_13 -> 4881/46.Evidence for the format mismatch
1. Woodpecker footer format versions differ
v0.1.1/ commitfdf34b23(what Milvus 2.6.22 pins):FormatVersion = 5,FooterRecordSize = 36(record on disk = 9-byte record header + 36 = 45 bytes).
v0.1.14...v0.1.38(Milvus 3.0.1 pins v0.1.38):FormatVersion = 6("Latest version with LAC support"),FooterRecordSizeV6 = 44(+8-byte LAC; record on disk = 53 bytes).Sources:
DecodeRecord:buffer too short for record: expected %d, got %d)2. The error values fit "V5 reader on a V6 footer"
The failing reader always reports
got 45(= 9 + 36, the V5 footer record size), whileexpectedvaries (55, 57, 65, ...).A V5 reader that slices the last 45 bytes of a 53-byte V6 footer record starts 8 bytes too late, so the length field it reads is
arbitrary;
expected = 9 + garbage_length. When the garbage length is small enough, the slice is long enough and the CRC32 check fails instead(
CRC32 mismatch). Both variants appear in our logs.3. The failing object in the bucket is a V6 footer
Hexdump tail of
<root>/wp/1/4308/footer.blk(258 bytes), one of the segments the 2.6.22-line build could not read:A healthy compacted segment from an earlier date ends with
... 0600 0100 4654 5201 3400 0000 0000 0000(version 6, flags=compacted, magic, LAC=52). In other words, the footers we see are V6 with a trailing LAC.
4. Which segments fail
All segments failing on the 2.6.22-line build were finalized in a single 3-minute window on Oct 7 (one per channel, 16 total).
Older uncompacted segments with large footers (Oct 5-6, same log) never appear in errors. Already-compacted segments (footer 86/94 bytes)
are not read by recovery and never fail.
5. Could you please help me to understand this,
(if any) reads V6, or which min version is required before upgrading to 3.0?
instead of slicing a fixed-size buffer and reporting a CRC/length error? The current failure mode looks like corruption and makes
CreateCollectionhang instead of failing fast.(without restoring from backup)?
All reactions