summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xtests/performance/open-behind.t18
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volume-set.c5
-rw-r--r--xlators/performance/open-behind/src/open-behind.c4
3 files changed, 25 insertions, 2 deletions
diff --git a/tests/performance/open-behind.t b/tests/performance/open-behind.t
index 2524ce9e..032154a2 100755
--- a/tests/performance/open-behind.t
+++ b/tests/performance/open-behind.t
@@ -32,6 +32,21 @@ function write_to()
TEST write_to "$M0/$F0" "$D0";
EXPECT "$D0" cat $M1/$F0;
+# open-behind delays open and uses anonymous fds for fops like
+# fstat and readv. So after creating the file, if volume is restarted
+# then later when the file is read, because of the use of anonymous fds
+# volume top open will show number of files opened as 0.
+TEST $CLI volume stop $V0;
+sleep 1;
+TEST $CLI volume start $V0;
+
+sleep 2;
+cat $M1/$F0 >/dev/null;
+
+string=$(gluster volume top $V0 open | grep -w "$F0");
+
+EXPECT "" echo $string;
+
TEST $CLI volume set $V0 performance.open-behind off;
D1="hello-this-is-a-test-message1";
@@ -42,4 +57,7 @@ EXPECT "$D1" cat $M1/$F1;
EXPECT "$D0" cat $M1/$F0;
+gluster volume top $V0 open | grep -w "$F0" >/dev/null 2>&1
+TEST [ $? -eq 0 ];
+
cleanup;
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
index 62e7b425..c063fc62 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
@@ -356,6 +356,11 @@ struct volopt_map_entry glusterd_volopt_map[] = {
.flags = 2,
.op_version = 1
},
+ { .key = "performance.lazy-open",
+ .voltype = "performance/open-behind",
+ .option = "lazy-open",
+ .op_version = 2
+ },
{ .key = "performance.read-ahead-page-count",
.voltype = "performance/read-ahead",
.option = "page-count",
diff --git a/xlators/performance/open-behind/src/open-behind.c b/xlators/performance/open-behind/src/open-behind.c
index e6791973..ec5f6258 100644
--- a/xlators/performance/open-behind/src/open-behind.c
+++ b/xlators/performance/open-behind/src/open-behind.c
@@ -361,7 +361,7 @@ ob_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,
if (!stub)
goto err;
- open_and_resume (this, fd, stub);
+ open_and_resume (this, wind_fd, stub);
return 0;
err:
@@ -408,7 +408,7 @@ ob_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)
if (!stub)
goto err;
- open_and_resume (this, fd, stub);
+ open_and_resume (this, wind_fd, stub);
return 0;
err: