Changeset 4170


Ignore:
Timestamp:
08/06/10 09:20:18 (12 years ago)
Author:
cneumuel
Message:

refactoring of Result-Polling of HiveExperiment, polling is now much faster and code is cleaner (1092#)

Location:
branches/3.3-HiveMigration
Files:
2 added
9 deleted
42 edited

Legend:

Unmodified
Added
Removed
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Communication/3.3/HeuristicLab.Hive.Client.Communication-3.3.csproj

    r4133 r4170  
    119119  </ItemGroup>
    120120  <ItemGroup>
     121    <None Include="app.config" />
    121122    <None Include="HeuristicLab.snk" />
    122123    <None Include="Properties\AssemblyInfo.frame" />
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Communication/3.3/Service References/ServerService/HeuristicLab.Hive.Contracts.BusinessObjects1.xsd

    r4107 r4170  
    5656  <xs:simpleType name="State">
    5757    <xs:restriction base="xs:string">
    58       <xs:enumeration value="nullState" />
    59       <xs:enumeration value="idle" />
    60       <xs:enumeration value="calculating" />
    61       <xs:enumeration value="offline" />
    62       <xs:enumeration value="finished" />
    63       <xs:enumeration value="abort" />
    64       <xs:enumeration value="requestSnapshot" />
    65       <xs:enumeration value="requestSnapshotSent" />
    66       <xs:enumeration value="pending" />
     58      <xs:enumeration value="NullState" />
     59      <xs:enumeration value="Idle" />
     60      <xs:enumeration value="Calculating" />
     61      <xs:enumeration value="Offline" />
     62      <xs:enumeration value="Finished" />
     63      <xs:enumeration value="Abort" />
     64      <xs:enumeration value="RequestSnapshot" />
     65      <xs:enumeration value="RequestSnapshotSent" />
     66      <xs:enumeration value="Pending" />
     67      <xs:enumeration value="Failed" />
    6768    </xs:restriction>
    6869  </xs:simpleType>
     
    8788          <xs:element minOccurs="0" name="DateCreated" nillable="true" type="xs:dateTime" />
    8889          <xs:element minOccurs="0" name="DateFinished" nillable="true" type="xs:dateTime" />
     90          <xs:element minOccurs="0" name="Exception" nillable="true" type="xs:string" />
    8991          <xs:element minOccurs="0" name="MemoryNeeded" type="xs:int" />
    9092          <xs:element minOccurs="0" name="ParentJob" nillable="true" type="tns:JobDto" />
     
    110112      <xs:extension xmlns:q6="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q6:PersistableObject">
    111113        <xs:sequence>
    112           <xs:element minOccurs="0" name="BuildDate" type="xs:dateTime" />
    113114          <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
     115          <xs:element minOccurs="0" name="Update" type="xs:boolean" />
    114116          <xs:element xmlns:q7="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="Version" nillable="true" type="q7:Version" />
    115117        </xs:sequence>
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Communication/3.3/Service References/ServerService/HeuristicLab.Hive.Contracts1.xsd

    r4107 r4170  
    6464      <xs:extension base="tns:Response">
    6565        <xs:sequence>
     66          <xs:element minOccurs="0" name="Finished" type="xs:boolean" />
    6667          <xs:element minOccurs="0" name="JobId" type="ser:guid" />
    67           <xs:element minOccurs="0" name="finished" type="xs:boolean" />
    6868        </xs:sequence>
    6969      </xs:extension>
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Communication/3.3/Service References/ServerService/Reference.cs

    r4107 r4170  
    4646       
    4747        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/StoreFinishedJobResult", ReplyAction="http://tempuri.org/IClientCommunicator/StoreFinishedJobResultResponse")]
    48         HeuristicLab.Hive.Contracts.ResponseResultReceived StoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, System.Exception exception);
     48        HeuristicLab.Hive.Contracts.ResponseResultReceived StoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception);
    4949       
    5050        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/StoreFinishedJobResult", ReplyAction="http://tempuri.org/IClientCommunicator/StoreFinishedJobResultResponse")]
    51         System.IAsyncResult BeginStoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, System.Exception exception, System.AsyncCallback callback, object asyncState);
     51        System.IAsyncResult BeginStoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, System.AsyncCallback callback, object asyncState);
    5252       
    5353        HeuristicLab.Hive.Contracts.ResponseResultReceived EndStoreFinishedJobResult(System.IAsyncResult result);
    5454       
    5555        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/ProcessSnapshot", ReplyAction="http://tempuri.org/IClientCommunicator/ProcessSnapshotResponse")]
    56         HeuristicLab.Hive.Contracts.ResponseResultReceived ProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, System.Exception exception);
     56        HeuristicLab.Hive.Contracts.ResponseResultReceived ProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception);
    5757       
    5858        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/ProcessSnapshot", ReplyAction="http://tempuri.org/IClientCommunicator/ProcessSnapshotResponse")]
    59         System.IAsyncResult BeginProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, System.Exception exception, System.AsyncCallback callback, object asyncState);
     59        System.IAsyncResult BeginProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, System.AsyncCallback callback, object asyncState);
    6060       
    6161        HeuristicLab.Hive.Contracts.ResponseResultReceived EndProcessSnapshot(System.IAsyncResult result);
     
    208208            }
    209209        }
    210 
    211210    }
    212211   
     
    705704        }
    706705       
    707         public HeuristicLab.Hive.Contracts.ResponseResultReceived StoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, System.Exception exception) {
     706        public HeuristicLab.Hive.Contracts.ResponseResultReceived StoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception) {
    708707            return base.Channel.StoreFinishedJobResult(clientId, jobId, result, percentage, exception);
    709708        }
    710709       
    711710        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
    712         public System.IAsyncResult BeginStoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, System.Exception exception, System.AsyncCallback callback, object asyncState) {
     711        public System.IAsyncResult BeginStoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, System.AsyncCallback callback, object asyncState) {
    713712            return base.Channel.BeginStoreFinishedJobResult(clientId, jobId, result, percentage, exception, callback, asyncState);
    714713        }
     
    724723            byte[] result = ((byte[])(inValues[2]));
    725724            double percentage = ((double)(inValues[3]));
    726             System.Exception exception = ((System.Exception)(inValues[4]));
     725            string exception = ((string)(inValues[4]));
    727726            return this.BeginStoreFinishedJobResult(clientId, jobId, result, percentage, exception, callback, asyncState);
    728727        }
     
    741740        }
    742741       
    743         public void StoreFinishedJobResultAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, System.Exception exception) {
     742        public void StoreFinishedJobResultAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception) {
    744743            this.StoreFinishedJobResultAsync(clientId, jobId, result, percentage, exception, null);
    745744        }
    746745       
    747         public void StoreFinishedJobResultAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, System.Exception exception, object userState) {
     746        public void StoreFinishedJobResultAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, object userState) {
    748747            if ((this.onBeginStoreFinishedJobResultDelegate == null)) {
    749748                this.onBeginStoreFinishedJobResultDelegate = new BeginOperationDelegate(this.OnBeginStoreFinishedJobResult);
     
    763762        }
    764763       
    765         public HeuristicLab.Hive.Contracts.ResponseResultReceived ProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, System.Exception exception) {
     764        public HeuristicLab.Hive.Contracts.ResponseResultReceived ProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception) {
    766765            return base.Channel.ProcessSnapshot(clientId, jobId, result, percentage, exception);
    767766        }
    768767       
    769768        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
    770         public System.IAsyncResult BeginProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, System.Exception exception, System.AsyncCallback callback, object asyncState) {
     769        public System.IAsyncResult BeginProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, System.AsyncCallback callback, object asyncState) {
    771770            return base.Channel.BeginProcessSnapshot(clientId, jobId, result, percentage, exception, callback, asyncState);
    772771        }
     
    782781            byte[] result = ((byte[])(inValues[2]));
    783782            double percentage = ((double)(inValues[3]));
    784             System.Exception exception = ((System.Exception)(inValues[4]));
     783            string exception = ((string)(inValues[4]));
    785784            return this.BeginProcessSnapshot(clientId, jobId, result, percentage, exception, callback, asyncState);
    786785        }
     
    799798        }
    800799       
    801         public void ProcessSnapshotAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, System.Exception exception) {
     800        public void ProcessSnapshotAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception) {
    802801            this.ProcessSnapshotAsync(clientId, jobId, result, percentage, exception, null);
    803802        }
    804803       
    805         public void ProcessSnapshotAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, System.Exception exception, object userState) {
     804        public void ProcessSnapshotAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, object userState) {
    806805            if ((this.onBeginProcessSnapshotDelegate == null)) {
    807806                this.onBeginProcessSnapshotDelegate = new BeginOperationDelegate(this.OnBeginProcessSnapshot);
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Communication/3.3/Service References/ServerService/System1.xsd

    r4107 r4170  
    11<?xml version="1.0" encoding="utf-8"?>
    2 <xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/System" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    3   <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
     2<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    43  <xs:complexType name="Version">
    54    <xs:sequence>
     
    1110  </xs:complexType>
    1211  <xs:element name="Version" nillable="true" type="tns:Version" />
    13   <xs:complexType name="Exception">
    14     <xs:sequence>
    15       <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##local" processContents="skip" />
    16     </xs:sequence>
    17     <xs:attribute ref="ser:FactoryType" />
    18   </xs:complexType>
    19   <xs:element name="Exception" nillable="true" type="tns:Exception" />
    2012</xs:schema>
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Communication/3.3/Service References/ServerService/service2.xsd

    r3203 r4170  
    44  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" />
    55  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
    6   <xs:import namespace="http://schemas.datacontract.org/2004/07/System" />
    76  <xs:import namespace="http://schemas.microsoft.com/Message" />
    87  <xs:element name="Login">
     
    5554        <xs:element minOccurs="0" name="result" nillable="true" type="xs:base64Binary" />
    5655        <xs:element minOccurs="0" name="percentage" type="xs:double" />
    57         <xs:element xmlns:q9="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="exception" nillable="true" type="q9:Exception" />
     56        <xs:element minOccurs="0" name="exception" nillable="true" type="xs:string" />
    5857      </xs:sequence>
    5958    </xs:complexType>
     
    6261    <xs:complexType>
    6362      <xs:sequence>
    64         <xs:element xmlns:q10="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="StoreFinishedJobResultResult" nillable="true" type="q10:ResponseResultReceived" />
     63        <xs:element xmlns:q9="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="StoreFinishedJobResultResult" nillable="true" type="q9:ResponseResultReceived" />
    6564      </xs:sequence>
    6665    </xs:complexType>
     
    6968    <xs:complexType>
    7069      <xs:sequence>
    71         <xs:element xmlns:q11="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q11:guid" />
    72         <xs:element xmlns:q12="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q12:guid" />
     70        <xs:element xmlns:q10="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q10:guid" />
     71        <xs:element xmlns:q11="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q11:guid" />
    7372        <xs:element minOccurs="0" name="result" nillable="true" type="xs:base64Binary" />
    7473        <xs:element minOccurs="0" name="percentage" type="xs:double" />
    75         <xs:element xmlns:q13="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="exception" nillable="true" type="q13:Exception" />
     74        <xs:element minOccurs="0" name="exception" nillable="true" type="xs:string" />
    7675      </xs:sequence>
    7776    </xs:complexType>
     
    8079    <xs:complexType>
    8180      <xs:sequence>
    82         <xs:element xmlns:q14="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="ProcessSnapshotResult" nillable="true" type="q14:ResponseResultReceived" />
     81        <xs:element xmlns:q12="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="ProcessSnapshotResult" nillable="true" type="q12:ResponseResultReceived" />
    8382      </xs:sequence>
    8483    </xs:complexType>
     
    8786    <xs:complexType>
    8887      <xs:sequence>
    89         <xs:element xmlns:q15="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q15:guid" />
     88        <xs:element xmlns:q13="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q13:guid" />
    9089      </xs:sequence>
    9190    </xs:complexType>
     
    9493    <xs:complexType>
    9594      <xs:sequence>
    96         <xs:element xmlns:q16="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="LogoutResult" nillable="true" type="q16:Response" />
     95        <xs:element xmlns:q14="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="LogoutResult" nillable="true" type="q14:Response" />
    9796      </xs:sequence>
    9897    </xs:complexType>
     
    101100    <xs:complexType>
    102101      <xs:sequence>
    103         <xs:element xmlns:q17="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q17:guid" />
     102        <xs:element xmlns:q15="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q15:guid" />
    104103      </xs:sequence>
    105104    </xs:complexType>
     
    108107    <xs:complexType>
    109108      <xs:sequence>
    110         <xs:element xmlns:q18="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="IsJobStillNeededResult" nillable="true" type="q18:Response" />
     109        <xs:element xmlns:q16="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="IsJobStillNeededResult" nillable="true" type="q16:Response" />
    111110      </xs:sequence>
    112111    </xs:complexType>
     
    115114    <xs:complexType>
    116115      <xs:sequence>
    117         <xs:element xmlns:q19="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="pluginList" nillable="true" type="q19:ArrayOfHivePluginInfoDto" />
     116        <xs:element xmlns:q17="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="pluginList" nillable="true" type="q17:ArrayOfHivePluginInfoDto" />
    118117      </xs:sequence>
    119118    </xs:complexType>
     
    122121    <xs:complexType>
    123122      <xs:sequence>
    124         <xs:element xmlns:q20="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="SendPluginsResult" nillable="true" type="q20:ResponsePlugin" />
     123        <xs:element xmlns:q18="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="SendPluginsResult" nillable="true" type="q18:ResponsePlugin" />
    125124      </xs:sequence>
    126125    </xs:complexType>
     
    129128    <xs:complexType>
    130129      <xs:sequence>
     130        <xs:element xmlns:q19="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q19:guid" />
     131      </xs:sequence>
     132    </xs:complexType>
     133  </xs:element>
     134  <xs:element name="GetCalendarResponse">
     135    <xs:complexType>
     136      <xs:sequence>
     137        <xs:element xmlns:q20="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="GetCalendarResult" nillable="true" type="q20:ResponseCalendar" />
     138      </xs:sequence>
     139    </xs:complexType>
     140  </xs:element>
     141  <xs:element name="SetCalendarStatus">
     142    <xs:complexType>
     143      <xs:sequence>
    131144        <xs:element xmlns:q21="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q21:guid" />
    132       </xs:sequence>
    133     </xs:complexType>
    134   </xs:element>
    135   <xs:element name="GetCalendarResponse">
    136     <xs:complexType>
    137       <xs:sequence>
    138         <xs:element xmlns:q22="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="GetCalendarResult" nillable="true" type="q22:ResponseCalendar" />
    139       </xs:sequence>
    140     </xs:complexType>
    141   </xs:element>
    142   <xs:element name="SetCalendarStatus">
    143     <xs:complexType>
    144       <xs:sequence>
    145         <xs:element xmlns:q23="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q23:guid" />
    146         <xs:element xmlns:q24="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="state" type="q24:CalendarState" />
     145        <xs:element xmlns:q22="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="state" type="q22:CalendarState" />
    147146      </xs:sequence>
    148147    </xs:complexType>
     
    151150    <xs:complexType>
    152151      <xs:sequence>
    153         <xs:element xmlns:q25="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="SetCalendarStatusResult" nillable="true" type="q25:Response" />
     152        <xs:element xmlns:q23="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="SetCalendarStatusResult" nillable="true" type="q23:Response" />
    154153      </xs:sequence>
    155154    </xs:complexType>
     
    158157    <xs:complexType>
    159158      <xs:sequence>
    160         <xs:element xmlns:q26="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q26:guid" />
     159        <xs:element xmlns:q24="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q24:guid" />
    161160      </xs:sequence>
    162161    </xs:complexType>
     
    165164    <xs:complexType>
    166165      <xs:sequence>
    167         <xs:element xmlns:q27="http://schemas.microsoft.com/Message" name="SendStreamedJobResult" type="q27:StreamBody" />
     166        <xs:element xmlns:q25="http://schemas.microsoft.com/Message" name="SendStreamedJobResult" type="q25:StreamBody" />
    168167      </xs:sequence>
    169168    </xs:complexType>
     
    172171    <xs:complexType>
    173172      <xs:sequence>
    174         <xs:element xmlns:q28="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="pluginList" nillable="true" type="q28:ArrayOfHivePluginInfoDto" />
     173        <xs:element xmlns:q26="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="pluginList" nillable="true" type="q26:ArrayOfHivePluginInfoDto" />
    175174      </xs:sequence>
    176175    </xs:complexType>
     
    179178    <xs:complexType>
    180179      <xs:sequence>
    181         <xs:element xmlns:q29="http://schemas.microsoft.com/Message" name="SendStreamedPluginsResult" type="q29:StreamBody" />
     180        <xs:element xmlns:q27="http://schemas.microsoft.com/Message" name="SendStreamedPluginsResult" type="q27:StreamBody" />
    182181      </xs:sequence>
    183182    </xs:complexType>
     
    186185    <xs:complexType>
    187186      <xs:sequence>
     187        <xs:element xmlns:q28="http://schemas.microsoft.com/Message" name="stream" type="q28:StreamBody" />
     188      </xs:sequence>
     189    </xs:complexType>
     190  </xs:element>
     191  <xs:element name="StoreFinishedJobResultStreamedResponse">
     192    <xs:complexType>
     193      <xs:sequence>
     194        <xs:element xmlns:q29="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="StoreFinishedJobResultStreamedResult" nillable="true" type="q29:ResponseResultReceived" />
     195      </xs:sequence>
     196    </xs:complexType>
     197  </xs:element>
     198  <xs:element name="ProcessSnapshotStreamed">
     199    <xs:complexType>
     200      <xs:sequence>
    188201        <xs:element xmlns:q30="http://schemas.microsoft.com/Message" name="stream" type="q30:StreamBody" />
    189202      </xs:sequence>
    190203    </xs:complexType>
    191204  </xs:element>
    192   <xs:element name="StoreFinishedJobResultStreamedResponse">
    193     <xs:complexType>
    194       <xs:sequence>
    195         <xs:element xmlns:q31="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="StoreFinishedJobResultStreamedResult" nillable="true" type="q31:ResponseResultReceived" />
    196       </xs:sequence>
    197     </xs:complexType>
    198   </xs:element>
    199   <xs:element name="ProcessSnapshotStreamed">
    200     <xs:complexType>
    201       <xs:sequence>
    202         <xs:element xmlns:q32="http://schemas.microsoft.com/Message" name="stream" type="q32:StreamBody" />
    203       </xs:sequence>
    204     </xs:complexType>
    205   </xs:element>
    206205  <xs:element name="ProcessSnapshotStreamedResponse">
    207206    <xs:complexType>
    208207      <xs:sequence>
    209         <xs:element xmlns:q33="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="ProcessSnapshotStreamedResult" nillable="true" type="q33:ResponseResultReceived" />
     208        <xs:element xmlns:q31="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="ProcessSnapshotStreamedResult" nillable="true" type="q31:ResponseResultReceived" />
    210209      </xs:sequence>
    211210    </xs:complexType>
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Communication/3.3/WcfService.cs

    r4119 r4170  
    292292    public void ProcessSnapshotAsync(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception, bool finished) {
    293293      if (ConnState == NetworkEnum.WcfConnState.Loggedin) {
    294         Stream stream = GetStreamedJobResult(
    295             clientId, jobId, result, percentage, exception);
    296 
     294        Stream stream = GetStreamedJobResult(clientId, jobId, result, percentage, exception);
    297295        proxy.ProcessSnapshotStreamedAsync(stream, stream);
    298296      }
     
    353351      jobResult.JobId = jobId;
    354352      jobResult.Percentage = percentage;
    355       jobResult.Exception = exception;
     353      jobResult.Exception = exception != null ? exception.Message : "";
    356354
    357355      MultiStream stream = new MultiStream();
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.ExecutionEngine/3.3/Executor.cs

    r4141 r4170  
    6161      Job.JobStopped += new EventHandler(Job_JobStopped);
    6262      Job.JobFailed += new EventHandler(Job_JobFailed);
     63      Job.Prepare();
    6364      Job.Start();
    6465    }
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginInfoDto.cs

    r4141 r4170  
    6060    [StorableHook(HookType.AfterDeserialization)]
    6161    private void AfterDeserialization() {
    62       int[] parts = this.storableVersion.Split('.').Select(s => int.Parse(s)).ToArray();
    63       this.Version = new Version(parts[0], parts[1], parts[2], parts[3]);
     62      this.Version = new Version(storableVersion);
    6463    }
    6564
     
    7170      return clone;
    7271    }
     72
    7373  }
    7474}
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs

    r4133 r4170  
    4141    [Storable]
    4242    [DataMember]
    43     public double Percentage { get; set; }
    44     [Storable]
    45     [DataMember]
    46     public DateTime Timestamp { get; set; }
    47     [Storable]
    48     [DataMember]
    4943    public Guid ClientId { get; set; }
    5044    [Storable]
    5145    [DataMember]
    52     public Exception Exception { get; set; }
     46    public State State { get; set; }
    5347    [Storable]
    5448    [DataMember]
    55     public DateTime DateFinished { get; set; }
     49    public double? Percentage { get; set; }
     50    [Storable]
     51    [DataMember]
     52    public String Exception { get; set; }
     53    [Storable]
     54    [DataMember]
     55    public DateTime? DateCalculated { get; set; }
     56    [Storable]
     57    [DataMember]
     58    public DateTime? DateFinished { get; set; }
    5659
    5760    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
    5861      JobResult clone = (JobResult) base.Clone(cloner);
    5962      clone.ClientId = this.ClientId;
     63      clone.DateCalculated = this.DateCalculated;
    6064      clone.DateFinished = this.DateFinished;
    61       throw new NotImplementedException("Exception kann nicht serialisiert werden, deshalb irgendwie wrappen... oder nur message (+stacktrace, ...?) speichern");
    6265      clone.Exception = this.Exception;
    6366      clone.JobId = this.JobId;
    6467      clone.Percentage = this.Percentage;
    65       clone.Timestamp = this.Timestamp;
     68      clone.State = this.State;
    6669      return clone;
    6770    }
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj

    r4133 r4170  
    120120    <Compile Include="BusinessObjects\ClientGroupDto.cs" />
    121121    <Compile Include="BusinessObjects\HivePluginFile.cs" />
     122    <Compile Include="BusinessObjects\JobResultList.cs" />
    122123    <Compile Include="BusinessObjects\ResourceDto.cs" />
    123124    <Compile Include="BusinessObjects\SerializedJob.cs" />
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientCommunicator.cs

    r3203 r4170  
    4747      byte[] result,
    4848      double percentage,
    49       Exception exception);
     49      string exception);
    5050    [OperationContract]
    5151    ResponseResultReceived ProcessSnapshot(Guid clientId,
     
    5353      byte[] result,
    5454      double percentage,
    55       Exception exception);
     55      string exception);
    5656    [OperationContract]
    5757    Response Logout(Guid clientId);
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IExecutionEngineFacade.cs

    r4121 r4170  
    4242    [OperationContract]
    4343    ResponseObject<JobDto> GetJobById(Guid jobId);
     44    [OperationContract]
     45    ResponseObject<JobResultList> GetAllJobResults(IEnumerable<Guid> jobIds);
    4446  }
    4547}
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IJobManager.cs

    r4121 r4170  
    5050    ResponseObject<SerializedJob> GetLastSerializedJobResultOf(Guid jobId, bool requested, bool snapshot);
    5151    [OperationContract]
    52     ResponseList<JobResult> GetAllJobResults(Guid jobId);
     52    ResponseObject<JobResultList> GetAllJobResults(IEnumerable<Guid> jobIds);
    5353    [OperationContract]
    5454    Response RequestSnapshot(Guid jobId);
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.cs

    r4144 r4170  
    109109      if (Content.Experiment != null) {
    110110        runCollectionView.Content = Content.Experiment.Runs;
    111         Content.Prepare();
     111        if (Content.ExecutionState == ExecutionState.Stopped) {
     112          Content.Prepare();
     113        }
    112114      }
    113115      SetEnabledStateOfControls();
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemListView.cs

    r4121 r4170  
    3636      this.removeButton.Enabled = false;
    3737    }
    38 
    39     protected override void Content_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<JobItem>> e) {
    40       base.Content_ItemsAdded(sender, e);
    41     }
    4238  }
    4339}
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.Designer.cs

    r4144 r4170  
    9292      this.stateTextBox.Location = new System.Drawing.Point(95, 19);
    9393      this.stateTextBox.Name = "stateTextBox";
    94       this.stateTextBox.Size = new System.Drawing.Size(432, 20);
     94      this.stateTextBox.Size = new System.Drawing.Size(509, 20);
    9595      this.stateTextBox.TabIndex = 2;
    9696      //
     
    101101      this.userIdTextBox.Location = new System.Drawing.Point(91, 28);
    102102      this.userIdTextBox.Name = "userIdTextBox";
    103       this.userIdTextBox.Size = new System.Drawing.Size(448, 20);
     103      this.userIdTextBox.Size = new System.Drawing.Size(525, 20);
    104104      this.userIdTextBox.TabIndex = 3;
    105105      //
     
    117117      this.dateCreatedTextBox.Location = new System.Drawing.Point(95, 63);
    118118      this.dateCreatedTextBox.Name = "dateCreatedTextBox";
    119       this.dateCreatedTextBox.Size = new System.Drawing.Size(432, 20);
     119      this.dateCreatedTextBox.Size = new System.Drawing.Size(509, 20);
    120120      this.dateCreatedTextBox.TabIndex = 5;
    121121      //
     
    126126      this.dateFinishedTextBox.Location = new System.Drawing.Point(95, 107);
    127127      this.dateFinishedTextBox.Name = "dateFinishedTextBox";
    128       this.dateFinishedTextBox.Size = new System.Drawing.Size(432, 20);
     128      this.dateFinishedTextBox.Size = new System.Drawing.Size(509, 20);
    129129      this.dateFinishedTextBox.TabIndex = 6;
    130130      //
     
    135135      this.priorityTextBox.Location = new System.Drawing.Point(91, 50);
    136136      this.priorityTextBox.Name = "priorityTextBox";
    137       this.priorityTextBox.Size = new System.Drawing.Size(448, 20);
     137      this.priorityTextBox.Size = new System.Drawing.Size(525, 20);
    138138      this.priorityTextBox.TabIndex = 7;
    139139      //
     
    144144      this.coresNeededTextBox.Location = new System.Drawing.Point(91, 72);
    145145      this.coresNeededTextBox.Name = "coresNeededTextBox";
    146       this.coresNeededTextBox.Size = new System.Drawing.Size(448, 20);
     146      this.coresNeededTextBox.Size = new System.Drawing.Size(525, 20);
    147147      this.coresNeededTextBox.TabIndex = 8;
    148148      //
     
    153153      this.memoryNeededTextBox.Location = new System.Drawing.Point(91, 94);
    154154      this.memoryNeededTextBox.Name = "memoryNeededTextBox";
    155       this.memoryNeededTextBox.Size = new System.Drawing.Size(448, 20);
     155      this.memoryNeededTextBox.Size = new System.Drawing.Size(525, 20);
    156156      this.memoryNeededTextBox.TabIndex = 9;
    157157      //
     
    160160      this.exceptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
    161161                  | System.Windows.Forms.AnchorStyles.Right)));
    162       this.exceptionTextBox.Location = new System.Drawing.Point(91, 116);
     162      this.exceptionTextBox.Location = new System.Drawing.Point(95, 129);
    163163      this.exceptionTextBox.Name = "exceptionTextBox";
    164       this.exceptionTextBox.Size = new System.Drawing.Size(448, 20);
     164      this.exceptionTextBox.Size = new System.Drawing.Size(509, 20);
    165165      this.exceptionTextBox.TabIndex = 10;
    166166      //
     
    169169      this.projectTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
    170170                  | System.Windows.Forms.AnchorStyles.Right)));
    171       this.projectTextBox.Location = new System.Drawing.Point(91, 138);
     171      this.projectTextBox.Location = new System.Drawing.Point(91, 116);
    172172      this.projectTextBox.Name = "projectTextBox";
    173       this.projectTextBox.Size = new System.Drawing.Size(448, 20);
     173      this.projectTextBox.Size = new System.Drawing.Size(525, 20);
    174174      this.projectTextBox.TabIndex = 11;
    175175      //
     
    231231      //
    232232      this.exceptionLabel.AutoSize = true;
    233       this.exceptionLabel.Location = new System.Drawing.Point(3, 116);
     233      this.exceptionLabel.Location = new System.Drawing.Point(7, 129);
    234234      this.exceptionLabel.Name = "exceptionLabel";
    235235      this.exceptionLabel.Size = new System.Drawing.Size(57, 13);
     
    240240      //
    241241      this.projectLabel.AutoSize = true;
    242       this.projectLabel.Location = new System.Drawing.Point(3, 138);
     242      this.projectLabel.Location = new System.Drawing.Point(3, 116);
    243243      this.projectLabel.Name = "projectLabel";
    244244      this.projectLabel.Size = new System.Drawing.Size(43, 13);
     
    256256      this.snapshotGroupBox.Controls.Add(this.snapshotTimeLabel);
    257257      this.snapshotGroupBox.Controls.Add(this.snapshotStatusLabel);
    258       this.snapshotGroupBox.Location = new System.Drawing.Point(6, 304);
     258      this.snapshotGroupBox.Location = new System.Drawing.Point(6, 310);
    259259      this.snapshotGroupBox.Name = "snapshotGroupBox";
    260       this.snapshotGroupBox.Size = new System.Drawing.Size(533, 100);
     260      this.snapshotGroupBox.Size = new System.Drawing.Size(610, 100);
    261261      this.snapshotGroupBox.TabIndex = 21;
    262262      this.snapshotGroupBox.TabStop = false;
     
    266266      //
    267267      this.requestSnapshotButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
    268       this.requestSnapshotButton.Location = new System.Drawing.Point(307, 67);
     268      this.requestSnapshotButton.Location = new System.Drawing.Point(384, 67);
    269269      this.requestSnapshotButton.Name = "requestSnapshotButton";
    270270      this.requestSnapshotButton.Size = new System.Drawing.Size(107, 26);
     
    277277      //
    278278      this.openSnapshotButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
    279       this.openSnapshotButton.Location = new System.Drawing.Point(420, 67);
     279      this.openSnapshotButton.Location = new System.Drawing.Point(497, 67);
    280280      this.openSnapshotButton.Name = "openSnapshotButton";
    281281      this.openSnapshotButton.Size = new System.Drawing.Size(107, 26);
     
    291291      this.snapshotTimeText.Location = new System.Drawing.Point(45, 41);
    292292      this.snapshotTimeText.Name = "snapshotTimeText";
    293       this.snapshotTimeText.Size = new System.Drawing.Size(482, 20);
     293      this.snapshotTimeText.Size = new System.Drawing.Size(559, 20);
    294294      this.snapshotTimeText.TabIndex = 24;
    295295      //
     
    300300      this.snapshotStatusText.Location = new System.Drawing.Point(45, 19);
    301301      this.snapshotStatusText.Name = "snapshotStatusText";
    302       this.snapshotStatusText.Size = new System.Drawing.Size(482, 20);
     302      this.snapshotStatusText.Size = new System.Drawing.Size(559, 20);
    303303      this.snapshotStatusText.TabIndex = 23;
    304304      //
     
    327327      this.dateCalculatedText.Location = new System.Drawing.Point(95, 85);
    328328      this.dateCalculatedText.Name = "dateCalculatedText";
    329       this.dateCalculatedText.Size = new System.Drawing.Size(432, 20);
     329      this.dateCalculatedText.Size = new System.Drawing.Size(509, 20);
    330330      this.dateCalculatedText.TabIndex = 22;
    331331      //
     
    352352      this.jobStatusGroupBox.Controls.Add(this.dateCreatedTextBox);
    353353      this.jobStatusGroupBox.Controls.Add(this.percentageLabel);
     354      this.jobStatusGroupBox.Controls.Add(this.exceptionLabel);
    354355      this.jobStatusGroupBox.Controls.Add(this.dateCreatedLabel);
    355356      this.jobStatusGroupBox.Controls.Add(this.dateFinishedLabel);
    356       this.jobStatusGroupBox.Location = new System.Drawing.Point(6, 164);
     357      this.jobStatusGroupBox.Controls.Add(this.exceptionTextBox);
     358      this.jobStatusGroupBox.Location = new System.Drawing.Point(6, 142);
    357359      this.jobStatusGroupBox.Name = "jobStatusGroupBox";
    358       this.jobStatusGroupBox.Size = new System.Drawing.Size(533, 134);
     360      this.jobStatusGroupBox.Size = new System.Drawing.Size(610, 162);
    359361      this.jobStatusGroupBox.TabIndex = 24;
    360362      this.jobStatusGroupBox.TabStop = false;
     
    367369      this.percentageProgressBar.Location = new System.Drawing.Point(153, 41);
    368370      this.percentageProgressBar.Name = "percentageProgressBar";
    369       this.percentageProgressBar.Size = new System.Drawing.Size(374, 20);
     371      this.percentageProgressBar.Size = new System.Drawing.Size(451, 20);
    370372      this.percentageProgressBar.TabIndex = 25;
    371373      //
     
    380382      this.tabControl.Name = "tabControl";
    381383      this.tabControl.SelectedIndex = 0;
    382       this.tabControl.Size = new System.Drawing.Size(550, 479);
     384      this.tabControl.Size = new System.Drawing.Size(627, 518);
    383385      this.tabControl.TabIndex = 25;
    384386      //
     
    394396      this.detailsTabPage.Controls.Add(this.projectLabel);
    395397      this.detailsTabPage.Controls.Add(this.coresNeededTextBox);
    396       this.detailsTabPage.Controls.Add(this.exceptionLabel);
    397398      this.detailsTabPage.Controls.Add(this.memoryNeededTextBox);
    398399      this.detailsTabPage.Controls.Add(this.memoryNeededLabel);
    399       this.detailsTabPage.Controls.Add(this.exceptionTextBox);
    400400      this.detailsTabPage.Controls.Add(this.coresNeededLabel);
    401401      this.detailsTabPage.Controls.Add(this.projectTextBox);
     
    404404      this.detailsTabPage.Name = "detailsTabPage";
    405405      this.detailsTabPage.Padding = new System.Windows.Forms.Padding(3);
    406       this.detailsTabPage.Size = new System.Drawing.Size(542, 453);
     406      this.detailsTabPage.Size = new System.Drawing.Size(619, 492);
    407407      this.detailsTabPage.TabIndex = 0;
    408408      this.detailsTabPage.Text = "Details";
     
    424424      this.jobIdTextBox.Location = new System.Drawing.Point(91, 6);
    425425      this.jobIdTextBox.Name = "jobIdTextBox";
    426       this.jobIdTextBox.Size = new System.Drawing.Size(448, 20);
     426      this.jobIdTextBox.Size = new System.Drawing.Size(525, 20);
    427427      this.jobIdTextBox.TabIndex = 26;
    428428      //
     
    433433      this.logTabPage.Name = "logTabPage";
    434434      this.logTabPage.Padding = new System.Windows.Forms.Padding(3);
    435       this.logTabPage.Size = new System.Drawing.Size(542, 453);
     435      this.logTabPage.Size = new System.Drawing.Size(545, 453);
    436436      this.logTabPage.TabIndex = 1;
    437437      this.logTabPage.Text = "Log";
     
    457457      this.Controls.Add(this.tabControl);
    458458      this.Name = "JobItemView";
    459       this.Size = new System.Drawing.Size(556, 485);
     459      this.Size = new System.Drawing.Size(633, 524);
    460460      this.snapshotGroupBox.ResumeLayout(false);
    461461      this.snapshotGroupBox.PerformLayout();
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.cs

    r4145 r4170  
    3636        logView.Content = Content.Log;
    3737        Content_JobDtoChanged(this, EventArgs.Empty);
     38        Content_JobStateChanged(this, EventArgs.Empty);
    3839        if (Content.LatestSnapshot != null) {
    3940          snapshotStatusText.InvokeIfRequired(c => c.Text = Content.LatestSnapshot.StatusMessage);
     
    4748      Content.LatestSnapshotChanged += new EventHandler(Content_LatestSnapshotChanged);
    4849      Content.JobDtoChanged += new EventHandler(Content_JobDtoChanged);
     50      Content.JobStateChanged += new EventHandler(Content_JobStateChanged);
    4951      Content.SnapshotRequestedStateChanged += new EventHandler(Content_SnapshotRequestedStateChanged);
    5052    }
     
    5355      Content.LatestSnapshotChanged -= new EventHandler(Content_LatestSnapshotChanged);
    5456      Content.JobDtoChanged -= new EventHandler(Content_JobDtoChanged);
     57      Content.JobStateChanged -= new EventHandler(Content_JobStateChanged);
    5558      Content.SnapshotRequestedStateChanged -= new EventHandler(Content_SnapshotRequestedStateChanged);
    5659      base.DeregisterContentEvents();
    5760    }
    5861
    59     void Content_JobDtoChanged(object sender, EventArgs e) {
     62    private void Content_JobDtoChanged(object sender, EventArgs e) {
    6063      if (InvokeRequired) {
    6164        Invoke(new EventHandler(Content_JobDtoChanged), sender, e);
    6265      } else {
    6366        this.jobIdTextBox.Text = Content.JobDto.Id.ToString();
    64         this.stateTextBox.Text = Content.JobDto.State.ToString();
    65         this.userIdTextBox.Text = Content.JobDto.UserId.ToString();
    66         this.percentageTextBox.Text = (Content.JobDto.Percentage*100).ToString() + "%";
    67         this.percentageProgressBar.Value = Convert.ToInt32(Content.JobDto.Percentage * percentageProgressBar.Maximum);
    6867        this.dateCreatedTextBox.Text = Content.JobDto.DateCreated.ToString();
    69         this.dateCalculatedText.Text = Content.JobDto.DateCalculated.ToString();
    70         this.dateFinishedTextBox.Text = Content.JobDto.DateFinished.ToString();
    7168        this.priorityTextBox.Text = Content.JobDto.Priority.ToString();
    7269        this.coresNeededTextBox.Text = Content.JobDto.CoresNeeded.ToString();
    7370        this.memoryNeededTextBox.Text = Content.JobDto.MemoryNeeded.ToString();
    74         this.exceptionTextBox.Text = Content.JobDto.Exception;
    7571        this.projectTextBox.Text = Content.JobDto.Project != null ? Content.JobDto.Project.Name : "-";
     72      }
     73    }
     74
     75    private void Content_JobStateChanged(object sender, EventArgs e) {
     76      if (InvokeRequired) {
     77        Invoke(new EventHandler(Content_JobStateChanged), sender, e);
     78      } else {
     79        this.stateTextBox.Text = Content.State.ToString();
     80        this.percentageTextBox.Text = (Content.Percentage * 100).ToString() + "%";
     81        this.percentageProgressBar.Value = Convert.ToInt32(Content.Percentage * percentageProgressBar.Maximum);
     82        this.dateCalculatedText.Text = Content.DateCalculated.ToString();
     83        this.dateFinishedTextBox.Text = Content.DateFinished.ToString();
     84        this.exceptionTextBox.Text = Content.Exception;
    7685      }
    7786    }
     
    95104      base.SetEnabledStateOfControls();
    96105      if (Content != null) {
    97         openSnapshotButton.Enabled = Content.SnapshotRequestedState == SnapshotRequestedState.Idle;
    98         requestSnapshotButton.Enabled = Content.SnapshotRequestedState == SnapshotRequestedState.Requested;
     106        openSnapshotButton.Enabled = Content.LatestSnapshot != null && Content.SnapshotRequestedState == SnapshotRequestedState.Idle;
     107        requestSnapshotButton.Enabled = Content.SnapshotRequestedState == SnapshotRequestedState.Idle;
    99108      }
    100109      this.jobIdTextBox.ReadOnly = this.ReadOnly;
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLab.Hive.Experiment-3.3.csproj

    r4141 r4170  
    111111  </ItemGroup>
    112112  <ItemGroup>
    113     <None Include="app.config" />
     113    <None Include="app.config">
     114      <SubType>Designer</SubType>
     115    </None>
    114116    <None Include="HeuristicLab.snk" />
    115117    <None Include="Properties\AssemblyInfo.frame" />
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs

    r4145 r4170  
    4141using System.Diagnostics;
    4242using System.Collections;
     43using System.ServiceModel;
    4344
    4445namespace HeuristicLab.Hive.Experiment {
     
    5253    private const string itemName = "Hive Experiment";
    5354    private const string itemDescription = "A runner for a single experiment, which's algorithms are executed in the Hive.";
    54     private const int resultPollingIntervalMs = 15000;
     55    private const int resultPollingIntervalMs = 5000;
    5556    private const int snapshotPollingIntervalMs = 1000;
    5657    private const int maxSnapshotRetries = 20;
     
    5960    private System.Timers.Timer timer;
    6061    private bool pausePending, stopPending;
     62    private bool sendingJobsFinished = false;
     63
     64    // ensure that only 2 threads can fetch jobresults simultaniously
     65    private Semaphore fetchJobSemaphore = new Semaphore(2, 2);
    6166
    6267    [Storable]
     
    7681    private bool stopResultsPollingPending = false;
    7782
    78     private IDictionary<Guid, Thread> resultPollingThreads;
     83    private Thread resultPollingThread;
    7984
    8085    /// <summary>
     
    145150    public HiveExperiment(bool deserializing)
    146151      : base(deserializing) {
    147       this.resultPollingThreads = new Dictionary<Guid, Thread>();
    148       jobItems = new JobItemList();
    149152    }
    150153
     
    157160      jobItems = new JobItemList();
    158161      isPollingResults = false;
    159       resultPollingThreads = new Dictionary<Guid, Thread>();
    160       RegisterEvents();
     162      RegisterJobItemListEvents();
    161163      InitTimer();
    162164    }
     
    181183      clone.stopPending = this.stopPending;
    182184      clone.pausePending = this.pausePending;
    183       clone.jobItems = (JobItemList)cloner.Clone(jobItems);
     185      clone.jobItems.AddRange((JobItemList)cloner.Clone(jobItems));
    184186      clone.lastUpdateTime = this.lastUpdateTime;
    185187      clone.isPollingResults = this.isPollingResults;
     
    192194      this.IsPollingResults = false;
    193195      this.stopResultsPollingPending = false;
    194       RegisterEvents();
     196      RegisterJobItemListEvents();
    195197      LogMessage("I was deserialized.");
    196198    }
    197    
     199
    198200    private void InitTimer() {
    199201      timer = new System.Timers.Timer(100);
     
    264266      lastUpdateTime = DateTime.Now;
    265267      this.ExecutionState = Core.ExecutionState.Started;
     268      StartResultPolling();
     269
    266270      Thread t = new Thread(() => {
    267271        IExecutionEngineFacade executionEngineFacade = GetExecutionEngineFacade();
    268 
    269         pendingOptimizersByJobId = new Dictionary<Guid, IOptimizer>();
    270         parentOptimizersByPendingOptimizer = GetOptimizers(true);
    271         IEnumerable<string> groups = ResourceGroups;
    272272       
    273         foreach (IOptimizer optimizer in parentOptimizersByPendingOptimizer.Keys) {
    274           SerializedJob serializedJob = CreateSerializedJob(optimizer);
    275           ResponseObject<JobDto> response = executionEngineFacade.AddJobWithGroupStrings(serializedJob, groups);
    276           pendingOptimizersByJobId.Add(response.Obj.Id, optimizer);
    277 
    278           JobItem jobItem = new JobItem() {
    279             JobDto = response.Obj,
    280             LatestSnapshot = new ResponseObject<SerializedJob>() {
    281               Obj = serializedJob,
    282               StatusMessage = "Initial Snapshot",
    283               Success = true
    284             },
    285             Optimizer = optimizer
    286           };
    287           jobItems.Add(jobItem);
    288           jobItem.LogMessage("Job sent to Hive");
    289 
    290           LogMessage("Sent job to Hive (jobId: " + response.Obj.Id + ")");
    291         }
    292 
    293         // start results polling after sending sending the jobs to the server (to avoid race conflicts at the optimizers-collection)
    294         StartResultPolling();
     273        try {
     274          pendingOptimizersByJobId = new Dictionary<Guid, IOptimizer>();
     275
     276          LogMessage("Extracting jobs from Experiment");
     277          parentOptimizersByPendingOptimizer = GetOptimizers(true);
     278          LogMessage("Extraction of jobs from Experiment finished");
     279         
     280          IEnumerable<string> groups = ResourceGroups;
     281
     282          sendingJobsFinished = false;
     283          foreach (IOptimizer optimizer in parentOptimizersByPendingOptimizer.Keys) {
     284            SerializedJob serializedJob = CreateSerializedJob(optimizer);
     285            ResponseObject<JobDto> response = executionEngineFacade.AddJobWithGroupStrings(serializedJob, groups);
     286            pendingOptimizersByJobId.Add(response.Obj.Id, optimizer);
     287
     288            JobItem jobItem = new JobItem() {
     289              JobDto = response.Obj,
     290              LatestSnapshot = null,
     291              Optimizer = optimizer
     292            };
     293            lock (jobItems) {
     294              jobItems.Add(jobItem);
     295            }
     296            LogMessage(jobItem.JobDto.Id, "Job sent to Hive");
     297          }
     298          sendingJobsFinished = true;
     299        } catch (Exception e) {
     300          LogMessage("Error: Starting HiveExperiment failed: " + e.Message);
     301          this.ExecutionState = Core.ExecutionState.Stopped;
     302          OnStopped();
     303        }
     304
    295305      });
    296306      t.Start();
     
    305315    }
    306316
    307     private void CreateResultPollingThreads() {
    308       foreach (JobItem jobItem in JobItems) {
    309         if (!resultPollingThreads.ContainsKey(jobItem.JobDto.Id) && jobItem.JobDto.State != State.Finished) {
    310           resultPollingThreads.Add(jobItem.JobDto.Id, CreateResultPollingThread(jobItem.JobDto));
    311         }
    312       }
    313     }
    314 
    315317    public void StartResultPolling() {
    316318      this.stopResultsPollingPending = false;
    317319      this.IsPollingResults = true;
    318       lock (resultPollingThreads) {
    319         CreateResultPollingThreads();
    320         foreach (Thread pollingThread in resultPollingThreads.Values) {
    321           if (pollingThread.ThreadState != System.Threading.ThreadState.Running) {
    322             pollingThread.Start();
    323           }
    324         }
    325       }
     320      resultPollingThread = CreateResultPollingThread();
     321      if (resultPollingThread.ThreadState != System.Threading.ThreadState.Running)
     322        resultPollingThread.Start();
    326323    }
    327324
    328325    public void StopResultPolling() {
    329326      this.stopResultsPollingPending = true;
    330       foreach (Thread pollingThread in resultPollingThreads.Values) {
    331         pollingThread.Interrupt();
    332       }
     327      resultPollingThread.Interrupt();
    333328      this.stopResultsPollingPending = false;
    334329    }
     
    369364        HeuristicLab.Optimization.Experiment experiment = optimizer as HeuristicLab.Optimization.Experiment;
    370365        if (this.experiment != experiment) {
    371           prepend += "Experiment/"; // don't prepend for top-level optimizers
     366          prepend += experiment.Name + "/"; // don't prepend for top-level optimizers
    372367        }
    373368        foreach (IOptimizer opt in experiment.Optimizers) {
     
    376371      } else if (optimizer is BatchRun) {
    377372        BatchRun batchRun = optimizer as BatchRun;
    378         prepend += "BatchRun/";
     373        prepend += batchRun.Name + "/";
    379374        for (int i = 0; i < batchRun.Repetitions; i++) {
    380375          IOptimizer opt = (IOptimizer)batchRun.Algorithm.Clone();
     
    409404          BatchRun batchRun = (BatchRun)parentOptimizer;
    410405          if (newOptimizer is IAlgorithm) {
    411             batchRun.Runs.Add(new Run(newOptimizer.Name, (IAlgorithm)newOptimizer) );
     406            batchRun.Runs.Add(new Run(newOptimizer.Name, (IAlgorithm)newOptimizer));
    412407          } else {
    413408            throw new NotSupportedException("Only IAlgorithm types supported");
     
    422417      IExecutionEngineFacade executionEngineFacade = GetExecutionEngineFacade();
    423418      Response response = executionEngineFacade.AbortJob(jobId);
    424       GetJobItemById(jobId).LogMessage("Aborting Job: " + response.StatusMessage);
     419      LogMessage(jobId, "Aborting Job: " + response.StatusMessage);
    425420    }
    426421
     
    428423
    429424    private IExecutionEngineFacade GetExecutionEngineFacade() {
    430       return ServiceLocator.CreateExecutionEngineFacade(ServerUrl);
     425      IExecutionEngineFacade executionEngineFacade = null;
     426      do {
     427        try {
     428          executionEngineFacade = ServiceLocator.CreateExecutionEngineFacade(ServerUrl);
     429        } catch (EndpointNotFoundException exception) {
     430          LogMessage("Could not connect to Server: " + exception.Message + ". Will try again in " + (resultPollingIntervalMs / 1000) + " sec.");
     431          Thread.Sleep(resultPollingIntervalMs);
     432        }
     433      } while (executionEngineFacade == null && this.ExecutionState != Core.ExecutionState.Stopped);
     434      return executionEngineFacade;
    431435    }
    432436
     
    444448      // find out which which plugins are needed for the given object
    445449      List<HivePluginInfoDto> pluginsNeeded = (
    446         from p in GetDeclaringPlugins(optimizer.GetType())
     450        from p in GetDeclaringPlugins(job.GetType())
    447451        select new HivePluginInfoDto() {
    448452          Name = p.Name,
     
    466470    }
    467471
    468     private Thread CreateResultPollingThread(JobDto job) {
     472    /// <summary>
     473    /// Requests a resultList for all jobItems not finished or aborted
     474    /// </summary>
     475    /// <returns></returns>
     476    private Thread CreateResultPollingThread() {
    469477      return new Thread(() => {
    470478        try {
    471           GetJobItemById(job.Id).LogMessage("Starting job results polling");
    472           IExecutionEngineFacade executionEngineFacade = GetExecutionEngineFacade();
    473           IJob restoredObject = null;
    474           IOptimizer originalOptimizer = pendingOptimizersByJobId[job.Id];
    475 
    476479          do {
    477             // loop while
    478             // 1. the user doesn't request an abort
    479             // 2. there is a problem with server communication (success==false)
    480             // 3. no result for the job is available yet (response.Obj==null)
    481             // 4. the result that we get from the server is a snapshot and not the final result
    482 
    483             if (stopPending || !this.IsPollingResults) {
    484               return;
     480            IExecutionEngineFacade executionEngineFacade = GetExecutionEngineFacade();
     481            IEnumerable<Guid> jobIdsToQuery = from job in JobItems
     482                                              where job.State != State.Finished &&
     483                                              job.State != State.Failed
     484                                              select job.JobDto.Id;
     485            if (jobIdsToQuery.Count() > 0) {
     486              LogMessage("Polling results for " + jobIdsToQuery.Count() + " jobs");
     487              try {
     488                ResponseObject<JobResultList> response = executionEngineFacade.GetAllJobResults(jobIdsToQuery);
     489                if (response.Success) {
     490                  JobResultList jobItemList = response.Obj;
     491                  UpdateJobItems(jobItemList);
     492
     493                  LogMessage("Polling successfully finished");
     494                }
     495              } catch (Exception e) {
     496                LogMessage("Polling results failed: " + e.Message);
     497              }
     498              Thread.Sleep(resultPollingIntervalMs);
     499            } else {
     500              if (sendingJobsFinished) {
     501                // all the jobs have been sent to hive, but non are to query any more (all finished or failed)
     502                this.stopResultsPollingPending = true;
     503              }
    485504            }
    486 
    487             ResponseObject<JobDto> response = executionEngineFacade.GetJobById(job.Id);
    488             LogMessage("Response: " + response.StatusMessage + " (jobId: " + job.Id + ")");
    489             GetJobItemById(job.Id).LogMessage("Response: " + response.StatusMessage);
    490 
    491             UpdateJobItem(response.Obj);
    492 
    493             if (response.Obj.State == State.Abort) {
    494               pendingOptimizersByJobId.Remove(job.Id);
    495               parentOptimizersByPendingOptimizer.Remove(originalOptimizer);
    496               GetJobItemById(job.Id).LogMessage("Job successfully aborted");
    497               return;
    498             }
    499 
    500             if (response.Obj.State == State.Failed) {
    501               pendingOptimizersByJobId.Remove(job.Id);
    502               parentOptimizersByPendingOptimizer.Remove(originalOptimizer);
    503               GetJobItemById(job.Id).LogMessage("Job failed with exception: " + response.Obj.Exception);
    504               return;
    505             }
    506 
    507             if (response.Success && response.Obj != null && response.Obj.State == State.Finished) {
    508               ResponseObject<SerializedJob> jobResponse = executionEngineFacade.GetLastSerializedResult(job.Id, false, false);
    509               restoredObject = XmlParser.Deserialize<IJob>(new MemoryStream(jobResponse.Obj.SerializedJobData));
    510               UpdateSnapshot(jobResponse);
    511             } else {
    512               Thread.Sleep(resultPollingIntervalMs);
    513             }
    514           } while (restoredObject == null || restoredObject.ExecutionState != Core.ExecutionState.Stopped);
    515 
    516           LogMessage("Job finished (jobId: " + job.Id + ")");
    517           GetJobItemById(job.Id).LogMessage("Job finished");
    518           // job retrieved... replace the existing optimizers with the finished one
    519          
    520           IOptimizer restoredOptimizer = ((OptimizerJob)restoredObject).Optimizer;
    521          
    522           ReplaceOptimizer(parentOptimizersByPendingOptimizer[originalOptimizer], originalOptimizer, restoredOptimizer);
    523           pendingOptimizersByJobId.Remove(job.Id);
    524           parentOptimizersByPendingOptimizer.Remove(originalOptimizer);
    525 
     505          } while (!this.stopResultsPollingPending);
    526506        } catch (ThreadInterruptedException exception) {
    527 
     507          // thread has been interuppted
    528508        } finally {
    529           GetJobItemById(job.Id).LogMessage("ResultsPolling Thread stopped");
    530           lock (resultPollingThreads) {
    531             resultPollingThreads.Remove(job.Id);
    532             if (resultPollingThreads.Count == 0) {
    533               IsPollingResults = false;
    534             }
     509          this.IsPollingResults = false;
     510        }
     511      });
     512    }
     513
     514    /// <summary>
     515    /// Updates all JobItems with the results
     516    /// </summary>
     517    /// <param name="jobResultList"></param>
     518    private void UpdateJobItems(JobResultList jobResultList) {
     519      // use a Dict to avoid quadratic runtime complexity
     520      IDictionary<Guid, JobResult> jobResultDict = jobResultList.ToDictionary(job => job.JobId);
     521      lock (jobItems) {
     522        foreach (JobItem jobItem in JobItems) {
     523          if (jobResultDict.ContainsKey(jobItem.JobDto.Id)) {
     524            jobItem.JobResult = jobResultDict[jobItem.JobDto.Id];
    535525          }
    536 
    537           // check if finished
    538           if (pendingOptimizersByJobId.Count == 0) {
    539             this.ExecutionState = Core.ExecutionState.Stopped;
    540             OnStopped();
    541           }
     526        }
     527      }
     528    }
     529
     530    void JobItem_JobStateChanged(object sender, EventArgs e) {
     531      JobItem jobItem = (JobItem)sender;
     532      Thread t = new Thread(() => {
     533        if (jobItem.State == State.Finished) {
     534          FetchAndUpdateJob(jobItem.JobDto.Id);
     535          DisposeOptimizerMappings(jobItem.JobDto.Id);
     536        } else if (jobItem.State == State.Failed) {
     537          DisposeOptimizerMappings(jobItem.JobDto.Id);
     538        }
     539
     540        if (NoMorePendingOptimizers()) {
     541          StopResultPolling();
     542          this.ExecutionState = Core.ExecutionState.Stopped;
     543          OnStopped();
    542544        }
    543545      });
    544     }
     546      t.Start();
     547    }
     548
     549    private bool NoMorePendingOptimizers() {
     550      return pendingOptimizersByJobId.Count == 0;
     551    }
     552
     553    /// <summary>
     554    /// Removes optimizers from
     555    ///  - parentOptimizersByPendingOptimizer
     556    ///  - pendingOptimizersByJobId
     557    /// </summary>
     558    /// <param name="jobId"></param>
     559    private void DisposeOptimizerMappings(Guid jobId) {
     560      parentOptimizersByPendingOptimizer.Remove(pendingOptimizersByJobId[jobId]);
     561      pendingOptimizersByJobId.Remove(jobId);
     562    }
     563
     564    /// <summary>
     565    /// Fetches the finished job from the server and updates the jobItem
     566    /// </summary>
     567    private void FetchAndUpdateJob(Guid jobId) {
     568      LogMessage(jobId, "FetchAndUpdateJob started");
     569      IExecutionEngineFacade executionEngineFacade = GetExecutionEngineFacade();
     570      IOptimizer originalOptimizer = pendingOptimizersByJobId[jobId];
     571
     572      fetchJobSemaphore.WaitOne();
     573      ResponseObject<SerializedJob> jobResponse = executionEngineFacade.GetLastSerializedResult(jobId, false, false);
     574      UpdateSnapshot(jobResponse);
     575
     576      IJob restoredObject = XmlParser.Deserialize<IJob>(new MemoryStream(jobResponse.Obj.SerializedJobData));
     577      IOptimizer restoredOptimizer = ((OptimizerJob)restoredObject).Optimizer;
     578
     579      ReplaceOptimizer(parentOptimizersByPendingOptimizer[originalOptimizer], originalOptimizer, restoredOptimizer);
     580      fetchJobSemaphore.Release();
     581      LogMessage(jobId, "FetchAndUpdateJob ended");
     582    }
     583
     584    //// ensure that not all resultPollingThreads can access the server simultaniously
     585    //private Semaphore resultPollingSemaphore = new Semaphore(5, 5);
     586
     587    //private Thread CreateResultPollingThread(JobDto job) {
     588    //  return new Thread(() => {
     589    //    try {
     590    //      GetJobItemById(job.Id).LogMessage("Starting job results polling");
     591    //      IExecutionEngineFacade executionEngineFacade = GetExecutionEngineFacade();
     592    //      IJob restoredObject = null;
     593    //      IOptimizer originalOptimizer = pendingOptimizersByJobId[job.Id];
     594
     595    //      do {
     596    //        // loop while
     597    //        // 1. the user doesn't request an abort
     598    //        // 2. there is a problem with server communication (success==false)
     599    //        // 3. no result for the job is available yet (response.Obj==null)
     600    //        // 4. the result that we get from the server is a snapshot and not the final result
     601    //        try {
     602    //          resultPollingSemaphore.WaitOne();
     603    //          if (stopPending || !this.IsPollingResults) {
     604    //            return;
     605    //          }
     606
     607    //          ResponseObject<JobDto> response = null;
     608    //          try {
     609    //            response = executionEngineFacade.GetJobById(job.Id);
     610    //            LogMessage("Response: " + response.StatusMessage + " (jobId: " + job.Id + ")");
     611    //            GetJobItemById(job.Id).LogMessage("Response: " + response.StatusMessage);
     612
     613    //            UpdateJobItem(response.Obj);
     614
     615    //            if (response.Obj.State == State.Abort) {
     616    //              pendingOptimizersByJobId.Remove(job.Id);
     617    //              parentOptimizersByPendingOptimizer.Remove(originalOptimizer);
     618    //              GetJobItemById(job.Id).LogMessage("Job successfully aborted");
     619    //              return;
     620    //            }
     621
     622    //            if (response.Obj.State == State.Failed) {
     623    //              pendingOptimizersByJobId.Remove(job.Id);
     624    //              parentOptimizersByPendingOptimizer.Remove(originalOptimizer);
     625    //              GetJobItemById(job.Id).LogMessage("Job failed with exception: " + response.Obj.Exception);
     626    //              return;
     627    //            }
     628    //          } catch (Exception e) {
     629    //            LogMessage("Error: Result polling failed for job (" + job.Id + "): " + e.Message);
     630    //            GetJobItemById(job.Id).LogMessage("Error: Result polling failed: " + e.Message);
     631    //          }
     632
     633    //          if (response != null && response.Success && response.Obj != null && response.Obj.State == State.Finished) {
     634    //            try {
     635    //              ResponseObject<SerializedJob> jobResponse = executionEngineFacade.GetLastSerializedResult(job.Id, false, false);
     636    //              restoredObject = XmlParser.Deserialize<IJob>(new MemoryStream(jobResponse.Obj.SerializedJobData));
     637    //              UpdateSnapshot(jobResponse);
     638    //            } catch (Exception e) {
     639    //              LogMessage("Error: Retrieving final result failed for job (" + job.Id + "): " + e.Message);
     640    //              GetJobItemById(job.Id).LogMessage("Error: Retrieving final result failed: " + e.Message);
     641    //            }
     642    //          } else {
     643    //            Thread.Sleep(resultPollingIntervalMs);
     644    //          }
     645    //        } finally {
     646    //          // use finally to always release the semaphore lock
     647    //          resultPollingSemaphore.Release();
     648    //        }
     649    //      } while (restoredObject == null || restoredObject.ExecutionState != Core.ExecutionState.Stopped);
     650
     651    //      LogMessage("Job finished (jobId: " + job.Id + ")");
     652    //      GetJobItemById(job.Id).LogMessage("Job finished");
     653    //      // job retrieved... replace the existing optimizers with the finished one
     654
     655    //      IOptimizer restoredOptimizer = ((OptimizerJob)restoredObject).Optimizer;
     656
     657    //      ReplaceOptimizer(parentOptimizersByPendingOptimizer[originalOptimizer], originalOptimizer, restoredOptimizer);
     658    //      pendingOptimizersByJobId.Remove(job.Id);
     659    //      parentOptimizersByPendingOptimizer.Remove(originalOptimizer);
     660
     661    //    } catch (ThreadInterruptedException exception) {
     662
     663    //    } finally {
     664    //      GetJobItemById(job.Id).LogMessage("ResultsPolling Thread stopped");
     665    //      //lock (resultPollingThreads) {
     666    //      //  resultPollingThreads.Remove(job.Id);
     667    //      //  if (resultPollingThreads.Count == 0) {
     668    //      //    IsPollingResults = false;
     669    //      //  }
     670    //      //}
     671
     672    //      // check if finished
     673    //      if (pendingOptimizersByJobId.Count == 0) {
     674    //        this.ExecutionState = Core.ExecutionState.Stopped;
     675    //        OnStopped();
     676    //      }
     677    //    }
     678    //  });
     679    //}
    545680
    546681    private void UpdateJobItem(JobDto jobDto) {
     
    559694        log.LogMessage(message);
    560695      }
     696    }
     697
     698    private void LogMessage(Guid jobId, string message) {
     699      GetJobItemById(jobId).LogMessage(message);
     700      LogMessage(message + " (jobId: " + jobId + ")");
    561701    }
    562702
     
    598738      }
    599739      if (response.Success) {
    600         GetJobItemById(jobId).LogMessage("Snapshot polling successfull for job " + jobId);
     740        LogMessage(jobId, "Snapshot polling successfull for job " + jobId);
    601741        GetJobItemById(jobId).LatestSnapshot = response;
    602742      } else {
    603         GetJobItemById(jobId).LogMessage("Error: Polling of Snapshot failed for job " + jobId + ": " + response.StatusMessage);
     743        LogMessage(jobId, "Error: Polling of Snapshot failed for job " + jobId + ": " + response.StatusMessage);
    604744      }
    605745    }
     
    770910    }
    771911
    772     private void RegisterEvents() {
     912    private void RegisterJobItemListEvents() {
    773913      jobItems.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_CollectionReset);
    774914      jobItems.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_ItemsAdded);
     
    777917    }
    778918
    779     private void DeregisterEvents() {
    780       jobItems.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_CollectionReset);
    781       jobItems.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_ItemsAdded);
    782       jobItems.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_ItemsRemoved);
    783       jobItems.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_ItemsReplaced);
    784     }
    785 
     919    private void DeregisterJobItemListEvents() {
     920      jobItems.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_CollectionReset);
     921      jobItems.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_ItemsAdded);
     922      jobItems.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_ItemsRemoved);
     923      jobItems.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_ItemsReplaced);
     924    }
    786925
    787926    void jobItems_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<JobItem>> e) {
    788       UpdateSnapshotRequestedEvents(e);
    789     }
    790 
    791     private void UpdateSnapshotRequestedEvents(CollectionItemsChangedEventArgs<IndexedItem<JobItem>> e) {
    792       foreach (var item in e.OldItems) {
    793         item.Value.SnapshotRequestedStateChanged -= new EventHandler(JobItem_SnapshotRequestedStateChanged);
    794       }
    795       foreach (var item in e.Items) {
    796         item.Value.SnapshotRequestedStateChanged += new EventHandler(JobItem_SnapshotRequestedStateChanged);
     927      UpdateJobItemEvents(e);
     928    }
     929
     930    private void UpdateJobItemEvents(CollectionItemsChangedEventArgs<IndexedItem<JobItem>> e) {
     931      if (e.OldItems != null) {
     932        foreach (var item in e.OldItems) {
     933          item.Value.SnapshotRequestedStateChanged -= new EventHandler(JobItem_SnapshotRequestedStateChanged);
     934          item.Value.JobStateChanged -= new EventHandler(JobItem_JobStateChanged);
     935        }
     936      }
     937      if (e.Items != null) {
     938        foreach (var item in e.Items) {
     939          item.Value.JobStateChanged += new EventHandler(JobItem_JobStateChanged);
     940          item.Value.SnapshotRequestedStateChanged += new EventHandler(JobItem_SnapshotRequestedStateChanged);
     941        }
    797942      }
    798943    }
    799944
    800945    void jobItems_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<JobItem>> e) {
    801       UpdateSnapshotRequestedEvents(e);
     946      UpdateJobItemEvents(e);
    802947    }
    803948
    804949    void jobItems_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<JobItem>> e) {
    805       UpdateSnapshotRequestedEvents(e);
     950      UpdateJobItemEvents(e);
    806951    }
    807952
    808953    void jobItems_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<JobItem>> e) {
    809954      foreach (var item in e.OldItems) {
     955        item.Value.JobStateChanged -= new EventHandler(JobItem_JobStateChanged);
    810956        item.Value.SnapshotRequestedStateChanged -= new EventHandler(JobItem_SnapshotRequestedStateChanged);
    811957      }
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItem.cs

    r4145 r4170  
    2121    public override Image ItemImage {
    2222      get {
    23         if (jobDto.State == State.Offline) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutablePrepared;
    24         else if (jobDto.State == State.Idle) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutablePrepared;
    25         else if (jobDto.State == State.Calculating) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStarted;
    26         else if (jobDto.State == State.Abort) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
    27         else if (jobDto.State == State.Failed) return HeuristicLab.Common.Resources.VS2008ImageLibrary.Error;
    28         else if (jobDto.State == State.Finished) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
     23        if (State == State.Offline) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutablePrepared;
     24        else if (State == State.Idle) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutablePrepared;
     25        else if (State == State.Calculating) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStarted;
     26        else if (State == State.Abort) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
     27        else if (State == State.Failed) return HeuristicLab.Common.Resources.VS2008ImageLibrary.Error;
     28        else if (State == State.Finished) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
    2929        else return HeuristicLab.Common.Resources.VS2008ImageLibrary.Event;
    3030      }
     
    3333    [Storable]
    3434    private JobDto jobDto;
     35    /// <summary>
     36    /// Some static information about the job. Don't use State-Information out of there
     37    /// </summary>
    3538    public JobDto JobDto {
    3639      get { return jobDto; }
     
    4649
    4750    [Storable]
     51    private JobResult jobResult;
     52    public JobResult JobResult {
     53      private get { return jobResult; }
     54      set {
     55        if (jobResult != value) {
     56          jobResult = value;
     57          OnJobStateChanged();
     58          OnToStringChanged();
     59          OnItemImageChanged();
     60        }
     61      }
     62    }
     63
     64    public State State {
     65      get { return jobResult != null ? JobResult.State : JobDto.State; }
     66    }
     67
     68    public double? Percentage {
     69      get { return jobResult != null ? JobResult.Percentage : JobDto.Percentage; }
     70    }
     71
     72    public string Exception {
     73      get { return jobResult != null ? JobResult.Exception : JobDto.Exception; }
     74    }
     75
     76    public DateTime? DateCalculated {
     77      get { return jobResult != null ? JobResult.DateCalculated : JobDto.DateCalculated; }
     78    }
     79
     80    public DateTime? DateFinished {
     81      get { return jobResult != null ? JobResult.DateFinished : JobDto.DateFinished; }
     82    }
     83   
     84    [Storable]
    4885    private ResponseObject<SerializedJob> latestSnapshot;
    4986    public ResponseObject<SerializedJob> LatestSnapshot {
     
    5289        if (latestSnapshot != value) {
    5390          latestSnapshot = value;
    54           latestSnapshotTime = DateTime.Now;
     91          if (value != null) {
     92            latestSnapshotTime = DateTime.Now;
     93          }
    5594          SnapshotRequestedState = Experiment.SnapshotRequestedState.Idle;
    5695          OnLatestSnapshotChanged();
     
    114153    }
    115154
     155    public event EventHandler JobStateChanged;
     156    private void OnJobStateChanged() {
     157      LogMessage("JobStateChanged");
     158      EventHandler handler = JobStateChanged;
     159      if (handler != null) handler(this, EventArgs.Empty);
     160    }
     161
    116162    public void LogMessage(string message) {
    117163      lock (locker) {
     
    128174      clone.log = (ILog)cloner.Clone(this.log);
    129175      clone.optimizer = (IOptimizer)cloner.Clone(this.optimizer);
     176      clone.jobResult = (JobResult)cloner.Clone(this.jobResult);
    130177      return clone;
    131178    }
     
    142189    }
    143190
     191
    144192  }
    145193}
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/OptimizerJob.cs

    r4120 r4170  
    5757    }
    5858
    59     // [chn] needed?
    60     public void Prepare(Core.IOperation initialOperation) {
    61       throw new NotImplementedException();
     59    public void Prepare() {
     60      optimizer.Prepare();
    6261    }
    6362
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/app.config

    r4116 r4170  
    99    <HeuristicLab.Hive.Experiment.Properties.Settings>
    1010      <setting name="HiveServerUrl" serializeAs="String">
    11         <value>net.tcp://10.42.1.153:9000/ExecutionEngine/ExecutionEngineFacade</value>
     11        <value>net.tcp://10.20.71.22:9000/ExecutionEngine/ExecutionEngineFacade</value>
    1212      </setting>
    1313      <setting name="ResourceIds" serializeAs="String">
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/Interfaces/IJob.cs

    r4119 r4170  
    1010
    1111    void Run();
    12     void Prepare(IOperation initialOperation);
     12    void Prepare();
    1313    void Start();
    1414    void Stop();
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3

    • Property svn:ignore
      •  

        old new  
        11bin
        22obj
         3HeuristicLab.Hive.Server.Core-3.3.csproj.user
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ClientCommunicator.cs

    r4141 r4170  
    469469      //tx = session.BeginTransaction();
    470470
    471       ResponseResultReceived response =
    472         ProcessJobResult(
    473         result.ClientId,
    474         result.JobId,
    475         new byte[] { },
    476         result.Percentage,
    477         result.Exception,
    478         finished);
     471      ResponseResultReceived response = ProcessJobResult(result.ClientId, result.JobId, new byte[] { }, result.Percentage, result.Exception, finished);
    479472
    480473      if (response.Success) {
     
    509502      Guid jobId,
    510503      byte[] result,
    511       double percentage,
    512       Exception exception,
     504      double? percentage,
     505      string exception,
    513506      bool finished) {
    514507
     
    522515      if (job != null) {
    523516        job.JobInfo = DaoLocator.JobDao.FindById(jobId);
    524         job.JobInfo.Client = job.JobInfo.Client = DaoLocator.ClientDao.GetClientForJob(jobId);
    525       }
    526 
    527       if (job == null && job.JobInfo != null) {
     517        if (job.JobInfo != null) {
     518          job.JobInfo.Client = job.JobInfo.Client = DaoLocator.ClientDao.GetClientForJob(jobId);
     519        }
     520      }
     521     
     522      if (job != null && job.JobInfo == null) {
    528523        response.Success = false;
    529524        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JOB_WITH_THIS_ID;
     
    591586      job.JobInfo.Percentage = percentage;
    592587
    593       if (exception != null) {
     588      if (!string.IsNullOrEmpty(exception)) {
    594589        job.JobInfo.State = State.Failed;
    595         job.JobInfo.Exception = exception.ToString();
     590        job.JobInfo.Exception = exception;
    596591        job.JobInfo.DateFinished = DateTime.Now;
    597592      } else if (finished) {
     
    629624      byte[] result,
    630625      double percentage,
    631       Exception exception) {
     626      string exception) {
    632627
    633628      return ProcessJobResult(clientId, jobId, result, percentage, exception, true);
    634629    }
    635630
    636     public ResponseResultReceived ProcessSnapshot(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception) {
     631    public ResponseResultReceived ProcessSnapshot(Guid clientId, Guid jobId, byte[] result, double percentage, string exception) {
    637632      return ProcessJobResult(clientId, jobId, result, percentage, exception, false);
    638633    }
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ClientFacade.cs

    r4107 r4170  
    6767    }
    6868
    69     public ResponseResultReceived StoreFinishedJobResult(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception) {
     69    public ResponseResultReceived StoreFinishedJobResult(Guid clientId, Guid jobId, byte[] result, double percentage, string exception) {
    7070      using (contextFactory.GetContext()) {
    7171        return clientCommunicator.StoreFinishedJobResult(clientId, jobId, result, percentage, exception);
     
    8989    }
    9090
    91     public ResponseResultReceived ProcessSnapshot(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception) {
     91    public ResponseResultReceived ProcessSnapshot(Guid clientId, Guid jobId, byte[] result, double percentage, string exception) {
    9292      using (contextFactory.GetContext()) {
    9393        return clientCommunicator.ProcessSnapshot(clientId, jobId, result, percentage, exception);
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ExecutionEngineFacade.cs

    r4137 r4170  
    7575      }
    7676    }
     77
     78
     79    public ResponseObject<JobResultList> GetAllJobResults(IEnumerable<Guid> jobIds) {
     80      using (contextFactory.GetContext(false)) {
     81        return jobManager.GetAllJobResults(jobIds);
     82      }
     83    }
    7784    #endregion
     85
     86
    7887  }
    7988}
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ServerConsoleFacade.cs

    r4137 r4170  
    154154    }
    155155
    156     public ResponseList<JobResult> GetAllJobResults(Guid jobId) {
    157       using (contextFactory.GetContext(false)) {
    158         secMan.Authorize("AccessJobResults", sessionID, jobId);
    159         return jobManager.GetAllJobResults(jobId);
     156    public ResponseObject<JobResultList> GetAllJobResults(IEnumerable<Guid> jobIds) {
     157      using (contextFactory.GetContext(false)) {
     158        //secMan.Authorize("AccessJobResults", sessionID, jobId); skip authorization
     159        return jobManager.GetAllJobResults(jobIds);
    160160      }
    161161    }
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HeuristicLab.Hive.Server.Core-3.3.csproj

    r4133 r4170  
    165165  </ItemGroup>
    166166  <ItemGroup>
    167     <WCFMetadata Include="Service References\" />
    168   </ItemGroup>
    169   <ItemGroup>
    170167    <ProjectReference Include="..\..\HeuristicLab.DataAccess\3.3\HeuristicLab.DataAccess-3.3.csproj">
    171168      <Project>{9076697B-C151-46CD-95BC-1D059492B478}</Project>
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/JobManager.cs

    r4121 r4170  
    320320    }
    321321
    322     public ResponseList<JobResult> GetAllJobResults(Guid jobId) {
    323       return new ResponseList<JobResult>();
     322    public ResponseObject<JobResultList> GetAllJobResults(IEnumerable<Guid> jobIds) {
     323      ResponseObject<JobResultList> response = new ResponseObject<JobResultList>();
     324      JobResultList jobResultList = new JobResultList();
     325      IEnumerable<JobDto> jobs = DaoLocator.JobDao.FindJobsById(jobIds);
     326      foreach (JobDto job in jobs) {
     327        jobResultList.Add(new JobResult() {
     328          JobId = job.Id,
     329          State = job.State,
     330          DateCalculated = job.DateCalculated,
     331          DateFinished = job.DateFinished,
     332          Exception = job.Exception,
     333          Percentage = job.Percentage
     334        });       
     335      }
     336      response.Obj = jobResultList;
     337      response.Success = true;
     338      response.StatusMessage = ApplicationConstants.RESPONSE_JOB_ALL_JOBS;
     339      return response;
    324340    }
    325341
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/HeuristicLab.Hive.Server.DataAccess-3.3.csproj

    r4133 r4170  
    8787  <ItemGroup>
    8888    <Compile Include="DataAccessException.cs" />
    89     <Compile Include="IClientConfigAdapter.cs" />
    9089    <Compile Include="IClientConfigDao.cs" />
    9190    <Compile Include="IClientDao.cs" />
     
    9493    <Compile Include="IGenericDao.cs" />
    9594    <Compile Include="IJobDao.cs" />
    96     <Compile Include="IPluginInfoAdapter.cs" />
    9795    <Compile Include="IPluginInfoDao.cs" />
    98     <Compile Include="IProjectAdapter.cs" />
    9996    <Compile Include="IUptimeCalendarDao.cs" />
    10097    <Compile Include="Properties\AssemblyInfo.cs" />
    10198    <Compile Include="HiveServerDataAccessPlugin.cs" />
    102     <Compile Include="IClientAdapter.cs" />
    103     <Compile Include="IClientGroupAdapter.cs" />
    104     <Compile Include="IJobAdapter.cs" />
    105     <Compile Include="IJobResultsAdapter.cs" />
    106     <Compile Include="IResourceAdapter.cs" />
    10799  </ItemGroup>
    108100  <ItemGroup>
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IJobDao.cs

    r3931 r4170  
    2525
    2626    void SetBinaryJobFile(Guid jobId, byte[] data);
     27
     28    IEnumerable<JobDto> FindJobsById(IEnumerable<Guid> jobIds);
    2729  }
    2830}
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/ContextFactory.cs

    r4120 r4170  
    1111using HeuristicLab.Tracing;
    1212using System.Threading;
     13using HeuristicLab.Hive.Server.LINQDataAccess.Properties;
    1314
    1415
     
    6768
    6869    private static DisposableHiveDataContext CreateContext() {
    69       return new DisposableHiveDataContext("Data Source=127.0.0.1;Initial Catalog=HeuristicLab.Hive;Integrated Security=SSPI");
     70      return new DisposableHiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString);
    7071    }
    7172
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HeuristicLab.Hive.Server.LINQDataAccess-3.3.csproj

    r4135 r4170  
    125125  </ItemGroup>
    126126  <ItemGroup>
     127    <None Include="app.config" />
    127128    <None Include="HeuristicLab.snk" />
    128129    <None Include="Properties\AssemblyInfo.frame" />
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs

    r4141 r4170  
    150150    }
    151151
     152    public IEnumerable<JobDto> FindJobsById(IEnumerable<Guid> jobIds) {
     153      IQueryable<JobDto> jobs = from job in Context.Jobs
     154                       where jobIds.Contains(job.JobId)
     155                       select EntityToDto(job, null);
     156
     157      return jobs.ToList();
     158    }
    152159    #endregion
    153160
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Properties/Settings.Designer.cs

    r4074 r4170  
    2727        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    2828        [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
    29         [global::System.Configuration.DefaultSettingValueAttribute("Data Source=127.0.0.1;Initial Catalog=HeuristicLab.Hive.Linq;Integrated Security=" +
    30             "True;MultipleActiveResultSets=True")]
     29        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=127.0.0.1;Initial Catalog=HeuristicLab.Hive;Integrated Security=True;" +
     30            "")]
    3131        public string HeuristicLab_Hive_LinqConnectionString {
    3232            get {
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Properties/Settings.settings

    r3931 r4170  
    66      <DesignTimeValue Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
    77&lt;SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
    8   &lt;ConnectionString&gt;Data Source=127.0.0.1;Initial Catalog=HeuristicLab.Hive.Linq;Integrated Security=True;MultipleActiveResultSets=True&lt;/ConnectionString&gt;
     8  &lt;ConnectionString&gt;Data Source=127.0.0.1;Initial Catalog=HeuristicLab.Hive;Integrated Security=True;&lt;/ConnectionString&gt;
    99  &lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
    1010&lt;/SerializableConnectionString&gt;</DesignTimeValue>
    11       <Value Profile="(Default)">Data Source=127.0.0.1;Initial Catalog=HeuristicLab.Hive.Linq;Integrated Security=True;MultipleActiveResultSets=True</Value>
     11      <Value Profile="(Default)">Data Source=127.0.0.1;Initial Catalog=HeuristicLab.Hive;Integrated Security=True;</Value>
    1212    </Setting>
    1313  </Settings>
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLab.Hive.Server-3.3.csproj

    r4121 r4170  
    170170  </ItemGroup>
    171171  <ItemGroup>
    172     <None Include="app.config">
    173       <SubType>Designer</SubType>
    174     </None>
    175172    <None Include="Resources\HeuristicLab.ico" />
    176173  </ItemGroup>
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj

    r4136 r4170  
    7373    <None Include="HeuristicLab 3.3.exe.config">
    7474      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     75      <SubType>Designer</SubType>
    7576    </None>
    7677    <None Include="HeuristicLab.snk" />
  • branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/MergeConfigs.cmd

    r4136 r4170  
    1 ConfigMerger "%SolutionDir%HeuristicLab.Hive.Server\3.3\app.config" "HeuristicLab.Hive-3.3.dll.config"
     1ConfigMerger "%SolutionDir%HeuristicLab.Hive.Server.LINQDataAccess\3.3\app.config" "HeuristicLab.Hive-3.3.dll.config"
    22ConfigMerger "%SolutionDir%HeuristicLab.Hive.Client.Core\3.3\app.config" "HeuristicLab.Hive-3.3.dll.config"
    33ConfigMerger "%SolutionDir%HeuristicLab.Hive.Experiment\3.3\app.config" "HeuristicLab.Hive-3.3.dll.config"
  • branches/3.3-HiveMigration/tools/prepareHiveDatabase.sql

    r4159 r4170  
    22
    33/*
    4 /* use these DROP commands if you want to run this query a second time on the same db */
     4use these DROP commands if you want to run this query a second time on the same db */
     5/*
    56ALTER TABLE dbo.AssignedResources ALTER COLUMN AssignedRessourcesId DROP ROWGUIDCOL;
    67ALTER TABLE dbo.Job ALTER COLUMN JobId DROP ROWGUIDCOL;
     
    2526ALTER TABLE dbo.UptimeStatistics DROP CONSTRAINT [DF_UptimeStatistics_UptimeStatisticsId];
    2627*/
     28
    2729
    2830ALTER TABLE dbo.AssignedResources ALTER COLUMN AssignedRessourcesId ADD ROWGUIDCOL;
Note: See TracChangeset for help on using the changeset viewer.