Re: [netconf] Clarification about RFC8040 plain PATCH operation

"Wisotzky, Sven (Nokia - DE/Stuttgart)" <sven.wisotzky@nokia.com> Thu, 14 January 2021 08:12 UTC

Return-Path: <sven.wisotzky@nokia.com>
X-Original-To: netconf@ietfa.amsl.com
Delivered-To: netconf@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 6B0C33A124D for <netconf@ietfa.amsl.com>; Thu, 14 Jan 2021 00:12:18 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.151
X-Spam-Level:
X-Spam-Status: No, score=-2.151 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.25, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=nokia.onmicrosoft.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id U_zTTFLLb7Wm for <netconf@ietfa.amsl.com>; Thu, 14 Jan 2021 00:12:16 -0800 (PST)
Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2097.outbound.protection.outlook.com [40.107.20.97]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id B96863A124F for <netconf@ietf.org>; Thu, 14 Jan 2021 00:12:16 -0800 (PST)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZJrLseMqcFAmSozI/rpPzq+Pbqxqb8/Dy2TiR+MzhaJYMkqOr+h/QnFtbF71X/j6NB556fYeAcZncr5zfMbwJ3bNQH2jPtWv0ddNs4qRNTvgVTG4+y8YWilq1aOXCjYTmzyCTJfuT+ipT5AQzTNwiR6C/Jh6pwiGpW/WMWNC+d6Ct46UprGkpJseV5Y1NzlyswlliXCX5wo8j3SikxhmJT5yIzDSpvs8n3ggD8Rnh2k241523GdDH+JuRHa0gy0RW0ljJUpgUCK0K4S4MzLDd2DMyg/aHBDsZVAJsuXNdaLKJUFV2mBpblLi2MIYj6EWftkpg7G5wszKK9DM29EQ/Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XT+PB+KTsBLuDwJErwQb+xkbu4w0C8hyKCbcWDnPHh0=; b=NxkZOaUw/HLUh06DwfHlVG3NUW9c7fwx31Puq8ZZM/XyX3bEH8k1tympyXmsHDi9Vl1c/0qHzwKum+j3znY0xgN6G9dGhl74rrlFXv4GG3AGDGrl+mMYopnjxiAFU0Dx5n/CXES37jht5HpE0mXDXlUjyQT3pMocX2YnaozLOIKCw7V9drSq+X/81R0x27yoomVJiaeX/TCG0V8hXRyfBCYFlAPMrqSjYipv8Zqfs+Kak0EoJ3apCGL6Is6D7D91tEhgxi4Kp6ONrLLIg9gqxUkvmgRUfDUrSic7S/cKl3aa7EeF+frwboE/66245EEe4UhMDWxeED/ePkeOZ3F3Hw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nokia.com; dmarc=pass action=none header.from=nokia.com; dkim=pass header.d=nokia.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nokia.onmicrosoft.com; s=selector1-nokia-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XT+PB+KTsBLuDwJErwQb+xkbu4w0C8hyKCbcWDnPHh0=; b=omKGajJonAKCx9lTxw+z2p1ZN95fw4UsdoK01yBjLzmX1lPNZeeFXJQUpjhcJAOo8Ui5bKJdKFnQR5pja/VnWWaBaaxnb5IwzTG35be4RCt+e7CtU1/lBfEsTTOd+a8RHPeQQ1GNRbooXF/B3Yv4CuFfz55Q728ljFlqrJ65pFM=
Received: from (2603:10a6:20b:242::23) by AM0PR07MB5603.eurprd07.prod.outlook.com (2603:10a6:208:100::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.4; Thu, 14 Jan 2021 08:12:12 +0000
Received: from AM8PR07MB7604.eurprd07.prod.outlook.com ([fe80::241d:9675:d367:8bf3]) by AM8PR07MB7604.eurprd07.prod.outlook.com ([fe80::241d:9675:d367:8bf3%6]) with mapi id 15.20.3784.006; Thu, 14 Jan 2021 08:12:12 +0000
From: "Wisotzky, Sven (Nokia - DE/Stuttgart)" <sven.wisotzky@nokia.com>
To: Henning Rogge <hrogge@gmail.com>, Netconf <netconf@ietf.org>
Thread-Topic: [netconf] Clarification about RFC8040 plain PATCH operation
Thread-Index: AQHW6klVce2EfFMPTEOeHeMqrpUmO6om1hwA
Date: Thu, 14 Jan 2021 08:12:12 +0000
Message-ID: <B1959BA6-D265-41F9-B8B7-5B3013724051@nokia.com>
References: <CAGnRvuoQ1DR8et6BVL6FSwM=m-6z+3+ujVoY2mx5e7mrvhO22A@mail.gmail.com>
In-Reply-To: <CAGnRvuoQ1DR8et6BVL6FSwM=m-6z+3+ujVoY2mx5e7mrvhO22A@mail.gmail.com>
Accept-Language: de-DE, en-US
Content-Language: en-GB
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
user-agent: Microsoft-MacOutlook/16.44.20121301
authentication-results: gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=none action=none header.from=nokia.com;
x-originating-ip: [178.1.13.149]
x-ms-publictraffictype: Email
x-ms-office365-filtering-ht: Tenant
x-ms-office365-filtering-correlation-id: 50b638cf-37cf-4f23-7722-08d8b86418c4
x-ms-traffictypediagnostic: AM0PR07MB5603:
x-microsoft-antispam-prvs: <AM0PR07MB5603CEC8D34BFC936DB7C97BE9A80@AM0PR07MB5603.eurprd07.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:7691;
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: fJIQceotC+2Gs/oCgEZij+MvqVGogCfJy1vX2F1NUQGMZMBVvEMqdGzdacA5k47vOB7l2dGXfkOVkoOaDeJHDarBGlrtMQOAthO72VzZWd+cqpfKqwjAdRasTa33kgmdSIeB8vCU+ztvCdjnYRZKz5jnlCsb0kPlTA4Rgt2QCal0u9tdBzbzOBWY5/kfLMRwH3JlEtn9+7Gn3ern78ejkySASn3Tg+Pp6470ovtG2BVsm+pU/nVYGwbEPyKf4C6t8BaUMEWlI/SzRjiErmeuRY1thFR/Pfm2GZuWV65cqxpZmYIVjjRTME0rRX9YfL0awjMpP7g3xMJ51ph/J+dagyHxj8NYDqXRWkYdlcS13cXyxbqpO6uQtYWNv1QNDHW5q34v3df3hnFB6jQGcBdZ8FPBp/QPZ+HfGDMbEx1gX0M5OBy08cN6Ku1EYO/hLD1D/rqWzqROb5oIxVD3CtmF3rz0HTTCTGPpMrXChiIwu3cENNECDPkx0RHw8obPfP0nddbckdAmit6b8Cb/qz/x5g==
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM8PR07MB7604.eurprd07.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(396003)(376002)(346002)(39860400002)(366004)(76116006)(91956017)(8936002)(6506007)(66476007)(71200400001)(26005)(2616005)(8676002)(186003)(2906002)(33656002)(66946007)(316002)(83380400001)(86362001)(6512007)(6486002)(478600001)(5660300002)(66446008)(966005)(66556008)(64756008)(110136005)(36756003)(45980500001); DIR:OUT; SFP:1102;
x-ms-exchange-antispam-messagedata: u7SqldvAs6HIf3MO9gJxmJfkAB6BxkYB3fUXInfFyUTLR6EpRYIfmUGqCtyKDF2KeSo32BWTnMb3+hKzEHS1JHx8e1glCcczBonocriQBB3Naee0lp+CiCc5fwzjhSzW3n3nwBlGiGTPOmZ/qvEEWmSWvZXeeN1uFVVQYcc2C7deiCfjsHmj82hCjsbUPWzMRjTxEqdSkJgliu0y9rM7Ja30te/SdWtmtDZnpK0QMNf3ypCWXdz0dIBwTUOhi57fGF3JUPs1XsxsfVK8bhIyigponYr1Drio5K2NAq7azXpMm6Vczu+nLyR7MNmErNTMG7xFOve/U90aNmNOuAGMfWUF4W8gbQlAXgYVqNGPXV8rvtf13Vv/bm9PMf602kE+PAuQ519p7gZX7qtO3wFlqLcSfgXQgVqRCT6XsRM2IHiH/78sHr3a0Fndz2qruRUaUJVfs6qG6Gk/6+0A/uCB0JZ+zYOtXeq/opbglXvpkuNro5ZMHElpQVSUDEUZDCcFW9tMpVsjMp/Mmnt/Fls226vwHoP3mLs7U5fL/tfUrwNp9mX/7CIVKbc3sneNC77SP/vFePS/+mAG1FDp7xaGnv9I+RpC1Avhi3NrTeJeyDY2eu+58RLUunY1QALFQCQqZPdO1nyNVVtohSLaHwRC1KwIFT0TfS4qCzvwtbR90tOsmBAzOmpMVUp+9mhT/1hT927wR7+mPhFUePNBVH34++CsR+p2rbY3MrqcFb/hkWV40yq9czmjZnu+uvylH9uCkgt4DGX838IsmdiejkPmzfCKs43tLinILa4Hf2tbwhA7/EtJD1zhX+PNkBM7tJ7cdbojPqNgZnFl0a0Ch7o3TGtm1XWqldk+EZPvziwIFyF+GafTbowZjUMcKqQv6aLBs1piw13ZY3suudow11mgwmnM9JMt0fCteGmGXUvalNVtIJ/f+/V599QTb+1ZJO04yst2a/wILL4kVW941QBtcxAVIcZ83kBLIGH0F6O7AeuJqB30uEQyFIHqv/pjMkMd
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="utf-8"
Content-ID: <350DED652AC0F84BA21B5B7FA06891A4@eurprd07.prod.outlook.com>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: nokia.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: AM8PR07MB7604.eurprd07.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 50b638cf-37cf-4f23-7722-08d8b86418c4
X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Jan 2021 08:12:12.3867 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 5d471751-9675-428d-917b-70f44f9630b0
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: +Jx8SgeqTYdyQTXM/hcUeD+ycPr6bLNXFCGfXpUovZ2219AqVi0nQNzmFrcYD3LNTN2ZQvqVUGJsp73ktgoEFA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR07MB5603
Archived-At: <https://mailarchive.ietf.org/arch/msg/netconf/5FERLJT5hoJwmCrCPmlXhm7BMSI>
Subject: Re: [netconf] Clarification about RFC8040 plain PATCH operation
X-BeenThere: netconf@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: NETCONF WG list <netconf.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netconf>, <mailto:netconf-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netconf/>
List-Post: <mailto:netconf@ietf.org>
List-Help: <mailto:netconf-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netconf>, <mailto:netconf-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 14 Jan 2021 08:12:18 -0000

Hi Henning,

While rfc8040 does not deeply cover your question, I would argue that the PLAIN PATCH method would apply a MERGE operation along the lines of rfc6241 NETCONF operation / default-operation. This enables low overhead RESTCONF to NETCONF mapping, without big processing required. In essence this implies the implementation to follow what you are calling "deep/recursive merge".

From an user/client perspective this makes sense a lot, because a merge would never accidently replace children subtrees aka remove children container leafs. If that would become a requirement, one could still replace individual children using dedicated RESTCONF API requests OR to use YANG PATCH media type (rfc8072).

Indeed, when building a native RESTCONF stack this may result in extra work, as one might need to visit every children container / list-entry to create/update those entities as needed.

/wiso


On 1/14/21, 08:46, "Henning Rogge" <hrogge@gmail.com> wrote:

    Hi,

    I have trouble making sure I get the meaning of the RFC8040 plain
    Patch operation right... mostly because of the (potential) double
    meaning of the word "merge".

    Is the plain patch operation meant as a shallow merge or a deep merge?

    Here is my attempt as an example with a PATCH operation of the node "rootC".

    YANG context:
    container rootC {
            container partA {
                    leaf leafA1 {
                            type string;
                    }
                    leaf leafA2 {
                            type string;
                    }
            }
            container partB {
                    leaf leafB1 {
                            type string;
                    }
                    leaf leafB2 {
                            type string;
                    }
            }
    }

    Datastore content before the PATCH operation:
    {
            "ns:rootC": {
                    "partA": {
                              "leafA1": "A1",
                              "leafA2": "A2"
                    },
                    "partB": {
                              "leafB1": "B1",
                              "leafB2": "B2"
                    }
            }
    }

    Simple Patch Body:
    {
            "ns:rootC": {
                    "partA": {
                              "leafA1": "newA1",
                    }
            }
    }

    Datastore content after PATCH with "shallow" merge:
    {
            "ns:rootC": {
                    "partA": {
                              "leafA1": "newA1",
                    },
                    "partB": {
                              "leafB1": "B1",
                              "leafB2": "B2"
                    }
            }
    }

    Datastore content after PATCH with "deep/recursive" merge:
    {
            "ns:rootC": {
                    "partA": {
                              "leafA1": "newA1",
                              "leafA2": "A2"
                   },
                    "partB": {
                              "leafB1": "B1",
                              "leafB2": "B2"
                    }
            }
    }

    With a shallow merge, the merging is only done for the
    root-container... with the deep merge the server has to recursively go
    down each patched container.

    Henning Rogge

    _______________________________________________
    netconf mailing list
    netconf@ietf.org
    https://www.ietf.org/mailman/listinfo/netconf