Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сообщение об ошибке из-за рекурсии / 13 сообщений из 13, страница 1 из 1
07.05.2014, 11:32:25
    #38635346
Сисдба Мастеркеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке из-за рекурсии
Firebird server version
WI-V2.5.3.26758 Firebird 2.5

Скрипт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
recreate table ttt (id varchar(1000) NOT NULL primary key);
SET TERM ^ ;
CREATE OR ALTER PROCEDURE P0 RETURNS ( V blob sub_type text) AS BEGIN SUSPEND; END^
CREATE OR ALTER PROCEDURE P1 RETURNS ( V blob sub_type text) AS BEGIN SUSPEND; END^
CREATE OR ALTER PROCEDURE P2 RETURNS ( V blob sub_type text) AS BEGIN SUSPEND; END^
CREATE OR ALTER PROCEDURE P3 RETURNS ( V blob sub_type text) AS BEGIN SUSPEND; END^
CREATE OR ALTER PROCEDURE P4 RETURNS ( V blob sub_type text) AS BEGIN SUSPEND; END^
CREATE OR ALTER PROCEDURE P5 RETURNS ( V blob sub_type text) AS BEGIN SUSPEND; END^
CREATE OR ALTER PROCEDURE P6 RETURNS ( V blob sub_type text) AS BEGIN SUSPEND; END^
CREATE OR ALTER PROCEDURE P7 RETURNS ( V blob sub_type text) AS BEGIN SUSPEND; END^
CREATE OR ALTER PROCEDURE P8 RETURNS ( V blob sub_type text) AS BEGIN SUSPEND; END^
CREATE OR ALTER PROCEDURE P9 RETURNS ( V blob sub_type text) AS BEGIN SUSPEND; END^

CREATE OR ALTER PROCEDURE P0 RETURNS ( V blob sub_type text) AS begin insert into ttt values (uuid_to_char(gen_uuid())); for select '123'||V from P1 into V do suspend; end^
CREATE OR ALTER PROCEDURE P1 RETURNS ( V blob sub_type text) AS begin insert into ttt values (uuid_to_char(gen_uuid())); for select '123'||V from P2 into V do suspend; end^
CREATE OR ALTER PROCEDURE P2 RETURNS ( V blob sub_type text) AS begin insert into ttt values (uuid_to_char(gen_uuid())); for select '123'||V from P3 into V do suspend; end^
CREATE OR ALTER PROCEDURE P3 RETURNS ( V blob sub_type text) AS begin insert into ttt values (uuid_to_char(gen_uuid())); for select '123'||V from P4 into V do suspend; end^
CREATE OR ALTER PROCEDURE P4 RETURNS ( V blob sub_type text) AS begin insert into ttt values (uuid_to_char(gen_uuid())); for select '123'||V from P5 into V do suspend; end^
CREATE OR ALTER PROCEDURE P5 RETURNS ( V blob sub_type text) AS begin insert into ttt values (uuid_to_char(gen_uuid())); for select '123'||V from P6 into V do suspend; end^
CREATE OR ALTER PROCEDURE P6 RETURNS ( V blob sub_type text) AS begin insert into ttt values (uuid_to_char(gen_uuid())); for select '123'||V from P7 into V do suspend; end^
CREATE OR ALTER PROCEDURE P7 RETURNS ( V blob sub_type text) AS begin insert into ttt values (uuid_to_char(gen_uuid())); for select '123'||V from P8 into V do suspend; end^
CREATE OR ALTER PROCEDURE P8 RETURNS ( V blob sub_type text) AS begin insert into ttt values (uuid_to_char(gen_uuid())); for select '123'||V from P9 into V do suspend; end^
CREATE OR ALTER PROCEDURE P9 RETURNS ( V blob sub_type text) AS begin insert into ttt values (uuid_to_char(gen_uuid())); for select '123'||V from P0 into V do suspend; end^
SET TERM ; ^



Теперь при попытке выполнить селект из процедуры FB вылетает:
Код: plaintext
1.
2.
3.
4.
5.
6.
SQL> select * from P1;

                V
=================
Statement failed, SQLSTATE = 08006
Unable to complete network request to host "localhost".
-Error reading data from the connection.
В firebird.log вот это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SERVER	Wed May 07 13:25:06 2014
	 Access violation.
		The code attempted to access a virtual
		address without privilege to do so.
	This exception will cause the Firebird server
	to terminate abnormally.


SERVER (Client)	Wed May 07 13:25:07 2014
	INET/inet_error: read errno = 10054


SERVER (Client)	Wed May 07 13:25:10 2014
	REMOTE INTERFACE/gds__detach: Unsuccesful detach from database. 
	Uncommitted work may have been lost
