2222import json
2323import logging
2424import os
25+ import time
2526from typing import Any , Dict
2627
2728from absl import flags
3940from perfkitbenchmarker .providers .aws import s3
4041from perfkitbenchmarker .providers .aws import util
4142
42-
4343FLAGS = flags .FLAGS
4444flags .DEFINE_string (
4545 'dpb_emr_release_label' , None , 'DEPRECATED use dpb_service.version.'
@@ -197,8 +197,8 @@ def __init__(self, dpb_service_spec):
197197 self .storage_service = s3 .S3Service ()
198198 self .storage_service .PrepareService (self .region )
199199 self .bucket_to_delete = None
200- self ._cluster_create_time : float | None = None
201- self ._cluster_ready_time : float | None = None
200+ self ._service_reported_cluster_create_time : float | None = None
201+ self ._service_reported_cluster_ready_time : float | None = None
202202 self ._cluster_delete_time : float | None = None
203203 if not self .GetDpbVersion ():
204204 raise errors .Setup .InvalidSetupError (
@@ -212,17 +212,26 @@ def persistent_fs_prefix(self) -> str | None:
212212 def GetDpbVersion (self ) -> str | None :
213213 return FLAGS .dpb_emr_release_label or super ().GetDpbVersion ()
214214
215- def GetClusterCreateTime (self ) -> float | None :
216- """Returns the cluster creation time.
215+ def GetServiceReportedClusterCreateTime (self ) -> float | None :
216+ """Returns the cluster creation time as reported by the service .
217217
218218 On this implementation, the time returned is based on the timestamps
219- reported by the EMR API (which is stored in the _cluster_create_time
219+ reported by the EMR API (which is stored in the
220+ _service_reported_cluster_create_time
220221 attribute).
221222
222223 Returns:
223224 A float representing the creation time in seconds or None.
224225 """
225- return self ._cluster_ready_time - self ._cluster_create_time
226+ if (
227+ self ._service_reported_cluster_create_time is None
228+ or self ._service_reported_cluster_ready_time is None
229+ ):
230+ return None
231+ return (
232+ self ._service_reported_cluster_ready_time
233+ - self ._service_reported_cluster_create_time
234+ )
226235
227236 @property
228237 def security_group_id (self ):
@@ -397,9 +406,11 @@ def _IsReady(self):
397406 # TODO(saksena): Handle error outcomees when spinning up emr clusters
398407 is_ready = result ['Cluster' ]['Status' ]['State' ] == READY_STATE
399408 if is_ready :
400- self ._cluster_create_time , self ._cluster_ready_time = (
401- self ._ParseClusterCreateTime (result )
402- )
409+ (
410+ self ._service_reported_cluster_create_time ,
411+ self ._service_reported_cluster_ready_time ,
412+ ) = self ._ParseClusterCreateTime (result )
413+ self .resource_ready_time = time .time ()
403414 return is_ready
404415
405416 @classmethod
@@ -575,8 +586,7 @@ def _FetchLogs(self, step_id: str) -> str | None:
575586 's3' ,
576587 'cp' ,
577588 os .path .join (
578- self .base_dir ,
579- f'{ self .cluster_id } /steps/{ step_id } /stderr.gz'
589+ self .base_dir , f'{ self .cluster_id } /steps/{ step_id } /stderr.gz'
580590 ),
581591 local_stdout_path ,
582592 ]
@@ -615,7 +625,7 @@ def __init__(self, dpb_service_spec):
615625 self .cmd_prefix += ['--region' , self .region ]
616626 self .storage_service = s3 .S3Service ()
617627 self .storage_service .PrepareService (self .region )
618- self ._cluster_create_time = None
628+ self ._service_reported_cluster_create_time = None
619629 if not self .GetDpbVersion ():
620630 raise errors .Setup .InvalidSetupError (
621631 'dpb_service.version must be provided. Versions follow the format: '
0 commit comments