Пустой или несуществующий '/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, было заполнено место. Так очистили пространство