@@ -162,6 +162,7 @@ def __init__(self):
162
162
self .nodes = set ()
163
163
self .replica_set_name = None
164
164
self .cmd_line = None
165
+ self .server_status = None
165
166
self .version = Version (- 1 ) # Needs to be comparable with Version
166
167
self .auth_enabled = False
167
168
self .test_commands_enabled = False
@@ -248,6 +249,7 @@ def _init_client(self):
248
249
# May not have this if OperationFailure was raised earlier.
249
250
self .cmd_line = self .client .admin .command ('getCmdLineOpts' )
250
251
252
+ self .server_status = self .client .admin .command ('serverStatus' )
251
253
self .ismaster = ismaster = self .client .admin .command ('isMaster' )
252
254
self .sessions_enabled = 'logicalSessionTimeoutMinutes' in ismaster
253
255
@@ -424,6 +426,25 @@ def require_connection(self, func):
424
426
"Cannot connect to MongoDB on %s" % (self .pair ,),
425
427
func = func )
426
428
429
+ def require_no_mmap (self , func ):
430
+ """Run a test only if the server is not using the MMAPv1 storage
431
+ engine. Only works for standalone and replica sets; tests are
432
+ run regardless of storage engine on sharded clusters. """
433
+ def is_not_mmap ():
434
+ if self .is_mongos :
435
+ return True
436
+ try :
437
+ storage_engine = self .server_status .get (
438
+ 'storageEngine' ).get ('name' )
439
+ except AttributeError :
440
+ # Raised if the storageEngine key does not exist or if
441
+ # self.server_status is None.
442
+ return False
443
+ return storage_engine != 'mmapv1'
444
+
445
+ return self ._require (
446
+ is_not_mmap , "Storage engine must not be MMAPv1" , func = func )
447
+
427
448
def require_version_min (self , * ver ):
428
449
"""Run a test only if the server version is at least ``version``."""
429
450
other_version = Version (* ver )
0 commit comments