Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 239b3c11cd8c79f0945fdcd8dd6947c418cd4c46
      
https://github.com/WebKit/WebKit/commit/239b3c11cd8c79f0945fdcd8dd6947c418cd4c46
  Author: Sihui Liu <[email protected]>
  Date:   2025-02-27 (Thu, 27 Feb 2025)

  Changed paths:
    A 
LayoutTests/storage/indexeddb/resources/transaction-abort-revert-index-records.js
    A 
LayoutTests/storage/indexeddb/transaction-abort-revert-index-records-expected.txt
    A 
LayoutTests/storage/indexeddb/transaction-abort-revert-index-records-private-expected.txt
    A 
LayoutTests/storage/indexeddb/transaction-abort-revert-index-records-private.html
    A LayoutTests/storage/indexeddb/transaction-abort-revert-index-records.html
    M Source/WebCore/Modules/indexeddb/server/IndexValueEntry.cpp
    M Source/WebCore/Modules/indexeddb/server/IndexValueEntry.h
    M Source/WebCore/Modules/indexeddb/server/IndexValueStore.cpp
    M Source/WebCore/Modules/indexeddb/server/IndexValueStore.h
    M Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp
    M Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.h
    M Source/WebCore/Modules/indexeddb/server/MemoryIndex.cpp
    M Source/WebCore/Modules/indexeddb/server/MemoryIndex.h
    M Source/WebCore/Modules/indexeddb/server/MemoryObjectStore.cpp
    M Source/WebCore/Modules/indexeddb/server/MemoryObjectStore.h

  Log Message:
  -----------
  [IndexedDB] Cache in-memory index records for rollback
https://bugs.webkit.org/show_bug.cgi?id=288457
rdar://145541402

Reviewed by Brady Eidson.

When transaction aborts, index records modified during transaction need to be 
rolled back. In existing implementation of
in-memory backend, instead of rolling back index records to previous state, it 
rolls back the object store records, and
re-populate index records by generating index keys from original object store 
records. Index key generation requires to
deserialize SerializedScriptValue, which should be avoided on server side. This 
patch makes MemoryIndex cache the
original state of index records that are modified during transaction, so that 
these records can directly roll back to
previous state when transaction aborts.

Test: LayoutTests/storage/indexeddb/transaction-abort-revert-index-records.html
      
LayoutTests/storage/indexeddb/transaction-abort-revert-index-records-private.html

* 
LayoutTests/storage/indexeddb/resources/transaction-abort-revert-index-records.js:
 Added.
(async getAllKeys):
(async getIndexCount):
(async validateIndexRecords):
(async validateAllIndexRecords):
(prepareDatabase):
(onDatabaseOpen):
(abortTransaction):
(onTransactionAbort):
* 
LayoutTests/storage/indexeddb/transaction-abort-revert-index-records-expected.txt:
 Added.
* 
LayoutTests/storage/indexeddb/transaction-abort-revert-index-records-private-expected.txt:
 Added.
* 
LayoutTests/storage/indexeddb/transaction-abort-revert-index-records-private.html:
 Added.
* LayoutTests/storage/indexeddb/transaction-abort-revert-index-records.html: 
Added.
* Source/WebCore/Modules/indexeddb/server/IndexValueEntry.cpp:
(WebCore::IDBServer::IndexValueEntry::contains):
(WebCore::IDBServer::IndexValueEntry::keys const):
* Source/WebCore/Modules/indexeddb/server/IndexValueEntry.h:
* Source/WebCore/Modules/indexeddb/server/IndexValueStore.cpp:
(WebCore::IDBServer::IndexValueStore::valueKeys const):
(WebCore::IDBServer::IndexValueStore::allKeys const):
(WebCore::IDBServer::IndexValueStore::removeRecord):
(WebCore::IDBServer::IndexValueStore::findKeysWithValueKey):
* Source/WebCore/Modules/indexeddb/server/IndexValueStore.h:
* Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
(WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
(WebCore::IDBServer::MemoryBackingStoreTransaction::indexCleared): Deleted.
* Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
* Source/WebCore/Modules/indexeddb/server/MemoryIndex.cpp:
(WebCore::IDBServer::MemoryIndex::objectStoreCleared):
(WebCore::IDBServer::MemoryIndex::putIndexKey):
(WebCore::IDBServer::MemoryIndex::removeRecord):
(WebCore::IDBServer::MemoryIndex::removeEntriesWithValueKey):
(WebCore::IDBServer::MemoryIndex::addIndexRecord):
(WebCore::IDBServer::MemoryIndex::removeIndexRecord):
(WebCore::IDBServer::MemoryIndex::writeTransactionStarted):
(WebCore::IDBServer::MemoryIndex::writeTransactionFinished):
(WebCore::IDBServer::MemoryIndex::transactionAborted):
(WebCore::IDBServer::MemoryIndex::clearIndexValueStore): Deleted.
(WebCore::IDBServer::MemoryIndex::replaceIndexValueStore): Deleted.
* Source/WebCore/Modules/indexeddb/server/MemoryIndex.h:
* Source/WebCore/Modules/indexeddb/server/MemoryObjectStore.cpp:
(WebCore::IDBServer::MemoryObjectStore::writeTransactionStarted):
(WebCore::IDBServer::MemoryObjectStore::transactionAborted):
(WebCore::IDBServer::MemoryObjectStore::writeTransactionFinished):
(WebCore::IDBServer::MemoryObjectStore::addIndex):
(WebCore::IDBServer::MemoryObjectStore::maybeRestoreDeletedIndex):
(WebCore::IDBServer::MemoryObjectStore::addRecordWithoutUpdatingIndexes):
(WebCore::IDBServer::MemoryObjectStore::populateIndexWithExistingRecords): 
Deleted.
* Source/WebCore/Modules/indexeddb/server/MemoryObjectStore.h:

Canonical link: https://commits.webkit.org/291234@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to