[
https://issues.apache.org/jira/browse/HDDS-17174?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chu Cheng Li reassigned HDDS-17174:
-----------------------------------
Assignee: Chu Cheng Li
> KeyDeletingService should wait for the double buffer flush after purging keys
> -----------------------------------------------------------------------------
>
> Key: HDDS-17174
> URL: https://issues.apache.org/jira/browse/HDDS-17174
> Project: Apache Ozone
> Issue Type: Improvement
> Reporter: Chu Cheng Li
> Assignee: Chu Cheng Li
> Priority: Major
>
> *Problem*
> {{KeyDeletingService}} submits {{PurgeKeys}} requests through Ratis. A
> request returns when OM applies it. At that time, the double buffer has not
> always written the purge to RocksDB.
> The purge request does not add cache entries for {{deletedTable}}. Thus, the
> purged keys stay in {{deletedTable}} until the flush.
> The service updates {{deletedKeyCount}} and its deletion metrics when the
> requests return.
> *Effect*
> * A reader that waits for {{deletedKeyCount}} and then reads {{deletedTable}}
> can still find purged keys.
> * {{TestKeyDeletingService}} failed for this reason (HDDS-17077). The fix for
> HDDS-17077 added {{awaitDoubleBufferFlush}} calls to the test.
> * The next run checks {{isPreviousPurgeTransactionFlushed}}. If the last
> purge is not flushed, the run skips the active object store.
> *Fix*
> * {{OzoneManagerDoubleBuffer}} records the index of the last transaction that
> it adds.
> * The new method {{OzoneManagerStateMachine.awaitAppliedTransactionsFlushed}}
> waits until the double buffer flushes this transaction. If the flush is
> already done, the method returns immediately.
> * {{KeyDeletingService.processKeyDeletes}} calls this method after it submits
> the purge requests. Thus, the counts that the service returns agree with the
> DB.
> * {{TestKeyDeletingService}} does not wait for the flush after the service
> runs anymore. This removes the two {{awaitDoubleBufferFlush}} calls that
> HDDS-17077 added.
> * {{DirectoryDeletingService}} and {{SnapshotDeletingService}} do not change.
> They submit requests while they keep snapshot DB handles open. The flush
> thread can need a write lock on the same snapshot lock stripe. Thus, a wait
> for the flush can deadlock until HDDS-16164 is fixed.
> * {{isPreviousPurgeTransactionFlushed}} does not change. After a leader
> change, the new leader can still have purges from the old leader that are not
> flushed.
> Related: HDDS-17077.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]