From patchwork Fri Jan 15 08:29:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?SsO8cmdlbiBHcm/Dnw==?= X-Patchwork-Id: 12021825 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7B149C4332B for ; Fri, 15 Jan 2021 08:30:35 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3367722597 for ; Fri, 15 Jan 2021 08:30:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3367722597 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=suse.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from list by lists.xenproject.org with outflank-mailman.67712.120974 (Exim 4.92) (envelope-from ) id 1l0KUl-0008Gt-H9; Fri, 15 Jan 2021 08:30:11 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 67712.120974; Fri, 15 Jan 2021 08:30:11 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1l0KUl-0008Gm-Ds; Fri, 15 Jan 2021 08:30:11 +0000 Received: by outflank-mailman (input) for mailman id 67712; Fri, 15 Jan 2021 08:30:09 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1l0KUj-0008Gh-K8 for xen-devel@lists.xenproject.org; Fri, 15 Jan 2021 08:30:09 +0000 Received: from mx2.suse.de (unknown [195.135.220.15]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 56707f11-4a43-46d7-a73c-badd76f8f5bb; Fri, 15 Jan 2021 08:30:08 +0000 (UTC) Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 47370B933; Fri, 15 Jan 2021 08:30:06 +0000 (UTC) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 56707f11-4a43-46d7-a73c-badd76f8f5bb X-Virus-Scanned: by amavisd-new at test-mx.suse.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1610699407; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=zJeM+Gdg2B1qmBL3okj+9gejov2FJmf6wJlxw8FMvN4=; b=ngI5tmrE6naHJDDic4vk0CeYdY8U9QgVO34omlX3GG2tvWpMel9GUbwCnaT4HrHGfD2imG fFp0xorpIHgofaiKDFgJi1XKqVeFtp8SpHkCyL3oLhjtjGhGkmICO6DpjrPWahmi1ywi8P oJmS0PTr3ZBO5FSE+tiSAvKfAb/FLwg= From: Juergen Gross To: xen-devel@lists.xenproject.org Cc: Juergen Gross , Ian Jackson , Wei Liu , Andrew Cooper , George Dunlap , Jan Beulich , Julien Grall , Stefano Stabellini Subject: [PATCH v12 00/27] tools/xenstore: support live update for xenstored Date: Fri, 15 Jan 2021 09:29:33 +0100 Message-Id: <20210115083000.14186-1-jgross@suse.com> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Today Xenstore is not restartable. This means a Xen server needing an update of xenstored has to be rebooted in order to let this update become effective. This patch series is changing that: The internal state of xenstored (the contents of Xenstore, all connections to various clients like programs or other domains, and watches) is saved in a defined format and a new binary is being activated consuming the old state. All connections are being restored and the new Xenstore binary will continue where the old one stopped. This patch series has been under (secret) development until V9. It has been posted to xen-devel only from V10 onwards. There will be a similar series for oxenstored posted. Xenstore-stubdom is not yet supported, but I'm planning to start working on that soon. Changes in V12: - addressed Andrew's comments (patches 1-5) - fixed mangled patches 12 and 13 Changes in V11: - dropped patches 1-3 of V10 as already appled - new patches 1-4 (Andrew Cooper): more libxenevtchn cleanup - new patch 12 (Edwin Torok): handle timeout of LU completely in xenstored instead of split xenstore-control/xenstored. I've kept the xenstore-control timeout handling for the case of premature LU supporting downstream versions Changes in V10 (for the members of the security team): - dropped patch 6 as requested by Andrew Juergen Gross (26): tools/libxenevtchn: switch to standard xen coding style tools/libxenevtchn: rename open_flags to flags tools/libxenevtchn: check xenevtchn_open() flags for not supported bits tools/libxenevtchn: propagate xenevtchn_open() flags parameter tools/libxenevtchn: add possibility to not close file descriptor on exec tools/xenstore: refactor XS_CONTROL handling tools/xenstore: add live update command to xenstore-control tools/xenstore: add basic live-update command parsing tools/xenstore: introduce live update status block tools/xenstore: save new binary for live update tools/xenstore: add command line handling for live update tools/xenstore: add support for delaying execution of a xenstore request tools/xenstore: add the basic framework for doing the live update tools/xenstore: allow live update only with no transaction active docs: update the xenstore migration stream documentation tools/xenstore: add include file for state structure definitions tools/xenstore: dump the xenstore state for live update tools/xenstore: handle CLOEXEC flag for local files and pipes tools/xenstore: split off domain introduction from do_introduce() tools/xenstore: evaluate the live update flag when starting tools/xenstore: read internal state when doing live upgrade tools/xenstore: add reading global state for live update tools/xenstore: add read connection state for live update tools/xenstore: add read node state for live update tools/xenstore: add read watch state for live update tools/xenstore: activate new binary for live update Julien Grall (1): tools/xenstore: handle dying domains in live update docs/designs/xenstore-migration.md | 19 +- docs/misc/xenstore.txt | 21 + tools/include/xenevtchn.h | 52 +- tools/libs/evtchn/Makefile | 2 +- tools/libs/evtchn/core.c | 74 ++- tools/libs/evtchn/freebsd.c | 34 +- tools/libs/evtchn/libxenevtchn.map | 4 + tools/libs/evtchn/linux.c | 12 +- tools/libs/evtchn/minios.c | 104 +++- tools/libs/evtchn/netbsd.c | 24 +- tools/libs/evtchn/private.h | 2 +- tools/libs/evtchn/solaris.c | 14 +- tools/xenstore/Makefile | 3 +- tools/xenstore/include/xenstore_state.h | 131 +++++ tools/xenstore/utils.c | 17 + tools/xenstore/utils.h | 6 + tools/xenstore/xenstore_control.c | 333 +++++++++++- tools/xenstore/xenstored_control.c | 649 +++++++++++++++++++++++- tools/xenstore/xenstored_control.h | 1 + tools/xenstore/xenstored_core.c | 556 ++++++++++++++++++-- tools/xenstore/xenstored_core.h | 59 +++ tools/xenstore/xenstored_domain.c | 301 ++++++++--- tools/xenstore/xenstored_domain.h | 11 +- tools/xenstore/xenstored_posix.c | 13 +- tools/xenstore/xenstored_transaction.c | 5 + tools/xenstore/xenstored_watch.c | 171 +++++-- tools/xenstore/xenstored_watch.h | 5 + 27 files changed, 2362 insertions(+), 261 deletions(-) create mode 100644 tools/xenstore/include/xenstore_state.h