aboutsummaryrefslogtreecommitdiffstats
path: root/ydb/core/blob_depot/data_resolve.h
blob: bf66c2bfb3acec7c2bc47b7f2ed96fbcec02c6e7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#pragma once

#include "defs.h"

namespace NKikimr::NBlobDepot {

    class TBlobDepot::TData::TResolveResultAccumulator {
        const TActorId Sender;
        const TActorId Recipient;
        const ui64 Cookie;
        const TActorId InterconnectSession;
        std::deque<NKikimrBlobDepot::TEvResolveResult::TResolvedKey> Items;
        std::unordered_map<TKey, size_t> KeyToIndex;
        std::vector<bool> KeysToFilterOut;

    public:
        TResolveResultAccumulator(TEventHandle<TEvBlobDepot::TEvResolve>& ev);

        void AddItem(NKikimrBlobDepot::TEvResolveResult::TResolvedKey&& item, const NKikimrBlobDepot::TBlobDepotConfig& config);
        void Send(NKikimrProto::EReplyStatus status, std::optional<TString> errorReason);
        std::deque<NKikimrBlobDepot::TEvResolveResult::TResolvedKey> ReleaseItems();

        void AddKeyWithNoData(const TKey& key);
        void AddKeyWithError(const TKey& key, const TString& errorReason);

        const TActorId& GetSender() const { return Sender; }
        ui64 GetCookie() const { return Cookie; }
    };

} // NKikimr::NBlobDepot