Модуль для 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. Увы, система работ "криво-косо" мне не подходит.

Комментарии