CA Rally - конфликт параллелизма: [объект был изменен с момента чтения для обновления в этом контексте] ошибка

У меня есть набор тестовых примеров, которые я пытаюсь добавить к тестовому набору в Rally, используя API-интерфейсы Rally.

Я перебираю массив и вызываю этот метод для каждого тестового случая в массиве. Все они добавляются в один и тот же набор тестов.

RallyConnect.prototype.addTestCaseToSet = function (tcObjectID, tcRef, tsObjectID, tsRef) {
    return new Promise((resolve, reject) => {

        // check to make sure it doesn't already exist
        rallyApi.query({
            ref: '/testset/' + tsObjectID + '/testcases',
            fetch: "true",
            query: queryUtils.where('ObjectID', '=', tcObjectID)
        }, function (error, result) {
            if (error) {
                reject(error);
            } else {
                if (result.TotalResultCount > 0) {
                   resolve({ tsRef: tsRef, tcRef: tcRef, action: 'exists' });
                } else {
                        rallyApi.add({
                            ref: tsRef,
                            collection: 'TestCases',
                            data: [{ _ref: refUtils.getRelative(tcRef) }]
                        }, function (error, result) {
                            if (error) {
                                reject(error);
                            } else {
                                resolve({ tsRef: tsRef, tcRef: tcRef, action: 
 'added' });
                            }
                        });
                }
            }
        });
        //});
    });
}

Я получаю следующую ошибку совсем немного, и процесс не удается

Error: Could not add artifact to collection
    at generateError (C:\src\testing_utility\node_modules\rally\dist\request.js:38:11)
    at Request._callback (C:\src\testing_utility\node_modules\rally\dist\request.js:118:22)
    at Request.self.callback (C:\src\testing_utility\node_modules\rally\node_modules\request\request.js:187:22)
    at emitTwo (events.js:125:13)
    at Request.emit (events.js:213:7)
    at Request.<anonymous> (C:\src\testing_utility\node_modules\rally\node_modules\request\request.js:1044:10)
    at emitOne (events.js:115:13)
    at Request.emit (events.js:210:7)
    at Gunzip.<anonymous> (C:\src\testing_utility\node_modules\rally\node_modules\request\request.js:965:12)
    at emitNone (events.js:110:20)
  errors:
   [ 'Could not add artifact to collection',
     'Concurrency conflict: [Object has been modified since being read for update in this context] - ConcurrencyConflictException : Modified since read on update
: Object Class : com.f4tech.slm.domain.TestSet : ObjectID : 203533554680' ] }

Кто-нибудь еще сталкивался с этими проблемами и знал, что я могу сделать, чтобы гарантировать, что я не понимаю.

1 ответ

Решение

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

rallyApi.add({
    ref: tsRef,
    collection: 'TestCases',
    data: [
        { _ref: refUtils.getRelative(tcRef1) },
        { _ref: refUtils.getRelative(tcRef2) }, //include multiples here
        { _ref: refUtils.getRelative(tcRef3) },
        { _ref: refUtils.getRelative(tcRef4) },
    ]
});

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

Еще одна вещь, чтобы проверить, используете ли вы один и тот же экземпляр RallyApi для каждого из вызовов? Из вашего кода это похоже на это. Пока это верно и пока включены куки, я думаю, что вы должны быть прикреплены к одному серверу приложений для всех ваших запросов и не должны видеть этих исключений (которые обычно вызваны быстрым обновлением связанных объектов в фоновом режиме). синхронизация кеша по всем узлам сервера).

Вы также можете попробовать добавить этот конфиг при обновлении вашего экземпляра rallyApi:

{
    requestOptions: { jar: true }
}

Это должно гарантировать, что ваши запросы поддерживают куки.

В интересах сообщества... Я тоже получил это сообщение об ошибке, но по несколько другой причине. Я помещу это здесь, потому что это единственное место, где это обсуждалось в более широкой сети. (Если есть обсуждение этого, спрятанное где-то на собственных форумах Rally, не стесняйтесь ссылаться!)

У меня возникла ошибка при попытке сохранить элемент Portfolio Feature, в который я долгое время редактировал без сохранения (потому что это было большое поле, и я не люблю пролистывать бесконечные мили истории изменений).

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

Это было одно или несколько отсутствующих "вложений" image.png, которые он не смог разместить, что помешало его сохранению. Я удалил файлы image.png из вложений (без фактического исчезновения изображений из тела поля!), И после этого он отлично сохранился.

https://rally1.rallydev.com/slm/doc/webservice/

в частности: https://rally1.rallydev.com/slm/doc/webservice/bulk.jsp

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

Я не использую никакой библиотеки... скорее, я просто вызываю API ралли (что совершенно ужасно и напоминает мне 90-е)

Другие вопросы по тегам