-
Notifications
You must be signed in to change notification settings - Fork 1
/
doc_test.go
104 lines (70 loc) · 2.11 KB
/
doc_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package dynalock_test
import (
"context"
"errors"
"fmt"
"log"
"time"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/dynamodb"
"github.com/wolfeidau/dynalock"
)
func ExampleDynalock_NewLock() {
sess := session.Must(session.NewSession())
dbSvc := dynamodb.New(sess)
dl := dynalock.New(dbSvc, "testing-locks", "agent")
lock, _ := dl.NewLock(
"agents/123",
dynalock.LockWithTTL(2*time.Second),
dynalock.LockWithBytes([]byte(`{"agent": "testing"}`)),
)
lock.Lock(nil)
defer lock.Unlock()
}
func ExampleDynalock_LockWithContext() {
sess := session.Must(session.NewSession())
dbSvc := dynamodb.New(sess)
dl := dynalock.New(dbSvc, "testing-locks", "agent")
lock, _ := dl.NewLock(
"agents/123",
dynalock.LockWithTTL(2*time.Second),
dynalock.LockWithBytes([]byte(`{"agent": "testing"}`)),
)
// set up a context which will timeout after 5 seconds waiting for a lock
ctx, cancel := context.WithTimeout(context.TODO(), 5*time.Second)
defer cancel()
// this will block for up to 5 seconds
_, err := lock.LockWithContext(ctx)
if err != nil {
if errors.Is(err, dynalock.ErrLockAcquireCancelled) {
// handle the timeout of the context here
log.Println("waiting for lock expired after timeout")
return // we didn't get a lock so skip the unlock defer
}
// normal error here
log.Fatalf("locking error: %v", err)
return // we didn't get a lock so skip the unlock defer
}
defer lock.Unlock()
}
func ExampleDynalock_Put() {
sess := session.Must(session.NewSession())
dbSvc := dynamodb.New(sess)
dl := dynalock.New(dbSvc, "testing-locks", "agent")
message := struct{ Message string }{Message: "hello"}
attrVal, _ := dynalock.MarshalStruct(&message)
dl.Put(
"agents/123",
dynalock.WriteWithAttributeValue(attrVal),
)
}
func ExampleDynalock_Get() {
type message struct{ Message string }
sess := session.Must(session.NewSession())
dbSvc := dynamodb.New(sess)
dl := dynalock.New(dbSvc, "testing-locks", "agent")
kv, _ := dl.Get("agents/123")
msg := &message{}
dynalock.UnmarshalStruct(kv.AttributeValue(), msg)
fmt.Println("Message:", msg.Message)
}