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 }