// shouldQueueAgain is a helper function to determine whether the // replica should be queued according to the current time, the last // time the replica was processed, and the minimum interval between // successive processing. Specifying minInterval=0 queues all replicas. // Returns a bool for whether to queue as well as a priority based // on how long it's been since last processed. func shouldQueueAgain(now, last hlc.Timestamp, minInterval time.Duration) (bool, float64) { if minInterval == 0 || last == hlc.ZeroTimestamp { return true, 0 } if diff := now.GoTime().Sub(last.GoTime()); diff >= minInterval { priority := float64(1) // If there's a non-zero last processed timestamp, adjust the // priority by a multiple of how long it's been since the last // time this replica was processed. if last != hlc.ZeroTimestamp { priority = float64(diff.Nanoseconds()) / float64(minInterval.Nanoseconds()) } return true, priority } return false, 0 }
// selectEventTimestamp selects a timestamp for this log message. If the // transaction this event is being written in has a non-zero timestamp, then that // timestamp should be used; otherwise, the store's physical clock is used. // This helps with testing; in normal usage, the logging of an event will never // be the first action in the transaction, and thus the transaction will have an // assigned database timestamp. However, in the case of our tests log events // *are* the first action in a transaction, and we must elect to use the store's // physical time instead. func (ev EventLogger) selectEventTimestamp(input hlc.Timestamp) time.Time { if input == hlc.ZeroTimestamp { return ev.LeaseManager.clock.PhysicalTime() } return input.GoTime() }
// selectEventTimestamp selects a timestamp for this log message. If the // transaction this event is being written in has a non-zero timestamp, then that // timestamp should be used; otherwise, the store's physical clock is used. // This helps with testing; in normal usage, the logging of an event will never // be the first action in the transaction, and thus the transaction will have an // assigned database timestamp. However, in the case of our tests log events // *are* the first action in a transaction, and we must elect to use the store's // physical time instead. func selectEventTimestamp(s *Store, input hlc.Timestamp) time.Time { if input == hlc.ZeroTimestamp { return s.Clock().PhysicalTime() } return input.GoTime() }