aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/clickhouse/src/Storages/MergeTree/MergeTreeDataPartUUID.h
blob: ee3a9ee27913a0cb970214a4a29750c6358ac4b5 (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
31
32
33
34
#pragma once

#include <memory>
#include <mutex>
#include <unordered_set>
#include <Core/UUID.h>

namespace DB
{

/** PartUUIDs is a uuid set to control query deduplication.
 * The object is used in query context in both direction:
 *  Server->Client to send all parts' UUIDs that have been read during the query
 *  Client->Server to ignored specified parts from being processed.
 *
 *  Current implementation assumes a user setting allow_experimental_query_deduplication=1 is set.
 */
struct PartUUIDs
{
public:
    /// Add new UUIDs if not duplicates found otherwise return duplicated UUIDs
    std::vector<UUID> add(const std::vector<UUID> & uuids);
    /// Get accumulated UUIDs
    std::vector<UUID> get() const;
    bool has(const UUID & uuid) const;

private:
    mutable std::mutex mutex;
    std::unordered_set<UUID> uuids;
};

using PartUUIDsPtr = std::shared_ptr<PartUUIDs>;

}