Bug 152397 - Modern IDB: Refactor open/delete requests to exist in the same queue
Summary: Modern IDB: Refactor open/delete requests to exist in the same queue
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebCore Misc. (show other bugs)
Version: Safari 9
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Brady Eidson
URL:
Keywords:
Depends on: 152415
Blocks: 149117
  Show dependency treegraph
 
Reported: 2015-12-17 14:35 PST by Brady Eidson
Modified: 2015-12-21 10:01 PST (History)
4 users (show)

See Also:


Attachments
Patch v1 (15.30 KB, patch)
2015-12-17 14:37 PST, Brady Eidson
achristensen: review+
Details | Formatted Diff | Diff
Patch for landing (15.35 KB, patch)
2015-12-17 22:17 PST, Brady Eidson
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Brady Eidson 2015-12-17 14:35:13 PST
Modern IDB: Refactor open/delete requests to exist in the same queue

This is a straight "no behavior change" patch, where all existing tests continue to pass.

But it is necessary to fix tests currently skipped.
Comment 1 Brady Eidson 2015-12-17 14:37:46 PST
Created attachment 267583 [details]
Patch v1
Comment 2 Brady Eidson 2015-12-17 15:30:38 PST
https://trac.webkit.org/changeset/194241
Comment 3 Alexey Proskuryakov 2015-12-17 18:54:05 PST
This appears to have made multiple tests crash under GuardMalloc. Will roll out.

CRASHING TEST: storage/indexeddb/delete-in-upgradeneeded-close-in-open-success.html
This process is running with libgmalloc.dylib (GuardMalloc) which may have forced the crash due to a memory access error.
 

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.WebCore             	0x000000010ba998f3 WebCore::IDBServer::UniqueIDBDatabase::operationAndTransactionTimerFired() + 35
1   com.apple.WebCore             	0x000000010aa84c30 WebCore::ThreadTimers::sharedTimerFiredInternal() + 176
2   com.apple.WebCore             	0x000000010aa84b6f WebCore::timerFired(__CFRunLoopTimer*, void*) + 31
3   com.apple.CoreFoundation      	0x00007fff87a6a414 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
Comment 4 WebKit Commit Bot 2015-12-17 18:59:37 PST
Re-opened since this is blocked by bug 152415
Comment 5 Brady Eidson 2015-12-17 20:57:15 PST
(In reply to comment #3)
> This appears to have made multiple tests crash under GuardMalloc. Will roll
> out.

Since standard practice for individual patch authors has never including running tests under GuardMalloc, and since we don't have GuardMalloc EWS, and since GuardMalloc bots aren't even on the bot watcher's dashboard, I object to the policy of rolling out without giving patch authors a reasonable amount of time to take a look.
Comment 6 Brady Eidson 2015-12-17 21:00:21 PST
(In reply to comment #5)
> (In reply to comment #3)
> > This appears to have made multiple tests crash under GuardMalloc. Will roll
> > out.
> 
> Since standard practice for individual patch authors has never including
> running tests under GuardMalloc, and since we don't have GuardMalloc EWS,
> and since GuardMalloc bots aren't even on the bot watcher's dashboard, I
> object to the policy of rolling out without giving patch authors a
> reasonable amount of time to take a look.

Especially since this also required the compound rollout of a followup patch. (https://bugs.webkit.org/show_bug.cgi?id=152405)

*sigh*
Comment 7 Brady Eidson 2015-12-17 22:17:35 PST
Created attachment 267610 [details]
Patch for landing
Comment 8 Brady Eidson 2015-12-17 22:19:04 PST
(In reply to comment #7)
> Created attachment 267610 [details]
> Patch for landing

For posterity:

The GuardMalloc failure was your typical use-after-free, in this case the UniqueIDBDatabase doing something to cause itself to get deleted while in the middle of handling a timer callback.

There's a few ways to have solved this, and I went with our typical RefPtr<> protector(this) pattern inside the timer callback.

This can be revisited at any future date.
Comment 9 Alexey Proskuryakov 2015-12-17 22:57:06 PST
> Since standard practice for individual patch authors has never including running tests under GuardMalloc

Rolling out is not a punishment, it has nothing to do with how hard or was it was to avoid the problem. 

This is something that is done for the benefit of others, as flakiness costs everyone a lot of time - from EWS being slower to analyzing induced memory corruption crashes to fluctuations on performance metrics. 

As we add more styles of testing, I expect that we will be only getting more quick to roll back.
Comment 10 Alexey Proskuryakov 2015-12-17 22:58:29 PST
Debug EWS is still orange - there is a streams crash, and IndexedDB flakiness too.
Comment 11 WebKit Commit Bot 2015-12-17 23:06:38 PST
Comment on attachment 267610 [details]
Patch for landing

Clearing flags on attachment: 267610

Committed r194263: <http://trac.webkit.org/changeset/194263>
Comment 12 WebKit Commit Bot 2015-12-17 23:06:41 PST
All reviewed patches have been landed.  Closing bug.
Comment 13 Brady Eidson 2015-12-18 08:54:50 PST
(In reply to comment #9)
> > Since standard practice for individual patch authors has never including running tests under GuardMalloc
> 
> Rolling out is not a punishment, it has nothing to do with how hard or was
> it was to avoid the problem. 

I didn't claim it was a punishment.

Last night I could've either:
1 - Made a quick fix for the GuardMalloc issues and then get 1 or 2 more bug fixes done
2 - Update past the rollout, build, get a new patch ready, submit it, then have no time to work on addition bug fixes as planned.

I did #2, meaning new bug fixes were not done last night.

> 
> This is something that is done for the benefit of others, as flakiness costs
> everyone a lot of time - from EWS being slower to analyzing induced memory
> corruption crashes to fluctuations on performance metrics. 

I'd wager during the evenings when the pace of work drops off, it would've been acceptable to ping for a quick fix instead of insta-rolling out.
 
> As we add more styles of testing, I expect that we will be only getting more
> quick to roll back.

I've been blowing this horn for years - EWS in its current state is harmful. See: The automation paradox.

EWS is meant to prevent bad patches from going in, but then after patches go in we have a WHOLE CRAZY AMOUNT of additional reasons why a patch can be rolled out.

As long as EWS doesn't prevent patches from going in that then might be instantly rolled out, that's a sign that our infrastructure is simply broken.
Comment 14 Alexey Proskuryakov 2015-12-19 20:58:07 PST
> it would've been acceptable to ping for a quick fix

In fact, I pinged you on IRC, and you did not respond.

I think that what you are asking for is a much higher level of service than is feasible late in the night - I generally only have a few minutes, so when I ping and don't get a fix, I may not be able to roll out later.

> 1 - Made a quick fix for the GuardMalloc issues and then get 1 or 2 more bug fixes done

Generally, making a fix while the tree is in a bad state is particularly advisable - it's too easy to do a less than a great job of fixing.
Comment 15 Alexey Proskuryakov 2015-12-21 10:01:22 PST
I meant "is NOT particularly advisable".