Add events.clear_scroll endpoint to clear event search scrolls

This commit is contained in:
allegroai 2022-04-18 16:29:57 +03:00
parent abd65e103e
commit d146127c18
4 changed files with 50 additions and 2 deletions

View File

@ -137,3 +137,7 @@ class TaskPlotsRequest(Base):
scroll_id: str = StringField()
no_scroll: bool = BoolField(default=False)
metrics: Sequence[MetricVariants] = ListField(items_types=MetricVariants)
class ClearScrollRequest(Base):
scroll_id: str = StringField()

View File

@ -8,7 +8,7 @@ from datetime import datetime
from operator import attrgetter
from typing import Sequence, Set, Tuple, Optional, List, Mapping, Union
from elasticsearch import helpers
import elasticsearch
from elasticsearch.helpers import BulkIndexError
from mongoengine import Q
from nested_dict import nested_dict
@ -48,6 +48,9 @@ MAX_LONG = 2 ** 63 - 1
MIN_LONG = -(2 ** 63)
log = config.logger(__file__)
class PlotFields:
valid_plot = "valid_plot"
plot_len = "plot_len"
@ -219,7 +222,7 @@ class EventBLL(object):
with TimingContext("es", "events_add_batch"):
# TODO: replace it with helpers.parallel_bulk in the future once the parallel pool leak is fixed
with closing(
helpers.streaming_bulk(
elasticsearch.helpers.streaming_bulk(
self.es,
actions,
chunk_size=chunk_size,
@ -1005,3 +1008,16 @@ class EventBLL(object):
)
return es_res.get("deleted", 0)
def clear_scroll(self, scroll_id: str):
if scroll_id == self.empty_scroll:
return
# noinspection PyBroadException
try:
self.es.clear_scroll(scroll_id=scroll_id)
except elasticsearch.exceptions.NotFoundError:
pass
except elasticsearch.exceptions.RequestError:
pass
except Exception as ex:
log.exception("Failed clearing scroll %s", scroll_id)

View File

@ -1304,3 +1304,24 @@ scalar_metrics_iter_raw {
}
}
}
clear_scroll {
"2.18" {
description: "Clear an open Scroll ID"
request {
type: object
required: [
scroll_id
]
properties {
scroll_id {
description: "Scroll ID as returned by previous events service calls"
type: string
}
}
}
response {
type: object
additionalProperties: false
}
}
}

View File

@ -25,6 +25,7 @@ from apiserver.apimodels.events import (
TaskPlotsRequest,
TaskEventsRequest,
ScalarMetricsIterRawRequest,
ClearScrollRequest,
)
from apiserver.bll.event import EventBLL
from apiserver.bll.event.event_common import EventType, MetricVariants
@ -936,3 +937,9 @@ def scalar_metrics_iter_raw(
scroll_id=scroll.get_scroll_id(),
variants=variants,
)
@endpoint("events.clear_scroll", min_version="2.18")
def clear_scroll(_, __, request: ClearScrollRequest):
if request.scroll_id:
event_bll.clear_scroll(request.scroll_id)