@@ -27,11 +27,13 @@ import (
27
27
"errors"
28
28
"fmt"
29
29
"strings"
30
+ "time"
30
31
31
32
"go.temporal.io/api/common/v1"
32
33
"go.temporal.io/api/deployment/v1"
33
34
"go.temporal.io/api/workflowservice/v1"
34
35
"go.temporal.io/sdk/converter"
36
+ "google.golang.org/protobuf/types/known/timestamppb"
35
37
)
36
38
37
39
// A reserved identifier of unversioned workers.
@@ -40,6 +42,15 @@ const WorkerDeploymentUnversioned = "__unversioned__"
40
42
// A reserved separator for Worker Deployment Versions.
41
43
const WorkerDeploymentVersionSeparator = "."
42
44
45
+ // safeAsTime ensures that a nil proto timestamp makes `IsZero()` true.
46
+ func safeAsTime (timestamp * timestamppb.Timestamp ) time.Time {
47
+ if timestamp == nil {
48
+ return time.Time {}
49
+ } else {
50
+ return timestamp .AsTime ()
51
+ }
52
+ }
53
+
43
54
type (
44
55
// WorkerDeploymentClient is the client for managing worker deployments.
45
56
workerDeploymentClient struct {
@@ -100,16 +111,16 @@ func workerDeploymentRoutingConfigFromProto(routingConfig *deployment.RoutingCon
100
111
CurrentVersion : routingConfig .GetCurrentVersion (),
101
112
RampingVersion : routingConfig .GetRampingVersion (),
102
113
RampingVersionPercentage : routingConfig .GetRampingVersionPercentage (),
103
- CurrentVersionChangedTime : routingConfig .GetCurrentVersionChangedTime (). AsTime ( ),
104
- RampingVersionChangedTime : routingConfig .GetRampingVersionChangedTime (). AsTime ( ),
105
- RampingVersionPercentageChangedTime : routingConfig .GetRampingVersionPercentageChangedTime (). AsTime ( ),
114
+ CurrentVersionChangedTime : safeAsTime ( routingConfig .GetCurrentVersionChangedTime ()),
115
+ RampingVersionChangedTime : safeAsTime ( routingConfig .GetRampingVersionChangedTime ()),
116
+ RampingVersionPercentageChangedTime : safeAsTime ( routingConfig .GetRampingVersionPercentageChangedTime ()),
106
117
}
107
118
}
108
119
109
120
func workerDeploymentListEntryFromProto (summary * workflowservice.ListWorkerDeploymentsResponse_WorkerDeploymentSummary ) * WorkerDeploymentListEntry {
110
121
return & WorkerDeploymentListEntry {
111
122
Name : summary .GetName (),
112
- CreateTime : summary .GetCreateTime (). AsTime ( ),
123
+ CreateTime : safeAsTime ( summary .GetCreateTime ()),
113
124
RoutingConfig : workerDeploymentRoutingConfigFromProto (summary .GetRoutingConfig ()),
114
125
}
115
126
}
@@ -119,7 +130,7 @@ func workerDeploymentVersionSummariesFromProto(summaries []*deployment.WorkerDep
119
130
for _ , summary := range summaries {
120
131
result = append (result , WorkerDeploymentVersionSummary {
121
132
Version : summary .GetVersion (),
122
- CreateTime : summary .CreateTime . AsTime ( ),
133
+ CreateTime : safeAsTime ( summary .CreateTime ),
123
134
DrainageStatus : WorkerDeploymentVersionDrainageStatus (summary .GetDrainageStatus ()),
124
135
})
125
136
}
@@ -133,7 +144,7 @@ func workerDeploymentInfoFromProto(info *deployment.WorkerDeploymentInfo) Worker
133
144
134
145
return WorkerDeploymentInfo {
135
146
Name : info .Name ,
136
- CreateTime : info .CreateTime . AsTime ( ),
147
+ CreateTime : safeAsTime ( info .CreateTime ),
137
148
VersionSummaries : workerDeploymentVersionSummariesFromProto (info .VersionSummaries ),
138
149
RoutingConfig : workerDeploymentRoutingConfigFromProto (info .RoutingConfig ),
139
150
LastModifierIdentity : info .LastModifierIdentity ,
@@ -296,8 +307,8 @@ func workerDeploymentDrainageInfoFromProto(drainageInfo *deployment.VersionDrain
296
307
}
297
308
return & WorkerDeploymentVersionDrainageInfo {
298
309
DrainageStatus : WorkerDeploymentVersionDrainageStatus (drainageInfo .Status ),
299
- LastChangedTime : drainageInfo .LastChangedTime . AsTime ( ),
300
- LastCheckedTime : drainageInfo .LastCheckedTime . AsTime ( ),
310
+ LastChangedTime : safeAsTime ( drainageInfo .LastChangedTime ),
311
+ LastCheckedTime : safeAsTime ( drainageInfo .LastCheckedTime ),
301
312
}
302
313
}
303
314
@@ -307,10 +318,10 @@ func workerDeploymentVersionInfoFromProto(info *deployment.WorkerDeploymentVersi
307
318
}
308
319
return WorkerDeploymentVersionInfo {
309
320
Version : info .Version ,
310
- CreateTime : info .CreateTime . AsTime ( ),
311
- RoutingChangedTime : info .RoutingChangedTime . AsTime ( ),
312
- CurrentSinceTime : info .CurrentSinceTime . AsTime ( ),
313
- RampingSinceTime : info .RampingSinceTime . AsTime ( ),
321
+ CreateTime : safeAsTime ( info .CreateTime ),
322
+ RoutingChangedTime : safeAsTime ( info .RoutingChangedTime ),
323
+ CurrentSinceTime : safeAsTime ( info .CurrentSinceTime ),
324
+ RampingSinceTime : safeAsTime ( info .RampingSinceTime ),
314
325
RampPercentage : info .RampPercentage ,
315
326
TaskQueuesInfos : workerDeploymentTaskQueuesInfosFromProto (info .TaskQueueInfos ),
316
327
DrainageInfo : workerDeploymentDrainageInfoFromProto (info .DrainageInfo ),
0 commit comments