Merge pull request #3581 from rcordovano/data-src-ingest-job-fix

Make DataSourceIngestJob's IngestJobInfo threadsafe
This commit is contained in:
Richard Cordovano 2018-03-20 18:10:56 -04:00 committed by GitHub
commit 1d0de9c506
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -165,7 +165,7 @@ final class DataSourceIngestJob {
private String currentFileIngestModule = "";
private String currentFileIngestTask = "";
private final List<IngestModuleInfo> ingestModules = new ArrayList<>();
private IngestJobInfo ingestJob;
private volatile IngestJobInfo ingestJob;
/**
* A data source ingest job uses this field to report its creation time.
@ -414,6 +414,11 @@ final class DataSourceIngestJob {
List<IngestModuleError> start() {
List<IngestModuleError> errors = startUpIngestPipelines();
if (errors.isEmpty()) {
try {
this.ingestJob = Case.getOpenCase().getSleuthkitCase().addIngestJob(dataSource, NetworkUtils.getLocalHostName(), ingestModules, new Date(this.createTime), new Date(0), IngestJobStatusType.STARTED, "");
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.SEVERE, "Failed to add ingest job to database.", ex);
}
if (this.hasFirstStageDataSourceIngestPipeline() || this.hasFileIngestPipeline()) {
logger.log(Level.INFO, "Starting first stage analysis for {0} (jobId={1})", new Object[]{dataSource.getName(), this.id}); //NON-NLS
this.startFirstStage();
@ -421,11 +426,6 @@ final class DataSourceIngestJob {
logger.log(Level.INFO, "Starting second stage analysis for {0} (jobId={1}), no first stage configured", new Object[]{dataSource.getName(), this.id}); //NON-NLS
this.startSecondStage();
}
try {
this.ingestJob = Case.getOpenCase().getSleuthkitCase().addIngestJob(dataSource, NetworkUtils.getLocalHostName(), ingestModules, new Date(this.createTime), new Date(0), IngestJobStatusType.STARTED, "");
} catch (TskCoreException | NoCurrentCaseException ex) {
logger.log(Level.SEVERE, "Failed to add ingest job to database.", ex);
}
}
return errors;
}
@ -702,26 +702,27 @@ final class DataSourceIngestJob {
}
}
}
if (this.cancelled) {
try {
ingestJob.setIngestJobStatus(IngestJobStatusType.CANCELLED);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Failed to set ingest status for ingest job in database.", ex);
if (ingestJob != null) {
if (this.cancelled) {
try {
ingestJob.setIngestJobStatus(IngestJobStatusType.CANCELLED);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Failed to set ingest status for ingest job in database.", ex);
}
} else {
try {
ingestJob.setIngestJobStatus(IngestJobStatusType.COMPLETED);
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Failed to set ingest status for ingest job in database.", ex);
}
}
} else {
try {
ingestJob.setIngestJobStatus(IngestJobStatusType.COMPLETED);
this.ingestJob.setEndDateTime(new Date());
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Failed to set ingest status for ingest job in database.", ex);
logger.log(Level.SEVERE, "Failed to set end date for ingest job in database.", ex);
}
}
try {
this.ingestJob.setEndDateTime(new Date());
} catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Failed to set end date for ingest job in database.", ex);
}
this.parentJob.dataSourceJobFinished(this);
}
/**