diff options
author | Andrew Tridgell <tridge@samba.org> | 2010-11-23 20:19:49 +1100 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2010-11-23 22:14:58 +1100 |
commit | 3a8b67d06cf631f4d883ce40859401eb760bb0f3 (patch) | |
tree | e83e5260f822d464075a224baf701e40bbcdf33b /source4/lib/ldb | |
parent | 439ff8717d41fb641f2a2cf2b14665edf375433d (diff) | |
download | samba-3a8b67d06cf631f4d883ce40859401eb760bb0f3.tar.gz samba-3a8b67d06cf631f4d883ce40859401eb760bb0f3.tar.bz2 samba-3a8b67d06cf631f4d883ce40859401eb760bb0f3.zip |
s4-ldb: added an environment varibale LDB_WARN_UNINDEXED
when LDB_WARN_UNINDEXED is set, we produce warnings about unindexed
searches. This makes it easier to find performance problems caused by
unindexed searches.
Diffstat (limited to 'source4/lib/ldb')
-rw-r--r-- | source4/lib/ldb/ABI/ldb-0.9.19.sigs | 2 | ||||
-rw-r--r-- | source4/lib/ldb/common/ldb_parse.c | 2 | ||||
-rw-r--r-- | source4/lib/ldb/include/ldb.h | 2 | ||||
-rw-r--r-- | source4/lib/ldb/ldb_tdb/ldb_search.c | 14 | ||||
-rw-r--r-- | source4/lib/ldb/ldb_tdb/ldb_tdb.c | 4 | ||||
-rw-r--r-- | source4/lib/ldb/ldb_tdb/ldb_tdb.h | 2 |
6 files changed, 16 insertions, 10 deletions
diff --git a/source4/lib/ldb/ABI/ldb-0.9.19.sigs b/source4/lib/ldb/ABI/ldb-0.9.19.sigs index 53b6b2c4a5..62738709e4 100644 --- a/source4/lib/ldb/ABI/ldb-0.9.19.sigs +++ b/source4/lib/ldb/ABI/ldb-0.9.19.sigs @@ -78,7 +78,7 @@ ldb_error_at: int (struct ldb_context *, int, const char *, const char *, int) ldb_errstring: const char *(struct ldb_context *) ldb_extended: int (struct ldb_context *, const char *, void *, struct ldb_result **) ldb_extended_default_callback: int (struct ldb_request *, struct ldb_reply *) -ldb_filter_from_tree: char *(TALLOC_CTX *, struct ldb_parse_tree *) +ldb_filter_from_tree: char *(TALLOC_CTX *, const struct ldb_parse_tree *) ldb_get_config_basedn: struct ldb_dn *(struct ldb_context *) ldb_get_create_perms: unsigned int (struct ldb_context *) ldb_get_default_basedn: struct ldb_dn *(struct ldb_context *) diff --git a/source4/lib/ldb/common/ldb_parse.c b/source4/lib/ldb/common/ldb_parse.c index 16b3e217fe..b4eabf8375 100644 --- a/source4/lib/ldb/common/ldb_parse.c +++ b/source4/lib/ldb/common/ldb_parse.c @@ -679,7 +679,7 @@ struct ldb_parse_tree *ldb_parse_tree(TALLOC_CTX *mem_ctx, const char *s) /* construct a ldap parse filter given a parse tree */ -char *ldb_filter_from_tree(TALLOC_CTX *mem_ctx, struct ldb_parse_tree *tree) +char *ldb_filter_from_tree(TALLOC_CTX *mem_ctx, const struct ldb_parse_tree *tree) { char *s, *s2, *ret; unsigned int i; diff --git a/source4/lib/ldb/include/ldb.h b/source4/lib/ldb/include/ldb.h index eeb939a170..1deed84550 100644 --- a/source4/lib/ldb/include/ldb.h +++ b/source4/lib/ldb/include/ldb.h @@ -314,7 +314,7 @@ struct ldb_parse_tree { }; struct ldb_parse_tree *ldb_parse_tree(TALLOC_CTX *mem_ctx, const char *s); -char *ldb_filter_from_tree(TALLOC_CTX *mem_ctx, struct ldb_parse_tree *tree); +char *ldb_filter_from_tree(TALLOC_CTX *mem_ctx, const struct ldb_parse_tree *tree); /** Encode a binary blob diff --git a/source4/lib/ldb/ldb_tdb/ldb_search.c b/source4/lib/ldb/ldb_tdb/ldb_search.c index 5df1e4d59e..b58243c26c 100644 --- a/source4/lib/ldb/ldb_tdb/ldb_search.c +++ b/source4/lib/ldb/ldb_tdb/ldb_search.c @@ -578,13 +578,13 @@ int ltdb_search(struct ltdb_context *ctx) * callback error */ if ( ! ctx->request_terminated && ret != LDB_SUCCESS) { /* Not indexed, so we need to do a full scan */ -#if 0 - /* useful for debugging when slow performance - * is caused by unindexed searches */ - char *expression = ldb_filter_from_tree(ctx, ctx->tree); - printf("FULL SEARCH: %s\n", expression); - talloc_free(expression); -#endif + if (ltdb->warn_unindexed) { + /* useful for debugging when slow performance + * is caused by unindexed searches */ + char *expression = ldb_filter_from_tree(ctx, ctx->tree); + ldb_debug(ldb, LDB_DEBUG_WARNING, "ldb FULL SEARCH: %s\n", expression); + talloc_free(expression); + } if (match_count != 0) { /* the indexing code gave an error * after having returned at least one diff --git a/source4/lib/ldb/ldb_tdb/ldb_tdb.c b/source4/lib/ldb/ldb_tdb/ldb_tdb.c index 2e88989d57..066d4085bb 100644 --- a/source4/lib/ldb/ldb_tdb/ldb_tdb.c +++ b/source4/lib/ldb/ldb_tdb/ldb_tdb.c @@ -1463,6 +1463,10 @@ static int ltdb_connect(struct ldb_context *ldb, const char *url, return LDB_ERR_OPERATIONS_ERROR; } + if (getenv("LDB_WARN_UNINDEXED")) { + ltdb->warn_unindexed = true; + } + ltdb->sequence_number = 0; module = ldb_module_new(ldb, ldb, "ldb_tdb backend", <db_ops); diff --git a/source4/lib/ldb/ldb_tdb/ldb_tdb.h b/source4/lib/ldb/ldb_tdb/ldb_tdb.h index 493c276b13..33313b00da 100644 --- a/source4/lib/ldb/ldb_tdb/ldb_tdb.h +++ b/source4/lib/ldb/ldb_tdb/ldb_tdb.h @@ -34,6 +34,8 @@ struct ltdb_private { struct ltdb_idxptr *idxptr; bool prepared_commit; int read_lock_count; + + bool warn_unindexed; }; /* |