Зависает обновление прав доступа

Главные вкладки

Аватар пользователя md5@drupal.org md5@drupal.org 23 октября 2009 в 14:06

Зависает обновление прав доступа после установки Domain access. Обновление проходит как бы на 85-99%, но, судя по таблице node_access, не доходит даже до половины. Самих нод порядка двух тысяч, в таблице node_access затыкается на ~450-550. При отключенном модуле обновление проходит «на ура» (ну а чё там тормозить, если добавляется аж одна запись Smile ). Все ноды заведены админом сайта (user/1). Для друпала на хостинге установлено 128М памяти и максимальное время выполнения 300 секунд (по идее, этого достаточно — для обновления такого количества нод, думаю, более чем достаточно; тем паче, до затыка добегает секунд за 10-15).

Копание в issues модуля на друпал.орг дало пару тредов с такой же проблемой и нулевым результатом — разработчик чуть ли не кармой клянется, что косяк не его. Больше не включено ни одного модуля, который бы теоретически мог влиять на распределение прав доступа. Аналогичные проблемы, но с другими модулями а-ля OG (у меня отсутствует за ненадобностью), возникали и у других (см. тот же друпал.орг), но никаких решений я так и не нашел.

Может кто знает, че делать в таком случае? Модуль реально необходим, и достойных альтернатив в моём случае ему нет.

P.S. Интересный нюанс. Поковырявшись в batch.inc, сменил этот код

<?php
function _batch_start() {
  if (isset(
$_COOKIE['has_js']) && $_COOKIE['has_js']) {
    return 
_batch_progress_page_js();
  }
  else {
    return 
_batch_progress_page_nojs();
  }
}
?>

на этот

<?php
function _batch_start() {
  if (isset(
$_COOKIE['has_js']) && $_COOKIE['has_js']) {
    return 
_batch_progress_page_nojs();
  }
  else {
    return 
_batch_progress_page_nojs();
  }
}
?>

т.е. в любом случае вызывалась страничка обновления прав доступа с отключенным джаваскриптом. При этом обновление благополучно перевалило за 100% и продолжало расти, но в node_access записей не добавлялось (опять затыкалось на тех же ~450-550).

Комментарии

Аватар пользователя gerboss gerboss 23 октября 2009 в 14:27

а посмотреть, на какой ноде зависает процесс добавления в node_access и поковыряться с этой нодой? или удалить ее совсем?

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

Аватар пользователя md5@drupal.org md5@drupal.org 23 октября 2009 в 15:06

gerboss
В том-то и дело, что нода ничем не отличается от остальных — всё то же. Видимых различий я, во всяком случае, не нашел. Вариант с удалением ноды отпадает.

Аватар пользователя gerboss gerboss 23 октября 2009 в 15:10

хотя бы для тестирования.
сделать бекап БД, удалить эту ноду, проверить обновление доступа и вернуть все из бекапа.

Аватар пользователя md5@drupal.org md5@drupal.org 23 октября 2009 в 18:33

хм… после удаления ноды всё прошло гладко. Но без цистерны дегтя к нашей бочке мёда, как всегда, не обошлось — не отображаются некоторые типы контента, причем по прямому доступу к ним сама нода отображается, а вот при запросе db_query() — показывает кукиш.

Аватар пользователя md5@drupal.org md5@drupal.org 23 октября 2009 в 19:45

Глюк оказался с конструкцией db_query(db_rewrite_sql($sql)). Если убрать db_rewrite_sql(), который был написан просто по привычке (всё равно запрос был прямым, без ухищрений), то всё работает, и права доступа на вывод не влияют (да и не должны, собственно). Или я чего-то пропустил, или в обновлении 6.14 параметры в db_rewrite_sql() стали обязательными?

Впрочем, это уже мелочи.

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