Реализация в основном-атомарные коммиты ClearCase

StackOverflow https://stackoverflow.com/questions/1207547

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Самый простой способ, по-видимому, состоит в том, чтобы просто поместить команды в очередь, а затем, когда моя программа завершит обработку, выполнить очередь.Однако я обеспокоен тем, что какое-то исключительное событие прерывает фиксацию и вызывает несогласованный набор данных на сервере.

Или, другими словами, я ищу способ создать "набор изменений" в стиле svn в динамических представлениях Clearcase.Язык сценариев, который я использую, - Perl, если это имеет значение.

Идеи?

Это было полезно?

Решение

Поскольку атомарность операций в ClearCase находится на уровне файла, строгого эквивалента a не существует. набор изменений svn (т.е."пересмотр").

Наиболее близким к набору изменений в ClearCase является понятие activity (в UCM) или label, установленный для коллекции файлов (базовая линия UCM на самом деле ближе, поскольку она представляет метки, которые вы не можете перемещать, на заранее определенный набор файлов -- компонент UCM --)

Теперь, UCM или нет, я бы рекомендовал:

  • запирающий филиал на котором вы будете выполнять проверки (таким образом, vob по-прежнему доступен, и никто не пытается добавить другие версии в эту конкретную ветку во время вашей "атомарной" операции)
  • делайте свои проверки
  • разблокируйте ветку

В случае возникновения проблем, пока ветка все еще заблокирована, вы можете 'ct rmver' добавленные версии.(Примечание:использовать с осторожностью:a rmver не может быть отменено)

  • Примечание 1:если вы не работаете в UCM, вам нужно будет записать все зарегистрированные версии, чтобы иметь возможность повторно преобразовать их

  • Примечание2:когда я сказал "заприте ветку", я имел в виду, конечно:"запереть для всех, кроме тебя" (-nusers yourLogin).Таким образом, только вы можете выполнять проверки (это относится ко всем файлам в ПОСЛЕДНЕЙ версии ветки, над которой вы работаете (основной или другой).


Проблема при таком подходе заключается в том, что клиенты (другие пользователи со своими динамичный просмотры в ПОСЛЕДНИХ версиях ветки) увидите во время ваша атомарная транзакция.
Поскольку это динамичный просмотры, они будут видеть возвращенные файлы, пока эти файлы будут возвращены, один за другим.Это может быть не очень хорошо, особенно если имеется 200 файлов и если весь процесс занимает больше минуты.

Одним из решений было бы заставить эти клиентские представления установить для своей спецификации конфигурации следующее:

element * .../myBranch/FREEZED_LATEST
element * .../myBranch/LATEST

Если вы не выполняете фиксацию атомарного набора изменений, метка FREEZED_LATEST не существует, и все клиентские представления отображаются ПОСЛЕДНИМИ, как и должно быть.Любая проверка немедленно видна всем.
Но во время вашей атомарной фиксации вы могли бы:

  • сначала установите метку FREEZED_LATEST для всех текущих файлов (то есть для последних на данный момент).
    Это означает, что все клиенты будут видеть только эти конкретные версии во время атомарной фиксации
  • выполните свой процесс (полностью или откатитесь назад:в любом случае, ветка заблокирована, и спецификация конфигурации клиентов по-прежнему показывает тот же "замороженный" контент)
  • удалите метку FREEZED_LATEST (все клиенты продолжают видеть новую ПОСЛЕДНЮЮ версию, полученную в результате вашей атомарной операции, и могут создавать новые версии с некоторыми собственными извлечениями)

Другие советы

С версией 7.1.1 ClearCase поддерживает атомарные коммиты.Вы сможете обрабатывать набор файлов как единое целое и возвращать их обратно или выполнять откат на основе заданных критериев.Для получения дополнительной информации см. https://publib.boulder.ibm.com/infocenter/cchelp/v7r1m0/index.jsp?topic=/com.ibm.rational.clearcase.relnotes.doc/topics/c_cc_relnotes_features.htm

Заблокируйте всех других пользователей.

Сделайте резервную копию вашего сервера.

Делайте свои коммиты.

Если что-то пойдет не так, восстановите clearcase из резервной копии.

Я не пользовался clearcase годами, так что вот несколько случайных и наивных мыслей.

Посмотрите вперед и определите, не синхронизированы ли файлы.

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

Можете ли вы "удалить" регистрацию?Или вернуться, чтобы HEAD посмотрел на предыдущую версию?Определите, как вы отменяете регистрацию.

Можете ли вы создать временную ветку, зарегистрироваться, затем объединить / перебазировать (моя терминология здесь потеряна).Таким образом, ваш откат заключается в уничтожении ветки.Хотя я помню, как коллеги проклинали clearcase из-за его разветвления.

В целом, действия с очередью - это здорово, но используйте очередь для выявления потенциальных проблем до того, как они возникнут.Кроме того, определите свои действия и критерии их ОТМЕНЫ, чтобы, если они захотят сделать что-то, что не является псевдоатомным, вы могли предупредить их: "Это может привести к беспорядку".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top