On Wed, Oct 16, 2024 at 5:22 PM Abhishek Shanthkumar < abhishek.shanthku...@microsoft.com> wrote:
> Update: A spec PR <https://github.com/w3c/IndexedDB/pull/430> has been > merged to update the exception type to be "NotReadableError" for these > failures. Thank you for your inputs and guidance, Domenic, Joshua and Evan! > > I'll make these follow-up changes in Chromium, still tracked by > crbug.com/362123231 : > > - Update the exception type from "NotFoundError" to "NotReadableError" > for unrecoverable failures arising from data loss. > - Update the exception type from "DataError" to "UnknownError" for > transient failures. > - Update the exception message to be more effective in conveying the > nature of the error to developers. > > The above changes will go out in M132 though (since M131 branched out this > week), while the original change that started this thread (changing the > error type to "NotFoundError") will be reaching M130 Stable this week. > So interested developers would need to update their error handlers again > for M132, which isn't ideal... > Should we aim to maintain some sort of compatibility for a couple of > releases, or is this an acceptable tradeoff for converging on a common > error and a detailed message? > In my opinion, it's an acceptable tradeoff. Changing only error names, for unpredictable errors, should not be a significant compatibility risk. And the sooner we reach the desired end state, the better. > > Thanks, > > Abhishek > > > > ------------------------------ > *From:* Abhishek Shanthkumar <abhishek.shanthku...@microsoft.com> > *Sent:* Monday, September 23, 2024 5:55 PM > *To:* Domenic Denicola <dome...@chromium.org>; Joshua Bell < > jsb...@chromium.org> > *Cc:* Mike Taylor <miketa...@chromium.org>; Chromestatus < > ad...@cr-status.appspotmail.com>; blink-dev@chromium.org < > blink-dev@chromium.org>; a...@chromium.org <a...@chromium.org>; > est...@chromium.org <est...@chromium.org>; Steve Becker < > stev...@microsoft.com> > *Subject:* Re: [EXTERNAL] Re: [blink-dev] Web-Facing Change PSA: Improved > error reporting in IndexedDB for large value read failures > > I have created a spec issue at Specify the exception for read failures > arising due to partial data loss on the file system · Issue #423 · > w3c/IndexedDB (github.com) <https://github.com/w3c/IndexedDB/issues/423>. > I'll then create a spec PR based on how the discussion evolves. > > Thanks, > > Abhishek > > > ------------------------------ > *From:* Abhishek Shanthkumar <abhishek.shanthku...@microsoft.com> > *Sent:* Friday, September 20, 2024 7:50 PM > *To:* Domenic Denicola <dome...@chromium.org>; Joshua Bell < > jsb...@chromium.org> > *Cc:* Mike Taylor <miketa...@chromium.org>; Chromestatus < > ad...@cr-status.appspotmail.com>; blink-dev@chromium.org < > blink-dev@chromium.org>; a...@chromium.org <a...@chromium.org>; > est...@chromium.org <est...@chromium.org>; Steve Becker < > stev...@microsoft.com> > *Subject:* Re: [EXTERNAL] Re: [blink-dev] Web-Facing Change PSA: Improved > error reporting in IndexedDB for large value read failures > > Thank you for the inputs, Domenic! Yes, I'll be happy to take this forward > so that we can converge on a common error for such scenarios. I'll go ahead > and file a spec issue as the first step. > > Though the exact error can be discussed - "InvalidStateError" too may be a > good choice since it says "... a request is made on a source object that > has been deleted or removed" - I think the most important point to discuss > from the spec perspective is whether to distinguish between the recoverable > and unrecoverable cases. I'm not yet sure if Firefox throws the same > "UnknownError" if there is a transient failure in reading the value. > > Thanks, > > Abhishek > > > ------------------------------ > *From:* Domenic Denicola <dome...@chromium.org> > *Sent:* Friday, September 20, 2024 7:46 AM > *To:* Abhishek Shanthkumar <abhishek.shanthku...@microsoft.com>; Joshua > Bell <jsb...@chromium.org> > *Cc:* Mike Taylor <miketa...@chromium.org>; Chromestatus < > ad...@cr-status.appspotmail.com>; blink-dev@chromium.org < > blink-dev@chromium.org>; a...@chromium.org <a...@chromium.org>; > est...@chromium.org <est...@chromium.org>; Steve Becker < > stev...@microsoft.com> > *Subject:* Re: [EXTERNAL] Re: [blink-dev] Web-Facing Change PSA: Improved > error reporting in IndexedDB for large value read failures > > You don't often get email from dome...@chromium.org. Learn why this is > important <https://aka.ms/LearnAboutSenderIdentification> > Thanks for your attentiveness to interop here, and to the spec issues! > This is above-and-beyond. > > I think we should amend the spec to cover this scenario. Even though the > implementation detail of using separate files is browser-specific, the > general idea that "sometimes getting a value fails for reasons related to > the underlying storage" is something that we can cover. From what I can > tell, the spec already covers some such cases, e.g. > https://w3c.github.io/IndexedDB/#dom-idbfactory-databases step 4.1. > > Would you be willing to work on a small spec PR to modify the appropriate > methods to include a sentence like that? /cc @Joshua Bell > <jsb...@chromium.org> as spec editor. > > As for the specific type of error, my read is that although the section at > https://w3c.github.io/IndexedDB/#exceptions implies "NotFoundError" is a > good choice, looking at actual usage in the spec, "NotFoundError" seems to > be more about deterministic cases where the web developer is requesting > something from the database which they have not previously written to it, > whereas "UnknownError" is used in cases where something goes wrong with > underlying storage. So maybe aligning with Firefox is the best path forward > here, although I don't feel strongly. > > I still think it's reasonable to do all this as a web-facing PSA instead > of a full Intent to Ship, by the way. > > On Fri, Sep 20, 2024 at 2:37 AM 'Abhishek Shanthkumar' via blink-dev < > blink-dev@chromium.org> wrote: > > A correction about the behavior of other browsers - it looks like Firefox > too stores blobs and large values in files separate from the SQLite > database. > Deleting the files and then attempting to read the value raises a > DOMException on the IDBRequest with these parameters: > name: "UnknownError" > message: "The operation failed for reasons unrelated to the database > itself and not covered by any other error code." > > It might be helpful to converge on a common error across browsers for this > scenario. This does not strictly fit in the IndexedDB spec though, since > storing certain data in separate files is an implementation detail. > What is the usual guidance for such cases? > > Thanks, > > Abhishek > > > ------------------------------ > *From:* Mike Taylor <miketa...@chromium.org> > *Sent:* Tuesday, September 17, 2024 8:26 PM > *To:* Abhishek Shanthkumar <abhishek.shanthku...@microsoft.com>; > Chromestatus <ad...@cr-status.appspotmail.com>; blink-dev@chromium.org < > blink-dev@chromium.org> > *Cc:* a...@chromium.org <a...@chromium.org>; est...@chromium.org < > est...@chromium.org>; Steve Becker <stev...@microsoft.com> > *Subject:* Re: [EXTERNAL] Re: [blink-dev] Web-Facing Change PSA: Improved > error reporting in IndexedDB for large value read failures > > You don't often get email from miketa...@chromium.org. Learn why this is > important <https://aka.ms/LearnAboutSenderIdentification> > > Sounds good - thx! > On 9/17/24 10:38 AM, Abhishek Shanthkumar wrote: > > Hi, Mike! > > The DOMException.name was "DataError" for all cases before this change. It > remains the same for the "recoverable" cases even after this change. I'll > add this to the Summary, thanks! > > This error is unique to Chromium because, yes, LevelDB is not used by > other browsers. > > Thanks, > > Abhishek > > > > ------------------------------ > *From:* Mike Taylor <miketa...@chromium.org> <miketa...@chromium.org> > *Sent:* Tuesday, September 17, 2024 7:46 PM > *To:* Chromestatus <ad...@cr-status.appspotmail.com> > <ad...@cr-status.appspotmail.com>; blink-dev@chromium.org > <blink-dev@chromium.org> <blink-dev@chromium.org> > *Cc:* Abhishek Shanthkumar <abhishek.shanthku...@microsoft.com> > <abhishek.shanthku...@microsoft.com>; a...@chromium.org > <a...@chromium.org> <a...@chromium.org>; est...@chromium.org > <est...@chromium.org> <est...@chromium.org>; Steve Becker > <stev...@microsoft.com> <stev...@microsoft.com> > *Subject:* [EXTERNAL] Re: [blink-dev] Web-Facing Change PSA: Improved > error reporting in IndexedDB for large value read failures > > > You don't often get email from miketa...@chromium.org. Learn why this is > important <https://aka.ms/LearnAboutSenderIdentification> > > Hi! A couple of questions: > > What was the DOMException.name before this change? > > Do we know what do other browsers do in this situation? Or is LevelDB only > used by Chromium? > On 9/17/24 10:11 AM, Chromestatus wrote: > > Contact emails > abhishek.shanthku...@microsoft.com, est...@chromium.org > > Specification > https://www.w3.org/TR/IndexedDB/#dom-idbrequest-error > > Summary > > Change to reporting for certain error cases that were previously reported > with a DOMException and the message "Failed to read large IndexedDB value". > Chromium will now raise a DOMException with the name "NotFoundError" when > the file containing the data being read by an IDBRequest is missing from > the disk so that sites can take the appropriate corrective action when an > unrecoverable failure occurs. Corrective actions could include deleting the > entry from the DB, notifying the user, re-fetching the data from servers, > etc. More details: a large value (above a specific size threshold) written > to IndexedDB is not stored directly in the underlying LevelDB database but > instead stored as a separate file. An IndexedDB read request for this value > looks up the blob reference from LevelDB, reads the blob, then unwraps and > returns the stored value. If a failure occurs in this process, the browser > fires an "error" event and sets the error property on the IDBRequest to a > DOMException with the message "Failed to read large IndexedDB value". The > failure could be recoverable (caused by low memory) or unrecoverable (the > blob file is missing from the disk). This feature updates the name to > "NotFoundError" to enable distinguishing recoverable and unrecoverable > cases. > > > Blink component > Blink>Storage>IndexedDB > <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EStorage%3EIndexedDB> > > TAG review > None > > TAG review status > Not applicable > > Risks > > > Interoperability and Compatibility > > None > > > *Gecko*: No signal > > *WebKit*: No signal > > *Web developers*: No signals > > *Other signals*: > > WebView application risks > > *Does this intent deprecate or change behavior of existing APIs, such that > it has potentially high risk for Android WebView-based applications?* > > None > > > Debuggability > > None > > > Will this feature be supported on all six Blink platforms (Windows, Mac, > Linux, ChromeOS, Android, and Android WebView)? > Yes > > This change is in the blink layer of the IndexedDB API implementation and > hence applies to all Blink platforms. > > > Is this feature fully tested by web-platform-tests > <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md> > ? > No > > Flag name on chrome://flags > None > > Finch feature name > None > > Non-finch justification > > This is a simple change to the error type when a failure occurs due to a > specific cause. Web developers can choose to update their sites to respond > differently to this specific error, but existing general error handling > keyed to the "Failed to read large IndexedDB value" message will continue > to work. Hence, this is unlikely to break sites and is therefore not behind > a feature flag. > > > Requires code in //chrome? > False > > Tracking bug > https://issues.chromium.org/issues/362123231 > > Estimated milestones > Shipping on desktop 130 > Shipping on Android 130 > Shipping on WebView 130 > > > Anticipated spec changes > > *Open questions about a feature may be a source of future web compat or > interop issues. Please list open issues (e.g. links to known github issues > in the project for the feature specification) whose resolution may > introduce web compat/interop risk (e.g., changing to naming or structure of > the API in a non-backward-compatible way).* > None > > Link to entry on the Chrome Platform Status > https://chromestatus.com/feature/5140210640486400?gate=5120313600507904 > > This intent message was generated by Chrome Platform Status > <https://chromestatus.com/>. > -- > You received this message because you are subscribed to the Google Groups > "blink-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to blink-dev+unsubscr...@chromium.org. > To view this discussion on the web visit > https://groups.google.com/a/chromium.org/d/msgid/blink-dev/66e98e07.2b0a0220.195547.0126.GAE%40google.com > <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/66e98e07.2b0a0220.195547.0126.GAE%40google.com?utm_medium=email&utm_source=footer> > . > > -- > You received this message because you are subscribed to the Google Groups > "blink-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to blink-dev+unsubscr...@chromium.org. > To view this discussion on the web visit > https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CY8PR00MB15074249A0CDEF0E254CAAE790632%40CY8PR00MB1507.namprd00.prod.outlook.com > <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CY8PR00MB15074249A0CDEF0E254CAAE790632%40CY8PR00MB1507.namprd00.prod.outlook.com?utm_medium=email&utm_source=footer> > . > > -- You received this message because you are subscribed to the Google Groups "blink-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+unsubscr...@chromium.org. To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAM0wra9r3P4Jw0_HYpG6D0wf2kAikimMg6Qd_EQkGBLWQU8bvQ%40mail.gmail.com.