Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему Firebird всех версий падает и разрывает все соединения если повреждена строка? / 25 сообщений из 34, страница 1 из 2
05.09.2019, 07:23
    #39857676
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Добрый день

Почему Firebird всех версий падает и разрывает все соединения если повреждена строка в какой нить таблице или страница с индексом а он всего лишь выполнял select в readonly транзакции?
В архитектуре Classic это еще не так болезненно, но вот при использовании SuperServer кучу пользователей выкидывает из программы, хотя они к этой таблице и этой записи и не обращались.
Можно же перехватить исключение и вернуть ошибку вместо набора данных?
С какой целью выбрано такое жесткое, снижающее общую доступность системы поведение?
...
Рейтинг: 0 / 0
05.09.2019, 09:24
    #39857718
Коваленко Дмитрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Вадим МещеряковДобрый день

Почему Firebird всех версий падает ...
Кстати да, почему? Хороший вопрос.

Сегодня утром, в комнате счастья, просматривал статью

авторвключая подтвержденные результаты работы под промышленной нагрузкой
Подумалось - у меня оно (3.0.4) проработало 28 дней. Под нагрузкой. А потом навернулось при простое :)

---
Кстати, на этом сайте увидел еще одну статью - Непрерывное тестирование ...

Надо будет почитать. Хотя нахер ... лучше тесты добить.

---
Потому что работать на упреждение проблем - это ПРОСТО КАПЕЦ КАК ДОРОГО.
...
Рейтинг: 0 / 0
05.09.2019, 09:41
    #39857732
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Вадим Мещеряков,

кхм... Вопрос конечно хороший. Но скорее всего правильно делает, ибо если БД побилась в одном месте то может и продолжить своё разрушение. Лучше уж сразу об этом заорать, мол чини базу пока не поздно.
...
Рейтинг: 0 / 0
05.09.2019, 09:52
    #39857736
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Коваленко ДмитрийСегодня утром, в комнате счастья, просматривал статью
провокаторская джинса от postgrespro.
Вадим МещеряковПочему Firebird всех версий падает и разрывает все соединения если повреждена строка в какой нить таблице или страница с индексом
если индекс поврежден - ничего не падает. Также не падает и на internal gds consistency check, просто прекращает работать с базой, во избежание повреждений при неправильной ЗАПИСИ.
Падает только тогда, когда структуры повреждены так, что невозможно определить, что они повреждены. А повреждение в результате портит память, и т.д.

Вопрос вообще странный. Почему программы на Дельфи (и вообще) падают по AV? Потому же.
...
Рейтинг: 0 / 0
05.09.2019, 10:06
    #39857749
Коваленко Дмитрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
kdvКоваленко ДмитрийСегодня утром, в комнате счастья, просматривал статью
провокаторская джинса от postgrespro.
Я понимаю, что падает все. Но проблемы FB все равно подбешивают.

А сюда написал, потому что вчера тоже про эту херню думал.
...
Рейтинг: 0 / 0
05.09.2019, 10:07
    #39857750
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Коваленко Дмитрийесли индекс поврежден - ничего не падает. Также не падает и на internal gds consistency check, просто прекращает работать с базой, во избежание повреждений при неправильной ЗАПИСИ.

Значит мой вопрос не корректный а правильный будет такой:

"Почему Firebird прекращает работать с базой если находит ошибку в записи или в индексе при select в readonly транзакции?"

Вопрос насколько это правильно отключить всех от базы по условию if (!thisPointer) появился после вот такого комментария к http://tracker.firebirdsql.org/browse/CORE-6137

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
confirmed on Windows 
and it is not releated to chaset tested with WIN1250 and NONE - same error 


Message: isc_dsql_fetch failed. 

SQL Message : -902 
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements 

Engine Code : 335544333 
Engine Message : 
internal Firebird consistency check (invalid SEND request (167), file: JrdStatement.cpp line: 327) 

------------------------------------------------------------------------------------------------------------------------------------------------------ 
in the source code it is 

