Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
084424d6
M
milvus
项目概览
milvus
/
milvus
12 个月 前同步成功
通知
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,发现更多精彩内容 >>
未验证
提交
084424d6
编写于
5月 11, 2023
作者:
C
congqixia
提交者:
GitHub
5月 11, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make data node start only once (#24031)
Signed-off-by:
N
Congqi Xia
<
congqi.xia@zilliz.com
>
上级
67cf23d0
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
48 addition
and
39 deletion
+48
-39
internal/datanode/data_node.go
internal/datanode/data_node.go
+48
-39
未找到文件。
internal/datanode/data_node.go
浏览文件 @
084424d6
...
...
@@ -116,6 +116,7 @@ type DataNode struct {
//call once
initOnce
sync
.
Once
startOnce
sync
.
Once
sessionMu
sync
.
Mutex
// to fix data race
session
*
sessionutil
.
Session
watchKv
kv
.
MetaKv
...
...
@@ -485,54 +486,62 @@ func (node *DataNode) BackGroundGC(vChannelCh <-chan string) {
// Start will update DataNode state to HEALTHY
func
(
node
*
DataNode
)
Start
()
error
{
if
err
:=
node
.
allocator
.
Start
();
err
!=
nil
{
log
.
Error
(
"failed to start id allocator"
,
zap
.
Error
(
err
),
zap
.
String
(
"role"
,
typeutil
.
DataNodeRole
))
return
err
}
log
.
Info
(
"start id allocator done"
,
zap
.
String
(
"role"
,
typeutil
.
DataNodeRole
))
rep
,
err
:=
node
.
rootCoord
.
AllocTimestamp
(
node
.
ctx
,
&
rootcoordpb
.
AllocTimestampRequest
{
Base
:
commonpbutil
.
NewMsgBase
(
commonpbutil
.
WithMsgType
(
commonpb
.
MsgType_RequestTSO
),
commonpbutil
.
WithMsgID
(
0
),
commonpbutil
.
WithSourceID
(
paramtable
.
GetNodeID
()),
),
Count
:
1
,
})
if
err
!=
nil
||
rep
.
Status
.
ErrorCode
!=
commonpb
.
ErrorCode_Success
{
log
.
Warn
(
"fail to alloc timestamp"
,
zap
.
Any
(
"rep"
,
rep
),
zap
.
Error
(
err
))
return
errors
.
New
(
"DataNode fail to alloc timestamp"
)
}
var
startErr
error
node
.
startOnce
.
Do
(
func
()
{
if
err
:=
node
.
allocator
.
Start
();
err
!=
nil
{
log
.
Error
(
"failed to start id allocator"
,
zap
.
Error
(
err
),
zap
.
String
(
"role"
,
typeutil
.
DataNodeRole
))
startErr
=
err
return
}
log
.
Info
(
"start id allocator done"
,
zap
.
String
(
"role"
,
typeutil
.
DataNodeRole
))
rep
,
err
:=
node
.
rootCoord
.
AllocTimestamp
(
node
.
ctx
,
&
rootcoordpb
.
AllocTimestampRequest
{
Base
:
commonpbutil
.
NewMsgBase
(
commonpbutil
.
WithMsgType
(
commonpb
.
MsgType_RequestTSO
),
commonpbutil
.
WithMsgID
(
0
),
commonpbutil
.
WithSourceID
(
paramtable
.
GetNodeID
()),
),
Count
:
1
,
})
if
err
!=
nil
||
rep
.
Status
.
ErrorCode
!=
commonpb
.
ErrorCode_Success
{
log
.
Warn
(
"fail to alloc timestamp"
,
zap
.
Any
(
"rep"
,
rep
),
zap
.
Error
(
err
))
startErr
=
errors
.
New
(
"DataNode fail to alloc timestamp"
)
return
}
connectEtcdFn
:=
func
()
error
{
etcdKV
:=
etcdkv
.
NewEtcdKV
(
node
.
etcdCli
,
Params
.
EtcdCfg
.
MetaRootPath
.
GetValue
())
node
.
watchKv
=
etcdKV
return
nil
}
err
=
retry
.
Do
(
node
.
ctx
,
connectEtcdFn
,
retry
.
Attempts
(
ConnectEtcdMaxRetryTime
))
if
err
!=
nil
{
return
errors
.
New
(
"DataNode fail to connect etcd"
)
}
connectEtcdFn
:=
func
()
error
{
etcdKV
:=
etcdkv
.
NewEtcdKV
(
node
.
etcdCli
,
Params
.
EtcdCfg
.
MetaRootPath
.
GetValue
())
node
.
watchKv
=
etcdKV
return
nil
}
err
=
retry
.
Do
(
node
.
ctx
,
connectEtcdFn
,
retry
.
Attempts
(
ConnectEtcdMaxRetryTime
))
if
err
!=
nil
{
startErr
=
errors
.
New
(
"DataNode fail to connect etcd"
)
return
}
chunkManager
,
err
:=
node
.
factory
.
NewPersistentStorageChunkManager
(
node
.
ctx
)
chunkManager
,
err
:=
node
.
factory
.
NewPersistentStorageChunkManager
(
node
.
ctx
)
if
err
!=
nil
{
return
err
}
if
err
!=
nil
{
startErr
=
err
return
}
node
.
chunkManager
=
chunkManager
node
.
chunkManager
=
chunkManager
go
node
.
BackGroundGC
(
node
.
clearSignal
)
go
node
.
BackGroundGC
(
node
.
clearSignal
)
go
node
.
compactionExecutor
.
start
(
node
.
ctx
)
go
node
.
compactionExecutor
.
start
(
node
.
ctx
)
// Start node watch node
go
node
.
StartWatchChannels
(
node
.
ctx
)
// Start node watch node
go
node
.
StartWatchChannels
(
node
.
ctx
)
go
node
.
flowgraphManager
.
start
()
go
node
.
flowgraphManager
.
start
()
node
.
UpdateStateCode
(
commonpb
.
StateCode_Healthy
)
return
nil
node
.
UpdateStateCode
(
commonpb
.
StateCode_Healthy
)
})
return
startErr
}
// UpdateStateCode updates datanode's state code
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录