Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/29/09 15:14:32 (15 years ago)
Author:
kgrading
Message:

fixed persistence problems (#493)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Hive.Client.Core/3.2/JobStorage/JobStorageManager.cs

    r1775 r1959  
    1010using System.Xml.Serialization;
    1111using System.Diagnostics;
     12using System.Xml;
    1213
    1314namespace HeuristicLab.Hive.Client.Core.JobStorage {
     
    1516   
    1617    private static List<JobStorageInfo> storedJobsList = new List<JobStorageInfo>();
    17     //Todo: execution path
    18     //Todo: Choose a better directory name
    19     private static String path = "C:\\Program Files\\HeuristicLab 3.0\\plugins\\Hive.Client.Jobs\\";
     18   
     19    private static String path = System.IO.Directory.GetCurrentDirectory()+"\\plugins\\Hive.Client.Jobs\\";
    2020   
    2121    public static void PersistObjectToDisc(String serverIP, long serverPort, Guid jobId, byte[] job) {
    2222      String filename = serverIP + "." + serverPort + "." + jobId.ToString();
    2323      JobStorageInfo info = new JobStorageInfo { JobID = jobId, ServerIP = serverIP, ServerPort = serverPort, TimeFinished = DateTime.Now };
    24 
    25       if (!Directory.Exists(path))
    26         Directory.CreateDirectory(path);
    27            
     24     
    2825      Stream jobstream = null;
    2926      try {
    3027        jobstream = File.Create(path + filename + ".dat");
    3128        jobstream.Write(job, 0, job.Length);
    32         storedJobsList.Add(info);
    33         Debug.WriteLine("Job " + info.JobID + " stored on the harddisc");
    34         //Logging.Instance.Info("JobStorageManager", "Job " + info.JobID + " stored on the harddisc");
     29        storedJobsList.Add(info);       
     30        Logging.Instance.Info("JobStorageManager", "Job " + info.JobID + " stored on the harddisc");
    3531      }
    3632      catch (Exception e) {
     
    4945      for(int index=storedJobsList.Count; index > 0; index--) {
    5046        if (WcfService.Instance.ConnState == NetworkEnum.WcfConnState.Loggedin && (storedJobsList[index-1].ServerIP == WcfService.Instance.ServerIP && storedJobsList[index-1].ServerPort == WcfService.Instance.ServerPort)) {
    51           String filename = storedJobsList[index-1].ServerIP + "." + storedJobsList[index-1].ServerPort + "." + storedJobsList[index-1].JobID.ToString();
    52           Debug.WriteLine("Sending stored job " + storedJobsList[index - 1].JobID + " to the server");
    53           //Logging.Instance.Info("JobStorrageManager", "Sending stored job " + storedJobsList[index - 1].JobID + " to the server");
     47          String filename = storedJobsList[index-1].ServerIP + "." + storedJobsList[index-1].ServerPort + "." + storedJobsList[index-1].JobID.ToString();         
     48          Logging.Instance.Info("JobStorrageManager", "Sending stored job " + storedJobsList[index - 1].JobID + " to the server");
    5449          byte[] job = File.ReadAllBytes(path + filename + ".dat");
     50
     51          if (WcfService.Instance.IsJobStillNeeded(storedJobsList[index - 1].JobID).StatusMessage == ApplicationConstants.RESPONSE_COMMUNICATOR_SEND_JOBRESULT) {
     52            ResponseResultReceived res = WcfService.Instance.SendStoredJobResultsSync(ConfigManager.Instance.GetClientInfo().Id, storedJobsList[index - 1].JobID, job, 1.00, null, true);
     53            if (!res.Success)
     54              Logging.Instance.Error("JobStorageManager", "sending of job failed: " + res.StatusMessage);
     55            else
     56              Logging.Instance.Info("JobStorrageManager", "Sending of job " + storedJobsList[index - 1].JobID + " done");     
     57          }
     58          ClientStatusInfo.JobsProcessed++;
     59                 
    5560         
    56           //Todo: ask server first if he really wants the job...
    57           ResponseResultReceived res = WcfService.Instance.SendStoredJobResultsSync(ConfigManager.Instance.GetClientInfo().Id, storedJobsList[index-1].JobID, job, 1.00, null, true);
    58           ClientStatusInfo.JobsProcessed++;
    59           //TODO: has to be fixed from server side
    60           //if (res.Success == true) {
    61           Debug.WriteLine("Sending of job " + storedJobsList[index - 1].JobID + " done"); 
    62           //Logging.Instance.Info("JobStorrageManager", "Sending of job " + storedJobsList[index - 1].JobID + " done"); 
    6361
    6462          storedJobsList.Remove(storedJobsList[index - 1]);
    65           File.Delete(path + filename + ".dat");
    66            
    67        //   }
     63          File.Delete(path + filename + ".dat");       
    6864          }
    6965        }
     
    7672      writer.Close();
    7773    }
     74
     75    static JobStorageManager() {
     76      Logging.Instance.Info("JobStorrageManager", "Restoring Joblist from Harddisk");
     77      if (!Directory.Exists(path))
     78        Directory.CreateDirectory(path);
     79           
     80      XmlSerializer serializer = new XmlSerializer(typeof(List<JobStorageInfo>));
     81      if(File.Exists(Path.Combine(path ,"list.xml"))) {
     82        try {
     83          FileStream stream = new FileStream(Path.Combine(path, "list.xml"), FileMode.Open);
     84          XmlTextReader reader = new XmlTextReader(stream);
     85          storedJobsList = (List<JobStorageInfo>)serializer.Deserialize(reader);
     86          Logging.Instance.Info("JobStorrageManager", "Loaded " + storedJobsList.Count + " Elements");
     87        }
     88        catch (Exception e) {
     89          Logging.Instance.Error("JobStorrageManager", "Exception while loading the Stored Job List", e);
     90        }
     91      } else {
     92        Logging.Instance.Info("JobStorrageManager", "no stored jobs on harddisk, starting new list");
     93        storedJobsList = new List<JobStorageInfo>();
     94      }
     95    }
    7896   
    7997  }
Note: See TracChangeset for help on using the changeset viewer.