Kirill Sizov created IGNITE-20379: --------------------------------------
Summary: Concurrency issues with write intent tracking Key: IGNITE-20379 URL: https://issues.apache.org/jira/browse/IGNITE-20379 Project: Ignite Issue Type: Bug Reporter: Kirill Sizov There are a few concurrency issues with the write intent tracking code 1. See {{PendingRows}} class. The value is a TreeSet, which is not a concurrent collection. Thus it's not safe to do the read this way: {code} public Set<RowId> getPendingRowIds(UUID txId) { return txsPendingRowIds.getOrDefault(txId, EMPTY_SET); } {code} 2. See {{StorageUpdateHandler.handleTransactionCleanup}}. We first get a collection of rows for a specific transaction from the map, then process the rows in the storage, then remove the whole transaction entry from the map: {code} public void handleTransactionCleanup(UUID txId, boolean commit, @Nullable HybridTimestamp commitTimestamp) { Set<RowId> pendingRowIds = pendingRows.getPendingRowIds(txId); handleTransactionCleanup(pendingRowIds, commit, commitTimestamp, () -> pendingRows.removePendingRowIds(txId)); } {code} If a parallel thread adds more write intents to the map, we'll silently lose them. -- This message was sent by Atlassian Jira (v8.20.10#820010)