Skip to content

feat(msfs): warm-read fixes + per-inode disk cache backend#68

Open
ankitmaster08 wants to merge 1 commit into
mainfrom
aistore-test-preads
Open

feat(msfs): warm-read fixes + per-inode disk cache backend#68
ankitmaster08 wants to merge 1 commit into
mainfrom
aistore-test-preads

Conversation

@ankitmaster08

@ankitmaster08 ankitmaster08 commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Summary

Improves the MSFS data-cache warm-read path and adds an opt-in per-inode disk cache backend, validated against the EC2 MSFS→S3 baseline on OCI/AIStore.

  • Optimistic-lock copy: moves the cache-line → FUSE reply copy out of the global lock using the data cache's contentGeneration counter (snapshot under lock, copy unlocked, re-check + retry on mismatch). Removes warm-read lock serialization.
  • Disk cache backend (cache_backend: disk, opt-in, default memory): stores each inode's cache lines in a contiguous per-inode file and serves warm reads via pread issued outside the global lock, dropping FOPEN_DIRECT_IO so kernel readahead / page cache apply. Restores sequential locality the fixed-slot LRU gave up.

Results (ws-fits, P4.8 warm — 80×1 GiB, 64 KiB seq, 8 threads)

build warm MiB/s vs EC2 MSFS→S3 (4,536)
baseline (copy under lock) 1,861 0.41×
+ optimistic-copy 2,866 0.63×
+ disk backend 4,496 0.99×

Full 24-cell ws-fits matrix; warm = 0 backend fetches (pure local cache). Disk closes the residual large-file gap optimistic-copy could not (+22–57% on P4/P6).

Files

  • cache_disk.go, cache_disk_{linux,other}.go — per-inode file store / pread-serve / punch (fallocate PUNCH_HOLE on Linux, no-op elsewhere)
  • cache.go, fission.go — disk store-through + pread serve path + open flags
  • config.go, globals.gocache_backend knob (validated, default memory)
  • README.md — document cache_backend
  • tests: cache_disk_test.go, config_test.go, fission_test.go

Test plan

  • go build ./..., go test . (disk-cache unit tests + memory-path FUSE tests) green
  • gofmt / go vet clean
  • Default (cache_backend: memory) path unchanged
  • OCI ws-fits 24-cell disk matrix reproduces the table above

Summary by CodeRabbit

  • New Features

    • Disk-backed cache option (configurable: "memory" (default) or "disk")
    • Ability to route directory listing / manifest generation to a separate backend while keeping object reads on AIStore
  • Bug Fixes

    • Cache-line fetch failures are detected, evicted, and surface errors instead of returning corrupted data
    • Read path hardened with optimistic-copy/validation to avoid corrupted reads
  • Documentation

    • Updated guidance for cache_backend, mapped-cache behavior, manifest-gen routing, and related warnings
  • Tests

    • Added tests covering disk cache behavior, manifest-gen backend validation, and read-failure handling

@ankitmaster08 ankitmaster08 requested a review from a team June 9, 2026 21:08
@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 6ab91ab3-c311-4394-a016-24d966e63b50

📥 Commits

Reviewing files that changed from the base of the PR and between 5672e58 and 0f8ae01.

📒 Files selected for processing (15)
  • agent-learnings.md
  • multi-storage-file-system/README.md
  • multi-storage-file-system/backend_aistore.go
  • multi-storage-file-system/cache.go
  • multi-storage-file-system/cache_disk.go
  • multi-storage-file-system/cache_disk_linux.go
  • multi-storage-file-system/cache_disk_other.go
  • multi-storage-file-system/cache_disk_test.go
  • multi-storage-file-system/config.go
  • multi-storage-file-system/config_test.go
  • multi-storage-file-system/fission.go
  • multi-storage-file-system/fission_test.go
  • multi-storage-file-system/fs.go
  • multi-storage-file-system/globals.go
  • multi-storage-file-system/globals_lock.go
✅ Files skipped from review due to trivial changes (2)
  • multi-storage-file-system/README.md
  • agent-learnings.md
🚧 Files skipped from review as they are similar to previous changes (10)
  • multi-storage-file-system/cache_disk_linux.go
  • multi-storage-file-system/config_test.go
  • multi-storage-file-system/cache_disk_test.go
  • multi-storage-file-system/cache_disk_other.go
  • multi-storage-file-system/backend_aistore.go
  • multi-storage-file-system/cache_disk.go
  • multi-storage-file-system/cache.go
  • multi-storage-file-system/config.go
  • multi-storage-file-system/globals.go
  • multi-storage-file-system/fs.go

