{
  "slug": "lustre-hsm-release",
  "term": "Lustre HSM release",
  "aliases": [
    "lfs hsm_release"
  ],
  "definition": "Lustre HSM release removes a file's local data residency while retaining its filesystem identity and dependence on an archived copy.",
  "note": "In the reviewed ordinary release path, valid HSM metadata and ARCHIVED are required, while DIRTY, NORELEASE or LOST reject the flag check. NOARCHIVE is a separate policy flag and does not itself reject that check. Passing this preliminary predicate does not establish complete release success. [lustre-hsm-server] [lustre-hsm-flags]\n\nThe client obtains a release lease and data version. The server rereads HSM metadata and, for a file not already released, rejects a mismatch between the supplied and archived versions. A broken lease also prevents the operation. This is the ordinary path, not the separate PCC-attach branch. [lustre-hsm-client] [lustre-hsm-server]\n\nRelease eligibility is not proof that backend bytes remain retrievable. Preserve the archive mapping and recovery dependencies, then test the intended restore. Changing state flags is not data repair. [lustre-hsm-state] [lustre-hsm-completion]\n\nIn this pinned server function, a rejected flag predicate and a data-version mismatch both return -EPERM. A missing or broken lease returns -ESTALE, and open-semaphore contention returns -EBUSY. These branches are not a complete command-line error map: an error name alone cannot identify the failed safeguard. [lustre-hsm-server]",
  "status": "shipping",
  "related": [
    "lustre-hsm",
    "cold-archive",
    "backup",
    "restore-test"
  ],
  "advantages": [],
  "limitations": [],
  "citations": [
    {
      "id": "lustre-hsm-state",
      "title": "Lustre v2_17_0: mdt_hsm_state_get and mdt_hsm_state_set",
      "url": "https://github.com/lustre/lustre-release/blob/4b0407a48e9e5b7f17877e8868080e9f40c238c6/lustre/mdt/mdt_hsm.c",
      "accessed": "2026-11-04"
    },
    {
      "id": "lustre-hsm-server",
      "title": "Lustre v2_17_0: mdt_hsm_release_allow and ordinary mdt_hsm_release path",
      "url": "https://github.com/lustre/lustre-release/blob/4b0407a48e9e5b7f17877e8868080e9f40c238c6/lustre/mdt/mdt_open.c",
      "accessed": "2026-11-04"
    },
    {
      "id": "lustre-hsm-client",
      "title": "Lustre v2_17_0: ll_data_version and ll_hsm_release",
      "url": "https://github.com/lustre/lustre-release/blob/4b0407a48e9e5b7f17877e8868080e9f40c238c6/lustre/llite/file.c",
      "accessed": "2026-11-04"
    },
    {
      "id": "lustre-hsm-completion",
      "title": "Lustre v2_17_0: archive completion and restore/remove compatibility checks",
      "url": "https://github.com/lustre/lustre-release/blob/4b0407a48e9e5b7f17877e8868080e9f40c238c6/lustre/mdt/mdt_coordinator.c",
      "accessed": "2026-11-04"
    },
    {
      "id": "lustre-hsm-flags",
      "title": "Lustre v2_17_0: enum hsm_states and user/status masks",
      "url": "https://github.com/lustre/lustre-release/blob/4b0407a48e9e5b7f17877e8868080e9f40c238c6/lustre/include/uapi/linux/lustre/lustre_user.h",
      "accessed": "2026-11-04"
    }
  ],
  "updated": "2026-11-04",
  "provenance": [
    "Pinned Lustre v2_17_0 source review, commit 4b0407a48e9e5b7f17877e8868080e9f40c238c6; no running-cluster or backend recovery test.",
    "Replayable source ledger and isolated flag-helper check: https://hesela.dev/research/lustre-hsm/README.md"
  ],
  "supersedes": [],
  "supersededBy": []
}
