Skip to content

Research notes / Erasure coding

Reed-Solomon recovery needs more than a fragment count

13 October 2026 / Primary-source review and synthetic exact arithmetic

Three surviving fragments do not necessarily determine three original values. The selected equations must be independent, and the values must be trustworthy. Redundancy count alone proves neither.

Two properties that should not be conflated

Systematic describes an encoding that retains the original symbols. Maximum distance separable (MDS) supplies the any-k recovery guarantee. RFC 5510 specifies both, on a channel where received symbols are assumed uncorrupted. It is a packet-FEC specification, not a certification of a storage product. [1]

For the column-vector convention below, each surviving fragment contributes one row of a generator matrix. Recovering three unknown data symbols requires an invertible three-row matrix. A visible identity block only settles the easy case in which all original data fragments survive.

Same dimensions, different recovery guarantees

Our selected teaching example has three data symbols and six encoded symbols over GF(7): integers 0 through 6 with arithmetic modulo 7. This is not byte arithmetic or GF(28). We check all 20 ways to retain exactly three of the six fragments. Row indices begin at zero.

GF(7): all 3-of-6 subsets
ConstructionCheckedRecoverableSingular survivor sets
Identity plus power rows2019[1, 3, 5]
Whole-matrix systematic transform2020None

The first construction appends rows [1, x, x2] for x = 1, 2, 6 beneath a three-row identity matrix. Its power rows are distinct, yet surviving rows 1, 3 and 5 are dependent.

row 1: [0, 1, 0]
row 3: [1, 1, 1]
row 5: [1, 6, 1]
row 5 - row 3 = 5 * row 1  (modulo 7)

The ambiguity is concrete: original payloads [0, 0, 0] and [1, 0, 6] both produce surviving values [0, 0, 0]. No decoder using only those values can tell which payload was written. This is information loss, not a numerical-precision problem.

For the second construction, start with six Vandermonde rows [1, x, x2] at x = 0 through 5. Let T be its first three rows. Compute G = V T-1 over GF(7), transforming every row rather than replacing the top rows. The result has an identity block and passes all 20 subset checks. Each chosen submatrix is an invertible Vandermonde matrix multiplied by the same invertible T-1.

Both matrices and every singular subset are in the generated JSON. The model and tests enumerate all 343 possible input triples independently of matrix inversion, then round-trip every payload through each nonsingular survivor set.

node --test erasure-matrix.test.mjs

This is an exhaustive result for two explicit small constructions, not a sampled population. The 19/20 count is not a 95% reliability estimate. We assign no probability to fragment losses, and do not model disks, racks, stale versions, repair traffic or concurrent updates. The matrices are illustrative, not the historical paper's example, ISA-L output or an RFC 5510 implementation.

Why the construction deserves a source audit

Plank and Ding's 2005 correction explicitly says the information-dispersal matrix in the 1997 tutorial did not have its claimed arbitrary-row-deletion property. The author's bibliography distinguishes the 2003 technical report from the 2005 journal publication. We verified the bibliography and abstract, but could not retrieve the full correction paper in this run; our example is therefore not presented as its reproduction. [2]

The pinned ISA-L header gives a related implementation warning: gf_gen_rs_matrix does not promise invertible recovery matrices for all parameter choices. It documents sufficient parameter ranges and a separate Cauchy constructor. Here its m means total rows, not parity count. A familiar function name is not a substitute for checking its contract. This is a documented limitation, not a newly discovered vulnerability, and it does not establish a defect in Ceph. [3]

Correctness evidence is not a speed ranking

The FAST 2009 comparison by Plank and colleagues tested five open-source libraries, several code families and two main machines. After finding high filesystem-I/O variability, the coding experiments removed actual file I/O and measured encoding work. Decoding selected missing data drives and checked reconstructed data. Cache behavior, packet size and implementation details materially affected results. These are historical implementation experiments, not current storage throughput figures or a proof for every erasure pattern. [4, sections 4-7]

Our enumeration makes no performance claim. Compare local repair accounting for a separate question: how much data a successful reconstruction reads.

An invertible system can recover the wrong data

If an input fragment silently changes, solving an invertible system still gives an answer. An erasure-channel contract does not supply the missing integrity check. Fragment identity, expected version and validation before repair remain separate requirements; see checksum and lost-write boundaries.

For an engineering review, record the exact code construction and field, fragment ordering, supported parameters, tested loss patterns, validation of helpers and reconstruction, and placement across failure domains. Do not replace a production codec or reinterpret existing fragments using this teaching implementation.

Sources and reproducibility

  1. Lacan, Roca, Peltotalo and Peltotalo. RFC 5510 (2009), sections 3.1, 8.2-8.4: systematic encoding and the erasure-channel assumption.
  2. Plank and Ding. Note: Correction to the 1997 Tutorial on Reed-Solomon Coding. Software: Practice and Experience 35(2), 189-194 (2005). DOI 10.1002/spe.631. Author bibliography and abstract reviewed; full correction text unavailable in this run.
  3. Intel ISA-L erasure_code.h, gf_gen_rs_matrix and gf_gen_cauchy1_matrix documentation; commit 8fa1e72fee7338fcfbf829b00f2f407631bd2dba.
  4. Plank, Luo, Schuman, Xu and Wilcox-O'Hearn. A Performance Evaluation and Examination of Open-Source Erasure Coding Libraries For Storage. FAST 2009, sections 2, 4-7.

Reviewed 13 October 2026. Original calculations use exact integer arithmetic and no random seed or third-party dataset. The JSON includes method and limits; the repository checkpoint records the runtime, tests and deployment evidence. No source paper, figure or external library code is republished.