示例#1
0
        private static void GrainReport(string[] args)
        {
            var grainId = ConstructGrainId(args, "GrainReport");

            var silos = GetSiloAddresses();

            if (silos == null || silos.Count == 0)
            {
                return;
            }

            var reports = new List <DetailedGrainReport>();

            foreach (var silo in silos)
            {
                WriteStatus(string.Format("**Calling GetDetailedGrainReport({0}, {1})", silo, grainId));
                try
                {
                    ISiloControl        siloControl = SiloControlFactory.GetSystemTarget(Constants.SiloControlId, silo);
                    DetailedGrainReport grainReport = siloControl.GetDetailedGrainReport(grainId).Result;
                    reports.Add(grainReport);
                }
                catch (Exception exc)
                {
                    WriteStatus(string.Format("**Failed to get grain report from silo {0}. Exc: {1}", silo, exc.ToString()));
                }
            }
            foreach (var grainReport in reports)
            {
                WriteStatus(grainReport.ToString());
            }

            LookupGrain(args);
        }
示例#2
0
        internal async Task <ConcurrentDictionary <SiloAddress, SiloRuntimeStatistics> > RefreshStatistics()
        {
            if (logger.IsVerbose)
            {
                logger.Verbose("RefreshStatistics.");
            }
            await silo.LocalScheduler.RunOrQueueTask(() =>
            {
                var tasks = new List <Task>();
                List <SiloAddress> members = silo.LocalSiloStatusOracle.GetApproximateSiloStatuses(true).Keys.ToList();
                foreach (var siloAddress in members)
                {
                    var capture = siloAddress;
                    Task task   = SiloControlFactory.GetSystemTarget(Constants.SiloControlId, capture)
                                  .GetRuntimeStatistics()
                                  .ContinueWith((Task <SiloRuntimeStatistics> statsTask) =>
                    {
                        if (statsTask.Status == TaskStatus.RanToCompletion)
                        {
                            UpdateRuntimeStatistics(capture, statsTask.Result);
                        }
                        else
                        {
                            logger.Warn(ErrorCode.Placement_RuntimeStatisticsUpdateFailure_3,
                                        String.Format("An unexpected exception was thrown from RefreshStatistics by ISiloControl.GetRuntimeStatistics({0}). Will keep using stale statistics.", capture),
                                        statsTask.Exception);
                        }
                    });
                    tasks.Add(task);
                    task.Ignore();
                }
                return(Task.WhenAll(tasks));
            }, SchedulingContext);

            return(periodicStats);
        }
示例#3
0
 private ISiloControl GetSiloControlReference(SiloAddress silo)
 {
     return(SiloControlFactory.GetSystemTarget(Constants.SiloControlId, silo));
 }