КАК ПРОВЕРИТЬ НАЛИЧИЕ ЗАПУЩЕННЫХ ИЛИ ЗАВИСШИХ ЗАДАЧ ПО МАССОВОМУ ПОИСКУ ДУБЛЕЙ В ON-SITE

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

Для того чтобы завершить зависшую задачу в 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 }

Нравится

Поделиться

0 комментариев
Показать все комментарии