Esempio n. 1
0
    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
Esempio n. 2
0
 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)
Esempio n. 3
0
 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)
Esempio n. 4
0
 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
Esempio n. 5
0
  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])
Esempio n. 6
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)
Esempio n. 7
0
    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
Esempio n. 8
0
 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 []
Esempio n. 9
0
 def __init__(self):
   self.last_time = SyncTime.now()
   self._disallow_timeouts = False
   self._events_after_close = []
   self.output = None
   self.output_path = ""
Esempio n. 10
0
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)
Esempio n. 11
0
 def test_basic(self):
     t = SyncTime(**{"seconds": 1347830756, "microSeconds": 474865})
Esempio n. 12
0
 def get_deterministic_value(self, controller, name):
     if name == "gettimeofday":
         return SyncTime.now()
Esempio n. 13
0
 def test_basic(self):
     # TODO(cs): test something
     t = SyncTime(**{"seconds": 1347830756, "microSeconds": 474865})