public void RecoverExistingDroplets() { if (!File.Exists(this.droplets.AppStateFile)) { this.droplets.RecoveredDroplets = true; return; } object[] instances = JsonConvertibleObject.DeserializeFromJsonArray(File.ReadAllText(this.droplets.AppStateFile)); foreach (object obj in instances) { DropletInstance instance = null; try { instance = new DropletInstance(); instance.Properties.FromJsonIntermediateObject(obj); instance.Properties.Orphaned = true; instance.Properties.ResourcesTracked = false; this.monitoring.AddInstanceResources(instance); instance.Properties.StopProcessed = false; var prisonInfo = new ProcessPrisonCreateInfo(); prisonInfo.Id = instance.Properties.InstanceId; prisonInfo.TotalPrivateMemoryLimitBytes = instance.Properties.MemoryQuotaBytes; prisonInfo.WindowsPassword = instance.Properties.WindowsPassword; if (this.useDiskQuota) { prisonInfo.DiskQuotaBytes = instance.Properties.DiskQuotaBytes; prisonInfo.DiskQuotaPath = instance.Properties.Directory; } Logger.Info("Recovering Process Prisson: {0}", prisonInfo.Id); instance.Prison.Attach(prisonInfo); if (instance.Properties.State == DropletInstanceState.Starting) { this.DetectAppReady(instance); } this.droplets.AddDropletInstance(instance); instance = null; } catch (Exception ex) { Logger.Warning(Strings.ErrorRecoveringDropletWarningMessage, instance.Properties.InstanceId, ex.ToString()); } finally { if (instance != null) { instance.Dispose(); } } } this.droplets.RecoveredDroplets = true; if (this.monitoring.Clients > 0) { Logger.Info(Strings.DeaRecoveredApplications, this.monitoring.Clients); } this.MonitorApps(); this.droplets.ForEach(delegate(DropletInstance instance) { this.RegisterInstanceWithRouter(instance); }); this.SendHeartbeat(); this.droplets.ScheduleSnapshotAppState(); }
public void RecoverExistingDroplets() { if (!File.Exists(this.droplets.AppStateFile)) { this.droplets.RecoveredDroplets = true; return; } object[] instances = JsonConvertibleObject.DeserializeFromJsonArray(File.ReadAllText(this.droplets.AppStateFile)); foreach (object obj in instances) { DropletInstance instance = null; try { instance = new DropletInstance(); instance.Properties.FromJsonIntermediateObject(obj); instance.Properties.Orphaned = true; instance.Properties.ResourcesTracked = false; this.monitoring.AddInstanceResources(instance); instance.Properties.StopProcessed = false; instance.JobObject.JobMemoryLimit = instance.Properties.MemoryQuotaBytes; try { instance.LoadPlugin(); instance.Properties.EnvironmentVariables[VcapAppPidVariable] = instance.Properties.ProcessId.ToString(CultureInfo.InvariantCulture); List<ApplicationVariable> appVariables = new List<ApplicationVariable>(); foreach (KeyValuePair<string, string> appEnv in instance.Properties.EnvironmentVariables) { ApplicationVariable appVariable = new ApplicationVariable(); appVariable.Name = appEnv.Key; appVariable.Value = appEnv.Value; appVariables.Add(appVariable); } instance.Plugin.RecoverApplication(appVariables.ToArray()); } catch (Exception ex) { instance.ErrorLog.Error(ex.ToString()); } if (instance.Properties.State == DropletInstanceState.Starting) { this.DetectAppReady(instance); } this.droplets.AddDropletInstance(instance); instance = null; } catch (Exception ex) { Logger.Warning(Strings.ErrorRecoveringDropletWarningMessage, instance.Properties.InstanceId, ex.ToString()); } finally { if (instance != null) { instance.Dispose(); } } } this.droplets.RecoveredDroplets = true; if (this.monitoring.Clients > 0) { Logger.Info(Strings.DeaRecoveredApplications, this.monitoring.Clients); } this.MonitorApps(); this.droplets.ForEach(delegate(DropletInstance instance) { this.RegisterInstanceWithRouter(instance); }); this.SendHeartbeat(); this.droplets.ScheduleSnapshotAppState(); }