Skip to content

Commit e471315

Browse files
author
Tarunkumar Banda
committed
Changes for ST in fullNode
1 parent fa7a860 commit e471315

File tree

21 files changed

+495
-43
lines changed

21 files changed

+495
-43
lines changed

bftengine/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ set(corebft_source_files
1111
src/bftengine/DebugStatistics.cpp
1212
src/bftengine/SeqNumInfo.cpp
1313
src/bftengine/ReadOnlyReplica.cpp
14+
src/bftengine/FullNodeReplica.cpp
1415
src/bftengine/ReplicaBase.cpp
1516
src/bftengine/ReplicaForStateTransfer.cpp
1617
src/bftengine/ReplicaImp.cpp

bftengine/include/bcstatetransfer/SimpleBCStateTransfer.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,10 @@ struct Config {
150150
uint16_t cVal = 0;
151151
uint16_t numReplicas = 0; // number of consensus replicas
152152
uint16_t numRoReplicas = 0;
153+
uint16_t numFnReplicas = 0;
153154
bool pedanticChecks = false;
154155
bool isReadOnly = false;
156+
bool isFullNode = false;
155157

156158
// sizes
157159
uint32_t maxChunkSize = 0;
@@ -219,6 +221,8 @@ inline std::ostream &operator<<(std::ostream &os, const Config &c) {
219221
c.enableSourceBlocksPreFetch,
220222
c.enableSourceSelectorPrimaryAwareness,
221223
c.enableStoreRvbDataDuringCheckpointing);
224+
os << ",";
225+
os << KVLOG(c.numFnReplicas, c.isFullNode);
222226
return os;
223227
}
224228
// creates an instance of the state transfer module.

bftengine/include/bftengine/ReplicaConfig.hpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,10 @@ class ReplicaConfig : public concord::serialize::SerializableFactory<ReplicaConf
4646
}
4747

