Есть ли гарантия, что svn автоматически объединит одновременно «добавить строку» и «удалить строку» в один файл? - PullRequest
2 голосов
/ 28 июня 2010

У меня есть распределенная система, которая использует XML-файлы в хранилище SVN в качестве средства связи (как вы можете догадаться из этого, общение обычно медленное). Некоторые узлы обработки добавляют или удаляют некоторые данные в хранилище, другой узел обработки принимает это как входное событие и реагирует соответствующим образом.

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

Допустим, один узел добавляет определенное задание к другому узлу, добавив в файл XML строку, указывающую на другой файл XML с подробностями задания. Это похоже на следующий код:

----File: nodename.xml----
<assignments>
  <file>537f7acb382326.xml</file>
  <file>572919a90c0234.xml</file>
  <file>58a7c3e2015922.xml</file>
</assignments>

Каждый файл, указанный в этом файле, является назначением задания для хоста nodename. При выполнении задания соответствующая строка будет удалена правопреемником.

С точки зрения репозитория SVN у меня есть один «сумматор» и один «чтение и удаление». Один узел только добавляет строки в этот файл, один узел удаляет только строки из этого файла. Я могу гарантировать, что только один узел может добавить, и только один узел может удалить. Но: хотя имена файлов имеют уникальные идентификаторы, они могут быть добавлены повторно, поэтому строка может быть добавлена ​​и удалена одновременно, что теоретически может вызвать проблемы.

Мой вопрос таков: есть ли гарантия, что SVN автоматически объединит одновременно «добавить строку» и «удалить строку» без взаимодействия с пользователем? Если нет, есть ли гарантия, если я добавлю отметку времени к каждой добавленной строке, делая каждую строку уникальной?

1 Ответ

0 голосов
/ 24 сентября 2012

С SVN параллелизма не происходит.Либо удаление, либо добавление произойдет первым.Если хранилище изменилось после обновления, то фиксация завершится неудачей.Например, если ваш read-and-deleter читает файл, adder добавляет новую строку и read-and-deleter пытается зафиксировать удаление, произойдет сбой, поскольку его копия устарела.

Но на самом деле SVNэто не отличный способ сделать этот тип вещей.Тем не менее, вы можете добиться большего, имея папку work-to-do, в которой adder добавляет отдельные файлы, представляющие работу.read-and-deleter может затем обновить этот каталог и удалять файлы, когда работа завершена.Имена файлов могут быть сделаны уникальными с помощью отметки времени или чего-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...