public void TestCreateCollectionSetStorageEngine()
        {
            RequireServer.Check().VersionGreaterThanOrEqualTo("2.7.0");
            var collection = _database.GetCollection("storage_engine_collection");

            collection.Drop();
            Assert.False(collection.Exists());
            var storageEngineOptions = new BsonDocument
            {
                { "wiredTiger", new BsonDocument("configString", "block_compressor=zlib") }
            };

            if (Feature.MmapV1StorageEngine.IsSupported(CoreTestConfiguration.ServerVersion))
            {
                storageEngineOptions.Add("mmapv1", new BsonDocument());
            }
            var options = CollectionOptions.SetStorageEngineOptions(storageEngineOptions);

            _database.CreateCollection(collection.Name, options);

            var result           = _database.RunCommand("listCollections");
            var resultCollection = result.Response["cursor"]["firstBatch"].AsBsonArray.Where(doc => doc["name"] == collection.Name).Single();

            Assert.Equal(storageEngineOptions, resultCollection["options"]["storageEngine"]);
        }
Exemplo n.º 2
0
        public void TestCreateCollectionSetStorageEngine()
        {
            var collection = _database.GetCollection("storage_engine_collection");

            collection.Drop();
            Assert.IsFalse(collection.Exists());
            var storageEngineOptions = new BsonDocument
            {
                { "wiredTiger", new BsonDocument("configString", "block_compressor=zlib") },
                { "mmapv1", new BsonDocument() }
            };
            var options = CollectionOptions.SetStorageEngineOptions(storageEngineOptions);

            _database.CreateCollection(collection.Name, options);

            var result           = _database.RunCommand("listCollections");
            var resultCollection = result.Response["cursor"]["firstBatch"].AsBsonArray.Where(doc => doc["name"] == collection.Name).Single();

            Assert.AreEqual(storageEngineOptions, resultCollection["options"]["storageEngine"]);
        }
Exemplo n.º 3
0
        private static void CreateCollection(MongoCollection <BsonDocument> sourceCollection, MongoCollection <BsonDocument> targetCollection, FlexibleOptions options)
        {
            if (targetCollection.Exists())
            {
                return;
            }

            List <string> config = new List <string> ();

            if (!String.IsNullOrWhiteSpace(options.Get("collection-wt-configString")))
            {
                config.AddRange(options.Get("collection-wt-configString", "").Split(',').Select(i => i.Trim()).Where(i => !String.IsNullOrEmpty(i)));
            }

            if (options.HasOption("collection-wt-block-compressor") && valid_wt_compressors.Contains(options.Get("collection-wt-block-compressor", "invalid")))
            {
                config.RemoveAll(i => i.StartsWith("block_compressor=", StringComparison.OrdinalIgnoreCase));
                config.Add("block_compressor=" + options.Get("collection-wt-block-compressor", "").ToLowerInvariant());
            }

            if (!String.IsNullOrWhiteSpace(options.Get("collection-wt-allocation")))
            {
                // Mongodb version 3.0.4 defaults to: "allocation_size=4KB,internal_page_max=4KB,leaf_page_max=32KB,leaf_value_max=1MB"
                if (options.Get("collection-wt-allocation") == "2x")
                {
                    config.RemoveAll(i =>
                                     i.StartsWith("allocation_size=", StringComparison.OrdinalIgnoreCase) ||
                                     i.StartsWith("leaf_page_max=", StringComparison.OrdinalIgnoreCase) ||
                                     i.StartsWith("internal_page_max=", StringComparison.OrdinalIgnoreCase));
                    config.Add("allocation_size=8KB");
                    config.Add("leaf_page_max=64KB");
                    config.Add("internal_page_max=8KB");
                }
                else if (options.Get("collection-wt-allocation") == "4x")
                {
                    config.RemoveAll(i =>
                                     i.StartsWith("allocation_size=", StringComparison.OrdinalIgnoreCase) ||
                                     i.StartsWith("leaf_page_max=", StringComparison.OrdinalIgnoreCase) ||
                                     i.StartsWith("internal_page_max=", StringComparison.OrdinalIgnoreCase));
                    config.Add("allocation_size=16KB");
                    config.Add("leaf_page_max=64KB");
                    config.Add("internal_page_max=16KB");
                }
                else if (options.Get("collection-wt-allocation") == "8x")
                {
                    config.RemoveAll(i =>
                                     i.StartsWith("allocation_size=", StringComparison.OrdinalIgnoreCase) ||
                                     i.StartsWith("leaf_page_max=", StringComparison.OrdinalIgnoreCase) ||
                                     i.StartsWith("internal_page_max=", StringComparison.OrdinalIgnoreCase));
                    config.Add("allocation_size=32KB");
                    config.Add("leaf_page_max=128KB");
                    config.Add("internal_page_max=32KB");
                }
            }

            // apply configuration
            if (config.Count > 0)
            {
                try
                {
                    var storageEngineDoc = new BsonDocument("wiredTiger", new BsonDocument("configString", String.Join(",", config)));
                    targetCollection.Database.CreateCollection(targetCollection.Name, CollectionOptions.SetStorageEngineOptions(storageEngineDoc));
                }
                catch (Exception ex)
                {
                    NLog.LogManager.GetLogger("CreateCollection").Error(ex);
                }
            }
        }