96 lines
2.7 KiB
Go
96 lines
2.7 KiB
Go
// Copyright 2022 PingCAP, Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package node
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/tikv/client-go/v2/oracle"
|
|
)
|
|
|
|
var (
|
|
// DefaultRootPath is the root path of the keys stored in etcd, the `v1` is the tidb-binlog's version.
|
|
DefaultRootPath = "/tidb-binlog/v1"
|
|
|
|
// PumpNode is the name of pump.
|
|
PumpNode = "pump"
|
|
|
|
// DrainerNode is the name of drainer.
|
|
DrainerNode = "drainer"
|
|
|
|
// NodePrefix is the map (node => it's prefix in storage)
|
|
NodePrefix = map[string]string{
|
|
PumpNode: "pumps",
|
|
DrainerNode: "drainers",
|
|
}
|
|
)
|
|
|
|
const (
|
|
// Online means the node can receive request.
|
|
Online = "online"
|
|
|
|
// Pausing means the node is pausing.
|
|
Pausing = "pausing"
|
|
|
|
// Paused means the node is already paused.
|
|
Paused = "paused"
|
|
|
|
// Closing means the node is closing, and the state will be Offline when closed.
|
|
Closing = "closing"
|
|
|
|
// Offline means the node is offline, and will not provide service.
|
|
Offline = "offline"
|
|
)
|
|
|
|
// Label is key/value pairs that are attached to objects
|
|
type Label struct {
|
|
Labels map[string]string `json:"labels"`
|
|
}
|
|
|
|
// Status describes the status information of a tidb-binlog node in etcd.
|
|
type Status struct {
|
|
// the id of node.
|
|
NodeID string `json:"nodeId"`
|
|
|
|
// the host of pump or node.
|
|
Addr string `json:"host"`
|
|
|
|
// the state of pump.
|
|
State string `json:"state"`
|
|
|
|
// the node is alive or not.
|
|
IsAlive bool `json:"isAlive"`
|
|
|
|
// the score of node, it is report by node, calculated by node's qps, disk usage and binlog's data size.
|
|
// if Score is less than 0, means this node is useless. Now only used for pump.
|
|
Score int64 `json:"score"`
|
|
|
|
// the label of this node. Now only used for pump.
|
|
// pump client will only send to a pump which label is matched.
|
|
Label *Label `json:"label"`
|
|
|
|
// for pump: max commit ts in pump
|
|
// for drainer: drainer has consume all binlog less than or equal MaxCommitTS
|
|
MaxCommitTS int64 `json:"maxCommitTS"`
|
|
|
|
// UpdateTS is the last update ts of node's status.
|
|
UpdateTS int64 `json:"updateTS"`
|
|
}
|
|
|
|
func (s *Status) String() string {
|
|
updateTime := oracle.GetTimeFromTS(uint64(s.UpdateTS))
|
|
return fmt.Sprintf("{NodeID: %s, Addr: %s, State: %s, MaxCommitTS: %d, UpdateTime: %v}", s.NodeID, s.Addr, s.State, s.MaxCommitTS, updateTime)
|
|
}
|