summaryrefslogtreecommitdiff
path: root/src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/archive/archive.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/archive/archive.go')
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/archive/archive.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/archive/archive.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/archive/archive.go
new file mode 100644
index 00000000000..05f84ebaa44
--- /dev/null
+++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/common/archive/archive.go
@@ -0,0 +1,61 @@
+// Copyright (C) MongoDB, Inc. 2014-present.
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License. You may obtain
+// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+
+package archive
+
+import "io"
+
+// NamespaceHeader is a data structure that, as BSON, is found in archives where it indicates
+// that either the subsequent stream of BSON belongs to this new namespace, or that the
+// indicated namespace will have no more documents (EOF)
+type NamespaceHeader struct {
+ Database string `bson:"db"`
+ Collection string `bson:"collection"`
+ EOF bool `bson:"EOF"`
+ CRC int64 `bson:"CRC"`
+}
+
+// CollectionMetadata is a data structure that, as BSON, is found in the prelude of the archive.
+// There is one CollectionMetadata per collection that will be in the archive.
+type CollectionMetadata struct {
+ Database string `bson:"db"`
+ Collection string `bson:"collection"`
+ Metadata string `bson:"metadata"`
+ Size int `bson:"size"`
+}
+
+// Header is a data structure that, as BSON, is found immediately after the magic
+// number in the archive, before any CollectionMetadatas. It is the home of any archive level information
+type Header struct {
+ ConcurrentCollections int32 `bson:"concurrent_collections"`
+ FormatVersion string `bson:"version"`
+ ServerVersion string `bson:"server_version"`
+ ToolVersion string `bson:"tool_version"`
+}
+
+const minBSONSize = 4 + 1 // an empty BSON document should be exactly five bytes long
+
+var terminator int32 = -1
+var terminatorBytes = []byte{0xFF, 0xFF, 0xFF, 0xFF} // TODO, rectify this with terminator
+
+// MagicNumber is four bytes that are found at the beginning of the archive that indicate that
+// the byte stream is an archive, as opposed to anything else, including a stream of BSON documents
+const MagicNumber uint32 = 0x8199e26d
+const archiveFormatVersion = "0.1"
+
+// Writer is the top level object to contain information about archives in mongodump
+type Writer struct {
+ Out io.WriteCloser
+ Prelude *Prelude
+ Mux *Multiplexer
+}
+
+// Reader is the top level object to contain information about archives in mongorestore
+type Reader struct {
+ In io.ReadCloser
+ Demux *Demultiplexer
+ Prelude *Prelude
+}