Distributed Systems Project 2026
Group A12
Difficulty level: I am Death incarnate!
In all source files (namely in the groupIds of the POMs), replace GXX with your group identifier. The group identifier consists of either A or T followed by the group number - always two digits. This change is important for code dependency management, to ensure your code runs using the correct components and not someone else's. ✅
| Number | Name | User | |
|---|---|---|---|
| 110223 | Carolina Quinteiro | https://github.com/carolfquinteiro | mailto:carolinafquinteiro@tecnico.ulisboa.pt |
| 110245 | Beatriz Braga | https://github.com/biiab | mailto:beatrizagbraga@tecnico.ulisboa.pt |
| 110439 | Rodrigo Santos | https://github.com/RodrigojndSantos | mailto:rodrigo.jose.nunes.dos.santos@tecnico.ulisboa.pt |
The overall system is made up of several modules. The definition of messages and services is in Contract.
See the Project Statement for a complete domain and system description.
The Project is configured with Java 17 (which is only compatible with Maven >= 3.8), but if you want to use Java 11 you can too -- just downgrade the version in the POMs.
To confirm that you have them installed and which versions they are, run in the terminal:
javac -version
mvn -versionTo compile and install all modules:
mvn clean installThe sequencer should be launched, receiving its port. Optionally, it can also receive a maximum number of transactions per block (N) and a maximum block lifetime in seconds (T). If not provided, the defaults are N = 4 and T = 5 seconds. If For example:
mvn exec:java -Ddebug=true -Dexec.args="3001 6 6"Each node is simultaneously a server (as it receives and responds to client requests) and a client (as it performs remote invocations to the sequencer). When launched, it receives the port on which it offers its remote service, the organization name (a string without spaces), and the hostname and port of the sequencer it will interact with.
For example, to use port 2001, be a node of the 'OrgA' organization, and connect to the sequencer at localhost:3001:
mvn exec:java -Ddebug=true -Dexec.args="2001 OrgA localhost:3001"The client program receives as arguments the hostname and port of the node known to the client, as well as its respective organization. As explained below, for greater testing flexibility, each command identifies which of the known nodes the respective request should be sent to.
mvn exec:java -Ddebug=true -Dexec.args="localhost:2001:OrgA"Tip
The -Ddebug=true flag is optional and only needed if you wish to see detailed debug output.
Note
Retry Timeout: The time a client waits before retrying another node is defined by the constant NODE_REQUEST_TIMEOUT_SECONDS (at the moment 120 ) and can be modified if needed. At the moment, this relatively high value is intentional, since retry mechanisms are not being thoroughly tested in this delivery (3rd). If the timeout were too small, the client could prematurely assume a node failure and attempt to contact another node, which is not the desired behavior at this stage.