From 253eb1e388dd6258bc0ddbce498044eb23b101ec Mon Sep 17 00:00:00 2001 From: Michael Eischer <eischer@cs.fau.de> Date: Thu, 2 Jul 2020 14:19:24 +0200 Subject: [PATCH] Move replica config assertions to static block This ensures that a local configuration test will trigger these checks. --- src/refit/config/REFITConfig.java | 4 +++- src/refit/replica/REFITMicroIRMCReplica.java | 9 +++++---- src/refit/replica/REFITReplica.java | 9 +++++---- src/refit/replica/REFITSpiderReplica.java | 9 +++++---- src/refit/replica/REFITWeaveReplica.java | 9 +++++---- 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/refit/config/REFITConfig.java b/src/refit/config/REFITConfig.java index d55d275..046b465 100644 --- a/src/refit/config/REFITConfig.java +++ b/src/refit/config/REFITConfig.java @@ -213,7 +213,7 @@ public class REFITConfig { public static final Class<? extends REFITBenchmarkRunnable> APPLICATION_CLIENT = config.getClass("application.client", REFITBenchmarkRunnable.class); public static final Class<? extends REFITClientLibrary> APPLICATION_CLIENT_LIBRARY = config.getClass("application.library", REFITClientLibrary.class); public static final Class<? extends REFITClientPolicy> APPLICATION_CLIENT_POLICY = config.getClass("application.policy", REFITClientPolicy.class); - public static final Class<? extends REFITBaseReplica> APPLICATION_REPLICA = config.getClass("application.replica", REFITBaseReplica.class); + public static final Class<? extends REFITBaseReplica> APPLICATION_REPLICA; // Communication public static final int REPLICA_NETWORK_SEND_BUFFER_SIZE = 1024 * config.getInt("replica.network.buffer.send.kb"); @@ -375,6 +375,8 @@ public class REFITConfig { REFITAssert.assertTrue(!REFITConfig.AUTHENTICATE_MESSAGES || REFITConfig.WAIT_FOR_FULL_REPLY, "ack replies are not yet implemented in the BFT protocol"); + + APPLICATION_REPLICA = config.getClass("application.replica", REFITBaseReplica.class); } diff --git a/src/refit/replica/REFITMicroIRMCReplica.java b/src/refit/replica/REFITMicroIRMCReplica.java index a76f645..e2a404d 100644 --- a/src/refit/replica/REFITMicroIRMCReplica.java +++ b/src/refit/replica/REFITMicroIRMCReplica.java @@ -17,14 +17,15 @@ public class REFITMicroIRMCReplica extends REFITBaseReplica { private final REFITAbstractChannelSender orderedChannelSenderStage; private final REFITAbstractChannelReceiver orderedChannelReceiverStage; - - public REFITMicroIRMCReplica(short id, boolean isSingleThreaded) { - super(id, isSingleThreaded, false); - + static { // partial configuration sanity check REFITAssert.assertTrue(REFITConfig.AUTONOMOUS_PANICS && REFITConfig.SEPARATE_EXECUTION_REPLICAS && REFITConfig.BATCH_ALWAYS && REFITOrderGroups.COUNT == 1 && REFITConfig.SIGNED_REQUESTS, "Incompatible configuration"); + } + + public REFITMicroIRMCReplica(short id, boolean isSingleThreaded) { + super(id, isSingleThreaded, false); boolean isExecutor = (id >= REFITConfig.ORDER_GROUP_SIZE); diff --git a/src/refit/replica/REFITReplica.java b/src/refit/replica/REFITReplica.java index b1fbaf8..c3fa03e 100644 --- a/src/refit/replica/REFITReplica.java +++ b/src/refit/replica/REFITReplica.java @@ -27,13 +27,14 @@ public class REFITReplica extends REFITBaseReplica { private final REFITExecutionStageBase executionStage; private final REFITFuzzyCheckpointStage fuzzyCheckpointStage; - - public REFITReplica(short id, boolean isSingleThreaded) { - super(id, isSingleThreaded, true); - + static { if (REFITOrderGroups.COUNT > 1) { throw new AssertionError("The base configuration only supports a single order group!"); } + } + + public REFITReplica(short id, boolean isSingleThreaded) { + super(id, isSingleThreaded, true); // Create global stages if (id < REFITConfig.EXEC_GROUP_SIZE) { diff --git a/src/refit/replica/REFITSpiderReplica.java b/src/refit/replica/REFITSpiderReplica.java index 11c113e..5824581 100644 --- a/src/refit/replica/REFITSpiderReplica.java +++ b/src/refit/replica/REFITSpiderReplica.java @@ -38,14 +38,15 @@ public class REFITSpiderReplica extends REFITBaseReplica { private final REFITAbstractChannelSender orderedChannelSenderStage; private final REFITAbstractChannelReceiver orderedChannelReceiverStage; - - public REFITSpiderReplica(short id, boolean isSingleThreaded) { - super(id, isSingleThreaded, (id >= REFITConfig.ORDER_GROUP_SIZE)); - + static { // partial configuration sanity check REFITAssert.assertTrue(REFITConfig.AUTONOMOUS_PANICS && REFITConfig.SEPARATE_EXECUTION_REPLICAS && REFITConfig.BATCH_ALWAYS && REFITOrderGroups.COUNT == 1 && REFITConfig.SIGNED_REQUESTS, "Incompatible configuration"); + } + + public REFITSpiderReplica(short id, boolean isSingleThreaded) { + super(id, isSingleThreaded, (id >= REFITConfig.ORDER_GROUP_SIZE)); boolean isExecutor = (id >= REFITConfig.ORDER_GROUP_SIZE); int executorID = REFITReplicaGroups.getExecutionGroupId(id); diff --git a/src/refit/replica/REFITWeaveReplica.java b/src/refit/replica/REFITWeaveReplica.java index 442e8ed..e037a10 100644 --- a/src/refit/replica/REFITWeaveReplica.java +++ b/src/refit/replica/REFITWeaveReplica.java @@ -31,14 +31,15 @@ public class REFITWeaveReplica extends REFITBaseReplica { private final REFITGroupMessageRouter msgRouter; - - public REFITWeaveReplica(short id, boolean isSingleThreaded) { - super(id, isSingleThreaded, true); - + static { // minimal sanity check REFITAssert.assertTrue(REFITConfig.LOCATION_BASED_ORDER_GROUPS && REFITConfig.TOTAL_NR_OF_REPLICAS == REFITConfig.ORDER_GROUP_SIZE && REFITConfig.TOTAL_NR_OF_REPLICAS == REFITConfig.EXEC_GROUP_SIZE, "Incompatible configuration"); + } + + public REFITWeaveReplica(short id, boolean isSingleThreaded) { + super(id, isSingleThreaded, true); for (int i = 0; i < REFITOrderGroups.COUNT; i++) { REFITLogger.logDebug(this, "Order group " + i + ": " + Arrays.toString(REFITConfig.ORDER_GROUPS[i])); -- GitLab