The branch, v4-9-test has been updated via c7b04443226 ldb: Bump ldb version to 1.4.5 via befb3527bc2 ldb: Avoid inefficient one-level searches from 9b21b518d72 s3-vfs: Use ENOATTR in errno comparison for getxattr
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-9-test - Log ----------------------------------------------------------------- commit c7b04443226f0bc83e6d14d48b48e15a4592c812 Author: Tim Beale <timbe...@catalyst.net.nz> Date: Mon Feb 4 12:20:34 2019 +1300 ldb: Bump ldb version to 1.4.5 * ldb: Avoid inefficient one-level searches BUG: https://bugzilla.samba.org/show_bug.cgi?id=13762 Signed-off-by: Tim Beale <timbe...@catalyst.net.nz> Signed-off-by: Stefan Metzmacher <me...@samba.org> Autobuild-User(v4-9-test): Stefan Metzmacher <me...@samba.org> Autobuild-Date(v4-9-test): Wed Feb 13 18:26:30 CET 2019 on sn-devel-144 commit befb3527bc2c94763d5daf57afa7ad5e94c929da Author: Tim Beale <timbe...@catalyst.net.nz> Date: Mon Feb 4 10:49:03 2019 +1300 ldb: Avoid inefficient one-level searches Commit 88ae60ed186c9 introduced a problem that made one-level searches inefficient if there were a lot of child objects in the same level, and the requested object didn't exist. Basically, it ignored the case where ldb_kv_index_dn() returned LDB_ERR_NO_SUCH_OBJECT, i.e. the indexed lookup was successful, but didn't find a match. At which point, there was no more processing we needed to do. The behaviour after 88ae60ed186c9 was to fall-through and run the ldb_kv_index_filter() function over *all* the children. This still returned the correct result, but could be costly if there were a lot of children. The case 88ae60ed186c9 was trying to fix was where we could not do an indexed search (e.g. trying to match on a 'attribute=*' filter). In which case we want to ignore the LDB_ERR_OPERATIONS_ERROR and just run ldb_kv_index_filter() over all the children. This is still more efficient than the fallback of doing a full database scan. This patch adds in a short-circuit for the NO_SUCH_OBJECT case, so we can skip the unnecessary ldb_kv_index_filter() work. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13762 Signed-off-by: Tim Beale <timbe...@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abart...@samba.org> (Manual merge of commit 9a893f9613bd6440ab in master) ----------------------------------------------------------------------- Summary of changes: lib/ldb/ABI/{ldb-1.3.0.sigs => ldb-1.4.5.sigs} | 0 .../{pyldb-util-1.1.10.sigs => pyldb-util-1.4.5.sigs} | 0 ...yldb-util-1.1.10.sigs => pyldb-util.py3-1.4.5.sigs} | 0 lib/ldb/ldb_tdb/ldb_index.c | 18 ++++++++++++++---- lib/ldb/wscript | 2 +- 5 files changed, 15 insertions(+), 5 deletions(-) copy lib/ldb/ABI/{ldb-1.3.0.sigs => ldb-1.4.5.sigs} (100%) copy lib/ldb/ABI/{pyldb-util-1.1.10.sigs => pyldb-util-1.4.5.sigs} (100%) copy lib/ldb/ABI/{pyldb-util-1.1.10.sigs => pyldb-util.py3-1.4.5.sigs} (100%) Changeset truncated at 500 lines: diff --git a/lib/ldb/ABI/ldb-1.3.0.sigs b/lib/ldb/ABI/ldb-1.4.5.sigs similarity index 100% copy from lib/ldb/ABI/ldb-1.3.0.sigs copy to lib/ldb/ABI/ldb-1.4.5.sigs diff --git a/lib/ldb/ABI/pyldb-util-1.1.10.sigs b/lib/ldb/ABI/pyldb-util-1.4.5.sigs similarity index 100% copy from lib/ldb/ABI/pyldb-util-1.1.10.sigs copy to lib/ldb/ABI/pyldb-util-1.4.5.sigs diff --git a/lib/ldb/ABI/pyldb-util-1.1.10.sigs b/lib/ldb/ABI/pyldb-util.py3-1.4.5.sigs similarity index 100% copy from lib/ldb/ABI/pyldb-util-1.1.10.sigs copy to lib/ldb/ABI/pyldb-util.py3-1.4.5.sigs diff --git a/lib/ldb/ldb_tdb/ldb_index.c b/lib/ldb/ldb_tdb/ldb_index.c index 4b5054e81ec..55abcba6b74 100644 --- a/lib/ldb/ldb_tdb/ldb_index.c +++ b/lib/ldb/ldb_tdb/ldb_index.c @@ -2031,13 +2031,23 @@ int ltdb_search_indexed(struct ltdb_context *ac, uint32_t *match_count) } /* * Here we load the index for the tree. - * - * We only care if this is successful, if the - * index can't trim the result list down then - * the ONELEVEL index is still good enough. */ ret = ltdb_index_dn(ac->module, ltdb, ac->tree, idx_one_tree_list); + + /* + * We can stop if we're sure the object doesn't exist + */ + if (ret == LDB_ERR_NO_SUCH_OBJECT) { + talloc_free(idx_one_tree_list); + talloc_free(dn_list); + return LDB_ERR_NO_SUCH_OBJECT; + } + + /* We only care if this is successful, if the + * index can't trim the result list down then + * the ONELEVEL index is still good enough. + */ if (ret == LDB_SUCCESS) { if (!list_intersect(ldb, ltdb, dn_list, diff --git a/lib/ldb/wscript b/lib/ldb/wscript index 028a213cce9..b555b16fa4a 100644 --- a/lib/ldb/wscript +++ b/lib/ldb/wscript @@ -1,7 +1,7 @@ #!/usr/bin/env python APPNAME = 'ldb' -VERSION = '1.4.4' +VERSION = '1.4.5' blddir = 'bin' -- Samba Shared Repository