[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Many files:
ChangeSet 1.1713.1.18, 2005/06/17 11:24:34+01:00, cl349@xxxxxxxxxxxxxxxxxxxx Many files: - watch now takes a token, returned when reading watch - More tests - Fix domain shared page communication (flush output) - Add "home" path for domains - More permissions checks in various functions - Simplify watch acknowledgement code and fix occasional bug xs_watch_stress.c, 12readonly.sh, 11domain-watch.sh, 10domain-homedir.sh: new file xs_stress.c, xs_lib.h, xs_lib.c: Cleanup whitespace. ignore: Add tools/xenstore/xs_watch_stress Signed-off-by: Rusty Russell <rusty@xxxxxxxxxxxxxxx> Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx> python/xen/lowlevel/xs/xs.c | 35 +++--- xenstore/Makefile | 14 +- xenstore/testsuite/07watch.sh | 116 +++++++++++++++++--- xenstore/testsuite/10domain-homedir.sh | 12 ++ xenstore/testsuite/11domain-watch.sh | 51 ++++++++ xenstore/testsuite/12readonly.sh | 40 ++++++ xenstore/testsuite/test.sh | 2 xenstore/xenstored_core.c | 126 +++++++++++++++++----- xenstore/xenstored_core.h | 19 ++- xenstore/xenstored_domain.c | 28 +++- xenstore/xenstored_domain.h | 4 xenstore/xenstored_transaction.c | 1 xenstore/xenstored_watch.c | 189 +++++++++++++++++++++------------ xenstore/xenstored_watch.h | 20 ++- xenstore/xs.c | 62 ++++++---- xenstore/xs.h | 41 +++---- xenstore/xs_lib.c | 3 xenstore/xs_lib.h | 8 - xenstore/xs_stress.c | 2 xenstore/xs_test.c | 35 +++--- xenstore/xs_watch_stress.c | 120 ++++++++++++++++++++ 21 files changed, 712 insertions(+), 216 deletions(-) diff -Nru a/tools/python/xen/lowlevel/xs/xs.c b/tools/python/xen/lowlevel/xs/xs.c --- a/tools/python/xen/lowlevel/xs/xs.c 2005-06-17 21:03:20 -04:00 +++ b/tools/python/xen/lowlevel/xs/xs.c 2005-06-17 21:03:20 -04:00 @@ -277,10 +277,11 @@ static PyObject *xspy_watch(PyObject *self, PyObject *args, PyObject *kwds) { - static char *kwd_spec[] = { "path", "priority", NULL }; - static char *arg_spec = "s|i"; + static char *kwd_spec[] = { "path", "priority", "token", NULL }; + static char *arg_spec = "s|is"; char *path = NULL; int priority = 0; + char *token; struct xs_handle *xh = xshandle(self); PyObject *val = NULL; @@ -289,9 +290,9 @@ if (!xh) goto exit; if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec, - &path, &priority)) + &path, &priority, &token)) goto exit; - xsval = xs_watch(xh, path, priority); + xsval = xs_watch(xh, path, token, priority); val = pyvalue_int(xsval); exit: return val; @@ -305,14 +306,19 @@ struct xs_handle *xh = xshandle(self); PyObject *val = NULL; - char *xsval = NULL; + char **xsval = NULL; if (!xh) goto exit; if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec)) goto exit; xsval = xs_read_watch(xh); - val = pyvalue_str(xsval); + if(!xsval){ + val = PyErr_SetFromErrno(PyExc_RuntimeError); + goto exit; + } + /* Create tuple (path, token). */ + val = Py_BuildValue("(ss)", xsval[0], xsval[1]); exit: if (xsval) free(xsval); @@ -323,7 +329,8 @@ PyObject *kwds) { static char *kwd_spec[] = { NULL }; - static char *arg_spec = ""; + static char *arg_spec = "s"; + char *token = ""; struct xs_handle *xh = xshandle(self); PyObject *val = NULL; @@ -331,9 +338,9 @@ if (!xh) goto exit; - if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec, &token)) goto exit; - xsval = xs_acknowledge_watch(xh); + xsval = xs_acknowledge_watch(xh, token); val = pyvalue_int(xsval); exit: return val; @@ -341,9 +348,10 @@ static PyObject *xspy_unwatch(PyObject *self, PyObject *args, PyObject *kwds) { - static char *kwd_spec[] = { "path", NULL }; - static char *arg_spec = "s|"; + static char *kwd_spec[] = { "path", "token", NULL }; + static char *arg_spec = "s|s"; char *path = NULL; + char *token = ""; struct xs_handle *xh = xshandle(self); PyObject *val = NULL; @@ -351,9 +359,10 @@ if (!xh) goto exit; - if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec, &path)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec, &path, + &token)) goto exit; - xsval = xs_unwatch(xh, path); + xsval = xs_unwatch(xh, path, token); val = pyvalue_int(xsval); exit: return val; diff -Nru a/tools/xenstore/Makefile b/tools/xenstore/Makefile --- a/tools/xenstore/Makefile 2005-06-17 21:03:20 -04:00 +++ b/tools/xenstore/Makefile 2005-06-17 21:03:20 -04:00 @@ -41,8 +41,9 @@ xs_test: xs_test.o xs_lib.o utils.o xs_random: xs_random.o xs_test_lib.o xs_lib.o talloc.o utils.o xs_stress: xs_stress.o xs_test_lib.o xs_lib.o talloc.o utils.o +xs_watch_stress: xs_watch_stress.o xs_test_lib.o xs_lib.o talloc.o utils.o -xs_test.o xs_stress.o xenstored_core_test.o xenstored_watch_test.o xenstored_transaction_test.o xenstored_domain_test.o xs_random.o xs_test_lib.o talloc_test.o fake_libxc.o: CFLAGS=$(BASECFLAGS) $(TESTFLAGS) +xs_test.o xs_stress.o xs_watch_stress.o xenstored_core_test.o xenstored_watch_test.o xenstored_transaction_test.o xenstored_domain_test.o xs_random.o xs_test_lib.o talloc_test.o fake_libxc.o: CFLAGS=$(BASECFLAGS) $(TESTFLAGS) xenstored_%_test.o: xenstored_%.c $(COMPILE.c) -o $@ $< @@ -63,8 +64,9 @@ libxenstore-pic.a: $(LIB_OBJS_PIC) clean: testsuite-clean - rm -f *.o *.opic *.a xen - rm -f xs_test xenstored xenstored_test xs_random xs_stress xs_dom0_test + rm -f *.o *.opic *.a + rm -f xen xenstored xs_random xs_stress xs_watch_stress + rm -f xs_test xenstored_test xs_dom0_test -$(RM) $(PROG_DEP) check: testsuite-run randomcheck stresstest @@ -83,9 +85,11 @@ $(TESTENV) ./xs_random --fast /tmp/xs_random 100000 $(RANDSEED) $(TESTENV) ./xs_random --fail /tmp/xs_random 10000 $(RANDSEED) -stresstest: xs_stress xenstored_test +stresstest: xs_stress xs_watch_stress xenstored_test rm -rf $(TESTDIR)/store - export $(TESTENV); PID=`./xenstored_test --output-pid`; ./xs_stress 10000; ret=$$?; kill $$PID; exit $$ret + export $(TESTENV); PID=`./xenstored_test --output-pid`; ./xs_stress 5000; ret=$$?; kill $$PID; exit $$ret + rm -rf $(TESTDIR)/store + export $(TESTENV); PID=`./xenstored_test --output-pid`; ./xs_watch_stress; ret=$$?; kill $$PID; exit $$ret xs_dom0_test: xs_dom0_test.o utils.o $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -lxc -o $@ diff -Nru a/tools/xenstore/testsuite/07watch.sh b/tools/xenstore/testsuite/07watch.sh --- a/tools/xenstore/testsuite/07watch.sh 2005-06-17 21:03:20 -04:00 +++ b/tools/xenstore/testsuite/07watch.sh 2005-06-17 21:03:20 -04:00 @@ -3,30 +3,118 @@ # Watch something, write to it, check watch has fired. [ "`echo -e 'write /test create contents' | ./xs_test 2>&1`" = "" ] -[ "`echo -e '1 watch /test 100\n2 write /test create contents2\n1 waitwatch\n1 ackwatch' | ./xs_test 2>&1`" = "1:/test" ] +[ "`echo -e '1 watch /test token 100 +2 write /test create contents2 +1 waitwatch +1 ackwatch token' | ./xs_test 2>&1`" = "1:/test:token" ] # Check that reads don't set it off. -[ "`echo -e '1 watch /test 100\n2 read /test\n1 waitwatch' | ./xs_test 2>&1`" = "2:contents2 +[ "`echo -e '1 watch /test token 100 +2 read /test +1 waitwatch' | ./xs_test 2>&1`" = "2:contents2 1:waitwatch timeout" ] -# mkdir, setperm and rm should (also /tests watching dirs) +# mkdir, setperm and rm should (also tests watching dirs) [ "`echo -e 'mkdir /dir' | ./xs_test 2>&1`" = "" ] -[ "`echo -e '1 watch /dir 100\n2 mkdir /dir/newdir\n1 waitwatch\n1 ackwatch\n2 setperm /dir/newdir 0 READ\n1 waitwatch\n1 ackwatch\n2 rm /dir/newdir\n1 waitwatch\n1 ackwatch' | ./xs_test 2>&1`" = "1:/dir/newdir -1:/dir/newdir -1:/dir/newdir" ] +[ "`echo -e '1 watch /dir token 100 +2 mkdir /dir/newdir +1 waitwatch +1 ackwatch token +2 setperm /dir/newdir 0 READ +1 waitwatch +1 ackwatch token +2 rm /dir/newdir +1 waitwatch +1 ackwatch token' | ./xs_test 2>&1`" = "1:/dir/newdir:token +1:/dir/newdir:token +1:/dir/newdir:token" ] # ignore watches while doing commands, should work. -[ "`echo -e 'watch /dir 100\nwrite /dir/test create contents\nread /dir/test\nwaitwatch\nackwatch' | ./xs_test 2>&1`" = "contents -/dir/test" ] +[ "`echo -e 'watch /dir token 100 +write /dir/test create contents +read /dir/test +waitwatch +ackwatch token' | ./xs_test 2>&1`" = "contents +/dir/test:token" ] # watch priority /test. -[ "`echo -e '1 watch /dir 1\n3 watch /dir 3\n2 watch /dir 2\nwrite /dir/test create contents\n3 waitwatch\n3 ackwatch\n2 waitwatch\n2 ackwatch\n1 waitwatch\n1 ackwatch' | ./xs_test 2>&1`" = "3:/dir/test -2:/dir/test -1:/dir/test" ] +[ "`echo -e '1 watch /dir token1 1 +3 watch /dir token3 3 +2 watch /dir token2 2 +write /dir/test create contents +3 waitwatch +3 ackwatch token3 +2 waitwatch +2 ackwatch token2 +1 waitwatch +1 ackwatch token1' | ./xs_test 2>&1`" = "3:/dir/test:token3 +2:/dir/test:token2 +1:/dir/test:token1" ] # If one dies (without acking), the other should still get ack. -[ "`echo -e '1 watch /dir 0\n2 watch /dir 1\nwrite /dir/test create contents\n2 waitwatch\n2 close\n1 waitwatch\n1 ackwatch' | ./xs_test 2>&1`" = "2:/dir/test -1:/dir/test" ] +[ "`echo -e '1 watch /dir token1 0 +2 watch /dir token2 1 +write /dir/test create contents +2 waitwatch +2 close +1 waitwatch +1 ackwatch token1' | ./xs_test 2>&1`" = "2:/dir/test:token2 +1:/dir/test:token1" ] # If one dies (without reading at all), the other should still get ack. -[ "`echo -e '1 watch /dir 0\n2 watch /dir 1\nwrite /dir/test create contents\n2 close\n1 waitwatch\n1 ackwatch' | ./xs_test 2>&1`" = "1:/dir/test" ] +[ "`echo -e '1 watch /dir token1 0 +2 watch /dir token2 1 +write /dir/test create contents +2 close +1 waitwatch +1 ackwatch token1' | ./xs_test 2>&1`" = "1:/dir/test:token1" ] + +# unwatch +[ "`echo -e '1 watch /dir token1 0 +1 unwatch /dir token1 +1 watch /dir token2 0 +2 write /dir/test2 create contents +1 waitwatch +1 unwatch /dir token2' | ./xs_test 2>&1`" = "1:/dir/test2:token2" ] + +# unwatch while watch pending. +[ "`echo -e '1 watch /dir token1 0 +2 watch /dir token2 1 +write /dir/test create contents +2 unwatch /dir token2 +1 waitwatch +1 ackwatch token1' | ./xs_test 2>&1`" = "1:/dir/test:token1" ] + +# check we only get notified once. +[ "`echo -e '1 watch /test token 100 +2 write /test create contents2 +1 waitwatch +1 ackwatch token +1 waitwatch' | ./xs_test 2>&1`" = "1:/test:token +1:waitwatch timeout" ] + _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |