Добавить в корзинуПозвонить
Найти в Дзене

Seafile 12 — не работает статистика

Продолжаю заниматься отладкой и приведением в порядок Seafile после апгрейда до 12 версии. В логе seafevents.log вижу ошибку: [2026-01-06 22:42:34] [WARNING] root:197 [TotalStorageCounter] Failed to get total storage occupation: RepoSize Не факт что эта ошибка появилась после апгрейда до версии 12, возможно, она появилась ещё раньше. Но всё равно полечим. И статистика хранилища показывает нули. Вот кусок кода, выводящий данную ошибку: 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()
se

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

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

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

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

-3

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

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
-4

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

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;
-5

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

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 — недостающие таблицы

-6

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

-7

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

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

-8

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

-9

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

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

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

Источник:

Seafile 12 — не работает статистика и ошибка Failed to get total storage occupation: RepoSize | internet-lab.ru

Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.