forked from Tokutek/tokumxse
-
Notifications
You must be signed in to change notification settings - Fork 62
/
Copy pathdocument_source_backup_cursor.h
118 lines (92 loc) · 4.72 KB
/
document_source_backup_cursor.h
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*======
This file is part of Percona Server for MongoDB.
Copyright (C) 2021-present Percona and/or its affiliates. All rights reserved.
This program is free software: you can redistribute it and/or modify
it under the terms of the Server Side Public License, version 1,
as published by MongoDB, Inc.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Server Side Public License for more details.
You should have received a copy of the Server Side Public License
along with this program. If not, see
<http://www.mongodb.com/licensing/server-side-public-license>.
As a special exception, the copyright holders give permission to link the
code of portions of this program with the OpenSSL library under certain
conditions as described in each individual source file and distribute
linked combinations including the program with the OpenSSL library. You
must comply with the Server Side Public License in all respects for
all of the code used other than as permitted herein. If you modify file(s)
with this exception, you may extend this exception to your version of the
file(s), but you are not obligated to do so. If you do not wish to do so,
delete this exception statement from your version. If you delete this
exception statement from all source files in the program, then also delete
it in the license file.
======= */
#pragma once
#include "mongo/db/pipeline/document_source.h"
namespace mongo {
class DocumentSourceBackupCursor : public DocumentSource {
public:
static constexpr StringData kStageName = "$backupCursor"_sd;
class LiteParsed final : public LiteParsedDocumentSource {
public:
using LiteParsedDocumentSource::LiteParsedDocumentSource;
static std::unique_ptr<LiteParsed> parse(const NamespaceString& nss,
const BSONElement& spec);
stdx::unordered_set<NamespaceString> getInvolvedNamespaces() const final {
return stdx::unordered_set<NamespaceString>();
}
PrivilegeVector requiredPrivileges(bool isMongos,
bool bypassDocumentValidation) const final {
return {Privilege(ResourcePattern::forClusterResource(), ActionType::fsync)};
}
bool isInitialSource() const final {
return true;
}
ReadConcernSupportResult supportsReadConcern(repl::ReadConcernLevel level,
bool isImplicitDefault) const final {
return onlyReadConcernLocalSupported(kStageName, level, isImplicitDefault);
}
void assertSupportsMultiDocumentTransaction() const final {
transactionNotSupported(kStageName);
}
};
/**
* Parses a $backupCursor stage from 'spec'.
*/
static boost::intrusive_ptr<DocumentSource> createFromBson(
BSONElement spec, const boost::intrusive_ptr<ExpressionContext>& pCtx);
~DocumentSourceBackupCursor() override;
const char* getSourceName() const override;
StageConstraints constraints(Pipeline::SplitState pipeState) const override {
StageConstraints constraints{StreamType::kStreaming,
PositionRequirement::kFirst,
HostTypeRequirement::kNone,
DiskUseRequirement::kNoDiskUse,
FacetRequirement::kNotAllowed,
TransactionRequirement::kNotAllowed,
LookupRequirement::kAllowed,
UnionRequirement::kNotAllowed,
ChangeStreamRequirement::kDenylist};
constraints.isIndependentOfAnyCollection = true;
constraints.requiresInputDocSource = false;
return constraints;
}
Value serialize(const SerializationOptions& opts = SerializationOptions()) const final;
boost::optional<DistributedPlanLogic> distributedPlanLogic() final {
return boost::none;
}
void addVariableRefs(std::set<Variables::Id>* refs) const final {}
protected:
GetNextResult doGetNext() override;
DocumentSourceBackupCursor(StorageEngine::BackupOptions&& options,
const boost::intrusive_ptr<ExpressionContext>& expCtx);
private:
const StorageEngine::BackupOptions _backupOptions;
BackupCursorState _backupCursorState;
// Current batch of backup blocks
std::deque<BackupBlock> _backupBlocks;
std::deque<BackupBlock>::const_iterator _docIt;
};
} // namespace mongo