示例#1
0
        private static void RegisterAtCoordinator(Uri uri, bool register)
        {
            var t = new Thread(() =>
            {
                if (!string.IsNullOrEmpty(Settings.Default.CoordinatorUri))
                {
                    using (var coordinator = new CSClient.CoordinatorServiceClient(new BasicHttpBinding(), new EndpointAddress(Settings.Default.CoordinatorUri)))
                    {
                        try
                        {
                            Console.WriteLine("{1} at coordinator {0}... ", Settings.Default.CoordinatorUri, register ? "Registering" : "Unregistering");
                            if (register)
                            {
                                coordinator.AddWorkerAsync(uri).Wait();
                            }
                            else
                            {
                                coordinator.RemoveWorkerAsync(uri).Wait();
                            }
                        }
                        catch
                        {
                            Console.WriteLine("{1} at coordinator {0} failed ", Settings.Default.CoordinatorUri, register ? "Registering" : "Unregistering");
                        }
                    }
                }
            });

            t.Start();
        }
        private static void PushReduceResultsToCoordinatorInSeparateThread(int workerId, Uri callbackUri)
        {
            if (callbackUri == null)
            {
                return;
            }

            var t = new Thread(() =>
                {
                    var binding = new BasicHttpBinding();
                    try
                    {
                        using (var csclient = new CSClient.CoordinatorServiceClient(binding, new EndpointAddress(callbackUri)))
                        {
                            var storage = RemoteWorkerService.GetWorker(workerId).Storage;

                            var regex =
                                new Regex(
                                    string.Format(
                                        "^" + Core.Properties.Settings.Default.ReduceOutputFileName + "$",
                                        @"(?<Key>.+)",
                                        "[0-9]+",
                                        RegexExtensions.GuidRegexString));
                            var uris = storage.ListFiles();
                            foreach (var uri in uris)
                            {
                                var fileName = storage.GetFileName(uri);
                                if (regex.IsMatch(fileName))
                                {
                                    var value = storage.Read(fileName);
                                    csclient.AddToStorage(fileName, value);
                                }
                            }
                        }
                    }
                    catch(EndpointNotFoundException)
                    {
                        Console.WriteLine("Coordinator not found!");
                    }
                });

            t.Start();
        }