1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 2009 Oracle. All rights reserved. 5 * 6 */ 7using System; 8using System.Collections.Generic; 9using System.Text; 10 11namespace BerkeleyDB { 12 /// <summary> 13 /// Statistical information about the replication subsystem 14 /// </summary> 15 public class ReplicationStats { 16 private Internal.ReplicationStatStruct st; 17 private LSN next; 18 private LSN waiting; 19 private LSN maxPerm; 20 private LSN winner; 21 internal ReplicationStats(Internal.ReplicationStatStruct stats) { 22 st = stats; 23 next = new LSN(st.st_next_lsn.file, st.st_next_lsn.offset); 24 waiting = new LSN(st.st_waiting_lsn.file, st.st_waiting_lsn.offset); 25 maxPerm = 26 new LSN(st.st_max_perm_lsn.file, st.st_max_perm_lsn.offset); 27 winner = new LSN(st.st_election_lsn.file, st.st_election_lsn.offset); 28 29 } 30 31 /// <summary> 32 /// Log records currently queued. 33 /// </summary> 34 public ulong CurrentQueuedLogRecords { get { return st.st_log_queued; } } 35 /// <summary> 36 /// Site completed client sync-up. 37 /// </summary> 38 public bool ClientStartupComplete { get { return st.st_startup_complete != 0; } } 39 /// <summary> 40 /// Current replication status. 41 /// </summary> 42 public uint Status { get { return st.st_status; } } 43 /// <summary> 44 /// Next LSN to use or expect. 45 /// </summary> 46 public LSN NextLSN { get { return next; } } 47 /// <summary> 48 /// LSN we're awaiting, if any. 49 /// </summary> 50 public LSN AwaitedLSN { get { return waiting; } } 51 /// <summary> 52 /// Maximum permanent LSN. 53 /// </summary> 54 public LSN MaxPermanentLSN { get { return maxPerm; } } 55 /// <summary> 56 /// Next pg we expect. 57 /// </summary> 58 public uint NextPage { get { return st.st_next_pg; } } 59 /// <summary> 60 /// pg we're awaiting, if any. 61 /// </summary> 62 public uint AwaitedPage { get { return st.st_waiting_pg; } } 63 /// <summary> 64 /// # of times a duplicate master condition was detected. 65 /// </summary> 66 public uint DupMasters { get { return st.st_dupmasters; } } 67 /// <summary> 68 /// Current environment ID. 69 /// </summary> 70 public int EnvID { get { return st.st_env_id; } } 71 /// <summary> 72 /// Current environment priority. 73 /// </summary> 74 public uint EnvPriority { get { return st.st_env_priority; } } 75 /// <summary> 76 /// Bulk buffer fills. 77 /// </summary> 78 public ulong BulkBufferFills { get { return st.st_bulk_fills; } } 79 /// <summary> 80 /// Bulk buffer overflows. 81 /// </summary> 82 public ulong BulkBufferOverflows { get { return st.st_bulk_overflows; } } 83 /// <summary> 84 /// Bulk records stored. 85 /// </summary> 86 public ulong BulkRecordsStored { get { return st.st_bulk_records; } } 87 /// <summary> 88 /// Transfers of bulk buffers. 89 /// </summary> 90 public ulong BulkBufferTransfers { get { return st.st_bulk_transfers; } } 91 /// <summary> 92 /// Number of forced rerequests. 93 /// </summary> 94 public ulong ForcedRerequests { get { return st.st_client_rerequests; } } 95 /// <summary> 96 /// Number of client service requests received by this client. 97 /// </summary> 98 public ulong ClientServiceRequests { get { return st.st_client_svc_req; } } 99 /// <summary> 100 /// Number of client service requests missing on this client. 101 /// </summary> 102 public ulong ClientServiceRequestsMissing { get { return st.st_client_svc_miss; } } 103 /// <summary> 104 /// Current generation number. 105 /// </summary> 106 public uint CurrentGenerationNumber { get { return st.st_gen; } } 107 /// <summary> 108 /// Current election gen number. 109 /// </summary> 110 public uint CurrentElectionGenerationNumber { get { return st.st_egen; } } 111 /// <summary> 112 /// Log records received multiply. 113 /// </summary> 114 public ulong DuplicateLogRecords { get { return st.st_log_duplicated; } } 115 /// <summary> 116 /// Max. log records queued at once. 117 /// </summary> 118 public ulong MaxQueuedLogRecords { get { return st.st_log_queued_max; } } 119 /// <summary> 120 /// Total # of log recs. ever queued. 121 /// </summary> 122 public ulong QueuedLogRecords { get { return st.st_log_queued_total; } } 123 /// <summary> 124 /// Log records received and put. 125 /// </summary> 126 public ulong ReceivedLogRecords { get { return st.st_log_records; } } 127 /// <summary> 128 /// Log recs. missed and requested. 129 /// </summary> 130 public ulong MissedLogRecords { get { return st.st_log_requested; } } 131 /// <summary> 132 /// Env. ID of the current master. 133 /// </summary> 134 public int MasterEnvID { get { return st.st_master; } } 135 /// <summary> 136 /// # of times we've switched masters. 137 /// </summary> 138 public ulong MasterChanges { get { return st.st_master_changes; } } 139 /// <summary> 140 /// Messages with a bad generation #. 141 /// </summary> 142 public ulong BadGenerationMessages { get { return st.st_msgs_badgen; } } 143 /// <summary> 144 /// Messages received and processed. 145 /// </summary> 146 public ulong ReceivedMessages { get { return st.st_msgs_processed; } } 147 /// <summary> 148 /// Messages ignored because this site was a client in recovery. 149 /// </summary> 150 public ulong IgnoredMessages { get { return st.st_msgs_recover; } } 151 /// <summary> 152 /// # of failed message sends. 153 /// </summary> 154 public ulong FailedMessageSends { get { return st.st_msgs_send_failures; } } 155 /// <summary> 156 /// # of successful message sends. 157 /// </summary> 158 public ulong MessagesSent { get { return st.st_msgs_sent; } } 159 /// <summary> 160 /// # of NEWSITE msgs. received. 161 /// </summary> 162 public ulong NewSiteMessages { get { return st.st_newsites; } } 163 /// <summary> 164 /// Current number of sites we will assume during elections. 165 /// </summary> 166 public uint Sites { get { return st.st_nsites; } } 167 /// <summary> 168 /// # of times we were throttled. 169 /// </summary> 170 public ulong Throttled { get { return st.st_nthrottles; } } 171 /// <summary> 172 /// # of times we detected and returned an OUTDATED condition. 173 /// </summary> 174 public ulong Outdated { get { return st.st_outdated; } } 175 /// <summary> 176 /// Pages received multiply. 177 /// </summary> 178 public ulong DuplicatePages { get { return st.st_pg_duplicated; } } 179 /// <summary> 180 /// Pages received and stored. 181 /// </summary> 182 public ulong ReceivedPages { get { return st.st_pg_records; } } 183 /// <summary> 184 /// Pages missed and requested. 185 /// </summary> 186 public ulong MissedPages { get { return st.st_pg_requested; } } 187 /// <summary> 188 /// # of transactions applied. 189 /// </summary> 190 public ulong AppliedTransactions { get { return st.st_txns_applied; } } 191 /// <summary> 192 /// # of STARTSYNC msgs delayed. 193 /// </summary> 194 public ulong StartSyncMessagesDelayed { get { return st.st_startsync_delayed; } } 195 196 /* Elections generally. */ 197 /// <summary> 198 /// # of elections held. 199 /// </summary> 200 public ulong Elections { get { return st.st_elections; } } 201 /// <summary> 202 /// # of elections won by this site. 203 /// </summary> 204 public ulong ElectionsWon { get { return st.st_elections_won; } } 205 206 /* Statistics about an in-progress election. */ 207 /// <summary> 208 /// Current front-runner. 209 /// </summary> 210 public int CurrentWinner { get { return st.st_election_cur_winner; } } 211 /// <summary> 212 /// Election generation number. 213 /// </summary> 214 public uint ElectionGenerationNumber { get { return st.st_election_gen; } } 215 /// <summary> 216 /// Max. LSN of current winner. 217 /// </summary> 218 public LSN CurrentWinnerMaxLSN { get { return winner; } } 219 /// <summary> 220 /// # of "registered voters". 221 /// </summary> 222 public uint RegisteredSites { get { return st.st_election_nsites; } } 223 /// <summary> 224 /// # of "registered voters" needed. 225 /// </summary> 226 public uint RegisteredSitesNeeded { get { return st.st_election_nvotes; } } 227 /// <summary> 228 /// Current election priority. 229 /// </summary> 230 public uint ElectionPriority { get { return st.st_election_priority; } } 231 /// <summary> 232 /// Current election status. 233 /// </summary> 234 public int ElectionStatus { get { return st.st_election_status; } } 235 /// <summary> 236 /// Election tiebreaker value. 237 /// </summary> 238 public uint ElectionTiebreaker { get { return st.st_election_tiebreaker; } } 239 /// <summary> 240 /// Votes received in this round. 241 /// </summary> 242 public uint Votes { get { return st.st_election_votes; } } 243 /// <summary> 244 /// Last election time seconds. 245 /// </summary> 246 public uint ElectionTimeSec { get { return st.st_election_sec; } } 247 /// <summary> 248 /// Last election time useconds. 249 /// </summary> 250 public uint ElectionTimeUSec { get { return st.st_election_usec; } } 251 /// <summary> 252 /// Maximum lease timestamp seconds. 253 /// </summary> 254 public uint MaxLeaseSec { get { return st.st_max_lease_sec; } } 255 /// <summary> 256 /// Maximum lease timestamp useconds. 257 /// </summary> 258 public uint MaxLeaseUSec { get { return st.st_max_lease_usec; } } 259 } 260}