Skip to content

Commit

Permalink
fix(flexible):Add necessary null judgment
Browse files Browse the repository at this point in the history
  • Loading branch information
1294566108 committed Aug 22, 2023
1 parent 8075eb9 commit 6a54afb
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -549,9 +549,11 @@ private void doCommitted(final long committedIndex) {
// Joint stage is not supposed to be noticeable by end users.
Configuration conf = new Configuration(iterImpl.entry().getPeers());
conf.setEnableFlexible(logEntry.getEnableFlexible());
if (logEntry.haveFactorValue() && logEntry.haveFactorValue()) {
conf.setReadFactor(logEntry.getReadFactor());
conf.setWriteFactor(logEntry.getWriteFactor());
conf.setReadFactor(logEntry.getReadFactor());
conf.setWriteFactor(logEntry.getWriteFactor());
if (Objects.nonNull(logEntry.getQuorum())) {
Quorum quorum = new Quorum(logEntry.getQuorum().getW(), logEntry.getQuorum().getR());
conf.setQuorum(quorum);
}
this.fsm.onConfigurationCommitted(conf);
}
Expand Down Expand Up @@ -639,11 +641,16 @@ private void doSnapshotSave(final SaveSnapshotClosure done) {
Configuration conf = confEntry.getConf();
metaBuilder.setIsEnableFlexible(conf.isEnableFlexible());
// set new factor
metaBuilder.setReadFactor(conf.getReadFactor());
metaBuilder.setWriteFactor(conf.getWriteFactor());

LogOutter.Quorum quorum = quorumBuilder.setR(conf.getQuorum().getR()).setW(conf.getQuorum().getW()).build();
metaBuilder.setQuorum(quorum);
if (Objects.nonNull(conf.getReadFactor())) {
metaBuilder.setReadFactor(conf.getReadFactor());
}
if (Objects.nonNull(conf.getWriteFactor())) {
metaBuilder.setWriteFactor(conf.getWriteFactor());
}
if (Objects.nonNull(conf.getQuorum())) {
LogOutter.Quorum quorum = quorumBuilder.setR(conf.getQuorum().getR()).setW(conf.getQuorum().getW()).build();
metaBuilder.setQuorum(quorum);
}
if (confEntry.getOldConf() != null) {
for (final PeerId peer : confEntry.getOldConf()) {
metaBuilder.addOldPeers(peer.toString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,11 @@ public UnfoundPeerId(PeerId peerId, int index, boolean found) {
}
}

protected final List<Ballot.UnfoundPeerId> peers = new ArrayList<>();
private final List<Ballot.UnfoundPeerId> peers = new ArrayList<>();

protected int quorum;
protected final List<Ballot.UnfoundPeerId> oldPeers = new ArrayList<>();
protected int oldQuorum;
private int quorum;
private final List<Ballot.UnfoundPeerId> oldPeers = new ArrayList<>();
private int oldQuorum;

public Ballot() {
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
/**
* V2 log entry decoder based on protobuf, see src/main/resources/log.proto
*
* @author boyan(boyan @ antfin.com)
* @author boyan(boyan@antfin.com)
*/
public class V2Decoder implements LogEntryDecoder {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
Expand Down Expand Up @@ -259,7 +260,10 @@ private void load(final ConfigurationManager confManager) {
entry.getWriteFactor(), entry.getReadFactor(), entry.getEnableFlexible());
confEntry.setConf(conf);
if (entry.getOldPeers() != null) {
Quorum oldQuorum = new Quorum(entry.getOldQuorum().getW(), entry.getOldQuorum().getR());
Quorum oldQuorum = null;
if(Objects.nonNull(entry.getOldQuorum())) {
oldQuorum = new Quorum(entry.getOldQuorum().getW(), entry.getOldQuorum().getR());
}
Configuration oldConf = new Configuration(entry.getOldPeers(), entry.getOldLearners(),
oldQuorum, entry.getOldWriteFactor(), entry.getOldReadFactor(), entry.getEnableFlexible());
confEntry.setOldConf(oldConf);
Expand Down
62 changes: 31 additions & 31 deletions jraft-core/src/main/resources/raft.proto
Original file line number Diff line number Diff line change
Expand Up @@ -10,38 +10,38 @@ option java_outer_classname = "RaftOutter";


message EntryMeta {
required int64 term = 1;
required EntryType type = 2;
repeated string peers = 3;
optional int64 data_len = 4;
// Don't change field id of `old_peers' in the consideration of backward
// compatibility
repeated string old_peers = 5;
// Checksum fot this log entry, since 1.2.6, added by [email protected]
optional int64 checksum = 6;
repeated string learners = 7;
repeated string old_learners = 8;
optional int32 read_factor = 9;
optional int32 write_factor = 10;
optional int32 old_read_factor = 11;
optional int32 old_write_factor = 12;
optional bool isEnableFlexible = 13;
optional Quorum quorum = 14;
optional Quorum old_quorum = 15;
required int64 term = 1;
required EntryType type = 2;
repeated string peers = 3;
optional int64 data_len = 4;
// Don't change field id of `old_peers' in the consideration of backward
// compatibility
repeated string old_peers = 5;
// Checksum fot this log entry, since 1.2.6, added by [email protected]
optional int64 checksum = 6;
repeated string learners = 7;
repeated string old_learners = 8;
optional int32 read_factor = 9;
optional int32 write_factor = 10;
optional int32 old_read_factor = 11;
optional int32 old_write_factor = 12;
optional bool isEnableFlexible = 13;
optional Quorum quorum = 14;
optional Quorum old_quorum = 15;
};

message SnapshotMeta {
required int64 last_included_index = 1;
required int64 last_included_term = 2;
repeated string peers = 3;
repeated string old_peers = 4;
repeated string learners = 5;
repeated string old_learners = 6;
optional int32 read_factor = 7;
optional int32 write_factor = 8;
optional int32 old_read_factor = 9;
optional int32 old_write_factor = 10;
optional bool isEnableFlexible = 11;
optional Quorum quorum = 12;
optional Quorum old_quorum = 13;
required int64 last_included_index = 1;
required int64 last_included_term = 2;
repeated string peers = 3;
repeated string old_peers = 4;
repeated string learners = 5;
repeated string old_learners = 6;
optional int32 read_factor = 7;
optional int32 write_factor = 8;
optional int32 old_read_factor = 9;
optional int32 old_write_factor = 10;
optional bool isEnableFlexible = 11;
optional Quorum quorum = 12;
optional Quorum old_quorum = 13;
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
Expand Down Expand Up @@ -161,7 +162,10 @@ private void load(final ConfigurationManager confManager) {
final ConfigurationEntry confEntry = new ConfigurationEntry();
confEntry.setId(new LogId(entry.getId().getIndex(), entry.getId().getTerm()));
Quorum quorum = new Quorum(entry.getQuorum().getW(), entry.getQuorum().getR());
Quorum oldQuorum = new Quorum(entry.getOldQuorum().getW(), entry.getOldQuorum().getR());
Quorum oldQuorum = null;
if (Objects.nonNull(entry.getOldQuorum())) {
oldQuorum = new Quorum(entry.getOldQuorum().getW(), entry.getOldQuorum().getR());
}
Configuration conf = new Configuration(entry.getPeers(), entry.getLearners(), quorum,
entry.getWriteFactor(), entry.getReadFactor(), entry.getEnableFlexible());
confEntry.setConf(conf);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
Expand Down Expand Up @@ -274,7 +275,10 @@ public void loadConfiguration() {
if (entry.getType() == EntryType.ENTRY_TYPE_CONFIGURATION) {
final ConfigurationEntry confEntry = new ConfigurationEntry();
Quorum quorum = new Quorum(entry.getQuorum().getW(), entry.getQuorum().getR());
Quorum oldQuorum = new Quorum(entry.getOldQuorum().getW(), entry.getOldQuorum().getR());
Quorum oldQuorum = null;
if (Objects.nonNull(entry.getOldQuorum())) {
oldQuorum = new Quorum(entry.getOldQuorum().getW(), entry.getOldQuorum().getR());
}
confEntry.setId(new LogId(entry.getId().getIndex(), entry.getId().getTerm()));
Configuration newConf = new Configuration(entry.getPeers(), entry.getLearners(), quorum,
entry.getWriteFactor(), entry.getReadFactor(), entry.getEnableFlexible());
Expand Down

0 comments on commit 6a54afb

Please sign in to comment.