Алгоритм ротации indexdb

Первоначальное создание indexdb каталога:

  • После initial-запуска vmstorage, в каталоге {storageDataPath}/indexdb создаются три каталога с именами в виде хеша.

  • Каталоги предназначены для хранения indexdb.

  • Один из каталогов, назовём его Previous, предназначен для хранения «Предыдущего» indexd- Второй — Current, то есть хранит «Актуальную» indexd. Третий — Next, обычно это пустой каталог. Далее будет объяснена ротация indexdb в этих каталогах.

Предположим, что на данный момент retentionPeriod 6. Заканчивается первый retentionPeriod после первой инициализации vmstorage.

Сейчас состояние каталогов в indexdb-директории такое:

  • Previous-директория — пустая.

  • Current-директория — содержит огромный растущий indexdb.

  • Next-директория — пустая.

Например, через месяц, за час до retention-события:

  • Previous-директория — пустая.

  • Current-директория — содержит огромный indexdb, рост которого прекращается.

  • В Next-директории — начинается создание нового indexdb.

Наступило retention-событие:

  • Пустая Previous-директория удаляется.

  • Current-директория, содержащая огромный, но уже статичный, indexdb, становится Previous-директорией.

  • Next-директория, с маленьким новым растущим indexdb, становится Current-директорией.

  • Создаётся новая пустая Next-директория.

Через несколько месяцев после retention-собятия:

  • Previous-директория — содержит статичный indexdb с "историческими" данными.

  • Current-директория — содержит подросший и увеличивающийся "актуальный" indexdb.

  • Next-директория — пустая.

После второго retention-события:

  • Цикл повторится и indexdb в Previous-директории пропадёт вместе с директорией.

  • Current-директория c новым статичным, теперь «историческим», indexdb станет Previous-директорией.

  • А Next-каталог с новым растущим indexdb превратится в Current-директорию.

  1. То есть после окончания первого retentionPeriod’а после инициализации vmstorage’а, в директории indexdb будут присутствовать два индекса. Один статичный с "историческими" данными, а второй растущий с "актуальными" данными.

  2. На данный момент отсутствует какой-либо "правильный" способ уменьшения indexdb, и старого статичного indexdb, и нового актуального indexdb. Возможно https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7599 улучшит ситуацию.