Как воспроизвести файл журнала TP при получении ошибки wsfull даже для -11! (- 2; `path) - PullRequest
0 голосов
/ 08 июля 2020

Я получаю wsfull error даже при попытке получить количество сообщений из файла TPlog, используя:

-11!(-2;`:/uts/tplog_2020.07.07) /- wsfull 

Как мы можем получить количество сообщений в файле tplog в этом случае? Можно ли в этом случае загружать сообщения кусками только в раздел, чтобы отобразить файл tplog? Когда я пытаюсь получить несколько последних сообщений из таблицы, выдается сообщение «Ошибка сегментации»

-11!(1000000;`:/uts/tplog_2020.07.07); /- output - 88471241
-5#trade /- Segmentation Fault, session closed

Первое, что я предполагаю, это то, что файл tplog поврежден. Будет большим подспорьем, если кто-нибудь скажет мне, как мы можем получить ошибочное сообщение из файла tplog, которое вызывает ошибку типа?

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

Следуя обсуждениям в комментариях, я начинаю думать, что что-то не так с тем, как вы записываете фрагменты в файл журнала. Предполагается, что воспроизведение 100 фрагментов вернет 100, воспроизведение 200 фрагментов должно вернуть 200 фрагментов (при условии, что файл журнала правильно сформирован). Вот функция, которую вы можете использовать для проверки отдельных фрагментов:

{`counter set 0;.z.ps:{$[counter=desiredChunk;`savedChunk set x;counter+:1]};-11!(1+desiredChunk::y;x);.z.ps:{value x}}[`:tplog2020.07.01;5]

Передайте файл журнала и фрагмент, который вы хотите извлечь (начиная с 0 для первого фрагмента). После того, как вы запустите это, у вас будет глобальная переменная «savedChunk», которая содержит ваш кусок и которую вы можете проверить. Отдельный фрагмент должен выглядеть так:

q)savedChunk
`upd
`myTable
(0D05:34:00.186409000;`foo;1.23;1234;1b;.....)

/or if you write to the tplog in batches it could look like:
q)savedChunk
`upd
`myTable
(0D05:34:00.186409000 0D05:34:00.186409000;`foo`bar;1.23 4.56;1234 5678;10b;.....)

Я бы посмотрел на ваши фрагменты, начиная с нулевого фрагмента, чтобы убедиться, что они правильно сформированы. Затем посмотрите на фрагмент 12683, чтобы убедиться, что там что-то не так.

Возможно ли, что ваши фрагменты содержат более одного обновления / таблицы? (это была бы специальная реализация, которую я никогда раньше не видел).

0 голосов
/ 09 июля 2020

Какую версию KDB вы используете?

В 4.0 они добавили для этого проверки целостности.

"Дополнительные проверки целостности были добавлены в потоковую передачу execute -11! X, чтобы избежать wsfull или segfault на поврежденных / неполных файлах журнала. "

https://code.kx.com/q/releases/ChangesIn4.0/#miscellaneous

...