Lab 03 — RC Vote Parser
What You'll Build
A parser that reads an Apache RC [VOTE] email thread and evaluates it against
the Apache quorum rules: ≥ 3 binding +1 votes and no binding −1 veto.
Vote Thread Format
Subject: [VOTE] Release Apache Spark 3.5.0 RC1
+1 (binding) Alice PMC Chair
+1 (binding) Bob PMC member
+1 (binding) Carol Committer
+1 Eve contributor
0 (binding) Dave abstaining
-1 (binding) Frank — SHA-512 mismatch on .tar.gz
Lines starting with +1, 0, or -1 are votes.
(binding) in the line marks the vote as binding (cast by a PMC member).
All other lines are ignored.
Quorum Rules
| Condition | Result |
|---|---|
Any binding −1 | VETOED — release must be fixed |
≥ 3 binding +1, no binding −1 | PASSED |
< 3 binding +1, no binding −1 | INSUFFICIENT_VOTES |
Running
mvn test
Expected: 11 tests, 0 failures.
Key Classes
| Class | Role |
|---|---|
VoteEntry | voter name + vote value (+1/0/−1) + binding flag |
VoteThread | subject + list of entries; helpers for quorum/veto check |
VoteResult | Enum: PASSED, VETOED, INSUFFICIENT_VOTES |
VoteParser | parse(String) → VoteThread; evaluate(VoteThread) → VoteResult |
Interview Angle
Walk through a real vote thread from the Apache mailing list archives. Explain
the difference between binding (PMC) and non-binding (community) votes, and why
a single binding −1 blocks the release even when 10 people voted +1.