blob: 07573ffd92cec1446aaff7426b8a03c00856c60f [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.distributedlog.bk;
import com.google.common.base.Objects;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Configuration for quorums
*/
public class QuorumConfig {
private static final Logger logger = LoggerFactory.getLogger(QuorumConfig.class);
private final int ensembleSize;
private final int writeQuorumSize;
private final int ackQuorumSize;
public QuorumConfig(int ensembleSize,
int writeQuorumSize,
int ackQuorumSize) {
this.ensembleSize = ensembleSize;
if (this.ensembleSize < writeQuorumSize) {
this.writeQuorumSize = this.ensembleSize;
logger.warn("Setting write quorum size {} greater than ensemble size {}",
writeQuorumSize, this.ensembleSize);
} else {
this.writeQuorumSize = writeQuorumSize;
}
if (this.writeQuorumSize < ackQuorumSize) {
this.ackQuorumSize = this.writeQuorumSize;
logger.warn("Setting write ack quorum size {} greater than write quorum size {}",
ackQuorumSize, this.writeQuorumSize);
} else {
this.ackQuorumSize = ackQuorumSize;
}
}
public int getEnsembleSize() {
return ensembleSize;
}
public int getWriteQuorumSize() {
return writeQuorumSize;
}
public int getAckQuorumSize() {
return ackQuorumSize;
}
@Override
public int hashCode() {
return Objects.hashCode(ensembleSize, writeQuorumSize, ackQuorumSize);
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof QuorumConfig)) {
return false;
}
QuorumConfig other = (QuorumConfig) obj;
return ensembleSize == other.ensembleSize
&& writeQuorumSize == other.writeQuorumSize
&& ackQuorumSize == other.ackQuorumSize;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("QuorumConfig[ensemble=")
.append(ensembleSize).append(", write quorum=")
.append(writeQuorumSize).append(", ack quorum=")
.append(ackQuorumSize).append("]");
return sb.toString();
}
}