Русский Gentoo

Yad: принцип действия

Нынешний проект сервера разделен на три части:

Акцентируется, что пользователь в идеале не должен почувствовать разницы при переходе на проектируемый сервер, то есть он может использовать сценарий getdelta.sh без особых изменений в настройке.

Веб-сервер

Роль первого звена выполняет php-скрипт deltup.php, принимающий следующие параметры

Получив все эти данные и проверив на правильность, deltup.php, осуществляет поиск в базе данных на предмет существующей дельты. Если есть, то, выбрав из базы местонахождение дельты, он возвращает его пользователю. После он увеличивает счетчик обращений к дельте и устанавливает время обращения к записи.

Если создание дельты по каким-то причинам закончилось неудачей, то в статус демоном заносится failed с пояснением причины неудачи. При следующем обращении пользователь получит файл <имя_дельты>.failed с содержимым, поясняющим неудачу.

Если запись о дельте не найдена, то в базу заносятся данные, необходимые для ее создания и присваивается статус queued. Соотвественно пользователю возвращается файл queued с содержимым «Creation of delta queued at $time».

Также на веб-сервере возможно ведение статистики.

База данных

Содержимое этого раздела в обсуждении. Черновой образец дампа MySQL находится в репозитории

База разделена на две таблицы:

deltas

distfiles

Демон

Содержимое этого раздела в обсуждении.

Алгоритм демона имеет следующий вид.

  1. Выбираем из таблицы дельты в статусе «дельта в очереди» и «дельта формируется», последняя дата запроса которой меньше, чем текущая более чем на N секунд.
  2. Берем очередную строку выборки и если ее статус «дельта в очереди» — присваеваем текущим значением даты и врмени дату последнего запроса и статус «дельта формируется».
  3. Ищем пакеты have и want.
    • Если оба пакета в статусе «пакет готов», то переходим к п. 4;
    • Если хотя бы один из пакетов в статусе «пакет запрещен», то ставим у дельты статус «дельта запрещена», переходим к п. 5;
    • Если пакет найден — создаем строку в таблице packages, прописываем текущим значением даты и времени дату запроса и ставим в статус «пакет в очереди на скачивание». Если пакет в статусе «пакет скачивается» или «пакет в очереди на скачивание» — пропускаем их. Переходим к п. 5.
  4. Запускаем формирование дельты, после ее окончания пишет статус «дельта готова» или «дельта запрещена» в зависимости от результата.
  5. Если в выборке есть еще строки, то переходим к п. 2, иначе выдерживаем timeout K и к п. 1.