Какво е значението на съществуването на ключ за проверка на вътрешна грешка в IndexedDB на Chrome?

Получавам това съобщение за грешка периодично в рамките на сравнително голям проект в привидно произволни моменти (което ме кара да подозирам някъде състояние на състезание...), така че за съжаление нямам минимален пример, илюстриращ този проблем, тъй като не разбирам първопричина. По принцип понякога получавам сигнал за грешка, където event.target.webkitErrorMessage е „Съществуване на ключ за проверка на вътрешна грешка“. Но наистина не разбирам какво трябва да означава това съобщение за грешка.

Гугъл за тази фраза връща само 7 резултата (въпреки че ще бъде повече, след като Google и други намерят този въпрос). Тези резултати са или изходен код на Chromium, или доклади за грешки относно добавянето на по-подробни съобщения за грешка към Chromium. Тъй като не съм добре запознат с изпълнението на бекенда на IndexedDB на Chromium, едно нещо, което се мъча да разбера, е какво означава това съобщение за грешка по отношение на предния JavaScript код. Например, какви видове грешки в JavaScript могат да доведат до това съобщение за грешка?

Въпросният код изглежда работи добре във Firefox, FWIW.

РЕДАКТИРИ ПО-ДОЛУ

Също така, по-рядко, получавам нула като курсор в отговор на openCursor заявка за ключ, за който знам, че е истински ключ. Това също е непоследователно - случва се за различни ключове и рядко. Освен това е само в Chrome. Много странно.

И не съм сигурен дали е уместно, но всичко това се случва в рамките на голяма транзакция с много updates в две хранилища на обекти (това са тези, водещи до null openCursor проблеми) и много adds в друго хранилище на обекти (това изглежда е източник на грешката „Съществуване на ключ за проверка на вътрешна грешка“). Ще се опитам да направя минимален пример за това и да проуча по-нататък, но независимо от това как ще се развие, все пак бих искал да знам отговора на моя първоначален въпрос, което е какво конкретно означава „съществуване на ключ за проверка на вътрешна грешка“.

ДРУГА РЕДАКЦИЯ

След като си поиграх още малко, попаднах на друго странно съобщение за преходна грешка, „Вътрешна грешка: грешка при архивиране на магазина при изпълнение на put/add“. Също така бих бил любопитен какво означава това за моя JavaScript.

Освен това потвърдих, че всички тези проблеми са нови за Chrome 26 (и остават в Chrome 27). Понижаването до Chrome 25 кара всички тези проблеми да изчезнат... така че може би всичко това е просто от някакъв бъг в Chrome...

ОЩЕ ЕДНА РЕДАКТИРАНЕ

Всички тези проблеми изглежда се случват само в Linux (използвам Ubuntu 12.10). В Windows XP VM с Chrome 26 не мога да възпроизведа нито една от тези грешки. Изпратих доклад за грешка, тъй като става все по-ясно, че това е всичко това се дължи на някакъв бъг, но не съм сигурен дали стесних проблема достатъчно, за да помогна да намеря решение.


person dumbmatter    schedule 05.04.2013    source източник
comment
Кога получавате тази грешка? onerror обратно извикване на IDBRequest? Проверили ли сте също request.error или event.target.error? Единствената валидна грешка в API на IndexedDB е ConstraintError, доколкото си спомням.   -  person Kyaw Tun    schedule 06.04.2013
comment
Да, това е в onerror обратното извикване за IDBRequest. event.target.error.name казва, че е UnknownError (не мисля, че ConstraintError е единствената възможна стойност, тъй като в допълнение към тази виждам също AbortErrors за заявки след прекратяване на транзакцията). event.target.webkitErrorMessage предоставя някои допълнителни подробности, но както описах в публикацията си, грешката му съобщенията не изглеждат полезно документирани.   -  person dumbmatter    schedule 06.04.2013
comment
Благодаря за отличното обяснение и сондата. UnknownError са IO грешка, нали? Също така срещнах проблем само с Chrome при големи или множество транзакции. Ако мога да ги възпроизведа, ще подам грешка в проекта на Chromium. Засега все още се опитвате да възпроизведете под формата на единичен тест. Въпреки това може лесно да се възпроизведе в приложението. Заобиколното решение е толкова лесно, колкото да направите транзакцията кратка.   -  person Kyaw Tun    schedule 06.04.2013
comment
Късите транзакции влошават ефективността. Положителната страна е, че разбрах, че тези съобщения за грешка се появяват само в Linux, така че няма да засегнат 99% от моите потребители. Аз изпратих грешка въз основа на това, тъй като доста ясно е грешка, като се има предвид, че същият код работи в други браузъри, други версии на Chrome и същата версия на Chrome в Windows; но не съм сигурен дали съм свършил достатъчно предварителна работа, за да го направя полезен доклад за грешки. Наистина е трудно да се направи кратък единичен тест, защото честотата на грешките намалява бързо, когато стане по-прост.   -  person dumbmatter    schedule 06.04.2013


Отговори (1)


Както споменах в редакция на въпроса, изпратих доклад за грешка. Изглежда е решен в Chrome 28. Така че всеки, който изпитва този проблем в по-стари версии на Chrome, просто надстройте до нестабилната версия или изчакайте няколко месеца, докато Chrome 28 стане стабилен. И ако някой получава грешки като тази в Chrome 28 или по-нова версия, това вероятно е грешка.

person dumbmatter    schedule 03.05.2013