Вылетает не всегда, иногда пишет более вменяемое сообщение о переполнении стека.

Увы, из-за сообщения про AV пришлось целый день убить на поиск реальной причины :)
...
Рейтинг: 0 / 0
07.05.2014, 11:54:11
    #38635375
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке из-за рекурсии
Сисдба Мастеркеевич,

1. Использование селективных процедур вместе с DML (INSERT/UPDATE/DELETE) операторами зло
2. Тут память кончилась, хотя странно что так быстро. По идее предел рекурсии процедур должен был наступить раньше
...
Рейтинг: 0 / 0
07.05.2014, 12:05:01
    #38635388
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке из-за рекурсии
Симонов Денис> 1. Использование селективных процедур вместе с
Симонов Денис> DML (INSERT/UPDATE/DELETE) операторами зло

Ась?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.05.2014, 12:12:50
    #38635395
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке из-за рекурсии
Гаджимурадов Рустам,

это так называемый побочный эффект. Ты хочешь получить набор записей, а он там чего то добавляет. Результаты порой могут быть непредсказуемыми. Недавнее обсуждение это ещё раз доказывает
http://www.sql.ru/forum/1080099/dvoynoy-update-bug?hl=???????? ??????
...
Рейтинг: 0 / 0
07.05.2014, 14:42:43
    #38635619
Сисдба Мастеркеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке из-за рекурсии
Симонов ДенисСисдба Мастеркеевич,

1. Использование селективных процедур вместе с DML (INSERT/UPDATE/DELETE) операторами зло
....
это так называемый побочный эффект. Ты хочешь получить набор записей, а он там чего то добавляет. Результаты порой могут быть непредсказуемыми. Недавнее обсуждение это ещё раз доказывает
http://www.sql.ru/forum/1080099/dvoynoy-update-bug?hl=???????? ??????

1. Что не запрещено, то разрешено.
2. Я знаю, что именно делаю. Мне нужны именно селективные процедуры. Если в процедуре есть suspend и я делаю из нее select, это не означает, что она всенепременно должна быть read-only. К тому же, к ошибке это не имеет отношения.


Симонов Денис2. Тут память кончилась, хотя странно что так быстро. По идее предел рекурсии процедур должен был наступить раньше
Дак и надо выдавать сообщение о кончившейся памяти. В других случаях сервер ведь умеет это делать. ИМХО, тут где-то недопредусмотрена какая-то ситуация. А падать сервер не должен никогда.
...
Рейтинг: 0 / 0
07.05.2014, 14:43:41
    #38635623
Сисдба Мастеркеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке из-за рекурсии
Я так понимаю, раз воспроизводится, надо товарищу трекеру писать. Беда - я буржуинским не владею :(
...
Рейтинг: 0 / 0
07.05.2014, 14:55:22
    #38635640
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке из-за рекурсии
Сисдба Мастеркеевич,

Что падать не должен согласен.
Переведи через google translate фиг с ним что коряво будет, но там поймут. К тому же много слов там и не надо писать
...
Рейтинг: 0 / 0
07.05.2014, 15:51:00
    #38635741
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке из-за рекурсии
Симонов ДенисЧто падать не должен согласен.
а что должен делать?
...
Рейтинг: 0 / 0
07.05.2014, 16:02:36
    #38635760
Сисдба Мастеркеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке из-за рекурсии
dimitr,

Например, вывести что-то типа такого. (если оставить только 2 процедуры в рекурсии)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
SQL> select * from P1;

                V
=================
Statement failed, SQLSTATE = 54001
Too many concurrent executions of the same request
-At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedure 'P0' line: 1, col: 122
At procedure 'P1' line: 1, col: 122
At procedur...
SQL>
...
Рейтинг: 0 / 0
07.05.2014, 17:07:05
    #38635854
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке из-за рекурсии
Сисдба Мастеркеевич,

там кстати ещё предел для BLOB в 2G мог быть преодолён
...
Рейтинг: 0 / 0
07.05.2014, 19:08:53
    #38635961
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке из-за рекурсии
Сисдба Мастеркеевич,

а если процедур 100000? Рекурсии вообще не будет, а стек все равно кончится.
...
Рейтинг: 0 / 0
07.05.2014, 19:38:23
    #38635977
Сисдба Мастеркеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке из-за рекурсии
> а если процедур 100000? Рекурсии вообще не будет, а стек все равно кончится.


сервер ведь может исчерпание стека увидеть и, не падая, отругать кого надо ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.05.2014, 21:08:53
    #38636025
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение об ошибке из-за рекурсии
Сисдба Мастеркеевич,

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


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