Changeset 5093
- Timestamp:
- 12/13/10 14:13:15 (14 years ago)
- Location:
- branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive
- Files:
-
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive 3.3.sln ¶
r5069 r5093 75 75 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Slave.ExecutionEngine-3.3", "HeuristicLab.Hive.Slave.ExecutionEngine\3.3\HeuristicLab.Hive.Slave.ExecutionEngine-3.3.csproj", "{1605256A-1CB3-44AB-AAFF-577093EE5789}" 76 76 EndProject 77 Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Hive Web", "HiveWeb\Hive-3.3\", "{590AD383-846B-48FF-8D06-B0AA1B328102}"77 Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Hive-3.3", "HiveWeb\Hive-3.3\", "{590AD383-846B-48FF-8D06-B0AA1B328102}" 78 78 ProjectSection(WebsiteProperties) = preProject 79 79 TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0" … … 93 93 Release.AspNetCompiler.FixedNames = "false" 94 94 Release.AspNetCompiler.Debug = "False" 95 VWDPort = "3 220"95 VWDPort = "39028" 96 96 EndProjectSection 97 97 EndProject -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ApplicationConstants.cs ¶
r4914 r5093 31 31 /// ReadUncommitted to minimize deadlocks. 32 32 /// </summary> 33 public static System.Transactions.IsolationLevel ISOLATION_LEVEL_SCOPE = System.Transactions.IsolationLevel.Read Uncommitted;33 public static System.Transactions.IsolationLevel ISOLATION_LEVEL_SCOPE = System.Transactions.IsolationLevel.ReadCommitted; 34 34 35 35 public static int HEARTBEAT_MAX_DIF = 120; // value in seconds 36 36 37 public static int JOB_TIME_TO_LIVE = 5;37 public static int JOB_TIME_TO_LIVE = 20; 38 38 39 39 /// <summary> -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ILifecycleManager.cs ¶
r5000 r5093 50 50 event EventHandler Stopped; 51 51 52 IEnumerable<PluginDescription> Plugins { get;} 52 IEnumerable<PluginDescription> Plugins { get; } 53 54 Dictionary<Guid, DateTime> LastHeartbeats { get; } 55 56 Dictionary<Guid, int> NewAssignedJobs { get; } 57 58 Dictionary<Guid, int> PendingJobs { get; } 53 59 54 60 byte[] ConfigurationFile { get; } -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/HeuristicLab.Hive.ExperimentManager-3.3.csproj ¶
r5054 r5093 121 121 <SubType>Designer</SubType> 122 122 </None> 123 <None Include="f005pc.hagenberg.fhooe.at - app.config"> 124 <SubType>Designer</SubType> 125 </None> 123 126 <None Include="HeuristicLabHiveExperimentManagerPlugin.cs.frame" /> 124 127 <Compile Include="Exceptions\AddJobToHiveException.cs" /> -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/app.config ¶
r5000 r5093 29 29 </bindings> 30 30 <client> 31 <endpoint address="net.tcp:// localhost:9001/Hive/ClientService.svc" binding="netTcpBinding" bindingConfiguration="ClientTcpStreamedEndpoint" contract="HeuristicLab.Hive.Contracts.Interfaces.IClientFacade" name="ClientTcpStreamedEndpoint">31 <endpoint address="net.tcp://services.heuristiclab.com:8000/Hive-3.3/ClientService.svc" binding="netTcpBinding" bindingConfiguration="ClientTcpStreamedEndpoint" contract="HeuristicLab.Hive.Contracts.Interfaces.IClientFacade" name="ClientTcpStreamedEndpoint"> 32 32 <identity> 33 <dns value=" localhost"/>33 <dns value="services.heuristiclab.com"/> 34 34 </identity> 35 35 </endpoint> 36 <endpoint address="http:// localhost:9000/Hive/ClientService.svc" binding="wsHttpBinding" bindingConfiguration="ClientHttpEndpoint" contract="HeuristicLab.Hive.Contracts.Interfaces.IClientFacade" name="ClientHttpEndpoint">36 <endpoint address="http://services.heuristiclab.com/Hive-3.3/ClientService.svc" binding="wsHttpBinding" bindingConfiguration="ClientHttpEndpoint" contract="HeuristicLab.Hive.Contracts.Interfaces.IClientFacade" name="ClientHttpEndpoint"> 37 37 <identity> 38 <certificate encodedValue="AwAAAAEAAAAUAAAA fEKvcVixnJay+q4hCPFuO0JL5TQgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhCNN5wrUcXMmE/9xwp4TYa9MAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMTAxOTEwNTMxNVoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXwC5TGcAffd/0oAWHtm0s6YXVXEgXgb1AYmBkkkhkKIFJG/e/Z0KSYbJepmSJD44W3oOAVm+x1DAsZxU79HahDYgWCuHLMm1TLpwSmYOQ0kV3pGHWHhiWV7h7oGLds/eqZ2EOpaNGryfEPnrA4VmxY91vV5/2BTeVSWG6F8lRKQIDAQABo0kwRzBFBgNVHQEEPjA8gBAR7kBnMRHO5gzThEqda0wWoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghCNN5wrUcXMmE/9xwp4TYa9MAkGBSsOAwIdBQADgYEAoPwEG4QTDXhlxERNDfsZmM2IhEpV42ppz1kEah2oYKDa/ElIMVtvqLv6flVtg18ENN/mEJWiHZ3NyP3qr2Pip+sh+/2WBiSbOaukES/CM7OJn9kJCImH7M/xqM8pxqY8IfgM6iBVrVj9uHqj3j2BBck+cYY8fKyh3CFifMIp6ac="/>38 <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ=="/> 39 39 </identity> 40 40 </endpoint> 41 41 </client> 42 42 43 43 </system.serviceModel> 44 44 <startup><supportedRuntime version="v2.0.50727"/></startup></configuration> -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HeuristicLab.Hive.Server.Console-3.3.csproj ¶
r5054 r5093 140 140 <Compile Include="Changes.cs" /> 141 141 <None Include="app.config" /> 142 <None Include="f005pc.hagenberg.fhooe.at - app.config" /> 142 143 <None Include="HeuristicLabHiveClientConsolePlugin.cs.frame" /> 143 144 <Compile Include="HiveServerConsole.cs"> -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/app.config ¶
r5000 r5093 26 26 </bindings> 27 27 <client> 28 <endpoint address="http:// localhost:9000/Hive/ServerConsoleService.svc" behaviorConfiguration="ServerConsoleBehaviour" binding="wsHttpBinding" bindingConfiguration="ServerConsoleHttpEndpoint" contract="HeuristicLab.Hive.Contracts.Interfaces.IServerConsoleFacade" name="ServerConsoleHttpEndpoint">28 <endpoint address="http://services.heuristiclab.com/Hive-3.3/ServerConsoleService.svc" behaviorConfiguration="ServerConsoleBehaviour" binding="wsHttpBinding" bindingConfiguration="ServerConsoleHttpEndpoint" contract="HeuristicLab.Hive.Contracts.Interfaces.IServerConsoleFacade" name="ServerConsoleHttpEndpoint"> 29 29 <identity> 30 <certificate encodedValue="AwAAAAEAAAAUAAAA fEKvcVixnJay+q4hCPFuO0JL5TQgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhCNN5wrUcXMmE/9xwp4TYa9MAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMTAxOTEwNTMxNVoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXwC5TGcAffd/0oAWHtm0s6YXVXEgXgb1AYmBkkkhkKIFJG/e/Z0KSYbJepmSJD44W3oOAVm+x1DAsZxU79HahDYgWCuHLMm1TLpwSmYOQ0kV3pGHWHhiWV7h7oGLds/eqZ2EOpaNGryfEPnrA4VmxY91vV5/2BTeVSWG6F8lRKQIDAQABo0kwRzBFBgNVHQEEPjA8gBAR7kBnMRHO5gzThEqda0wWoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghCNN5wrUcXMmE/9xwp4TYa9MAkGBSsOAwIdBQADgYEAoPwEG4QTDXhlxERNDfsZmM2IhEpV42ppz1kEah2oYKDa/ElIMVtvqLv6flVtg18ENN/mEJWiHZ3NyP3qr2Pip+sh+/2WBiSbOaukES/CM7OJn9kJCImH7M/xqM8pxqY8IfgM6iBVrVj9uHqj3j2BBck+cYY8fKyh3CFifMIp6ac="/>30 <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ=="/> 31 31 </identity> 32 32 </endpoint> -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/CreateHiveDatabaseApplication.cs ¶
r4424 r5093 25 25 26 26 namespace HeuristicLab.Hive.Server.Core { 27 [Application("Create Hive Database", "Creates new empty Hive Database.", true)]27 [Application("Create Hive-3.3 Database", "Creates new empty Hive Database.", true)] 28 28 class CreateHiveDatabaseApplication : ApplicationBase { 29 29 … … 38 38 } 39 39 } 40 41 [Application("Test something")] 42 class TestApplication : ApplicationBase { 43 44 public override void Run() { 45 IContextFactory contextFactory = ServiceLocator.GetContextFactory(); 46 using (contextFactory.GetContext(false)) { 47 var job = DaoLocator.JobDao.FindWithLimitations(Contracts.BusinessObjects.JobState.Offline, 0, 1); 48 49 var jobs = DaoLocator.JobDao.FindAll(); 50 51 } 52 } 53 } 40 54 } -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DefaultScheduler.cs ¶
r4424 r5093 47 47 /// Critical section /// 48 48 JobDto jobToCalculate = null; 49 using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE})) {49 using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })) { 50 50 SlaveDto slave = DaoLocator.SlaveDao.FindById(slaveId); 51 51 -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/JobManager.cs ¶
r4710 r5093 50 50 Logger.Info("Searching for dead Jobs"); 51 51 52 List<JobDto> allJobs = new List<JobDto>(DaoLocator.JobDao.FindAll());52 IEnumerable<JobDto> allJobs = DaoLocator.JobDao.FindAll(); 53 53 foreach (JobDto curJob in allJobs) { 54 54 if (curJob.State != JobState.Calculating && … … 69 69 70 70 private void lifecycleManager_Stopped(object sender, EventArgs e) { 71 Logger.Info("St artupEvent Fired, Checking DB for consistency");71 Logger.Info("Stopped Event Fired, Checking DB for consistency"); 72 72 CheckForDeadJobs(); 73 Logger.Info("St artupEvent Done");73 Logger.Info("Stopped Event Done"); 74 74 } 75 75 … … 276 276 /// </summary> 277 277 public Response AbortJob(Guid jobId) { 278 Logger.Debug("JobManager.AbortJob: " + jobId); 278 279 Response response = new Response(); 279 280 -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/LifecycleManager.cs ¶
r5000 r5093 35 35 private bool shutdownRequested; 36 36 private PluginManager pm; 37 38 private Dictionary<Guid, DateTime> lastHeartbeats = new Dictionary<Guid, DateTime>(); 39 public Dictionary<Guid, DateTime> LastHeartbeats { 40 get { return lastHeartbeats; } 41 } 42 43 /// <summary> 44 /// Contains a list job JobIds which have been sent to a slave, but the slave has not yet sent 45 /// a jobProgress of the job with a heartbeat, because he has not finished downloading/deserializing it. 46 /// The number value indicates a TimeToLive count that is decremented with each server-heartbeat. 47 /// When the number reaches zero, the jobs is assumed to be lost and is set Offline again. 48 /// </summary> 49 private Dictionary<Guid, int> newAssignedJobs = new Dictionary<Guid, int>(); 50 public Dictionary<Guid, int> NewAssignedJobs { 51 get { return newAssignedJobs; } 52 } 53 54 /// <summary> 55 /// When a slave reconnects and he has finished results waiting it calls IsJobStillNeeded. If the finished 56 /// result has not yet been collected from anywhere else, the job will be sent by the slave and the job state is set to Pending. 57 /// Now the job be in pending state until it is received from the reconnected slave or the TimeToLive value of this dictionary has reached zero. 58 /// </summary> 59 private Dictionary<Guid, int> pendingJobs = new Dictionary<Guid, int>(); 60 public Dictionary<Guid, int> PendingJobs { 61 get { return pendingJobs; } 62 } 37 63 38 64 private TimeSpan interval = new TimeSpan(0, 0, 10); -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveCommunicator.cs ¶
r5000 r5093 36 36 using HeuristicLab.Hive.Tracing; 37 37 using HeuristicLab.PluginInfrastructure.Manager; 38 using System.Web; 39 using System.Web.SessionState; 38 40 39 41 namespace HeuristicLab.Hive.Server.Core { … … 42 44 /// </summary> 43 45 public class SlaveCommunicator : ISlaveCommunicator, IInternalSlaveCommunicator { 44 private static Dictionary<Guid, DateTime> lastHeartbeats = new Dictionary<Guid, DateTime>();45 46 /// <summary>47 /// Contains a list job JobIds which have been sent to a slave, but the slave has not yet sent48 /// a jobProgress of the job with a heartbeat, because he has not finished downloading/deserializing it.49 /// The number value indicates a TimeToLive count that is decremented with each server-heartbeat.50 /// When the number reaches zero, the jobs is assumed to be lost and is set Offline again.51 /// </summary>52 private static Dictionary<Guid, int> newAssignedJobs = new Dictionary<Guid, int>();53 54 /// <summary>55 /// When a slave reconnects and he has finished results waiting it calls IsJobStillNeeded. If the finished56 /// result has not yet been collected from anywhere else, the job will be sent by the slave and the job state is set to Pending.57 /// Now the job be in pending state until it is received from the reconnected slave or the TimeToLive value of this dictionary has reached zero.58 /// </summary>59 private static Dictionary<Guid, int> pendingJobs = new Dictionary<Guid, int>();60 46 private static int PENDING_TIMEOUT = 100; 61 47 … … 74 60 /// </summary> 75 61 public SlaveCommunicator() { 62 Logger.Debug("ServiceCommunicator instantiated"); 76 63 lifecycleManager = ServiceLocator.GetLifecycleManager(); 77 64 jobManager = ServiceLocator.GetJobManager() as IInternalJobManager; … … 97 84 SlaveDto slave = DaoLocator.SlaveDao.FindById(slaveId); 98 85 99 if (!l astHeartbeats.ContainsKey(slave.Id)) {100 Logger.Info("No previous hearbeats are available for " + slave. Id + "although it is in state " + slave.State);86 if (!lifecycleManager.LastHeartbeats.ContainsKey(slave.Id)) { 87 Logger.Info("No previous hearbeats are available for " + slave.Name + "(" + slave.Id + "), although it is in state " + slave.State); 101 88 102 89 // add a heartbeat NOW and give the slave time to say something for HEARTBEAT_MAX_DIF 103 90 // otherwise alls the slaves jobs would be aborted, which is not desirable if the server has just been restarted 104 91 heartbeatLock.EnterWriteLock(); 105 l astHeartbeats.Add(slave.Id, DateTime.Now);92 lifecycleManager.LastHeartbeats.Add(slave.Id, DateTime.Now); 106 93 heartbeatLock.ExitWriteLock(); 107 94 } else { 108 DateTime lastHeartbeatOfSlave = l astHeartbeats[slave.Id];95 DateTime lastHeartbeatOfSlave = lifecycleManager.LastHeartbeats[slave.Id]; 109 96 110 97 TimeSpan diff = DateTime.Now.Subtract(lastHeartbeatOfSlave); … … 112 99 if (diff.TotalSeconds > ApplicationConstants.HEARTBEAT_MAX_DIF) { 113 100 // if slave calculated jobs, the job must be reset 114 Logger.Info("Slave timed out and is on RESET ");101 Logger.Info("Slave timed out and is on RESET (no message for " + diff.TotalSeconds + " seconds.)"); 115 102 foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfSlave(slave)) { 116 103 DaoLocator.JobDao.SetJobOffline(job); 117 lock ( newAssignedJobs) {118 if ( newAssignedJobs.ContainsKey(job.Id))119 newAssignedJobs.Remove(job.Id);104 lock (lifecycleManager.NewAssignedJobs) { 105 if (lifecycleManager.NewAssignedJobs.ContainsKey(job.Id)) 106 lifecycleManager.NewAssignedJobs.Remove(job.Id); 120 107 } 121 108 } … … 127 114 Logger.Debug("removing it from the heartbeats list"); 128 115 heartbeatLock.EnterWriteLock(); 129 l astHeartbeats.Remove(slave.Id);116 lifecycleManager.LastHeartbeats.Remove(slave.Id); 130 117 heartbeatLock.ExitWriteLock(); 131 118 } … … 148 135 149 136 foreach (JobDto currJob in pendingJobsInDb) { 150 lock ( pendingJobs) {151 if ( pendingJobs.ContainsKey(currJob.Id)) {152 if ( pendingJobs[currJob.Id] <= 0) {137 lock (lifecycleManager.PendingJobs) { 138 if (lifecycleManager.PendingJobs.ContainsKey(currJob.Id)) { 139 if (lifecycleManager.PendingJobs[currJob.Id] <= 0) { 153 140 currJob.State = JobState.Offline; 154 141 DaoLocator.JobDao.Update(currJob); 155 142 } else { 156 pendingJobs[currJob.Id]--;143 lifecycleManager.PendingJobs[currJob.Id]--; 157 144 } 158 145 } … … 173 160 174 161 heartbeatLock.EnterWriteLock(); 175 if (l astHeartbeats.ContainsKey(slave.Id)) {176 l astHeartbeats[slave.Id] = DateTime.Now;162 if (lifecycleManager.LastHeartbeats.ContainsKey(slave.Id)) { 163 lifecycleManager.LastHeartbeats[slave.Id] = DateTime.Now; 177 164 } else { 178 l astHeartbeats.Add(slave.Id, DateTime.Now);165 lifecycleManager.LastHeartbeats.Add(slave.Id, DateTime.Now); 179 166 } 180 167 heartbeatLock.ExitWriteLock(); … … 247 234 using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE })) { 248 235 SlaveDto slave = UpdateSlaveData(heartbeatData); 236 DaoLocator.SlaveDao.Update(slave); 237 249 238 SaveTimestamp(heartbeatData); 250 239 251 240 //ProcessJobProgress(heartbeatData, response); 252 241 response.ActionRequest = ProcessJobProgress(heartbeatData); 253 242 254 243 //check if new Cal must be loaded 255 244 if (slave.CalendarSyncStatus == CalendarState.Fetch || slave.CalendarSyncStatus == CalendarState.ForceFetch) { … … 270 259 } 271 260 272 DaoLocator.SlaveDao.Update(slave);273 261 scope.Complete(); 274 262 } … … 286 274 } 287 275 288 private staticvoid SaveTimestamp(HeartBeatData heartbeatData) {276 private void SaveTimestamp(HeartBeatData heartbeatData) { 289 277 heartbeatLock.EnterWriteLock(); 290 if (l astHeartbeats.ContainsKey(heartbeatData.SlaveId)) {291 l astHeartbeats[heartbeatData.SlaveId] = DateTime.Now;278 if (lifecycleManager.LastHeartbeats.ContainsKey(heartbeatData.SlaveId)) { 279 lifecycleManager.LastHeartbeats[heartbeatData.SlaveId] = DateTime.Now; 292 280 } else { 293 l astHeartbeats.Add(heartbeatData.SlaveId, DateTime.Now);281 lifecycleManager.LastHeartbeats.Add(heartbeatData.SlaveId, DateTime.Now); 294 282 } 295 283 heartbeatLock.ExitWriteLock(); … … 316 304 317 305 // find all the jobs in jobProgress which are not in the database -> they are not supposed to be calculated by this slave 318 IEnumerable<Guid> jobsToAbort = GetJobsNotInDatabase(heartbeatData.SlaveId, heartbeatData.JobProgress.Keys); 319 foreach (Guid jobId in jobsToAbort) { 320 actions.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, jobId)); 321 heartbeatData.JobProgress.Remove(jobId); 322 } 306 //IEnumerable<Guid> jobsToAbort = GetJobsNotCalculatedByThisSlave(heartbeatData.SlaveId, heartbeatData.JobProgress.Keys); 307 //foreach (Guid jobId in jobsToAbort) { 308 // Logger.Error("Job shall not be caculated by this slave or does not exist in DB: " + jobId); 309 // actions.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, jobId)); 310 // heartbeatData.JobProgress.Remove(jobId); 311 //} 323 312 324 313 // process all the remaining jobProgresses … … 327 316 if (curJob == null) { 328 317 // job does not exist in db 318 Logger.Error("Job does not exist in DB: " + jobProgress.Key); 329 319 actions.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, jobProgress.Key)); 330 Logger.Error("Job does not exist in DB: " + jobProgress.Key);331 320 } else { 332 321 curJob.Slave = DaoLocator.SlaveDao.GetSlaveForJob(curJob.Id); 322 Guid id = curJob.Slave != null ? curJob.Slave.Id : Guid.Empty; 333 323 if (curJob.Slave == null || curJob.Slave.Id != heartbeatData.SlaveId) { 334 324 // assigned slave does not match heartbeat 325 Logger.Error("The slave " + heartbeatData.SlaveId + " is not supposed to calculate Job: " + curJob.ToString()); 335 326 actions.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id)); 336 Logger.Error("The slave " + heartbeatData.SlaveId + " is not supposed to calculate Job: " + curJob);337 327 } else { 338 328 // save job execution time … … 341 331 if (curJob.State == JobState.Aborted) { 342 332 // a request to abort the job has been set 333 Logger.Error("Job is in state aborted, send AbortJob: " + curJob.Id); 343 334 actions.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id)); 344 335 } else if (curJob.State == JobState.SnapshotRequested) { … … 355 346 foreach (JobDto currJob in jobsOfSlave) { 356 347 if (heartbeatData.JobProgress.ContainsKey(currJob.Id)) { 357 lock ( newAssignedJobs) {358 if ( newAssignedJobs.ContainsKey(currJob.Id)) {348 lock (lifecycleManager.NewAssignedJobs) { 349 if (lifecycleManager.NewAssignedJobs.ContainsKey(currJob.Id)) { 359 350 Logger.Info("Job is sending a heart beat, removing it from the newAssignedJobList: " + currJob); 360 newAssignedJobs.Remove(currJob.Id);351 lifecycleManager.NewAssignedJobs.Remove(currJob.Id); 361 352 } 362 353 } 363 354 } else { 364 lock ( newAssignedJobs) {365 if ( newAssignedJobs.ContainsKey(currJob.Id)) {366 newAssignedJobs[currJob.Id]--;367 Logger.Error("Job TTL Reduced by one for job: " + currJob + "and is now: " + newAssignedJobs[currJob.Id] + ". User that sucks: " + currJob.Slave);368 if ( newAssignedJobs[currJob.Id] <= 0) {355 lock (lifecycleManager.NewAssignedJobs) { 356 if (lifecycleManager.NewAssignedJobs.ContainsKey(currJob.Id)) { 357 lifecycleManager.NewAssignedJobs[currJob.Id]--; 358 Logger.Error("Job TTL Reduced by one for job: " + currJob + "and is now: " + lifecycleManager.NewAssignedJobs[currJob.Id] + ". User that sucks: " + currJob.Slave); 359 if (lifecycleManager.NewAssignedJobs[currJob.Id] <= 0) { 369 360 Logger.Error("Job TTL reached Zero, Job gets removed: " + currJob + " and set back to offline. User that sucks: " + currJob.Slave); 370 361 … … 374 365 actions.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, currJob.Id)); 375 366 376 newAssignedJobs.Remove(currJob.Id);367 lifecycleManager.NewAssignedJobs.Remove(currJob.Id); 377 368 } 378 369 } else { … … 388 379 389 380 /// <summary> 390 /// Returns the jobIds of the jobs which are not assigned to this slave in the database 391 /// </summary> 392 private IEnumerable<Guid> GetJobsNot InDatabase(Guid slaveId, IEnumerable<Guid> jobIds) {381 /// Returns the jobIds of the jobs which are not assigned to this slave in the database (they either are not stored in DB or they are assigned 382 /// </summary> 383 private IEnumerable<Guid> GetJobsNotCalculatedByThisSlave(Guid slaveId, IEnumerable<Guid> jobIds) { 393 384 IEnumerable<Guid> activeJobsOfSlave = DaoLocator.JobDao.FindActiveJobsOfSlave(DaoLocator.SlaveDao.FindById(slaveId)).Select(j => j.Id); 394 385 return jobIds.Except(activeJobsOfSlave).ToList(); … … 520 511 521 512 Logger.Info("Job pulled: " + job2Calculate + " for user " + slaveId); 522 lock ( newAssignedJobs) {523 if (! newAssignedJobs.ContainsKey(job2Calculate.Id))524 newAssignedJobs.Add(job2Calculate.Id, ApplicationConstants.JOB_TIME_TO_LIVE);513 lock (lifecycleManager.NewAssignedJobs) { 514 if (!lifecycleManager.NewAssignedJobs.ContainsKey(job2Calculate.Id)) 515 lifecycleManager.NewAssignedJobs.Add(job2Calculate.Id, ApplicationConstants.JOB_TIME_TO_LIVE); 525 516 } 526 517 } else { … … 701 692 702 693 heartbeatLock.EnterWriteLock(); 703 if (l astHeartbeats.ContainsKey(slaveId))704 l astHeartbeats.Remove(slaveId);694 if (lifecycleManager.LastHeartbeats.ContainsKey(slaveId)) 695 lifecycleManager.LastHeartbeats.Remove(slaveId); 705 696 heartbeatLock.ExitWriteLock(); 706 697 … … 745 736 } 746 737 job.State = JobState.Pending; 747 lock ( pendingJobs) {748 pendingJobs.Add(job.Id, PENDING_TIMEOUT);738 lock (lifecycleManager.PendingJobs) { 739 lifecycleManager.PendingJobs.Add(job.Id, PENDING_TIMEOUT); 749 740 } 750 741 … … 765 756 if (ipd != null) { 766 757 response.List.Add(ConvertPluginDescriptorToDto(ipd)); 767 } else {768 response.StatusMessage = ResponseStatus.GetPlugins_PluginsNotAvailable;769 return response;770 758 } 771 759 } -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs ¶
r5037 r5093 40 40 41 41 public IEnumerable<JobDto> FindAll() { 42 return (from job in Context.Jobs 43 select EntityToDto(job, null)).ToList(); 42 return (from job in Context.Jobs select EntityToDto(job, null)).ToArray(); 44 43 } 45 44 … … 142 141 public IEnumerable<JobDto> FindJobsWithFinishedChilds(Guid slaveId) { 143 142 SlaveGroupDao cgd = new SlaveGroupDao(); 144 143 145 144 List<Guid> idList = new List<Guid>(cgd.FindAllGroupAndParentGroupIdsForSlave(slaveId)); 146 145 //Add myself too - enables jobs for one specific host! … … 151 150 (from child in Context.Jobs 152 151 where child.ParentJobId == ar.Job.JobId 153 select 152 select 154 153 (child.JobState == Enum.GetName(typeof(JobState), JobState.Finished) || 155 154 child.JobState == Enum.GetName(typeof(JobState), JobState.Failed) || … … 258 257 target.ParentJobId = source.ParentJobId; 259 258 259 260 260 foreach (Guid assignRessourceId in source.AssignedResourceIds) { 261 261 if (!target.AssignedResources.Select(x => x.ResourceId).Contains(assignRessourceId)) { -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLab.Hive.Slave.Communication-3.3.csproj ¶
r5054 r5093 111 111 </ItemGroup> 112 112 <ItemGroup> 113 <None Include="app.config"> 113 <None Include="app.config" /> 114 <None Include="f005pc.hagenberg.fhooe.at - app.config"> 114 115 <SubType>Designer</SubType> 115 116 </None> -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/WcfService.cs ¶
r5037 r5093 129 129 #region PullJob 130 130 public event System.EventHandler<GetJobCompletedEventArgs> GetJobCompleted; 131 public event System.EventHandler<EventArgs<Exception>> GetJobFailed; 131 132 public void GetJobAsync(Guid guid) { 132 133 Disposable<SlaveFacade.ISlaveFacade> service = ServiceLocator.Instance.StreamedSlaveFacadePool.GetService(); … … 159 160 catch (Exception e) { 160 161 OnExceptionOccured(e); 162 if (GetJobFailed != null) 163 GetJobFailed(this, new EventArgs<Exception>(e)); 161 164 } 162 165 finally { -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/app.config ¶
r5000 r5093 27 27 </bindings> 28 28 <client> 29 <endpoint address="http:// localhost:9000/Hive/SlaveService.svc" binding="wsHttpBinding" bindingConfiguration="SlaveHttpEndpoint" contract="SlaveFacade.ISlaveFacade" name="SlaveHttpEndpoint">29 <endpoint address="http://services.heuristiclab.com/Hive-3.3/SlaveService.svc" binding="wsHttpBinding" bindingConfiguration="SlaveHttpEndpoint" contract="SlaveFacade.ISlaveFacade" name="SlaveHttpEndpoint"> 30 30 <identity> 31 <certificate encodedValue="AwAAAAEAAAAUAAAA fEKvcVixnJay+q4hCPFuO0JL5TQgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhCNN5wrUcXMmE/9xwp4TYa9MAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMTAxOTEwNTMxNVoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXwC5TGcAffd/0oAWHtm0s6YXVXEgXgb1AYmBkkkhkKIFJG/e/Z0KSYbJepmSJD44W3oOAVm+x1DAsZxU79HahDYgWCuHLMm1TLpwSmYOQ0kV3pGHWHhiWV7h7oGLds/eqZ2EOpaNGryfEPnrA4VmxY91vV5/2BTeVSWG6F8lRKQIDAQABo0kwRzBFBgNVHQEEPjA8gBAR7kBnMRHO5gzThEqda0wWoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghCNN5wrUcXMmE/9xwp4TYa9MAkGBSsOAwIdBQADgYEAoPwEG4QTDXhlxERNDfsZmM2IhEpV42ppz1kEah2oYKDa/ElIMVtvqLv6flVtg18ENN/mEJWiHZ3NyP3qr2Pip+sh+/2WBiSbOaukES/CM7OJn9kJCImH7M/xqM8pxqY8IfgM6iBVrVj9uHqj3j2BBck+cYY8fKyh3CFifMIp6ac="/>31 <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ=="/> 32 32 </identity> 33 33 </endpoint> 34 <endpoint address="net.tcp:// localhost:9001/Hive/SlaveService.svc" binding="netTcpBinding" bindingConfiguration="SlaveTcpStreamedEndpoint" contract="SlaveFacade.ISlaveFacade" name="SlaveTcpStreamedEndpoint">34 <endpoint address="net.tcp://services.heuristiclab.com:8000/Hive-3.3/SlaveService.svc" binding="netTcpBinding" bindingConfiguration="SlaveTcpStreamedEndpoint" contract="SlaveFacade.ISlaveFacade" name="SlaveTcpStreamedEndpoint"> 35 35 <identity> 36 <dns value=" localhost"/>36 <dns value="services.heuristiclab.com"/> 37 37 </identity> 38 38 </endpoint> 39 39 </client> 40 40 </system.serviceModel> 41 <startup><supportedRuntime version="v2.0.50727"/></startup></configuration> 41 <startup> 42 <supportedRuntime version="v2.0.50727"/> 43 </startup> 44 </configuration> -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLab.Hive.Slave.Console-3.3.csproj ¶
r5054 r5093 79 79 </PropertyGroup> 80 80 <ItemGroup> 81 <Reference Include="HeuristicLab.Clients.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 82 <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Clients.Common-3.3.dll</HintPath> 83 </Reference> 81 84 <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL"> 82 85 <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath> … … 204 207 <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project> 205 208 <Name>HeuristicLab.Hive.Contracts-3.3</Name> 209 </ProjectReference> 210 <ProjectReference Include="..\..\HeuristicLab.Hive.Slave.Core\3.3\HeuristicLab.Hive.Slave.Core-3.3.csproj"> 211 <Project>{5010BD86-23B7-4F8C-888A-76D21AD5266A}</Project> 212 <Name>HeuristicLab.Hive.Slave.Core-3.3</Name> 206 213 </ProjectReference> 207 214 </ItemGroup> -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/LogServiceReader.cs ¶
r5037 r5093 6 6 using HeuristicLab.Core; 7 7 using HeuristicLab.Hive.Slave.Console.SlaveConsoleService; 8 using HeuristicLab.Clients.Common; 8 9 9 10 namespace HeuristicLab.Hive.Slave.Console { … … 25 26 void timer_Tick(object sender, EventArgs e) { 26 27 try { 27 using (var slaveClient = new SlaveConsoleCommunicatorClient()) { 28 var messages = slaveClient.GetLogMessages(); 29 if (messages.Count < messageCount) { 30 messageCount = 0; // log got cleared 28 using (var slaveClient = ClientFactory.CreateClient<ISlaveConsoleCommunicator>("SlaveConsoleTcpEndpointClient")) { 29 try { 30 var messages = slaveClient.Obj.GetLogMessages(); 31 if (messages.Count < messageCount) { 32 messageCount = 0; // log got cleared 33 } 34 var newMessages = messages.GetRange(messageCount, messages.Count - messageCount); 35 messageCount = messages.Count; 36 OnMoreData(newMessages); 37 31 38 } 32 var newMessages = messages.GetRange(messageCount, messages.Count - messageCount);33 messageCount = messages.Count;34 OnMoreData(newMessages);39 catch (Exception ex) { 40 OnMoreData(new List<string> { "Error fetching log: " + ex.ToString() }); 41 } 35 42 } 36 43 } 37 44 catch (Exception ex) { 38 OnMoreData(new List<string> { "Error fetching log: " + ex.ToString() });45 OnMoreData(new List<string> { "Error in slave-communication: " + ex.ToString() }); 39 46 } 40 47 } … … 48 55 var handler = MoreData; 49 56 var newData = string.Join(Environment.NewLine, newMessages.ToArray()); 50 if (newMessages.Count() > 0) newData += Environment.NewLine;57 if (newMessages.Count() > 0) newData += Environment.NewLine; 51 58 if (handler != null) MoreData(this, newData); 52 59 } -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/app.config ¶
r4914 r5093 16 16 <bindings> 17 17 <netTcpBinding> 18 <binding name="SlaveConsoleTcpEndpoint " closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxBufferSize="65536" maxReceivedMessageSize="104857600">19 <readerQuotas maxDepth="32 " maxStringContentLength="104857600" maxArrayLength="104857600" maxBytesPerRead="104857600" maxNameTableCharCount="104857600"/>18 <binding name="SlaveConsoleTcpEndpointBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="104857600" maxBufferSize="104857600" maxReceivedMessageSize="104857600"> 19 <readerQuotas maxDepth="320" maxStringContentLength="104857600" maxArrayLength="104857600" maxBytesPerRead="104857600" maxNameTableCharCount="104857600"/> 20 20 <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/> 21 21 <security mode="None"> … … 27 27 </bindings> 28 28 <client> 29 <endpoint address="net.tcp://localhost:8000/SlaveConsoleService" binding="netTcpBinding" bindingConfiguration="SlaveConsoleTcpEndpoint " contract="SlaveConsoleService.ISlaveConsoleCommunicator" name="SlaveConsoleTcpEndpoint"/>29 <endpoint address="net.tcp://localhost:8000/SlaveConsoleService" binding="netTcpBinding" bindingConfiguration="SlaveConsoleTcpEndpointBinding" contract="SlaveConsoleService.ISlaveConsoleCommunicator" name="SlaveConsoleTcpEndpointClient"/> 30 30 </client> 31 31 </system.serviceModel> -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Core.cs ¶
r5000 r5093 115 115 wcfService.ProcessSnapshotCompleted += new EventHandler<ProcessSnapshotCompletedEventArgs>(wcfService_ProcessSnapshotCompleted); 116 116 wcfService.Connected += new EventHandler(wcfService_Connected); 117 wcfService.GetJobFailed += new EventHandler<EventArgs<Exception>>(wcfService_GetJobFailed); 117 118 } 118 119 … … 122 123 wcfService.ProcessSnapshotCompleted -= new EventHandler<ProcessSnapshotCompletedEventArgs>(wcfService_ProcessSnapshotCompleted); 123 124 wcfService.Connected -= new EventHandler(wcfService_Connected); 125 wcfService.GetJobFailed -= new EventHandler<EventArgs<Exception>>(wcfService_GetJobFailed); 124 126 } 125 127 … … 457 459 } 458 460 461 void wcfService_GetJobFailed(object sender, EventArgs<Exception> e) { 462 Logger.Info("GetJobFailed: " + e.Value.ToString()); 463 CurrentlyFetching = false; 464 } 465 459 466 private void FetchCalendarFromServer() { 460 467 ResponseCalendar calres = wcfService.GetCalendarSync(ConfigManager.Instance.GetClientInfo().Id); -
TabularUnified branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HiveWeb/Hive-3.3/Web.config ¶
r5066 r5093 7 7 </configSections> 8 8 9 10 <system.diagnostics> 9 <!--<system.diagnostics> 11 10 <sources> 12 11 <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing"> … … 43 42 </add> 44 43 </sharedListeners> 45 </system.diagnostics> 46 44 </system.diagnostics>--> 47 45 48 46 <applicationSettings>
Note: See TracChangeset
for help on using the changeset viewer.