def main():

    xs.watch("@introduceDomain", "reload")
    xs.watch("@releaseDomain", "reload")
    setup_watches()
    while True:
        (path, token) = xs.read_watch()
        if token == "reload":
            setup_watches()
        else:
            if path.endswith("/state"):
                handle_vbd_state(path)
def main():

    xs.watch('@introduceDomain', 'reload')
    xs.watch('@releaseDomain', 'reload')
    setup_watches()
    while True:
        (path, token) = xs.read_watch()
        if token == 'reload':
            setup_watches()
        else:
            if path.endswith('/state'):
                handle_vbd_state(path)
def setup_watches():
    global domain_list

    new_domain_list = xs.ls("", "/local/domain")
    for dom in new_domain_list:
        if dom not in domain_list:
            print "Adding: %s" % dom
            xs.watch("/local/domain/%s/backend/vbd" % dom, int(dom))
    for dom in domain_list:
        if dom not in new_domain_list:
            print "Removing: %s" % dom
            xs.unwatch("/local/domain/%s/backend/vbd" % dom, int(dom))
    domain_list = new_domain_list
def setup_watches():
    global domain_list

    new_domain_list = xs.ls('', '/local/domain')
    for dom in new_domain_list:
        if dom not in domain_list:
            print "Adding: %s" % dom
            xs.watch('/local/domain/%s/backend/vbd' % dom, int(dom))
    for dom in domain_list:
        if dom not in new_domain_list:
            print "Removing: %s" % dom
            xs.unwatch('/local/domain/%s/backend/vbd' % dom, int(dom))
    domain_list = new_domain_list
def main():
    xs = xen.lowlevel.xs.xs()

    suppress = set()
    xs.watch('/local/domain', '')
    for path, token in iter(xs.read_watch, None):
        if path in suppress:
            suppress.remove(path)
            continue
        if path.endswith('/state') and 'backend' in path:
            print('got watch {}'.format(path))
            while True:
                t = xs.transaction_start()
                state = xs.read(t, path)
                print('writing or not {} to {}'.format(state, path))
                if state is None:
                    break
                xs.write(t, path, state)
                if xs.transaction_end(t, 0):
                    break
            suppress.add(path)