Skip to content

Design Records

Design records document the engineering decisions behind PGSTY SILO: root causes, S3 and IAM protocol invariants, trade-offs against rejected alternatives, operational limits, and regression coverage.

November 10: Found in Release Review

November 9: Console Languages

November 6: Found in Release Acceptance

November 4: Release-Blocking Lifecycle Fixes

All server design records in this section shipped in SILO Server 20261109; the Console quota validation repair shipped in standalone Console 2.6.0 and Console 2.7.0 and embedded in SILO Server 20261109.

November 1: Pool Migration Integrity Review

All pool-migration and tier-cleanup fixes in this section shipped in SILO Server 20261109.

October 24: FULL_OBJECT Checksum Replication

October 24: Multi-Pool Deletion and Placement

  • Multi-Pool Deletion: Preserve the Latest Copy on Failure (#256, #257): Why an online-drive preflight cannot protect against later I/O failures, how staged cleanup preserves each item’s authoritative copy, and the retry, tier-reference, performance, and compatibility boundaries of the merged fix.

  • Overwrite Pool Affinity: Why #245 Was Not Adopted (#245): The original placement problem, request-aware quorum and health improvements, unversioned-only scope, two rounds of m3 performance measurements, and the decision to stop after small-object overwrite regressions remained. The experimental changes were not merged.

October 23: Alias Regions

  • Alias regions: Persistent per-alias regions, client-cache isolation, and upgrade, downgrade and credential-rotation boundaries, reconciled with mcli 20261109.

October 23 IAM & KMS Design Notes

  • LDAP Long DNs: Restoring Login Without Hiding Revocation Errors (#250): How \xx hex escaping in NormalizeDN triggers the 255-byte single-component filename limit on the object IAM backend, and why loadIAMConfigBytesWithMetadata classifies only impossible pure-ASCII path components (> 255 bytes) as errConfigNotFound.
  • IAM Policy Reloads: Lock Scope, Cancellation, and Time Budgets (#251): Moving policy reload and KMS decryption outside the authentication-cache lock while retaining writeMu, threading request cancellation end-to-end to KES.Decrypt, and keeping etcd 30-second RPC deadlines separate from total decryption budgets.

Server 20261018 Key Design Notes

For the Server 20261018 release, see these core architecture notes:

  • Lifecycle History: One Version Under the Headers of Two Releases

    In Design

    DesignLifecycleErasure CodingCompatibility

    Lifecycle History: One Version Under the Headers of Two Releases

    This record covers a defect found in a maintainer review of RELEASE.2026-11-09T00-00-00Z (d99829238). That release introduced it with 9f7b49369, part of the multi-pool lifecycle fix (#278). The fix is PR #332; there is no separate GitHub issue. …

    This record covers a defect found in a maintainer review of RELEASE.2026-11-09T00-00-00Z (d99829238). That release introduced it with 9f7b49369, part of the multi-pool lifecycle fix (#278). The fix is PR #332; there is no separate GitHub issue. …

  • Adding Multilingual Support to SILO

    In Design

    DesignconsoleInternationalization

    Adding Multilingual Support to SILO

    Console PR #83, contributed by Eduardo Andrade Machado, supplies Brazilian Portuguese. silo#277, opened by siyahkut, requests Turkish. These contributions led to a configurable ten-language UI. Status: Shipped in Console 2.7.0 (4e91ae506e70, …

    Console PR #83, contributed by Eduardo Andrade Machado, supplies Brazilian Portuguese. silo#277, opened by siyahkut, requests Turkish. These contributions led to a configurable ten-language UI. Status: Shipped in Console 2.7.0 (4e91ae506e70, …

  • Native Restore in Two Phases

    In Design

    DesignTieringLockingAvailability

    Native Restore in Two Phases

    This record covers issue #284 and two regressions of the first native-restore safeguards for #281, described in Restored Copies: Expire the Copy, Not the Object. It was evaluated against main at 69fcf50cd and the pre-release SILO Server 20261109 …

    This record covers issue #284 and two regressions of the first native-restore safeguards for #281, described in Restored Copies: Expire the Copy, Not the Object. It was evaluated against main at 69fcf50cd and the pre-release SILO Server 20261109 …

  • A Partial View Must Not Report an Existing Object as Missing

    In Design

    DesignErasure CodingAvailabilityS3 Compatibility

    A Partial View Must Not Report an Existing Object as Missing

    This record covers a defect found during local acceptance of SILO Server 20261109. It reproduced on the pre-release SILO Server 20261109 integration branch and on 69fcf50cd. Tracked as #302. Status: Shipped in SILO Server 20261109 (d998292387cc). …

    This record covers a defect found during local acceptance of SILO Server 20261109. It reproduced on the pre-release SILO Server 20261109 integration branch and on 69fcf50cd. Tracked as #302. Status: Shipped in SILO Server 20261109 (d998292387cc). …

  • A Failed Multipart Completion Can Strand the Upload

    In Design

    DesignMultipartErasure CodingS3 Compatibility

    A Failed Multipart Completion Can Strand the Upload

    This record covers a defect identified during release acceptance of SILO Server 20261109. It reproduces on 69fcf50cd and on SILO Server 20261109 (d998292387cc), and is inherited from upstream MinIO. It has no GitHub issue ID. Status: Analyzed and …

    This record covers a defect identified during release acceptance of SILO Server 20261109. It reproduces on 69fcf50cd and on SILO Server 20261109 (d998292387cc), and is inherited from upstream MinIO. It has no GitHub issue ID. Status: Analyzed and …

  • Lock Domains of Large Single-Pool Clusters

    In Design

    DesignLockingStorageOperations

    Lock Domains of Large Single-Pool Clusters

    This record covers a lock-domain defect found during review of the restored-copy fix (Restored Copies: Expire the Copy, Not the Object), evaluated against main at 69fcf50cd. Tracked as #298. Status: Shipped in SILO Server 20261109 (d998292387cc). …

    This record covers a lock-domain defect found during review of the restored-copy fix (Restored Copies: Expire the Copy, Not the Object), evaluated against main at 69fcf50cd. Tracked as #298. Status: Shipped in SILO Server 20261109 (d998292387cc). …

  • Restored Copies: Expire the Copy, Not the Object

    In Design

    DesignLifecycleTieringData Safety

    Restored Copies: Expire the Copy, Not the Object

    This record covers issue #281 and PR #282 by Denis Babchuk, evaluated against main at 69fcf50cd. The fix shipped in the same maintainer integration PR as the multi-pool lifecycle fix (Multi-Pool Lifecycle Expiry, #278). That PR keeps the contributor …

    This record covers issue #281 and PR #282 by Denis Babchuk, evaluated against main at 69fcf50cd. The fix shipped in the same maintainer integration PR as the multi-pool lifecycle fix (Multi-Pool Lifecycle Expiry, #278). That PR keeps the contributor …

  • Failed Writes and Phantom Empty Prefixes

    In Design

    DesignStorageListObjectsOperations

    Failed Writes and Phantom Empty Prefixes

    This record covers issue #285 and PR #286 by Denis Babchuk, evaluated against main at 69fcf50cd and the PR head ed05d982a. Status: Shipped in SILO Server 20261109 (d998292387cc). Short answer The report is real. A drive can run xlStorage.RenameData …

    This record covers issue #285 and PR #286 by Denis Babchuk, evaluated against main at 69fcf50cd and the PR head ed05d982a. Status: Shipped in SILO Server 20261109 (d998292387cc). Short answer The report is real. A drive can run xlStorage.RenameData …

  • Multi-Pool Lifecycle Expiry: Decide on the Whole Object

    In Design

    DesignLifecycleStorage PoolsData Safety

    Multi-Pool Lifecycle Expiry: Decide on the Whole Object

    This record covers issue #278 and PR #279 by Denis Babchuk, evaluated against main at 69fcf50cd. The merged maintainer integration preserves the contributor commits and adds the follow-ups described below. The restored-copy expiry fix (#281) travels …

    This record covers issue #278 and PR #279 by Denis Babchuk, evaluated against main at 69fcf50cd. The merged maintainer integration preserves the contributor commits and adds the follow-ups described below. The restored-copy expiry fix (#281) travels …

  • Heal Dry Run Must Not Delete Data

    In Design

    DesignHealingData SafetyOperations

    Heal Dry Run Must Not Delete Data

    This record covers the dry-run part of PR #280 by Jasper Bernhardt (@dihmandrake), evaluated against main at 69fcf50cd. The same PR also verifies an object’s drives concurrently during deep scans. That optimization is reviewed separately and is …

    This record covers the dry-run part of PR #280 by Jasper Bernhardt (@dihmandrake), evaluated against main at 69fcf50cd. The same PR also verifies an object’s drives concurrently during deep scans. That optimization is reviewed separately and is …

  • Lifecycle Delete-All Must Stay on One Key

    In Design

    DesignLifecycleBatch ExpirationData Safety

    Lifecycle Delete-All Must Stay on One Key

    This record covers a defect found during review of the #278 fix (Multi-Pool Lifecycle Expiry). It was evaluated against main at 69fcf50cd and against the maintainer integration branch for #278 and #281, as it stood before integration. Status: Shipped …

    This record covers a defect found during review of the #278 fix (Multi-Pool Lifecycle Expiry). It was evaluated against main at 69fcf50cd and against the maintainer integration branch for #278 and #281, as it stood before integration. Status: Shipped …

  • Bucket Quota in the Console: List Display and Numeric Validation

    In Design

    DesignconsoleQuotaRetention

    Bucket Quota in the Console: List Display and Numeric Validation

    This record covers silo-console#72 (a quota set in the web Console shows as a dash in the bucket list) and silo-console#73 (numeric validation in the bucket-creation form). It is evaluated against the Console source before the fix, 3d264aea9, and the …

    This record covers silo-console#72 (a quota set in the web Console shows as a dash in the bucket list) and silo-console#73 (numeric validation in the bucket-creation form). It is evaluated against the Console source before the fix, 3d264aea9, and the …

  • Audit Webhooks After a Peer Reload

    In Design

    DesignAuditLoggingConfigurationOperations

    Audit Webhooks After a Peer Reload

    This record covers issue #259, reported by Henrik Feldt, evaluated against main at 69fcf50cd. The fix completes earlier, uncommitted maintainer work. It adds the Kafka call site, a handoff of records queued in a target that never started, and Kafka …

    This record covers issue #259, reported by Henrik Feldt, evaluated against main at 69fcf50cd. The fix completes earlier, uncommitted maintainer work. It adds the Kafka call site, a handoff of records queued in a target that never started, and Kafka …

  • ILM Expiry and Pool Migration Ordering

    In Design

    DesignLifecycleStorage PoolsReplication

    ILM Expiry and Pool Migration Ordering

    This record covers issue #265, the contributor change PR #266, and maintainer follow-up #276. The merged #264 and #267 are relevant predecessors. #266’s decommission commit is 19910230a, and its rebalance commit is a995921e5. Status: Shipped in SILO …

    This record covers issue #265, the contributor change PR #266, and maintainer follow-up #276. The merged #264 and #267 are relevant predecessors. #266’s decommission commit is 19910230a, and its rebalance commit is a995921e5. Status: Shipped in SILO …

  • Tier Free Versions Are Internal Cleanup Records

    In Design

    DesignTieringLifecycleStorage PoolsCompatibility

    Tier Free Versions Are Internal Cleanup Records

    This record covers issue #263 and PR #264, updated after the #276 follow-up (0fc5a0b5), with the #264 merge recorded at 0cfca29c. The PR is three linked repairs, not three unrelated workarounds. Status: Shipped in SILO Server 20261109 (d998292387cc), …

    This record covers issue #263 and PR #264, updated after the #276 follow-up (0fc5a0b5), with the #264 merge recorded at 0cfca29c. The PR is three linked repairs, not three unrelated workarounds. Status: Shipped in SILO Server 20261109 (d998292387cc), …

  • Mixed EC Layouts and Migration Listing

    In Design

    DesignStorage PoolsErasure CodingMigration

    Mixed EC Layouts and Migration Listing

    This record covers issue #261 and PR #262, updated after the #276 follow-up (0fc5a0b5). The fix merged through maintainer PR #267 (a7310d59f); #262 was the superseded duplicate. Status: Shipped in SILO Server 20261109 (d998292387cc). Short answer The …

    This record covers issue #261 and PR #262, updated after the #276 follow-up (0fc5a0b5). The fix merged through maintainer PR #267 (a7310d59f); #262 was the superseded duplicate. Status: Shipped in SILO Server 20261109 (d998292387cc). Short answer The …

  • Pool Migration Integrity Review: #261, #263, and #265

    In Design

    DesignStorage PoolsLifecycleCompatibility

    Pool Migration Integrity Review: #261, #263, and #265

    This record reviews #261, #263, and #265, together with their fixes #262, #264, and #266. It also records the maintainer follow-up #276. It is a design and review record, not a release note. Status: Shipped in SILO Server 20261109 (d998292387cc). PRs …

    This record reviews #261, #263, and #265, together with their fixes #262, #264, and #266. It also records the maintainer follow-up #276. It is a design and review record, not a release note. Status: Shipped in SILO Server 20261109 (d998292387cc). PRs …

  • Multi-Pool Deletion: Preserve the Latest Copy on Failure

    In Design

    DesignS3StoragePerformance

    Multi-Pool Deletion: Preserve the Latest Copy on Failure

    Decision, October 24, 2026: merge the corrected PR #257 (shipped in Server 20261026). Commit aafe4f8886 fixes the multi-pool deletion failures reported in issue #256 and closes the in-flight failure window after preflight checks. The core invariant …

    Decision, October 24, 2026: merge the corrected PR #257 (shipped in Server 20261026). Commit aafe4f8886 fixes the multi-pool deletion failures reported in issue #256 and closes the in-flight failure window after preflight checks. The core invariant …

  • Overwrite Pool Affinity: Why #245 Was Not Adopted

    In Design

    DesignS3StoragePerformanceReview

    Overwrite Pool Affinity: Why #245 Was Not Adopted

    Decision, October 24, 2026: do not merge the tested pool-affinity changes (PR #245). The experiment addressed a real space-efficiency problem, but neither the broad policy nor the narrower unversioned-only policy achieved an acceptable performance …

    Decision, October 24, 2026: do not merge the tested pool-affinity changes (PR #245). The experiment addressed a real space-efficiency problem, but neither the broad policy nor the narrower unversioned-only policy achieved an acceptable performance …

  • FULL_OBJECT Checksum Replication: Preserve the Type at Upload Initiation

    In Design

    DesignReplicationS3Checksum

    FULL_OBJECT Checksum Replication: Preserve the Type at Upload Initiation

    Issue #254 reported a replication failure affecting multipart objects uploaded with a FULL_OBJECT CRC32 or CRC32C checksum: the object uploads and reads normally on the source, but the replication target rejects CompleteMultipartUpload with 400 …

    Issue #254 reported a replication failure affecting multipart objects uploaded with a FULL_OBJECT CRC32 or CRC32C checksum: the object uploads and reads normally on the source, but the replication target rejects CompleteMultipartUpload with 400 …