Skip to content

Commit

Permalink
Merge pull request #316 from GoogleCloudPlatform/resources
Browse files Browse the repository at this point in the history
Add resource creation/deletion times
  • Loading branch information
ehankland committed Jun 17, 2015
2 parents 96727ee + 51599c1 commit 26f7a33
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 15 deletions.
2 changes: 0 additions & 2 deletions perfkitbenchmarker/aws/aws_virtual_machine.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,8 +209,6 @@ def _DeleteDependencies(self):

def _Create(self):
"""Create a VM instance."""
super(AwsVirtualMachine, self)._Create()

placement = 'AvailabilityZone=%s' % self.zone
if IsPlacementGroupCompatible(self.machine_type):
placement += ',GroupName=%s' % self.network.placement_group.name
Expand Down
1 change: 0 additions & 1 deletion perfkitbenchmarker/azure/azure_virtual_machine.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,6 @@ def _DeleteDependencies(self):
self.service.Delete()

def _Create(self):
super(AzureVirtualMachine, self)._Create()
create_cmd = [AZURE_PATH,
'vm',
'create',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ def __init__(self, vm_spec):

def _Create(self):
"""Create a DigitalOcean VM instance (droplet)."""
super(DigitalOceanVirtualMachine, self)._Create()
with open(self.ssh_public_key) as f:
public_key = f.read().rstrip('\n')

Expand Down
1 change: 0 additions & 1 deletion perfkitbenchmarker/gcp/gce_virtual_machine.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ def _DeleteDependencies(self):

def _Create(self):
"""Create a GCE VM instance."""
super(GceVirtualMachine, self)._Create()
with open(self.ssh_public_key) as f:
public_key = f.read().rstrip('\n')
with vm_util.NamedTemporaryFile(dir=vm_util.GetTempDir(),
Expand Down
18 changes: 17 additions & 1 deletion perfkitbenchmarker/resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"""

import abc
import time

from perfkitbenchmarker import errors
from perfkitbenchmarker import vm_util
Expand All @@ -34,6 +35,13 @@ def __init__(self):
super(BaseResource, self).__init__()
self.created = False

# Creation and deletion time information
# that we may make use of later.
self.create_start_time = None
self.delete_start_time = None
self.create_end_time = None
self.delete_end_time = None

@abc.abstractmethod
def _Create(self):
"""Creates the underlying resource."""
Expand Down Expand Up @@ -88,6 +96,8 @@ def _CreateResource(self):
"""Reliably creates the underlying resource."""
if self.created:
return
if not self.create_start_time:
self.create_start_time = time.time()
self._Create()
try:
if not self._Exists():
Expand All @@ -96,17 +106,23 @@ def _CreateResource(self):
except NotImplementedError:
pass
self.created = True
if not self.create_end_time:
self.create_end_time = time.time()

@vm_util.Retry(retryable_exceptions=(errors.Resource.RetryableDeletionError,))
def _DeleteResource(self):
"""Reliably deletes the underlying resource."""
if not self.delete_start_time:
self.delete_start_time = time.time()
self._Delete()
try:
if self._Exists():
raise errors.Resource.RetryableDeletionError(
'Deletion of %s failed.' % type(self).__name__)
except NotImplementedError:
pass
if not self.delete_end_time:
self.delete_end_time = time.time()

def Create(self):
"""Creates a resource and its dependencies."""
Expand All @@ -115,6 +131,6 @@ def Create(self):
self._PostCreate()

def Delete(self):
"""Deletes a resource and its dependencie."""
"""Deletes a resource and its dependencies."""
self._DeleteResource()
self._DeleteDependencies()
14 changes: 5 additions & 9 deletions perfkitbenchmarker/virtual_machine.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,6 @@ def __init__(self, vm_spec):
with self._instance_counter_lock:
self.name = 'perfkit-%s-%d' % (FLAGS.run_uri, self._instance_counter)
BaseVirtualMachine._instance_counter += 1
self.create_time = None
self.bootable_time = None
self.project = vm_spec.project
self.zone = vm_spec.zone
Expand Down Expand Up @@ -138,9 +137,6 @@ def __init__(self, vm_spec):
self._total_memory_kb = None
self._num_cpus = None

def _Create(self):
self.create_time = time.time()

def __repr__(self):
return '<BaseVirtualMachine [ip={0}, internal_ip={1}]>'.format(
self.ip_address, self.internal_ip)
Expand Down Expand Up @@ -518,12 +514,12 @@ def TimeToBoot(self):
"""Gets the time it took to boot this VM.
Returns:
Boot time (in seconds), or None if the boot is incomplete.
Boot time (in seconds).
"""
if not self.bootable_time or not self.create_time:
return None
assert self.bootable_time >= self.create_time
return self.bootable_time - self.create_time
assert self.bootable_time, 'VM must have booted to get boot time.'
assert self.create_start_time, 'VM must be created to get boot time.'
assert self.bootable_time >= self.create_start_time
return self.bootable_time - self.create_start_time

def IsReachable(self, target_vm):
"""Indicates whether the target VM can be reached from it's internal ip.
Expand Down

0 comments on commit 26f7a33

Please sign in to comment.