RESOLVED FIXED 46883
IDBDatabase::createObjectStore/removeObjectStore and IDBObjectStore::createIndex/removeIndex should be synchronous.
https://bugs.webkit.org/show_bug.cgi?id=46883
Summary IDBDatabase::createObjectStore/removeObjectStore and IDBObjectStore::createIn...
Andrei Popescu
Reported 2010-09-30 02:18:52 PDT
IDBDatabase::createObjectStore/removeObjectStore and IDBObjectStore::createIndex/removeIndex should be synchronous.
Attachments
Patch (41.69 KB, patch)
2010-09-30 02:41 PDT, Andrei Popescu
no flags
Patch (42.57 KB, patch)
2010-09-30 03:21 PDT, Andrei Popescu
no flags
Patch (93.64 KB, patch)
2010-10-01 12:09 PDT, Andrei Popescu
no flags
Patch (94.39 KB, patch)
2010-10-04 16:37 PDT, Andrei Popescu
no flags
Patch (94.85 KB, patch)
2010-10-04 18:44 PDT, Andrei Popescu
jorlow: review+
Andrei Popescu
Comment 1 2010-09-30 02:41:24 PDT
WebKit Review Bot
Comment 2 2010-09-30 03:11:04 PDT
Andrei Popescu
Comment 3 2010-09-30 03:21:27 PDT
Jeremy Orlow
Comment 4 2010-09-30 03:32:57 PDT
Comment on attachment 69321 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=69321&action=review > WebCore/storage/IDBDatabase.cpp:68 > + m_backend->removeObjectStore(name); this needs the transaction > WebCore/storage/IDBDatabaseBackendImpl.cpp:172 > +void IDBDatabaseBackendImpl::removeObjectStore(const String& name) need the transaction passed in > WebCore/storage/IDBObjectStoreBackendImpl.cpp:92 > + , m_id(0), maybe make an invalid id constant?
Jeremy Orlow
Comment 5 2010-09-30 03:33:05 PDT
couple comments
Jeremy Orlow
Comment 6 2010-09-30 03:40:35 PDT
Comment on attachment 69323 [details] Patch besides previous comment, lgtm
Andrei Popescu
Comment 7 2010-10-01 12:09:02 PDT
Andrei Popescu
Comment 8 2010-10-01 12:11:20 PDT
I rebased my patch after http://trac.webkit.org/changeset/68795 and the conflict resolving was non-trivial. Also modified the layout tests and updated the expected tests output. I would therefore be grateful if I could get another review. Thanks!
Jeremy Orlow
Comment 9 2010-10-04 11:16:43 PDT
Comment on attachment 69498 [details] Patch close View in context: https://bugs.webkit.org/attachment.cgi?id=69498&action=review > LayoutTests/storage/indexeddb/objectstore-cursor.html:67 > + if (window.nextToAdd > 0) hu? > LayoutTests/storage/indexeddb/resources/shared.js:82 > + onfinished(); ugh! I'm so stupid...I just made this change...should have realized it's worthless (and not made the change in my last patch). Maybe put in a FIXME to make this function sync and not do a callback like this. > WebCore/storage/IDBDatabaseBackendImpl.cpp:191 > + RefPtr<IDBTransactionBackendInterface> rpTransaction = transaction; transactionPtr...here and elsewhere > WebCore/storage/IDBIndexBackendImpl.cpp:55 > + , m_id(0) use a constant instead of 0 maybe? > WebCore/storage/IDBIndexBackendImpl.h:52 > + int64_t id() const { return m_id; } ditto to all comments below > WebCore/storage/IDBObjectStoreBackendImpl.cpp:335 > + transaction->didCompleteTaskEvents(); Wait...why do we need this? Isn't this implicit whenever a task's events finish? > WebCore/storage/IDBObjectStoreBackendImpl.h:55 > int64_t id() const { return m_id; } Assert the id is valid maybe? ...here and everywhere that id is used? Please put in a comment here describing the subtleties of this..and how stuff using id should only be queued asyncly. We should put a fixme or actual code into the transaction coordinator to make sure that it blocks any transactions on this object store on this current transaction finishing.... > WebCore/storage/IDBTransactionBackendImpl.cpp:146 > +void IDBTransactionBackendImpl::taskEventTimerFired(Timer<IDBTransactionBackendImpl>*) Hm...this still seems a bit fragile...but I guess it's good enough for now.
Andrei Popescu
Comment 10 2010-10-04 16:24:54 PDT
(In reply to comment #9) > (From update of attachment 69498 [details]) > > close > > > View in context: https://bugs.webkit.org/attachment.cgi?id=69498&action=review > > > LayoutTests/storage/indexeddb/objectstore-cursor.html:67 > > + if (window.nextToAdd > 0) > > hu? > It's the same pattern used elsewhere for loading data into an object store. > > LayoutTests/storage/indexeddb/resources/shared.js:82 > > + onfinished(); > > ugh! I'm so stupid...I just made this change...should have realized it's worthless (and not made the change in my last patch). Maybe put in a FIXME to make this function sync and not do a callback like this. > Added. > > WebCore/storage/IDBDatabaseBackendImpl.cpp:191 > > + RefPtr<IDBTransactionBackendInterface> rpTransaction = transaction; > > transactionPtr...here and elsewhere > > > WebCore/storage/IDBIndexBackendImpl.cpp:55 > > + , m_id(0) > > use a constant instead of 0 maybe? > > > WebCore/storage/IDBIndexBackendImpl.h:52 > > + int64_t id() const { return m_id; } > > ditto to all comments below > You mean above? Done. > > WebCore/storage/IDBObjectStoreBackendImpl.cpp:335 > > + transaction->didCompleteTaskEvents(); > > Wait...why do we need this? Isn't this implicit whenever a task's events finish? > It isn't. These tasks don't have any events. > > WebCore/storage/IDBObjectStoreBackendImpl.h:55 > > int64_t id() const { return m_id; } > > Assert the id is valid maybe? ...here and everywhere that id is used? > Asserting. > Please put in a comment here describing the subtleties of this..and how stuff using id should only be queued asyncly. > > We should put a fixme or actual code into the transaction coordinator to make sure that it blocks any transactions on this object store on this current transaction finishing.... > Yep, that should happen once we have a thread per transaction and we will implement locking. The object store will be locked until the setVersion transaction commits, thereby guaranteeing that no other transaction can use its backend while it has the invalid ID. > > WebCore/storage/IDBTransactionBackendImpl.cpp:146 > > +void IDBTransactionBackendImpl::taskEventTimerFired(Timer<IDBTransactionBackendImpl>*) > > Hm...this still seems a bit fragile...but I guess it's good enough for now.
Andrei Popescu
Comment 11 2010-10-04 16:37:33 PDT
Andrei Popescu
Comment 12 2010-10-04 18:44:23 PDT
Jeremy Orlow
Comment 13 2010-10-04 19:44:24 PDT
Comment on attachment 69728 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=69728&action=review > WebCore/storage/IDBIndexBackendImpl.h:54 > + ASSERT(m_id != InvalidId); ditto > WebCore/storage/IDBObjectStoreBackendImpl.h:60 > + void setId(int64_t id) { m_id = id; } assert it's not valid to begin with? also, i wonder if these should be un-inlined r=me
Jeremy Orlow
Comment 14 2010-10-05 09:55:11 PDT
Comment on attachment 69728 [details] Patch sitll looks fine
Andrei Popescu
Comment 15 2010-10-05 10:11:32 PDT
Committed r69121.
Note You need to log in before you can comment on or make changes to this bug.