Продолжаю заниматься отладкой и приведением в порядок 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()
self.edb_session.close()
logging.warning('[TotalStorageCounter] Failed to get total storage occupation: %s', e)
return
Исключение происходит в строке:
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;
Вторая причина в том, что в настройках БД отключена чувствительность к регистру, а в коде — нет. К примеру, если код:
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 — недостающие таблицы

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

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

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

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