Exemplo n.º 1
0
        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();
                    }
                }
            }
        }
Exemplo n.º 2
0
        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);
            }
        }