Завершение (милостиво) процесса MonetDB в R

Я использую MonetDB на различных платформах (например, OS X и Linux Centos) с блестящим приложением.

Трудно постоянно отключать БД, поэтому в настоящее время мой подход заключается в том, чтобы завершить блестящее приложение, не отключая БД.

Это означает, что блестящее приложение перед доступом к данным пытается остановить любой "старый" процесс с помощью:

monetdb.server.stop(pid)

Из источника команды я понимаю, что она в основном убивает процесс, связанный с pid (что означает, помимо прочего, что пользователь, запускающий приложение, должен иметь доступ к kill функция).

Иногда это работает нормально, но иногда, когда я пытаюсь запустить MonetDB снова, я получаю

!FATAL: GDKlockHome: Database lock '.gdk_lock' denied

Warning in socketConnection(host = host, port = port, blocking = TRUE, open = "r+b",  :
  localhost:50000 cannot be opened
Error in socketConnection(host = host, port = port, blocking = TRUE, open = "r+b",  : 
  cannot open the connection

Есть ли способ избежать этой ошибки (без принудительного отключения базы данных все время, когда я использую ее в "блестящем")?

1 ответ

Решение

MonetDB действительно может занять пару секунд, чтобы завершить работу. Если новый процесс запущен на том же dbfarm каталог тем временем, вы получите !FATAL: GDKlockHome: Database lock '.gdk_lock' denied ошибка. Я рассматриваю возможность добавления wait параметр для monetdb.server.stop,

Так что пока стоит немного подождать, прежде чем сервер снова запустится. В противном случае рассмотрите возможность использования monetdbd управлять серверами MonetDB.

Другие вопросы по тегам