Skip to content

Commit 5886638

Browse files
committed

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

polycode/client.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,15 @@ type IncrementCounterRequest struct {
232232
TTL int64 `json:"TTL"`
233233
}
234234

235+
type AcquireLockRequest struct {
236+
Key string `json:"key"`
237+
TTL int64 `json:"TTL"`
238+
}
239+
240+
type ReleaseLockRequest struct {
241+
Key string `json:"key"`
242+
}
243+
235244
type IncrementCounterResponse struct {
236245
Value uint64 `json:"value"`
237246
Incremented bool `json:"incremented"`
@@ -420,6 +429,14 @@ func (sc *ServiceClient) EmitRealtimeEvent(sessionId string, req RealtimeEventEm
420429
return executeApiWithoutResponse(sc.httpClient, sc.baseURL, sessionId, "v1/realtime/event/emit", req)
421430
}
422431

432+
func (sc *ServiceClient) AcquireLock(sessionId string, req AcquireLockRequest) error {
433+
return executeApiWithoutResponse(sc.httpClient, sc.baseURL, sessionId, "v1/context/lock/acquire", req)
434+
}
435+
436+
func (sc *ServiceClient) ReleaseLock(sessionId string, req ReleaseLockRequest) error {
437+
return executeApiWithoutResponse(sc.httpClient, sc.baseURL, sessionId, "v1/context/lock/release", req)
438+
}
439+
423440
func (sc *ServiceClient) IncrementCounter(sessionId string, req IncrementCounterRequest) (IncrementCounterResponse, error) {
424441
var res IncrementCounterResponse
425442
err := executeApiWithResponse(sc.httpClient, sc.baseURL, sessionId, "v1/utils/counter/increment", req, &res)

polycode/context.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ type WorkflowContext interface {
3838
Memo(getter func() (any, error)) Response
3939
Signal(signalName string) Signal
4040
ClientChannel(channelName string) ClientChannel
41+
Lock(key string) Lock
4142
}
4243

4344
type ApiContext interface {
@@ -178,6 +179,14 @@ func (s ContextImpl) ClientChannel(channelName string) ClientChannel {
178179
}
179180
}
180181

182+
func (s ContextImpl) Lock(key string) Lock {
183+
return Lock{
184+
client: s.serviceClient,
185+
sessionId: s.sessionId,
186+
key: key,
187+
}
188+
}
189+
181190
func (s ContextImpl) Counter(group string, name string, ttl int64) Counter {
182191
return Counter{
183192
client: s.serviceClient,

polycode/lock.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package polycode
2+
3+
import "time"
4+
5+
type Lock struct {
6+
client *ServiceClient
7+
sessionId string
8+
key string
9+
}
10+
11+
func (l *Lock) Acquire(expireIn time.Duration) error {
12+
ttl := time.Now().Unix() + int64(expireIn.Seconds())
13+
14+
req := AcquireLockRequest{
15+
Key: l.key,
16+
TTL: ttl,
17+
}
18+
19+
return l.client.AcquireLock(l.sessionId, req)
20+
}
21+
22+
func (l *Lock) Release() error {
23+
req := ReleaseLockRequest{
24+
Key: l.key,
25+
}
26+
27+
return l.client.ReleaseLock(l.sessionId, req)
28+
}

0 commit comments

Comments
 (0)