Bug 22606 - ошибка блокировки файлов
: ошибка блокировки файлов
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/squidmill)
: unstable
: all Linux
: P3 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2009-12-23 17:38 by
Modified: 2013-07-16 12:32 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2009-12-23 17:38:10
Если при запущенном в резидентном режиме 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 From 2009-12-23 22:34:46 -------
Я исправил эксклюзивную транзакцию на разделяемую. Надеюсь, что это поможет.
Исправление лежит тут:
git://git.altlinux.org/people/manowar/packages/squidmill.git

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

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

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

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

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

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

- Use immediate transactions (closes: 22606)
------- Comment #6 From 2010-06-01 20:11:21 -------
Положите squidmill-2.0-alt5 в p5/5.1, пожалуйста.
------- Comment #7 From 2010-06-02 13:32:08 -------
Я собрал для 5.1. Попросите cas@ скопировать в p5 -- у меня прав на это нет.
------- Comment #8 From 2012-02-27 11:42:34 -------
# 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 From 2012-02-27 15:10:31 -------
Да, я в курсе, что проблема есть. Единственный способ её побороть, как мне
кажется, — это самостоятельно организовать доступ к БД через единственный
поток. Сейчас между делом занимаюсь .тем, что добавляю поддержку доменных
сокетов в Gambit. После этого можно будет через такой сокет обслуживать
несколько клиентов, и ошибок блокировки не будет.
------- Comment #10 From 2012-03-16 03:02:21 -------
Тестируем осторожно http://git.altlinux.org/tasks/66371/ . Пока без доменных
сокетов, но зато с небольшим исправлением в gambit-sqlite3 и самом squidmill.
------- Comment #11 From 2012-03-16 03:08:25 -------
Пакет gambit-sqlite3 тоже нужно обновить. Из Сизифа.
------- Comment #12 From 2012-03-16 05:13:51 -------
Также можно попробовать новый alterator-squidmill и новые переводы интерфейса к
нему (alterator-l10n).
------- Comment #13 From 2012-03-16 05:21:28 -------
*** Bug 26192 has been marked as a duplicate of this bug. ***
------- Comment #14 From 2012-03-19 09:07:08 -------
(В ответ на комментарий №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 From 2012-03-22 17:34:33 -------
(В ответ на комментарий №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 From 2012-03-22 17:36:54 -------
И версии gambit-sqlite и squidmill, какие у вас установлены, напишите,
пожалуйста.
------- Comment #17 From 2012-03-23 05:50:18 -------
(В ответ на комментарий №16)
> И версии gambit-sqlite и squidmill, какие у вас установлены, напишите,
> пожалуйста.

gambit-4.6.3-alt1
gambit-sqlite3-1.2-alt1
squidmill-2.2-alt1
------- Comment #18 From 2012-03-23 15:41:36 -------
(В ответ на комментарий №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 From 2012-11-29 11:56:49 -------
В p6 надо бэкпортировать в нынешнем виде?
------- Comment #20 From 2012-11-29 23:26:59 -------
Пока деваться некуда: до реализации unit-сокетов для Gambit я ещё не добрался.
Но сизифная версия не должна быть хуже p6, может быть даже она чем-то лучше: я
добавил переоткрытие БД в случае ошибки.
------- Comment #21 From 2012-11-30 11:00:52 -------
(В ответ на комментарий №20)
> Пока деваться некуда: до реализации unit-сокетов для Gambit я ещё не добрался.
> Но сизифная версия не должна быть хуже p6, может быть даже она чем-то лучше: я
> добавил переоткрытие БД в случае ошибки.
Хорошо, бэкпортирую пока что есть, ждём полной реализации.
------- Comment #22 From 2013-02-08 12:07:31 -------
Ребят, может перенесете в основной репозиторий исправленные пакеты? А то ведь
приходится вручную из сизифа подтаскивать.
------- Comment #23 From 2013-02-08 13:15:05 -------
  А что, сизифная версия работает стабильно?
------- Comment #24 From 2013-02-08 13:47:24 -------
Ну она  хотя бы работает. На одном сервере аптайм уже 67 дней. Версия лежащая в
репозитории через каждые 5 минут умирает. Мне только одна проблема мешает -
левые IP в статистике, а остальное - работает.
------- Comment #25 From 2013-02-08 13:51:53 -------
  Хорошо, сейчас отправлю в p6.

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

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

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

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

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

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