- Timestamp:
- 02/19/13 08:46:01 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/OaaS/HeuristicLab.Services.Optimization.Controller/Azure/DAL.cs
r9215 r9227 9 9 using System.Diagnostics; 10 10 using HeuristicLab.Services.Optimization.ControllerService.Model; 11 using HeuristicLab.Services.Optimization.ControllerService.Parsers; 11 12 12 13 namespace HeuristicLab.Services.Optimization.ControllerService.Azure { … … 15 16 public static readonly string SCENARIO_BLOB_CONTAINER = "scenario"; 16 17 public static readonly string EXPERIMENT_TABLE = "Experiment"; 18 public static readonly string EXPERIMENT_BLOB_CONTAINER = "experiment"; 17 19 public static readonly string CLOUD_SETTINGS_KEY = "Cloudia.WindowsAzure.Storage"; 20 21 18 22 } 19 23 … … 97 101 } 98 102 99 public ExperimentEntity(string user, Experiment experiment) {103 public ExperimentEntity(string user, string experimentName, string experimentUrl) { 100 104 PartitionKey = "ScenarioPartition"; 101 RowKey = user + "_" + experiment.Name; 102 var scenarios = ""; 103 foreach (var scen in experiment.Scenarios) { 104 scenarios += scen.Id + ","; 105 } 106 Scenarios = scenarios.Remove(scenarios.Length - 1); 105 RowKey = user + "_" + experimentName; 107 106 User = user; 107 ExperimentJsonUrl = experimentUrl; 108 108 } 109 109 110 110 public string User { get; set; } 111 111 112 public string Scenarios{ get; set; }112 public string ExperimentJsonUrl { get; set; } 113 113 114 114 } … … 122 122 return false; 123 123 124 TableServiceContext serviceContext = TableClient.GetDataServiceContext(); 125 TableClient.CreateTableIfNotExist(AzureConstants.EXPERIMENT_TABLE); 126 var entity = new ExperimentEntity(username, experiment); 124 // TODO: Save the whole experiment, not just the algorithm names!!! 125 CloudBlobContainer container = BlobClient.GetContainerReference(AzureConstants.EXPERIMENT_BLOB_CONTAINER); 126 container.CreateIfNotExist(); 127 // For now we store it as JSON element in the blob store 128 // TODO: Make sure, that all required properties are part of the experiment!! 129 var experimentJson = AlgorithmConverter.ConvertJson(experiment); 130 Guid experimentJsonGuid = Guid.NewGuid(); 131 var experimentJsonId = experiment.Name + "_" + experimentJsonGuid.ToString(); 132 var blob = container.GetBlobReference(experimentJsonId); 133 blob.UploadText(experimentJson); 134 135 TableServiceContext serviceContext = TableClient.GetDataServiceContext(); 136 TableClient.CreateTableIfNotExist(AzureConstants.EXPERIMENT_TABLE); 137 var entity = new ExperimentEntity(username, experiment.Name, blob.Uri.ToString()); 127 138 serviceContext.AddObject(AzureConstants.EXPERIMENT_TABLE, entity); 128 139 serviceContext.SaveChangesWithRetries(); … … 139 150 if (entity == null) 140 151 return false; 152 153 if (entity.ExperimentJsonUrl != null) { 154 CloudBlobContainer container = BlobClient.GetContainerReference(AzureConstants.EXPERIMENT_BLOB_CONTAINER); 155 container.CreateIfNotExist(); 156 var blob = container.GetBlobReference(entity.ExperimentJsonUrl); 157 blob.DeleteIfExists(); 158 } 141 159 142 160 serviceContext.DeleteObject(entity); … … 156 174 } 157 175 158 var exp = Convert(entity); 159 return exp; 160 } 161 162 private Experiment Convert(ExperimentEntity entity) { 163 var exp = new Experiment() { Name = entity.RowKey.Split('_')[1] }; 164 foreach (var scenarioName in entity.Scenarios.Split(',')) 165 exp.Scenarios.Add(new OptimizationScenario() { Id = scenarioName }); 166 return exp; 167 } 176 CloudBlobContainer container = BlobClient.GetContainerReference(AzureConstants.EXPERIMENT_BLOB_CONTAINER); 177 container.CreateIfNotExist(); 178 var blob = container.GetBlobReference(entity.ExperimentJsonUrl); 179 return AlgorithmConverter.ConvertExperimentSimple(blob.DownloadText()); 180 } 181 182 //private Experiment Convert(ExperimentEntity entity, string entityJson) { 183 // // TODO: Read the whole experiment, not just the names! 184 // var exp = new Experiment() { Name = entity.RowKey.Split('_')[1] }; 185 // foreach (var scenarioName in entity.Algorithms.Split(',')) 186 // exp.Algorithm.Add(new Algorithm() { Name = scenarioName }); 187 // return exp; 188 //} 168 189 169 190 public IEnumerable<Model.Experiment> GetExperiments(string user) { … … 174 195 select e).ToList(); 175 196 var experiments = new List<Experiment>(); 197 CloudBlobContainer container = BlobClient.GetContainerReference(AzureConstants.EXPERIMENT_BLOB_CONTAINER); 198 container.CreateIfNotExist(); 176 199 foreach (var entity in entites) { 177 experiments.Add(Convert(entity)); 200 var blob = container.GetBlobReference(entity.ExperimentJsonUrl); 201 experiments.Add(AlgorithmConverter.ConvertExperimentSimple(blob.DownloadText())); 178 202 } 179 203 return experiments; 204 } 205 206 207 public Experiment GetExperimentByName(string username, string scenario) { 208 TableServiceContext serviceContext = TableClient.GetDataServiceContext(); 209 TableClient.CreateTableIfNotExist(AzureConstants.EXPERIMENT_TABLE); 210 var entity = (from e in serviceContext.CreateQuery<ExperimentEntity>(AzureConstants.EXPERIMENT_TABLE) 211 where e.RowKey == username + "_" + scenario 212 select e).FirstOrDefault(); 213 if (entity == null || entity.ExperimentJsonUrl == null) { 214 return null; 215 } 216 217 CloudBlobContainer container = BlobClient.GetContainerReference(AzureConstants.EXPERIMENT_BLOB_CONTAINER); 218 container.CreateIfNotExist(); 219 var blob = container.GetBlobReference(entity.ExperimentJsonUrl); 220 var exp = AlgorithmConverter.ConvertExperimentSimple(blob.DownloadText()); 221 return exp; 180 222 } 181 223 } … … 224 266 get { 225 267 if (expDao == null) { 226 expDao = new ExperimentDao() { TableClient = StorageAccount.CreateCloudTableClient() };268 expDao = new ExperimentDao() { TableClient = StorageAccount.CreateCloudTableClient(), BlobClient = StorageAccount.CreateCloudBlobClient() }; 227 269 } 228 270 return expDao;
Note: See TracChangeset
for help on using the changeset viewer.