📝 Walkthrough

Walkthrough

Adds selectable disk-backed per-inode cache lines with hole-punching, updates FUSE open/read to use optimistic unlocked copies and evict failed fetches (returning EIO), and lets AIStore delegate LIST/STAT-DIR (manifest generation) to a configured non-AIStore backend; includes config, tests, docs, and lock-site label updates.

Changes

MSFS Runtime Storage and Manifest Delegation

Layer / File(s) Summary
Configuration and global state
multi-storage-file-system/globals.go, multi-storage-file-system/config.go
Parse/validate cache_backend ("memory"/"disk"), add AIStore manifest_gen_backend name and resolved pointer, add per-line disk tracker fields and inodeDiskCacheFiles, and forbid changing these settings on SIGHUP reload.
AIStore manifest-gen delegation
multi-storage-file-system/backend_aistore.go
Add listBackend pointer to AIStore context, lazily initialize the referenced backend context during setup, and delegate listDirectory/listObjects/statDirectory when configured.
Mount setup guard & fs label updates
multi-storage-file-system/fs.go
Only call setupContext() when backend.context is nil to avoid duplicate setup; update embedded globalsLock(...) label strings in several places.

Disk-Backed Cache Backend

Layer / File(s) Summary
Disk cache backend core
multi-storage-file-system/cache_disk.go, multi-storage-file-system/globals.go
Per-inode backing files in <cacheDir>/cachelines, diskCacheUp/diskCacheDown, storeContentDisk, punchHoleDisk, and resident-line accounting; add disk-tracking fields to cache-line trackers.
Platform punch-hole helpers
multi-storage-file-system/cache_disk_linux.go, multi-storage-file-system/cache_disk_other.go
Linux punchHoleSyscall using Fallocate punch-hole flags; !linux variant is a no-op.
Cache lifecycle & fetch integration
multi-storage-file-system/cache.go
Branch dataCacheUp/Down by cache_backend, punch holes on recycle/free, only populate in-memory copy for memory backend, write fetched bytes to disk for disk backend, and mark fetchFailed on read/store failures.
Disk cache tests
multi-storage-file-system/cache_disk_test.go
Unit tests for store/serve/punch, residency accounting, empty-store behavior, and test setup fixture.

FUSE/Open/Read Changes

Layer / File(s) Summary
Open flags selection
multi-storage-file-system/fission.go
Add computeOpenOutFlags() and disable DirectIO (return 0) when cache_backend == "disk".
DoRead optimistic copy and error path
multi-storage-file-system/fission.go, multi-storage-file-system/fission_test.go
Refactor DoRead to snapshot cache-line generation, unlock for disk ReadAt or in-memory copy, revalidate generation and retry on mismatch, evict failed fetches and return syscall.EIO; add regression test verifying EIO and eviction.
Lock instrumentation updates
multi-storage-file-system/globals_lock.go, multi-storage-file-system/fission.go, multi-storage-file-system/fs.go
Regenerate lock-site metadata and update globalsLock(...) label strings; no behavioral changes.

Sequence Diagram (DoRead optimistic copy):

sequenceDiagram
  participant DoRead
  participant globalsLock
  participant dataCacheLineTracker
  participant diskFile
  DoRead->>globalsLock: acquire & inspect cache line
  DoRead->>dataCacheLineTracker: snapshot contentGeneration + bounds
  DoRead->>globalsLock: release for copy
  alt cache_backend == "disk"
    DoRead->>diskFile: ReadAt() into reply buffer (unlocked)
  else memory backend
    DoRead->>dataCacheLineTracker: read in-memory content (unlocked)
  end
  DoRead->>globalsLock: re-acquire and validate generation
  alt fetchFailed
    DoRead->>dataCacheLineTracker: evict/free
    DoRead->>DoRead: return syscall.EIO
  else success
    DoRead->>DoRead: advance offset / continue
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Suggested reviewers

  • edmc-ss

Poem

"A rabbit nibbles cache and map,
backing files tucked in a nap,
hole-punch taps and manifests steer,
reads stay steady, errors clear,
I hop and guard each byte with clap."

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The PR title 'feat(msfs): warm-read fixes + per-inode disk cache backend' clearly and concisely summarizes the main changes: adding warm-read optimizations and a disk cache backend feature.
Description check ✅ Passed The PR description is comprehensive and well-structured. It includes a clear summary, specific performance results with metrics, file listings, and test plans. However, the checklist items (notably .release_notes/.unreleased.md) appear unchecked, which may be required for this development PR.
Docstring Coverage ✅ Passed Docstring coverage is 80.77% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch aistore-test-preads

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.12.2)

