Segmentation fault

659 views
Skip to first unread message

Ruslan

unread,
Oct 11, 2016, 3:52:11 AM10/11/16
to ClickHouse
На клиенте:
ERRO[0094] Post http://127.0.0.1:8123/: dial tcp 127.0.0.1:8123: getsockopt: connection refused

В логе сервера:
2016.10.11 02:41:46.224 [ 5 ] <Error> BaseDaemon: ########################################
2016.10.11 02:41:46.224 [ 5 ] <Error> BaseDaemon: (from thread 4) Received signal Segmentation fault (11).
2016.10.11 02:41:46.224 [ 5 ] <Error> BaseDaemon: Address: NULL pointer.
2016.10.11 02:41:46.229 [ 5 ] <Error> BaseDaemon: 1. clickhouse-server(DB::ColumnFixedString::insert(DB::Field const&)+0x16) [0x13df216]
2016.10.11 02:41:46.229 [ 5 ] <Error> BaseDaemon: 2. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x87) [0x3033a47]
2016.10.11 02:41:46.229 [ 5 ] <Error> BaseDaemon: 3. /lib/x86_64-linux-gnu/libpthread.so.0(+0x8184) [0x7f2a1d4bf184]
2016.10.11 02:41:46.229 [ 5 ] <Error> BaseDaemon: 4. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f2a1cada37d]
2016.10.11 02:41:55.234 [ 5 ] <Error> BaseDaemon: ########################################
2016.10.11 02:41:55.234 [ 5 ] <Error> BaseDaemon: (from thread 4) Received signal Segmentation fault (11).
2016.10.11 02:41:55.234 [ 5 ] <Error> BaseDaemon: Address: NULL pointer.
2016.10.11 02:41:55.243 [ 5 ] <Error> BaseDaemon: 1. clickhouse-server(DB::ColumnFixedString::insert(DB::Field const&)+0x16) [0x13df216]
2016.10.11 02:41:55.243 [ 5 ] <Error> BaseDaemon: 2. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x87) [0x3033a47]
2016.10.11 02:41:55.243 [ 5 ] <Error> BaseDaemon: 3. /lib/x86_64-linux-gnu/libpthread.so.0(+0x8184) [0x7f7afd42b184]
2016.10.11 02:41:55.243 [ 5 ] <Error> BaseDaemon: 4. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f7afca4637d]

Ошибка возникает если вместо FixedString передать UInt64 в Nested. Хотя в обычном случае мы получаем уведомление о неверном типе. Вставка происходила в батч режиме. Структура таблица:

CREATE TABLE IF NOT EXISTS myTable
(
  ...,

  My Nested (
    Col1 UInt64,
    Col2 FixedString(32)
  )
) ENGINE = MergeTree(EventDate, (CId, EventDate), 8192);

man...@gmail.com

unread,
Oct 11, 2016, 4:33:53 PM10/11/16
to ClickHouse
Дайте пожалуйста чуть более подробный пример, где выполняется вставка.
Я попробовал несколько вариантов, но segfault не воспроизвёлся:


CREATE TABLE IF NOT EXISTS myTable
(
    CId UInt64,
    EventDate Date,
    My Nested(
    Col1 UInt64,
    Col2 FixedString(32))

) ENGINE = MergeTree(EventDate, (CId, EventDate), 8192)

Ok.

0 rows in set. Elapsed: 0.003 sec.

:) INSERT INTO myTable VALUES (1, '2016-10-11', [1, 2], [3, 4])

INSERT INTO myTable VALUES


Exception on client:
Code: 53. DB::Exception: Type mismatch in IN or VALUES section: FixedString(32) expected, UInt64 got: (at row 1)

Connecting to localhost:9000.
Connected to ClickHouse server version 1.1.53981.

:) INSERT INTO myTable FORMAT CSV 1,2016-10-11,[1,2],[3,4] 

INSERT INTO myTable FORMAT CSV


Exception on client:
Code: 27. DB::Exception: Cannot parse input: expected ] at end of stream.:

Row 1:
Column 0,   name: CId,       type: UInt64,                 parsed text: "1"
Column 1,   name: EventDate, type: Date,                   parsed text: "2016-10-11"
Column 2,   name: My.Col1,   type: Array(UInt64),          parsed text: <EMPTY>ERROR

: (at row 1)

Connecting to localhost:9000.
Connected to ClickHouse server version 1.1.53981.

:) INSERT INTO myTable FORMAT CSV 1,2016-10-11,[1,2],['3','4']

INSERT INTO myTable FORMAT CSV


Exception on client:
Code: 27. DB::Exception: Cannot parse input: expected ] at end of stream.:

Row 1:
Column 0,   name: CId,       type: UInt64,                 parsed text: "1"
Column 1,   name: EventDate, type: Date,                   parsed text: "2016-10-11"
Column 2,   name: My.Col1,   type: Array(UInt64),          parsed text: <EMPTY>ERROR

: (at row 1)

Connecting to localhost:9000.
Connected to ClickHouse server version 1.1.53981.

