Skip to content

Commit

Permalink
multiple fixin's
Browse files Browse the repository at this point in the history
ensure valid bft set for reconfigured validators.
clean up observations replication - ugh
fix bootstrap view change logic
fix vote process
allow observations to propagate post vote
info log accusations
correct PID assignment
  • Loading branch information
Hellblazer committed Jun 23, 2024
1 parent fe46823 commit 7d18010
Show file tree
Hide file tree
Showing 9 changed files with 179 additions and 151 deletions.
10 changes: 1 addition & 9 deletions choam/src/main/java/com/salesforce/apollo/choam/CHOAM.java
Original file line number Diff line number Diff line change
Expand Up @@ -210,10 +210,9 @@ public static String print(Join join, DigestAlgorithm da) {
}

public static Reconfigure reconfigure(Digest nextViewId, Map<Digest, Join> joins, int checkpointTarget) {
assert Dag.validate(joins.size()) : "Reconfigure joins: %s is not BFT".formatted(joins.size());
var builder = Reconfigure.newBuilder().setCheckpointTarget(checkpointTarget).setId(nextViewId.toDigeste());

joins.keySet().stream().sorted().map(joins::get).forEach(builder::addJoins);

return builder.build();
}

Expand All @@ -232,13 +231,6 @@ public static Block reconfigure(Digest nextViewId, Map<Digest, Join> joins, Hash
.build();
}

public static Map<Digest, Member> rosterMap(Context<Member> baseContext, Collection<Digest> members) {
return members.stream()
.map(baseContext::getMember)
.filter(m -> m != null)
.collect(Collectors.toMap(Member::getId, Function.identity()));
}

