# 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 # . # # 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. # # Oplog Entry IDL File global: cpp_namespace: "mongo::repl" imports: - "mongo/db/basic_types.idl" - "mongo/db/session/logical_session_id.idl" - "mongo/db/pipeline/value.idl" - "mongo/db/repl/optime_base.idl" - "mongo/db/repl/replication_types.idl" - "mongo/db/multitenancy.idl" - "mongo/s/sharding_types.idl" enums: OpType: description: "The type of an operation in the oplog" type: string values: kCommand: "c" kInsert: "i" kUpdate: "u" kDelete: "d" kNoop: "n" kInsertGlobalIndexKey: "xi" kDeleteGlobalIndexKey: "xd" RetryImage: description: "Dictates whether a pre-image or post-image is to be stored on behalf of this retryable write." type: string values: kPreImage: "preImage" kPostImage: "postImage" structs: DurableReplOperation: description: "A document that represents an operation. Should never be used directly in server code. Instead, create an instance of ReplOperation." fields: op: cpp_name: opType type: OpType description: "The operation type" tid: cpp_name: tid type: tenant_id optional: true description: "The tenant to which the operation applies" ns: cpp_name: nss type: namespacestring description: "The namespace on which to apply the operation" ui: cpp_name: uuid type: uuid optional: true description: "The UUID of the collection" o: cpp_name: object type: object description: "The operation applied" o2: cpp_name: object2 type: object optional: true description: "Additional information about the operation applied" b: cpp_name: upsert type: bool optional: true description: "If true, treats this update operation as an upsert. Used when extracting individual update oplog entries from the oplog entry of an applyOps command that was executed with alwaysUpsert true (the default). Originally added for backwards compatibility with updates from 3.6 and before." preImageOpTime: type: optime optional: true description: "The optime of another oplog entry that contains the document before an update/remove was applied." postImageOpTime: type: optime optional: true description: "The optime of another oplog entry that contains the document after an update was applied." needsRetryImage: type: RetryImage optional: true description: "Identifies whether a secondary should store a pre-image or post-image associated with this oplog entry." destinedRecipient: cpp_name: destinedRecipient type: shard_id optional: true description: "The destined recipient for this op under the new shard key pattern. Only included when a resharding operation is in progress." stmtId: cpp_name: statementIds type: variant: [StmtId, array] optional: true description: "Identifier of the transaction statement(s) which generated this oplog entry" fromMigrate: type: bool optional: true description: "Marks the operation as an internal event that should be hidden to the end user. The field (originally introduced to flag specific meta/data deletions performed during a chunk migration) maintains its original name for retro compatibility, but it is now used in a wider range of contexts." OplogEntryBase: description: A document in which the server stores an oplog entry. inline_chained_structs: true chained_structs: OperationSessionInfo: OperationSessionInfo DurableReplOperation: DurableReplOperation OpTimeBase: OpTimeBase fields: h: cpp_name: hash type: long optional: true # Only used for backwards compatibility with 4.0 and before. description: "The hash of the oplog entry" v: cpp_name: version type: safeInt64 default: 2 description: "The version of the oplog" wall: cpp_name: wallClockTime type: date description: "A wallclock time with MS resolution" fromTenantMigration: type: uuid optional: true description: "Contains the UUID of a tenant migration for an operation caused by one." donorOpTime: type: optime optional: true description: "Used for Serverless shard merge during the oplog catchup phase. The original opTime of the write on the donor timeline. Will only be set for writes written during the oplog catchup phase." donorApplyOpsIndex: type: safeInt64 optional: true description: "Used for Serverless shard merge during the oplog catchup phase. If the write was part of a transaction or applyOps entry, this will be the index of the original applyOps entry. Will be set to 0 for any non-applyOps writes." _id: cpp_name: _id type: Value optional: true description: "Used by tests in replication and also by production resharding code to store timestamps." prevOpTime: cpp_name: prevWriteOpTimeInTransaction type: optime optional: true # Only for writes that are part of a transaction description: "The opTime of the previous write with the same transaction."