Anonymous | Login | Signup for a new account | 21-11-24 09:53 UTC |
All Projects | SAS.Планета | Домен, сайт, форум, багтрекер | Доработка карты (ZMP) | Переводы и локализации | Прочее |
My View | View Issues | Change Log | Roadmap | Search |
View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0002016 | SAS.Планета | [All Projects] Баг | public | 15-07-2013 06:57 | 02-08-2013 12:02 | ||||
Reporter | Garl | ||||||||
Assigned To | zed | ||||||||
Priority | normal | Severity | minor | Reproducibility | have not tried | ||||
Status | resolved | Resolution | fixed | ||||||
Platform | Windows | OS | 7 | OS Version | Home Premium | ||||
Product Version | .Nightly | ||||||||
Target Version | 131111 | Fixed in Version | 131111 | ||||||
Summary | 0002016: Обработка ошибок в BerkeleyDB | ||||||||
Description | есть подозрения на битый кэш, но вдруг нет. | ||||||||
Tags | No tags attached. | ||||||||
Attached Files | SASPlanet.Debug.elf [^] (76,163 bytes) 15-07-2013 06:57 16-07-2013-SASPlanet.Debug.elf [^] (71,859 bytes) 16-07-2013 08:39 | ||||||||
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 функции, означает фатальную ошибку Понял. |
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 |
My View | View Issues | Change Log | Roadmap | Search |
Copyright © 2007 - 2024 SAS.Planet Team |