public static List<Transaction> toGenesisData(List<? extends Message> initializationData) {
return toGenesisData(initializationData, DigestAlgorithm.DEFAULT, SignatureAlgorithm.DEFAULT);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.salesforce.apollo.cryptography.JohnHancock;
import com.salesforce.apollo.cryptography.Verifier;
import com.salesforce.apollo.cryptography.Verifier.DefaultVerifier;
import com.salesforce.apollo.ethereal.Dag;
import com.salesforce.apollo.membership.Member;
import com.salesforce.apollo.membership.MockMember;
import io.grpc.StatusRuntimeException;
Expand All @@ -35,6 +36,8 @@ public interface Committee {

static Map<Member, Verifier> validatorsOf(Reconfigure reconfigure, Context<Member> context, Digest member,
Logger log) {
assert Dag.validate(reconfigure.getJoinsCount()) : "Reconfigure joins: %s is not BFT".formatted(
reconfigure.getJoinsCount());
var validators = reconfigure.getJoinsList().stream().collect(Collectors.toMap(e -> {
var id = new Digest(e.getMember().getVm().getId());
var m = context.getMember(id);
Expand All @@ -47,7 +50,6 @@ static Map<Member, Verifier> validatorsOf(Reconfigure reconfigure, Context<Membe
}, e -> {
var vm = e.getMember().getVm();
if (vm.hasConsensusKey()) {

return new DefaultVerifier(publicKey(vm.getConsensusKey()));
} else {
log.info("No member for validator: {}, returning mock on: {}", Digest.from(vm.getId()), member);
Expand Down
5 changes: 3 additions & 2 deletions choam/src/main/java/com/salesforce/apollo/choam/Producer.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.salesforce.apollo.cryptography.DigestAlgorithm;
import com.salesforce.apollo.ethereal.Config;
import com.salesforce.apollo.ethereal.Config.Builder;
import com.salesforce.apollo.ethereal.Dag;
import com.salesforce.apollo.ethereal.Ethereal;
import com.salesforce.apollo.ethereal.memberships.ChRbcGossip;
import com.salesforce.apollo.membership.Member;
Expand Down Expand Up @@ -325,8 +326,8 @@ private void publish(PendingBlock p, boolean beacon) {

private void reconfigure() {
final var slate = assembly.getSlate();
assert slate != null && !slate.isEmpty() : "Slate is incorrect: %s".formatted(
slate.keySet().stream().sorted().toList());
assert slate != null && !slate.isEmpty() : slate == null ? "Slate is null" : "Slate is empty";
assert Dag.validate(slate.size()) : "Reconfigure joins: %s is not BFT".formatted(slate.size());
var reconfiguration = new HashedBlock(params().digestAlgorithm(),
view.reconfigure(slate, nextViewId, previousBlock.get(),
checkpoint.get()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.salesforce.apollo.cryptography.JohnHancock;
import com.salesforce.apollo.cryptography.proto.Digeste;
import com.salesforce.apollo.cryptography.proto.PubKey;
import com.salesforce.apollo.ethereal.Dag;
import com.salesforce.apollo.membership.Member;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -142,9 +143,9 @@ void assemble(List<Assemblies> asses) {
}
views.forEach(svs -> {
if (view.validate(svs)) {
log.info("Adding views: {} from: {} on: {}",
svs.getViews().getViewsList().stream().map(v -> Digest.from(v.getDiadem())).toList(),
Digest.from(svs.getViews().getMember()), params().member().getId());
log.debug("Adding views: {} from: {} on: {}",
svs.getViews().getViewsList().stream().map(v -> Digest.from(v.getDiadem())).toList(),
Digest.from(svs.getViews().getMember()), params().member().getId());
viewProposals.put(Digest.from(svs.getViews().getMember()), svs.getViews());
} else {
log.warn("Invalid views: {} from: {} on: {}",
Expand Down Expand Up @@ -377,6 +378,8 @@ private void vote() {
params().member().getId());
}
var winner = ratification.getFirst();
assert Dag.validate(winner.getCommitteeCount()) : "Winner committee: %s is not BFT".formatted(
winner.getCommitteeList().size());
selected = new Vue(Digest.from(winner.getDiadem()), assemblyOf(winner.getCommitteeList()),
winner.getMajority());
if (log.isDebugEnabled()) {
Expand Down Expand Up @@ -408,8 +411,8 @@ public void certify() {
transitions.certified();
} else {
countdown.set(4);
log.info("Not certifying: {} majority: {} slate: {} of: {} on: {}", nextViewId, selected.majority,
proposals.keySet().stream().sorted().toList(), nextViewId, params().member().getId());
log.debug("Not certifying: {} majority: {} slate: {} of: {} on: {}", nextViewId, selected.majority,
proposals.keySet().stream().sorted().toList(), nextViewId, params().member().getId());
}
}

Expand All @@ -420,7 +423,7 @@ public void checkAssembly() {
if (proposals.size() >= selected.majority) {
transitions.chill();
} else {
log.info("Check assembly: {} on: {}", proposals.size(), params().member().getId());
log.trace("Check assembly: {} on: {}", proposals.size(), params().member().getId());
}
}

Expand Down
10 changes: 5 additions & 5 deletions choam/src/main/java/com/salesforce/apollo/choam/ViewContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;

import static com.salesforce.apollo.cryptography.QualifiedBase64.publicKey;
Expand Down Expand Up @@ -48,11 +49,10 @@ public ViewContext(Context<Member> context, Parameters params, Supplier<CHOAM.Pe
this.validators = validators;
this.pendingViews = pendingViews;

var remapped = CHOAM.rosterMap(params.context(), context.allMembers().map(Member::getId).toList());
short pid = 0;
for (Digest d : remapped.keySet().stream().sorted().toList()) {
roster.put(remapped.get(d).getId(), pid++);
}
var pid = new AtomicInteger(0);
context.stream(1).forEach(m -> {
roster.put(m.getId(), (short) pid.getAndIncrement());
});
}

public static String print(Certification c, DigestAlgorithm algo) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,13 @@ private void complete(Member member, CompletableFuture<Bound> gateway, HashMulti
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} catch (ExecutionException e) {
log.warn("Error retrieving Gateway from: {} on: {}", member.getId(), node.getId(), e.getCause());
var cause = e.getCause();
if (cause instanceof StatusRuntimeException sre) {
log.warn("Error retrieving Gateway: {} from: {} on: {}", sre.getMessage(), member.getId(),
node.getId());
} else {
log.error("Error retrieving Gateway from: {} on: {}", member.getId(), node.getId(), cause);
}
dec(complete, remaining);
return;
}
Expand Down
Loading

0 comments on commit 7d18010

Please sign in to comment.