/*
* Licensed 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 com.facebook.presto.raptor.metadata;
import io.airlift.configuration.Config;
import io.airlift.configuration.ConfigDescription;
import io.airlift.units.Duration;
import io.airlift.units.MaxDuration;
import io.airlift.units.MinDuration;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import static java.util.concurrent.TimeUnit.DAYS;
import static java.util.concurrent.TimeUnit.HOURS;
import static java.util.concurrent.TimeUnit.MINUTES;
public class ShardCleanerConfig
{
private Duration maxTransactionAge = new Duration(1, DAYS);
private Duration transactionCleanerInterval = new Duration(10, MINUTES);
private Duration localCleanerInterval = new Duration(1, HOURS);
private Duration localCleanTime = new Duration(4, HOURS);
private Duration backupCleanerInterval = new Duration(5, MINUTES);
private Duration backupCleanTime = new Duration(1, DAYS);
private int backupDeletionThreads = 50;
private Duration maxCompletedTransactionAge = new Duration(1, DAYS);
@NotNull
@MinDuration("1m")
@MaxDuration("30d")
public Duration getMaxTransactionAge()
{
return maxTransactionAge;
}
@Config("raptor.max-transaction-age")
@ConfigDescription("Maximum time a transaction may run before it is aborted")
public ShardCleanerConfig setMaxTransactionAge(Duration maxTransactionAge)
{
this.maxTransactionAge = maxTransactionAge;
return this;
}
@NotNull
@MinDuration("1m")
public Duration getTransactionCleanerInterval()
{
return transactionCleanerInterval;
}
@Config("raptor.transaction-cleaner-interval")
@ConfigDescription("How often to cleanup expired transactions")
public ShardCleanerConfig setTransactionCleanerInterval(Duration transactionCleanerInterval)
{
this.transactionCleanerInterval = transactionCleanerInterval;
return this;
}
@NotNull
@MinDuration("1m")
public Duration getLocalCleanerInterval()
{
return localCleanerInterval;
}
@Config("raptor.local-cleaner-interval")
@ConfigDescription("How often to discover local shards that need to be cleaned up")
public ShardCleanerConfig setLocalCleanerInterval(Duration localCleanerInterval)
{
this.localCleanerInterval = localCleanerInterval;
return this;
}
@NotNull
public Duration getLocalCleanTime()
{
return localCleanTime;
}
@Config("raptor.local-clean-time")
@ConfigDescription("How long to wait after discovery before cleaning local shards")
public ShardCleanerConfig setLocalCleanTime(Duration localCleanTime)
{
this.localCleanTime = localCleanTime;
return this;
}
@NotNull
@MinDuration("1m")
public Duration getBackupCleanerInterval()
{
return backupCleanerInterval;
}
@Config("raptor.backup-cleaner-interval")
@ConfigDescription("How often to check for backup shards that need to be cleaned up")
public ShardCleanerConfig setBackupCleanerInterval(Duration backupCleanerInterval)
{
this.backupCleanerInterval = backupCleanerInterval;
return this;
}
@NotNull
public Duration getBackupCleanTime()
{
return backupCleanTime;
}
@Config("raptor.backup-clean-time")
@ConfigDescription("How long to wait after deletion before cleaning backup shards")
public ShardCleanerConfig setBackupCleanTime(Duration backupCleanTime)
{
this.backupCleanTime = backupCleanTime;
return this;
}
@Min(1)
public int getBackupDeletionThreads()
{
return backupDeletionThreads;
}
@Config("raptor.backup-deletion-threads")
@ConfigDescription("Maximum number of threads to use for deleting shards from backup store")
public ShardCleanerConfig setBackupDeletionThreads(int backupDeletionThreads)
{
this.backupDeletionThreads = backupDeletionThreads;
return this;
}
@NotNull
@MinDuration("1m")
@MaxDuration("30d")
public Duration getMaxCompletedTransactionAge()
{
return maxCompletedTransactionAge;
}
@Config("raptor.max-completed-transaction-age")
@ConfigDescription("Maximum time a record of a successful or failed transaction is kept")
public ShardCleanerConfig setMaxCompletedTransactionAge(Duration maxCompletedTransactionAge)
{
this.maxCompletedTransactionAge = maxCompletedTransactionAge;
return this;
}
}