Exemplo n.º 1
0
 /// <summary>
 /// Schedules batches onto DataProcessingServers.
 /// </summary>
 protected void FeedDataProcessingServers()
 {
     if (m_ExeList.Count < m_DPSHandlers.Length)
     {
         lock (m_Queue)
         {
             if (m_Queue.Count > m_ExeList.Count)
             {
                 DataProcSrvHandler [] l_AvDPSHandlers = (DataProcSrvHandler [])m_DPSHandlers.Clone();
                 int i, j;
                 for (j = 0; j < m_ExeList.Count; j++)
                 {
                     for (i = 0; i < l_AvDPSHandlers.Length; i++)
                     {
                         if (l_AvDPSHandlers[i] != null && l_AvDPSHandlers[i].Srv == ((ExeBatch)m_ExeList[j]).DPSW)
                         {
                             l_AvDPSHandlers[i] = null;
                             break;
                         }
                     }
                 }
                 for (i = 0; i < m_Queue.Count; i++)
                 {
                     SySal.DAQSystem.DataProcessingBatchDesc desc = (SySal.DAQSystem.DataProcessingBatchDesc)m_Queue[i];
                     for (j = 0; j < m_ExeList.Count; j++)
                     {
                         if (((ExeBatch)m_ExeList[j]).Desc == desc)
                         {
                             break;
                         }
                     }
                     if (j == m_ExeList.Count)
                     {
                         for (j = 0; j < l_AvDPSHandlers.Length; j++)
                         {
                             try
                             {
                                 if (l_AvDPSHandlers[j] != null && l_AvDPSHandlers[j].IsAvailable && l_AvDPSHandlers[j].MachinePowerClass >= desc.MachinePowerClass)
                                 {
                                     ExeBatch exe = new ExeBatch();
                                     exe.Desc                   = desc;
                                     exe.MappedDesc             = (SySal.DAQSystem.DataProcessingBatchDesc)desc.Clone();
                                     exe.MappedDesc.Id          = l_AvDPSHandlers[j].Srv.SuggestId;
                                     exe.MappedDesc.Description = exe.Desc.Id.ToString("X16") + " _DPS_REMAP_ " + exe.Desc.Description;
                                     if (MainForm.ImpersonateBatchUser == false)
                                     {
                                         exe.MappedDesc.Username = MainForm.OPERAUserName;
                                         exe.MappedDesc.Password = MainForm.OPERAPassword;
                                         exe.MappedDesc.Token    = null;
                                     }
                                     exe.DPSW = l_AvDPSHandlers[j].Srv;
                                     if (exe.DPSW.Enqueue(exe.MappedDesc) == false)
                                     {
                                         long ticks = System.DateTime.Now.Ticks;
                                         if (ticks < 0)
                                         {
                                             ticks = -ticks;
                                         }
                                         exe.MappedDesc.Id          = (ulong)ticks;
                                         exe.MappedDesc.Description = exe.MappedDesc.Id.ToString("X16") + " _OWN_REMAP_ " + exe.Desc.Description;
                                         if (l_AvDPSHandlers[j].Srv.Enqueue(exe.MappedDesc) == false)
                                         {
                                             m_ResultList.Add(new DataProcessingResult(exe.Desc, new Exception("Unknown error!"), MainForm.ResultLiveTime));
                                         }
                                         else
                                         {
                                             m_ExeList.Add(exe);
                                             l_AvDPSHandlers[j] = null;
                                             break;
                                         }
                                     }
                                     else
                                     {
                                         m_ExeList.Add(exe);
                                         l_AvDPSHandlers[j] = null;
                                         break;
                                     }
                                 }
                             }
                             catch (Exception)
                             {
                                 lock (m_DPSHandlers)
                                 {
                                     l_AvDPSHandlers[j].Srv               = null;
                                     l_AvDPSHandlers[j].IsAvailable       = false;
                                     l_AvDPSHandlers[j].MachinePowerClass = 0;
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 2
0
            /// <summary>
            /// The execution method, ran by the execution thread.
            /// </summary>
            public void Execute()
            {
                SySal.DAQSystem.SyncDataProcessingServerWrapper DPSW = null;
                int    test      = 0;
                string milestone = "A";

                try
                {
                    while (true)
                    {
                        try
                        {
                            if (DPSW == null)
                            {
                                DPSW = new SySal.DAQSystem.SyncDataProcessingServerWrapper((SySal.DAQSystem.IDataProcessingServer)System.Runtime.Remoting.RemotingServices.Connect(typeof(SySal.DAQSystem.IDataProcessingServer), "tcp://" + ServerName + ":" + ((int)SySal.DAQSystem.OperaPort.DataProcessingServer).ToString() + "/DataProcessingServer.rem"), new TimeSpan(0, 1, 0));
                                if (DPSW.TestComm(++test) != 2 * test - 1)
                                {
                                    throw new Exception();
                                }
                                MachinePowerClass = DPSW.MachinePowerClass;
                            }
                        }
                        catch (Exception)
                        {
                            DPSW = null;
                            continue;
                        }
                        milestone = "B";
                        try
                        {
                            Desc = null;
                            int i;
                            lock (JobQueue)
                            {
                                for (i = 0; i < JobQueue.Count; i++)
                                {
                                    if (((SySal.DAQSystem.DataProcessingBatchDesc)JobQueue[i]).MachinePowerClass <= MachinePowerClass)
                                    {
                                        KillEvent.Reset();
                                        Desc = (SySal.DAQSystem.DataProcessingBatchDesc)JobQueue[i];
                                        JobQueue.RemoveAt(i);
                                        ExeList.Add(Desc);
                                        break;
                                    }
                                }
                                if (JobQueue.Count == 0)
                                {
                                    DataReady.Reset();
                                }
                            }
                            milestone = "C";
                            if (Desc == null)
                            {
                                DataReady.WaitOne();
                                continue;
                            }
                            else
                            {
                                try
                                {
                                    SySal.DAQSystem.DataProcessingBatchDesc mbd = (SySal.DAQSystem.DataProcessingBatchDesc)Desc.Clone();
                                    milestone       = "D";
                                    mbd.Id          = DPSW.SuggestId;
                                    milestone       = "E";
                                    mbd.Description = Desc.Id.ToString("X16") + " _DPS_REMAP_ " + Desc.Description;
                                    if (MainForm.ImpersonateBatchUser == false)
                                    {
                                        mbd.Username = MainForm.OPERAUserName;
                                        mbd.Password = MainForm.OPERAPassword;
                                        mbd.Token    = null;
                                    }
                                    milestone = "E1";
                                    if (DPSW.Enqueue(mbd) == false)
                                    {
                                        lock (JobQueue)
                                        {
                                            ExeList.Remove(Desc);
                                            JobQueue.Add(Desc);
                                            Desc = null;
                                            continue;
                                        }
                                    }
                                    milestone = "F";
                                    bool killed = false;
                                    while (DPSW.DoneWith(mbd.Id) == false)
                                    {
                                        if (KillEvent.WaitOne(MainForm.DataProcSrvMonitorInterval * 1000))
                                        {
                                            milestone = "F1";
                                            lock (JobQueue)
                                            {
                                                milestone = "F2";
                                                ResultList.Add(new DataProcessingResult(Desc, new Exception("The batch was removed from the queue."), MainForm.ResultLiveTime));
                                                ExeList.Remove(Desc);
                                                Desc      = null;
                                                milestone = "F3";
                                                try
                                                {
                                                    DPSW.Remove(mbd.Id, mbd.Token, mbd.Username, mbd.Password);
                                                }
                                                catch (Exception) { }
                                                milestone = "F4";
                                                killed    = true;
                                                break;
                                            }
                                        }
                                    }
                                    if (killed == false)
                                    {
                                        milestone = "G";
                                        mbd       = DPSW.Result(mbd.Id);
                                        milestone = "H";
                                        Desc.PeakVirtualMemorySize = mbd.PeakVirtualMemorySize;
                                        Desc.PeakWorkingSet        = mbd.PeakWorkingSet;
                                        Desc.TotalProcessorTime    = mbd.TotalProcessorTime;
                                        Desc.Finished = mbd.Finished;
                                        lock (JobQueue)
                                        {
                                            ResultList.Add(new DataProcessingResult(Desc, null, MainForm.ResultLiveTime));
                                            ExeList.Remove(Desc);
                                            Desc = null;
                                        }
                                    }
                                    milestone = "I";
                                }
                                catch (SySal.DAQSystem.DataProcessingException retx)
                                {
                                    lock (JobQueue)
                                    {
                                        ResultList.Add(new DataProcessingResult(Desc, retx, MainForm.ResultLiveTime));
                                        ExeList.Remove(Desc);
                                        Desc = null;
                                    }
                                }
                            }
                            catch (Exception x)
                            {
                                DPSW = null;
                                MachinePowerClass = 0;
                                try
                                {
                                    EventLog.WriteEntry("Error handling batch " + Desc.Id.ToString("X16") + " - DPS: " + ServerName + "\r\nMilestone: " + milestone + "\r\n" + x.ToString(), System.Diagnostics.EventLogEntryType.Warning);
                                }
                                catch (Exception) { }
                                lock (JobQueue)
                                {
                                    ExeList.Remove(Desc);
                                    JobQueue.Add(Desc);
                                    Desc = null;
                                }
                            }
                        }
                        catch (Exception)
                        {
                            Desc = null;
                            DPSW = null;
                            MachinePowerClass = 0;
                        }
                    }