Helios FHIR Server 0.2.6 keeps passwords out of logs and streams large SQL on FHIR results
2 hours ago
Helios FHIR Server 0.2.6 stops writing database passwords and other secrets into its logs. It also streams large SQL on FHIR results instead of holding them in memory, speeds up search on SQLite and PostgreSQL, and stops losing audit events under load.
Ask about this presentation
Chapters
Show transcriptHide transcript
Helios FHIR Server 0.2.6 stops writing database passwords and other secrets into its logs. It also streams large SQL on FHIR results instead of holding them in memory, speeds up search on SQLite and PostgreSQL, and stops losing audit events under load.
hfs used to log its database connection string at startup exactly as configured. Here is a MongoDB address as it appeared, password included. In 0.2.6 the line keeps only the hosts and the database name. Help output, Debug output and errors sent to clients are redacted too, and dependency updates clear four RustSec advisories. Older logs still hold those passwords, so rotate them.
$sql-run used to build the whole JSON, CSV or FHIR response in memory before sending a byte. For a ViewDefinition subject, it now streams row by row. Over 1.8 million rows on SQLite, peak memory drops from about four and a half gigabytes to under two megabytes. PostgreSQL and MongoDB drop sharply too, and the first byte arrives in milliseconds.
Before you upgrade, check these three. A $sql-run result over 100 rows sends its 200 status early, so a later error aborts the body, and the request timeout no longer ends the run. If you haven't sized the PostgreSQL pool yourself, it is now capped at half the server's max connections, shared with other pools such as database auditing. And in the terminology server, POST always assigns its own ID, while PUT creates a resource at the ID you choose.
Audit writes used to be fired off once per request, so under load some were lost. At 300 virtual users on a stock PostgreSQL server, about 2.8 percent went missing. Now events wait in a bounded queue with retries, and the same test lost none. By default a full queue makes responses wait, which cost about six percent of throughput in that test. Set HFS_AUDIT_OVERFLOW to drop if you'd rather keep the speed, and a metric counts each dropped event.
Search got much faster. On SQLite, covering indexes and a bounded first-page probe take token, quantity, composite and date searches from about 14 to about 440 requests per second at 30 virtual users. On PostgreSQL, a newest-first date index lifts search throughput by nearly half and cuts Observation date search latency by almost 90 percent. MongoDB sends a transaction Bundle's creates in chunks of up to 100.
Among the fixes, FHIRPath equality now returns empty when two quantities carry units that can't be compared, and memberOf returns empty on empty input. A bulk submit with a deferred reindex resumes it after a restart. And on SQLite, a PUT that loses a race is retried.
Upgrading comes down to three steps. Rotate any passwords that sat in your connection strings. Give the first start extra time, since SQLite and PostgreSQL migrate their schemas before serving, and a large SQLite database can take minutes. If you run the terminology server, stop every writer on its database and upgrade them together. Version 0.2.6 keeps passwords out of your logs and streams big SQL on FHIR results.








