2010-06-28 18 views
2

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

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

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

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

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

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

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

ответ

0

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

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

+0

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

+0

@maligree, спасибо ... Я отвечал на старые вещи с самого начала, не понимая этого. –