29 lines
528 B
Go
29 lines
528 B
Go
package common
|
|
|
|
import (
|
|
"common/db/etcd"
|
|
"common/log"
|
|
"context"
|
|
clientv3 "go.etcd.io/etcd/client/v3"
|
|
)
|
|
|
|
func NewLeaseAndKeepAlive(ttl int64) (clientv3.LeaseID, error) {
|
|
lease, err := etcd.Client().Grant(context.Background(), ttl)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
chKeepAlive, err := etcd.Client().KeepAlive(context.Background(), lease.ID)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
go func() {
|
|
for r := range chKeepAlive {
|
|
if r == nil {
|
|
log.Errorf("lease timeout!")
|
|
return
|
|
}
|
|
}
|
|
}()
|
|
return lease.ID, nil
|
|
}
|