On Thu, 2012-08-09 at 08:21 +0200, Andrew Bartlett wrote: 
> The branch, master has been updated
>        via  a117fd6 s4-dsdb: Ensure we have indexing enabled during the 
> provision
>        via  ef87b4e s4-pydsdb: Provide control of if we should write index 
> attributes when reloading a schema
>       from  1a1f01e s4-dsdb: Change talloc parent
> 
> http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
> 
> 
> - Log -----------------------------------------------------------------
> commit a117fd6d11aef5360a1af1fc6da542829da8b7b0
> Author: Andrew Bartlett <abart...@samba.org>
> Date:   Thu Aug 9 14:33:49 2012 +1000
> 
>     s4-dsdb: Ensure we have indexing enabled during the provision
>     
>     Because we set the schema before we connected the ldb to a file, the 
> @INDEX records
>     were not added until next startup.  This cost 100% more time in running 
> provision on
>     my laptop.
>     
>     Andrew Bartlett
>     
>     Autobuild-User(master): Andrew Bartlett <abart...@samba.org>
>     Autobuild-Date(master): Thu Aug  9 08:20:36 CEST 2012 on sn-devel-104
> 
> commit ef87b4e4f10eb7d5974cb0e0861648d537153a00
> Author: Andrew Bartlett <abart...@samba.org>
> Date:   Thu Aug 9 14:23:12 2012 +1000
> 
>     s4-pydsdb: Provide control of if we should write index attributes when 
> reloading a schema
>     
>     This allows us to carefully control the loading of the schema.
>     
>     Andrew Bartlett
> 
> -----------------------------------------------------------------------
> 
> Summary of changes:
>  source4/dsdb/pydsdb.c                              |    6 ++++--
>  .../scripting/python/samba/provision/__init__.py   |    7 ++++++-
>  source4/scripting/python/samba/samdb.py            |    8 ++++----
>  3 files changed, 14 insertions(+), 7 deletions(-)
> 
> 
> Changeset truncated at 500 lines:
> 
> diff --git a/source4/dsdb/pydsdb.c b/source4/dsdb/pydsdb.c
> index 3558049..9023d69 100644
> --- a/source4/dsdb/pydsdb.c
> +++ b/source4/dsdb/pydsdb.c
> @@ -873,7 +873,9 @@ static PyObject *py_dsdb_set_schema_from_ldb(PyObject 
> *self, PyObject *args)
>       struct ldb_context *from_ldb;
>       struct dsdb_schema *schema;
>       int ret;
> -     if (!PyArg_ParseTuple(args, "OO", &py_ldb, &py_from_ldb))
> +     char write_attributes = true;
> +     if (!PyArg_ParseTuple(args, "OO|b",
> +                           &py_ldb, &py_from_ldb, &write_attributes))
>               return NULL;
>  
>       PyErr_LDB_OR_RAISE(py_ldb, ldb);
> @@ -886,7 +888,7 @@ static PyObject *py_dsdb_set_schema_from_ldb(PyObject 
> *self, PyObject *args)
>               return NULL;
>       }
>  
> -     ret = dsdb_reference_schema(ldb, schema, true);
> +     ret = dsdb_reference_schema(ldb, schema, write_attributes);
>       PyErr_LDB_ERROR_IS_ERR_RAISE(py_ldb_get_exception(), ret, ldb);
>  
>       Py_RETURN_NONE;
> diff --git a/source4/scripting/python/samba/provision/__init__.py 
> b/source4/scripting/python/samba/provision/__init__.py
> index 192130e..94e857e 100644
> --- a/source4/scripting/python/samba/provision/__init__.py
> +++ b/source4/scripting/python/samba/provision/__init__.py
> @@ -1121,7 +1121,7 @@ def setup_samdb(path, session_info, provision_backend, 
> lp, names,
>      logger.info("Pre-loading the Samba 4 and AD schema")
>  
>      # Load the schema from the one we computed earlier
> -    samdb.set_schema(schema)
> +    samdb.set_schema(schema, write_attributes=False)
>  
>      # Set the NTDS settings DN manually - in order to have it already around
>      # before the provisioned tree exists and we connect
> @@ -1131,6 +1131,11 @@ def setup_samdb(path, session_info, provision_backend, 
> lp, names,
>      # DB
>      samdb.connect(path)
>  
> +    # But we have to give it one more kick to have it use the schema
> +    # during provision - it needs, now that it is connected, to write
> +    # the schema @INDEX records to the database.
> +    samdb.set_schema(schema, write_attributes=True)
> +
>      return samdb
>  
> 
> diff --git a/source4/scripting/python/samba/samdb.py 
> b/source4/scripting/python/samba/samdb.py
> index 7451b6c..3355e9a 100644
> --- a/source4/scripting/python/samba/samdb.py
> +++ b/source4/scripting/python/samba/samdb.py
> @@ -608,11 +608,11 @@ accountExpires: %u
>      def load_partition_usn(self, base_dn):
>          return dsdb._dsdb_load_partition_usn(self, base_dn)
>  
> -    def set_schema(self, schema):
> -        self.set_schema_from_ldb(schema.ldb)
> +    def set_schema(self, schema, write_attributes=True):
> +        self.set_schema_from_ldb(schema.ldb, 
> write_attributes=write_attributes)
>  
> -    def set_schema_from_ldb(self, ldb_conn):
> -        dsdb._dsdb_set_schema_from_ldb(self, ldb_conn)
> +    def set_schema_from_ldb(self, ldb_conn, write_attributes=True):
> +        dsdb._dsdb_set_schema_from_ldb(self, ldb_conn, write_attributes)
>  
>      def dsdb_DsReplicaAttribute(self, ldb, ldap_display_name, ldif_elements):
>          '''convert a list of attribute values to a DRSUAPI 
> DsReplicaAttribute'''
> 
> 

This code would be clearer if you called the variable write_index,
rather then write_attributes

Simo.

-- 
Simo Sorce
Samba Team GPL Compliance Officer <s...@samba.org>
Principal Software Engineer at Red Hat, Inc. <s...@redhat.com>

Reply via email to