Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import org.apache.druid.server.compaction.CompactionCandidate;
import org.apache.druid.server.compaction.CompactionSlotManager;
import org.apache.druid.server.compaction.DataSourceCompactibleSegmentIterator;
import org.apache.druid.server.compaction.NewestSegmentFirstPolicy;
import org.apache.druid.server.coordinator.DataSourceCompactionConfig;
import org.apache.druid.server.coordinator.duty.CompactSegments;
import org.apache.druid.timeline.CompactionState;
Expand Down Expand Up @@ -133,9 +132,7 @@ DataSourceCompactibleSegmentIterator getCompactibleCandidates(
config,
timeline,
Intervals.complementOf(searchInterval),
// This policy is used only while creating jobs
// The actual order of jobs is determined by the policy used in CompactionJobQueue
new NewestSegmentFirstPolicy(null),
params.getClusterCompactionConfig().getCompactionPolicy(),
params.getFingerprintMapper()
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import org.apache.druid.client.indexing.ClientCompactionTaskQuery;
import org.apache.druid.client.indexing.ClientTaskQuery;
import org.apache.druid.common.guava.FutureUtils;
import org.apache.druid.error.DruidException;
import org.apache.druid.indexer.TaskState;
import org.apache.druid.indexer.TaskStatus;
import org.apache.druid.indexing.common.actions.TaskActionClientFactory;
Expand All @@ -43,7 +44,6 @@
import org.apache.druid.server.compaction.CompactionCandidateSearchPolicy;
import org.apache.druid.server.compaction.CompactionSlotManager;
import org.apache.druid.server.compaction.CompactionSnapshotBuilder;
import org.apache.druid.server.compaction.CompactionStatus;
import org.apache.druid.server.compaction.CompactionStatusTracker;
import org.apache.druid.server.coordinator.AutoCompactionSnapshot;
import org.apache.druid.server.coordinator.ClusterCompactionConfig;
Expand Down Expand Up @@ -217,7 +217,7 @@ public void runReadyJobs()
final List<CompactionJob> pendingJobs = new ArrayList<>();
while (!queue.isEmpty()) {
final CompactionJob job = queue.poll();
if (startJobIfPendingAndReady(job, searchPolicy, pendingJobs, slotManager)) {
if (startJobIfPendingAndReady(job, pendingJobs, slotManager)) {
runStats.add(Stats.Compaction.SUBMITTED_TASKS, RowKey.of(Dimension.DATASOURCE, job.getDataSource()), 1);
}
}
Expand Down Expand Up @@ -267,7 +267,6 @@ public Map<String, AutoCompactionSnapshot> getSnapshots()
*/
private boolean startJobIfPendingAndReady(
CompactionJob job,
CompactionCandidateSearchPolicy policy,
List<CompactionJob> pendingJobs,
CompactionSlotManager slotManager
)
Expand All @@ -282,18 +281,17 @@ private boolean startJobIfPendingAndReady(
}

// Check if the job is already running, completed or skipped
final CompactionStatus compactionStatus = getCurrentStatusForJob(job, policy);
switch (compactionStatus.getState()) {
case RUNNING:
final CompactionCandidate.TaskState candidateState = getCurrentTaskStateForJob(job);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please do not add a new task state. Use the existing CompactionTaskStatus class.

switch (candidateState) {
case TASK_IN_PROGRESS:
return false;
case COMPLETE:
case RECENTLY_COMPLETED:
snapshotBuilder.moveFromPendingToCompleted(candidate);
return false;
case SKIPPED:
snapshotBuilder.moveFromPendingToSkipped(candidate);
return false;
default:
case READY:
break;
default:
throw DruidException.defensive("unknown compaction candidate state[%s]", candidateState);
}

// Check if enough compaction task slots are available
Expand Down Expand Up @@ -378,12 +376,10 @@ private void persistPendingIndexingState(CompactionJob job)
}
}

public CompactionStatus getCurrentStatusForJob(CompactionJob job, CompactionCandidateSearchPolicy policy)
public CompactionCandidate.TaskState getCurrentTaskStateForJob(CompactionJob job)
{
final CompactionStatus compactionStatus = statusTracker.computeCompactionStatus(job.getCandidate(), policy);
final CompactionCandidate candidatesWithStatus = job.getCandidate().withCurrentStatus(null);
statusTracker.onCompactionStatusComputed(candidatesWithStatus, null);
return compactionStatus;
statusTracker.onCompactionCandidates(job.getCandidate(), null);
return statusTracker.computeCompactionTaskState(job.getCandidate());
}

public static CompactionConfigValidationResult validateCompactionJob(BatchIndexingJob job)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -499,7 +499,7 @@ public CompactionSimulateResult simulateRunWithConfigUpdate(ClusterCompactionCon
updateRequest.getEngine()
);
} else {
return new CompactionSimulateResult(Collections.emptyMap());
return new CompactionSimulateResult(Collections.emptyMap(), null);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@
import org.apache.druid.segment.TestIndex;
import org.apache.druid.segment.metadata.HeapMemoryIndexingStateStorage;
import org.apache.druid.segment.metadata.IndexingStateCache;
import org.apache.druid.server.compaction.CompactionCandidate;
import org.apache.druid.server.compaction.CompactionSimulateResult;
import org.apache.druid.server.compaction.CompactionStatistics;
import org.apache.druid.server.compaction.CompactionStatus;
import org.apache.druid.server.compaction.CompactionStatusTracker;
import org.apache.druid.server.compaction.Table;
import org.apache.druid.server.coordinator.AutoCompactionSnapshot;
Expand Down Expand Up @@ -451,7 +451,7 @@ public void test_simulateRunWithConfigUpdate()
new ClusterCompactionConfig(null, null, null, null, null, null)
);
Assert.assertEquals(1, simulateResult.getCompactionStates().size());
final Table pendingCompactionTable = simulateResult.getCompactionStates().get(CompactionStatus.State.PENDING);
final Table pendingCompactionTable = simulateResult.getCompactionStates().get(CompactionCandidate.TaskState.READY);
Assert.assertEquals(
Arrays.asList("dataSource", "interval", "numSegments", "bytes", "maxTaskSlots", "reasonToCompact"),
pendingCompactionTable.getColumnNames()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,12 @@ public final int compareCandidates(CompactionCandidate o1, CompactionCandidate o
}

@Override
public Eligibility checkEligibilityForCompaction(
CompactionCandidate candidate,
CompactionTaskStatus latestTaskStatus
public CompactionCandidate createCandidate(
CompactionCandidate.ProposedCompaction proposedCompaction,
CompactionStatus eligibility
)
{
return Eligibility.OK;
return CompactionMode.FULL_COMPACTION.createCandidate(proposedCompaction, eligibility);
}

/**
Expand Down
Loading
Loading