Reaper 1.4.1 fixes generated authentication configuration
A missing newline broke environment-based authentication configuration. Reaper 1.4.1 also filters removed nodes from gossip status and restores database driver defaults.
An authentication setting can be correct at its source and wrong by the time an application reads it. Reaper 1.4.1 contains an unusually small example. Its Docker authentication template ended at the [users] section header without a trailing newline. Appending a configured user could therefore produce text that did not have the intended configuration structure.
The 1.4.1 release, published on 9 March 2019, fixes that file boundary. It also excludes removed Cassandra nodes when interpreting gossip information and supplies missing database driver defaults. Each change concerns information that Reaper receives indirectly, through a generated file, a status response or configuration defaults. The release improves how the repair service interprets those inputs.
I am interested in Cassandra for the active-active systems it supports. Repair tooling is part of the operational work that makes that architecture usable. This release deserves attention because the surrounding service can fail in ways that have little to do with Cassandra's repair algorithm.
The authentication file boundary
The authentication commit changes the Docker shiro.ini file by adding its missing final newline. The comment immediately before [users] says that custom authentication will be appended. In the release notes, REAPER_AUTH_USER is identified as the affected configuration path.
That arrangement makes the end of the template part of the configuration interface. The appended text needs to begin on its own line after the section header. A template can look complete in a code review while still lacking the byte that separates its final line from generated content. Here the patch changes no authentication algorithm and introduces no new credential format. It restores the structure expected when assembling the file.
The distinction helps explain the scope of the fix. This is a correction to the Docker configuration template used for environment-based authentication. The release does not describe a general Cassandra authentication defect, and the patch does not change Cassandra's users or permissions. Reaper's own access configuration belongs to the service that manages repairs.
It also explains why reading an environment variable back from a container is insufficient evidence that the application received a valid setting. There is an intermediate representation. The variable supplies content that becomes part of an INI file, and the parser consumes that file. The commit establishes a concrete failure at that intermediate step.
Removed nodes still appear in gossip
The node-status correction changes NodesStatus.java. Previously, the parser excluded endpoints whose status contained left. It now also excludes status containing removed, after converting the status string to lowercase.
The source comment explains that departed nodes can remain in gossip state for a while. A status response can therefore contain a record for an endpoint that should no longer appear in the current node collection. Treating every reported endpoint as a present member would confuse the existence of a status record with continued cluster membership.
This is a precise change to the collection assembled by the parser. Both the endpoint and its endpoint-state entry are added only when the status passes the filter. It does not remove a Cassandra node, alter gossip propagation or change the procedure for replacing a failed machine. Reaper changes its interpretation of the information it reads.
I value this kind of correction in an administrative interface because operators use topology displays to reason about maintenance. A historical endpoint shown beside current nodes can produce a misleading picture even if the underlying database has already completed its membership change. Filtering the explicitly removed state makes the display agree with that state.
Database configuration gets its default back
The third release commit handles an absent JDBC driver class. When the configured storage type is postgres and the class is empty, Reaper supplies org.postgresql.Driver. For h2, it supplies org.h2.Driver. The conditions preserve an explicitly configured driver class.
The associated test-resource change removes the explicit PostgreSQL driver from a configuration file. That makes the intended omission visible in the patch itself. The application is supposed to infer the driver for those named storage types, so the configuration need not repeat information already implied by the storage selection.
The distinction between repair targets and Reaper's own database is important here. The README at the release tag describes Reaper as a stateful service with a database containing its system state. It communicates with registered Cassandra clusters through JMX. A JDBC configuration problem affects the service's storage initialization, not the CQL driver used by an application accessing its own Cassandra data.
That README also describes segmented repairs, basic scheduling and opportunities to run parallel repairs on different nodes. Those capabilities depend on a functioning management service. Memory storage exists for testing, but the documentation explicitly describes it as nonpersistent. The driver-default correction therefore concerns a necessary part of operating the persistent service.
Reaper 1.4.1 leaves the repair model intact while correcting the service around it. Its authentication template now has the line boundary required for appended users. Its status parser recognizes another terminal membership state. The storage initialization code supplies the expected driver when a named backend omits it, preserving explicit configuration when one is present.