summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2010-11-23 20:19:49 +1100
committerAndrew Tridgell <tridge@samba.org>2010-11-23 22:14:58 +1100
commit3a8b67d06cf631f4d883ce40859401eb760bb0f3 (patch)
treee83e5260f822d464075a224baf701e40bbcdf33b
parent439ff8717d41fb641f2a2cf2b14665edf375433d (diff)
downloadsamba-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.
-rw-r--r--source4/lib/ldb/ABI/ldb-0.9.19.sigs2
-rw-r--r--source4/lib/ldb/common/ldb_parse.c2
-rw-r--r--source4/lib/ldb/include/ldb.h2
-rw-r--r--source4/lib/ldb/ldb_tdb/ldb_search.c14
-rw-r--r--source4/lib/ldb/ldb_tdb/ldb_tdb.c4
-rw-r--r--source4/lib/ldb/ldb_tdb/ldb_tdb.h2
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", &ltdb_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;
};
/*