View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0002016SAS.Планета[All Projects] Багpublic15-07-2013 06:5702-08-2013 12:02
ReporterGarl 
Assigned Tozed 
PrioritynormalSeverityminorReproducibilityhave not tried
StatusresolvedResolutionfixed 
PlatformWindowsOS7OS VersionHome Premium
Product Version.Nightly 
Target Version131111Fixed in Version131111 
Summary0002016: Обработка ошибок в BerkeleyDB
Descriptionесть подозрения на битый кэш, но вдруг нет.
TagsNo tags attached.
Attached Files? file icon SASPlanet.Debug.elf [^] (76,163 bytes) 15-07-2013 06:57
? file icon 16-07-2013-SASPlanet.Debug.elf [^] (71,859 bytes) 16-07-2013 08:39

- Relationships

-  Notes
(0012070)
zed (manager)
15-07-2013 12:01

Какой-то странный стек вызовов. Вначале шла вполне прослеживаемая запись тайла в хранилище, а потом вдруг откуда ни возьмись оно вылетает в TBerkeleyDBValue.Assign.

А в sdb.log ничего не записалось? Там ещё есть подозрительный вызов функции __db_errx из libdb51.dll, т.е. скорее всего ошибка прилетела оттуда, но почему-то выстрелило чёрт-знает куда. Возможно как раз из-за переделанной обработки ошибок.
(0012071)
zed (manager)
15-07-2013 12:33

>Возможно как раз из-за переделанной обработки ошибок.
Да, всё больше склоняюсь к этому мнению. Если библиотека сообщает нам об ошибке внутри себя, она возвращает код ошибки и сообщение, т.е. по сути, исключения как такового ещё и нету. А мы вдруг просим эврику показать нам последнее исключение. Вот оно и показывает абы что.
(0012072)
Garl (manager)
15-07-2013 13:22

15-07-2013 10:47:18.798 Error [BerkeleyDB Value]: Bad magic value (ZVAL)
15-07-2013 10:54:36.103 Error [BerkeleyDB Value]: Bad CRC32 value: 0xA7B1EFD0
15-07-2013 10:54:38.204 Error [BerkeleyDB Value]: Bad CRC32 value: 0x1F8644D6
15-07-2013 10:54:55.807 BerkeleyDB: z14\4\2\19.11.sdbv page 6868 is on free list with type 7 e:\cache_dbv\sat_all_v1\
15-07-2013 11:01:11.031 Error [BerkeleyDB Value]: Bad magic value (▐6Yг)
15-07-2013 11:01:11.073 Error [BerkeleyDB Value]: Bad CRC32 value: 0x1CB62836
15-07-2013 11:01:51.595 BerkeleyDB: z17\39\23\156.93.sdbv page 186094 is on free list with type 7 e:\cache_dbv\sat_all_v1\
(0012073)
zed (manager)
15-07-2013 13:36

Ну вот и ошибки:
BerkeleyDB: z14\4\2\19.11.sdbv page 6868 is on free list with type 7 e:\cache_dbv\sat_all_v1\
BerkeleyDB: z17\39\23\156.93.sdbv page 186094 is on free list with type 7 e:\cache_dbv\sat_all_v1\

Так что это на 100% битый кэш. К тому же, ещё и с мусором, судя по сообщениям: Bad CRC32 value и Bad magic value

Но пока остаётся открытым вопрос, почему эврика не ловит все эти ошибки, что прилетают от либы и пишутся в лог. Возможно стоит переименовать тикет и посвятить его обработке ошибок Эврикой.
(0012074)
vasketsov (manager)
15-07-2013 13:44

>исключения как такового ещё и нету. А мы вдруг просим эврику показать
Если это про EBerkeleyDBEureka.Create, то это можно полечить добавлением проверки типа
if (ExceptObject <> nil) and not (ExceptObject is EAbort) then
вокруг
ShowLastExceptionData.

Это исключит вызов запуска эврики вне фрейма текущего исключения.
(0012075)
zed (manager)
15-07-2013 14:05

>if (ExceptObject <> nil)
Так в противном случае и эврика ничего не должна показать. Даже без этой проверки.

У нас ситуация такая:
15-07-2013 11:01:11.073 Error [BerkeleyDB Value]: Bad CRC32 value: 0x1CB62836
15-07-2013 11:01:51.595 BerkeleyDB: z17\39\23\156.93.sdbv page 186094 is on free list with type 7 e:\cache_dbv\sat_all_v1\

