@@ -211,22 +211,21 @@ func (ipsMgr *IpsetManager) run(entry *ipsEntry) (int, error) {
211211}
212212
213213func (ipsMgr * IpsetManager ) createList (listName string ) error {
214- prometheusTimer := metrics .StartNewTimer ()
215214
216215 if _ , exists := ipsMgr .listMap [listName ]; exists {
217216 return nil
218217 }
219218
220- defer metrics .RecordIPSetExecTime (prometheusTimer ) // record execution time regardless of failure
221-
222219 entry := & ipsEntry {
223220 name : listName ,
224221 operationFlag : util .IpsetCreationFlag ,
225222 set : util .GetHashedName (listName ),
226223 spec : []string {util .IpsetSetListFlag },
227224 }
228225 log .Logf ("Creating List: %+v" , entry )
226+ timer := metrics .StartNewTimer ()
229227 errCode , err := ipsMgr .run (entry )
228+ metrics .RecordIPSetExecTime (timer ) // record execution time regardless of failure
230229 if err != nil && errCode != 1 {
231230 metrics .SendErrorLogAndMetric (util .IpsmID , "Error: failed to create ipset list %s." , listName )
232231 return err
@@ -619,9 +618,10 @@ func (ipsMgr *IpsetManager) DestroyNpmIpsets() error {
619618 _ , err := ipsMgr .run (flushEntry )
620619 if err != nil {
621620 metrics .SendErrorLogAndMetric (util .IpsmID , "{DestroyNpmIpsets} Error: failed to flush ipset %s" , ipsetName )
621+ } else {
622+ metrics .RemoveAllEntriesFromIPSet (ipsetName )
622623 }
623624 }
624-
625625 for _ , ipsetName := range ipsetLists {
626626 deleteEntry := & ipsEntry {
627627 operationFlag : util .IpsetDestroyFlag ,
@@ -631,8 +631,6 @@ func (ipsMgr *IpsetManager) DestroyNpmIpsets() error {
631631 if err != nil {
632632 destroyFailureCount ++
633633 metrics .SendErrorLogAndMetric (util .IpsmID , "{DestroyNpmIpsets} Error: failed to destroy ipset %s" , ipsetName )
634- } else {
635- metrics .RemoveAllEntriesFromIPSet (ipsetName )
636634 }
637635 }
638636
@@ -644,9 +642,10 @@ func (ipsMgr *IpsetManager) DestroyNpmIpsets() error {
644642 } else {
645643 metrics .ResetNumIPSets ()
646644 }
647- // NOTE: in v2, we reset ipset entries, but in v1 we only remove entries for ipsets we delete.
648- // So v2 may underestimate the number of entries if there are destroy failures,
649- // but v1 may miss removing entries if some sets are in the prometheus metric but not in the kernel.
645+ // NOTE: in v2, we reset metrics blindly, regardless of errors
646+ // So v2 would underestimate the number of ipsets/entries if there are destroy failures.
647+ // In v1 we remove entries for ipsets we flush.
648+ // We may miss removing entries if some sets are in the prometheus metric but not in the kernel.
650649
651650 return nil
652651}
0 commit comments