:) INSERT INTO myTable FORMAT CSV 1,2016-10-11,[1,2]

INSERT INTO myTable FORMAT CSV


Exception on client:
Code: 27. DB::Exception: Cannot parse input: expected ] at end of stream.:

Row 1:
Column 0,   name: CId,       type: UInt64,                 parsed text: "1"
Column 1,   name: EventDate, type: Date,                   parsed text: "2016-10-11"
Column 2,   name: My.Col1,   type: Array(UInt64),          parsed text: <EMPTY>ERROR

: (at row 1)

Connecting to localhost:9000.
Connected to ClickHouse server version 1.1.53981.

:) INSERT INTO myTable FORMAT CSV 1,2016-10-11,"[1,2]"

INSERT INTO myTable FORMAT CSV


Exception on client:
Code: 27. DB::Exception: Cannot parse input: expected , at end of stream.:
Could not print diagnostic info because two last rows aren't in buffer (rare case)
: (at row 1)

Connecting to localhost:9000.
Connected to ClickHouse server version 1.1.53981.

:) INSERT INTO myTable FORMAT CSV 1,2016-10-11,"[1,2]","[3,4]"

INSERT INTO myTable FORMAT CSV


Exception on client:
Code: 26. DB::Exception: Cannot parse quoted string: expected opening quote:
Could not print diagnostic info because two last rows aren't in buffer (rare case)
: (at row 1)

Connecting to localhost:9000.
Connected to ClickHouse server version 1.1.53981.

:) INSERT INTO myTable FORMAT CSV 1,2016-10-11,"[1,2]","['3','4']"

INSERT INTO myTable FORMAT CSV

Ok.

1 rows in set. Elapsed: 0.002 sec.

:) Bye.
milovidov@milovidov-desktop:~/work/ClickHouse$ curl 'http://localhost:8123/' --data-binary="INSERT INTO myTable FORMAT CSV 1,2016-10-11,\"[1,2]\",\"['3','4']\""
curl: option --data-binary=INSERT INTO myTable FORMAT CSV 1,2016-10-11,"[1,2]","['3','4']": is unknown
curl: try 'curl --help' or 'curl --manual' for more information
milovidov@milovidov-desktop:~/work/ClickHouse$ curl 'http://localhost:8123/' --data-binary "INSERT INTO myTable FORMAT CSV 1,2016-10-11,\"[1,2]\",\"['3','4']\""
milovidov@milovidov-desktop:~/work/ClickHouse$ curl 'http://localhost:8123/' --data-binary "INSERT INTO myTable FORMAT CSV 1,2016-10-11,\"[1,2]\",\"[3,4]\""
Code: 26, e.displayText() = DB::Exception: Cannot parse quoted string: expected opening quote:
Could not print diagnostic info because two last rows aren't in buffer (rare case)
: (at row 1), e.what() = DB::Exception
milovidov@milovidov-desktop:~/work/ClickHouse$ curl 'http://localhost:8123/' --data-binary "INSERT INTO myTable FORMAT CSV 1,2016-10-11,\"[1,2]\",\"3\""
Code: 27, e.displayText() = DB::Exception: Cannot parse input: expected [ before: 3:
Could not print diagnostic info because two last rows aren't in buffer (rare case)
: (at row 1), e.what() = DB::Exception

Ruslan

unread,
Oct 11, 2016, 6:16:13 PM10/11/16
to ClickHouse
У меня был вариант батч инсерта с использованием sip64 по post http api:
INSERT INTO myTable VALUES (1, '2016-10-11', [1, sipHash64('a')], [3, sipHash64('b')]), (2, '2016-10-11', [1, sipHash64('a')], [3, sipHash64('b')]);
Правда версия CH была старенькой. Времени публикации статьи на хабре.



среда, 12 октября 2016 г., 1:33:53 UTC+5 пользователь man...@gmail.com написал:

man...@gmail.com

unread,
Oct 11, 2016, 9:47:37 PM10/11/16
to ClickHouse
На последней версии не воспроизводится?
Я проверил через clickhouse-client, всё Ок:

:) INSERT INTO myTable VALUES (1, '2016-10-11', [1, sipHash64('a')], [3, sipHash64('b')]), (2, '2016-10-11', [1, sipHash64('a')], [3, sipHash64('b')]);


INSERT INTO myTable VALUES


Exception on client:
Code: 53. DB::Exception: Type mismatch in IN or VALUES section: FixedString(32) expected, UInt64 got: (at row 1)

PS. Также замечу, что при наличии вычислимых выражений в VALUES, вместо быстрого парсинга данных, используется slow path с интерпретацией этих выражений, что может быть очень медленно.

Ruslan

unread,
Oct 12, 2016, 1:49:12 AM10/12/16
to ClickHouse
пока не ловил сегфолтов.
насчет вычислимых выражений в VALUES ясно, но на текущий момент в моем случае это не критично.


среда, 12 октября 2016 г., 6:47:37 UTC+5 пользователь man...@gmail.com написал:
Reply all
Reply to author
Forward
0 new messages