2020-10-29 01:31:08 +00:00
|
|
|
package tsoutil
|
|
|
|
|
|
|
|
import (
|
2020-11-12 03:18:23 +00:00
|
|
|
"path"
|
2020-10-29 01:31:08 +00:00
|
|
|
"time"
|
2020-11-12 03:18:23 +00:00
|
|
|
|
2020-12-07 06:37:42 +00:00
|
|
|
"github.com/zilliztech/milvus-distributed/internal/kv"
|
2020-11-12 03:18:23 +00:00
|
|
|
"go.etcd.io/etcd/clientv3"
|
2020-10-29 01:31:08 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
physicalShiftBits = 18
|
|
|
|
logicalBits = (1 << physicalShiftBits) - 1
|
|
|
|
)
|
|
|
|
|
2020-11-03 06:53:36 +00:00
|
|
|
func ComposeTS(physical, logical int64) uint64 {
|
2020-10-30 08:27:58 +00:00
|
|
|
return uint64((physical << physicalShiftBits) + logical)
|
|
|
|
}
|
|
|
|
|
2020-10-29 01:31:08 +00:00
|
|
|
// ParseTS parses the ts to (physical,logical).
|
|
|
|
func ParseTS(ts uint64) (time.Time, uint64) {
|
|
|
|
logical := ts & logicalBits
|
|
|
|
physical := ts >> physicalShiftBits
|
|
|
|
physicalTime := time.Unix(int64(physical/1000), int64(physical)%1000*time.Millisecond.Nanoseconds())
|
|
|
|
return physicalTime, logical
|
|
|
|
}
|
2020-11-12 03:18:23 +00:00
|
|
|
|
2020-12-07 06:37:42 +00:00
|
|
|
func NewTSOKVBase(etcdAddr []string, tsoRoot, subPath string) *kv.EtcdKV {
|
2020-11-12 03:18:23 +00:00
|
|
|
client, _ := clientv3.New(clientv3.Config{
|
2020-11-16 09:01:10 +00:00
|
|
|
Endpoints: etcdAddr,
|
2020-11-12 03:18:23 +00:00
|
|
|
DialTimeout: 5 * time.Second,
|
|
|
|
})
|
2020-12-07 06:37:42 +00:00
|
|
|
return kv.NewEtcdKV(client, path.Join(tsoRoot, subPath))
|
2020-11-12 03:18:23 +00:00
|
|
|
}
|