On Tue, Apr 19, 2011 at 6:41 PM, Eliot Graff <eliot.gr...@microsoft.com> wrote:
> Thanks for the feedback. Moving forward, I will track changes and resolution 
> of these suggestions in bug 9379 [1].

ok

> Appreciate the time you've spent on this.

here's next next part, note that i drafted it a while ago and am just
sending it to flush my mailbox.

>  http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html

part two...

> The transaction mode determines both which operations are allowed
> to be performed during the transaction, as well whether two transactions
> can run concurrently or not.


The transaction mode controls whether or not multiple transactions can
run currently and
which operations may be performed during the transaction.

> Which operations are allowed be be performed are

The allowed operations are

> defined in detail below,
> but in general transactions opened in READ_ONLY mode are only allowed
> to perform reading operations which does not change data.

s/reading //
s/does/do/

-- this defines read, and operations are plural.. if you really want
to define it perhaps stick some quotes around reading?

> READ_WRITE transactions are allowed to

> perform reading and writing transactions to existing object stores,

s/perform reading and writing/read from and write/

> where as VERSION_CHANGE transactions are allowed to perform any operations, 
> including ones that delete and create object stores and indexes.

> As long as the VERSION_CHANGE transaction, the implementation

s/transaction/transaction is pending/
?

> MUST wait with starting any other transactions against the same

s/with/before/

> database until the VERSION_CHANGE transaction is finished.

> There are a number of ways that an implementation ensure this.

s/ensure/ensures/

> It can prevent READ_WRITE transactions whose scope overlap

s/prevent/stall/
?
(you don't prevent them from ever existing, you at best prevent them
from starting which seems more like stalling or delaying)

s/overlap/overlaps/

> the scope of the READ_ONLY transaction from starting until the
> READ_ONLY transaction is finished.

s/is finished/finishes/

> Or it can allow the READ_ONLY transaction to see a snapshot of the
> contents of the object stores which is taken when the READ_ONLY
> transaction is started.

s/is //

> Similarly, implementations MUST ensure that a READ_WRITE transaction is only 
> affected by changes to object stores that are made using the transaction 
> itself. I.e. the implementation MUST ensure that another transaction does not 
> modify the contents of object stores in the READ_WRITE transactions scope.

I don't think starting a sentence with "i.e." is a good idea...

s/transactions/transaction's/

> The implementation MUST also ensure that if the READ_WRITE transaction
> completes successfully, that the changes written to object stores using the

s/, that / /

> transaction can be committed to the database without merge conflicts.

i find "can be" here problematic, i know it's only meaningful with the
next sentence, but i don't think it works well.

> An implementation MUST NOT abort a transaction due to merge conflicts.


> An implementation MUST NOT start any transaction until all other
> READ_WRITE transactions with overlapping scope have completed.

doesn't this prevent merge conflicts?

> When multiple transactions are eligible to be started, older transactions
> should be started first.

should 'should' be written as an RFC word?

> User agents MUST ensure a reasonable level of fairness across transactions to 
> prevent starvation.
> For example if multiple READ_ONLY transaction are started one after another 
> the implementation MUST ensure that that doesn't indefinitely prevent a 
> pending READ_WRITE transaction from starting.

This MUST doesn't seem testable, and sticking a MUST into an example
seems wrong.

> Transaction objects implement

Each transaction object will implement either

> the IDBTransaction or the IDBTransactionSync

> interfaces.

interface.

-- this is a style change and applies to other objects in this
document. I'm assuming that an object only ever implements one of the
two interfaces and thus <interface> should be singular and you should
spell out that it's exclusive. If it isn't, I'd like to know how/why.

> Every request also has a result and an errorCode, neither of which are 
> accessible until the done flag is set to true.

does 'are accessible' mean "will throw an exception if poked"?

> Finally, requests have a request transaction. When a request is created, it 
> is always placed against a transaction using either the steps to a 
> asynchronously execute a request or the steps to a synchronously execute a 
> request.

It would be really helpful if things like <steps to whatever> were links

> This sets the request transaction to be that request.

s/This sets/Those steps set/

> The only exceptions to this are the request returned from a IDBFactory.open 
> call and the request returned from a IDBDatabase.setVersion call, which 
> create requests which have a null request transaction.

"exceptions" sometimes is an English word and sometimes it's a code
term (something which can be thrown). I can't tell here which is
intended, if the latter it should be used with 'thrown', for the
former I'd suggest avoiding the word entirely.

> A key range MAY be lower-bounded or upper-bounded if there is a value that 
> is, respectively, smaller than or larger than all its elements.

"larger" seems odd, is there something wrong with using "greater" (and
thus "less")?

> A key range is said to be bounded if it is both lower- and upper-bounded and 
> unbounded otherwise.

s/ and unbounded otherwise/; otherwise it is unbounded/
?

> A key range MAY be open, i.e., not including its endpoints or

s/endpoints/endpoints,/

> closed, i.e., including its endpoints.

>    Either ... and either of the bounds are open.

s/are/is/

> The cursor has a source indicating which index or object store whose records 
> it is iterating.

s/which/the/
s/object/the object/

> A cursor maintains a position over this series, which moves in a direction 
> that is either monotonically increasing or decreasing order of the record 
> keys.

"order" feels out of place here

> If the source of a cursor is a object store,

s/a object/an object/

> the effective key of the cursor is the cursors position.

s/cursors/cursor's/

> If the source of a cursor is a index,

s/a index/an index/

> the effective object store of the cursor is that index's referenced object 
> store and the effective key is the cursors object store position.

s/cursors/cursor's/

> For cursors iterating indexes the situation is a little bit more complicated 
> since multiple records can have the same key and are therefor also sorted by 
> value.

s/therefor/therefore/

> When iterating indexes the cursor's also has a object store position,

s/cursor's/cursor/
s/a object/an object/

> which indicates the value of the previously found record in the index.

> Both position and the object store position is used when finding the next 
> appropriate record.

s/is/are/

>     A mutation operation in the transaction failed
> due to a because a constraint was not satisfied.

s/due to a //

> For example, an object such as an object store or index already exists and

> a new one was being attempted to be created.

a request attempted to create a new one.

> const unsigned short DATA_ERR = 5
>    Data provided to an operation does not meet requirements.

this seems like an odd error name given its description

>    A operation

An operation was

> called on an object on which it is not allowed or at a time when it is not 
> allowed.
> The TRANSACTION_INACTIVE_ERR and READ_ONLY_ERR errors are more specific 
> variants of this error.

Does that mean that they should be dispatched instead when applicable?
Or can the UA choose to always use this one?

Reply via email to