Bug 28501 - Некорректное завершение процесса mongodb в init-скрипте
Summary: Некорректное завершение процесса mongodb в init-скрипте
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: mongo-server (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Vitaly Kuznetsov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-02-03 17:13 MSK by Dank Bagryantsev
Modified: 2013-11-23 14:58 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dank Bagryantsev 2013-02-03 17:13:55 MSK
При попытке остановить mongodb командой
service mongod stop
остается файл /var/lib/mongo/mongod.lock
Соответственно, при следующем старте, mongodb считает, что было некорректное завершение работы. Поэтому отказывается стартовать и требует провести процедуру восстановления.
Судя по всему, действительно происходит некорректный останов mongodb, т.к. при корректном выключении, файл /var/lib/mongo/mongod.lock должен удаляться. 
Возможно посылается не тот сигнал процессу из init-скрипта.
Детали, как можно корректно остановить mongodb можно найти здесь:
http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/
Пожалуйста, измените init-скрипт, чтобы mongodb корректно останавливался.
Спасибо!
Comment 1 Dank Bagryantsev 2013-02-03 17:36:22 MSK
Небольшая поправка:
Файл /var/lib/mongo/mongod.lock должен не удаляться, а обнуляться при корректном завершении mongodb.
Comment 2 Dank Bagryantsev 2013-02-03 17:55:10 MSK
Похоже, ошибка нестабильная и чаще проявляется на больших базах (у меня на > 10Гб)
И, возможно, зависит от интенсивности операций чтения/записи во время останова.
Comment 3 Dank Bagryantsev 2013-05-18 02:04:20 MSK
Ошибка, скорее всего, действительно связана с init-скриптом mongodb в ALT Linux.
На больших и интенсивно используемых базах, корректный останов mongodb происходит в течении 5-15 сек (у меня так, по крайней мере).
Но init-скрипт убивает процесс mongodb, не дожидаясь конца останова.
Отсюда и проблема.
Временный "костыль", позволяющий обойти эту проблему:
В файле /etc/init.d/mongod 
заменить функцию
stop()
{
        stop_daemon --lockfile "$LOCKFILE" -- mongod
        RETVAL=$?
        return $RETVAL
}

на что-то типа такого:
stop()
{
        /usr/bin/mongod --shutdown $OPTIONS
        RETVAL=$?
        rm $LOCKFILE
        return $RETVAL
}

И желательно в
restart()
{
        stop
        start
}
между stop и start вставить какую-то задержку, типа sleep 5
т.к. иногда mongodb не успевает отдать занятый bind

Я понимаю, что "костыль" корявый, но по крайней мере - это работает более корректно.
Comment 4 Slava Dubrovskiy 2013-11-23 14:58:10 MSK
Fixed in 2.4.8-alt1