From 4d3eba9bac8274267a915779aa0ad186b6467e72 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Fri, 17 Apr 2020 16:47:57 +0800 Subject: [PATCH] vpcagent: add cmp() for search and pre-cleanup --- pkg/vpcagent/ovn/cmp.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 pkg/vpcagent/ovn/cmp.go diff --git a/pkg/vpcagent/ovn/cmp.go b/pkg/vpcagent/ovn/cmp.go new file mode 100644 index 0000000000..a84320d4d5 --- /dev/null +++ b/pkg/vpcagent/ovn/cmp.go @@ -0,0 +1,29 @@ +package ovn + +import ( + "yunion.io/x/onecloud/pkg/vpcagent/ovnutil" +) + +// cmp scans the database for irows. For those present, mark them with ocver. +// If all rows are found, return true to indicate this. Otherwise return as +// 2nd value the args to destroy these found records +func cmp(db *ovnutil.OVNNorthbound, ocver string, irows ...ovnutil.IRow) (bool, []string) { + irowsFound := make([]ovnutil.IRow, 0, len(irows)) + + for _, irow := range irows { + irowFound := db.FindOneMatchNonZeros(irow) + if irowFound != nil { + irowsFound = append(irowsFound, irowFound) + } + } + // mark them anyway even if not all found, to avoid the destroy + // call at sweep stage + for _, irowFound := range irowsFound { + irowFound.OvnSetExternalIds(externalKeyOcVersion, ocver) + } + if len(irowsFound) == len(irows) { + return true, nil + } + args := ovnutil.OvnNbctlArgsDestroy(irowsFound) + return false, args +}