protected override bool Initialize() { _archiveServiceList.Clear(); // Force a read context to be opened. When developing the retry mechanism // for startup when the DB was down, there were problems when the type // initializer for enumerated values were failng first. For some reason, // when the database went back online, they would still give exceptions. // changed to force the processor to open a dummy DB connect and cause an // exception here, instead of getting to the enumerated value initializer. IList <PartitionArchive> partitionArchiveList = LoadEnabledPartitionArchives(); ImageServerArchiveExtensionPoint ep = new ImageServerArchiveExtensionPoint(); ExtensionInfo[] extensionInfoList = ep.ListExtensions(); foreach (PartitionArchive partitionArchive in partitionArchiveList) { ServerPartition partition = ServerPartition.Load(partitionArchive.ServerPartitionKey); if (!partition.Enabled) { Platform.Log(LogLevel.Info, "Server Partition '{0}' is disabled, not starting PartitionArchive '{1}'", partition.Description, partitionArchive.Description); continue; } if (!partitionArchive.Enabled) { Platform.Log(LogLevel.Info, "PartitionArchive '{0}' is disabled, not starting", partitionArchive.Description); continue; } foreach (ExtensionInfo extensionInfo in extensionInfoList) { IImageServerArchivePlugin archive = (IImageServerArchivePlugin)ep.CreateExtension(new ClassNameExtensionFilter(extensionInfo.FormalName)); if (archive.ArchiveType.Equals(partitionArchive.ArchiveTypeEnum)) { _archiveServiceList.Add(new PartitionArchiveService(archive, partitionArchive, partition)); break; } } } return(true); }
protected override bool Initialize() { _archiveServiceList.Clear(); // Force a read context to be opened. When developing the retry mechanism // for startup when the DB was down, there were problems when the type // initializer for enumerated values were failng first. For some reason, // when the database went back online, they would still give exceptions. // changed to force the processor to open a dummy DB connect and cause an // exception here, instead of getting to the enumerated value initializer. IList<PartitionArchive> partitionArchiveList = LoadEnabledPartitionArchives(); ImageServerArchiveExtensionPoint ep = new ImageServerArchiveExtensionPoint(); ExtensionInfo[] extensionInfoList = ep.ListExtensions(); foreach (PartitionArchive partitionArchive in partitionArchiveList) { ServerPartition partition = ServerPartition.Load(partitionArchive.ServerPartitionKey); if (!partition.Enabled) { Platform.Log(LogLevel.Info, "Server Partition '{0}' is disabled, not starting PartitionArchive '{1}'", partition.Description, partitionArchive.Description); continue; } if (!partitionArchive.Enabled) { Platform.Log(LogLevel.Info, "PartitionArchive '{0}' is disabled, not starting", partitionArchive.Description); continue; } foreach (ExtensionInfo extensionInfo in extensionInfoList) { IImageServerArchivePlugin archive = (IImageServerArchivePlugin) ep.CreateExtension(new ClassNameExtensionFilter(extensionInfo.FormalName)); if (archive.ArchiveType.Equals(partitionArchive.ArchiveTypeEnum)) { _archiveServiceList.Add(new PartitionArchiveService(archive, partitionArchive, partition)); break; } } } return true; }
/// <summary> /// Check the currently configured archives and plugins to see if any have been disabled. /// </summary> private void CheckConfiguredArchives() { IList<ServerPartition> partitionList = LoadPartitions(); lock (_syncLock) { IList<PartitionArchiveService> partitionsToDelete = new List<PartitionArchiveService>(); foreach (PartitionArchiveService archiveService in _archiveServiceList) { archiveService.PartitionArchive = PartitionArchive.Load(archiveService.PartitionArchive.GetKey()); if (!archiveService.PartitionArchive.Enabled) { Platform.Log(LogLevel.Info, "PartitionArchive {0} has been disabled, stopping plugin.", archiveService.PartitionArchive.Description); archiveService.ArchivePlugin.Stop(); partitionsToDelete.Add(archiveService); } else { bool bFound = false; foreach (ServerPartition serverPartition in partitionList) { if (serverPartition.GetKey().Equals(archiveService.ServerPartition.GetKey()) && serverPartition.Enabled) { bFound = true; break; } } if (!bFound) { Platform.Log(LogLevel.Info, "Partition was deleted or disabled, shutting down archive server {0}", archiveService.ServerPartition.Description); archiveService.ArchivePlugin.Stop(); partitionsToDelete.Add(archiveService); } } } // Remove the services from our internal list. foreach (PartitionArchiveService archivePlugin in partitionsToDelete) _archiveServiceList.Remove(archivePlugin); // Load the current extension list ImageServerArchiveExtensionPoint ep = new ImageServerArchiveExtensionPoint(); ExtensionInfo[] extensionInfoList = ep.ListExtensions(); // Scan the current list of enabled partition archives to see if any // new archives have been added foreach (PartitionArchive partitionArchive in LoadEnabledPartitionArchives()) { ServerPartition newPartition = ServerPartition.Load(partitionArchive.ServerPartitionKey); if (!newPartition.Enabled) continue; bool bFound = false; foreach (PartitionArchiveService service in _archiveServiceList) { if (!partitionArchive.GetKey().Equals(service.PartitionArchive.GetKey())) continue; // Reset the context partition, incase its changed. service.PartitionArchive = partitionArchive; bFound = true; break; } if (!bFound) { // No match, scan the current extensions for a matching extension // to run the service foreach (ExtensionInfo extensionInfo in extensionInfoList) { IImageServerArchivePlugin archive = (IImageServerArchivePlugin)ep.CreateExtension(new ClassNameExtensionFilter(extensionInfo.FormalName)); if (archive.ArchiveType.Equals(partitionArchive.ArchiveTypeEnum)) { PartitionArchiveService service = new PartitionArchiveService(archive, partitionArchive, newPartition); Platform.Log(LogLevel.Info, "Detected PartitionArchive was added, starting archive {0}", partitionArchive.Description); service.ArchivePlugin.Start(partitionArchive); _archiveServiceList.Add(service); break; } } } } } }
/// <summary> /// Check the currently configured archives and plugins to see if any have been disabled. /// </summary> private void CheckConfiguredArchives() { IList <ServerPartition> partitionList = LoadPartitions(); lock (_syncLock) { IList <PartitionArchiveService> partitionsToDelete = new List <PartitionArchiveService>(); foreach (PartitionArchiveService archiveService in _archiveServiceList) { archiveService.PartitionArchive = PartitionArchive.Load(archiveService.PartitionArchive.GetKey()); if (!archiveService.PartitionArchive.Enabled) { Platform.Log(LogLevel.Info, "PartitionArchive {0} has been disabled, stopping plugin.", archiveService.PartitionArchive.Description); archiveService.ArchivePlugin.Stop(); partitionsToDelete.Add(archiveService); } else { bool bFound = false; foreach (ServerPartition serverPartition in partitionList) { if (serverPartition.GetKey().Equals(archiveService.ServerPartition.GetKey()) && serverPartition.Enabled) { bFound = true; break; } } if (!bFound) { Platform.Log(LogLevel.Info, "Partition was deleted or disabled, shutting down archive server {0}", archiveService.ServerPartition.Description); archiveService.ArchivePlugin.Stop(); partitionsToDelete.Add(archiveService); } } } // Remove the services from our internal list. foreach (PartitionArchiveService archivePlugin in partitionsToDelete) { _archiveServiceList.Remove(archivePlugin); } // Load the current extension list ImageServerArchiveExtensionPoint ep = new ImageServerArchiveExtensionPoint(); ExtensionInfo[] extensionInfoList = ep.ListExtensions(); // Scan the current list of enabled partition archives to see if any // new archives have been added foreach (PartitionArchive partitionArchive in LoadEnabledPartitionArchives()) { ServerPartition newPartition = ServerPartition.Load(partitionArchive.ServerPartitionKey); if (!newPartition.Enabled) { continue; } bool bFound = false; foreach (PartitionArchiveService service in _archiveServiceList) { if (!partitionArchive.GetKey().Equals(service.PartitionArchive.GetKey())) { continue; } // Reset the context partition, incase its changed. service.PartitionArchive = partitionArchive; bFound = true; break; } if (!bFound) { // No match, scan the current extensions for a matching extension // to run the service foreach (ExtensionInfo extensionInfo in extensionInfoList) { IImageServerArchivePlugin archive = (IImageServerArchivePlugin)ep.CreateExtension(new ClassNameExtensionFilter(extensionInfo.FormalName)); if (archive.ArchiveType.Equals(partitionArchive.ArchiveTypeEnum)) { PartitionArchiveService service = new PartitionArchiveService(archive, partitionArchive, newPartition); Platform.Log(LogLevel.Info, "Detected PartitionArchive was added, starting archive {0}", partitionArchive.Description); service.ArchivePlugin.Start(partitionArchive); _archiveServiceList.Add(service); break; } } } } } }