cubefs

Форк
0
/
nodeinfo.go 
93 строки · 2.3 Кб
1
package metanode
2

3
import (
4
	"sync/atomic"
5
	"time"
6

7
	"github.com/cubefs/cubefs/proto"
8
	"github.com/cubefs/cubefs/util/log"
9
)
10

11
const (
12
	UpdateNodeInfoTicket     = 1 * time.Minute
13
	DefaultDeleteBatchCounts = 128
14
)
15

16
type NodeInfo struct {
17
	deleteBatchCount uint64
18
}
19

20
var (
21
	nodeInfo                   = &NodeInfo{}
22
	nodeInfoStopC              = make(chan struct{}, 0)
23
	deleteWorkerSleepMs uint64 = 0
24
	dirChildrenNumLimit uint32 = proto.DefaultDirChildrenNumLimit
25
)
26

27
func DeleteBatchCount() uint64 {
28
	val := atomic.LoadUint64(&nodeInfo.deleteBatchCount)
29
	if val == 0 {
30
		val = DefaultDeleteBatchCounts
31
	}
32
	return val
33
}
34

35
func updateDeleteBatchCount(val uint64) {
36
	atomic.StoreUint64(&nodeInfo.deleteBatchCount, val)
37
}
38

39
func updateDeleteWorkerSleepMs(val uint64) {
40
	atomic.StoreUint64(&deleteWorkerSleepMs, val)
41
}
42

43
func updateDirChildrenNumLimit(val uint32) {
44
	atomic.StoreUint32(&dirChildrenNumLimit, val)
45
}
46

47
func DeleteWorkerSleepMs() {
48
	val := atomic.LoadUint64(&deleteWorkerSleepMs)
49
	if val > 0 {
50
		time.Sleep(time.Duration(val) * time.Millisecond)
51
	}
52
}
53

54
func (m *MetaNode) startUpdateNodeInfo() {
55
	ticker := time.NewTicker(UpdateNodeInfoTicket)
56
	defer ticker.Stop()
57
	for {
58
		select {
59
		case <-nodeInfoStopC:
60
			log.LogInfo("metanode nodeinfo gorutine stopped")
61
			return
62
		case <-ticker.C:
63
			m.updateNodeInfo()
64
			m.metadataManager.checkVolVerList()
65
		}
66
	}
67
}
68

69
func (m *MetaNode) stopUpdateNodeInfo() {
70
	nodeInfoStopC <- struct{}{}
71
}
72

73
func (m *MetaNode) updateNodeInfo() {
74
	// clusterInfo, err := getClusterInfo()
75
	clusterInfo, err := masterClient.AdminAPI().GetClusterInfo()
76
	if err != nil {
77
		log.LogErrorf("[updateNodeInfo] %s", err.Error())
78
		return
79
	}
80
	updateDeleteBatchCount(clusterInfo.MetaNodeDeleteBatchCount)
81
	updateDeleteWorkerSleepMs(clusterInfo.MetaNodeDeleteWorkerSleepMs)
82

83
	if clusterInfo.DirChildrenNumLimit < proto.MinDirChildrenNumLimit {
84
		log.LogWarnf("updateNodeInfo: DirChildrenNumLimit probably not enabled on master, set to default value(%v)",
85
			proto.DefaultDirChildrenNumLimit)
86
		atomic.StoreUint32(&dirChildrenNumLimit, proto.DefaultDirChildrenNumLimit)
87
	} else {
88
		atomic.StoreUint32(&dirChildrenNumLimit, clusterInfo.DirChildrenNumLimit)
89
		log.LogInfof("updateNodeInfo: DirChildrenNumLimit(%v)", clusterInfo.DirChildrenNumLimit)
90
	}
91

92
	// updateDirChildrenNumLimit(clusterInfo.DirChildrenNumLimit)
93
}
94

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.