Должен ли вызов SVNSYNC блокироваться или нет в перехватчике после фиксации?

Я настроил зеркалирование своего репозитория, и оно работает хорошо, но недавно у меня возникла проблема.

Целевой репозиторий каким-то образом остался с невыпущенной блокировкой - из того, что я прочитал, это может быть вызвано прерыванием операции svnsync, и я подозреваю, что это может быть из-за того, что в моем хуке после фиксации я выполняю svnsync в блокирующем режиме, а не нажимаю его в фоновом режиме через &.

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

Я не могу найти четких указаний или предложений о том, что лучше или как лучше всего, или даже если нажатие кнопки «Отмена» может привести к прерыванию хука фиксации сообщения и синхронизации, выполняемой из него — в большинстве мест я вижу, как люди используют & для удара синхронизации в фоновом режиме — предотвращает ли это повреждение блокировки в случае, если пользователь нажимает кнопку «Отмена» для своей фиксации во время синхронизации? Как вы убедитесь, что оба репозитория действительно синхронизированы или сообщают о проблемах? Вам нужен отдельный механизм уведомления для этого?

Обновлять:

Из двух вышеперечисленных вариантов я решил выбрать третий ;)

Я вызываю svnsync в фоновом режиме, но в то же время заставляю хук ждать его завершения:

svnsync ... &
wait $!

Я думаю, что это прекрасно сочетает в себе лучшее из обоих миров, но время покажет, насколько это будет эффективно — пожалуйста, дайте мне знать, что вы думаете обо всей проблеме и какие предложения вы могли бы поделиться по этому поводу.


person RnR    schedule 03.09.2010    source источник


Ответы (1)


Хук после фиксации, как следует из названия, запускается после полной фиксации и создания новой версии в исходном репозитории. Итак, вопросы: кто должен как нажимать кнопку «отмена»? С другой стороны, почему вы делаете операцию блокировки? Я бы синхронизировал, например. каждые 15 минут и т. д., независимо от фиксации ... Если вы действительно новичок, как насчет Write-Through-Proxy? Самый главный вопрос: зачем вам такая синхронизация при каждом коммите?

person khmarbaise    schedule 03.09.2010
comment
@khmarbaise: Когда вы работаете с черепахой, операция фиксации, похоже, ожидает завершения хука после фиксации и представляет результат, если он не удался, даже если сама фиксация в основном репозитории уже выполнена, пока выполняется хук - когда вы нажмите «Отмена», тогда, я думаю, синхронизация может быть прервана. Что касается того, зачем выполнять операцию блокировки, мне нужно убедиться, что оба репозитория всегда синхронизированы, поскольку оба они используются в производстве МНОГИМИ клиентами, и 15 минут несинхронизации могут нарушить систему, которую я создаю (она должна быть прозрачной). зеркало не устаревшее зеркало). - person RnR; 03.09.2010
comment
Насколько я знаю, вы можете остановить выполнение, которое началось на сервере. С другой стороны, почему у вас два реплицированных репозитория и не используется ни один? (Может быть, подумать о Wandisco для репликации в реальном времени?) - person khmarbaise; 03.09.2010
comment
Как обычно - это сложно :) Я использую SVN в качестве бэкенда для доставки данных на множество машин - данные должны быть версионными, разветвленными и т. д. Есть сайты, расположенные в США и Европе, и сейчас размер репозитория составляет ~ 70 ГБ. так что наличие зеркала на другой стороне действительно помогает с трафиком ;) Wandisco, вероятно, также будет работать хорошо, но на самом деле это не нужно, поскольку фиксация в одном репозитории не является проблемой, и на данный момент достаточно просто локального чтения. - person RnR; 04.09.2010