private void WaitForAllExportsToComplete() { BenchmarkLogging.Info("Waiting for final export jobs to complete."); while (_activeJobList.Count > 0) { var toRemove = new List <string>(); foreach (var jobId in _activeJobList) { var jobInfo = _brightstar.GetJobInfo(_storeName, jobId); if (jobInfo.JobCompletedWithErrors) { BenchmarkLogging.Error("Export {0} failed. Cause: {1}. Detail {2}", jobInfo.Label, jobInfo.StatusMessage, jobInfo.ExceptionInfo); toRemove.Add(jobId); } if (jobInfo.JobCompletedOk) { ReportCompletedJob(jobInfo); toRemove.Add(jobId); } } foreach (var r in toRemove) { _activeJobList.Remove(r); } Thread.Sleep(5000); } }
protected void ValidateUnamedGraph(string dataPath) { var exportFileName = "export_default_" + _storeName; var exportJob = _service.StartExport(_storeName, exportFileName, Constants.DefaultGraphUri); while (!exportJob.JobCompletedOk && !exportJob.JobCompletedWithErrors) { Thread.Sleep(50); exportJob = _service.GetJobInfo(_storeName, exportJob.JobId); } Assert.IsTrue(exportJob.JobCompletedOk, "Export failed when attempting to validate unamed graph."); var results = File.ReadAllText("c:\\brightstar\\import\\" + exportFileName); CompareResultGraphs(results, dataPath, false); }
private void PostTransaction(string preconditions, string patternsToDelete, string triplesToAdd, string defaultGraphUri) { var jobInfo = _client.ExecuteTransaction(_storeName, preconditions, patternsToDelete, triplesToAdd, defaultGraphUri); while (!(jobInfo.JobCompletedOk || jobInfo.JobCompletedWithErrors)) { #if PORTABLE // Very rudimentary synchronous wait var ev = new ManualResetEvent(false); ev.WaitOne(200); #else Thread.Sleep(20); #endif jobInfo = _client.GetJobInfo(_storeName, jobInfo.JobId); } if (jobInfo.JobCompletedWithErrors) { // if (jobInfo.ExceptionInfo.Type == typeof(Server.PreconditionFailedException).FullName) if (jobInfo.ExceptionInfo != null && jobInfo.ExceptionInfo.Type == "BrightstarDB.Server.PreconditionFailedException") { var triples = jobInfo.ExceptionInfo.Message.Substring(jobInfo.ExceptionInfo.Message.IndexOf('\n') + 1); throw new TransactionPreconditionsFailedException(triples); } throw new BrightstarClientException("Error processing update transaction. " + jobInfo.StatusMessage); } }
private void PostTransaction(string existencePreconditions, string nonexistencePreconditions, string patternsToDelete, string triplesToAdd, string defaultGraphUri) { var jobInfo = _client.ExecuteTransaction(_storeName, new UpdateTransactionData { ExistencePreconditions = existencePreconditions, NonexistencePreconditions = nonexistencePreconditions, DeletePatterns = patternsToDelete, InsertData = triplesToAdd, DefaultGraphUri = defaultGraphUri }); while (!(jobInfo.JobCompletedOk || jobInfo.JobCompletedWithErrors)) { #if PORTABLE // Very rudimentary synchronous wait var ev = new ManualResetEvent(false); ev.WaitOne(200); #else Thread.Sleep(20); #endif jobInfo = _client.GetJobInfo(_storeName, jobInfo.JobId); } if (jobInfo.JobCompletedWithErrors) { // if (jobInfo.ExceptionInfo.Type == typeof(Server.PreconditionFailedException).FullName) if (jobInfo.ExceptionInfo != null && jobInfo.ExceptionInfo.Type == "BrightstarDB.Server.PreconditionFailedException") { throw TransactionPreconditionsFailedException.FromExceptionDetail(jobInfo.ExceptionInfo); } throw new BrightstarClientException("Error processing update transaction. " + jobInfo.StatusMessage); } }
static bool RunImportJob(IBrightstarService client, string storeName, string fileName, bool logProgress, out string finalMessage) { var importJobInfo = client.StartImport(storeName, fileName); var lastMessage = String.Empty; while (!(importJobInfo.JobCompletedOk || importJobInfo.JobCompletedWithErrors)) { Thread.Sleep(1000); importJobInfo = client.GetJobInfo(storeName, importJobInfo.JobId); if (logProgress && !String.IsNullOrEmpty(importJobInfo.StatusMessage) && !importJobInfo.StatusMessage.Equals(lastMessage)) { ClearCurrentConsoleLine(); Console.WriteLine(importJobInfo.StatusMessage); Console.SetCursorPosition(0, Console.CursorTop - 1); lastMessage = importJobInfo.StatusMessage; } } finalMessage = importJobInfo.StatusMessage; if (importJobInfo.ExceptionInfo != null) { finalMessage += " Exception Detail:" + importJobInfo.ExceptionInfo; } if (logProgress && !String.IsNullOrEmpty(finalMessage)) { ClearCurrentConsoleLine(); Console.WriteLine(finalMessage); } return(importJobInfo.JobCompletedOk); }
public static void AssertJobCompletesSuccessfully(IBrightstarService client, string storeName, IJobInfo job) { while (!job.JobCompletedOk && !job.JobCompletedWithErrors) { Task.Delay(10).Wait(); job = client.GetJobInfo(storeName, job.JobId); } Assert.IsTrue(job.JobCompletedOk, "Expected job to complete successfully, but it failed with message '{0}' : {1}", job.StatusMessage, job.ExceptionInfo); }
protected void AssertJobSuccessful(IBrightstarService client, string storeName, IJobInfo job) { while (!(job.JobCompletedOk || job.JobCompletedWithErrors)) { Task.Delay(3).Wait(); job = client.GetJobInfo(storeName, job.JobId); } Assert.IsTrue(job.JobCompletedOk, "Job failed with message: {0} : {1}", job.StatusMessage, job.ExceptionInfo); }
protected void AssertJobSuccessful(IBrightstarService client,string storeName, IJobInfo job) { while (!(job.JobCompletedOk || job.JobCompletedWithErrors)) { Task.Delay(3).Wait(); job = client.GetJobInfo(storeName, job.JobId); } Assert.IsTrue(job.JobCompletedOk, "Job failed with message: {0} : {1}", job.StatusMessage, job.ExceptionInfo); }
private void AddData() { var rng = new Random(); for (int batch = 0; batch < 25; batch++) { Console.WriteLine("Creating import batch #" + batch); var addTriples = new StringBuilder(); for (int personCount = 0; personCount < 1000; personCount++) { int personNum = batch * 1000 + personCount; string personId = String.Format("<http://example.org/person/{0}>", personNum); addTriples.AppendFormat( "{0} <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://purl.org/foaf/0.1/Person> .\n", personId); addTriples.AppendFormat( "{0} <http://purl.org/foaf/0.1/name> \"Person #{1}\" .\n", personId, personNum ); if (personNum > 10) { for (int i = 0; i < 3; i++) { addTriples.AppendFormat( "{0} <http://purl.org/foaf/0.1/knows> <http://example.org/person/{1}> .\n", personId, personNum - (i + 1)); } } } Console.WriteLine("Submitting import batch #" + batch); _importJobs.Add(_client.ExecuteTransaction(_storeName, null, null, addTriples.ToString(), false).JobId); } while (_importJobs.Count > 0) { var jobId = _importJobs[0]; Console.WriteLine("Waiting for job {0}...", jobId); IJobInfo jobInfo; do { jobInfo = _client.GetJobInfo(_storeName, jobId); Thread.Sleep(1000); } while (!(jobInfo.JobCompletedOk || jobInfo.JobCompletedWithErrors)); if (jobInfo.JobCompletedOk) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\tJob completed OK!"); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\tJob FAILED."); Console.ResetColor(); } _importJobs.RemoveAt(0); } }
public static IJobInfo WaitForJob(IJobInfo job, IBrightstarService client, string storeName) { var cycleCount = 0; while (!job.JobCompletedOk && !job.JobCompletedWithErrors && cycleCount < 100) { Thread.Sleep(500); cycleCount++; job = client.GetJobInfo(storeName, job.JobId); } if (!job.JobCompletedOk && !job.JobCompletedWithErrors) { Assert.Fail("Job did not complete in time."); } return job; }
static bool RunCompressJob(IBrightstarService client, string storeName, out string finalMessage) { var compressJob = client.ConsolidateStore(storeName); while (!(compressJob.JobCompletedOk || compressJob.JobCompletedWithErrors)) { System.Threading.Thread.Sleep(1000); compressJob = client.GetJobInfo(storeName, compressJob.JobId); } finalMessage = compressJob.StatusMessage; if (compressJob.ExceptionInfo != null) { finalMessage += " Exception Detail:" + compressJob.ExceptionInfo; } return compressJob.JobCompletedOk; }
static bool RunCompressJob(IBrightstarService client, string storeName, out string finalMessage) { var compressJob = client.ConsolidateStore(storeName); while (!(compressJob.JobCompletedOk || compressJob.JobCompletedWithErrors)) { System.Threading.Thread.Sleep(1000); compressJob = client.GetJobInfo(storeName, compressJob.JobId); } finalMessage = compressJob.StatusMessage; if (compressJob.ExceptionInfo != null) { finalMessage += " Exception Detail:" + compressJob.ExceptionInfo; } return(compressJob.JobCompletedOk); }
public static IJobInfo WaitForJob(IJobInfo job, IBrightstarService client, string storeName) { var cycleCount = 0; while (!job.JobCompletedOk && !job.JobCompletedWithErrors && cycleCount < 100) { Thread.Sleep(500); cycleCount++; job = client.GetJobInfo(storeName, job.JobId); } if (!job.JobCompletedOk && !job.JobCompletedWithErrors) { Assert.Fail("Job did not complete in time."); } return(job); }
static bool RunImportJob(IBrightstarService client, string storeName, string fileName, out string finalMessage) { var importJobInfo = client.StartImport(storeName, fileName); while (!(importJobInfo.JobCompletedOk || importJobInfo.JobCompletedWithErrors)) { System.Threading.Thread.Sleep(1000); importJobInfo = client.GetJobInfo(storeName, importJobInfo.JobId); } finalMessage = importJobInfo.StatusMessage; if (importJobInfo.ExceptionInfo != null) { finalMessage += " Exception Detail:" + importJobInfo.ExceptionInfo; } return(importJobInfo.JobCompletedOk); }
public void RefreshStatus(IBrightstarService client, string storeName) { _importJobInfo = client.GetJobInfo(storeName, _importJobInfo.JobId); UpdateStatusProperties(); }
public JobsModule(IBrightstarService brightstarService, AbstractStorePermissionsProvider permissionsProvider) { this.RequiresBrightstarStorePermissionData(permissionsProvider); Get["/{storeName}/jobs"] = parameters => { var jobsRequestObject = this.Bind <JobsRequestModel>(); if (jobsRequestObject == null || jobsRequestObject.StoreName == null) { return(HttpStatusCode.BadRequest); } if (jobsRequestObject.Take <= 0) { jobsRequestObject.Take = DefaultPageSize; } var jobs = brightstarService.GetJobInfo(jobsRequestObject.StoreName, jobsRequestObject.Skip, jobsRequestObject.Take + 1); return(Negotiate.WithPagedList(jobsRequestObject, jobs.Select(j => j.MakeResponseObject(jobsRequestObject.StoreName)), jobsRequestObject.Skip, jobsRequestObject.Take, DefaultPageSize, "jobs")); }; Get["/{storeName}/jobs/{jobId}"] = parameters => { var request = this.Bind <JobRequestModel>(); if (request == null || request.StoreName == null || request.JobId == null) { return(HttpStatusCode.BadRequest); } var job = brightstarService.GetJobInfo(request.StoreName, request.JobId); if (job == null) { return(HttpStatusCode.NotFound); } var responseDto = job.MakeResponseObject(request.StoreName); return(responseDto); }; Post["/{storeName}/jobs"] = parameters => { var jobRequestObject = this.Bind <JobRequestObject>(); // Validate if (jobRequestObject == null) { return(HttpStatusCode.BadRequest); } if (String.IsNullOrWhiteSpace(jobRequestObject.JobType)) { return(HttpStatusCode.BadRequest); } var storeName = parameters["storeName"]; var label = jobRequestObject.Label; try { IJobInfo queuedJobInfo; switch (jobRequestObject.JobType.ToLowerInvariant()) { case "consolidate": AssertPermission(StorePermissions.Admin); queuedJobInfo = brightstarService.ConsolidateStore(storeName, label); break; case "createsnapshot": AssertPermission(StorePermissions.Admin); PersistenceType persistenceType; // Validate TargetStoreName and PersistenceType parameters if (!jobRequestObject.JobParameters.ContainsKey("TargetStoreName") || String.IsNullOrWhiteSpace(jobRequestObject.JobParameters["TargetStoreName"]) || !jobRequestObject.JobParameters.ContainsKey("PersistenceType") || !Enum.TryParse(jobRequestObject.JobParameters["PersistenceType"], out persistenceType)) { return(HttpStatusCode.BadRequest); } // Extract optional commit point parameter ICommitPointInfo commitPoint = null; if (jobRequestObject.JobParameters.ContainsKey("CommitId")) { ulong commitId; if (!UInt64.TryParse(jobRequestObject.JobParameters["CommitId"], out commitId)) { return(HttpStatusCode.BadRequest); } commitPoint = brightstarService.GetCommitPoint(storeName, commitId); if (commitPoint == null) { return(HttpStatusCode.BadRequest); } } // Execute queuedJobInfo = brightstarService.CreateSnapshot( storeName, jobRequestObject.JobParameters["TargetStoreName"], persistenceType, commitPoint, label); break; case "export": AssertPermission(StorePermissions.Export); if (!jobRequestObject.JobParameters.ContainsKey("FileName") || String.IsNullOrWhiteSpace(jobRequestObject.JobParameters["FileName"])) { return(HttpStatusCode.BadRequest); } RdfFormat format = jobRequestObject.JobParameters.ContainsKey("Format") ? RdfFormat.GetResultsFormat( jobRequestObject.JobParameters["Format"]) : RdfFormat.NQuads; queuedJobInfo = brightstarService.StartExport( storeName, jobRequestObject.JobParameters["FileName"], jobRequestObject.JobParameters.ContainsKey("GraphUri") ? jobRequestObject.JobParameters["GraphUri"] : null, format, label); break; case "import": AssertPermission(StorePermissions.TransactionUpdate); if (!jobRequestObject.JobParameters.ContainsKey("FileName") || String.IsNullOrWhiteSpace(jobRequestObject.JobParameters["FileName"])) { return(HttpStatusCode.BadRequest); } queuedJobInfo = brightstarService.StartImport( storeName, jobRequestObject.JobParameters["FileName"], jobRequestObject.JobParameters.ContainsKey("DefaultGraphUri") ? jobRequestObject.JobParameters["DefaultGraphUri"] : Constants.DefaultGraphUri, label); break; case "repeattransaction": AssertPermission(StorePermissions.Admin); if (!jobRequestObject.JobParameters.ContainsKey("JobId") || String.IsNullOrWhiteSpace(jobRequestObject.JobParameters["JobId"])) { return(HttpStatusCode.BadRequest); } Guid jobId; if (!Guid.TryParse(jobRequestObject.JobParameters["JobId"], out jobId)) { return(HttpStatusCode.BadRequest); } var transaction = brightstarService.GetTransaction(storeName, jobId); if (transaction == null) { return(HttpStatusCode.BadRequest); } queuedJobInfo = brightstarService.ReExecuteTransaction(storeName, transaction, label); break; case "sparqlupdate": AssertPermission(StorePermissions.SparqlUpdate); if (!jobRequestObject.JobParameters.ContainsKey("UpdateExpression") || String.IsNullOrWhiteSpace(jobRequestObject.JobParameters["UpdateExpression"])) { return(HttpStatusCode.BadRequest); } queuedJobInfo = brightstarService.ExecuteUpdate( storeName, jobRequestObject.JobParameters["UpdateExpression"], false, label); break; case "transaction": AssertPermission(StorePermissions.TransactionUpdate); var preconditions = jobRequestObject.JobParameters.ContainsKey("Preconditions") ? jobRequestObject.JobParameters["Preconditions"] : null; var nonexistence = jobRequestObject.JobParameters.ContainsKey("NonexistencePreconditions") ? jobRequestObject.JobParameters["NonexistencePreconditions"] : null; var deletePatterns = jobRequestObject.JobParameters.ContainsKey("Deletes") ? jobRequestObject.JobParameters["Deletes"] : null; var insertTriples = jobRequestObject.JobParameters.ContainsKey("Inserts") ? jobRequestObject.JobParameters["Inserts"] : null; var defaultGraphUri = jobRequestObject.JobParameters.ContainsKey("DefaultGraphUri") && !String.IsNullOrEmpty(jobRequestObject.JobParameters["DefaultGraphUri"]) ? jobRequestObject.JobParameters["DefaultGraphUri"] : null; queuedJobInfo = brightstarService.ExecuteTransaction( storeName, new UpdateTransactionData { ExistencePreconditions = preconditions, NonexistencePreconditions = nonexistence, DeletePatterns = deletePatterns, InsertData = insertTriples, DefaultGraphUri = defaultGraphUri }, false, label); break; case "updatestats": AssertPermission(StorePermissions.Admin); queuedJobInfo = brightstarService.UpdateStatistics(storeName, label); break; default: return(HttpStatusCode.BadRequest); } var jobUri = (string)storeName + "/jobs/" + queuedJobInfo.JobId; return(Negotiate.WithModel(new JobResponseModel { JobId = queuedJobInfo.JobId, Label = queuedJobInfo.Label, StatusMessage = queuedJobInfo.StatusMessage, JobStatus = queuedJobInfo.GetJobStatusString(), ExceptionInfo = queuedJobInfo.ExceptionInfo, QueuedTime = queuedJobInfo.QueuedTime, StartTime = queuedJobInfo.StartTime, EndTime = queuedJobInfo.EndTime }) .WithHeader("Location", jobUri) .WithStatusCode(HttpStatusCode.Created)); } catch (UnauthorizedAccessException) { return(HttpStatusCode.Unauthorized); } }; }
public void RefreshStatus(IBrightstarService client, string storeName) { _importJobInfo = client.GetJobInfo(storeName, _importJobInfo.JobId); UpdateStatusProperties(); }
static bool RunImportJob(IBrightstarService client, string storeName, string fileName, bool logProgress, out string finalMessage ) { var importJobInfo = client.StartImport(storeName, fileName); var lastMessage = String.Empty; while(!(importJobInfo.JobCompletedOk || importJobInfo.JobCompletedWithErrors)) { Thread.Sleep(1000); importJobInfo = client.GetJobInfo(storeName, importJobInfo.JobId); if (logProgress && !String.IsNullOrEmpty(importJobInfo.StatusMessage) && !importJobInfo.StatusMessage.Equals(lastMessage)) { ClearCurrentConsoleLine(); Console.WriteLine(importJobInfo.StatusMessage); Console.SetCursorPosition(0, Console.CursorTop - 1); lastMessage = importJobInfo.StatusMessage; } } finalMessage = importJobInfo.StatusMessage; if (importJobInfo.ExceptionInfo != null) { finalMessage += " Exception Detail:" + importJobInfo.ExceptionInfo; } if (logProgress && !String.IsNullOrEmpty(finalMessage)) { ClearCurrentConsoleLine(); Console.WriteLine(finalMessage); } return importJobInfo.JobCompletedOk; }
public JobsModule(IBrightstarService brightstarService, AbstractStorePermissionsProvider permissionsProvider) { this.RequiresBrightstarStorePermissionData(permissionsProvider); Get["/{storeName}/jobs"] = parameters => { var jobsRequestObject = this.Bind<JobsRequestModel>(); ViewBag.Title = jobsRequestObject.StoreName + " - Jobs"; if (jobsRequestObject == null || jobsRequestObject.StoreName == null) { return HttpStatusCode.BadRequest; } if (jobsRequestObject.Take <= 0) jobsRequestObject.Take = DefaultPageSize; var jobs = brightstarService.GetJobInfo(jobsRequestObject.StoreName, jobsRequestObject.Skip, jobsRequestObject.Take + 1); return Negotiate.WithPagedList(jobsRequestObject, jobs.Select(j=>j.MakeResponseObject(jobsRequestObject.StoreName)), jobsRequestObject.Skip, jobsRequestObject.Take, DefaultPageSize, "jobs"); }; Get["/{storeName}/jobs/{jobId}"] = parameters => { var request = this.Bind<JobRequestModel>(); if (request == null || request.StoreName == null || request.JobId == null) { return HttpStatusCode.BadRequest; } ViewBag.Title = request.StoreName + " - Job - " + request.JobId; var job = brightstarService.GetJobInfo(request.StoreName, request.JobId); if (job == null) return HttpStatusCode.NotFound; var responseDto = job.MakeResponseObject(request.StoreName); return responseDto; }; Post["/{storeName}/jobs"] = parameters => { var jobRequestObject = this.Bind<JobRequestObject>(); ViewBag.Title = jobRequestObject.StoreName + "- Jobs"; // Validate if (jobRequestObject == null) return HttpStatusCode.BadRequest; if (String.IsNullOrWhiteSpace(jobRequestObject.JobType)) return HttpStatusCode.BadRequest; var storeName = parameters["storeName"]; var label = jobRequestObject.Label; try { IJobInfo queuedJobInfo; switch (jobRequestObject.JobType.ToLowerInvariant()) { case "consolidate": AssertPermission(StorePermissions.Admin); queuedJobInfo = brightstarService.ConsolidateStore(storeName, label); break; case "createsnapshot": AssertPermission(StorePermissions.Admin); PersistenceType persistenceType; // Validate TargetStoreName and PersistenceType parameters if (!jobRequestObject.JobParameters.ContainsKey("TargetStoreName") || String.IsNullOrWhiteSpace(jobRequestObject.JobParameters["TargetStoreName"]) || !jobRequestObject.JobParameters.ContainsKey("PersistenceType") || !Enum.TryParse(jobRequestObject.JobParameters["PersistenceType"], out persistenceType)) { return HttpStatusCode.BadRequest; } // Extract optional commit point parameter ICommitPointInfo commitPoint = null; if (jobRequestObject.JobParameters.ContainsKey("CommitId")) { ulong commitId; if (!UInt64.TryParse(jobRequestObject.JobParameters["CommitId"], out commitId)) { return HttpStatusCode.BadRequest; } commitPoint = brightstarService.GetCommitPoint(storeName, commitId); if (commitPoint == null) { return HttpStatusCode.BadRequest; } } // Execute queuedJobInfo = brightstarService.CreateSnapshot( storeName, jobRequestObject.JobParameters["TargetStoreName"], persistenceType, commitPoint, label); break; case "export": AssertPermission(StorePermissions.Export); if (!jobRequestObject.JobParameters.ContainsKey("FileName") || String.IsNullOrWhiteSpace(jobRequestObject.JobParameters["FileName"])) { return HttpStatusCode.BadRequest; } RdfFormat format = jobRequestObject.JobParameters.ContainsKey("Format") ? RdfFormat.GetResultsFormat( jobRequestObject.JobParameters["Format"]) : RdfFormat.NQuads; queuedJobInfo = brightstarService.StartExport( storeName, jobRequestObject.JobParameters["FileName"], jobRequestObject.JobParameters.ContainsKey("GraphUri") ? jobRequestObject.JobParameters["GraphUri"] : null, format, label); break; case "import": AssertPermission(StorePermissions.TransactionUpdate); if (!jobRequestObject.JobParameters.ContainsKey("FileName") || String.IsNullOrWhiteSpace(jobRequestObject.JobParameters["FileName"])) { return HttpStatusCode.BadRequest; } RdfFormat importFormat = null; if (jobRequestObject.JobParameters.ContainsKey("ImportFormat")) { importFormat = RdfFormat.GetResultsFormat(jobRequestObject.JobParameters["ImportFormat"]); if (importFormat == null) return HttpStatusCode.BadRequest; } queuedJobInfo = brightstarService.StartImport( storeName, jobRequestObject.JobParameters["FileName"], jobRequestObject.JobParameters.ContainsKey("DefaultGraphUri") ? jobRequestObject.JobParameters["DefaultGraphUri"] : Constants.DefaultGraphUri, label, importFormat); break; case "repeattransaction": AssertPermission(StorePermissions.Admin); if (!jobRequestObject.JobParameters.ContainsKey("JobId") || String.IsNullOrWhiteSpace(jobRequestObject.JobParameters["JobId"])) { return HttpStatusCode.BadRequest; } Guid jobId; if (!Guid.TryParse(jobRequestObject.JobParameters["JobId"], out jobId)) { return HttpStatusCode.BadRequest; } var transaction = brightstarService.GetTransaction(storeName, jobId); if (transaction == null) { return HttpStatusCode.BadRequest; } queuedJobInfo = brightstarService.ReExecuteTransaction(storeName, transaction, label); break; case "sparqlupdate": AssertPermission(StorePermissions.SparqlUpdate); if (!jobRequestObject.JobParameters.ContainsKey("UpdateExpression") || String.IsNullOrWhiteSpace(jobRequestObject.JobParameters["UpdateExpression"])) { return HttpStatusCode.BadRequest; } queuedJobInfo = brightstarService.ExecuteUpdate( storeName, jobRequestObject.JobParameters["UpdateExpression"], false, label); break; case "transaction": AssertPermission(StorePermissions.TransactionUpdate); var preconditions = jobRequestObject.JobParameters.ContainsKey("Preconditions") ? jobRequestObject.JobParameters["Preconditions"] : null; var nonexistence = jobRequestObject.JobParameters.ContainsKey("NonexistencePreconditions") ? jobRequestObject.JobParameters["NonexistencePreconditions"] : null; var deletePatterns = jobRequestObject.JobParameters.ContainsKey("Deletes") ? jobRequestObject.JobParameters["Deletes"] : null; var insertTriples = jobRequestObject.JobParameters.ContainsKey("Inserts") ? jobRequestObject.JobParameters["Inserts"] : null; var defaultGraphUri = jobRequestObject.JobParameters.ContainsKey("DefaultGraphUri") && !String.IsNullOrEmpty(jobRequestObject.JobParameters["DefaultGraphUri"]) ? jobRequestObject.JobParameters["DefaultGraphUri"] : null; queuedJobInfo = brightstarService.ExecuteTransaction( storeName, new UpdateTransactionData { ExistencePreconditions = preconditions, NonexistencePreconditions = nonexistence, DeletePatterns = deletePatterns, InsertData = insertTriples, DefaultGraphUri = defaultGraphUri }, false, label); break; case "updatestats": AssertPermission(StorePermissions.Admin); queuedJobInfo = brightstarService.UpdateStatistics(storeName, label); break; default: return HttpStatusCode.BadRequest; } var jobUri = (string) storeName + "/jobs/" + queuedJobInfo.JobId; return Negotiate.WithModel(new JobResponseModel { JobId = queuedJobInfo.JobId, Label = queuedJobInfo.Label, StatusMessage = queuedJobInfo.StatusMessage, JobStatus = queuedJobInfo.GetJobStatusString(), ExceptionInfo = queuedJobInfo.ExceptionInfo, QueuedTime = queuedJobInfo.QueuedTime, StartTime = queuedJobInfo.StartTime, EndTime = queuedJobInfo.EndTime }) .WithHeader("Location", jobUri) .WithStatusCode(HttpStatusCode.Created); } catch (UnauthorizedAccessException) { return HttpStatusCode.Unauthorized; } }; }
static bool RunImportJob(IBrightstarService client, string storeName, string fileName, out string finalMessage ) { var importJobInfo = client.StartImport(storeName, fileName); while(!(importJobInfo.JobCompletedOk || importJobInfo.JobCompletedWithErrors)) { System.Threading.Thread.Sleep(1000); importJobInfo = client.GetJobInfo(storeName, importJobInfo.JobId); } finalMessage = importJobInfo.StatusMessage; if (importJobInfo.ExceptionInfo != null) { finalMessage += " Exception Detail:" + importJobInfo.ExceptionInfo; } return importJobInfo.JobCompletedOk; }