Перейти к основному содержанию

Seafile 12 — не работает статистика и ошибка Failed to get total storage occupation: RepoSize

Seafile

Продолжаю заниматься отладкой и приведением в порядок Seafile после апгрейда до 12 версии. В логе seafevents.log вижу ошибку:

[2026-01-06 22:42:34] [WARNING] root:197 [TotalStorageCounter] Failed to get total storage occupation: RepoSize

seafile

Не факт что эта ошибка появилась после апгрейда до версии 12, возможно, она появилась ещё раньше. Но всё равно полечим.

И статистика хранилища показывает нули.

seafile

Вот кусок кода, выводящий данную ошибку:

try:
    RepoSize = SeafBase.classes.RepoSize
    VirtualRepo = SeafBase.classes.VirtualRepo
    OrgRepo = SeafBase.classes.OrgRepo

    stmt = select(func.sum(RepoSize.size).label("size"), OrgRepo.org_id).outerjoin(
                  VirtualRepo, RepoSize.repo_id == VirtualRepo.repo_id).outerjoin(
                  OrgRepo, RepoSize.repo_id == OrgRepo.repo_id).where(
                  VirtualRepo.repo_id == null()).group_by(OrgRepo.org_id)
    results = self.seafdb_session.execute(stmt).all()
except Exception as e:
    self.seafdb_session.close()
    self.edb_session.close()
    logging.warning('[TotalStorageCounter] Failed to get total storage occupation: %s', e)
    return
seafile

Исключение происходит в строке:

RepoSize = SeafBase.classes.RepoSize

Причин несколько. Табличка OrgRepo в базе данных seafile_db отсутствует. Это уже не первый раз, когда теряются таблички при апгрейде. Создаём таблицу вручную:

CREATE TABLE IF NOT EXISTS OrgRepo (
  id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  org_id INTEGER,
  repo_id CHAR(37),
  user VARCHAR(255),
  UNIQUE INDEX(org_id, repo_id),
  UNIQUE INDEX (repo_id),
  INDEX (org_id, user),
  INDEX(user)
) ENGINE=INNODB;
seafile

Вторая причина в том, что в настройках БД отключена чувствительность к регистру, а в коде — нет. К примеру, если код:

RepoSize = SeafBase.classes.RepoSize

заменить на

RepoSize = SeafBase.classes.reposize

и перезапустить сервисы, то ошибка изменится на:

[WARNING] root:197 [TotalStorageCounter] Failed to get total storage occupation: VirtualRepo

automap_base создает класс reposize (маленькими буквами), потому что чувствительность к регистру в настройках БД отключена. И это сильно меня печалит. Очень похоже на костыль в коде Seafile, потому что основной функционал прекрасно работает.

Не думаю, что править код питона правильно. Вероятно, мне нужно будет включить обратно поддержку чувствительности к регистру таблиц БД. И после вручную переименовать таблицы, как планировали их назвать разработчики Seafile.

Переименовываю таблицы

Переименовываю таблицы и добавляю недостающие:

Seafile 12 — недостающие таблицы

seafile

Таблиц мало, делаю руками.

seafile

Готово. В результате нашёл несколько неиспользуемых таблиц, оставил как есть, пусть живут.

Перезагружаю службы. Проверяю.

seafile

В логах ошибки больше нет.

seafile

И статистика заработала.

В базе seahub не переименовал таблички, стали автоматически создаваться дубли. Пришлось вручную переносить данные и удалять старые таблицы. Заметил что в новых таблицах структура может отличаться. Ещё один камень в огород разработчиков.

Думаю, следует рассмотреть вопрос разворачивания нового Seafile (уже версии 13 в докере) и переносе в него данных с нуля. Но это уже не сегодня.

Ссылки

Теги

 

Похожие материалы

Seafile сервер для Linux версия 7.0.5

23 сентября 2019 года вышла новая версия сервера Seafile для Linux — 7.0.5. Релиз доступен для скачивания. До этого был успешный релиз 7.0.4. На этот раз попробую обновиться дальше до версии 7.0.5.

Seafile сервер для Linux версия 7.0.2

13 июня 2019 года вышла новая версия сервера Seafile для Linux — 7.0.2. Релиз уже не помечен как beta. Прошлый раз я пробовал обновить Seafile Server 6.3 до версии 7.0.0, но были проблемы и прошлось откатиться. На этот раз релиз получше. Обновлённый до 7.0.2 сервер заработал без ошибок. Да, да, прежде чем написать новость, я проверил версию на себе. Интерфейс стал удобнее и приятнее.