Bug 22606 - ошибка блокировки файлов
Summary: ошибка блокировки файлов
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: squidmill (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: manowar@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
: 26192 (view as bug list)
Depends on:
Blocks:
 
Reported: 2009-12-23 17:38 MSK by Timur Batyrshin
Modified: 2013-07-16 12:32 MSK (History)
6 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Timur Batyrshin 2009-12-23 17:38:10 MSK
Если при запущенном в резидентном режиме squidmill на сколько нибудь нагруженном squid-е делать запросы к базе, очень скоро они перестают проходить с ошибкой:

# squidmill -d /var/log/squid/squidmill.db -r -i
*** ERROR IN ##execute-program -- This object was raised: "database is locked"

После перезапуска резидентной части все снова начинает работать до повтора этой ситуации.

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

Система: p5
[root@alterator squid]# rpm -q squidmill libsqlite3
squidmill-2.0-alt4
libsqlite3-3.6.19-alt1

[root@alterator squid]# cat /etc/sysconfig/squidmill
SQUIDLOGUSER=squid
SQUIDLOGFILE=/var/log/squid/access.log

Squid и squidmill запускаются в отдельных контейнерах. Каталог с логами сквида подмонтирован между контейнерами через -o bind.
Все запуски squidmill (резидентный и ручной для отчета) производятся в одном и том же контейнере.
Comment 1 manowar@altlinux.org 2009-12-23 22:34:46 MSK
Я исправил эксклюзивную транзакцию на разделяемую. Надеюсь, что это поможет.
Исправление лежит тут: git://git.altlinux.org/people/manowar/packages/squidmill.git

В Сизиф пока не собирается, а без него нельзя обновить и в ветках.
Comment 2 Timur Batyrshin 2009-12-24 12:05:33 MSK
Нет, такая же ситуация.

По-моему, дело не в этом:
Ключ -R (округление) в инитскрипте не используется, а приведенный патч меняет поведение только функции round-log.

bulk-insert же отрабатывает без отдельной транзакции, а он и становится проблемой.

В доказательство этого можно запустить squidmill в follow mode без ключа -B 1.
В этом случае запись на диск (и выполнение bulk-insert) производится гораздо реже, и у меня воспроизвести ошибку описанным образом сходу не получилось.
Comment 3 Timur Batyrshin 2009-12-24 12:10:47 MSK
(В ответ на комментарий №2)
> В доказательство этого можно запустить squidmill в follow mode без ключа -B 1.
> В этом случае запись на диск (и выполнение bulk-insert) производится гораздо
> реже, и у меня воспроизвести ошибку описанным образом сходу не получилось.

Ну точнее, воспроизводится все-таки, но вероятность этого падения становится гораздо меньше, т.к. пишет на диск реже.
Comment 4 manowar@altlinux.org 2009-12-24 12:25:21 MSK
Слушай, а можешь запустить сборщик в foreground и посмотреть, есть ли сообщение об ошибке, когда возникает .db-journal?
Comment 5 Repository Robot 2010-02-01 15:50:52 MSK
squidmill-2.0-alt5 -> sisyphus:

* Wed Dec 23 2009 Paul Wolneykien <manowar@altlinux> 2.0-alt5

- Use immediate transactions (closes: 22606)
Comment 6 sproutella 2010-06-01 20:11:21 MSD
Положите squidmill-2.0-alt5 в p5/5.1, пожалуйста.
Comment 7 manowar@altlinux.org 2010-06-02 13:32:08 MSD
Я собрал для 5.1. Попросите cas@ скопировать в p5 -- у меня прав на это нет.
Comment 8 ZMyk 2012-02-27 11:42:34 MSK
# uname -a
В 6 платформе ошшибка вернулась
Linux rasib-srv.rasib 2.6.32-el-smp-alt27 #1 SMP Tue Sep 20 19:38:45 UTC 2011 x86_64 GNU/Linux

# squidmill -d /var/log/squid/squidmill.db -r -i
*** ERROR IN ##execute-program -- This object was raised: (sqlite3-err 5 "database is locked")

# rpm -q squidmill libsqlite3
squidmill-2.1-alt0.M60P.1
libsqlite3-3.7.6.2-alt2

После перезапуска работает, но валится с завидной периодичностью.
Comment 9 manowar@altlinux.org 2012-02-27 15:10:31 MSK
Да, я в курсе, что проблема есть. Единственный способ её побороть, как мне кажется, — это самостоятельно организовать доступ к БД через единственный поток. Сейчас между делом занимаюсь .тем, что добавляю поддержку доменных сокетов в Gambit. После этого можно будет через такой сокет обслуживать несколько клиентов, и ошибок блокировки не будет.
Comment 10 manowar@altlinux.org 2012-03-16 03:02:21 MSK
Тестируем осторожно http://git.altlinux.org/tasks/66371/ . Пока без доменных сокетов, но зато с небольшим исправлением в gambit-sqlite3 и самом squidmill.
Comment 11 manowar@altlinux.org 2012-03-16 03:08:25 MSK
Пакет gambit-sqlite3 тоже нужно обновить. Из Сизифа.
Comment 12 manowar@altlinux.org 2012-03-16 05:13:51 MSK
Также можно попробовать новый alterator-squidmill и новые переводы интерфейса к нему (alterator-l10n).
Comment 13 manowar@altlinux.org 2012-03-16 05:21:28 MSK
*** Bug 26192 has been marked as a duplicate of this bug. ***
Comment 14 ZMyk 2012-03-19 09:07:08 MSK
(В ответ на комментарий №10)
> Тестируем осторожно http://git.altlinux.org/tasks/66371/ . Пока без доменных
> сокетов, но зато с небольшим исправлением в gambit-sqlite3 и самом squidmill.

Обновил из сизифа, теперь часто в альтераторе стало вылетать:
"key=wrong-type-arg, args=(#f "Wrong type (expecting ~A): ~S" ("pair" ())
(()))"
При # squidmill -d /var/log/squid/squidmill.db -r -i бывает задумывается на долго, но в итоге показывает статистику.
Comment 15 manowar@altlinux.org 2012-03-22 17:34:33 MSK
(В ответ на комментарий №14)
> (В ответ на комментарий №10)
> > Тестируем осторожно http://git.altlinux.org/tasks/66371/ . Пока без доменных
> > сокетов, но зато с небольшим исправлением в gambit-sqlite3 и самом squidmill.
> 
> Обновил из сизифа, теперь часто в альтераторе стало вылетать:
> "key=wrong-type-arg, args=(#f "Wrong type (expecting ~A): ~S" ("pair" ())
> (()))"

  Совсем забыл, что в Альтераторе у нас нельзя писать сообщение об ошибке, если часть данных уже ушла… Исправлено в alterator-squidmill.git=v2.0-alt5. Теперь, в случае ошибки squidmill, должно появляться нормально сообщение с кодом ошибки, а в /var/log/alteratord.log должно быть записана её причина.

