В ходе работы с сервисом Дедупликации на основе глобального поиска может возникнуть проблема с зависанием процесса поиска дублей на уровне сервиса.
Зависание процесса характеризуется отсутствием результатов поиска длительное время и ограничением запуска повторной итерации поиска.
Для того чтобы завершить зависшую задачу в On-Site вам потребуется:
1. Зайти на сервер, где развернут сервис массового поиска дублей.
2. Зайти в docker-контейнер с базой MongoDB. В консоли выполнить команду:
docker exec -it dd-mongodb bash
3. Подключиться к MongoDB. В консоли выполнить команду:
mongo
4. Подключиться к базе, в которой храниться вся информация о задачах массового поиска дублей.
В консоли выполнить команду:
use dup-bulk-deduplication
5. Выбрать все задачи, которые в данный момент находятся в процессе.
В консоли выполнить команду:
db.getCollection('DeduplicationTaskEntity').find({Status: 2}).pretty()
В результате выполнения этой команды можно увидеть один или больше JSONобъектов, которые описывают запущенные задачи по поиску дублей.
JSON(ы) выглядят примерно так:
{ "_id" : UUID("450da7fb-9ac5-49c5-a146-feebc3482b2e"),
"IsActual" : true,
"TokenId" : "3a868426cf95283bd0b51ef7776337ed",
"ElasticIndexName" : "EntityName",
"SourceEntityName" : "IndexName",
"TotalRecordsCount" : NumberLong(0),
"ProcessedRecordsCount" : NumberLong(0),
"MaxDuplicatesPerRecord" : null,
"StartedOn" : ISODate("2021-01-13T09:31:16.269Z"),
"FinishedOn" : null,
"FailReason" : null,
"Status" : 2,
"Rules" : [
{
"_t" : "DeduplicationRuleEntity",
"Columns" : [
"#Column"
]
}
]
}
где,
Обычно задачи зависают из-за того, что количество обработанных записей меньше, чем общее количество записей в разделе (ProcessedRecordsCount < TotalRecordsCount), при этом больше нет под-задач на обработку отдельной записи из раздела, то есть часть записей останется не обработанной. На данный момент нет ответа на вопрос, куда пропадают под-задачи на обработку отдельной записи из раздела. Эта проблема находиться в проработке.
6. Необходимо завершить одну (или несколько) зависшую задачу:
- Если необходимо завершить ОДНУ какую-то конкретную задачу (в случае, если есть одна зависшая задача, а вторая была недавно запущена и она еще действительно находиться в процессе), то нужно скопировать ID этой задачи и выполнить следующую команду:
getCollection('DeduplicationTaskEntity').updateOne({ _id: UUID("450da7fb9ac5-49c5-a146-feebc3482b2e")}, { $set: { Status: NumberInt(5) } })
Если все выполнено правильно, то результат выполнения команды будет следующий:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
- Если необходимо просто завершить ВСЕ зависшие задачи:
db.getCollection('DeduplicationTaskEntity').updateMany({ Status: 2}, { $set: { Status: NumberInt(5) } })
Если все выполнено правильно, то результат выполнения команды будет следущий (где N - количество обновленных задач):
{ "acknowledged" : true, "matchedCount" : N, "modifiedCount" : N }