level=error msg="[linters_context] typechecking error: pattern ./...: directory prefix . does not contain main module or its selected dependencies"


Comment @coderabbitai help to get the list of available commands and usage tips.

Comment thread multi-storage-file-system/config.go Fixed
Comment thread multi-storage-file-system/config.go Fixed
Comment thread multi-storage-file-system/config.go Fixed
Comment thread multi-storage-file-system/fs.go Fixed
Comment thread multi-storage-file-system/fs.go Fixed

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (1)
multi-storage-file-system/config_test.go (1)

708-809: ⚡ Quick win

Add a SIGHUP regression case for manifest_gen_backend updates on existing backends.

The new tests cover resolve/missing paths, but not reload behavior for already-mounted AIStore backends. A dedicated update test would catch stale delegation routing regressions.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@multi-storage-file-system/config_test.go` around lines 708 - 809, Add a new
test that simulates sending SIGHUP (or calling the config reload path used by
the program) to exercise updating an already-mounted AIStore backend's
manifest_gen_backend; reuse the setup from TestManifestGenBackendReference to
mount an "ais" backend, then modify the on-disk config to change
ais.AIStore.manifest_gen_backend to a different existing backend (and also add a
case where it points to a non-existent backend) and trigger the same reload
handler (the SIGHUP path or the reload function the code uses) so that
globals.backendsToMount["ais"].backendTypeSpecifics.(*backendConfigAIStoreStruct).manifestGenBackendName
and manifestGenBackend are updated/validated; assert that after reload the
manifestGenBackendName and resolved manifestGenBackend (and its
dirName/backendType) match the new config, and that reload rejects a dangling
reference as in TestManifestGenBackendMissing.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@multi-storage-file-system/cache.go`:
- Around line 381-385: When recycling a clean cache line, increment/bump the
line's contentGeneration before calling punchHoleDisk so unlocked optimistic
readers can't observe a stale "stable" generation after the line's bytes are
released; locate the code path that handles eviction/reassignment (references:
dataCacheLineTracker, punchHoleDisk, contentGeneration and the reassignment
branch around the current punchHoleDisk call) and move or add a
contentGeneration bump immediately prior to invoking punchHoleDisk (do the same
change in the reassignment code path around the other occurrence referenced at
the reassignment section).
- Around line 528-535: The disk-store call can fail and return 0 which currently
overwrites contentLength and leaves fetchFailed false, causing DoRead to treat
it as EOF; change the logic around
dataCacheLineTracker.storeContentDisk(readFileOutput.buf) so you capture its
return (e.g. savedLen := dataCacheLineTracker.storeContentDisk(...)) and if
savedLen <= 0 mark dataCacheLineTracker.fetchFailed = true and do not overwrite
a previously valid dataCacheLineTracker.contentLength with 0 (keep the prior
length or set an explicit error sentinel), ensuring fetch failures from
storeContentDisk are propagated to DoRead; reference dataCacheLineTracker,
storeContentDisk, and DoRead when making the change.

In `@multi-storage-file-system/README.md`:
- Line 150: The README statement that manifest_gen_backend "must" match the same
bucket/prefix is inaccurate; update the documentation for the
manifest_gen_backend parameter to say the system will only warn on bucket/prefix
mismatches (not enforce) and describe the operational implications of a warning
(e.g., listing may target a different underlying store while reads use AIS
cache). Modify the manifest_gen_backend entry text to replace "must" language
with a note that mismatches trigger a runtime warning and include a short line
about expected behavior when a mismatch occurs.

---

Nitpick comments:
In `@multi-storage-file-system/config_test.go`:
- Around line 708-809: Add a new test that simulates sending SIGHUP (or calling
the config reload path used by the program) to exercise updating an
already-mounted AIStore backend's manifest_gen_backend; reuse the setup from
TestManifestGenBackendReference to mount an "ais" backend, then modify the
on-disk config to change ais.AIStore.manifest_gen_backend to a different
existing backend (and also add a case where it points to a non-existent backend)
and trigger the same reload handler (the SIGHUP path or the reload function the
code uses) so that
globals.backendsToMount["ais"].backendTypeSpecifics.(*backendConfigAIStoreStruct).manifestGenBackendName
and manifestGenBackend are updated/validated; assert that after reload the
manifestGenBackendName and resolved manifestGenBackend (and its
dirName/backendType) match the new config, and that reload rejects a dangling
reference as in TestManifestGenBackendMissing.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: d670e934-3885-4458-aaa4-be290649b3b7

