Skip to content

Commit babbc5a

Browse files
Tarunkumar Bandatarunkumar21c@gmail.com
authored andcommitted
Refactoring the ST changes in FullNode
1 parent 81d7c7f commit babbc5a

File tree

13 files changed

+37
-38
lines changed

13 files changed

+37
-38
lines changed

bftengine/src/bcstatetransfer/AsyncStateTransferCRE.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,7 @@ 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;
152-
i < repConfig.numReplicas + repConfig.numRoReplicas + repConfig.numFnReplicas;
153-
i++) {
151+
for (uint16_t i = repConfig.numReplicas; i < repConfig.numReplicas + repConfig.numRoReplicas; i++) {
154152
bftClientConf.ro_replicas.emplace(bft::client::ReplicaId{i});
155153
}
156154
bftClientConf.replicas_master_key_folder_path = std::nullopt;

bftengine/src/bcstatetransfer/BCStateTran.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3971,13 +3971,13 @@ void BCStateTran::computeDigestOfPage(
39713971
if (checkpointNumber > 0) {
39723972
digestGenerator.update(page, pageSize);
39733973
}
3974-
digestGenerator.writeDigest(reinterpret_cast<char *>(&outDigest));
3974+
digestGenerator.writeDigest(outDigest.getForUpdate());
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(reinterpret_cast<char *>(&outDigest));
3980+
digestGenerator.writeDigest(outDigest.getForUpdate());
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, reinterpret_cast<char *>(outDigest));
3999+
computeDigestOfBlockImpl(blockNum, block, blockSize, outDigest->getForUpdate());
40004000
}
40014001

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

bftengine/src/bftengine/FullNodeReplica.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ FullNodeReplica::FullNodeReplica(const ReplicaConfig &config,
4444
concordUtil::Timers &timers,
4545
MetadataStorage *metadataStorage)
4646
: ReplicaForStateTransfer(config, requestsHandler, stateTransfer, msgComm, msgHandlerReg, true, timers),
47-
ro_metrics_{metrics_.RegisterCounter("receivedCheckpointMsgs"),
47+
fn_metrics_{metrics_.RegisterCounter("receivedCheckpointMsgs"),
4848
metrics_.RegisterCounter("sentAskForCheckpointMsgs"),
4949
metrics_.RegisterCounter("receivedInvalidMsgs"),
5050
metrics_.RegisterGauge("lastExecutedSeqNum", lastExecutedSeqNum)},
5151
metadataStorage_{metadataStorage} {
52-
LOG_INFO(GL, "Initialising ReadOnly Replica");
52+
LOG_INFO(GL, "Initialising Full Node Replica");
5353
repsInfo = new ReplicasInfo(config, dynamicCollectorForPartialProofs, dynamicCollectorForExecutionProofs);
5454
msgHandlers_->registerMsgHandler(
5555
MsgCode::Checkpoint, std::bind(&FullNodeReplica::messageHandler<CheckpointMsg>, this, std::placeholders::_1));
@@ -72,7 +72,7 @@ FullNodeReplica::FullNodeReplica(const ReplicaConfig &config,
7272
concord::crypto::KeyFormat::PemFormat}},
7373
*repsInfo);
7474

