This repo demonstrates the fact that if an iterator fails during user-initiated compactions, the fate persists, even though it will never work.
Make sure you're using java 8:
java -version
Then run:
git checkout https://github.com/loganasherjones/accumulo-iterators-failures
cd accumulo-iterator-failures
./gradlew build
This will run the test which should fail.
Here is what the test does
- Spins up Accumulo using the
MiniAccumuloCluster
- Creates a table
- Inserts a row into the table
- Issues a compaction
- Validates that the compaction is created and succeeds
- Adds an iterator to the table that throws an error on the
next
call - Validates that the iterator is finished being set
- Issues another compaction on the table
- This causes an issue in which the tablet server is continuously trying to compact, but can't. The fate stays
IN_PROGRESS
and never goes toFAILED
and so the test fails.