public static void FixConsistency(Client client, List <ConfigState.ShardServer> shardServers, Int64 tableID, string startKey, string endKey) { if (shardServers.Count <= 1) { return; } var keyDiffs = new HashSet <string>(); var serverKeys = new string[shardServers.Count][]; var i = 0; while (true) { System.Console.WriteLine("StartKey: " + startKey); serverKeys = ConfigStateHelpers.ParallelFetchTableKeysHTTP(shardServers, tableID, startKey, endKey, true); for (i = 1; i < serverKeys.Length; i++) { if (serverKeys[0].Length > 0 && serverKeys[i].Length > 1 && serverKeys[0].First().CompareTo(serverKeys[i].Last()) < 0) { foreach (var diff in serverKeys[i].Except(serverKeys[0])) { keyDiffs.Add(diff); } } if (serverKeys[0].Length > 1 && serverKeys[i].Length > 0 && serverKeys[i].First().CompareTo(serverKeys[0].Last()) < 0) { foreach (var diff in serverKeys[0].Except(serverKeys[i])) { keyDiffs.Add(diff); } } } if (keyDiffs.Count != 0) { FixDiffs(client, shardServers, tableID, keyDiffs.ToList()); startKey = keyDiffs.Last(); keyDiffs = new HashSet <string>(); continue; } if (serverKeys[0].Length <= 1) { break; } startKey = serverKeys[0][serverKeys[0].Length - 1]; } }
public static void CompareTableKeysHTTP(List <ConfigState.ShardServer> shardServers, Int64 tableID, string startKey, string endKey) { if (shardServers.Count <= 1) { return; } var serverKeys = new string[shardServers.Count][]; var i = 0; while (true) { serverKeys = ConfigStateHelpers.ParallelFetchTableKeysHTTP(shardServers, tableID, startKey, endKey, true); for (i = 1; i < serverKeys.Length; i++) { if (!serverKeys[i].SequenceEqual(serverKeys[0])) { for (var j = 0; j < Math.Max(serverKeys[i].Length, serverKeys[0].Length); j++) { var a = serverKeys[i][j]; var b = serverKeys[0][j]; if (a == b) { continue; } System.Console.WriteLine("Inconsistency at tableID: " + tableID); System.Console.WriteLine("NodeID: " + shardServers.ElementAt(i).nodeID + ", key: " + a); System.Console.WriteLine("NodeID: " + shardServers.ElementAt(0).nodeID + ", key: " + b); //Assert.IsTrue(a == b); //return; goto Out; } } } Out: if (serverKeys[0].Length <= 1) { break; } startKey = serverKeys[0][serverKeys[0].Length - 1]; System.Console.WriteLine("StartKey: " + startKey); } }
public static void CompareNumericTableKeysBackwardsHTTP(List <ConfigState.ShardServer> shardServers, Int64 tableID, ulong num) { var serverKeys = new string[shardServers.Count][]; var startKey = Utils.Id(num); var endKey = ""; ulong counter = num; while (true) { serverKeys = ConfigStateHelpers.ParallelFetchTableKeysHTTP(shardServers, tableID, startKey, endKey, false); var referenceKeys = ConfigStateHelpers.GenerateNumericKeysBackwards(counter, (ulong)serverKeys[0].Length); for (var i = 0; i < serverKeys.Length; i++) { if (!serverKeys[i].SequenceEqual(referenceKeys)) { for (var j = 0; j < Math.Max(serverKeys[i].Length, referenceKeys.Length); j++) { var a = serverKeys[i][j]; var b = referenceKeys[j]; if (a == b) { continue; } //Assert.IsTrue(a == b); System.Console.WriteLine("Inconsistency at tableID: " + tableID); System.Console.WriteLine("NodeID: " + shardServers.ElementAt(i).nodeID + ", key: " + a); Assert.IsTrue(a == b); return; } } } if (serverKeys[0].Length <= 1) { break; } startKey = serverKeys[0][serverKeys[0].Length - 1]; counter -= (ulong)referenceKeys.Length - 1; System.Console.WriteLine("StartKey: " + startKey); } }