public static void FixDiffs(Client client, List <ConfigState.ShardServer> shardServers, Int64 tableID, List <string> diffs) { var i = 0; foreach (var key in diffs) { i += 1; byte[] startKey = Utils.StringToByteArray(key); byte[] endKey = Utils.NextKey(startKey); var serverKeyValues = ConfigStateHelpers.ParallelFetchTableKeyValuesHTTP(shardServers, tableID, startKey, endKey, true); if (Array.TrueForAll(serverKeyValues, val => (val.Count == 1 && Utils.ByteArraysEqual(val.First().Key, serverKeyValues[0].First().Key)))) { continue; } foreach (var keyValue in serverKeyValues) { if (keyValue == null || keyValue.Count == 0) { continue; } if (keyValue.First().Value.Length > 0) { Assert.IsTrue(Utils.ByteArraysEqual(Utils.StringToByteArray(key), keyValue.First().Key)); Console.WriteLine("Setting key {0}", key); Table table = new Table(client, null, (ulong)tableID, ""); table.Set(startKey, keyValue.First().Value); client.Submit(); } } } }
public static void CompareTableKeyValuesHTTP(List <ConfigState.ShardServer> shardServers, Int64 tableID, byte[] startKey, byte[] endKey) { if (shardServers.Count <= 1) { return; } var i = 0; while (true) { var serverKeys = ConfigStateHelpers.ParallelFetchTableKeyValuesHTTP(shardServers, tableID, startKey, endKey, true); int numEmpty = serverKeys.Count(keys => keys.Count == 0); if (numEmpty == serverKeys.Length) { break; } System.Console.WriteLine("StartKey: " + Utils.ByteArrayToString(startKey)); for (i = 1; i < serverKeys.Length; i++) { if (serverKeys[i].Count != serverKeys[0].Count) { System.Console.WriteLine("Inconsistency at tableID: " + tableID); System.Console.WriteLine("NodeID: " + shardServers.ElementAt(i).nodeID + ", count: " + serverKeys[i].Count); System.Console.WriteLine("NodeID: " + shardServers.ElementAt(0).nodeID + ", count: " + serverKeys[i].Count); Assert.Fail("Inconsistency at tableID: " + tableID); return; } for (var j = 0; j < serverKeys[0].Count; j++) { var a = serverKeys[i][j]; var b = serverKeys[0][j]; if (Utils.ByteArraysEqual(a.Key, b.Key) && Utils.ByteArraysEqual(a.Value, b.Value)) { continue; } System.Console.WriteLine("Inconsistency at tableID: " + tableID); System.Console.WriteLine("NodeID: " + shardServers.ElementAt(i).nodeID + ", key: " + Utils.ByteArrayToString(a.Key)); System.Console.WriteLine("NodeID: " + shardServers.ElementAt(0).nodeID + ", key: " + Utils.ByteArrayToString(b.Key)); Assert.Fail("Inconsistency at tableID: " + tableID); //return; goto Out; } } Out: if (serverKeys[0].Count == 0) { break; } startKey = Utils.NextKey(serverKeys[0].Last().Key); } }