vitess.io/vitess@v0.16.2/go/vt/vtorc/test/recovery_analysis.go (about)

     1  /*
     2  Copyright 2021 The Vitess Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package test
    18  
    19  import (
    20  	"fmt"
    21  	"time"
    22  
    23  	"google.golang.org/protobuf/encoding/prototext"
    24  
    25  	"vitess.io/vitess/go/vt/external/golib/sqlutils"
    26  
    27  	topodatapb "vitess.io/vitess/go/vt/proto/topodata"
    28  )
    29  
    30  type InfoForRecoveryAnalysis struct {
    31  	TabletInfo                                *topodatapb.Tablet
    32  	PrimaryTabletInfo                         *topodatapb.Tablet
    33  	PrimaryTimestamp                          *time.Time
    34  	Keyspace                                  string
    35  	Shard                                     string
    36  	KeyspaceType                              int
    37  	DurabilityPolicy                          string
    38  	IsInvalid                                 int
    39  	IsPrimary                                 int
    40  	IsCoPrimary                               int
    41  	Hostname                                  string
    42  	Port                                      int
    43  	SourceHost                                string
    44  	SourcePort                                int
    45  	DataCenter                                string
    46  	Region                                    string
    47  	PhysicalEnvironment                       string
    48  	LogFile                                   string
    49  	LogPos                                    int64
    50  	IsStaleBinlogCoordinates                  int
    51  	GTIDMode                                  string
    52  	LastCheckValid                            int
    53  	LastCheckPartialSuccess                   int
    54  	CountReplicas                             uint
    55  	CountValidReplicas                        uint
    56  	CountValidReplicatingReplicas             uint
    57  	CountReplicasFailingToConnectToPrimary    uint
    58  	CountDowntimedReplicas                    uint
    59  	ReplicationDepth                          uint
    60  	IsFailingToConnectToPrimary               int
    61  	ReplicationStopped                        int
    62  	IsDowntimed                               int
    63  	DowntimeEndTimestamp                      string
    64  	DowntimeRemainingSeconds                  int
    65  	IsBinlogServer                            int
    66  	CountValidOracleGTIDReplicas              uint
    67  	CountValidMariaDBGTIDReplicas             uint
    68  	CountValidBinlogServerReplicas            uint
    69  	SemiSyncPrimaryEnabled                    int
    70  	SemiSyncPrimaryStatus                     int
    71  	SemiSyncPrimaryWaitForReplicaCount        uint
    72  	SemiSyncPrimaryClients                    uint
    73  	SemiSyncReplicaEnabled                    int
    74  	CountSemiSyncReplicasEnabled              uint
    75  	CountLoggingReplicas                      uint
    76  	CountStatementBasedLoggingReplicas        uint
    77  	CountMixedBasedLoggingReplicas            uint
    78  	CountRowBasedLoggingReplicas              uint
    79  	CountDistinctMajorVersionsLoggingReplicas uint
    80  	CountDelayedReplicas                      uint
    81  	CountLaggingReplicas                      uint
    82  	MinReplicaGTIDMode                        string
    83  	MaxReplicaGTIDMode                        string
    84  	MaxReplicaGTIDErrant                      string
    85  	ReadOnly                                  uint
    86  }
    87  
    88  func (info *InfoForRecoveryAnalysis) ConvertToRowMap() sqlutils.RowMap {
    89  	rowMap := make(sqlutils.RowMap)
    90  	rowMap["binary_log_file"] = sqlutils.CellData{String: info.LogFile, Valid: true}
    91  	rowMap["binary_log_pos"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.LogPos), Valid: true}
    92  	rowMap["count_binlog_server_replicas"] = sqlutils.CellData{Valid: false}
    93  	rowMap["count_co_primary_replicas"] = sqlutils.CellData{Valid: false}
    94  	rowMap["count_delayed_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountDelayedReplicas), Valid: true}
    95  	rowMap["count_distinct_logging_major_versions"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountDistinctMajorVersionsLoggingReplicas), Valid: true}
    96  	rowMap["count_downtimed_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountDowntimedReplicas), Valid: true}
    97  	rowMap["count_lagging_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountLaggingReplicas), Valid: true}
    98  	rowMap["count_logging_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountLoggingReplicas), Valid: true}
    99  	rowMap["count_mariadb_gtid_replicas"] = sqlutils.CellData{Valid: false}
   100  	rowMap["count_mixed_based_logging_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountMixedBasedLoggingReplicas), Valid: true}
   101  	rowMap["count_oracle_gtid_replicas"] = sqlutils.CellData{Valid: false}
   102  	rowMap["count_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountReplicas), Valid: true}
   103  	rowMap["count_replicas_failing_to_connect_to_primary"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountReplicasFailingToConnectToPrimary), Valid: true}
   104  	rowMap["count_row_based_logging_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountRowBasedLoggingReplicas), Valid: true}
   105  	rowMap["count_semi_sync_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountSemiSyncReplicasEnabled), Valid: true}
   106  	rowMap["count_statement_based_logging_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountStatementBasedLoggingReplicas), Valid: true}
   107  	rowMap["count_valid_binlog_server_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountValidBinlogServerReplicas), Valid: true}
   108  	rowMap["count_valid_mariadb_gtid_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountValidMariaDBGTIDReplicas), Valid: true}
   109  	rowMap["count_valid_oracle_gtid_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountValidOracleGTIDReplicas), Valid: true}
   110  	rowMap["count_valid_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountValidReplicas), Valid: true}
   111  	rowMap["count_valid_replicating_replicas"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.CountValidReplicatingReplicas), Valid: true}
   112  	rowMap["data_center"] = sqlutils.CellData{String: info.DataCenter, Valid: true}
   113  	rowMap["downtime_end_timestamp"] = sqlutils.CellData{String: info.DowntimeEndTimestamp, Valid: true}
   114  	rowMap["downtime_remaining_seconds"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.DowntimeRemainingSeconds), Valid: true}
   115  	rowMap["durability_policy"] = sqlutils.CellData{String: info.DurabilityPolicy, Valid: true}
   116  	rowMap["gtid_mode"] = sqlutils.CellData{String: info.GTIDMode, Valid: true}
   117  	rowMap["hostname"] = sqlutils.CellData{String: info.Hostname, Valid: true}
   118  	rowMap["is_binlog_server"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.IsBinlogServer), Valid: true}
   119  	rowMap["is_co_primary"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.IsCoPrimary), Valid: true}
   120  	rowMap["is_downtimed"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.IsDowntimed), Valid: true}
   121  	rowMap["is_failing_to_connect_to_primary"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.IsFailingToConnectToPrimary), Valid: true}
   122  	rowMap["is_invalid"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.IsInvalid), Valid: true}
   123  	rowMap["is_last_check_valid"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.LastCheckValid), Valid: true}
   124  	rowMap["is_primary"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.IsPrimary), Valid: true}
   125  	rowMap["is_stale_binlog_coordinates"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.IsStaleBinlogCoordinates), Valid: true}
   126  	rowMap["keyspace_type"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.KeyspaceType), Valid: true}
   127  	rowMap["keyspace"] = sqlutils.CellData{String: info.Keyspace, Valid: true}
   128  	rowMap["shard"] = sqlutils.CellData{String: info.Shard, Valid: true}
   129  	rowMap["last_check_partial_success"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.LastCheckPartialSuccess), Valid: true}
   130  	rowMap["max_replica_gtid_errant"] = sqlutils.CellData{String: info.MaxReplicaGTIDErrant, Valid: true}
   131  	rowMap["max_replica_gtid_mode"] = sqlutils.CellData{String: info.MaxReplicaGTIDMode, Valid: true}
   132  	rowMap["min_replica_gtid_mode"] = sqlutils.CellData{String: info.MinReplicaGTIDMode, Valid: true}
   133  	rowMap["physical_environment"] = sqlutils.CellData{String: info.PhysicalEnvironment, Valid: true}
   134  	rowMap["port"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.Port), Valid: true}
   135  	if info.PrimaryTabletInfo == nil {
   136  		rowMap["primary_tablet_info"] = sqlutils.CellData{Valid: false}
   137  	} else {
   138  		res, _ := prototext.Marshal(info.PrimaryTabletInfo)
   139  		rowMap["primary_tablet_info"] = sqlutils.CellData{String: string(res), Valid: true}
   140  	}
   141  	rowMap["primary_timestamp"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.PrimaryTimestamp), Valid: true}
   142  	rowMap["read_only"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.ReadOnly), Valid: true}
   143  	rowMap["region"] = sqlutils.CellData{String: info.Region, Valid: true}
   144  	rowMap["replication_depth"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.ReplicationDepth), Valid: true}
   145  	rowMap["replication_stopped"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.ReplicationStopped), Valid: true}
   146  	rowMap["semi_sync_primary_clients"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.SemiSyncPrimaryClients), Valid: true}
   147  	rowMap["semi_sync_primary_enabled"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.SemiSyncPrimaryEnabled), Valid: true}
   148  	rowMap["semi_sync_primary_status"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.SemiSyncPrimaryStatus), Valid: true}
   149  	rowMap["semi_sync_primary_wait_for_replica_count"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.SemiSyncPrimaryWaitForReplicaCount), Valid: true}
   150  	rowMap["semi_sync_replica_enabled"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.SemiSyncReplicaEnabled), Valid: true}
   151  	rowMap["source_host"] = sqlutils.CellData{String: info.SourceHost, Valid: true}
   152  	rowMap["source_port"] = sqlutils.CellData{String: fmt.Sprintf("%v", info.SourcePort), Valid: true}
   153  	res, _ := prototext.Marshal(info.TabletInfo)
   154  	rowMap["tablet_info"] = sqlutils.CellData{String: string(res), Valid: true}
   155  	return rowMap
   156  }
   157  
   158  func (info *InfoForRecoveryAnalysis) SetValuesFromTabletInfo() {
   159  	info.Hostname = info.TabletInfo.MysqlHostname
   160  	info.Port = int(info.TabletInfo.MysqlPort)
   161  	info.DataCenter = info.TabletInfo.Alias.Cell
   162  	info.Keyspace = info.TabletInfo.Keyspace
   163  	info.Shard = info.TabletInfo.Shard
   164  }