> При # squidmill -d /var/log/squid/squidmill.db -r -i бывает задумывается на
> долго, но в итоге показывает статистику.

  Вот на это «задумывается, но показывает» я и понадеялся. Через Альтератор вызывается та же самая функция. Посмотрите, на всякий случай.
Comment 16 manowar@altlinux.org 2012-03-22 17:36:54 MSK
И версии gambit-sqlite и squidmill, какие у вас установлены, напишите, пожалуйста.
Comment 17 ZMyk 2012-03-23 05:50:18 MSK
(В ответ на комментарий №16)
> И версии gambit-sqlite и squidmill, какие у вас установлены, напишите,
> пожалуйста.

gambit-4.6.3-alt1
gambit-sqlite3-1.2-alt1
squidmill-2.2-alt1
Comment 18 manowar@altlinux.org 2012-03-23 15:41:36 MSK
(В ответ на комментарий №17)
> (В ответ на комментарий №16)
> > И версии gambit-sqlite и squidmill, какие у вас установлены, напишите,
> > пожалуйста.
> 
> gambit-4.6.3-alt1
> gambit-sqlite3-1.2-alt1
> squidmill-2.2-alt1

  Ага. С новым alterator-squidmill, в случае неудачной выборки из БД, вместо непереводимой игры слов, должно появляться сообщение «Squidmill error (<код>)». У вас так (и какой код)?
