mirror of
https://github.com/temporalio/temporal.git
synced 2026-08-30 18:41:49 -07:00
perf: return TimerSequenceID by value instead of pointer (#11177)
## Motivation `TimerSequenceID` (~48 bytes) is heap-allocated and returned as a `*TimerSequenceID` from 5 getter functions: `getUserTimerTimeout`, `getActivityScheduleToStartTimeout`, `getActivityScheduleToCloseTimeout`, `getActivityStartToCloseTimeout`, and `getActivityHeartbeatTimeout`. These are called for every pending timer/activity during `LoadAndSortUserTimers()` and `LoadAndSortActivityTimers()` — a hot path in every workflow task. Callers were already dereferencing the pointer before appending to the value-type `[]TimerSequenceID` slice, so the existing code was allocating on the heap only to immediately copy to the stack. ## Changes - `TimerSequenceID` is now returned by value with a `(TimerSequenceID, bool)` tuple - Idiomatic Go pattern (same as map access) replaces nil-check sentinel - All 5 getter methods updated + call sites and tests adapted ## Impact Eliminates one heap allocation per getter call on the timer-sorting hot path. ## Tests - `service/history/workflow` (1075 tests): ✅ passed --------- Co-authored-by: Prathyush PV <prathyush.pv@temporal.io>
This commit is contained in:
@@ -171,11 +171,7 @@ func (t *timerSequenceImpl) LoadAndSortUserTimers() []TimerSequenceID {
|
||||
|
||||
for _, timerInfo := range pendingTimers {
|
||||
|
||||
if sequenceID := t.getUserTimerTimeout(
|
||||
timerInfo,
|
||||
); sequenceID != nil {
|
||||
timers = append(timers, *sequenceID)
|
||||
}
|
||||
timers = append(timers, t.getUserTimerTimeout(timerInfo))
|
||||
}
|
||||
|
||||
sort.Sort(timers)
|
||||
@@ -193,28 +189,28 @@ func (t *timerSequenceImpl) LoadAndSortActivityTimers() []TimerSequenceID {
|
||||
if activityInfo.Paused {
|
||||
continue
|
||||
}
|
||||
if sequenceID := t.getActivityScheduleToCloseTimeout(
|
||||
if sequenceID, ok := t.getActivityScheduleToCloseTimeout(
|
||||
activityInfo,
|
||||
); sequenceID != nil {
|
||||
activityTimers = append(activityTimers, *sequenceID)
|
||||
); ok {
|
||||
activityTimers = append(activityTimers, sequenceID)
|
||||
}
|
||||
|
||||
if sequenceID := t.getActivityScheduleToStartTimeout(
|
||||
if sequenceID, ok := t.getActivityScheduleToStartTimeout(
|
||||
activityInfo,
|
||||
); sequenceID != nil {
|
||||
activityTimers = append(activityTimers, *sequenceID)
|
||||
); ok {
|
||||
activityTimers = append(activityTimers, sequenceID)
|
||||
}
|
||||
|
||||
if sequenceID := t.getActivityStartToCloseTimeout(
|
||||
if sequenceID, ok := t.getActivityStartToCloseTimeout(
|
||||
activityInfo,
|
||||
); sequenceID != nil {
|
||||
activityTimers = append(activityTimers, *sequenceID)
|
||||
); ok {
|
||||
activityTimers = append(activityTimers, sequenceID)
|
||||
}
|
||||
|
||||
if sequenceID := t.getActivityHeartbeatTimeout(
|
||||
if sequenceID, ok := t.getActivityHeartbeatTimeout(
|
||||
activityInfo,
|
||||
); sequenceID != nil {
|
||||
activityTimers = append(activityTimers, *sequenceID)
|
||||
); ok {
|
||||
activityTimers = append(activityTimers, sequenceID)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -224,11 +220,11 @@ func (t *timerSequenceImpl) LoadAndSortActivityTimers() []TimerSequenceID {
|
||||
|
||||
func (t *timerSequenceImpl) getUserTimerTimeout(
|
||||
timerInfo *persistencespb.TimerInfo,
|
||||
) *TimerSequenceID {
|
||||
) TimerSequenceID {
|
||||
|
||||
expiryTime := timerInfo.ExpiryTime
|
||||
|
||||
return &TimerSequenceID{
|
||||
return TimerSequenceID{
|
||||
EventID: timerInfo.GetStartedEventId(),
|
||||
Timestamp: timestamp.TimeValue(expiryTime),
|
||||
TimerType: enumspb.TIMEOUT_TYPE_START_TO_CLOSE,
|
||||
@@ -256,14 +252,15 @@ type activityTimerDeadlines [4]*time.Time
|
||||
// definition of each deadline.
|
||||
func getActivityTimerDeadlines(activityInfo *persistencespb.ActivityInfo) activityTimerDeadlines {
|
||||
var deadlines activityTimerDeadlines
|
||||
for i, sequenceID := range [4]*TimerSequenceID{
|
||||
getActivityScheduleToCloseTimeout(activityInfo),
|
||||
getActivityScheduleToStartTimeout(activityInfo),
|
||||
getActivityStartToCloseTimeout(activityInfo),
|
||||
getActivityHeartbeatTimeout(activityInfo),
|
||||
for i, getTimeout := range [4]func(*persistencespb.ActivityInfo) (TimerSequenceID, bool){
|
||||
getActivityScheduleToCloseTimeout,
|
||||
getActivityScheduleToStartTimeout,
|
||||
getActivityStartToCloseTimeout,
|
||||
getActivityHeartbeatTimeout,
|
||||
} {
|
||||
if sequenceID != nil {
|
||||
deadlines[i] = &sequenceID.Timestamp
|
||||
if sequenceID, ok := getTimeout(activityInfo); ok {
|
||||
deadline := sequenceID.Timestamp
|
||||
deadlines[i] = &deadline
|
||||
}
|
||||
}
|
||||
return deadlines
|
||||
@@ -291,58 +288,58 @@ func (d activityTimerDeadlines) changedMask(other activityTimerDeadlines) int32
|
||||
|
||||
func (t *timerSequenceImpl) getActivityScheduleToStartTimeout(
|
||||
activityInfo *persistencespb.ActivityInfo,
|
||||
) *TimerSequenceID {
|
||||
) (TimerSequenceID, bool) {
|
||||
return getActivityScheduleToStartTimeout(activityInfo)
|
||||
}
|
||||
|
||||
func getActivityScheduleToStartTimeout(
|
||||
activityInfo *persistencespb.ActivityInfo,
|
||||
) *TimerSequenceID {
|
||||
) (TimerSequenceID, bool) {
|
||||
|
||||
// activity is not scheduled yet, probably due to retry & backoff
|
||||
if activityInfo.ScheduledEventId == common.EmptyEventID {
|
||||
return nil
|
||||
return TimerSequenceID{}, false
|
||||
}
|
||||
|
||||
// activity is already started
|
||||
if activityInfo.StartedEventId != common.EmptyEventID {
|
||||
return nil
|
||||
return TimerSequenceID{}, false
|
||||
}
|
||||
|
||||
scheduleToStartDuration := timestamp.DurationValue(activityInfo.ScheduleToStartTimeout)
|
||||
if scheduleToStartDuration == 0 {
|
||||
return nil
|
||||
return TimerSequenceID{}, false
|
||||
}
|
||||
|
||||
timeoutTime := timestamp.TimeValue(activityInfo.ScheduledTime).Add(scheduleToStartDuration)
|
||||
|
||||
return &TimerSequenceID{
|
||||
return TimerSequenceID{
|
||||
EventID: activityInfo.ScheduledEventId,
|
||||
Timestamp: timeoutTime,
|
||||
TimerType: enumspb.TIMEOUT_TYPE_SCHEDULE_TO_START,
|
||||
TimerCreated: (activityInfo.TimerTaskStatus & TimerTaskStatusCreatedScheduleToStart) > 0,
|
||||
Attempt: activityInfo.Attempt,
|
||||
}
|
||||
}, true
|
||||
}
|
||||
|
||||
func (t *timerSequenceImpl) getActivityScheduleToCloseTimeout(
|
||||
activityInfo *persistencespb.ActivityInfo,
|
||||
) *TimerSequenceID {
|
||||
) (TimerSequenceID, bool) {
|
||||
return getActivityScheduleToCloseTimeout(activityInfo)
|
||||
}
|
||||
|
||||
func getActivityScheduleToCloseTimeout(
|
||||
activityInfo *persistencespb.ActivityInfo,
|
||||
) *TimerSequenceID {
|
||||
) (TimerSequenceID, bool) {
|
||||
|
||||
// activity is not scheduled yet, probably due to retry & backoff
|
||||
if activityInfo.ScheduledEventId == common.EmptyEventID {
|
||||
return nil
|
||||
return TimerSequenceID{}, false
|
||||
}
|
||||
|
||||
scheduleToCloseDuration := timestamp.DurationValue(activityInfo.ScheduleToCloseTimeout)
|
||||
if scheduleToCloseDuration == 0 {
|
||||
return nil
|
||||
return TimerSequenceID{}, false
|
||||
}
|
||||
|
||||
var timeoutTime time.Time
|
||||
@@ -354,75 +351,75 @@ func getActivityScheduleToCloseTimeout(
|
||||
timeoutTime = timestamp.TimeValue(activityInfo.ScheduledTime).Add(scheduleToCloseDuration)
|
||||
}
|
||||
|
||||
return &TimerSequenceID{
|
||||
return TimerSequenceID{
|
||||
EventID: activityInfo.ScheduledEventId,
|
||||
Timestamp: timeoutTime,
|
||||
TimerType: enumspb.TIMEOUT_TYPE_SCHEDULE_TO_CLOSE,
|
||||
TimerCreated: (activityInfo.TimerTaskStatus & TimerTaskStatusCreatedScheduleToClose) > 0,
|
||||
Attempt: activityInfo.Attempt,
|
||||
}
|
||||
}, true
|
||||
}
|
||||
|
||||
func (t *timerSequenceImpl) getActivityStartToCloseTimeout(
|
||||
activityInfo *persistencespb.ActivityInfo,
|
||||
) *TimerSequenceID {
|
||||
) (TimerSequenceID, bool) {
|
||||
return getActivityStartToCloseTimeout(activityInfo)
|
||||
}
|
||||
|
||||
func getActivityStartToCloseTimeout(
|
||||
activityInfo *persistencespb.ActivityInfo,
|
||||
) *TimerSequenceID {
|
||||
) (TimerSequenceID, bool) {
|
||||
|
||||
// activity is not scheduled yet, probably due to retry & backoff
|
||||
if activityInfo.ScheduledEventId == common.EmptyEventID {
|
||||
return nil
|
||||
return TimerSequenceID{}, false
|
||||
}
|
||||
|
||||
// activity is not started yet
|
||||
if activityInfo.StartedEventId == common.EmptyEventID {
|
||||
return nil
|
||||
return TimerSequenceID{}, false
|
||||
}
|
||||
|
||||
startToCloseDuration := timestamp.DurationValue(activityInfo.StartToCloseTimeout)
|
||||
if startToCloseDuration == 0 {
|
||||
return nil
|
||||
return TimerSequenceID{}, false
|
||||
}
|
||||
|
||||
timeoutTime := timestamp.TimeValue(activityInfo.StartedTime).Add(startToCloseDuration)
|
||||
|
||||
return &TimerSequenceID{
|
||||
return TimerSequenceID{
|
||||
EventID: activityInfo.ScheduledEventId,
|
||||
Timestamp: timeoutTime,
|
||||
TimerType: enumspb.TIMEOUT_TYPE_START_TO_CLOSE,
|
||||
TimerCreated: (activityInfo.TimerTaskStatus & TimerTaskStatusCreatedStartToClose) > 0,
|
||||
Attempt: activityInfo.Attempt,
|
||||
}
|
||||
}, true
|
||||
}
|
||||
|
||||
func (t *timerSequenceImpl) getActivityHeartbeatTimeout(
|
||||
activityInfo *persistencespb.ActivityInfo,
|
||||
) *TimerSequenceID {
|
||||
) (TimerSequenceID, bool) {
|
||||
return getActivityHeartbeatTimeout(activityInfo)
|
||||
}
|
||||
|
||||
func getActivityHeartbeatTimeout(
|
||||
activityInfo *persistencespb.ActivityInfo,
|
||||
) *TimerSequenceID {
|
||||
) (TimerSequenceID, bool) {
|
||||
|
||||
// activity is not scheduled yet, probably due to retry & backoff
|
||||
if activityInfo.ScheduledEventId == common.EmptyEventID {
|
||||
return nil
|
||||
return TimerSequenceID{}, false
|
||||
}
|
||||
|
||||
// activity is not started yet
|
||||
if activityInfo.StartedEventId == common.EmptyEventID {
|
||||
return nil
|
||||
return TimerSequenceID{}, false
|
||||
}
|
||||
|
||||
// not heartbeat timeout configured
|
||||
heartbeatDuration := timestamp.DurationValue(activityInfo.HeartbeatTimeout)
|
||||
if heartbeatDuration == 0 {
|
||||
return nil
|
||||
return TimerSequenceID{}, false
|
||||
}
|
||||
|
||||
// use the latest time as last heartbeat time
|
||||
@@ -437,13 +434,13 @@ func getActivityHeartbeatTimeout(
|
||||
|
||||
heartbeatTimeout := lastHeartbeat.Add(heartbeatDuration)
|
||||
|
||||
return &TimerSequenceID{
|
||||
return TimerSequenceID{
|
||||
EventID: activityInfo.ScheduledEventId,
|
||||
Timestamp: heartbeatTimeout,
|
||||
TimerType: enumspb.TIMEOUT_TYPE_HEARTBEAT,
|
||||
TimerCreated: (activityInfo.TimerTaskStatus & TimerTaskStatusCreatedHeartbeat) > 0,
|
||||
Attempt: activityInfo.Attempt,
|
||||
}
|
||||
}, true
|
||||
}
|
||||
|
||||
func timerTypeToTimerMask(
|
||||
|
||||
@@ -927,7 +927,7 @@ func (s *timerSequenceSuite) TestGetUserTimerTimeout() {
|
||||
TaskStatus: TimerTaskStatusCreated,
|
||||
}
|
||||
|
||||
expectedTimerSequence := &TimerSequenceID{
|
||||
expectedTimerSequence := TimerSequenceID{
|
||||
EventID: timerInfo.StartedEventId,
|
||||
Timestamp: timerExpiry.AsTime(),
|
||||
TimerType: enumspb.TIMEOUT_TYPE_START_TO_CLOSE,
|
||||
@@ -962,8 +962,8 @@ func (s *timerSequenceSuite) TestGetActivityScheduleToStartTimeout_WithTimeout_N
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityScheduleToStartTimeout_WithTimeout_Scheduled_NotStarted() {
|
||||
@@ -984,7 +984,7 @@ func (s *timerSequenceSuite) TestGetActivityScheduleToStartTimeout_WithTimeout_S
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
expectedTimerSequence := &TimerSequenceID{
|
||||
expectedTimerSequence := TimerSequenceID{
|
||||
EventID: activityInfo.ScheduledEventId,
|
||||
Timestamp: activityInfo.ScheduledTime.AsTime().Add(activityInfo.ScheduleToStartTimeout.AsDuration()),
|
||||
TimerType: enumspb.TIMEOUT_TYPE_SCHEDULE_TO_START,
|
||||
@@ -992,12 +992,14 @@ func (s *timerSequenceSuite) TestGetActivityScheduleToStartTimeout_WithTimeout_S
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
timerSequence, ok := s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.True(ok)
|
||||
s.Equal(expectedTimerSequence, timerSequence)
|
||||
|
||||
activityInfo.TimerTaskStatus = TimerTaskStatusNone
|
||||
expectedTimerSequence.TimerCreated = false
|
||||
timerSequence = s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
timerSequence, ok = s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.True(ok)
|
||||
s.Equal(expectedTimerSequence, timerSequence)
|
||||
}
|
||||
|
||||
@@ -1019,12 +1021,12 @@ func (s *timerSequenceSuite) TestGetActivityScheduleToStartTimeout_WithTimeout_S
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
|
||||
activityInfo.TimerTaskStatus = TimerTaskStatusNone
|
||||
timerSequence = s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok = s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityScheduleToStartTimeout_WithoutTimeout_NotScheduled() {
|
||||
@@ -1045,8 +1047,8 @@ func (s *timerSequenceSuite) TestGetActivityScheduleToStartTimeout_WithoutTimeou
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityScheduleToStartTimeout_WithoutTimeout_Scheduled_NotStarted() {
|
||||
@@ -1067,12 +1069,12 @@ func (s *timerSequenceSuite) TestGetActivityScheduleToStartTimeout_WithoutTimeou
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
|
||||
activityInfo.TimerTaskStatus = TimerTaskStatusNone
|
||||
timerSequence = s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok = s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityScheduleToStartTimeout_WithoutTimeout_Scheduled_Started() {
|
||||
@@ -1093,12 +1095,12 @@ func (s *timerSequenceSuite) TestGetActivityScheduleToStartTimeout_WithoutTimeou
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
|
||||
activityInfo.TimerTaskStatus = TimerTaskStatusNone
|
||||
timerSequence = s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok = s.timerSequence.getActivityScheduleToStartTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityScheduleToCloseTimeout_WithTimeout_NotScheduled() {
|
||||
@@ -1119,8 +1121,8 @@ func (s *timerSequenceSuite) TestGetActivityScheduleToCloseTimeout_WithTimeout_N
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityScheduleToCloseTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityScheduleToCloseTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityScheduleToCloseTimeout_WithTimeout_Scheduled() {
|
||||
@@ -1142,7 +1144,7 @@ func (s *timerSequenceSuite) TestGetActivityScheduleToCloseTimeout_WithTimeout_S
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
expectedTimerSequence := &TimerSequenceID{
|
||||
expectedTimerSequence := TimerSequenceID{
|
||||
EventID: activityInfo.ScheduledEventId,
|
||||
Timestamp: activityInfo.ScheduledTime.AsTime().Add(activityInfo.ScheduleToCloseTimeout.AsDuration()),
|
||||
TimerType: enumspb.TIMEOUT_TYPE_SCHEDULE_TO_CLOSE,
|
||||
@@ -1150,12 +1152,14 @@ func (s *timerSequenceSuite) TestGetActivityScheduleToCloseTimeout_WithTimeout_S
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityScheduleToCloseTimeout(activityInfo)
|
||||
timerSequence, ok := s.timerSequence.getActivityScheduleToCloseTimeout(activityInfo)
|
||||
s.True(ok)
|
||||
s.Equal(expectedTimerSequence, timerSequence)
|
||||
|
||||
activityInfo.TimerTaskStatus = TimerTaskStatusNone
|
||||
expectedTimerSequence.TimerCreated = false
|
||||
timerSequence = s.timerSequence.getActivityScheduleToCloseTimeout(activityInfo)
|
||||
timerSequence, ok = s.timerSequence.getActivityScheduleToCloseTimeout(activityInfo)
|
||||
s.True(ok)
|
||||
s.Equal(expectedTimerSequence, timerSequence)
|
||||
}
|
||||
|
||||
@@ -1177,8 +1181,8 @@ func (s *timerSequenceSuite) TestGetActivityScheduleToCloseTimeout_WithoutTimeou
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityScheduleToCloseTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityScheduleToCloseTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityScheduleToCloseTimeout_WithoutTimeout_Scheduled() {
|
||||
@@ -1199,12 +1203,12 @@ func (s *timerSequenceSuite) TestGetActivityScheduleToCloseTimeout_WithoutTimeou
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityScheduleToCloseTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityScheduleToCloseTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
|
||||
activityInfo.TimerTaskStatus = TimerTaskStatusNone
|
||||
timerSequence = s.timerSequence.getActivityScheduleToCloseTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok = s.timerSequence.getActivityScheduleToCloseTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityStartToCloseTimeout_WithTimeout_NotStarted() {
|
||||
@@ -1225,8 +1229,8 @@ func (s *timerSequenceSuite) TestGetActivityStartToCloseTimeout_WithTimeout_NotS
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityStartToCloseTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityStartToCloseTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityStartToCloseTimeout_WithTimeout_Started() {
|
||||
@@ -1247,7 +1251,7 @@ func (s *timerSequenceSuite) TestGetActivityStartToCloseTimeout_WithTimeout_Star
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
expectedTimerSequence := &TimerSequenceID{
|
||||
expectedTimerSequence := TimerSequenceID{
|
||||
EventID: activityInfo.ScheduledEventId,
|
||||
Timestamp: activityInfo.StartedTime.AsTime().Add(activityInfo.StartToCloseTimeout.AsDuration()),
|
||||
TimerType: enumspb.TIMEOUT_TYPE_START_TO_CLOSE,
|
||||
@@ -1255,12 +1259,14 @@ func (s *timerSequenceSuite) TestGetActivityStartToCloseTimeout_WithTimeout_Star
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityStartToCloseTimeout(activityInfo)
|
||||
timerSequence, ok := s.timerSequence.getActivityStartToCloseTimeout(activityInfo)
|
||||
s.True(ok)
|
||||
s.Equal(expectedTimerSequence, timerSequence)
|
||||
|
||||
activityInfo.TimerTaskStatus = TimerTaskStatusNone
|
||||
expectedTimerSequence.TimerCreated = false
|
||||
timerSequence = s.timerSequence.getActivityStartToCloseTimeout(activityInfo)
|
||||
timerSequence, ok = s.timerSequence.getActivityStartToCloseTimeout(activityInfo)
|
||||
s.True(ok)
|
||||
s.Equal(expectedTimerSequence, timerSequence)
|
||||
}
|
||||
|
||||
@@ -1282,8 +1288,8 @@ func (s *timerSequenceSuite) TestGetActivityStartToCloseTimeout_WithoutTimeout_N
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityStartToCloseTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityStartToCloseTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityStartToCloseTimeout_WithoutTimeout_Started() {
|
||||
@@ -1304,12 +1310,12 @@ func (s *timerSequenceSuite) TestGetActivityStartToCloseTimeout_WithoutTimeout_S
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityStartToCloseTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityStartToCloseTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
|
||||
activityInfo.TimerTaskStatus = TimerTaskStatusNone
|
||||
timerSequence = s.timerSequence.getActivityStartToCloseTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok = s.timerSequence.getActivityStartToCloseTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityHeartbeatTimeout_WithHeartbeat_NotStarted() {
|
||||
@@ -1330,8 +1336,8 @@ func (s *timerSequenceSuite) TestGetActivityHeartbeatTimeout_WithHeartbeat_NotSt
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityHeartbeatTimeout_WithHeartbeat_Started_NoHeartbeat() {
|
||||
@@ -1352,7 +1358,7 @@ func (s *timerSequenceSuite) TestGetActivityHeartbeatTimeout_WithHeartbeat_Start
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
expectedTimerSequence := &TimerSequenceID{
|
||||
expectedTimerSequence := TimerSequenceID{
|
||||
EventID: activityInfo.ScheduledEventId,
|
||||
Timestamp: activityInfo.StartedTime.AsTime().Add(activityInfo.HeartbeatTimeout.AsDuration()),
|
||||
TimerType: enumspb.TIMEOUT_TYPE_HEARTBEAT,
|
||||
@@ -1360,12 +1366,14 @@ func (s *timerSequenceSuite) TestGetActivityHeartbeatTimeout_WithHeartbeat_Start
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
timerSequence, ok := s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.True(ok)
|
||||
s.Equal(expectedTimerSequence, timerSequence)
|
||||
|
||||
activityInfo.TimerTaskStatus = TimerTaskStatusNone
|
||||
expectedTimerSequence.TimerCreated = false
|
||||
timerSequence = s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
timerSequence, ok = s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.True(ok)
|
||||
s.Equal(expectedTimerSequence, timerSequence)
|
||||
}
|
||||
|
||||
@@ -1387,7 +1395,7 @@ func (s *timerSequenceSuite) TestGetActivityHeartbeatTimeout_WithHeartbeat_Start
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
expectedTimerSequence := &TimerSequenceID{
|
||||
expectedTimerSequence := TimerSequenceID{
|
||||
EventID: activityInfo.ScheduledEventId,
|
||||
Timestamp: activityInfo.LastHeartbeatUpdateTime.AsTime().Add(activityInfo.HeartbeatTimeout.AsDuration()),
|
||||
TimerType: enumspb.TIMEOUT_TYPE_HEARTBEAT,
|
||||
@@ -1395,12 +1403,14 @@ func (s *timerSequenceSuite) TestGetActivityHeartbeatTimeout_WithHeartbeat_Start
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
timerSequence, ok := s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.True(ok)
|
||||
s.Equal(expectedTimerSequence, timerSequence)
|
||||
|
||||
activityInfo.TimerTaskStatus = TimerTaskStatusNone
|
||||
expectedTimerSequence.TimerCreated = false
|
||||
timerSequence = s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
timerSequence, ok = s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.True(ok)
|
||||
s.Equal(expectedTimerSequence, timerSequence)
|
||||
}
|
||||
|
||||
@@ -1422,8 +1432,8 @@ func (s *timerSequenceSuite) TestGetActivityHeartbeatTimeout_WithoutHeartbeat_No
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityHeartbeatTimeout_WithoutHeartbeat_Started_NoHeartbeat() {
|
||||
@@ -1444,12 +1454,12 @@ func (s *timerSequenceSuite) TestGetActivityHeartbeatTimeout_WithoutHeartbeat_St
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
|
||||
activityInfo.TimerTaskStatus = TimerTaskStatusNone
|
||||
timerSequence = s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok = s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestGetActivityHeartbeatTimeout_WithoutHeartbeat_Started_Heartbeated() {
|
||||
@@ -1470,12 +1480,12 @@ func (s *timerSequenceSuite) TestGetActivityHeartbeatTimeout_WithoutHeartbeat_St
|
||||
Attempt: 12,
|
||||
}
|
||||
|
||||
timerSequence := s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok := s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
|
||||
activityInfo.TimerTaskStatus = TimerTaskStatusNone
|
||||
timerSequence = s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.Empty(timerSequence)
|
||||
_, ok = s.timerSequence.getActivityHeartbeatTimeout(activityInfo)
|
||||
s.False(ok)
|
||||
}
|
||||
|
||||
func (s *timerSequenceSuite) TestConversion() {
|
||||
|
||||
Reference in New Issue
Block a user