samba-tool clone-dc-database: Add --backend-store-size option
authorGary Lockyer <gary@catalyst.net.nz>
Thu, 27 Jun 2019 20:56:31 +0000 (08:56 +1200)
committerGary Lockyer <gary@samba.org>
Tue, 2 Jul 2019 02:23:09 +0000 (02:23 +0000)
Add a new "samba-tool drs clone-dc-database" option "backend-store-size".
This allows the lmdb map size to be set during a clone, instead of
hard-wiring it to 8Gb.

Signed-off-by: Gary Lockyer <gary@catalyst.net.nz>'
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
python/samba/join.py
python/samba/netcmd/drs.py
selftest/knownfail.d/drs_clone_dc_lmdb_size [deleted file]

index 2d756a46f14e27ff568bc9add57d8f0ef929e0ca..794f5577b419caf2b275c404442a524e485e1e5c 100644 (file)
@@ -1551,12 +1551,14 @@ def join_DC(logger=None, server=None, creds=None, lp=None, site=None, netbios_na
 
 def join_clone(logger=None, server=None, creds=None, lp=None,
                targetdir=None, domain=None, include_secrets=False,
-               dns_backend="NONE", backend_store=None):
+               dns_backend="NONE", backend_store=None,
+               backend_store_size=None):
     """Creates a local clone of a remote DC."""
     ctx = DCCloneContext(logger, server, creds, lp, targetdir=targetdir,
                          domain=domain, dns_backend=dns_backend,
                          include_secrets=include_secrets,
-                         backend_store=backend_store)
+                         backend_store=backend_store,
+                         backend_store_size=backend_store_size)
 
     lp.set("workgroup", ctx.domain_name)
     logger.info("workgroup is %s" % ctx.domain_name)
@@ -1629,11 +1631,13 @@ class DCCloneContext(DCJoinContext):
 
     def __init__(ctx, logger=None, server=None, creds=None, lp=None,
                  targetdir=None, domain=None, dns_backend=None,
-                 include_secrets=False, backend_store=None):
+                 include_secrets=False, backend_store=None,
+                 backend_store_size=None):
         super(DCCloneContext, ctx).__init__(logger, server, creds, lp,
                                             targetdir=targetdir, domain=domain,
                                             dns_backend=dns_backend,
-                                            backend_store=backend_store)
+                                            backend_store=backend_store,
+                                            backend_store_size=backend_store_size)
 
         # As we don't want to create or delete these DNs, we set them to None
         ctx.server_dn = None
index e6b892c2877008cf1e66c4b15b4e37b705485587..739498cca1b4662be89802b2958f74120f96d0f6 100644 (file)
@@ -47,6 +47,7 @@ from samba.uptodateness import (
     get_kcc_and_dsas,
 )
 from samba.compat import get_string
+from samba.samdb import get_default_backend_store
 
 def drsuapi_connect(ctx):
     '''make a DRSUAPI connection to the server'''
@@ -756,14 +757,21 @@ class cmd_drs_clone_dc_database(Command):
         Option("--targetdir", help="where to store provision (required)", type=str),
         Option("-q", "--quiet", help="Be quiet", action="store_true"),
         Option("--include-secrets", help="Also replicate secret values", action="store_true"),
-        Option("-v", "--verbose", help="Be verbose", action="store_true")
+        Option("--backend-store", type="choice", metavar="BACKENDSTORE",
+               choices=["tdb", "mdb"],
+               help="Specify the database backend to be used "
+                    "(default is %s)" % get_default_backend_store()),
+        Option("--backend-store-size", type="bytes", metavar="SIZE",
+               help="Specify the size of the backend database, currently" +
+                    "only supported by lmdb backends (default is 8 Gb).")
     ]
 
     takes_args = ["domain"]
 
     def run(self, domain, sambaopts=None, credopts=None,
             versionopts=None, server=None, targetdir=None,
-            quiet=False, verbose=False, include_secrets=False):
+            quiet=False, verbose=False, include_secrets=False,
+            backend_store=None, backend_store_size=None):
         lp = sambaopts.get_loadparm()
         creds = credopts.get_credentials(lp)
 
@@ -774,7 +782,9 @@ class cmd_drs_clone_dc_database(Command):
 
         join_clone(logger=logger, server=server, creds=creds, lp=lp,
                    domain=domain, dns_backend='SAMBA_INTERNAL',
-                   targetdir=targetdir, include_secrets=include_secrets)
+                   targetdir=targetdir, include_secrets=include_secrets,
+                   backend_store=backend_store,
+                   backend_store_size=backend_store_size)
 
 
 class cmd_drs_uptodateness(Command):
diff --git a/selftest/knownfail.d/drs_clone_dc_lmdb_size b/selftest/knownfail.d/drs_clone_dc_lmdb_size
deleted file mode 100644 (file)
index 607f2fb..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-samba.tests.samba_tool.drs_clone_dc_data_lmdb_size.samba.tests.samba_tool.drs_clone_dc_data_lmdb_size.DrsCloneDcDataLmdbSizeTestCase.test_64Mb\(ad_dc_default\)
-samba.tests.samba_tool.drs_clone_dc_data_lmdb_size.samba.tests.samba_tool.drs_clone_dc_data_lmdb_size.DrsCloneDcDataLmdbSizeTestCase.test_default\(ad_dc_default\)
-samba.tests.samba_tool.drs_clone_dc_data_lmdb_size.samba.tests.samba_tool.drs_clone_dc_data_lmdb_size.DrsCloneDcDataLmdbSizeTestCase.test_invalid_unit_suffix\(ad_dc_default\)
-samba.tests.samba_tool.drs_clone_dc_data_lmdb_size.samba.tests.samba_tool.drs_clone_dc_data_lmdb_size.DrsCloneDcDataLmdbSizeTestCase.test_no_unit_suffix\(ad_dc_default\)
-samba.tests.samba_tool.drs_clone_dc_data_lmdb_size.samba.tests.samba_tool.drs_clone_dc_data_lmdb_size.DrsCloneDcDataLmdbSizeTestCase.test_non_numeric\(ad_dc_default\)