From 3a8b67d06cf631f4d883ce40859401eb760bb0f3 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 23 Nov 2010 20:19:49 +1100 Subject: [PATCH] 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. --- source4/lib/ldb/ABI/ldb-0.9.19.sigs | 2 +- source4/lib/ldb/common/ldb_parse.c | 2 +- source4/lib/ldb/include/ldb.h | 2 +- source4/lib/ldb/ldb_tdb/ldb_search.c | 14 +++++++------- source4/lib/ldb/ldb_tdb/ldb_tdb.c | 4 ++++ 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 53b6b2c4a51..62738709e4e 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 16b3e217fe5..b4eabf8375c 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 eeb939a170c..1deed84550c 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 5df1e4d59e6..b58243c26c7 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 2e88989d574..066d4085bba 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 493c276b138..33313b00da9 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; }; /* -- 2.34.1