т.е. вначале был нармальный эксепшен в САС, который Эврика не словила, затем прилетела ошибка из библиотеки, в результате чего создалось исключение EBerkeleyDBEureka и показало на предыдущий эксепшен (Bad CRC32 value).
(0012076)
vasketsov (manager)
15-07-2013 14:12

>в противном случае и эврика ничего не должна показать
Что-то мне не удалось найти, что помешает вызвать ExceptNotify.
Стек-то развернуть дело нехитрое.
А проверка там вида
if ((not Initialized) or (IsAParent(Obj, EAbort))) then
  Exit;
(0012077)
vasketsov (manager)
15-07-2013 14:17

raise EBerkeleyDBExeption.Create(EMsg);
except
  ShowLastExceptionData;

Хм. Знаешь, что будет в эврике при исключении в конструкторе EBerkeleyDBExeption (например при нехватке памяти)?
(0012078)
zed (manager)
15-07-2013 14:25

Не знаю. А ты знаешь как ещё нормально сгенерировать исключение, чтобы оно попало в Эврику? В твоём случае, при ошибке в либе вида BerkeleyDB: z17\39\23\156.93.sdbv page 186094 is on free list with type 7 e:\cache_dbv\sat_all_v1\ Эврика всё равно промолчит.
(0012079)
vasketsov (manager)
15-07-2013 14:37

