Пример #1
0
        public void ReloadAllResources(string dumpingKey = null)
        {
            PFX.Task.Factory.StartNew(() =>
            {
                _resourcesLock.EnterWriteLock(); // the only update (i.e. write) to resources

                try
                {
                    Log.Info("Reloading resources for controller");
                    Console.WriteLine("Reloading resources for controller");

                    TaskCache.DumpAllTasks();

                    var resourceBase = new ResourceBaseServiceClient();

                    try
                    {
                        string farmId = Config.AppSettings[FARMID_PARAM_NAME];

                        var resources = resourceBase.GetResourcesForFarm(farmId, dumpingKey); // waits all other dumps
                        resourceBase.Close();

                        string[] resourceNames = resources.Select(r => r.ResourceName).ToArray();
                        Log.Info("Resources to reload for farm " + farmId + ": " + String.Join(", ", resourceNames));

                        ResourceCache.ReloadResources(resources);
                        TaskCache.RestoreTasks(resourceNames);
                        //TaskCache.ReloadTasks(resourceNames);

                        PFX.Parallel.ForEach(resourceNames, (name) =>
                        {
                            ResourceCache.UpdateNodesState(name);
                        });

                        Log.Info("Resource reloading done for farm " + farmId);
                    }
                    catch (Exception e)
                    {
                        resourceBase.Abort();
                        Log.Error("Exception on reloading resources: " + e.ToString());
                        throw;
                    }
                }
                finally
                {
                    _resourcesLock.ExitWriteLock();
                }
            });
        }
Пример #2
0
        public void ReloadAllResources(string dumpingKey = null)
        {
            PFX.Task.Factory.StartNew(() =>
            {
                _resourcesLock.EnterWriteLock(); // the only update (i.e. write) to resources

                try
                {
                    Log.Info("Reloading resources for controller");
                    Console.WriteLine("Reloading resources for controller");

                    TaskCache.DumpAllTasks();

                    var resourceBase = new ResourceBaseServiceClient();

                    try
                    {
                        string farmId = Config.AppSettings[FARMID_PARAM_NAME];

                        var resources = resourceBase.GetResourcesForFarm(farmId, dumpingKey); // waits all other dumps
                        resourceBase.Close();

                        string[] resourceNames = resources.Select(r => r.ResourceName).ToArray();
                        Log.Info("Resources to reload for farm " + farmId + ": " + String.Join(", ", resourceNames));

                        ResourceCache.ReloadResources(resources);
                        TaskCache.RestoreTasks(resourceNames);
                        //TaskCache.ReloadTasks(resourceNames);

                        PFX.Parallel.ForEach(resourceNames, (name) =>
                        {
                            ResourceCache.UpdateNodesState(name);
                        });

                        Log.Info("Resource reloading done for farm " + farmId);
                    }
                    catch (Exception e)
                    {
                        resourceBase.Abort();
                        Log.Error("Exception on reloading resources: " + e.ToString());
                        throw;
                    }
                }
                finally
                {
                    _resourcesLock.ExitWriteLock();
                }
            });
        }