This repository is a fork from the official BFT-SMaRt library and contains an implementation for speculatively-ordered read (SOR) requests.
To run any demonstration you first need to configure BFT-SMaRt to define the protocol behavior and the location of each replica.
The servers must be specified in the configuration file (see config/hosts.config):
#server id, address and port (the ids from 0 to n-1 are the service replicas)
0 127.0.0.1 11000 11001
1 127.0.0.1 11010 11011
2 127.0.0.1 11020 11021
3 127.0.0.1 11030 11031
The library can be build using the command ./gradlew installDist in the root directory. The required jar files and default configuration files will be available in the build/install/library directory.
Alternatively, a local deployment with four replicas and one client can be created using the following command ./gradlew localDeploy.
The scripts for the YCSB Benchmark are located in the /runscripts/sor-scripts directory.
First, use either of the previously mentioned installation methods and then start four replicas using the following commands in separate terminal windows:
./startYCSBServerReplica.sh 0
./startYCSBServerReplica.sh 1
./startYCSBServerReplica.sh 2
./startYCSBServerReplica.sh 3
Then start the YCSB Client using the following command:
./ycsbBenchmark.sh <numThreads> <requestType> <workload> <warmup?> <initialize?>
Multiple sequential benchmark runs with increasing number of client threads and varying sizes of the KVStore can be launched using the following command:
./runBenchmark.sh <numReplicas> <requestType> <workload> <result-directory>
The SOR optimization approach will be published in the proceedings of the EDCC 2026. The publication will be link as soon as the proceedings are publicly available.