This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


[Xen-devel] XenStore Watch Behavior

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] XenStore Watch Behavior
From: John McCullough <jmccullo@xxxxxxxxxxx>
Date: Sat, 26 Aug 2006 13:32:22 -0700
Delivery-date: Sat, 26 Aug 2006 13:33:00 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Mail-followup-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.12-2006-07-14
    I have noticed some issues with watches on XenStore.  Mainly that
multiple watches on the same node in a hierachy or a watch on a node and
a child of that node do not fire as one might expect.
    I have been working on hvm domain forking and I am using the
XenStore to communicate between xend and the qemu-dm.  The first issue
that I noticed was that you cannot use a single node to communicate
state.  Only one of the watches on the node would fire and no
communication could occur.
    Using two nodes for bidirectional communication worked fine in
normal operation, however, I discovered that during shutdown some other
watch existed on the domain's path in the store and it blocked the
watches on the xend side.  Initially I was using a combination of
xswatch with a Semaphore to perform blocking reads and the xswatch
function was never getting triggered.  I changed to using the interface
more directly via xs.watch and xs.read_watch.  I could block and read
data, but after my own function terminated the xswatch interface would
try to execute my token as an xswatch token.  Adding a no-op .fn and
empty .args and .kwargs to my token let this pass through.
Unfortunately in general operations before guest destruction the changes
that I wanted to be caught by xs.read_watch were being consumed by an
unrelated xs.watch.
    What is the intended behavior of watches on the XenStore?  Should
only one watch be allowed on a given sub-hierarchy?  Should the most
specific watch be triggered alone?  Should all watches be triggered?

John McCullough

Attachment: signature.asc
Description: Digital signature

Xen-devel mailing list