blob: 2a5ffc61e678a4bceca4d249676c0271f2256212 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.cassandra.db.compaction;
public enum OperationType
{
/** Each modification here should be also applied to {@link org.apache.cassandra.tools.nodetool.Stop#compactionType} */
P0("Cancel all operations", false, 0),
// Automation or operator-driven tasks
CLEANUP("Cleanup", true, 1),
SCRUB("Scrub", true, 1),
UPGRADE_SSTABLES("Upgrade sstables", true, 1),
VERIFY("Verify", false, 1),
MAJOR_COMPACTION("Major compaction", true, 1),
RELOCATE("Relocate sstables to correct disk", false, 1),
GARBAGE_COLLECT("Remove deleted data", true, 1),
// Internal SSTable writing
FLUSH("Flush", true, 1),
WRITE("Write", true, 1),
ANTICOMPACTION("Anticompaction after repair", true, 2),
VALIDATION("Validation", false, 3),
INDEX_BUILD("Secondary index build", false, 4),
VIEW_BUILD("View build", false, 4),
COMPACTION("Compaction", true, 5),
TOMBSTONE_COMPACTION("Tombstone Compaction", true, 5), // Compaction for tombstone removal
UNKNOWN("Unknown compaction type", false, 5),
STREAM("Stream", true, 6),
KEY_CACHE_SAVE("Key cache save", false, 6),
ROW_CACHE_SAVE("Row cache save", false, 6),
COUNTER_CACHE_SAVE("Counter cache save", false, 6),
INDEX_SUMMARY("Index summary redistribution", false, 6);
public final String type;
public final String fileName;
/**
* For purposes of calculating space for interim compactions in flight, whether or not this OperationType is expected
* to write data to disk
*/
public final boolean writesData;
// As of now, priority takes part only for interrupting tasks to give way to operator-driven tasks.
// Operation types that have a smaller number will be allowed to cancel ones that have larger numbers.
//
// Submitted tasks may be prioritised differently when forming a queue, if/when CASSANDRA-11218 is implemented.
public final int priority;
OperationType(String type, boolean writesData, int priority)
{
this.type = type;
this.fileName = type.toLowerCase().replace(" ", "");
this.writesData = writesData;
this.priority = priority;
}
public static OperationType fromFileName(String fileName)
{
for (OperationType opType : OperationType.values())
if (opType.fileName.equals(fileName))
return opType;
throw new IllegalArgumentException("Invalid fileName for operation type: " + fileName);
}
public String toString()
{
return type;
}
}