Documentation ¶
Index ¶
- Constants
- Variables
- func AddConstraint(constraints *[]pd.LabelConstraint, label pd.LabelConstraint) error
- func ConstraintsFingerPrint(constraints *[]pd.LabelConstraint) string
- func GetRangeStartAndEndKeyHex(rangeBundleID string) (startKey string, endKey string)
- func GroupID(id int64) string
- func NewConstraint(label string) (pd.LabelConstraint, error)
- func NewConstraintDirect(key string, op pd.LabelConstraintOp, val ...string) pd.LabelConstraint
- func NewConstraints(labels []string) ([]pd.LabelConstraint, error)
- func NewConstraintsDirect(c ...pd.LabelConstraint) []pd.LabelConstraint
- func NewConstraintsFromYaml(c []byte) ([]pd.LabelConstraint, error)
- func NewRule(role pd.PeerRoleType, replicas uint64, cnst []pd.LabelConstraint) *pd.Rule
- func RestoreConstraint(c *pd.LabelConstraint) (string, error)
- func RestoreConstraints(constraints *[]pd.LabelConstraint) (string, error)
- type Bundle
- func NewBundle(id int64) *Bundle
- func NewBundleFromConstraintsOptions(options *model.PlacementSettings) (*Bundle, error)
- func NewBundleFromOptions(options *model.PlacementSettings) (bundle *Bundle, err error)
- func NewBundleFromSugarOptions(options *model.PlacementSettings) (*Bundle, error)
- func NewFullTableBundles(getter PolicyGetter, tbInfo *model.TableInfo) ([]*Bundle, error)
- func NewPartitionBundle(getter PolicyGetter, def model.PartitionDefinition) (*Bundle, error)
- func NewPartitionListBundles(getter PolicyGetter, defs []model.PartitionDefinition) ([]*Bundle, error)
- func NewTableBundle(getter PolicyGetter, tbInfo *model.TableInfo) (*Bundle, error)
- func (b *Bundle) Clone() *Bundle
- func (b *Bundle) GetLeaderDC(dcLabelKey string) (string, bool)
- func (b *Bundle) IsEmpty() bool
- func (b *Bundle) ObjectID() (int64, error)
- func (b *Bundle) RebuildForRange(rangeName string, policyName string) *Bundle
- func (b *Bundle) Reset(ruleIndex int, newIDs []int64) *Bundle
- func (b *Bundle) String() string
- func (b *Bundle) Tidy() error
- type ConstraintCompatibility
- type PolicyGetter
- type RuleBuilder
- func (b *RuleBuilder) BuildRules() ([]*pd.Rule, error)
- func (b *RuleBuilder) BuildRulesWithDictConstraintsOnly() ([]*pd.Rule, error)
- func (b *RuleBuilder) SetConstraintStr(constraintStr string) *RuleBuilder
- func (b *RuleBuilder) SetReplicasNum(num uint64) *RuleBuilder
- func (b *RuleBuilder) SetRole(role pd.PeerRoleType) *RuleBuilder
- func (b *RuleBuilder) SetSkipCheckReplicasConsistent(skip bool) *RuleBuilder
Constants ¶
const ( // TiFlashRuleGroupID is the rule group id of tiflash TiFlashRuleGroupID = "tiflash" // BundleIDPrefix is the bundle prefix of all rule bundles from TiDB_DDL statements. BundleIDPrefix = "TiDB_DDL_" // PDBundleID is the bundle name of pd, the default bundle for all regions. PDBundleID = "pd" // DefaultKwd is used to reset the default rule (remove bundle). DefaultKwd = "default" // TiDBBundleRangePrefixForGlobal is the bundle prefix of system global range. TiDBBundleRangePrefixForGlobal = "TiDB_GLOBAL" // TiDBBundleRangePrefixForMeta is the bundle prefix of system meta range. TiDBBundleRangePrefixForMeta = "TiDB_META" // KeyRangeGlobal is the key range for system global range. KeyRangeGlobal = "global" // KeyRangeMeta is the key range for system meta range. KeyRangeMeta = "meta" )
const ( // RuleIndexKeyRangeForGlobal is the index for a rule of whole system range. RuleIndexKeyRangeForGlobal = 20 // RuleIndexKeyRangeForMeta is the index for a rule of system meta range. RuleIndexKeyRangeForMeta = 21 // RuleIndexTable is the index for a rule of table. RuleIndexTable = 40 // RuleIndexPartition is the index for a rule of partition. RuleIndexPartition = 80 // RuleIndexTiFlash is the index for a rule of TiFlash. RuleIndexTiFlash = 120 )
const ( // DCLabelKey indicates the key of label which represents the dc for Store. // FIXME: currently we assumes "zone" is the dcLabel key in Store DCLabelKey = "zone" // EngineLabelKey is the label that indicates the backend of store instance: // tikv or tiflash. TiFlash instance will contain a label of 'engine: tiflash'. EngineLabelKey = "engine" // EngineLabelTiFlash is the label value, which a TiFlash instance will have with // a label key of EngineLabelKey. EngineLabelTiFlash = "tiflash" // EngineLabelTiKV is the label value used in some tests. And possibly TiKV will // set the engine label with a value of EngineLabelTiKV. EngineLabelTiKV = "tikv" // EngineLabelTiFlashCompute is for disaggregated tiflash mode, // it's the lable of tiflash_compute nodes. EngineLabelTiFlashCompute = "tiflash_compute" // EngineRoleLabelKey is the label that indicates if the TiFlash instance is a write node. EngineRoleLabelKey = "engine_role" // EngineRoleLabelWrite is for disaggregated tiflash write node. EngineRoleLabelWrite = "write" )
Variables ¶
var ( // ErrInvalidConstraintFormat is from constraint.go. ErrInvalidConstraintFormat = errors.New("label constraint should be in format '{+|-}key=value'") // ErrUnsupportedConstraint is from constraint.go. ErrUnsupportedConstraint = errors.New("unsupported label constraint") // ErrConflictingConstraints is from constraints.go. ErrConflictingConstraints = errors.New("conflicting label constraints") // ErrInvalidConstraintsMapcnt is from rule.go. ErrInvalidConstraintsMapcnt = errors.New("label constraints in map syntax have invalid replicas") // ErrInvalidConstraintsFormat is from rule.go. ErrInvalidConstraintsFormat = errors.New("invalid label constraints format") // ErrInvalidSurvivalPreferenceFormat is from rule.go. ErrInvalidSurvivalPreferenceFormat = errors.New("survival preference format should be in format [xxx=yyy, ...]") // ErrInvalidConstraintsReplicas is from rule.go. ErrInvalidConstraintsReplicas = errors.New("label constraints with invalid REPLICAS") // ErrInvalidBundleID is from bundle.go. ErrInvalidBundleID = errors.New("invalid bundle ID") // ErrInvalidBundleIDFormat is from bundle.go. ErrInvalidBundleIDFormat = errors.New("invalid bundle ID format") // ErrLeaderReplicasMustOne is from bundle.go. ErrLeaderReplicasMustOne = errors.New("REPLICAS must be 1 if ROLE=leader") // ErrMissingRoleField is from bundle.go. ErrMissingRoleField = errors.New("the ROLE field is not specified") // ErrNoRulesToDrop is from bundle.go. ErrNoRulesToDrop = errors.New("no rule of such role to drop") // ErrInvalidPlacementOptions is from bundle.go. ErrInvalidPlacementOptions = errors.New("invalid placement option") // ErrInvalidConstraintsMappingWrongSeparator is wrong separator in mapping. ErrInvalidConstraintsMappingWrongSeparator = errors.New("mappings use a colon and space (“: ”) to mark each key/value pair") // ErrInvalidConstraintsMappingNoColonFound is no colon found in mapping. ErrInvalidConstraintsMappingNoColonFound = errors.New("no colon found") )
Functions ¶
func AddConstraint ¶
func AddConstraint(constraints *[]pd.LabelConstraint, label pd.LabelConstraint) error
AddConstraint will add a new label constraint, with validation of all constraints. Note that Add does not validate one single constraint.
func ConstraintsFingerPrint ¶
func ConstraintsFingerPrint(constraints *[]pd.LabelConstraint) string
ConstraintsFingerPrint returns a unique string for the constraints.
func GetRangeStartAndEndKeyHex ¶
GetRangeStartAndEndKeyHex get startKeyHex and endKeyHex of range by rangeBundleID.
func GroupID ¶
GroupID accepts a tableID or whatever integer, and encode the integer into a valid GroupID for PD.
func NewConstraint ¶
func NewConstraint(label string) (pd.LabelConstraint, error)
NewConstraint will create a Constraint from a string.
func NewConstraintDirect ¶
func NewConstraintDirect(key string, op pd.LabelConstraintOp, val ...string) pd.LabelConstraint
NewConstraintDirect will create a Constraint from argument directly.
func NewConstraints ¶
func NewConstraints(labels []string) ([]pd.LabelConstraint, error)
NewConstraints will check each labels, and build the Constraints.
func NewConstraintsDirect ¶
func NewConstraintsDirect(c ...pd.LabelConstraint) []pd.LabelConstraint
NewConstraintsDirect is a helper for creating new constraints from individual constraint.
func NewConstraintsFromYaml ¶
func NewConstraintsFromYaml(c []byte) ([]pd.LabelConstraint, error)
NewConstraintsFromYaml will transform parse the raw 'array' constraints and call NewConstraints. Refer to https://github.com/pingcap/tidb/blob/master/docs/design/2020-06-24-placement-rules-in-sql.md.
func NewRule ¶
func NewRule(role pd.PeerRoleType, replicas uint64, cnst []pd.LabelConstraint) *pd.Rule
NewRule constructs *Rule from role, count, and constraints. It is here to consistent the behavior of creating new rules.
func RestoreConstraint ¶
func RestoreConstraint(c *pd.LabelConstraint) (string, error)
RestoreConstraint converts a Constraint to a string.
func RestoreConstraints ¶
func RestoreConstraints(constraints *[]pd.LabelConstraint) (string, error)
RestoreConstraints converts label constraints to a string.
Types ¶
type Bundle ¶
type Bundle pd.GroupBundle
Bundle is a group of all rules and configurations. It is used to support rule cache. Alias `pd.GroupBundle` is to wrap more methods.
func NewBundle ¶
NewBundle will create a bundle with the provided ID. Note that you should never pass negative id.
func NewBundleFromConstraintsOptions ¶
func NewBundleFromConstraintsOptions(options *model.PlacementSettings) (*Bundle, error)
NewBundleFromConstraintsOptions will transform constraints options into the bundle.
func NewBundleFromOptions ¶
func NewBundleFromOptions(options *model.PlacementSettings) (bundle *Bundle, err error)
NewBundleFromOptions will transform options into the bundle.
func NewBundleFromSugarOptions ¶
func NewBundleFromSugarOptions(options *model.PlacementSettings) (*Bundle, error)
NewBundleFromSugarOptions will transform syntax sugar options into the bundle.
func NewFullTableBundles ¶
func NewFullTableBundles(getter PolicyGetter, tbInfo *model.TableInfo) ([]*Bundle, error)
NewFullTableBundles returns a bundle list with both table bundle and partition bundles
func NewPartitionBundle ¶
func NewPartitionBundle(getter PolicyGetter, def model.PartitionDefinition) (*Bundle, error)
NewPartitionBundle creates a bundle for partition key range. It only contains the rules specified independently by the partition. That is to say the inherited rules from table is not included.
func NewPartitionListBundles ¶
func NewPartitionListBundles(getter PolicyGetter, defs []model.PartitionDefinition) ([]*Bundle, error)
NewPartitionListBundles creates a bundle list for a partition list
func NewTableBundle ¶
func NewTableBundle(getter PolicyGetter, tbInfo *model.TableInfo) (*Bundle, error)
NewTableBundle creates a bundle for table key range. If table is a partitioned table, it also contains the rules that inherited from table for every partition. The bundle does not contain the rules specified independently by each partition
func (*Bundle) GetLeaderDC ¶
GetLeaderDC returns the leader's DC by Bundle if found.
func (*Bundle) RebuildForRange ¶
RebuildForRange rebuilds the bundle for system range.
type ConstraintCompatibility ¶
type ConstraintCompatibility byte
ConstraintCompatibility is the return type of CompatibleWith.
const ( // ConstraintCompatible indicates two constraints are compatible. ConstraintCompatible ConstraintCompatibility = iota // ConstraintIncompatible indicates two constraints are incompatible. ConstraintIncompatible // ConstraintDuplicated indicates two constraints are duplicated. ConstraintDuplicated )
func ConstraintCompatibleWith ¶
func ConstraintCompatibleWith(c *pd.LabelConstraint, o *pd.LabelConstraint) ConstraintCompatibility
ConstraintCompatibleWith will check if two constraints are compatible. Return (compatible, duplicated).
type PolicyGetter ¶
type PolicyGetter interface {
GetPolicy(policyID int64) (*model.PolicyInfo, error)
}
PolicyGetter is the interface to get the policy
type RuleBuilder ¶
type RuleBuilder struct {
// contains filtered or unexported fields
}
RuleBuilder is used to build the Rules from a constraint string.
func (*RuleBuilder) BuildRules ¶
func (b *RuleBuilder) BuildRules() ([]*pd.Rule, error)
BuildRules constructs []*Rule from a yaml-compatible representation of 'array' or 'dict' constraints. Refer to https://github.com/pingcap/tidb/blob/master/docs/design/2020-06-24-placement-rules-in-sql.md.
func (*RuleBuilder) BuildRulesWithDictConstraintsOnly ¶
func (b *RuleBuilder) BuildRulesWithDictConstraintsOnly() ([]*pd.Rule, error)
BuildRulesWithDictConstraintsOnly constructs []*Rule from a yaml-compatible representation of 'dict' constraints.
func (*RuleBuilder) SetConstraintStr ¶
func (b *RuleBuilder) SetConstraintStr(constraintStr string) *RuleBuilder
SetConstraintStr sets the constraint string.
func (*RuleBuilder) SetReplicasNum ¶
func (b *RuleBuilder) SetReplicasNum(num uint64) *RuleBuilder
SetReplicasNum sets the replicas number in the rule.
func (*RuleBuilder) SetRole ¶
func (b *RuleBuilder) SetRole(role pd.PeerRoleType) *RuleBuilder
SetRole sets the role of the rule.
func (*RuleBuilder) SetSkipCheckReplicasConsistent ¶
func (b *RuleBuilder) SetSkipCheckReplicasConsistent(skip bool) *RuleBuilder
SetSkipCheckReplicasConsistent sets the skipCheckReplicasConsistent flag.