summaryrefslogtreecommitdiffstats
path: root/libglusterfsclient/src/libglusterfsclient.c
diff options
context:
space:
mode:
authorShehjar Tikoo <shehjart@gluster.com>2009-07-19 03:25:45 +0000
committerAnand V. Avati <avati@dev.gluster.com>2009-07-20 14:29:37 -0700
commit7b90b90780d3bb5a1b4a1c060fac1d2c4eb2a8dc (patch)
treeafb00b20556d3cd7002f3d797479c71d0e1fa334 /libglusterfsclient/src/libglusterfsclient.c
parent20a142f76834668b9e1674010ba5af0b4b441474 (diff)
libglusterfsclient: Move DHT root-lookup workaround to init
The workaround for the DHT requirement for a lookup on / needs to be done only once when the xlator graph is inited. Doing it on every path's lookup results in a major performance penalty when using distribute subvolumes upwards of 16, as reported by Avati. Ref: bug 152 Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 152 (libglusterfsclient: DHT workaround is a major performance bottleneck) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=152
Diffstat (limited to 'libglusterfsclient/src/libglusterfsclient.c')
-rwxr-xr-xlibglusterfsclient/src/libglusterfsclient.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/libglusterfsclient/src/libglusterfsclient.c b/libglusterfsclient/src/libglusterfsclient.c
index 6ff6f24..c4624ec 100755
--- a/libglusterfsclient/src/libglusterfsclient.c
+++ b/libglusterfsclient/src/libglusterfsclient.c
@@ -961,6 +961,7 @@ glusterfs_init (glusterfs_init_params_t *init_ctx)
int32_t ret = 0;
struct rlimit lim;
uint32_t xl_count = 0;
+ loc_t new_loc = {0, };
if (!init_ctx || (!init_ctx->specfile && !init_ctx->specfp)) {
errno = EINVAL;
@@ -1261,6 +1262,17 @@ glusterfs_init (glusterfs_init_params_t *init_ctx)
}
pthread_mutex_unlock (&priv->lock);
+ /* workaround for xlators like dht which require lookup to be sent
+ * on / */
+ libgf_client_loc_fill (&new_loc, ctx, 1, 0, "/");
+ ret = libgf_client_lookup (ctx, &new_loc, NULL, NULL, NULL);
+ if (ret == -1) {
+ gf_log ("libglusterfsclient", GF_LOG_ERROR, "lookup of /"
+ " failed");
+ return NULL;
+ }
+ libgf_client_loc_wipe (&new_loc);
+
first_init = 0;
return ctx;