Skip to content

Commit

Permalink
1
Browse files Browse the repository at this point in the history
  • Loading branch information
morningman committed Nov 22, 2023
1 parent 1441387 commit cc0fdf7
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions fe/fe-core/src/main/java/org/apache/doris/load/ExportMgr.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ public class ExportMgr {
private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);

private Map<Long, ExportJob> exportIdToJob = Maps.newHashMap(); // exportJobId to exportJob
private Map<String, Long> labelToExportJobId = Maps.newHashMap();
// dbid -> <label -> job>
private Map<Long, Map<String, Long>> dbTolabelToExportJobId = Maps.newHashMap();

public ExportMgr() {
}
Expand Down Expand Up @@ -95,7 +96,8 @@ public void addExportJobAndRegisterTask(ExportJob job) throws Exception {
job.setId(jobId);
writeLock();
try {
if (labelToExportJobId.containsKey(job.getLabel())) {
if (dbTolabelToExportJobId.containsKey(job.getDbId())
&& dbTolabelToExportJobId.get(job.getDbId()).containsKey(job.getLabel())) {
throw new LabelAlreadyUsedException(job.getLabel());
}
unprotectAddJob(job);
Expand Down Expand Up @@ -135,7 +137,8 @@ public void cancelExportJob(CancelExportStmt stmt) throws DdlException, Analysis

public void unprotectAddJob(ExportJob job) {
exportIdToJob.put(job.getId(), job);
labelToExportJobId.putIfAbsent(job.getLabel(), job.getId());
dbTolabelToExportJobId.computeIfAbsent(job.getDbId(),
k -> Maps.newHashMap()).put(job.getLabel(), job.getId());
}

private List<ExportJob> getWaitingCancelJobs(CancelExportStmt stmt) throws AnalysisException {
Expand Down Expand Up @@ -393,7 +396,13 @@ public void removeOldExportJobs() {
&& (job.getState() == ExportJobState.CANCELLED
|| job.getState() == ExportJobState.FINISHED)) {
iter.remove();
labelToExportJobId.remove(job.getLabel(), job.getId());
Map<String, Long> labelJobs = dbTolabelToExportJobId.get(job.getDbId());
if (labelJobs != null) {
labelJobs.remove(job.getLabel());
if (labelJobs.isEmpty()) {
dbTolabelToExportJobId.remove(job.getDbId());
}
}
}
}
} finally {
Expand Down

0 comments on commit cc0fdf7

Please sign in to comment.