get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2227903/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2227903,
    "url": "http://patchwork.ozlabs.org/api/patches/2227903/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/ovn/patch/20260424132342.3486635-6-amusil@redhat.com/",
    "project": {
        "id": 68,
        "url": "http://patchwork.ozlabs.org/api/projects/68/?format=api",
        "name": "Open Virtual Network development",
        "link_name": "ovn",
        "list_id": "ovs-dev.openvswitch.org",
        "list_email": "ovs-dev@openvswitch.org",
        "web_url": "http://openvswitch.org/",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260424132342.3486635-6-amusil@redhat.com>",
    "list_archive_url": null,
    "date": "2026-04-24T13:23:40",
    "name": "[ovs-dev,5/7] controller: Move the group_table out of the engine.",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "1258b652f658799c63dd0c8907d4b4084b4478bc",
    "submitter": {
        "id": 83634,
        "url": "http://patchwork.ozlabs.org/api/people/83634/?format=api",
        "name": "Ales Musil",
        "email": "amusil@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/ovn/patch/20260424132342.3486635-6-amusil@redhat.com/mbox/",
    "series": [
        {
            "id": 501360,
            "url": "http://patchwork.ozlabs.org/api/series/501360/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/ovn/list/?series=501360",
            "date": "2026-04-24T13:23:35",
            "name": "This series adds support for Equal-Cost Multi-Path (ECMP) FDB entries",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/501360/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2227903/comments/",
    "check": "success",
    "checks": "http://patchwork.ozlabs.org/api/patches/2227903/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<ovs-dev-bounces@openvswitch.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "dev@openvswitch.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "ovs-dev@lists.linuxfoundation.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=GYiIbMXH;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org\n (client-ip=2605:bc80:3010::136; helo=smtp3.osuosl.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org)",
            "smtp3.osuosl.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key)\n header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=GYiIbMXH",
            "smtp4.osuosl.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com",
            "smtp4.osuosl.org;\n dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com\n header.a=rsa-sha256 header.s=mimecast20190719 header.b=GYiIbMXH"
        ],
        "Received": [
            "from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g2DFN3kWzz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 23:24:08 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby smtp3.osuosl.org (Postfix) with ESMTP id 19F9861B18;\n\tFri, 24 Apr 2026 13:24:07 +0000 (UTC)",
            "from smtp3.osuosl.org ([127.0.0.1])\n by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id ZEcSNfwPBvaY; Fri, 24 Apr 2026 13:24:05 +0000 (UTC)",
            "from lists.linuxfoundation.org (lf-lists.osuosl.org\n [IPv6:2605:bc80:3010:104::8cd3:938])\n\tby smtp3.osuosl.org (Postfix) with ESMTPS id 8421461B2B;\n\tFri, 24 Apr 2026 13:24:04 +0000 (UTC)",
            "from lf-lists.osuosl.org (localhost [127.0.0.1])\n\tby lists.linuxfoundation.org (Postfix) with ESMTP id 7276BC04FB;\n\tFri, 24 Apr 2026 13:24:04 +0000 (UTC)",
            "from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137])\n by lists.linuxfoundation.org (Postfix) with ESMTP id 13A72C058F\n for <dev@openvswitch.org>; Fri, 24 Apr 2026 13:24:03 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n by smtp4.osuosl.org (Postfix) with ESMTP id BE065427EB\n for <dev@openvswitch.org>; Fri, 24 Apr 2026 13:23:57 +0000 (UTC)",
            "from smtp4.osuosl.org ([127.0.0.1])\n by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id GVyqfpYNcfQh for <dev@openvswitch.org>;\n Fri, 24 Apr 2026 13:23:56 +0000 (UTC)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by smtp4.osuosl.org (Postfix) with ESMTPS id 69D24427F3\n for <dev@openvswitch.org>; Fri, 24 Apr 2026 13:23:56 +0000 (UTC)",
            "from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-678-euKUKJeZOViE56OfwzQbzA-1; Fri,\n 24 Apr 2026 09:23:54 -0400",
            "from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 61FBF1956094\n for <dev@openvswitch.org>; Fri, 24 Apr 2026 13:23:53 +0000 (UTC)",
            "from amusil.redhat.com (unknown [10.44.32.61])\n by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 2265A180047F; Fri, 24 Apr 2026 13:23:51 +0000 (UTC)"
        ],
        "X-Virus-Scanned": [
            "amavis at osuosl.org",
            "amavis at osuosl.org"
        ],
        "X-Comment": "SPF check N/A for local connections -\n client-ip=2605:bc80:3010:104::8cd3:938; helo=lists.linuxfoundation.org;\n envelope-from=ovs-dev-bounces@openvswitch.org; receiver=<UNKNOWN> ",
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 smtp3.osuosl.org 8421461B2B",
            "OpenDKIM Filter v2.11.0 smtp4.osuosl.org 69D24427F3"
        ],
        "Received-SPF": "Pass (mailfrom) identity=mailfrom; client-ip=170.10.133.124;\n helo=us-smtp-delivery-124.mimecast.com; envelope-from=amusil@redhat.com;\n receiver=<UNKNOWN>",
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 smtp4.osuosl.org 69D24427F3",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1777037035;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=IdsqWpUPTxe2SXH3kMVL/ohh9LyCF32DjE4nmt0O2GM=;\n b=GYiIbMXHIO5OPLHLOwmb0gx2pOEPiYGv47FGhemtCzy9bwwxBK2eX8BpEs0KP1fxMfC7g6\n Wtf7KYUtqNPY9vRb1PcTg29XfmmhWBE5HdaUXYfO7rQmmoB4ceFQZU9CqEoIX7hoZ6eZkW\n 54Vyn9BOL0YJ45dUhlax0FZJni9ECXE=",
        "X-MC-Unique": "euKUKJeZOViE56OfwzQbzA-1",
        "X-Mimecast-MFC-AGG-ID": "euKUKJeZOViE56OfwzQbzA_1777037033",
        "To": "dev@openvswitch.org",
        "Date": "Fri, 24 Apr 2026 15:23:40 +0200",
        "Message-ID": "<20260424132342.3486635-6-amusil@redhat.com>",
        "In-Reply-To": "<20260424132342.3486635-1-amusil@redhat.com>",
        "References": "<20260424132342.3486635-1-amusil@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.93",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "OhmH6g_obssukXXPfX1nxJD7e-6m_qCagMrHYqCa82A_1777037033",
        "X-Mimecast-Originator": "redhat.com",
        "Subject": "[ovs-dev] [PATCH ovn 5/7] controller: Move the group_table out of\n the engine.",
        "X-BeenThere": "ovs-dev@openvswitch.org",
        "X-Mailman-Version": "2.1.30",
        "Precedence": "list",
        "List-Id": "<ovs-dev.openvswitch.org>",
        "List-Unsubscribe": "<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>",
        "List-Archive": "<http://mail.openvswitch.org/pipermail/ovs-dev/>",
        "List-Post": "<mailto:ovs-dev@openvswitch.org>",
        "List-Help": "<mailto:ovs-dev-request@openvswitch.org?subject=help>",
        "List-Subscribe": "<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n <mailto:ovs-dev-request@openvswitch.org?subject=subscribe>",
        "From": "Ales Musil via dev <ovs-dev@openvswitch.org>",
        "Reply-To": "Ales Musil <amusil@redhat.com>",
        "Cc": "dceara@redhat.com",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "ovs-dev-bounces@openvswitch.org",
        "Sender": "\"dev\" <ovs-dev-bounces@openvswitch.org>"
    },
    "content": "The physical output node needs to allocate group IDs for ECMP\nFDB select groups, which must share the same ID space as load\nbalancer groups. Move the group table out of the engine so it\ncan be shared by both output nodes.\n\nAssisted-by: Claude Opus 4.6, Claude Code\nSigned-off-by: Ales Musil <amusil@redhat.com>\n---\n controller/ovn-controller.c | 23 ++++++++++++-----------\n 1 file changed, 12 insertions(+), 11 deletions(-)",
    "diff": "diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c\nindex c46530f90..de6975f98 100644\n--- a/controller/ovn-controller.c\n+++ b/controller/ovn-controller.c\n@@ -3874,8 +3874,8 @@ struct lflow_output_persistent_data {\n struct ed_type_lflow_output {\n     /* Logical flow table */\n     struct ovn_desired_flow_table flow_table;\n-    /* group ids for load balancing */\n-    struct ovn_extend_table group_table;\n+    /* Group IDs for load balancing and ECMP, owned outside the engine. */\n+    struct ovn_extend_table *group_table;\n     /* meter ids for QoS */\n     struct ovn_extend_table meter_table;\n     /* lflow <-> resource cross reference */\n@@ -4051,7 +4051,7 @@ init_lflow_ctx(struct engine_node *node,\n     l_ctx_in->lbinding_lports = &rt_data->lbinding_data.bindings;\n \n     l_ctx_out->flow_table = &fo->flow_table;\n-    l_ctx_out->group_table = &fo->group_table;\n+    l_ctx_out->group_table = fo->group_table;\n     l_ctx_out->meter_table = &fo->meter_table;\n     l_ctx_out->lflow_deps_mgr = &fo->lflow_deps_mgr;\n     l_ctx_out->conj_ids = &fo->conj_ids;\n@@ -4065,7 +4065,6 @@ en_lflow_output_init(struct engine_node *node OVS_UNUSED,\n {\n     struct ed_type_lflow_output *data = xzalloc(sizeof *data);\n     ovn_desired_flow_table_init(&data->flow_table);\n-    ovn_extend_table_init(&data->group_table, \"group-table\", 0);\n     ovn_extend_table_init(&data->meter_table, \"meter-table\", 0);\n     objdep_mgr_init(&data->lflow_deps_mgr);\n     lflow_conj_ids_init(&data->conj_ids);\n@@ -4088,7 +4087,6 @@ en_lflow_output_cleanup(void *data)\n {\n     struct ed_type_lflow_output *flow_output_data = data;\n     ovn_desired_flow_table_destroy(&flow_output_data->flow_table);\n-    ovn_extend_table_destroy(&flow_output_data->group_table);\n     ovn_extend_table_destroy(&flow_output_data->meter_table);\n     objdep_mgr_destroy(&flow_output_data->lflow_deps_mgr);\n     lflow_conj_ids_destroy(&flow_output_data->conj_ids);\n@@ -4136,7 +4134,7 @@ en_lflow_output_run(struct engine_node *node, void *data)\n \n     struct ed_type_lflow_output *fo = data;\n     struct ovn_desired_flow_table *lflow_table = &fo->flow_table;\n-    struct ovn_extend_table *group_table = &fo->group_table;\n+    struct ovn_extend_table *group_table = fo->group_table;\n     struct ovn_extend_table *meter_table = &fo->meter_table;\n     struct objdep_mgr *lflow_deps_mgr = &fo->lflow_deps_mgr;\n \n@@ -7646,12 +7644,14 @@ main(int argc, char *argv[])\n     struct ed_type_evpn_arp *earp_data =\n         engine_get_internal_data(&en_evpn_arp);\n \n-    ofctrl_init(&lflow_output_data->group_table,\n-                &lflow_output_data->meter_table);\n+    struct ovn_extend_table group_table;\n+    ovn_extend_table_init(&group_table, \"group-table\", 0);\n+    lflow_output_data->group_table = &group_table;\n+\n+    ofctrl_init(&group_table, &lflow_output_data->meter_table);\n \n     unixctl_command_register(\"group-table-list\", \"\", 0, 0,\n-                             extend_table_list,\n-                             &lflow_output_data->group_table);\n+                             extend_table_list, &group_table);\n \n     unixctl_command_register(\"meter-table-list\", \"\", 0, 0,\n                              extend_table_list,\n@@ -7928,7 +7928,7 @@ main(int argc, char *argv[])\n                 struct ed_type_lflow_output *lflow_out_data =\n                     engine_get_internal_data(&en_lflow_output);\n \n-                ovn_extend_table_reinit(&lflow_out_data->group_table,\n+                ovn_extend_table_reinit(&group_table,\n                                         ovs_feature_max_select_groups_get());\n                 ovn_extend_table_reinit(&lflow_out_data->meter_table,\n                                         ovs_feature_max_meters_get());\n@@ -8439,6 +8439,7 @@ loop_done:\n \n     engine_set_context(NULL);\n     engine_cleanup();\n+    ovn_extend_table_destroy(&group_table);\n \n     free(ovn_version);\n     lflow_destroy();\n",
    "prefixes": [
        "ovs-dev",
        "5/7"
    ]
}