def get_time(self): """ Hack alert: python logging use time.time(). That means that log statements in the determinism protocols are going to invoke get_time again. Solve by returning the real time if we (get_time) are in the stacktrace """ if self._in_get_time: return time._orig_time() try: self._in_get_time = True time_array = self.connection.request("DeterministicValue", "gettimeofday") sync_time = SyncTime(*time_array) return sync_time.as_float() finally: self._in_get_time = False
def _get_nom_snapshot(self, message): snapshot = self.snapshotter.get_snapshot() response = SyncMessage(type="RESPONSE", messageClass="NOMSnapshot", time=SyncTime.now(), xid=message.xid, value=snapshot) self.send(response)
def _get_deterministic_value(self, message): value = self.state_master.get_deterministic_value( self.controller, message.name) response = SyncMessage(type="RESPONSE", messageClass="DeterministicValue", time=SyncTime.now(), xid=message.xid, value=value) self.send(response)
def __init__(self, pending_message, b64_packet, time=None, send_event=False): # TODO(cs): boolean flag is ugly. Should use subclasses, but EventMixin # doesn't support addListener() on super/subclasses. super(PendingMessage, self).__init__() self.time = time if time else SyncTime.now() self.pending_message = pending_message self.b64_packet = b64_packet self.send_event = send_event
def test_log_state_change(self): _eq = self.assertEquals h = SyncMessageTest.basic_hash state_master = MockStateMaster() worker = MockIOWorker() controller = "c1" speaker = STSSyncProtocolSpeaker(controller=controller, state_master=state_master, json_io_worker=worker) worker.receive(h) _eq(1, len(state_master.changes)) _eq( (controller, SyncTime(**h['time']), h['fingerPrint'], h['name'], h['value']), state_master.changes[0])
def get_deterministic_value(self, controller, name, xid): # TODO(cs): xid arguably shouldn't be known to STS value = None if name == "gettimeofday": value = SyncTime.now() else: raise ValueError("unsupported deterministic value: %s" % name) # TODO(cs): implement Andi's improved gettime heuristic if self.record_deterministic_values: self.input_logger.log_input_event( DeterministicValue(controller.cid, name, value, time=value)) controller.sync_connection.send_deterministic_value(xid, value)
def get_deterministic_value(self, controller, name): value = None if name == "gettimeofday": value = SyncTime.now() else: raise ValueError("unsupported deterministic value: %s" % name) # TODO(cs): implement Andi's improved gettime heuristic, and uncomment # the following statement #self.input_logger.log_input_event(klass="DeterministicValue", # controller_id=controller.uuid, # time=time, fingerprint="null", # name=name, value=value) return value
def __init__(self, prefix="e", label=None, time=None, dependent_labels=None): if label is None: label_id = Event._label_gen.next() label = prefix + str(label_id) while label_id in Event._all_label_ids: label_id = Event._label_gen.next() label = prefix + str(label_id) if time is None: # TODO(cs): compress time for interactive mode? time = SyncTime.now() self.label = label Event._all_label_ids.add(int(label[1:])) self.time = time # Add on dependent labels to appease log_processing.superlog_parser. # TODO(cs): Replayer shouldn't depend on superlog_parser self.dependent_labels = dependent_labels if dependent_labels else []
def __init__(self): self.last_time = SyncTime.now() self._disallow_timeouts = False self._events_after_close = [] self.output = None self.output_path = ""
def extract_label_time(json_hash): assert_fields_exist(json_hash, 'label', 'time') label = json_hash['label'] time = SyncTime(json_hash['time'][0], json_hash['time'][1]) return (label, time)
def test_basic(self): t = SyncTime(**{"seconds": 1347830756, "microSeconds": 474865})
def get_deterministic_value(self, controller, name): if name == "gettimeofday": return SyncTime.now()
def test_basic(self): # TODO(cs): test something t = SyncTime(**{"seconds": 1347830756, "microSeconds": 474865})