powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
25 сообщений из 34, страница 1 из 2
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
    #39857676
Добрый день

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

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

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

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

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

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

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

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

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

А сюда написал, потому что вчера тоже про эту херню думал.
...
Рейтинг: 0 / 0
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
    #39857750
Коваленко Дмитрийесли индекс поврежден - ничего не падает. Также не падает и на 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
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
    #39857753
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим МещеряковПочему Firebird всех версий падает и разрывает все соединения если повреждена строка в какой нить таблице или страница с индексом а он всего лишь выполнял select в readonly транзакции?Пример падения ?
...
Рейтинг: 0 / 0
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
    #39857754
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим Мещеряков,

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

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

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

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

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

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

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

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

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

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

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

Понял, все логично. Я совсем и не думал про страницы в памяти
...
Рейтинг: 0 / 0
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
    #39858031
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим МещеряковКоваленко Дмитрийесли индекс поврежден - ничего не падает. Также не падает и на 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
Почему Firebird всех версий падает и разрывает все соединения если повреждена строка?
    #39858053
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

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

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

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

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

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

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

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

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

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

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

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

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

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


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