75-
// Register status handler for Read-Only replica
75+
// Register status handler for Full Node replica
7676
registerStatusHandlers();
7777
bft::communication::StateControl::instance().setGetPeerPubKeyMethod(
7878
[&](uint32_t id) { return SigManager::instance()->getPublicKeyOfVerifier(id); });
@@ -98,18 +98,18 @@ void FullNodeReplica::stop() {
9898
void FullNodeReplica::onTransferringCompleteImp(uint64_t newStateCheckpoint) {
9999
lastExecutedSeqNum = newStateCheckpoint * checkpointWindowSize;
100100

101-
ro_metrics_.last_executed_seq_num_.Get().Set(lastExecutedSeqNum);
101+
fn_metrics_.last_executed_seq_num_.Get().Set(lastExecutedSeqNum);
102102
last_executed_seq_num_ = lastExecutedSeqNum;
103103
}
104104

105105
void FullNodeReplica::onReportAboutInvalidMessage(MessageBase *msg, const char *reason) {
106-
ro_metrics_.received_invalid_msg_++;
106+
fn_metrics_.received_invalid_msg_++;
107107
LOG_WARN(GL,
108108
"Node " << config_.replicaId << " received invalid message from Node " << msg->senderId()
109109
<< " type=" << msg->type() << " reason: " << reason);
110110
}
111111
void FullNodeReplica::sendAskForCheckpointMsg() {
112-
ro_metrics_.sent_ask_for_checkpoint_msg_++;
112+
fn_metrics_.sent_ask_for_checkpoint_msg_++;
113113
LOG_INFO(GL, "sending AskForCheckpointMsg");
114114
auto msg = std::make_unique<AskForCheckpointMsg>(config_.replicaId);
115115
for (auto id : repsInfo->idsOfPeerReplicas()) send(msg.get(), id);
@@ -125,7 +125,7 @@ void FullNodeReplica::onMessage<CheckpointMsg>(std::unique_ptr<CheckpointMsg> ms
125125
if (isCollectingState()) {
126126
return;
127127
}
128-
ro_metrics_.received_checkpoint_msg_++;
128+
fn_metrics_.received_checkpoint_msg_++;
129129
LOG_INFO(GL,
130130
KVLOG(msg->senderId(),
131131
msg->idOfGeneratedReplica(),
@@ -208,20 +208,20 @@ void FullNodeReplica::onMessage<ClientRequestMsg>(std::unique_ptr<ClientRequestM
208208
span.setTag("cid", msg->getCid());
209209
span.setTag("seq_num", reqSeqNum);
210210

211-
// A read only replica can handle only reconfiguration requests. Those requests are signed by the operator and
211+
// A full node replica can handle only reconfiguration requests. Those requests are signed by the operator and
212212
// the validation is done in the reconfiguration engine. Thus, we don't need to check the client validity as in
213213
// the committers
214214

215215
if (reconfig_flag) {
216-
LOG_INFO(GL, "ro replica has received a reconfiguration request");
216+
LOG_INFO(GL, "FN replica has received a reconfiguration request");
217217
executeReadOnlyRequest(span, *(msg.get()));
218218
return;
219219
}
220220
}
221221

222222
void FullNodeReplica::executeReadOnlyRequest(concordUtils::SpanWrapper &parent_span, const ClientRequestMsg &request) {
223223
auto span = concordUtils::startChildSpan("bft_execute_read_only_request", parent_span);
224-
// Read only replica does not know who is the primary, so it always return 0. It is the client responsibility to treat
224+
// full node replica does not know who is the primary, so it always return 0. It is the client responsibility to treat
225225
// the replies accordingly.
226226
ClientReplyMsg reply(0, request.requestSeqNum(), config_.getreplicaId());
227227
const uint16_t clientId = request.clientProxyId();
@@ -247,7 +247,7 @@ void FullNodeReplica::executeReadOnlyRequest(concordUtils::SpanWrapper &parent_s
247247
const uint32_t actualReplyLength = single_request.outActualReplySize;
248248
const uint32_t actualReplicaSpecificInfoLength = single_request.outReplicaSpecificInfoSize;
249249
LOG_DEBUG(GL,
250-
"Executed read only request. " << KVLOG(clientId,
250+
"Executed full node request. " << KVLOG(clientId,
251251
lastExecutedSeqNum,
252252
request.requestLength(),
253253
reply.maxReplyLength(),
@@ -269,7 +269,7 @@ void FullNodeReplica::executeReadOnlyRequest(concordUtils::SpanWrapper &parent_s
269269
}
270270

271271
} else {
272-
LOG_ERROR(GL, "Received error while executing RO request. " << KVLOG(clientId, executionResult));
272+
LOG_ERROR(GL, "Received error while executing FN request. " << KVLOG(clientId, executionResult));
273273
}
274274
ClientReplyMsg replyMsg(
275275
0, request.requestSeqNum(), single_request.outReply, single_request.outActualReplySize, executionResult);
@@ -278,7 +278,7 @@ void FullNodeReplica::executeReadOnlyRequest(concordUtils::SpanWrapper &parent_s
278278

279279
void FullNodeReplica::registerStatusHandlers() {
280280
auto h = concord::diagnostics::StatusHandler(
281-
"replica-sequence-numbers", "Last executed sequence number of the read-only replica", [this]() {
281+
"replica-sequence-numbers", "Last executed sequence number of the full node replica", [this]() {
282282
concordUtils::BuildJson bj;
283283

284284
bj.startJson();

bftengine/src/bftengine/FullNodeReplica.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ class FullNodeReplica : public ReplicaForStateTransfer {
3333

3434
void start() override;
3535
void stop() override;
36-
virtual bool isReadOnly() const override { return true; }
36+
virtual bool isReadOnly() const override { return false; }
37+
virtual bool isFullNode() const override { return true; }
3738

3839
protected:
3940
void sendAskForCheckpointMsg();
@@ -64,15 +65,15 @@ class FullNodeReplica : public ReplicaForStateTransfer {
6465
concordMetrics::CounterHandle sent_ask_for_checkpoint_msg_;
6566
concordMetrics::CounterHandle received_invalid_msg_;
6667
concordMetrics::GaugeHandle last_executed_seq_num_;
67-
} ro_metrics_;
68+
} fn_metrics_;
6869

6970
std::unique_ptr<MetadataStorage> metadataStorage_;
7071
std::atomic<SeqNum> last_executed_seq_num_{0};
7172

7273
private:
7374
// This function serves as an ReplicaStatusHandlers alternative for FullNodeReplica. The reason to use this function
74-
// is that regular and read-only replicas expose different metrics and the status handlers are not interchangeable.
75-
// The read-only replica also hasn't got an implementation for InternalMessages which are used by the
75+
// is that regular and full node replicas expose different metrics and the status handlers are not interchangeable.
76+
// The full node replica also hasn't got an implementation for InternalMessages which are used by the
7677
// ReplicaStatusHandler.
7778
void registerStatusHandlers();
7879
};

bftengine/src/bftengine/ReadOnlyReplica.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class ReadOnlyReplica : public ReplicaForStateTransfer {
3434
void start() override;
3535
void stop() override;
3636
virtual bool isReadOnly() const override { return true; }
37+
virtual bool isFullNode() const override { return false; }
3738

3839
protected:
3940
void sendAskForCheckpointMsg();

bftengine/src/bftengine/ReplicaBase.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ class ReplicaBase {
5050

5151
virtual bool isReadOnly() const = 0;
5252

53+
virtual bool isFullNode() const = 0;
54+
5355
std::shared_ptr<MsgsCommunicator> getMsgsCommunicator() const { return msgsCommunicator_; }
5456
std::shared_ptr<MsgHandlersRegistrator> getMsgHandlersRegistrator() const { return msgHandlers_; }
5557
concordUtil::Timers* getTimers() { return &timers_; }

bftengine/src/bftengine/ReplicaFactory.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ void ReplicaInternal::restartForDebug(uint32_t delayMillisec) {
9696
}
9797
}
9898

99-
if (!replica_->isReadOnly()) {
99+
if (!replica_->isReadOnly() && !replica_->isFullNode()) {
100100
auto replicaImp = dynamic_cast<ReplicaImp *>(replica_.get());
101101

102102
shared_ptr<PersistentStorage> persistentStorage(replicaImp->getPersistentStorage());

bftengine/src/bftengine/ReplicaImp.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,8 @@ class ReplicaImp : public InternalReplicaApi, public ReplicaForStateTransfer {
366366

367367
virtual bool isReadOnly() const override { return false; }
368368

369+
virtual bool isFullNode() const override { return false; }
370+
369371
shared_ptr<PersistentStorage> getPersistentStorage() const { return ps_; }
370372
std::shared_ptr<concord::secretsmanager::ISecretsManagerImpl> getSecretsManager() { return sm_; }
371373

bftengine/src/preprocessor/PreProcessor.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -407,8 +407,7 @@ PreProcessor::PreProcessor(shared_ptr<MsgsCommunicator> &msgsCommunicator,
407407
myReplicaId_(myReplica.getReplicaConfig().replicaId),
408408
maxExternalMsgSize_(myReplica.getReplicaConfig().maxExternalMessageSize),
409409
responseSizeInternalOverhead_{/* for conflict detection BlockId */ sizeof(uint64_t)},
410-
numOfReplicas_(myReplica.getReplicaConfig().numReplicas + myReplica.getReplicaConfig().numRoReplicas +
411-
myReplica.getReplicaConfig().numFnReplicas),
410+
numOfReplicas_(myReplica.getReplicaConfig().numReplicas + myReplica.getReplicaConfig().numRoReplicas),
412411
numOfClientProxies_(myReplica.getReplicaConfig().numOfClientProxies),
413412
clientBatchingEnabled_(myReplica.getReplicaConfig().clientBatchingEnabled),
414413
threadPool_("PreProcessor::threadPool"),

examples/replica/src/SetupReplica.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ bft::communication::ICommunication* SetupReplica::createCommunication(
202202
logging::Logger logger = getLogger();
203203
TestCommConfig testCommConfig(logger);
204204
testCommConfig.GetReplicaConfig(replicaConfig.replicaId, keysFilePrefix, &replicaConfig);
205-
uint16_t numOfReplicas = (uint16_t)(3 * replicaConfig.fVal + 2 * replicaConfig.cVal + 1 +
206-
replicaConfig.numRoReplicas + replicaConfig.numFnReplicas);
205+
uint16_t numOfReplicas =
206+
(uint16_t)(3 * replicaConfig.fVal + 2 * replicaConfig.cVal + 1 + replicaConfig.numRoReplicas);
207207
auto numOfClients =
208208
replicaConfig.numOfClientProxies ? replicaConfig.numOfClientProxies : replicaConfig.numOfExternalClients;
209209
#ifdef USE_COMM_PLAIN_TCP

0 commit comments

Comments
 (0)