public void TestMongoCompletedExtractJobDoc_GetHashCode() { var doc1 = new MongoCompletedExtractJobDoc(_testExtractJobDoc, _dateTimeProvider.UtcNow()); var doc2 = new MongoCompletedExtractJobDoc(_testExtractJobDoc, _dateTimeProvider.UtcNow()); Assert.AreEqual(doc1.GetHashCode(), doc2.GetHashCode()); }
public void TestMongoCompletedExtractJobDoc_Equality() { var doc1 = new MongoCompletedExtractJobDoc(_testExtractJobDoc, _dateTimeProvider.UtcNow()); var doc2 = new MongoCompletedExtractJobDoc(_testExtractJobDoc, _dateTimeProvider.UtcNow()); Assert.AreEqual(doc1, doc2); }
public static CompletedExtractJobInfo ToExtractJobInfo(this MongoCompletedExtractJobDoc mongoCompletedExtractJobDoc) => new CompletedExtractJobInfo( mongoCompletedExtractJobDoc.ExtractionJobIdentifier, mongoCompletedExtractJobDoc.JobSubmittedAt, mongoCompletedExtractJobDoc.CompletedAt, mongoCompletedExtractJobDoc.ProjectNumber, mongoCompletedExtractJobDoc.ExtractionDirectory, mongoCompletedExtractJobDoc.KeyTag, mongoCompletedExtractJobDoc.KeyCount, mongoCompletedExtractJobDoc.ExtractionModality, mongoCompletedExtractJobDoc.IsIdentifiableExtraction, mongoCompletedExtractJobDoc.IsNoFilterExtraction );
protected override CompletedExtractJobInfo GetCompletedJobInfoImpl(Guid jobId) { MongoCompletedExtractJobDoc jobDoc = _completedJobCollection .FindSync(Builders <MongoCompletedExtractJobDoc> .Filter.Eq(x => x.ExtractionJobIdentifier, jobId)) .SingleOrDefault(); if (jobDoc == null) { throw new ApplicationException($"No completed document for job {jobId}"); } return(jobDoc.ToExtractJobInfo()); }
public void TestMongoCompletedExtractJobDoc_Constructor_ExtractJobStatus() { var doc = new MongoCompletedExtractJobDoc(_testExtractJobDoc, _dateTimeProvider.UtcNow()); Assert.AreEqual(ExtractJobStatus.Completed, doc.JobStatus); }
protected override void CompleteJobImpl(Guid jobId) { //TODO Docs using (IClientSessionHandle session = _client.StartSession()) { session.StartTransaction(); string expectedCollNameForJob = ExpectedFilesCollectionName(jobId); string statusCollNameForJob = StatusCollectionName(jobId); try { if (!TryGetMongoExtractJobDoc(jobId, out MongoExtractJobDoc toComplete)) { throw new ApplicationException($"Could not find job {jobId} in the job store"); } if (toComplete.JobStatus == ExtractJobStatus.Failed) { throw new ApplicationException($"Job {jobId} is marked as failed"); } var completedJob = new MongoCompletedExtractJobDoc(toComplete, _dateTimeProvider.UtcNow()); _completedJobCollection.InsertOne(completedJob); DeleteResult res = _inProgressJobCollection.DeleteOne(GetFilterForSpecificJob <MongoExtractJobDoc>(jobId)); if (!res.IsAcknowledged) { throw new ApplicationException("Job data was archived but could not delete original from job store"); } // Move the associated docs from each collection to the archives IMongoCollection <MongoExpectedFilesDoc> expectedTempCollection = _database.GetCollection <MongoExpectedFilesDoc>(expectedCollNameForJob); if (expectedTempCollection.CountDocuments(FilterDefinition <MongoExpectedFilesDoc> .Empty) == 0) { throw new ApplicationException($"Collection of MongoExpectedFilesDoc for job {jobId} was missing or empty"); } using (IAsyncCursor <MongoExpectedFilesDoc> cursor = expectedTempCollection.FindSync(FilterDefinition <MongoExpectedFilesDoc> .Empty)) { while (cursor.MoveNext()) { _completedExpectedFilesCollection.InsertMany(cursor.Current); } } IMongoCollection <MongoFileStatusDoc> statusTemp = _database.GetCollection <MongoFileStatusDoc>(statusCollNameForJob); if (statusTemp.CountDocuments(FilterDefinition <MongoFileStatusDoc> .Empty) == 0) { throw new ApplicationException($"Collection of MongoFileStatusDoc for job {jobId} was missing or empty"); } using (IAsyncCursor <MongoFileStatusDoc> cursor = statusTemp.FindSync(FilterDefinition <MongoFileStatusDoc> .Empty)) { while (cursor.MoveNext()) { _completedStatusCollection.InsertMany(cursor.Current); } } } catch (Exception) { Logger.Debug("Caught exception from transaction. Aborting before re-throwing"); session.AbortTransaction(); throw; } // TODO(rkm 2020-03-03) Can potentially add a retry here session.CommitTransaction(); // NOTE(rkm 2020-03-09) "Operations that affect the database catalog, such as creating or dropping a collection or an index, are not allowed in transactions" _database.DropCollection(expectedCollNameForJob); _database.DropCollection(statusCollNameForJob); } }