Comment 19 Andrey Cherepanov 2012-11-29 11:56:49 MSK
В p6 надо бэкпортировать в нынешнем виде?
Comment 20 manowar@altlinux.org 2012-11-29 23:26:59 MSK
Пока деваться некуда: до реализации unit-сокетов для Gambit я ещё не добрался. Но сизифная версия не должна быть хуже p6, может быть даже она чем-то лучше: я добавил переоткрытие БД в случае ошибки.
Comment 21 Andrey Cherepanov 2012-11-30 11:00:52 MSK
(В ответ на комментарий №20)
> Пока деваться некуда: до реализации unit-сокетов для Gambit я ещё не добрался.
> Но сизифная версия не должна быть хуже p6, может быть даже она чем-то лучше: я
> добавил переоткрытие БД в случае ошибки.
Хорошо, бэкпортирую пока что есть, ждём полной реализации.
Comment 22 Andrei 2013-02-08 12:07:31 MSK
Ребят, может перенесете в основной репозиторий исправленные пакеты? А то ведь приходится вручную из сизифа подтаскивать.
Comment 23 manowar@altlinux.org 2013-02-08 13:15:05 MSK
  А что, сизифная версия работает стабильно?
Comment 24 Andrei 2013-02-08 13:47:24 MSK
Ну она  хотя бы работает. На одном сервере аптайм уже 67 дней. Версия лежащая в репозитории через каждые 5 минут умирает. Мне только одна проблема мешает - левые IP в статистике, а остальное - работает.
Comment 25 manowar@altlinux.org 2013-02-08 13:51:53 MSK
  Хорошо, сейчас отправлю в p6.

  А с "левыми" адресами нужно разобраться: вы утверждаете, что в /var/log/squid/access.log таких адресов нет, а в squidmill они есть?
Comment 26 manowar@altlinux.org 2013-02-08 14:00:04 MSK
  Позвольте, но версии "v2.2-alt0.M60P.2" и "v2.2-alt3" отличаются только адаптацией к systemd, а она не нужна в p6. Ну плюс ещё сизифная версия собрана более новым gambit, но это вряд ли принципиально. Расскажите, пожалуйста, что и как вы перенесли из Сизифа на ту машинку, которая уже 67 дней работает.
Comment 27 Andrei 2013-02-08 14:23:27 MSK
(В ответ на комментарий №26)
>   Позвольте, но версии "v2.2-alt0.M60P.2" и "v2.2-alt3" отличаются только
> адаптацией к systemd, а она не нужна в p6. Ну плюс ещё сизифная версия собрана
> более новым gambit, но это вряд ли принципиально. Расскажите, пожалуйста, что и
> как вы перенесли из Сизифа на ту машинку, которая уже 67 дней работает.

Сервер, раздающий интернет. 
Проблема: постоянно падает squidmill, не работает статистика.
Решение: В репозитории прописываю sisyphus, устанавливаю оттуда 
squidmill
alterator-squidmill
gambit-4.6.3-alt1
gambit-sqlite3-1.2-alt1

Все начинает работать отлично.
Comment 28 Andrei 2013-02-08 14:24:41 MSK
(В ответ на комментарий №25)
>   Хорошо, сейчас отправлю в p6.
> 
>   А с "левыми" адресами нужно разобраться: вы утверждаете, что в
> /var/log/squid/access.log таких адресов нет, а в squidmill они есть?

Верное замечание, сейчас детально смотрю логи - там есть упоминания об этих адресах. Теперь надо понять как они там оказались.
Comment 29 Andrei 2013-02-14 16:28:26 MSK
Ну так как на счет обновления библиотек в репозитариях?
Comment 30 Andrey Cherepanov 2013-02-14 17:02:19 MSK
(В ответ на комментарий №29)
> Ну так как на счет обновления библиотек в репозитариях?
Тестирую.
Comment 31 Andrey Cherepanov 2013-02-18 14:20:50 MSK
Так как gambit собирается бустрапом, с каждой предыдущей версии, собрать быстро не получится.
Comment 32 manowar@altlinux.org 2013-06-28 22:32:45 MSK
  squidmill 2.4
Comment 33 Andrey Cherepanov 2013-07-16 12:32:57 MSK
(В ответ на комментарий №29)
> Ну так как на счет обновления библиотек в репозитариях?
Пакет отправлен в p6 и p7. Во время тестирования выяснилось, что в случае запуска и сразу же остановки службы squidmill:

  # service squidmill status
  squidmill is dead, but subsystem is locked

нужно удалить файл с базой данных:

  rm -f /var/log/squid/squidmill.db

(при этом старые данные статистики будут утеряны!). Обычно это не критично.