Блокировки
Зачем нужны блокировки
Блокировка запрещает выполнять действия с черновиком, DraftsBuilder или документооборотом, пока не закончил выполняться запрос, который вызвал блокировку. Блокируется при этом объект, для которого вызван метод (черновик, документ, подпись и т.д.). Это уберегает от возможных коллизий при одновременном, параллельном выполнении запросов, связанных с одним объектом, или при ошибках и повторной отправке запроса. При выполнении запросов, ограниченных блокировками, возвращается ошибка с кодом 409.
Блокировки в черновиках
Блокировки в черновиках запрещают одновременно выполнять:
POST, PUT, DELETE запросы параллельно с одним из методов: подписание черновика, проверка (Check), подготовка (Prepare), отправка (Send). Примечание: разрешено параллельно выполнять запрос на печать документа в черновике;
печать одного и того же документа;
запрос на изменение или удаление документа, добавление подписи (put signature) к документу в черновике пока не завершился запрос печати документа.
Блокировки в документооборотах
Блокировки в документооборотах запрещают одновременно выполнять:
печать одного и того же документа из документооборота;
подписание сертификатом разных ответных документов (с разными reply-id) в одном документообороте;
дешифрование сертификатом разных документов в одном документообороте .
Блокировки в DraftsBuilder
Блокировки в DraftsBuilder запрещают:
одновременно выполнять метод POST Build одного и того же конструктора черновиков (сборка DraftsBuilder в черновик).
выполнять POST, PUT, DELETE запросы по завершении работы метода POST Build.
Данные ограничения можно отслеживать по статусу DraftsBuilder. Пока статус в значении New — можно выполнять любые операции. Когда запускается сборка, статус меняется на Building, запрещаются любые запросы к собираемому DraftsBuilder кроме GET.
Если по завершении сборки попробовать запустить любой метод на изменение сущностей DraftsBuilder, вернется ошибка. Исключение: повторное выполнение запроса сборки, если метод завершился ошибкой с кодом 500.
Ошибка 409 Conflict
При попытке одновременного выполнения запросов, ограниченных блокировками, API возвращает ошибку с кодом 409 Conflict. Тело ответа содержит ошибку с идентификатором urn:error:externapi:concurrentApiTaskActive
. Дополнительно ошибка может содержать идентификатор и тип параллельно выполняющейся операции.
Пример ошибки
{
"id": "urn:error:externapi:concurrentApiTaskActive",
"status-code": 409,
"track-id": "m4n3ggqtoxgge78q93go",
"message": "There is an active concurrent operation",
"trace-id": "[T-587660f5(-)] ",
"context": {
"concurrent-task": {
"id": "5b35fae5-e429-43c5-befe-6a4aa3cfceda",
"task-type": "urn:task-type:send"
}
}
}