We Crashed Lioran S3 5 Times While Writing 100 GiB. Here Are the Raw Logs.
Building storage infrastructure is easy when everything works.
The interesting part starts when you kill the server in the middle of a write.
So before launching Lioran S3 / Lioran Bastion V1 Pre-Alpha, I wanted something more useful than a screenshot of a benchmark terminal.
I wanted the raw evidence.
On September 30, 2026, I ran a 100 GiB storage workload and chaos test against Lioran S3.
The test:
- wrote more than 100 GiB of objects,
- distributed them across 15 buckets,
- used 32 concurrent writers,
- deliberately terminated the server 5 times,
- restarted the same storage engine against the same dataset,
- continued writing,
- read the complete dataset back,
- and finally performed SHA-256 integrity verification.
The complete logs from that run are publicly available.
No cropped benchmark screenshots.
No manually rewritten numbers.
The raw logs, manifests, metrics, crash events, recovery events, and integrity verification are linked at the bottom of this article.
What is Lioran S3?
Lioran S3, also known internally as Lioran Bastion, is an object-storage engine written primarily in Rust.
It is being developed by Lioran Developer Solutions (LDS) under Lioran Group.
I'm Swaraj Puppalwar, Founder & CTO of Lioran Group.
Lioran S3 V1 Pre-Alpha launched on October 1, 2026.
The goal of the project is not to produce another wrapper around an existing object-storage service.
The storage engine itself handles physical object placement, streaming I/O, metadata, integrity checks, multipart uploads, range reads, durability modes, media workloads, access control, and recovery behavior.
This test was designed to attack one of the most important questions:
What happens when the storage server disappears while data is actively being written?
Test configuration
The benchmark configuration recorded in the test artifact was:
Target dataset: 100 GiB
Buckets: 15
Write concurrency: 32
Read concurrency: 32
Scheduled crashes: 5
Chaos mode: enabled
Upload timeout: 120 seconds
Write target: 500 MB/s
Read target: 500 MB/s
The workload used the same source asset repeatedly with unique object keys.
The source object was:
Size: 17,839,845 bytes
SHA-256: d6617a009c0c6c9aebf7398d43cad6d1985ddc1b9ab0479e2ea977362b8af5b0
The final benchmark ran for approximately:
1631.7 seconds
≈ 27 minutes
from workload start through the final integrity phase.
Phase 1: Write 100 GiB
The write phase eventually stored:
100.52 GiB
107,931,062,250 bytes
6,050 successful objects
with:
Write concurrency: 32
Write duration: 1236.1 seconds
Average throughput: 87.3 MB/s
Healthy throughput: 88.5 MB/s
5-second peak throughput: 663.2 MB/s
Latency distribution:
p50: 4316.5 ms
p90: 12823.8 ms
p95: 13386.9 ms
p99: 15016.0 ms
The important number here is not the 663 MB/s peak.
A short peak is not sustained throughput.
The sustained average for the complete write phase was approximately 87.3 MB/s.
That distinction matters when publishing storage benchmarks.
Then we started killing the server
Chaos mode scheduled five abrupt server terminations at different points in the write workload.
The crash log records them at approximately:
Crash 1: 10.00 GB acknowledged progress
Crash 2: 27.02 GB acknowledged progress
Crash 3: 45.01 GB acknowledged progress
Crash 4: 68.00 GB acknowledged progress
Crash 5: 85.00 GB acknowledged progress
These were not graceful shutdowns.
The harness terminated the exact Bastion server process.
For example:
[CHAOS] Triggering scheduled server crash 1/5 at 10.00 GB acknowledged progress
[CHAOS] Executing abrupt server termination on exact PID 28980...
The same process was repeated five times during the workload.
Crash #1
The first server termination happened at approximately:
10.00 GB
After termination, the harness restarted Bastion against the existing data directory.
The recovery log recorded:
Server restored and healthy after 163.2ms
Total downtime: 2372ms
The SDK transport was then rebuilt and authenticated again.
serverGen=1
clientGen=1
rebuilds=1
authenticated=YES
The workload continued.
Crash #2
The second termination happened at:
27.02 GB
The storage engine restarted against the same dataset.
Recorded server recovery:
155.7ms
with total recorded downtime of approximately:
2339ms
The client was rebuilt again and the workers were released.
Crash #3
The third crash happened at:
45.01 GB
This recovery was slower.
The server health recovery measurement was:
3413.8ms
with total recorded downtime around:
6117ms
This is exactly why publishing only the fastest recovery number would be misleading.
Recovery time varied between crashes.
Crash #4
The fourth forced termination happened at:
68.00 GB
The server was restarted again against the existing storage directory.
The workload continued rather than starting from an empty dataset.
Crash #5
The final forced crash occurred at:
85.00 GB
After the fifth recovery, the workload continued until the target dataset was reached.
The final chaos result was:
Crashes requested: 5
Crashes completed: 5
Crash-related write drops: 155
Unexpected errors: 0
Recovery status: ALL CRASHES RECOVERED
Those 155 dropped writes were expected consequences of deliberately killing the process while requests were in flight.
They were classified separately from unexpected write failures.
The final dataset
After all five crashes, Lioran S3 reached:
100.52 GiB
stored across:
15 buckets
6,050 successful objects
The workload recorded:
Unexpected write failures: 0
Retries: 0
This does not mean requests were magically unaffected by crashes.
The logs explicitly record:
155 chaos-expected write drops
The distinction is important.
Expected failures caused by intentionally terminating the server are not the same thing as unexplained storage-engine failures.
Phase 2: Read everything back
Writing data is only half of a storage benchmark.
The next phase read the stored dataset.
Total:
Data read: 100.52 GiB
Read operations: 6,050
Concurrency: 32
Duration: 383.1 seconds
Measured throughput:
Average: 281.7 MB/s
5-second peak: 414.1 MB/s
Read latency:
p50: 1879.5 ms
p90: 2488.8 ms
p95: 2738.2 ms
p99: 8779.2 ms
And:
Unexpected read failures: 0
Retries: 0
We did not hit the configured 500 MB/s read target
This is worth stating directly.
The test configuration specified:
Read target: 500 MB/s
The recorded sustained read throughput was:
281.7 MB/s
and the recorded 5-second peak was:
414.1 MB/s
Therefore this run did not achieve the configured 500 MB/s read target.
The machine, filesystem, workload, implementation, and test harness all influence these numbers.
Pre-alpha benchmarking should expose that instead of hiding it.
There is more optimization work to do.
Memory usage
The benchmark also tracked process memory.
The recorded values were:
Peak RSS: 924.2 MB
Final RSS: 231.7 MB
while operating on a dataset larger than:
100 GiB
The object engine uses streaming I/O rather than loading the complete dataset or complete large objects into memory.
Dataset size and process memory therefore do not need to scale together linearly.
The most important phase: integrity verification
Performance is irrelevant if the recovered data is wrong.
After the write and read workloads completed, the test harness performed SHA-256 verification against sampled stored objects.
The integrity phase verified:
188 objects
and reported:
Checksum failures: 0
Missing objects: 0
The final integrity log ends with:
Final verification complete:
188 verified,
0 checksum failures,
0 missing objects.
Result: PASS
The benchmark summary reports:
Integrity Verification: PASS
Missing Objects: 0
Corrupt Objects: 0
SHA-256 Mismatches: 0
Overall Result: PASS
That is the result I care about more than the peak throughput graph.
Final result
The complete run finished with:
Dataset: 100.52 GiB
Objects: 6,050
Buckets: 15
Scheduled crashes: 5
Completed crashes: 5
Crash write drops: 155
Unexpected write errors: 0
Unexpected read errors: 0
Average write: 87.3 MB/s
5s write peak: 663.2 MB/s
Average read: 281.7 MB/s
5s read peak: 414.1 MB/s
Peak RSS: 924.2 MB
Final RSS: 231.7 MB
Integrity samples: 188
Missing objects: 0
Corrupt objects: 0
SHA-256 mismatches: 0
Overall result: PASS
Don't trust the summary. Inspect the evidence.
A benchmark summary is still produced by the benchmark harness.
So I'm publishing the underlying artifacts too.
You can inspect the crash timestamps, server output, individual writes, reads, recovery events, metrics, object manifest, and SHA-256 verification yourself.
Raw proof files
Human-readable benchmark summary
https://liorans3.sbs/proof/summary.txt
This is the quickest artifact to inspect.
Machine-readable benchmark summary
https://liorans3.sbs/proof/summary.json
Contains the structured configuration, throughput, latency percentiles, crash recovery measurements, memory statistics, integrity results, and correctness flags.
Crash log
https://liorans3.sbs/proof/crashes.log
Contains all five scheduled server terminations and the acknowledged dataset progress at which each crash occurred.
Recovery log
https://liorans3.sbs/proof/recovery.log
Contains server restart events, recovery timing, SDK transport reconstruction, authentication restoration, and workload release after each crash.
Integrity verification log
https://liorans3.sbs/proof/integrity.log
Contains individual SHA-256 verification operations and the final integrity result.
Write log
https://liorans3.sbs/proof/writes.log
Contains the write workload events used to build the dataset.
Read log
https://liorans3.sbs/proof/reads.log
Contains the read workload events for the completed dataset.
Server log
https://liorans3.sbs/proof/server.log
Raw server-side output captured during the benchmark and crash/recovery workload.
Test harness log
https://liorans3.sbs/proof/test.log
Contains the orchestration and lifecycle output from the benchmark harness.
Errors log
https://liorans3.sbs/proof/errors.log
The provided artifact from this run is empty.
That file is intentionally still published as part of the evidence bundle.
Object manifest
https://liorans3.sbs/proof/manifest.jsonl
The object-level JSONL manifest generated by the workload.
This is one of the larger artifacts and allows the run to be inspected at a much lower level than the summary.
Raw metrics
https://liorans3.sbs/proof/metrics.jsonl
Machine-readable JSONL metrics collected throughout the workload.
This is the largest proof artifact in the bundle and contains the time-series benchmark measurements used during the run.
Why publish all of this?
Because infrastructure benchmarks are extremely easy to make impressive.
Choose the fastest five seconds.
Use warm cache.
Ignore failed requests.
Disable durability.
Hide recovery behavior.
Crop the terminal.
Put a giant number on a landing page.
Done.
That is not what I want Lioran S3 engineering to become.
If I publish:
87.3 MB/s average writes
you should be able to inspect where that number came from.
If I say:
5 server crashes
you should be able to see all five crash timestamps.
If I say:
0 SHA-256 mismatches
you should be able to open the integrity log.
And when a configured target is missed, such as the 500 MB/s read target in this run, that should be visible too.
What this test proves, and what it does not
This run provides evidence that this specific Lioran S3 pre-alpha build, under this specific workload and environment, completed a 100.52 GiB write/read chaos test with five scheduled server terminations and finished the test harness's integrity checks without a detected missing or corrupted object.
It does not prove that Lioran S3 can never lose data.
It does not prove that every hardware configuration will achieve these throughput numbers.
It does not prove that every possible crash point has been tested.
It does not prove production readiness.
This is V1 Pre-Alpha.
The point of publishing the evidence is precisely to avoid turning one successful chaos run into a universal reliability claim.
What's next
This test exposed both strengths and obvious optimization targets.
The engine recovered from all five scheduled crashes and completed the integrity phase successfully.
At the same time, sustained throughput remains below the long-term targets, particularly on the read side of this run.
The next versions will continue focusing on:
- storage-engine correctness,
- crash consistency,
- recovery,
- throughput,
- tail latency,
- multipart workloads,
- larger datasets,
- longer-running workloads,
- and more aggressive failure injection.
Lioran S3 V1 Pre-Alpha launched on October 1, 2026.
The next planned version is scheduled for November 17, 2026.
This is still early infrastructure.
But now the benchmark claims come with receipts.
Links
Lioran S3:
Documentation:
Lioran Group:
Lioran Developer Solutions:
GitHub:
https://github.com/LioranGroupOfficial/LioranBastion-Rust
Complete benchmark evidence
https://liorans3.sbs/proof/summary.txt
https://liorans3.sbs/proof/summary.json
https://liorans3.sbs/proof/crashes.log
https://liorans3.sbs/proof/recovery.log
https://liorans3.sbs/proof/integrity.log
https://liorans3.sbs/proof/writes.log
https://liorans3.sbs/proof/reads.log
https://liorans3.sbs/proof/server.log
https://liorans3.sbs/proof/test.log
https://liorans3.sbs/proof/errors.log
https://liorans3.sbs/proof/manifest.jsonl
https://liorans3.sbs/proof/metrics.jsonl
Swaraj Puppalwar
Founder & CTO, Lioran Group
Lioran Developer Solutions
Building developer infrastructure in India.
Top comments (0)