On Feb 26, 2014, at 10:35 AM, Joshua Bell <[email protected]> wrote:

> While looking at a Chrome bug [1], I reviewed the Indexed DB draft, section 
> 3.3.1 [2] Opening a database:
> 
> "These steps are not run for any other connections with the same origin and 
> name but with a higher version"
> 
> And the note: "This means that if two databases with the same name and 
> origin, but with different versions, are being opened at the same time, the 
> one with the highest version will attempt to be opened first. If it is able 
> to successfully open, then the one with the lower version will receive an 
> error."
> 
> I interpret that as (and perhaps the spec should be updated to read): "This 
> means that if two open requests are made to the database with the same name 
> and origin at the same time, the open request with the highest version will 
> be processed first. If it is able to successfully open, then the request with 
> the lower version will receive an error."
> 
> So far as I can tell with a test [3], none of Chrome (33), Firefox (27), or 
> IE (10) implement this per spec. Instead of processing the request with the 
> highest version first, they process the first request that was received.
> 
> Is my interpretation of the spec correct? Is my test [3] correct? If yes and 
> yes, should we update the spec to match reality?

I think the ambiguous language in the spec, and also in your substitute 
proposal, is "at the same time". I would think if one request is received 
first, then they are not, in fact, at the same time. Indeed, it would be pretty 
hard for two requests to be exactly simultaneous.

If "at the same time" is actually supposed to mean something about receiving a 
new open request while an older one is still in flight in some sense, then the 
spec should say that, and specify exactly what it means. I would think the only 
observable time is actually delivering the callback. That would imply a rule 
that if you receive a request with a higher version number before the 
completion callback for a currently pending open request has been delivered, 
you need to cancel the attempt and try with the higher version (possibly 
retrying with the lower version again later).

Regards,
Maciej


Reply via email to