github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/lorry/engines/base.go (about) 1 /* 2 Copyright (C) 2022-2023 ApeCloud Co., Ltd 3 4 This file is part of KubeBlocks project 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU Affero General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU Affero General Public License for more details. 15 16 You should have received a copy of the GNU Affero General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package engines 21 22 import ( 23 "context" 24 "errors" 25 "fmt" 26 "strings" 27 28 "github.com/go-logr/logr" 29 "github.com/spf13/viper" 30 31 "github.com/1aal/kubeblocks/pkg/lorry/dcs" 32 "github.com/1aal/kubeblocks/pkg/lorry/engines/models" 33 ) 34 35 type DBManagerBase struct { 36 CurrentMemberName string 37 ClusterCompName string 38 Namespace string 39 DataDir string 40 Logger logr.Logger 41 DBStartupReady bool 42 IsLocked bool 43 DBState *dcs.DBState 44 } 45 46 func NewDBManagerBase(logger logr.Logger) (*DBManagerBase, error) { 47 currentMemberName := viper.GetString("KB_POD_NAME") 48 if currentMemberName == "" { 49 return nil, fmt.Errorf("KB_POD_NAME is not set") 50 } 51 52 mgr := DBManagerBase{ 53 CurrentMemberName: currentMemberName, 54 ClusterCompName: viper.GetString("KB_CLUSTER_COMP_NAME"), 55 Namespace: viper.GetString("KB_NAMESPACE"), 56 Logger: logger, 57 } 58 return &mgr, nil 59 } 60 61 func (mgr *DBManagerBase) IsDBStartupReady() bool { 62 return true 63 } 64 65 func (mgr *DBManagerBase) GetLogger() logr.Logger { 66 return mgr.Logger 67 } 68 69 func (mgr *DBManagerBase) SetLogger(logger logr.Logger) { 70 mgr.Logger = logger 71 } 72 73 func (mgr *DBManagerBase) GetCurrentMemberName() string { 74 return mgr.CurrentMemberName 75 } 76 77 func (mgr *DBManagerBase) IsFirstMember() bool { 78 return strings.HasSuffix(mgr.CurrentMemberName, "-0") 79 } 80 81 func (mgr *DBManagerBase) IsPromoted(context.Context) bool { 82 return true 83 } 84 85 func (mgr *DBManagerBase) Promote(context.Context, *dcs.Cluster) error { 86 return errors.New("not implemented") 87 } 88 89 func (mgr *DBManagerBase) Demote(context.Context) error { 90 return errors.New("not implemented") 91 } 92 93 func (mgr *DBManagerBase) Follow(context.Context, *dcs.Cluster) error { 94 return errors.New("not implemented") 95 } 96 97 func (mgr *DBManagerBase) Recover(context.Context) error { 98 return errors.New("not implemented") 99 } 100 101 func (mgr *DBManagerBase) IsLeader(context.Context, *dcs.Cluster) (bool, error) { 102 return false, nil 103 } 104 105 func (mgr *DBManagerBase) IsLeaderMember(context.Context, *dcs.Cluster, *dcs.Member) (bool, error) { 106 return false, errors.New("not implemented") 107 } 108 109 func (mgr *DBManagerBase) GetMemberAddrs(context.Context, *dcs.Cluster) []string { 110 return nil 111 } 112 113 func (mgr *DBManagerBase) InitializeCluster(context.Context, *dcs.Cluster) error { 114 return nil 115 } 116 117 func (mgr *DBManagerBase) IsClusterInitialized(context.Context, *dcs.Cluster) (bool, error) { 118 return true, nil 119 } 120 121 func (mgr *DBManagerBase) IsClusterHealthy(context.Context, *dcs.Cluster) bool { 122 return true 123 } 124 125 func (mgr *DBManagerBase) HasOtherHealthyLeader(context.Context, *dcs.Cluster) *dcs.Member { 126 return nil 127 } 128 129 func (mgr *DBManagerBase) HasOtherHealthyMembers(context.Context, *dcs.Cluster, string) []*dcs.Member { 130 return nil 131 } 132 133 func (mgr *DBManagerBase) IsMemberHealthy(context.Context, *dcs.Cluster, *dcs.Member) bool { 134 return false 135 } 136 137 func (mgr *DBManagerBase) IsCurrentMemberHealthy(context.Context, *dcs.Cluster) bool { 138 return true 139 } 140 141 func (mgr *DBManagerBase) IsCurrentMemberInCluster(context.Context, *dcs.Cluster) bool { 142 return true 143 } 144 145 func (mgr *DBManagerBase) JoinCurrentMemberToCluster(context.Context, *dcs.Cluster) error { 146 return nil 147 } 148 149 func (mgr *DBManagerBase) LeaveMemberFromCluster(context.Context, *dcs.Cluster, string) error { 150 return nil 151 } 152 153 func (mgr *DBManagerBase) IsMemberLagging(context.Context, *dcs.Cluster, *dcs.Member) (bool, int64) { 154 return false, 0 155 } 156 157 func (mgr *DBManagerBase) GetLag(context.Context, *dcs.Cluster) (int64, error) { 158 return 0, errors.New("not implemented") 159 } 160 161 func (mgr *DBManagerBase) GetDBState(context.Context, *dcs.Cluster) *dcs.DBState { 162 // mgr.DBState = DBState 163 return nil 164 } 165 166 func (mgr *DBManagerBase) MoveData(context.Context, *dcs.Cluster) error { 167 return nil 168 } 169 170 func (mgr *DBManagerBase) GetReplicaRole(context.Context, *dcs.Cluster) (string, error) { 171 return "", errors.New("not implemented") 172 } 173 174 func (mgr *DBManagerBase) Exec(context.Context, string) (int64, error) { 175 return 0, errors.New("not implemented") 176 } 177 178 func (mgr *DBManagerBase) Query(context.Context, string) ([]byte, error) { 179 return []byte{}, errors.New("not implemented") 180 } 181 182 func (mgr *DBManagerBase) GetPort() (int, error) { 183 return 0, errors.New("not implemented") 184 } 185 186 func (mgr *DBManagerBase) IsRootCreated(context.Context) (bool, error) { 187 return true, nil 188 } 189 190 func (mgr *DBManagerBase) ListUsers(context.Context) ([]models.UserInfo, error) { 191 return nil, errors.New("not implemented") 192 } 193 194 func (mgr *DBManagerBase) ListSystemAccounts(context.Context) ([]models.UserInfo, error) { 195 return nil, errors.New("not implemented") 196 } 197 198 func (mgr *DBManagerBase) CreateUser(context.Context, string, string) error { 199 return errors.New("not implemented") 200 } 201 202 func (mgr *DBManagerBase) DeleteUser(context.Context, string) error { 203 return errors.New("not implemented") 204 } 205 206 func (mgr *DBManagerBase) DescribeUser(context.Context, string) (*models.UserInfo, error) { 207 return nil, errors.New("not implemented") 208 } 209 210 func (mgr *DBManagerBase) GrantUserRole(context.Context, string, string) error { 211 return errors.New("not implemented") 212 } 213 214 func (mgr *DBManagerBase) RevokeUserRole(context.Context, string, string) error { 215 return errors.New("not implemented") 216 } 217 218 func (mgr *DBManagerBase) IsRunning() bool { 219 return false 220 } 221 222 func (mgr *DBManagerBase) Lock(context.Context, string) error { 223 return errors.New("not implemented") 224 } 225 226 func (mgr *DBManagerBase) Unlock(context.Context) error { 227 return errors.New("not implemented") 228 } 229 230 func (mgr *DBManagerBase) Start(context.Context, *dcs.Cluster) error { 231 return nil 232 } 233 234 func (mgr *DBManagerBase) Stop() error { 235 return nil 236 } 237 238 func (mgr *DBManagerBase) CreateRoot(context.Context) error { 239 return nil 240 } 241 242 func (mgr *DBManagerBase) ShutDownWithWait() { 243 mgr.Logger.Info("Override me if need") 244 }