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

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

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

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

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

svn: E070014: Ошибка фиксации (подробности следуют): svn: E070014: Не удается прочитать файл «C:\Repositories\myproject\db\txn-current»: найден конец файла

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

Такое же поведение уже обсуждалось на StackOverflow: проблема фиксации 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?

person bahrep    schedule 23.10.2012    source источник
comment
такая же проблема, вы решили проблему с db/current файлом?   -  person user13107    schedule 30.10.2012


Ответы (6)


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

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

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

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

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

person Ivan Zhakov    schedule 23.10.2012

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

person Sandeep    schedule 14.02.2013
comment
Помещение большого числа в файл txn-current исправило это для меня, спасибо. - person Renato Borges; 06.03.2019

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

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

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

person Sayali K    schedule 24.04.2013

У меня была аналогичная проблема, когда во время фиксации произошел сбой питания. Я попытался изменить «Текущий» файл, но это не сработало.

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

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

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

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

person RooiWillie    schedule 07.08.2013

Я сделал:

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 с номером версии, меньшим, чем плохая версия

person rundekugel    schedule 14.01.2018

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

person Vishnu Prasad.B    schedule 15.07.2019