Siyao Meng created HDDS-17270:
---------------------------------

             Summary: Terminate OM when snapshot purge fails after partially 
updating the snapshot cache and chain
                 Key: HDDS-17270
                 URL: https://issues.apache.org/jira/browse/HDDS-17270
             Project: Apache Ozone
          Issue Type: Bug
          Components: Snapshot
            Reporter: Siyao Meng


h3. Problem
{{OMSnapshotPurgeRequest#validateAndUpdateCache}} purges the snapshots in a 
request one at a time. For each one it updates the snapshotInfoTable cache 
(deep clean flags and previous snapshot IDs of the next snapshots, plus a 
tombstone for the purged snapshot) and removes it from the in-memory 
{{SnapshotChainManager}}. If a later snapshot in the same request throws, the 
request returns an error response and none of these changes are rolled back, 
while the DB batch is skipped because the response is not OK (HDDS-11452).

Most failures in that loop already terminate OM: a plain {{IOException}} maps 
to {{INTERNAL_ERROR}} or {{METADATA_ERROR}}, and 
{{OzoneManagerStateMachine#processResponse}} terminates OM on those, so the 
partial in-memory state is discarded. The exception is {{OMException}} with 
{{FILE_NOT_FOUND}} from {{SnapshotUtils#getNextSnapshot}}, thrown when the 
snapshot chain has a next snapshot that is missing from snapshotInfoTable. That 
status is not critical, so OM keeps running with a cache and chain that no 
longer match the DB. A later write of a successor SnapshotInfo can then persist 
a previous snapshot ID that skips a snapshot still present in the DB.

This needs a purge request with more than one snapshot and a snapshot chain 
that already disagrees with snapshotInfoTable. With a single snapshot, both 
next snapshot lookups run before any change.

h3. Fix
Once the request has started changing the cache or snapshot chain, report an 
{{OMException}} as {{INTERNAL_ERROR}} so that OM terminates, consistent with 
how every other failure at that point is handled. On restart the chain is 
rebuilt from snapshotInfoTable.

There is no protobuf, DB layout or upgrade change. The DB writes are the same 
as today in every case (a failed purge writes nothing), so OMs of different 
versions stay consistent. This does not make the request atomic; HDDS-11452 
stays open for staging or rolling back the changes so that OM can keep running.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to