[Webkit-unassigned] [Bug 27967] Decouple the code that deals with the main DB and quota management from the rest of the DB code

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Fri Aug 14 15:02:30 PDT 2009


https://bugs.webkit.org/show_bug.cgi?id=27967


Dumitru Daniliuc <dumi at chromium.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #34617|review?                     |
               Flag|                            |
  Attachment #34617|0                           |1
        is obsolete|                            |
  Attachment #34873|                            |review?
               Flag|                            |




--- Comment #12 from Dumitru Daniliuc <dumi at chromium.org>  2009-08-14 15:02:27 PDT ---
Created an attachment (id=34873)
 --> (https://bugs.webkit.org/attachment.cgi?id=34873)
patch

(In reply to comment #11)
> 187             'storage/SQLTransactionClientImpl.cpp',
> Some of the make files make reference to SQLTransactionClientImpl.cpp, did you
> mean SQLTransactionClient.cpp here?

yes, fixed.

> 330     m_transactionClient->databaseSizeChanged(m_database.get());
> So this method is invoked on the background db thread. 
> 
> 392     m_shouldRetryCurrentStatement =
> m_transactionClient->databaseExceedsQuota(...);
> And this one on the 'apartment' thread of the Database object (the main thread)
> 
> 426     m_transactionClient->databaseChanged(m_database.get());
> And this one on the background thread
> 
> I would appreciate some indication of the threading usage in the
> SQLTransactionListener source files. To figure out how it was used, i had to
> track down the callsites. Not sure how to best indicate the threading rules...
> either doc comments in the .h file, or runtime asserts in the .cpp file?

added ASSERTs in the .cpp file. i don't think we should make assumptions for
all ports.

> 38     // A "listener" interface to the SQLTransaction class. Allows
>  39     // SQLTransaction to notify interested parties when certain things are
>  40     // happening in a transaction.
>  41     class SQLTransactionClient {
>  42     public:
>  43         // Notifies everybody that the database has changed. Called at the
> end
>  44         // end of every successful transaction.
>  45         void databaseChanged(Database*);
>  46 
>  47         // Notifies everybody that the size of the database file might have
> changed.
>  48         // Called after executing each statement in a transaction
>  49         void databaseSizeChanged(Database*);
>  50 
>  51         // Notifies everybody that the size of the database file exceeds
> its quota.
>  52         // If this method returns true, the current statement in the
> transaction is
>  53         // retried. Otherwise, the transaction is rolled back.
>  54         //
>  55         // This method should return true if and only if the quota for this
> database
>  56         // file was increased (by the user, for example) since calling this
> method.
>  57         bool databaseExceedsQuota(Database*);
>  58     };
>  59 }
> 
> After reading your doc comments, maybe these methods could be renamed for
> clarity.
> 
> void didCommitTransaction(...);  // for databaseChanged
> void didExecuteStatement(...);  // for databaseSizeChanged
> bool didExceedQuota(...);  // for databaseExceedsQuota

changed.

> And would it make sense to have the SQLTransaction* be the parameter since it
> is a transaction listener, the caller can get the Database* from the accessor
> on the transaction object (i think).

done. you're right: SQLTransactionCoordinator should work with SQLTransactions.

> Also, the new class (TransactionCoordinator) you just added is also a
> transaction listener of sorts. Should these two classes be merged?

i think we will eventually merge them. for now though, i think it's better to
introduce SQLTransactionClient as a separate piece of code (to make it easier
to review and understand).

> The TransactionCoordinator must be owned by the DBThread to properly serve its
> purpose. In this patch, you have the new 'listener' object being owned by the
> Database object, but i think it could just as easily be owned by the DBThread
> and serve its purpose.
> 
> Wdyt?

done.

> 60     RefPtr<SecurityOrigin> origin = database->securityOriginCopy();
> 
> Making a copy of a refcounted object looks odd? Is it mutable? Is there no
> database->securityOrigin() accessor?

this seems to be the only accessor for getting the origin from a Database
object. we could probably introduce a new accessor (or replace the existing
one), but i wouldn't want to do this before talking to the authors of this code
and understanding why they had a copying accessor here in the first place.

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the webkit-unassigned mailing list