Skip to content

Commit

Permalink
[parser] model: move placement policy definition into 2 parser (pingc…
Browse files Browse the repository at this point in the history
  • Loading branch information
AilinKid authored and ti-chi-bot committed Oct 9, 2021
1 parent 6fe3824 commit d3cff95
Showing 1 changed file with 89 additions and 0 deletions.
89 changes: 89 additions & 0 deletions parser/model/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ package model

import (
"encoding/json"
"fmt"
"strconv"
"strings"
"time"
Expand Down Expand Up @@ -337,6 +338,9 @@ type TableInfo struct {
IsColumnar bool `json:"is_columnar"`

TempTableType `json:"temp_table_type"`

PlacementPolicyRef *PolicyRefInfo `json:"policy_ref_info"`
DirectPlacementOpts *PlacementSettings `json:"placement_settings"`
}

type TempTableType byte
Expand Down Expand Up @@ -1106,3 +1110,88 @@ type TableColumnID struct {
TableID int64
ColumnID int64
}

// PolicyRefInfo is the struct to refer the placement policy.
type PolicyRefInfo struct {
ID int64 `json:"id"`
Name CIStr `json:"name"`
}

// PlacementSettings is the settings of the placement
type PlacementSettings struct {
PrimaryRegion string `json:"primary_region"`
Regions string `json:"regions"`
Learners uint64 `json:"learners"`
Followers uint64 `json:"followers"`
Voters uint64 `json:"voters"`
Schedule string `json:"schedule"`
Constraints string `json:"constraints"`
LeaderConstraints string `json:"leader_constraints"`
LearnerConstraints string `json:"learner_constraints"`
FollowerConstraints string `json:"follower_constraints"`
VoterConstraints string `json:"voter_constraints"`
}

// PolicyInfo is the struct to store the placement policy.
type PolicyInfo struct {
*PlacementSettings
ID int64 `json:"id"`
Name CIStr `json:"name"`
State SchemaState `json:"state"`
}

func writeSettingItemToBuilder(sb *strings.Builder, item string) {
if sb.Len() != 0 {
sb.WriteString(" ")
}
sb.WriteString(item)
}

func (p *PlacementSettings) String() string {
sb := new(strings.Builder)
if len(p.PrimaryRegion) > 0 {
writeSettingItemToBuilder(sb, fmt.Sprintf("PRIMARY_REGION=\"%s\"", p.PrimaryRegion))
}

if len(p.Regions) > 0 {
writeSettingItemToBuilder(sb, fmt.Sprintf("REGIONS=\"%s\"", p.Regions))
}

if len(p.Schedule) > 0 {
writeSettingItemToBuilder(sb, fmt.Sprintf("SCHEDULE=\"%s\"", p.Schedule))
}

if len(p.Constraints) > 0 {
writeSettingItemToBuilder(sb, fmt.Sprintf("CONSTRAINTS=\"%s\"", p.Constraints))
}

if len(p.LeaderConstraints) > 0 {
writeSettingItemToBuilder(sb, fmt.Sprintf("LEADER_CONSTRAINTS=\"%s\"", p.LeaderConstraints))
}

if p.Voters > 0 {
writeSettingItemToBuilder(sb, fmt.Sprintf("VOTERS=%d", p.Voters))
}

if len(p.VoterConstraints) > 0 {
writeSettingItemToBuilder(sb, fmt.Sprintf("VOTER_CONSTRAINTS=\"%s\"", p.VoterConstraints))
}

if p.Followers > 0 {
writeSettingItemToBuilder(sb, fmt.Sprintf("FOLLOWERS=%d", p.Followers))
}

if len(p.FollowerConstraints) > 0 {
writeSettingItemToBuilder(sb, fmt.Sprintf("FOLLOWER_CONSTRAINTS=\"%s\"", p.FollowerConstraints))
}

if p.Learners > 0 {
writeSettingItemToBuilder(sb, fmt.Sprintf("LEARNERS=%d", p.Learners))
}

if len(p.LearnerConstraints) > 0 {
writeSettingItemToBuilder(sb, fmt.Sprintf("LEARNER_CONSTRAINTS=\"%s\"", p.LearnerConstraints))
}

return sb.String()
}

0 comments on commit d3cff95

Please sign in to comment.