4848
CONFIG_PARAM(isReadOnly, bool, false, "Am I a read-only replica?");
49+
CONFIG_PARAM(isFullNode, bool, false, "Am I a fullNode replica?");
4950
CONFIG_PARAM(numReplicas, uint16_t, 0, "number of regular replicas");
5051
CONFIG_PARAM(numRoReplicas, uint16_t, 0, "number of read-only replicas");
52+
CONFIG_PARAM(numFnReplicas, uint16_t, 0, "number of full-node replicas");
5153
CONFIG_PARAM(fVal, uint16_t, 0, "F value - max number of faulty/malicious replicas. fVal >= 1");
5254
CONFIG_PARAM(cVal, uint16_t, 0, "C value. cVal >=0");
5355
CONFIG_PARAM(replicaId,
@@ -327,8 +329,10 @@ class ReplicaConfig : public concord::serialize::SerializableFactory<ReplicaConf
327329

328330
void serializeDataMembers(std::ostream& outStream) const {
329331
serialize(outStream, isReadOnly);
332+
serialize(outStream, isFullNode);
330333
serialize(outStream, numReplicas);
331334
serialize(outStream, numRoReplicas);
335+
serialize(outStream, numFnReplicas);
332336
serialize(outStream, fVal);
333337
serialize(outStream, cVal);
334338
serialize(outStream, replicaId);
@@ -427,8 +431,10 @@ class ReplicaConfig : public concord::serialize::SerializableFactory<ReplicaConf
427431
}
428432
void deserializeDataMembers(std::istream& inStream) {
429433
deserialize(inStream, isReadOnly);
434+
deserialize(inStream, isFullNode);
430435
deserialize(inStream, numReplicas);
431436
deserialize(inStream, numRoReplicas);
437+
deserialize(inStream, numFnReplicas);
432438
deserialize(inStream, fVal);
433439
deserialize(inStream, cVal);
434440
deserialize(inStream, replicaId);
@@ -605,7 +611,8 @@ inline std::ostream& operator<<(std::ostream& os, const ReplicaConfig& rc) {
605611
rc.maxNumberOfDbCheckpoints,
606612
rc.dbCheckPointWindowSize,
607613
rc.dbCheckpointDirPath,
608-
rc.dbSnapshotIntervalSeconds.count());
614+
rc.dbSnapshotIntervalSeconds.count(),
615+
rc.isFullNode);
609616
os << ",";
610617
const auto replicaMsgSignAlgo =
611618
(concord::crypto::SignatureAlgorithm::EdDSA == rc.replicaMsgSigningAlgo) ? "eddsa" : "undefined";

bftengine/include/bftengine/ReplicaFactory.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "Replica.hpp"
1616
#include "ReplicaImp.hpp"
1717
#include "ReadOnlyReplica.hpp"
18+
#include "FullNodeReplica.hpp"
1819
#include "ReplicaLoader.hpp"
1920

2021
namespace preprocessor {
@@ -48,6 +49,12 @@ class ReplicaFactory {
4849
bft::communication::ICommunication *,
4950
MetadataStorage *);
5051

52+
static IReplicaPtr createFullNodeReplica(const ReplicaConfig &,
53+
std::shared_ptr<IRequestsHandler>,
54+
IStateTransfer *,
55+
bft::communication::ICommunication *,
56+
MetadataStorage *);
57+
5158
static void setAggregator(const std::shared_ptr<concordMetrics::Aggregator> &aggregator);
5259
static logging::Logger logger_;
5360

bftengine/src/bcstatetransfer/AsyncStateTransferCRE.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,9 @@ std::shared_ptr<ClientReconfigurationEngine> CreFactory::create(std::shared_ptr<
148148
for (uint16_t i = 0; i < repConfig.numReplicas; i++) {
149149
bftClientConf.all_replicas.emplace(bft::client::ReplicaId{i});
150150
}
151-
for (uint16_t i = repConfig.numReplicas; i < repConfig.numReplicas + repConfig.numRoReplicas; i++) {
151+
for (uint16_t i = repConfig.numReplicas;
152+
i < repConfig.numReplicas + repConfig.numRoReplicas + repConfig.numFnReplicas;
153+
i++) {
152154
bftClientConf.ro_replicas.emplace(bft::client::ReplicaId{i});
153155
}
154156
bftClientConf.replicas_master_key_folder_path = std::nullopt;

bftengine/src/bcstatetransfer/BCStateTran.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ BCStateTran::BCStateTran(const Config &config, IAppState *const stateApi, DataSt
308308
// Validate input parameters and some of the configuration
309309
ConcordAssertNE(stateApi, nullptr);
310310
ConcordAssertGE(replicas_.size(), 3U * config_.fVal + 1U);
311-
ConcordAssert(replicas_.count(config_.myReplicaId) == 1 || config.isReadOnly);
311+
ConcordAssert(replicas_.count(config_.myReplicaId) == 1 || config.isReadOnly || config.isFullNode);
312312
ConcordAssertLT(finalizePutblockTimeoutMilli_, config_.refreshTimerMs);
313313
ConcordAssertEQ(RejectFetchingMsg::reasonMessages.size(), RejectFetchingMsg::Reason::LAST - 1);
314314
if (config_.sourceSessionExpiryDurationMs > 0) {
@@ -1159,7 +1159,7 @@ void BCStateTran::handleStateTransferMessageImpl(char *msg,
11591159
time_in_incoming_events_queue_rec_.end();
11601160
histograms_.incoming_events_queue_size->record(incomingEventsQ_->size());
11611161
}
1162-
bool invalidSender = (senderId >= (config_.numReplicas + config_.numRoReplicas));
1162+
bool invalidSender = (senderId >= (config_.numReplicas + config_.numRoReplicas + config_.numFnReplicas));
11631163
bool sentFromSelf = senderId == config_.myReplicaId;
11641164
bool msgSizeTooSmall = msgLen < sizeof(BCStateTranBaseMsg);
11651165
if (msgSizeTooSmall || sentFromSelf || invalidSender) {
@@ -3971,13 +3971,13 @@ void BCStateTran::computeDigestOfPage(
39713971
if (checkpointNumber > 0) {
39723972
digestGenerator.update(page, pageSize);
39733973
}
3974-
digestGenerator.writeDigest(outDigest.getForUpdate());
3974+
digestGenerator.writeDigest(reinterpret_cast<char *>(&outDigest));
39753975
}
39763976

39773977
void BCStateTran::computeDigestOfPagesDescriptor(const DataStore::ResPagesDescriptor *pagesDesc, Digest &outDigest) {
39783978
DigestGenerator digestGenerator;
39793979
digestGenerator.update(reinterpret_cast<const char *>(pagesDesc), pagesDesc->size());
3980-
digestGenerator.writeDigest(outDigest.getForUpdate());
3980+
digestGenerator.writeDigest(reinterpret_cast<char *>(&outDigest));
39813981
}
39823982

39833983
void BCStateTran::computeDigestOfBlockImpl(const uint64_t blockNum,
@@ -3996,7 +3996,7 @@ void BCStateTran::computeDigestOfBlock(const uint64_t blockNum,
39963996
const char *block,
39973997
const uint32_t blockSize,
39983998
Digest *outDigest) {
3999-
computeDigestOfBlockImpl(blockNum, block, blockSize, outDigest->getForUpdate());
3999+
computeDigestOfBlockImpl(blockNum, block, blockSize, reinterpret_cast<char *>(outDigest));
40004000
}
40014001

40024002
BlockDigest BCStateTran::computeDigestOfBlock(const uint64_t blockNum, const char *block, const uint32_t blockSize) {

bftengine/src/bftengine/ClientsManager.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,9 @@ ClientsManager::ClientsManager(const std::set<NodeIdType>& proxyClients,
217217
ConcordAssert(maxNumOfReqsPerClient_ > 0);
218218
reservedPagesPerRequest_ = reservedPagesPerRequest(sizeOfReservedPage(), maxReplySize_);
219219
reservedPagesPerClient_ = reservedPagesPerClient(sizeOfReservedPage(), maxReplySize_, maxNumOfReqsPerClient_);
220-
for (NodeIdType i = 0; i < ReplicaConfig::instance().numReplicas + ReplicaConfig::instance().numRoReplicas; i++) {
220+
for (NodeIdType i = 0; i < ReplicaConfig::instance().numReplicas + ReplicaConfig::instance().numRoReplicas +
221+
ReplicaConfig::instance().numFnReplicas;
222+
i++) {
221223
clientIds_.insert(i);
222224
}
223225
clientIds_.insert(proxyClients_.begin(), proxyClients_.end());

0 commit comments

Comments
 (0)