Пустой или несуществующий '/db/txn-current' в хранилище Subversion

Я столкнулся с проблемой с хранилищем Apache Subversion, и я ищу лучшее решение:

Я не могу зафиксировать в хранилище Subversion, и я получаю сообщение об ошибке:

svn: E720002: Сбой при фиксации (подробности приведены ниже): svn: E720002: Не удается открыть файл 'C:\Repositories\myproject\db\txn-current': системе не удается найти указанный файл.

Если я создам пустой txn-current file if получит еще одну ошибку при коммите:

svn: E070014: Сбой при фиксации (подробности приведены ниже): svn: E070014: Не удается прочитать файл 'C:\Repositories\myproject\db\txn-current': найден конец файла

ПРИМЕЧАНИЕ. Давайте представим, что у меня нет резервной копии репозитория, поэтому я должен исправить проблему вручную.

Такое же поведение уже обсуждалось в Stackru: проблема фиксации SVN. Невозможно прочитать 'd:\UC\db\txn-current': обнаружен конец файла. Однако я сомневаюсь, что ответы там действительно полезны:

  • Я не думаю, что создание \db\txn-current вручную и положить 0 там (или любое другое целое число) хорошее решение. Я полагаю, что это может привести к неожиданному поведению в ближайшем будущем,

  • svnadmin recover и / или svnadmin verify не создавать и / или не заполнять txn-current, Эти команды беспомощны в этом случае.

Согласно описанию FSFS \db\txn-current Файл содержит номер ключа следующей транзакции. Если я добавлю в файл какое-то целое число, я смогу зафиксировать, и число увеличится на 1.

Тем не менее, похоже, что введение какого-то неуместного целого числа может что-то сломать в моем репо, и я не хочу, чтобы это произошло

Файл "txn-current" - это файл с одной строкой текста, который содержит только число base-36. Текущее значение будет использовано в имени следующей транзакции вместе с номером редакции, на котором основана транзакция. Этот порядковый номер гарантирует, что имена транзакций не будут повторно использоваться, даже если транзакция отменяется и начинается новая транзакция, основанная на той же ревизии. Единственная операция, которую FSFS выполняет с этим файлом, - это "получить и увеличить"; файл "txn-current-lock" заблокирован во время этой операции.

Что я должен сделать, чтобы исправить \db\txn-current вопрос правильно? Какое целое число я должен положить в файл? Есть ли другой способ решить эту проблему?

РЕДАКТИРОВАТЬ:

  • Как я могу решить ту же проблему (несуществующую или пустую), но для db/current файл?

5 ответов

Решение

В фсфс txn-current содержит идентификатор следующей транзакции Идентификатор транзакции сохраняется в самой ревизии после принятия. Так что действительно большое число txn-current все должно быть в порядке.

Другое решение было бы svnadmin dump хранилище, а затем svnadmin load это свежий репозиторий.

ОБНОВЛЕНИЕ: проблема с txn-current Повреждение файла было исследовано и исправлено в r1483781.

  • исправить повреждение хранилища при сбое питания / диска в Windows (r1483781)

Исправление доступно в Subversion 1.7.10 и более поздних версиях.

У меня была похожая проблема. Для разрешения я отредактировал файл 'txn-current', поместив в него большое число, скажем, xxxxx. Наряду с этим мне пришлось отредактировать другой файл с именем 'current' в папке 'db\ Transactions'. Я удалил все содержимое из этого файла и просто добавил один ввод и закрыл этот файл.

Я получаю сообщение об ошибке: "Не могу прочитать 'D:\SVNROOT\UC\db\txn-current'.: Конец файла найден". При дальнейшем поиске мы поняли, что "Текущий" файл в папке БД пуст после некоторой ОС сервера. обновить деятельность. Мы нашли номер последней редакции из папки revs и добавили номер в "текущий" файл

Это все еще не работало, тогда мы нашли эту статью, которая указывает, что вы должны поставить номер ревизии, а затем "ввод" после этого

Это работает, чтобы устранить ошибку!

У меня была похожая проблема, когда сбой питания произошел во время фиксации. Я попытался изменить файл "Current", но он не сработал.

Я сделал резервную копию хранилища, а затем удалил "текущий" файл и запустил "проверку svnadmin" в хранилище. После этого я получил следующую ошибку:

"Неверно сформированный файл SVN: в сериализированном хэше отсутствует терминатор"

Затем я сделал дамп репозитория, удалил старый репозиторий, заново создал репозиторий и импортировал файл дампа.

После этого все снова заработало. Полный репозиторий и история все еще были на месте.

Я сделал:

svnadmin verify /mnt/repos/
svnadmin recover /mnt/repos/

все еще есть ошибка...

svn: E000002: Übertragen schlug fehl (Details folgen):
svn: E000002: Kann Datei »/mnt/repos/db/txn-current« nicht öffnen: Datei oder Verzeichnis nicht gefunden

Затем я создал пустой файл: /mnt/repos/db/txn-currentзатем svn ci снова работал

Если вы не хотите ждать:

svnadmin verify -r 997:HEAD <path>

быстрее. обмен 997 с номером ревизии, меньше плохой ревизии

В моем случае. В VirtualMachine, на котором был установлен SVN, было заполнено место. Так очистили пространство

Другие вопросы по тегам