@@ -48,13 +48,17 @@ type StatusSyncer struct {
4848 * cluster.Cluster
4949
5050 cli client.Client
51+
52+ // Mysql query runner.
53+ internal.SQLRunnerFactory
5154}
5255
5356// NewStatusSyncer returns a pointer to StatusSyncer.
54- func NewStatusSyncer (c * cluster.Cluster , cli client.Client ) * StatusSyncer {
57+ func NewStatusSyncer (c * cluster.Cluster , cli client.Client , sqlRunnerFactory internal. SQLRunnerFactory ) * StatusSyncer {
5558 return & StatusSyncer {
56- Cluster : c ,
57- cli : cli ,
59+ Cluster : c ,
60+ cli : cli ,
61+ SQLRunnerFactory : sqlRunnerFactory ,
5862 }
5963}
6064
@@ -144,7 +148,6 @@ func (s *StatusSyncer) Sync(ctx context.Context) (syncer.SyncResult, error) {
144148func (s * StatusSyncer ) updateNodeStatus (ctx context.Context , cli client.Client , pods []corev1.Pod ) error {
145149 sctName := s .GetNameForResource (utils .Secret )
146150 svcName := s .GetNameForResource (utils .HeadlessSVC )
147- port := utils .MysqlPort
148151 nameSpace := s .Namespace
149152
150153 secret := & corev1.Secret {}
@@ -158,14 +161,7 @@ func (s *StatusSyncer) updateNodeStatus(ctx context.Context, cli client.Client,
158161 log .V (1 ).Info ("secret not found" , "name" , sctName )
159162 return nil
160163 }
161- user , ok := secret .Data ["operator-user" ]
162- if ! ok {
163- return fmt .Errorf ("failed to get the user: %s" , user )
164- }
165- password , ok := secret .Data ["operator-password" ]
166- if ! ok {
167- return fmt .Errorf ("failed to get the password: %s" , password )
168- }
164+
169165 rootPasswd , ok := secret .Data ["root-password" ]
170166 if ! ok {
171167 return fmt .Errorf ("failed to get the root password: %s" , rootPasswd )
@@ -187,18 +183,20 @@ func (s *StatusSyncer) updateNodeStatus(ctx context.Context, cli client.Client,
187183 s .updateNodeCondition (node , int (apiv1alpha1 .IndexLeader ), isLeader )
188184
189185 isLagged , isReplicating , isReadOnly := corev1 .ConditionUnknown , corev1 .ConditionUnknown , corev1 .ConditionUnknown
190- runner , err := internal .NewSQLRunner (utils .BytesToString (user ), utils .BytesToString (password ), host , port )
186+ sqlRunner , closeConn , err := s .SQLRunnerFactory (internal .NewConfigFromClusterKey (
187+ s .cli , s .Cluster .GetClusterKey (), utils .OperatorUser , host ))
188+ defer closeConn ()
191189 if err != nil {
192190 log .Error (err , "failed to connect the mysql" , "node" , node .Name )
193191 node .Message = err .Error ()
194192 } else {
195- isLagged , isReplicating , err = runner .CheckSlaveStatusWithRetry (checkNodeStatusRetry )
193+ isLagged , isReplicating , err = internal .CheckSlaveStatusWithRetry (sqlRunner , checkNodeStatusRetry )
196194 if err != nil {
197195 log .Error (err , "failed to check slave status" , "node" , node .Name )
198196 node .Message = err .Error ()
199197 }
200198
201- isReadOnly , err = runner .CheckReadOnly ()
199+ isReadOnly , err = internal .CheckReadOnly (sqlRunner )
202200 if err != nil {
203201 log .Error (err , "failed to check read only" , "node" , node .Name )
204202 node .Message = err .Error ()
@@ -208,15 +206,11 @@ func (s *StatusSyncer) updateNodeStatus(ctx context.Context, cli client.Client,
208206 isLeader == corev1 .ConditionTrue &&
209207 isReadOnly != corev1 .ConditionFalse {
210208 log .V (1 ).Info ("try to correct the leader writeable" , "node" , node .Name )
211- runner . RunQuery ( "SET GLOBAL read_only=off" )
212- runner . RunQuery ( "SET GLOBAL super_read_only=off" )
209+ sqlRunner . QueryExec ( internal . NewQuery ( "SET GLOBAL read_only=off" ) )
210+ sqlRunner . QueryExec ( internal . NewQuery ( "SET GLOBAL super_read_only=off" ) )
213211 }
214212 }
215213
216- if runner != nil {
217- runner .Close ()
218- }
219-
220214 // update apiv1alpha1.NodeConditionLagged.
221215 s .updateNodeCondition (node , int (apiv1alpha1 .IndexLagged ), isLagged )
222216 // update apiv1alpha1.NodeConditionReplicating.
0 commit comments