Skip to content

Commit 3947758

Browse files
raymond13513copybara-github
authored andcommitted
Support triggering migration multiple times.
PiperOrigin-RevId: 845340374
1 parent 20b3bc1 commit 3947758

File tree

3 files changed

+30
-7
lines changed

3 files changed

+30
-7
lines changed

perfkitbenchmarker/time_triggers/base_disruption_trigger.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,6 @@ def AppendSamples(
108108
def generate_disruption_total_time_samples() -> (
109109
MutableSequence[sample.Sample]
110110
):
111-
self.WaitForDisruption()
112-
113111
# Host maintenance is in s
114112
self.disruption_ends = max(
115113
[float(d.end_time) * 1000 for d in self.disruption_events],

perfkitbenchmarker/time_triggers/base_time_trigger.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,24 @@
4545
),
4646
)
4747

48+
_TRIGGER_INFINITE = flags.DEFINE_bool(
49+
'trigger_infinite',
50+
False,
51+
'If true, runs trigger for given interval until benchmark completion.',
52+
)
53+
54+
_TRIGGER_INTERVAL_S = flags.DEFINE_integer(
55+
'trigger_interval_s',
56+
60,
57+
'Interval in seconds between triggers if trigger_infinite is true.',
58+
)
59+
60+
flags.register_validator(
61+
'trigger_interval_s',
62+
lambda value: value >= 0,
63+
message='--trigger_interval_s must be non-negative.',
64+
)
65+
4866

4967
class BaseTimeTrigger(metaclass=abc.ABCMeta):
5068
"""Object representing a Base Time Trigger.
@@ -59,6 +77,7 @@ def __init__(self, delay=0):
5977
self.delay = delay
6078
self.vms = []
6179
self.trigger_time = None
80+
self.trigger_count = 0
6281
self.metadata = {
6382
self.trigger_name: True,
6483
self.trigger_name + '_delay': delay,
@@ -76,11 +95,15 @@ def CreateAndStartTriggerThread(self, vm) -> None:
7695

7796
def TriggerEvent():
7897
time.sleep(self.delay)
79-
logging.info('Triggering %s on %s', self.trigger_name, vm.name)
80-
self.TriggerMethod(vm)
81-
82-
t = threading.Thread(target=TriggerEvent)
83-
t.daemon = True
98+
while True:
99+
logging.info('Triggering %s on %s', self.trigger_name, vm.name)
100+
self.TriggerMethod(vm)
101+
self.trigger_count += 1
102+
if not _TRIGGER_INFINITE.value:
103+
break
104+
time.sleep(_TRIGGER_INTERVAL_S.value)
105+
106+
t = threading.Thread(target=TriggerEvent, daemon=True)
84107
t.start()
85108

86109
def SetUpTrigger(self, unused_sender, benchmark_spec):
@@ -111,6 +134,7 @@ def RunTrigger(self, unused_sender):
111134
# pylint: disable=unused-argument
112135
def UpdateMetadata(self, unused_sender, benchmark_spec, samples):
113136
"""Update global metadata."""
137+
self.metadata['trigger_count'] = self.trigger_count
114138
for s in samples:
115139
s.metadata.update(self.metadata)
116140

perfkitbenchmarker/time_triggers/maintenance_simulation_trigger.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ def TriggerMethod(self, vm: virtual_machine.VirtualMachine):
352352
self.gce_simulate_maintenance_helpers[vm].SimulateMaintenanceWithLog()
353353
else:
354354
self.gce_simulate_maintenance_helpers[vm].SimulateMaintenanceEvent()
355+
self.WaitForDisruption()
355356

356357
def SetUp(self):
357358
"""Sets up notification if live migration timestamps are captured."""

0 commit comments

Comments
 (0)