параллельные вызовы menu_rebuild после drush updatedb - PullRequest
1 голос
/ 01 июня 2011

У кого-нибудь есть идеи, почему после успешного обновления базы данных можно было сделать несколько вызовов menu_rebuild?Прежде чем прыгнуть в кроличью нору?

ОБНОВЛЕНИЕ:

Чтобы уточнить, что я использую Pressflow.

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

ОБНОВЛЕНИЕ: чтобы избежать этого, существует ли нехакерский способ увеличить время ожидания блокировки, используемое menu_rebuild?Она вызывает эту функцию без параметров, по умолчанию 30 с, и мы хотели бы увеличить это.

Ответы [ 2 ]

0 голосов
/ 06 июня 2011

У нас была похожая проблема из-за странного состояния, вызванного admin_menu 1.6, очисткой кеша с помощью drush и последующей загрузкой страницы.

Если вы используете admin_menu 1.6 (и, возможно, старше),Я бы порекомендовал отключить его, чтобы увидеть, если это решит проблему.Версия 1.6 admin_menu пытается перестроить меню в hook_footer, но делает это без использования функций блокировки D6.Так что, если у вас большое меню, а перестройка занимает некоторое время, то каждое нажатие от пользователя-администратора будет запускать новую регенерацию меню, совпадающую с предыдущей, вызывая множество ошибок.

Просто заметьте, когда выочистить кеш через интерфейс Drupal, эта проблема не возникает.Это только когда вы очищаете кеш с помощью drush, что, как я полагаю, произойдет при обновлении базы данных.

Если отключение исправит проблему, вам следует подумать об обновлении до версии 3.x admin_menu.

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

0 голосов
/ 01 июня 2011

Drupal 6, верно?

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

Например, если я нажимаю «очистить все кэши», и это занимает несколько секунд, я открываю второй браузер, а также просматриваю наш сайт, открываю третий и т. Д., В зависимости от того, сколько времени это займет, и последовательность может вызвать несколько перестроений меню.

После сброса все выглядит нормально после первой ошибки.

Вот пара длинных постов, которые я не полностью прочитал, которые объясняют некоторые проблемы параллелизма:

http://drupal.org/node/246653

http://drupal.org/node/251792

...