blob: 62ec0659af6145749ad6c57864814cd05d7336b0 [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.io.sstable;
import java.io.Closeable;
import java.util.Collection;
import java.util.function.Function;
import org.apache.cassandra.db.compaction.CompactionInfo;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.dht.Token;
import org.apache.cassandra.service.StorageService;
public interface IVerifier extends Closeable
{
static Options.Builder options()
{
return new Options.Builder();
}
void verify();
@Override
void close();
CompactionInfo.Holder getVerifyInfo();
class Options
{
public final boolean invokeDiskFailurePolicy;
/**
* Force extended verification - unless it is enabled, extended verificiation will be done only
* if there is no digest present. Setting it along with quick makes no sense.
*/
public final boolean extendedVerification;
public final boolean checkVersion;
public final boolean mutateRepairStatus;
public final boolean checkOwnsTokens;
/**
* Quick check which does not include sstable data verification.
*/
public final boolean quick;
public final Function<String, ? extends Collection<Range<Token>>> tokenLookup;
private Options(boolean invokeDiskFailurePolicy,
boolean extendedVerification,
boolean checkVersion,
boolean mutateRepairStatus,
boolean checkOwnsTokens,
boolean quick,
Function<String, ? extends Collection<Range<Token>>> tokenLookup)
{
this.invokeDiskFailurePolicy = invokeDiskFailurePolicy;
this.extendedVerification = extendedVerification;
this.checkVersion = checkVersion;
this.mutateRepairStatus = mutateRepairStatus;
this.checkOwnsTokens = checkOwnsTokens;
this.quick = quick;
this.tokenLookup = tokenLookup;
}
@Override
public String toString()
{
return "Options{" +
"invokeDiskFailurePolicy=" + invokeDiskFailurePolicy +
", extendedVerification=" + extendedVerification +
", checkVersion=" + checkVersion +
", mutateRepairStatus=" + mutateRepairStatus +
", checkOwnsTokens=" + checkOwnsTokens +
", quick=" + quick +
'}';
}
public static class Builder
{
private boolean invokeDiskFailurePolicy = false; // invoking disk failure policy can stop the node if we find a corrupt stable
private boolean extendedVerification = false;
private boolean checkVersion = false;
private boolean mutateRepairStatus = false; // mutating repair status can be dangerous
private boolean checkOwnsTokens = false;
private boolean quick = false;
private Function<String, ? extends Collection<Range<Token>>> tokenLookup = StorageService.instance::getLocalAndPendingRanges;
public Builder invokeDiskFailurePolicy(boolean param)
{
this.invokeDiskFailurePolicy = param;
return this;
}
public Builder extendedVerification(boolean param)
{
this.extendedVerification = param;
return this;
}
public Builder checkVersion(boolean param)
{
this.checkVersion = param;
return this;
}
public Builder mutateRepairStatus(boolean param)
{
this.mutateRepairStatus = param;
return this;
}
public Builder checkOwnsTokens(boolean param)
{
this.checkOwnsTokens = param;
return this;
}
public Builder quick(boolean param)
{
this.quick = param;
return this;
}
public Builder tokenLookup(Function<String, ? extends Collection<Range<Token>>> tokenLookup)
{
this.tokenLookup = tokenLookup;
return this;
}
public Options build()
{
return new Options(invokeDiskFailurePolicy, extendedVerification, checkVersion, mutateRepairStatus, checkOwnsTokens, quick, tokenLookup);
}
}
}
}