В чем смысл ошибки Chrome IndexedDB Внутренняя ошибка проверки существования ключа?

Я периодически получаю это сообщение об ошибке в относительно большом проекте в произвольное время (что заставляет меня подозревать состояние гонки где-то...), поэтому, к сожалению, у меня нет минимального примера, иллюстрирующего эту проблему, поскольку я не понимаю основная причина. По сути, иногда я получаю сигнал об ошибке, где event.target.webkitErrorMessage — это «Внутренняя ошибка проверки существования ключа». Но я действительно не понимаю, что это сообщение об ошибке вообще должно означать.

Поиск этой фразы в Google дает только 7 результатов (хотя это будет больше, когда Google и другие найдут этот вопрос). Все эти результаты являются либо исходным кодом Chromium, либо отчетами об ошибках с добавлением более подробных сообщений об ошибках в Chromium. Поскольку я не очень хорошо знаком с реализацией серверной части IndexedDB в Chromium, я изо всех сил пытаюсь понять, что означает это сообщение об ошибке с точки зрения внешнего кода JavaScript. Например, какие ошибки JavaScript могут привести к такому сообщению об ошибке?

Рассматриваемый код, кажется, отлично работает в Firefox, FWIW.

РЕДАКТИРОВАНИЕ НИЖЕ

Я также, реже, получаю null в качестве курсора в ответ на запрос openCursor для ключа, который, как я знаю, является реальным ключом. Это тоже непоследовательно - бывает для разных ключей и редко. И это тоже только в Хроме. Очень странно.

И я не уверен, что это уместно, но все это происходит в рамках большой транзакции со многими update в двух хранилищах объектов (это те, которые приводят к нулевым проблемам openCursor) и многими add в другом хранилище объектов (похоже, это источник ошибки «Внутренняя ошибка проверки существования ключа»). Я попытаюсь сделать минимальный пример этого и продолжить расследование, но независимо от того, как это получится, я все же хотел бы знать ответ на мой первоначальный вопрос, что именно означает «Внутренняя ошибка проверки существования ключа».

ДРУГОЕ ИЗМЕНЕНИЕ

Поиграв еще немного, я столкнулся с другим странным временным сообщением об ошибке: «Внутренняя ошибка: ошибка резервного хранилища при выполнении ввода / добавления». Мне также было бы любопытно узнать, что это означает для моего JavaScript.

Кроме того, я подтвердил, что все эти проблемы являются новыми для Chrome 26 (и остаются в Chrome 27). При переходе на Chrome 25 все эти проблемы исчезают... так что, возможно, это все из-за какой-то ошибки в Chrome...

ЕЩЕ ОДНА ПРАВКА

Все эти проблемы возникают только в Linux (я использую Ubuntu 12.10). На виртуальной машине Windows XP с 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 — единственное возможное значение, так как в дополнение к этому я также вижу AbortError для запросов после прерывания транзакции). event.target.webkitErrorMessage содержит дополнительную информацию, но, как я описал в своем посте, это ошибка сообщения не кажутся документированными с пользой.   -  person dumbmatter    schedule 06.04.2013
comment
Спасибо за отличное объяснение и исследование. UnknownError это ошибка ввода-вывода, не так ли? Я также столкнулся с проблемой Chrome только при больших или нескольких транзакциях. Если бы я мог воспроизвести их, я бы зарегистрировал ошибку в проекте хрома. Пока еще пытаюсь воспроизвести в виде юнит-теста. Однако его можно легко воспроизвести в приложении. Обходной путь так же прост, как сделать транзакцию короткой.   -  person Kyaw Tun    schedule 06.04.2013
comment
Короткие транзакции снижают производительность. С другой стороны, я понял, что эти сообщения об ошибках появляются только в Linux, поэтому они не повлияют на 99% моих пользователей. Я отправил сообщение об ошибке на основании этого, поскольку является ошибкой, поскольку один и тот же код работает в других браузерах, других версиях Chrome и той же версии Chrome в Windows; но я не уверен, что проделал достаточно предварительной работы, чтобы сделать это полезным отчетом об ошибке. Очень сложно сделать короткий модульный тест, потому что частота ошибок быстро уменьшается по мере того, как он становится проще.   -  person dumbmatter    schedule 06.04.2013


Ответы (1)