📥 Commits

Reviewing files that changed from the base of the PR and between eec2f3b and 2b51df5.

📒 Files selected for processing (15)
  • agent-learnings.md
  • multi-storage-file-system/README.md
  • multi-storage-file-system/backend_aistore.go
  • multi-storage-file-system/cache.go
  • multi-storage-file-system/cache_disk.go
  • multi-storage-file-system/cache_disk_linux.go
  • multi-storage-file-system/cache_disk_other.go
  • multi-storage-file-system/cache_disk_test.go
  • multi-storage-file-system/config.go
  • multi-storage-file-system/config_test.go
  • multi-storage-file-system/fission.go
  • multi-storage-file-system/fission_test.go
  • multi-storage-file-system/fs.go
  • multi-storage-file-system/globals.go
  • multi-storage-file-system/globals_lock.go

Comment thread multi-storage-file-system/cache.go
Comment thread multi-storage-file-system/cache.go Outdated
Comment thread multi-storage-file-system/config.go
Comment thread multi-storage-file-system/README.md Outdated
Comment thread multi-storage-file-system/config.go Fixed
Comment thread multi-storage-file-system/fs.go Fixed
@ankitmaster08 ankitmaster08 force-pushed the aistore-test-preads branch 2 times, most recently from 56f1193 to 5672e58 Compare June 9, 2026 21:39

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
multi-storage-file-system/config_test.go (1)

708-809: ⚡ Quick win

Add tests for the remaining manifest_gen_backend validation branches.

These additions cover valid reference and missing backend, but checkConfigFile() also enforces (1) self-reference rejection and (2) AIStore→AIStore rejection. Adding those two cases would lock the full contract and prevent silent regressions.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@multi-storage-file-system/config_test.go` around lines 708 - 809, Add two
tests exercising the remaining manifest_gen_backend validation branches: one
that sets manifest_gen_backend to the same dir_name (self-reference) and one
that configures an AIStore backend pointing its manifest_gen_backend to another
backend whose backend_type is also AIStore (AIStore→AIStore). For each test
(modeled on TestManifestGenBackendReference/TestManifestGenBackendMissing) call
initGlobals(...), write a YAML to globals.configFilePath that creates the
specific invalid reference, then call checkConfigFile() and assert it returns an
error; for the self-reference case you can additionally load
globals.backendsToMount and assert the resolver would have matched the same
dir_name if it ran, but the primary expectation is checkConfigFile() must fail.
Use the same symbols from the diff: checkConfigFile, manifest_gen_backend,
backendConfigAIStoreStruct, globals.backendsToMount, and dir_name to locate
where to add these tests.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@multi-storage-file-system/cache_disk_test.go`:
- Around line 13-25: Add a t.Cleanup registration in diskTestSetup so the disk
cache is always torn down after each test: after successfully calling
diskCacheUp() in diskTestSetup, call t.Cleanup with a closure that invokes
punchHoleDisk() (or the appropriate disk-cache teardown function) and logs any
error (using t.Logf) rather than calling t.Fatal; this ensures
diskCacheUp()/punchHoleDisk() state and file handles are cleaned even if the
test aborts.

---

Nitpick comments:
In `@multi-storage-file-system/config_test.go`:
- Around line 708-809: Add two tests exercising the remaining
manifest_gen_backend validation branches: one that sets manifest_gen_backend to
the same dir_name (self-reference) and one that configures an AIStore backend
pointing its manifest_gen_backend to another backend whose backend_type is also
AIStore (AIStore→AIStore). For each test (modeled on
TestManifestGenBackendReference/TestManifestGenBackendMissing) call
initGlobals(...), write a YAML to globals.configFilePath that creates the
specific invalid reference, then call checkConfigFile() and assert it returns an
error; for the self-reference case you can additionally load
globals.backendsToMount and assert the resolver would have matched the same
dir_name if it ran, but the primary expectation is checkConfigFile() must fail.
Use the same symbols from the diff: checkConfigFile, manifest_gen_backend,
backendConfigAIStoreStruct, globals.backendsToMount, and dir_name to locate
where to add these tests.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: dcd65572-821e-49c3-a462-f11cd1e5fbf2

📥 Commits