>знаешь как ещё нормально сгенерировать исключение
Не знаю (((
(0012080)
vasketsov (manager)
15-07-2013 14:38

Но меня напрягает, что строка с BerkeleyDB:выглядит не как строка исключения.
(0012081)
zed (manager)
15-07-2013 14:43

Ну так это и не исключение, а простое сообщение. "BerkeleyDB" это Error Prefix, который подсказывает, что ошибка в файле БД. Задаётся вручную в коде. Там ещё есть и "BerkeleyDB Env" - будет отсвечивать при ошибках в энвайронминте.
(0012082)
zed (manager)
15-07-2013 14:46

К примеру есть такая ситуация:

15-07-2013 16:07:19.302 BerkeleyDB: file z8\0\0\0.0.sdbv has LSN 42/1241061, past end of log at 1/28 d:\coding\delphi\src\sas.planet\sas.planet.src\.bin\cache_dbv\sat\
15-07-2013 16:07:19.304 EBerkeleyDBExeption: BerkeleyDB: file z8\0\0\0.0.sdbv has LSN 42/1241061, past end of log at 1/28 d:\coding\delphi\src\sas.planet\sas.planet.src\.bin\cache_dbv\sat\
15-07-2013 16:07:19.307 EBerkeleyDBExeption: EBerkeleyDBExeption: BerkeleyDB: file z8\0\0\0.0.sdbv has LSN 42/1241061, past end of log at 1/28 d:\coding\delphi\src\sas.planet\sas.planet.src\.bin\cache_dbv\sat\
15-07-2013 16:07:19.310 EAssertionFailed: Assertion failure (D:\coding\Delphi\src\SAS.Planet\sas.planet.src\TileStorage\BerkeleyDB\u_BerkeleyDBPool.pas, line 187)

Эврика сообщила только про ассерт :(

Причём, меня ешё напрягает, что там один эксепшен словило 2 раза (3-я строка).
(0012090)
vasketsov (manager)
15-07-2013 18:21

>так это и не исключение, а простое сообщение
А зачем ты тогда хочешь его в эврику пропихнуть? И как?

>меня ешё напрягает, что там один эксепшен словило 2 раза
Это просто reraise в стеке, как раз никаких проблем с этим нет.
(0012092)
zed (manager)
16-07-2013 04:55

>>так это и не исключение, а простое сообщение
>А зачем ты тогда хочешь его в эврику пропихнуть? И как?
Нужно сгенерировать исключение с этим сообщением, чтобы Эврика выкинула юзеру своё окошко и показало ошибку. После таких ошибок кэш уже всё-равно не рабочий и все манипуляции с ним из САСа нужно аварийно завершать. Сейчас же, это сообщение быстро мелькает на тайлах, изображение "застывает", и выкидывается EAssertionFailed. После этого юзер приходит в багтрекер с этим или подобным ассертом, с уверенностью, что проблема в САС, хотя на самом деле проблема в кэше и первое сообщение об этом чётко говорит.
(0012096)
zed (manager)
16-07-2013 05:20

О, похоже мои вчерашние изменения не прошли даром. В тикете 0002018 лежит elf сгенерированный из-за аналогичной ошибки, но там уже верный стек и юзер увидел правильное сообщение.
(0012103)
vasketsov (manager)
16-07-2013 07:28

>После таких ошибок кэш уже всё-равно не рабочий
Почему? Это какая-то нештатная ошибка?
Например, в БД нарушение первичного ключа (xyzv) или даже если просто текст запроса неверно написать, не приводит к порче данных и падению базы.
А тут почему? Из-за одновременного доступа из разных потоков или процессов?
(0012107)
zed (manager)
16-07-2013 12:13

Тут если БД ругается через вызов CallBack функции, означает фатальную ошибку. Для других ошибок, не фатальных, у функций read/write и прочих предусмотрен код возврата.

>А тут почему? Из-за одновременного доступа из разных потоков или процессов?
Где именно "тут"? В приведенном выше сообщении я специально удалил папку env на тестовом кэше, чтобы оно ругнулось. Проблемы Garl с "page 186094 is on free list with type 7" пока не ясно из-за чего. Многопоточность тут по-идее никак не должна влиять, бо я там засинхронизировал все вызовы по самое ни хочу.
(0012109)
vasketsov (manager)
17-07-2013 09:51

>вызов CallBack функции, означает фатальную ошибку
Понял.

- Users who viewed this issue
User List Anonymous (2143x)
Total Views 2143
Last View 10-08-2020 08:31

- Issue History
Date Modified Username Field Change
15-07-2013 06:57 Garl New Issue
15-07-2013 06:57 Garl File Added: SASPlanet.Debug.elf
15-07-2013 12:01 zed Note Added: 0012070
15-07-2013 12:33 zed Note Added: 0012071
15-07-2013 13:22 Garl Note Added: 0012072
15-07-2013 13:36 zed Note Added: 0012073
15-07-2013 13:44 vasketsov Note Added: 0012074
15-07-2013 14:05 zed Note Added: 0012075
15-07-2013 14:12 vasketsov Note Added: 0012076
15-07-2013 14:17 vasketsov Note Added: 0012077
15-07-2013 14:25 zed Note Added: 0012078
15-07-2013 14:37 vasketsov Note Added: 0012079
15-07-2013 14:38 vasketsov Note Added: 0012080
15-07-2013 14:43 zed Note Added: 0012081
15-07-2013 14:46 zed Note Added: 0012082
15-07-2013 18:21 vasketsov Note Added: 0012090
16-07-2013 04:55 zed Note Added: 0012092
16-07-2013 05:20 zed Note Added: 0012096
16-07-2013 05:45 zed Assigned To => zed
16-07-2013 05:45 zed Status new => confirmed
16-07-2013 05:45 zed Target Version => 131111
16-07-2013 05:45 zed Summary Berkley DB Unknown error message => Обработка ошибок в BerkeleyDB
16-07-2013 07:28 vasketsov Note Added: 0012103
16-07-2013 08:38 Garl Note Added: 0012104
16-07-2013 08:39 Garl File Added: 16-07-2013-SASPlanet.Debug.elf
16-07-2013 08:39 Garl Note Edited: 0012104 View Revisions
16-07-2013 08:40 Garl File Added: dbv_conv.jpg
16-07-2013 08:40 Garl File Added: dbv_conv_2.jpg
16-07-2013 08:41 Garl Note Edited: 0012104 View Revisions
16-07-2013 08:44 Garl Note Added: 0012105
16-07-2013 08:47 Garl Note Added: 0012106
16-07-2013 08:47 Garl File Added: 12-43-SASPlanet.Debug.elf
16-07-2013 08:47 Garl Note Edited: 0012106 View Revisions
16-07-2013 11:53 zed Note Deleted: 0012104
16-07-2013 11:54 zed Note Deleted: 0012105
16-07-2013 11:54 zed File Deleted: dbv_conv.jpg
16-07-2013 11:54 zed File Deleted: dbv_conv_2.jpg
16-07-2013 12:04 zed Note Deleted: 0012106
16-07-2013 12:04 zed File Deleted: 12-43-SASPlanet.Debug.elf
16-07-2013 12:13 zed Note Added: 0012107
17-07-2013 09:51 vasketsov Note Added: 0012109
02-08-2013 12:02 zed Status confirmed => resolved
02-08-2013 12:02 zed Fixed in Version => 131111
02-08-2013 12:02 zed Resolution open => fixed



Copyright © 2007 - 2020 SAS.Planet Team