Ремонт дерева
Следует отчетливо понимать разницу между резервированием базы данных и ремонтом дерева. Резервирование базы данных должно предотвратить аварии базы данных, такие как повреждение таблиц, которые делают Смерека полностью неработоспособной. При резервировании БД все таблицы архивируются «как есть», вместе со всеми возможными логическими ошибками.
Ремонт дерева заключается в поиске логических ошибок. Для этого нужно, чтобы БД была работоспособной. Для проведения ремонта необходимо зарегистрироваться в системе с правами глобального администратора и в персональном кабинете щелкнуть ссылку «Ремонт дерева».
Далее следует отметить, какие типы проверок следует выполнить и задать режим работы – «Диагностика» или «Ремонт». По команде «Диагностика» выполняется только подсчет числа повреждений, а команда «Ремонт» не только обнаруживает, но и исправляет обнаруженные повреждения.
Поиск потерянных вершин
Утерянной считается вершина, для которой атрибут parent не совпадает ни с каким из значений поля id в таблице nodes. Такая вершина и вся ее крона не будет корректно отображаться Смерекой. Ремонт заключается в том, что потерянные вершины присоединяются как дочерние к служебной вершины «Корзина». Там их можно просмотреть и удалить или переместить в нужную позицию.
Поиск циклических ссылок
Цикл ссылок (или рекурсивные ссылки) образуется, когда вершина-предок своим атрибутом parent указывает на одну из своих дочерних вершин. В простейшем случае вершина «У попа» имеет предком вершину «была собака», а вершина «была собака» имеет предком вершину «У попа». Циклические ссылки угрожают Смереке крахом. Ремонт заключается в том, что цепочка разрывается в произвольном месте и принудительно определенная корневая вершина присоединяется к Корзине.
Восстановление порядка сортировки
Ремонт заключается в том, что атрибутам seqpos значения присваиваются заново. Эта операция иерархическая и может выполняться не для всего дерева, а для кроны какой-либо вершины.
Проверка уникальности символьных имен
Если две вершины-сестры имеют одинаковые символьные имена, то только одна из них будет доступной при использовании символьной адресации (при числовой адресацией доступны обе). При этом нельзя заранее определить, какая именно вершина будет выбрана. Ремонт заключается в том, что обнаруженным дубликатам присваиваются числовые суффиксы 0..9, 10..99 и т.д. Если символьное имя имеет максимально допустимую длину, числовые суффиксы заменяют последние символы имени. Эта операция иерархическая и может выполняться не для всего дерева, а для кроны какой-либо вершины.
Поиск потерянных атрибутов
Утерянным считается атрибут, для которого поле nodeid не равно никакому из значений поля id в таблице nodes. Такой атрибут никогда не будет использован. Быстрый ремонт заключается в удалении всех таких записей. Консервативный ремонт заключается в присоединении этих атрибутов к вершине «Корзина». Там их можно просмотреть и удалить или как-то использовать.
Проверка целостности ссылок
Целостность ссылок заключается в том, что все поля, значения которых являются ссылками на вершины, имеющие соответствующие записи в таблице nodes. Ремонт заключается в замене всех недействительных ссылок на nil.
Другие ошибки
Корзина: субдомен должен иметь только одну Корзину. Другие Корзины считаются ошибочными. Во время ремонта все найденные Корзины объединяются в одну. Лишние вершины удаляются.