summaryrefslogtreecommitdiff
path: root/src/mongo/db/update/update_oplog_entry_version.h
diff options
context:
space:
mode:
authorIan Boros <ian.boros@mongodb.com>2020-06-16 14:48:07 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-07-09 23:51:46 +0000
commitef1b465f2085a3a31e6dac4611fab3c75919b258 (patch)
tree79cc91c5ed02779d657ecaeaddf4f6b907f04ae0 /src/mongo/db/update/update_oplog_entry_version.h
parent40373c0e6e2c49d62c6e934393af87c14fe6fb14 (diff)
downloadmongo-ef1b465f2085a3a31e6dac4611fab3c75919b258.tar.gz
SERVER-47726 Log delta-style oplog entries from pipeline based updates
Diffstat (limited to 'src/mongo/db/update/update_oplog_entry_version.h')
-rw-r--r--src/mongo/db/update/update_oplog_entry_version.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/mongo/db/update/update_oplog_entry_version.h b/src/mongo/db/update/update_oplog_entry_version.h
new file mode 100644
index 00000000000..8ae9ec069fd
--- /dev/null
+++ b/src/mongo/db/update/update_oplog_entry_version.h
@@ -0,0 +1,63 @@
+/**
+ * Copyright (C) 2018-present MongoDB, Inc.
+ *
+ * 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/base/string_data.h"
+
+namespace mongo {
+
+static inline constexpr StringData kUpdateOplogEntryVersionFieldName = "$v"_sd;
+
+/**
+ * There are multiple types of 'u' (update) oplog entries. The type of an entry is indicated using
+ * a field called $v.
+ *
+ * The values in this enum *MUST* not change unless we remove support for a type of update.
+ */
+enum class UpdateOplogEntryVersion {
+ // Ancient update system which was deleted in 4.0. We still reserve its version number.
+ kRemovedV0 = 0,
+
+ // The update system introduced in v3.6. When a single update adds multiple fields, those
+ // fields are added in lexicographic order by field name. This system introduces support for
+ // arrayFilters and $[] syntax.
+ kUpdateNodeV1 = 1,
+
+ // Delta style update, introduced in 4.6. When a pipeline based update is executed, the pre and
+ // post images are diffed, producing a delta. The delta is recorded in the oplog. On
+ // secondaries, the delta is applied to the pre-image to recover the post image.
+ //
+ // Delta style updates cannot be executed directly by users.
+ kDeltaV2 = 2,
+
+ // Must be last.
+ kNumVersions
+};
+} // namespace mongo