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-е)