jrd_req* JrdStatement::findRequest(thread_db* tdbb) 
{ 
    SET_TDBB(tdbb); 
    Attachment* const attachment = tdbb->getAttachment(); 
    const JrdStatement* const thisPointer = this;	// avoid warning 
    if (!thisPointer) 
        BUGCHECK(167);	/* msg 167 invalid SEND request */ 
...
Рейтинг: 0 / 0
05.09.2019, 10:12
    #39857753
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Вадим МещеряковПочему Firebird всех версий падает и разрывает все соединения если повреждена строка в какой нить таблице или страница с индексом а он всего лишь выполнял select в readonly транзакции?Пример падения ?
...
Рейтинг: 0 / 0
05.09.2019, 10:12
    #39857754
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Вадим Мещеряков,

ах ты про опубликованный тобой баг. Ну так это же сделано не намеренно.

Видишь ли если дело дошло то багчека, то поздно пить боржоми.
Это условие которое не должно достигаться никогда, если в коде нет ошибки. И оно является лишь следствием, где-то пропущена какая-то проверка или обработка которая должна была предотвратить эту ситуацию.
...
Рейтинг: 0 / 0
05.09.2019, 10:52
    #39857778
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
hvladПример падения ?
Никто не присылал баз в которых запись повреждена или индексная страница?
Когда SuperServer обращается к такой записи - рвет все соединения

Я на днях ремонтировал с помощью gfix -mend базу в книжном магазине заказчика. Магазин не мог работать пока не починили.
...
Рейтинг: 0 / 0
05.09.2019, 11:02
    #39857780
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
05.09.2019 10:52, Вадим Мещеряков пишет:
> Я на днях ремонтировал с помощью gfix -mend базу в книжном магазине заказчика.
> Магазин не мог работать пока не починили.

а с поломатым кассовым аппаратом магазин работать может?
а если трубу прорвало, или электричество кончилось?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.09.2019, 11:18
    #39857791
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Вадим МещеряковКогда SuperServer обращается к такой записи - рвет все соединенияГде ПАДЕНИЕ, блин ? Когда научимся называть вещи своими именами ?

Что лучше :
- работать с возможно повреждённой памятью и плевать что из-за этого будет записано в БД

- тщательно проверять каждую страницу при любом к ней обращении (только при
чтении с диска - не достаточно, память могла повредить злобная UDF, или случайный
космический нейтрон) - и тормозить при этом до невозможности

- честно сказать: я вижу то, чего быть не может никогда, х\з что там ещё, давай-ка
лучше всё остановим и ты меня перезапустишь (возможно после проверок)

PS изначальная архитектура IB\FB - классик, там такой подход вполне оправдан.
...
Рейтинг: 0 / 0
05.09.2019, 11:18
    #39857793
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Вадим МещеряковЯ на днях ремонтировал с помощью gfix -mend базуЭто не ремонт. Это убийство.
...
Рейтинг: 0 / 0
05.09.2019, 11:34
    #39857805
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
hvladЭто не ремонт. Это убийство.
После gfix -mend можно до конца рабочего дня дотянуть а там уже и перебэкапить
После перебэкапа в базе два варианта.
1. дубликаты записей (удаляю)
2. нет записи(ей) (беру из копии базы или из локальной копии документа)

Какие еще есть возможности быстро восстановить работоспособность?

На самом деле, это не часто приходится делать, как правило на небольших объектах, но всегда внезапно.
...
Рейтинг: 0 / 0
05.09.2019, 11:36
    #39857807
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
hvlad
- честно сказать: я вижу то, чего быть не может никогда, х\з что там ещё, давай-ка
лучше всё остановим и ты меня перезапустишь (возможно после проверок)

PS изначальная архитектура IB\FB - классик, там такой подход вполне оправдан.

Понял, все логично. Я совсем и не думал про страницы в памяти
...
Рейтинг: 0 / 0
05.09.2019, 16:30
    #39858031
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Вадим МещеряковКоваленко Дмитрийесли индекс поврежден - ничего не падает. Также не падает и на internal gds consistency check, просто прекращает работать с базой, во избежание повреждений при неправильной ЗАПИСИ.

Значит мой вопрос не корректный а правильный будет такой:

"Почему Firebird прекращает работать с базой если находит ошибку в записи или в индексе при select в readonly транзакции?"

Вопрос насколько это правильно отключить всех от базы по условию if (!thisPointer) появился после вот такого комментария к http://tracker.firebirdsql.org/browse/CORE-6137

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
confirmed on Windows 
and it is not releated to chaset tested with WIN1250 and NONE - same error 


Message: isc_dsql_fetch failed. 

SQL Message : -902 
Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements 

Engine Code : 335544333 
Engine Message : 
internal Firebird consistency check (invalid SEND request (167), file: JrdStatement.cpp line: 327) 

------------------------------------------------------------------------------------------------------------------------------------------------------ 
in the source code it is 

jrd_req* JrdStatement::findRequest(thread_db* tdbb) 
{ 
    SET_TDBB(tdbb); 
    Attachment* const attachment = tdbb->getAttachment(); 
    const JrdStatement* const thisPointer = this;	// avoid warning 
    if (!thisPointer) 
        BUGCHECK(167);	/* msg 167 invalid SEND request */ 



Очень плохой стиль кода, когда вызывают метод несконструированного объекта... Проверка должна была быть ранее.
...
Рейтинг: 0 / 0
05.09.2019, 16:56
    #39858053
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Siemargl,

товарищ ты хоть понимаешь для чего сей код был сделан?

Этот код из разряда ну мы всё проверили, но вдруг случился п.... и вот тогда кидаем багчек и прекращаем работу. Т.е. багчек он потому так и называется, что если уж туда попало, то возможно это баг в сервере. Это как раз кусок кода для отлова багов.
...
Рейтинг: 0 / 0
05.09.2019, 17:06
    #39858061
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Этот фрагмент не имеет никакого отношения к реальному багу.
...
Рейтинг: 0 / 0
05.09.2019, 17:06
    #39858062
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Симонов ДенисSiemargl,

товарищ ты хоть понимаешь для чего сей код был сделан?

Этот код из разряда ну мы всё проверили, но вдруг случился п.... и вот тогда кидаем багчек и прекращаем работу. Т.е. багчек он потому так и называется, что если уж туда попало, то возможно это баг в сервере. Это как раз кусок кода для отлова багов.
По стандарту С++ вызов метода по нулевому указателю это UB
...
Рейтинг: 0 / 0
05.09.2019, 17:08
    #39858064
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
hvladЭтот фрагмент не имеет никакого отношения к реальному багу.Возможно, что BUGCHECK(167) вызвался в другом месте, но в любом случае этот код не имеет права на существование.
...
Рейтинг: 0 / 0
05.09.2019, 17:16
    #39858066
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
SiemarglhvladЭтот фрагмент не имеет никакого отношения к реальному багу.Возможно, что BUGCHECK(167) вызвался в другом местеЭтот багчек является псевдо-случайным следствием совершенно другого бага. И он, кстати, выполнил свою работу - не дал разломать БД окончательно.

Siemarglно в любом случае этот код не имеет права на существование.Не делай так. Будь молодцом и примером для всех юных пионеров.
...
Рейтинг: 0 / 0
05.09.2019, 22:45
    #39858176
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
hvladSiemarglпропущено...
Возможно, что BUGCHECK(167) вызвался в другом местеЭтот багчек является псевдо-случайным следствием совершенно другого бага. И он, кстати, выполнил свою работу - не дал разломать БД окончательно.

Siemarglно в любом случае этот код не имеет права на существование.Не делай так. Будь молодцом и примером для всех юных пионеров.
Лучше поздно assert, чем никогда....

Для юных пионеров я пока написал пару статей о надежном программировании.

Линтером то пользуетесь? Он должен был спалить такое.
...
Рейтинг: 0 / 0
05.09.2019, 23:10
    #39858184
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
SiemarglЛинтером то пользуетесь????

SiemarglОн должен был спалить такое.Какое - такое ? :)
...
Рейтинг: 0 / 0
06.09.2019, 00:06
    #39858207
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
hvladSiemarglЛинтером то пользуетесь???? https://en.wikipedia.org/wiki/Lint_(software)
hvladSiemarglОн должен был спалить такое.Какое - такое ? :) UB
...
Рейтинг: 0 / 0
06.09.2019, 00:24
    #39858212
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
Siemargl,

Линтер (на данном сайте) - это скорее что-то про СУБД :)
Нет, не пользуюсь. Ни тем, ни этим :)

Что палить-то ? Ты к чему прицепился ? И зачем ? :)

Каким боком проверка this на NULL вдруг стала страшным преступлением ?
Если её туда всунули, значит когда-то был краш в этом месте.
Да, подстелили соломку на будущее - святой стандарт против ?
...
Рейтинг: 0 / 0
06.09.2019, 00:29
    #39858213
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
В данному случае UB такое: для this == nullptr - реакция линтера "условие всегда ложно"

А то тут малограмотных полфорума, банят то, что не понимают.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему Firebird всех версий падает и разрывает все соединения если повреждена строка? / 25 сообщений из 34, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]