Модуль для Drupal cacherouter и оценка его кода изнутри

Изучение модуля cacherouter версии 5.x-1.0-beta4 повергло меня в уныние.
Сама идея - того что разные таблицы кеша drupal стоит хранить каждую по своему - прекрасна. Учитывая специфику данных - что-то удобнее держать в файлах, что-то в памяти, что-то в кеше акселлераторов(APC, eaccelerator).

Однако реализация блокировок - а именно неприемлемая реализация именно для многопоточных систем - повергла меня в шок...
Пример кода из бекенда кеша APC для данного модуля:

/**
   * lock()
   *   lock the cache from other writes.
   *
   * @param none
   * @return string
   *   Returns TRUE on success, FALSE on failure
   */
  function lock() {
    // Lock once by trying to add lock file, if we can't get the lock, we will loop
    // for 3 seconds attempting to get lock.  If we still can't get it at that point,
    // then we give up and return FALSE.
    if (apc_add('lock_' . $this->name, TRUE) === FALSE) {
      $time = time();
      while (apc_add('lock_' . $this->name, TRUE) === FALSE) {
        if (time() - $time >= 3) {
          return FALSE;
        }
      }
    }
    return TRUE;
  }
  
  /**
   * unlock()
   *   lock the cache from other writes.
   *
   * @param none
   * @return bool
   *   Returns TRUE on success, FALSE on failure
   */
  function unlock() {
    return apc_delete('lock_' . $this->name); 
  }

То есть оно создает ключ и проверяет его существования. А если мы упремся на одновременное его создание? А если один процесс не увидит создания ключа пока создаст другой? Блокировка не сработает.
Короче такая штука приведет к непредсказуемым последствиям.

И в других бекендах кроме файлового в модуле можно увидеть такой же говнокод с блокировками.

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

В общем, я продолжаю разработку своей расширенной системы кеша, части которой уже выкладывал на drupal.ru.
Увы, система работ "криво-косо" мне не подходит.

]]>]]>

Комментарии

Код для 5ки абсолютно кривой, все изменения внесенные в 6ю версию там отсутствуют!

на бекендах flock задействован, семафоры, мютексы? ах нет? тада увы....

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Доступны HTML теги: <em> <strong> <blockquote> <p> <br />
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Вы не робот?
1 + 1 =
Решите простую задачку и введите результат. Например для 1+3 введите 4