[ovs-dev] [PATCH ovn repost 7/7] ovn-northd-ddlog: Postpone expanding external_ids, stage_hint, tags.

Ben Pfaff blp at ovn.org
Thu Aug 12 17:44:43 UTC 2021


This has little effect on performance in the current benchmark, but it
seems like the cleanest approach to me.

Signed-off-by: Ben Pfaff <blp at ovn.org>
---
 northd/ovn_northd.dl | 38 ++++++++++++++++++++++----------------
 1 file changed, 22 insertions(+), 16 deletions(-)

diff --git a/northd/ovn_northd.dl b/northd/ovn_northd.dl
index dadf33ab6..f0730d40b 100644
--- a/northd/ovn_northd.dl
+++ b/northd/ovn_northd.dl
@@ -1667,9 +1667,9 @@ relation AggregatedFlow (
     priority:          integer,
     __match:           istring,
     actions:           istring,
-    tags:              Map<string,string>,
+    io_port:           Option<string>,
     controller_meter:  Option<string>,
-    external_ids:      Map<string,string>
+    stage_hint:        bit<32>
 )
 function make_flow_tags(io_port: Option<string>): Map<string,string> {
     match (io_port) {
@@ -1690,9 +1690,9 @@ AggregatedFlow(.logical_datapaths = g.to_set(),
                .priority = priority,
                .__match = __match,
                .actions = actions,
-               .tags = make_flow_tags(io_port),
+               .io_port = io_port,
                .controller_meter = controller_meter,
-               .external_ids = make_flow_external_ids(stage_hint, stage)) :-
+               .stage_hint = stage_hint) :-
     UseLogicalDatapathGroups[true],
     Flow(logical_datapath, stage, priority, __match, actions, io_port, controller_meter, stage_hint),
     var g = logical_datapath.group_by((stage, priority, __match, actions, io_port, controller_meter, stage_hint)).
@@ -1701,43 +1701,49 @@ AggregatedFlow(.logical_datapaths = set_singleton(logical_datapath),
                .priority = priority,
                .__match = __match,
                .actions = actions,
-               .tags = make_flow_tags(io_port),
+               .io_port = io_port,
                .controller_meter = controller_meter,
-               .external_ids = make_flow_external_ids(stage_hint, stage)) :-
+               .stage_hint = stage_hint) :-
     UseLogicalDatapathGroups[false],
     Flow(logical_datapath, stage, priority, __match, actions, io_port, controller_meter, stage_hint).
 
+function to_string(pipeline: Pipeline): string {
+    if (pipeline == Ingress) {
+        "ingress"
+    } else {
+        "egress"
+    }
+}
+
 for (f in AggregatedFlow()) {
-    var pipeline = if (f.stage.pipeline == Ingress) "ingress" else "egress" in
-    var external_ids = f.external_ids.insert_imm("stage-name", f.stage.table_name) in
     if (f.logical_datapaths.size() == 1) {
         Some{var dp} = f.logical_datapaths.nth(0) in
         sb::Out_Logical_Flow(
-            ._uuid = hash128((dp, f.stage, f.priority, f.__match, f.actions, f.controller_meter, f.external_ids)),
+            ._uuid = hash128((dp, f.stage, f.priority, f.__match, f.actions, f.controller_meter, f.io_port, f.stage_hint)),
             .logical_datapath = Some{dp},
             .logical_dp_group = None,
-            .pipeline         = pipeline,
+            .pipeline         = f.stage.pipeline.to_string(),
             .table_id         = f.stage.table_id as integer,
             .priority         = f.priority,
             .controller_meter = f.controller_meter,
             .__match          = f.__match.ival(),
             .actions          = f.actions.ival(),
-            .tags             = f.tags,
-            .external_ids     = external_ids)
+            .tags             = make_flow_tags(f.io_port),
+            .external_ids     = make_flow_external_ids(f.stage_hint, f.stage))
     } else {
         var group_uuid = hash128(f.logical_datapaths) in {
             sb::Out_Logical_Flow(
-                ._uuid = hash128((group_uuid, f.stage, f.priority, f.__match, f.actions, f.controller_meter, f.external_ids)),
+                ._uuid = hash128((group_uuid, f.stage, f.priority, f.__match, f.actions, f.controller_meter, f.io_port, f.stage_hint)),
                 .logical_datapath = None,
                 .logical_dp_group = Some{group_uuid},
-                .pipeline         = pipeline,
+                .pipeline         = f.stage.pipeline.to_string(),
                 .table_id         = f.stage.table_id as integer,
                 .priority         = f.priority,
                 .controller_meter = f.controller_meter,
                 .__match          = f.__match.ival(),
                 .actions          = f.actions.ival(),
-                .tags             = f.tags,
-                .external_ids     = external_ids);
+                .tags             = make_flow_tags(f.io_port),
+                .external_ids     = make_flow_external_ids(f.stage_hint, f.stage));
             sb::Out_Logical_DP_Group(._uuid = group_uuid, .datapaths = f.logical_datapaths)
         }
     }
-- 
2.31.1



More information about the dev mailing list