Reviewing files that changed from the base of the PR and between 56f1193 and 5672e58.

📒 Files selected for processing (15)
  • agent-learnings.md
  • multi-storage-file-system/README.md
  • multi-storage-file-system/backend_aistore.go
  • multi-storage-file-system/cache.go
  • multi-storage-file-system/cache_disk.go
  • multi-storage-file-system/cache_disk_linux.go
  • multi-storage-file-system/cache_disk_other.go
  • multi-storage-file-system/cache_disk_test.go
  • multi-storage-file-system/config.go
  • multi-storage-file-system/config_test.go
  • multi-storage-file-system/fission.go
  • multi-storage-file-system/fission_test.go
  • multi-storage-file-system/fs.go
  • multi-storage-file-system/globals.go
  • multi-storage-file-system/globals_lock.go
✅ Files skipped from review due to trivial changes (1)
  • multi-storage-file-system/README.md
🚧 Files skipped from review as they are similar to previous changes (11)
  • multi-storage-file-system/cache_disk_other.go
  • multi-storage-file-system/cache_disk_linux.go
  • multi-storage-file-system/fs.go
  • agent-learnings.md
  • multi-storage-file-system/fission_test.go
  • multi-storage-file-system/config.go
  • multi-storage-file-system/backend_aistore.go
  • multi-storage-file-system/cache_disk.go
  • multi-storage-file-system/globals_lock.go
  • multi-storage-file-system/cache.go
  • multi-storage-file-system/fission.go

Comment on lines +13 to +25
func diskTestSetup(t *testing.T, cacheLineSize, cacheLines uint64) {
t.Helper()
globals.logger = log.New(os.Stderr, "", 0)
globals.cacheDir = t.TempDir()
globals.config = &configStruct{
cacheBackend: "disk",
cacheLineSize: cacheLineSize,
cacheLines: cacheLines,
}
if err := diskCacheUp(); err != nil {
t.Fatalf("diskCacheUp() failed: %v", err)
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Register teardown in setup to avoid cross-test state/file-handle leaks.

Line 22 brings disk cache up, but setup never guarantees a matching teardown. If a test aborts before punchHoleDisk(), disk-cache state can persist and cause follow-on flakiness. Please add a t.Cleanup(...) teardown path in diskTestSetup.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@multi-storage-file-system/cache_disk_test.go` around lines 13 - 25, Add a
t.Cleanup registration in diskTestSetup so the disk cache is always torn down
after each test: after successfully calling diskCacheUp() in diskTestSetup, call
t.Cleanup with a closure that invokes punchHoleDisk() (or the appropriate
disk-cache teardown function) and logs any error (using t.Logf) rather than
calling t.Fatal; this ensures diskCacheUp()/punchHoleDisk() state and file
handles are cleaned even if the test aborts.

Improves the MSFS data-cache warm-read path and adds an opt-in disk cache
backend, validated against the EC2 MSFS->S3 baseline on OCI/AIStore.

Contention / optimistic-lock copy:
- Move the cache-line -> FUSE reply copy out of the global lock using the data
  cache's contentGeneration counter (snapshot under lock, copy unlocked,
  re-check + retry on mismatch), removing warm-read lock serialization.

Per-inode disk cache backend (cache_backend: disk, Option B, opt-in):
- Store each inode's cache lines in a contiguous per-inode file; serve warm
  reads via pread issued outside the global lock and drop FOPEN_DIRECT_IO so
  kernel readahead/page cache apply. Default in-memory data cache unchanged.
- cache_disk.go + cache_disk_{linux,other}.go (fallocate PUNCH_HOLE on Linux).
- Bump contentGeneration before punching recycled clean lines so in-flight
  optimistic readers retry instead of reading punched bytes.
- Treat a failed storeContentDisk on a non-empty read as a fetch failure
  (EIO via DoRead) rather than EOF.

Results (ws-fits, P4.8 warm): baseline 1,861 -> optimistic 2,866 -> disk 4,496
MiB/s (0.99x EC2 4,536).

Other:
- Do not log backend-derived values in the backend setup-failure and
  manifest_gen mismatch warnings (CodeQL go/clear-text-logging): the secret
  taints those structures, so the warnings log a fixed message only.
- Reject changing AIStore.manifest_gen_backend via SIGHUP.
- config.go/globals.go: cache_backend knob and config plumbing.
- README.md: document cache_backend; align manifest_gen_backend wording.
- tests: config_test.go, fission_test.go, cache_disk_test.go.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants