Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
a5c3f4ee
M
milvus
项目概览
milvus
/
milvus
11 个月 前同步成功
通知
261
Star
22476
Fork
2472
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
milvus
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
a5c3f4ee
编写于
3月 07, 2022
作者:
C
congqixia
提交者:
GitHub
3月 07, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add CompareFailErr for CAS operation error check (#15893)
Signed-off-by:
N
Congqi Xia
<
congqi.xia@zilliz.com
>
上级
d199d00f
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
44 addition
and
10 deletion
+44
-10
internal/kv/etcd/embed_etcd_kv.go
internal/kv/etcd/embed_etcd_kv.go
+5
-4
internal/kv/etcd/embed_etcd_kv_test.go
internal/kv/etcd/embed_etcd_kv_test.go
+9
-0
internal/kv/etcd/etcd_kv.go
internal/kv/etcd/etcd_kv.go
+7
-6
internal/kv/etcd/etcd_kv_test.go
internal/kv/etcd/etcd_kv_test.go
+8
-0
internal/kv/kv.go
internal/kv/kv.go
+15
-0
未找到文件。
internal/kv/etcd/embed_etcd_kv.go
浏览文件 @
a5c3f4ee
...
...
@@ -30,6 +30,7 @@ import (
"go.uber.org/zap"
"github.com/milvus-io/milvus/internal/kv"
kvi
"github.com/milvus-io/milvus/internal/kv"
"github.com/milvus-io/milvus/internal/log"
)
...
...
@@ -549,7 +550,7 @@ func (kv *EmbedEtcdKV) CompareValueAndSwap(key, value, target string, opts ...cl
return
err
}
if
!
resp
.
Succeeded
{
return
fmt
.
Errorf
(
"function CompareValueAndSwap error for compare is false for key: %s"
,
key
)
return
kvi
.
NewCompareFailedError
(
fmt
.
Errorf
(
"function CompareValueAndSwap error for compare is false for key: %s"
,
key
)
)
}
return
nil
...
...
@@ -570,7 +571,7 @@ func (kv *EmbedEtcdKV) CompareValueAndSwapBytes(key string, value, target []byte
return
err
}
if
!
resp
.
Succeeded
{
return
fmt
.
Errorf
(
"function CompareValueAndSwapBytes error for compare is false for key: %s"
,
key
)
return
kvi
.
NewCompareFailedError
(
fmt
.
Errorf
(
"function CompareValueAndSwapBytes error for compare is false for key: %s"
,
key
)
)
}
return
nil
...
...
@@ -591,7 +592,7 @@ func (kv *EmbedEtcdKV) CompareVersionAndSwap(key string, version int64, target s
return
err
}
if
!
resp
.
Succeeded
{
return
fmt
.
Errorf
(
"function CompareAndSwap error for compare is false for key: %s"
,
key
)
return
kvi
.
NewCompareFailedError
(
fmt
.
Errorf
(
"function CompareAndSwap error for compare is false for key: %s"
,
key
)
)
}
return
nil
...
...
@@ -612,7 +613,7 @@ func (kv *EmbedEtcdKV) CompareVersionAndSwapBytes(key string, version int64, tar
return
err
}
if
!
resp
.
Succeeded
{
return
fmt
.
Errorf
(
"function CompareVersionAndSwapBytes error for compare is false for key: %s"
,
key
)
return
kvi
.
NewCompareFailedError
(
fmt
.
Errorf
(
"function CompareVersionAndSwapBytes error for compare is false for key: %s"
,
key
)
)
}
return
nil
...
...
internal/kv/etcd/embed_etcd_kv_test.go
浏览文件 @
a5c3f4ee
...
...
@@ -17,9 +17,11 @@
package
etcdkv_test
import
(
"errors"
"os"
"testing"
"github.com/milvus-io/milvus/internal/kv"
"github.com/milvus-io/milvus/internal/util/metricsinfo"
embed_etcd_kv
"github.com/milvus-io/milvus/internal/kv/etcd"
...
...
@@ -800,6 +802,7 @@ func TestEmbedEtcd(te *testing.T) {
assert
.
Equal
(
t
,
revision
+
1
,
resp
.
Header
.
Revision
)
}
var
compareErr
*
kv
.
CompareFailedError
err
=
metaKv
.
CompareVersionAndSwap
(
"a/b/c"
,
0
,
"1"
)
assert
.
NoError
(
t
,
err
)
...
...
@@ -809,12 +812,14 @@ func TestEmbedEtcd(te *testing.T) {
err
=
metaKv
.
CompareVersionAndSwap
(
"a/b/c"
,
0
,
"1"
)
assert
.
Error
(
t
,
err
)
assert
.
True
(
t
,
errors
.
As
(
err
,
&
compareErr
))
err
=
metaKv
.
CompareValueAndSwap
(
"a/b/c"
,
"1"
,
"2"
)
assert
.
NoError
(
t
,
err
)
err
=
metaKv
.
CompareValueAndSwap
(
"a/b/c"
,
"1"
,
"2"
)
assert
.
Error
(
t
,
err
)
assert
.
True
(
t
,
errors
.
As
(
err
,
&
compareErr
))
})
te
.
Run
(
"Etcd Revision Bytes"
,
func
(
t
*
testing
.
T
)
{
...
...
@@ -852,6 +857,7 @@ func TestEmbedEtcd(te *testing.T) {
assert
.
Equal
(
t
,
revision
+
1
,
resp
.
Header
.
Revision
)
}
var
compareErr
*
kv
.
CompareFailedError
err
=
metaKv
.
CompareVersionAndSwapBytes
(
"a/b/c"
,
0
,
[]
byte
(
"1"
))
assert
.
NoError
(
t
,
err
)
...
...
@@ -861,12 +867,15 @@ func TestEmbedEtcd(te *testing.T) {
err
=
metaKv
.
CompareVersionAndSwapBytes
(
"a/b/c"
,
0
,
[]
byte
(
"1"
))
assert
.
Error
(
t
,
err
)
assert
.
True
(
t
,
errors
.
As
(
err
,
&
compareErr
))
err
=
metaKv
.
CompareValueAndSwapBytes
(
"a/b/c"
,
[]
byte
(
"1"
),
[]
byte
(
"2"
))
assert
.
NoError
(
t
,
err
)
err
=
metaKv
.
CompareValueAndSwapBytes
(
"a/b/c"
,
[]
byte
(
"1"
),
[]
byte
(
"2"
))
assert
.
Error
(
t
,
err
)
assert
.
True
(
t
,
errors
.
As
(
err
,
&
compareErr
))
})
te
.
Run
(
"Etcd Lease"
,
func
(
t
*
testing
.
T
)
{
...
...
internal/kv/etcd/etcd_kv.go
浏览文件 @
a5c3f4ee
...
...
@@ -22,6 +22,7 @@ import (
"path"
"time"
kvi
"github.com/milvus-io/milvus/internal/kv"
"github.com/milvus-io/milvus/internal/log"
clientv3
"go.etcd.io/etcd/client/v3"
...
...
@@ -567,7 +568,7 @@ func (kv *EtcdKV) CompareValueAndSwap(key, value, target string, opts ...clientv
return
err
}
if
!
resp
.
Succeeded
{
return
fmt
.
Errorf
(
"function CompareAndSwap error for compare is false for key: %s"
,
key
)
return
kvi
.
NewCompareFailedError
(
fmt
.
Errorf
(
"function CompareAndSwap error for compare is false for key: %s"
,
key
)
)
}
CheckElapseAndWarn
(
start
,
"Slow etcd operation compare value and swap"
)
return
nil
...
...
@@ -589,7 +590,7 @@ func (kv *EtcdKV) CompareValueAndSwapBytes(key string, value, target []byte, opt
return
err
}
if
!
resp
.
Succeeded
{
return
fmt
.
Errorf
(
"function CompareAndSwap error for compare is false for key: %s"
,
key
)
return
kvi
.
NewCompareFailedError
(
fmt
.
Errorf
(
"function CompareAndSwap error for compare is false for key: %s"
,
key
)
)
}
CheckElapseAndWarn
(
start
,
"Slow etcd operation compare value and swap"
)
return
nil
...
...
@@ -611,8 +612,8 @@ func (kv *EtcdKV) CompareVersionAndSwap(key string, source int64, target string,
return
err
}
if
!
resp
.
Succeeded
{
return
fmt
.
Errorf
(
"function CompareAndSwap error for compare is false for key: %s,"
+
" source version: %d, target version: %s"
,
key
,
source
,
target
)
return
kvi
.
NewCompareFailedError
(
fmt
.
Errorf
(
"function CompareAndSwap error for compare is false for key: %s,"
+
" source version: %d, target version: %s"
,
key
,
source
,
target
)
)
}
CheckElapseAndWarn
(
start
,
"Slow etcd operation compare version and swap"
)
return
nil
...
...
@@ -634,8 +635,8 @@ func (kv *EtcdKV) CompareVersionAndSwapBytes(key string, source int64, target []
return
err
}
if
!
resp
.
Succeeded
{
return
fmt
.
Errorf
(
"function CompareAndSwap error for compare is false for key: %s,"
+
" source version: %d, target version: %s"
,
key
,
source
,
target
)
return
kvi
.
NewCompareFailedError
(
fmt
.
Errorf
(
"function CompareAndSwap error for compare is false for key: %s,"
+
" source version: %d, target version: %s"
,
key
,
source
,
target
)
)
}
CheckElapseAndWarn
(
start
,
"Slow etcd operation compare version and swap"
)
return
nil
...
...
internal/kv/etcd/etcd_kv_test.go
浏览文件 @
a5c3f4ee
...
...
@@ -17,10 +17,12 @@
package
etcdkv_test
import
(
"errors"
"os"
"testing"
"time"
"github.com/milvus-io/milvus/internal/kv"
etcdkv
"github.com/milvus-io/milvus/internal/kv/etcd"
"github.com/milvus-io/milvus/internal/util/etcd"
"github.com/milvus-io/milvus/internal/util/paramtable"
...
...
@@ -723,6 +725,7 @@ func TestEtcdKV_Load(te *testing.T) {
assert
.
Equal
(
t
,
revision
+
1
,
resp
.
Header
.
Revision
)
}
var
compareErr
*
kv
.
CompareFailedError
err
=
etcdKV
.
CompareVersionAndSwap
(
"a/b/c"
,
0
,
"1"
)
assert
.
NoError
(
t
,
err
)
...
...
@@ -732,12 +735,14 @@ func TestEtcdKV_Load(te *testing.T) {
err
=
etcdKV
.
CompareVersionAndSwap
(
"a/b/c"
,
0
,
"1"
)
assert
.
Error
(
t
,
err
)
assert
.
True
(
t
,
errors
.
As
(
err
,
&
compareErr
))
err
=
etcdKV
.
CompareValueAndSwap
(
"a/b/c"
,
"1"
,
"2"
)
assert
.
NoError
(
t
,
err
)
err
=
etcdKV
.
CompareValueAndSwap
(
"a/b/c"
,
"1"
,
"2"
)
assert
.
Error
(
t
,
err
)
assert
.
True
(
t
,
errors
.
As
(
err
,
&
compareErr
))
})
te
.
Run
(
"Etcd Revision Bytes"
,
func
(
t
*
testing
.
T
)
{
...
...
@@ -772,6 +777,7 @@ func TestEtcdKV_Load(te *testing.T) {
assert
.
Equal
(
t
,
revision
+
1
,
resp
.
Header
.
Revision
)
}
var
compareErr
*
kv
.
CompareFailedError
err
=
etcdKV
.
CompareVersionAndSwapBytes
(
"a/b/c"
,
0
,
[]
byte
(
"1"
))
assert
.
NoError
(
t
,
err
)
...
...
@@ -781,12 +787,14 @@ func TestEtcdKV_Load(te *testing.T) {
err
=
etcdKV
.
CompareVersionAndSwapBytes
(
"a/b/c"
,
0
,
[]
byte
(
"1"
))
assert
.
Error
(
t
,
err
)
assert
.
True
(
t
,
errors
.
As
(
err
,
&
compareErr
))
err
=
etcdKV
.
CompareValueAndSwapBytes
(
"a/b/c"
,
[]
byte
(
"1"
),
[]
byte
(
"2"
))
assert
.
NoError
(
t
,
err
)
err
=
etcdKV
.
CompareValueAndSwapBytes
(
"a/b/c"
,
[]
byte
(
"1"
),
[]
byte
(
"2"
))
assert
.
Error
(
t
,
err
)
assert
.
True
(
t
,
errors
.
As
(
err
,
&
compareErr
))
})
te
.
Run
(
"Etcd Lease"
,
func
(
t
*
testing
.
T
)
{
...
...
internal/kv/kv.go
浏览文件 @
a5c3f4ee
...
...
@@ -21,6 +21,21 @@ import (
clientv3
"go.etcd.io/etcd/client/v3"
)
// CompareFailedError is a helper type for checking MetaKv CompareAndSwap series func error type
type
CompareFailedError
struct
{
internalError
error
}
// Error implements error interface
func
(
e
*
CompareFailedError
)
Error
()
string
{
return
e
.
internalError
.
Error
()
}
// NewCompareFailedError wraps error into NewCompareFailedError
func
NewCompareFailedError
(
err
error
)
error
{
return
&
CompareFailedError
{
internalError
:
err
}
}
// BaseKV contains base operations of kv. Include save, load and remove.
type
BaseKV
interface
{
Load
(
key
string
)
(
string
,
error
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录