FIX: Remove old restart sequence - Honeycomb
[csit.git] / resources / libraries / python / DropRateSearch.py
index 9b7c466..e87ef95 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2018 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -109,21 +109,21 @@ class DropRateSearch(object):
 
     @abstractmethod
     def measure_loss(self, rate, frame_size, loss_acceptance,
-                     loss_acceptance_type, traffic_type, skip_warmup=False):
+                     loss_acceptance_type, traffic_profile, skip_warmup=False):
         """Send traffic from TG and measure count of dropped frames.
 
         :param rate: Offered traffic load.
         :param frame_size: Size of frame.
         :param loss_acceptance: Permitted drop ratio or frames count.
         :param loss_acceptance_type: Type of permitted loss.
-        :param traffic_type: Traffic profile ([2,3]-node-L[2,3], ...).
+        :param traffic_profile: Module name to use for traffic generation.
         :param skip_warmup: Start TRex without warmup traffic if true.
         :type rate: int
         :type frame_size: str
         :type loss_acceptance: float
         :type loss_acceptance_type: LossAcceptanceType
-        :type traffic_type: str
-        :type traffic_type: bool
+        :type traffic_profile: str
+        :type skip_warmup: bool
         :returns: Drop threshold exceeded? (True/False)
         :rtype: bool
         """
@@ -381,13 +381,13 @@ class DropRateSearch(object):
         else:
             raise ValueError("Unknown search result type")
 
-    def linear_search(self, start_rate, traffic_type):
+    def linear_search(self, start_rate, traffic_profile):
         """Linear search of rate with loss below acceptance criteria.
 
         :param start_rate: Initial rate.
-        :param traffic_type: Traffic profile.
+        :param traffic_profile: Module name to use for traffic generation.
         :type start_rate: float
-        :type traffic_type: str
+        :type traffic_profile: str
         :returns: nothing
         :raises ValueError: If start rate is not in range.
         """
@@ -405,41 +405,11 @@ class DropRateSearch(object):
             for dummy in range(self._max_attempts):
                 res.append(self.measure_loss(
                     rate, self._frame_size, self._loss_acceptance,
-                    self._loss_acceptance_type, traffic_type))
+                    self._loss_acceptance_type, traffic_profile))
 
             res = self._get_res_based_on_search_type(res)
 
-            if self._search_linear_direction == SearchDirection.BOTTOM_UP:
-                # loss occurred and it was above acceptance criteria
-                if not res:
-                    # if this is first run then we didn't find drop rate
-                    if prev_rate is None:
-                        self._search_result = SearchResults.FAILURE
-                        self._search_result_rate = None
-                    # else we found the rate, which is value from previous run
-                    else:
-                        self._search_result = SearchResults.SUCCESS
-                        self._search_result_rate = prev_rate
-                    return
-                # there was no loss / loss below acceptance criteria
-                elif res:
-                    prev_rate = rate
-                    rate += self._rate_linear_step
-                    if rate > self._rate_max:
-                        if prev_rate != self._rate_max:
-                            # one last step with rate set to _rate_max
-                            rate = self._rate_max
-                            continue
-                        else:
-                            self._search_result = SearchResults.SUCCESS
-                            self._search_result_rate = prev_rate
-                            return
-                    else:
-                        continue
-                else:
-                    raise RuntimeError("Unknown search result")
-
-            elif self._search_linear_direction == SearchDirection.TOP_DOWN:
+            if self._search_linear_direction == SearchDirection.TOP_DOWN:
                 # loss occurred, decrease rate
                 if not res:
                     prev_rate = rate
@@ -465,8 +435,6 @@ class DropRateSearch(object):
             else:
                 raise Exception("Unknown search direction")
 
-        raise Exception("Wrong codepath")
-
     def verify_search_result(self):
         """Fail if search was not successful.
 
@@ -479,18 +447,18 @@ class DropRateSearch(object):
             return self._search_result_rate, self.get_latency()
         raise Exception('Search FAILED')
 
-    def binary_search(self, b_min, b_max, traffic_type, skip_max_rate=False,
+    def binary_search(self, b_min, b_max, traffic_profile, skip_max_rate=False,
                       skip_warmup=False):
         """Binary search of rate with loss below acceptance criteria.
 
         :param b_min: Min range rate.
         :param b_max: Max range rate.
-        :param traffic_type: Traffic profile.
+        :param traffic_profile: Module name to use for traffic generation.
         :param skip_max_rate: Start with max rate first
         :param skip_warmup: Start TRex without warmup traffic if true.
         :type b_min: float
         :type b_max: float
-        :type traffic_type: str
+        :type traffic_profile: str
         :type skip_max_rate: bool
         :type skip_warmup: bool
         :returns: nothing
@@ -521,33 +489,33 @@ class DropRateSearch(object):
 
         res = []
         for dummy in range(self._max_attempts):
-            res.append(self.measure_loss(rate, self._frame_size,
-                                         self._loss_acceptance,
-                                         self._loss_acceptance_type,
-                                         traffic_type, skip_warmup=skip_warmup))
+            res.append(self.measure_loss(
+                rate, self._frame_size, self._loss_acceptance,
+                self._loss_acceptance_type, traffic_profile,
+                skip_warmup=skip_warmup))
 
         res = self._get_res_based_on_search_type(res)
 
         # loss occurred and it was above acceptance criteria
         if not res:
-            self.binary_search(b_min, rate, traffic_type, True, True)
+            self.binary_search(b_min, rate, traffic_profile, True, True)
         # there was no loss / loss below acceptance criteria
         else:
             self._search_result_rate = rate
-            self.binary_search(rate, b_max, traffic_type, True, True)
+            self.binary_search(rate, b_max, traffic_profile, True, True)
 
-    def combined_search(self, start_rate, traffic_type):
+    def combined_search(self, start_rate, traffic_profile):
         """Combined search of rate with loss below acceptance criteria.
 
         :param start_rate: Initial rate.
-        :param traffic_type: Traffic profile.
+        :param traffic_profile: Module name to use for traffic generation.
         :type start_rate: float
-        :type traffic_type: str
+        :type traffic_profile: str
         :returns: nothing
         :raises RuntimeError: If linear search failed.
         """
 
-        self.linear_search(start_rate, traffic_type)
+        self.linear_search(start_rate, traffic_profile)
 
         if self._search_result in [SearchResults.SUCCESS,
                                    SearchResults.SUSPICIOUS]:
@@ -567,7 +535,7 @@ class DropRateSearch(object):
             self._search_result_rate = None
 
             # we will use binary search to refine search in one linear step
-            self.binary_search(b_min, b_max, traffic_type, True)
+            self.binary_search(b_min, b_max, traffic_profile, True)
 
             # linear and binary search succeed
             if self._search_result == SearchResults.SUCCESS: