Пример #1
0
 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);
     }
 }
Пример #2
0
        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);
        }
Пример #3
0
        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);
            }
        }
Пример #5
0
        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);
        }
Пример #6
0
 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);
 }
Пример #7
0
 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);
 }
Пример #8
0
 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);
 }
Пример #9
0
        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);
            }
        }
Пример #10
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;
 }
Пример #11
0
 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;
 }
Пример #12
0
        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);
        }
Пример #13
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);
        }
Пример #14
0
        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);
        }
Пример #15
0
 public void RefreshStatus(IBrightstarService client, string storeName)
 {
     _importJobInfo = client.GetJobInfo(storeName, _importJobInfo.JobId);
     UpdateStatusProperties();
 }
Пример #16
0
        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);
                }
            };
        }
Пример #17
0
 public void RefreshStatus(IBrightstarService client, string storeName)
 {
     _importJobInfo = client.GetJobInfo(storeName, _importJobInfo.JobId);
     UpdateStatusProperties();
 }
Пример #18
0
 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;
 }
Пример #19
0
        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;
                    }

                };
        }
Пример #20
0
 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;
 }