From bb311a2f8855780cf1fa066a74357be76821568b Mon Sep 17 00:00:00 2001 From: ILL1A Date: Tue, 10 Jun 2025 22:51:31 +0200 Subject: [PATCH 1/7] Updated README.md --- README.md | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 107 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index cbf09a1..359de5f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,109 @@ -# meteor +# Meteor -**Meteor** is a type of **Network Of Distributed Entities (NODE)**. +**Distributed File System** that is designed to store and retrieve files on any computer in the network without the need for a centralized server. -Network consist of **Nodes** which communicate using **peer-to-peer (P2P) protocol**, maintaining connections with a subset of other nodes. +## Meteor Components + +### Node + +This is the core component of the Meteor. It does all of the work +of storing and retrieving files, as well as maintaining connections with other +nodes in the network. + +Node contains the following components: + +- **Permanent Storage Service**: Service built on top of the custom filesystem **MFS** (Meteor FileSystem). + +- **Network Service**: + Service responsible for maintaining connections with other nodes in the network. + It handles the 3-way handshake, and the requested *over-the-network* file transfers. + +- **Control Service**: The main relay between the *Eclipse* and the + *Commander Service*. It is responsible for handling requests from the user + interface, and passing them to the *Commander Service*. + +- **Commander Service**: This is the coordinator of the node. It is responsible for + redirecting requests from the *Control Service* to the appropriate receiver. + +### Eclipse + +This is the user interface of Meteor. It allows users to interact +with the network, and provides a way to upload and lookup files. + +## Build + +Clone the repository, change the directory to the root of the project and run: + +```bash +make +``` + +The binary will be built in the `build/` directory. + +## Deployment + +There are several easy steps you need to follow to deploy the Meteor Node. + +### 1. Routing Table + +As there is no central server, to deploy the Meteor you need to have a +routing table (referred to as *RT*), which is the simple `.yaml` file +that contains the list of nodes in the network with their addresses. + +--- +Example: + +```yaml +entries: +- pid: 1 + host: 2887516426 # 172.28.1.10 + port: 51000 + domain: peer-hoba.meteor +- pid: 2 + host: 2887516427 # 172.28.1.11 + port: 52000 + domain: peer-gancedo.meteor +``` + +Here `pid` is the UID of the node and `domain` is the domain name of the node. + +--- +**Note:** It is required to specify both the `pid` and `domain` +as the future implementation can be extended to support multiple nodes per domain. + +### 2. Configuration + +Another essential step is to configure the node itself. For that, you need to create +a `.yaml` conf file. + +There are several essential fields in the configuration file (but you can configure a lot more): + +1. As we use statically allocated ports for the *Router* and *Listeners* it is recommended +to specify your own values for those fields. +2. The `routing_table` field should point to the path of your RT file. +3. The `control_listen_addr` field should be set to point to the **Eclipse** interface. + +You can use an example of the [configuration file](deployments/demo/config-1.yaml) as a template. + +### 3. Running the Node + +Having the built **meteor** binary, you can run the node using the following command: + +```bash +# Or just `mnode` if you have it in your PATH +./build/mnode --config /path/to/config.yaml +``` + +**Note:** Run `mnode --help` to see the available options and flags. + +That's it! Your node is now running and ready to accept connections from other nodes in the network! + +Open the address specified in the `control_listen_addr` field in your browser to access the **Eclipse** interface. + +## License + +Meteor is licensed under the [MIT License](LICENSE). + +## Contributing + +If you want to contribute to the Meteor project, feel free to open an issue or a pull request. From 5c060a4f0ccb3fa903f9c21158f25338a008abcb Mon Sep 17 00:00:00 2001 From: ILL1A Date: Tue, 10 Jun 2025 23:00:13 +0200 Subject: [PATCH 2/7] Fixed minor issues --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 359de5f..01b17d9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Meteor -**Distributed File System** that is designed to store and retrieve files on any computer in the network without the need for a centralized server. +A **Distributed File System** that is designed to store and retrieve files on any computer in the network without the need for a centralized server. ## Meteor Components @@ -55,14 +55,14 @@ Example: ```yaml entries: -- pid: 1 - host: 2887516426 # 172.28.1.10 - port: 51000 - domain: peer-hoba.meteor -- pid: 2 - host: 2887516427 # 172.28.1.11 - port: 52000 - domain: peer-gancedo.meteor + - pid: 1 + host: 2887516426 # 172.28.1.10 + port: 51000 + domain: peer-hoba.meteor + - pid: 2 + host: 2887516427 # 172.28.1.11 + port: 52000 + domain: peer-gancedo.meteor ``` Here `pid` is the UID of the node and `domain` is the domain name of the node. @@ -78,10 +78,10 @@ a `.yaml` conf file. There are several essential fields in the configuration file (but you can configure a lot more): -1. As we use statically allocated ports for the *Router* and *Listeners* it is recommended +- As we use statically allocated ports for the *Router* and *Listeners* it is recommended to specify your own values for those fields. -2. The `routing_table` field should point to the path of your RT file. -3. The `control_listen_addr` field should be set to point to the **Eclipse** interface. +- The `routing_table` field should point to the path of your RT file. +- The `control_listen_addr` field should be set to point to the **Eclipse** interface. You can use an example of the [configuration file](deployments/demo/config-1.yaml) as a template. From 8e11c71ad2e8e2287b76178a6bfb867a731cbaa9 Mon Sep 17 00:00:00 2001 From: ILL1A Date: Tue, 10 Jun 2025 23:00:53 +0200 Subject: [PATCH 3/7] Fixed indents in demo/rt.yaml --- deployments/demo/rt.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/deployments/demo/rt.yaml b/deployments/demo/rt.yaml index c49a017..d109ab4 100644 --- a/deployments/demo/rt.yaml +++ b/deployments/demo/rt.yaml @@ -1,9 +1,9 @@ entries: -- pid: 1 - host: 2887516426 # 172.28.1.10 - port: 51000 - domain: peer-hoba.meteor -- pid: 2 - host: 2887516427 # 172.28.1.11 - port: 52000 - domain: peer-gancedo.meteor \ No newline at end of file + - pid: 1 + host: 2887516426 # 172.28.1.10 + port: 51000 + domain: peer-hoba.meteor + - pid: 2 + host: 2887516427 # 172.28.1.11 + port: 52000 + domain: peer-gancedo.meteor \ No newline at end of file From b5bfa7a9aa0bf067183aa31e467a73954e083a79 Mon Sep 17 00:00:00 2001 From: ILL1A Date: Tue, 10 Jun 2025 23:14:04 +0200 Subject: [PATCH 4/7] Fixed node naming --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 01b17d9..d578192 100644 --- a/README.md +++ b/README.md @@ -90,11 +90,10 @@ You can use an example of the [configuration file](deployments/demo/config-1.yam Having the built **meteor** binary, you can run the node using the following command: ```bash -# Or just `mnode` if you have it in your PATH -./build/mnode --config /path/to/config.yaml +./build/node --config /path/to/config.yaml ``` -**Note:** Run `mnode --help` to see the available options and flags. +**Note:** Run `./build/node --help` to see the available options and flags. That's it! Your node is now running and ready to accept connections from other nodes in the network! From 69958af606ec703711c83f350e002834c50ed708 Mon Sep 17 00:00:00 2001 From: Andrii Fylypiuk Date: Tue, 10 Jun 2025 23:26:39 +0200 Subject: [PATCH 5/7] Adds debugging documentation Adds documentation on how to debug the node and MFS utilities. Includes examples on how to print the filesystem tree and show filesystem metadata. --- README.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d578192..9b580a2 100644 --- a/README.md +++ b/README.md @@ -93,12 +93,34 @@ Having the built **meteor** binary, you can run the node using the following com ./build/node --config /path/to/config.yaml ``` -**Note:** Run `./build/node --help` to see the available options and flags. +**Note:** Run `./build/node --help` to see the available commands and flags. That's it! Your node is now running and ready to accept connections from other nodes in the network! Open the address specified in the `control_listen_addr` field in your browser to access the **Eclipse** interface. +## Debug + +### Debugging node + +You can use flag `-l debug` set debug log level for `node` logs. + +### Debugging MFS + +You can use `./build/mfs` utility to debug Meteor FileSystem. + +Run `./build/mfs --help` to see available commands and flags. + +Example usage: + +```bash +# Print filesystem tree with all stored info. +./build/mfs --storage ./default.mfs ls -iT + +# Shows filesystem metadata +./build/mfs --storage ./default.mfs metadata +``` + ## License Meteor is licensed under the [MIT License](LICENSE). From d2810c934fea9e2f88b4d5209a0603f1da79850f Mon Sep 17 00:00:00 2001 From: ILL1A Date: Tue, 10 Jun 2025 23:29:25 +0200 Subject: [PATCH 6/7] Fixed minor typos --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9b580a2..3914f88 100644 --- a/README.md +++ b/README.md @@ -101,9 +101,9 @@ Open the address specified in the `control_listen_addr` field in your browser to ## Debug -### Debugging node +### Debugging Node -You can use flag `-l debug` set debug log level for `node` logs. +You can use flag `-l debug` to set debug log level for `node` logs. ### Debugging MFS From 74ee8f9215e5aecf811f5e319e45c30910529094 Mon Sep 17 00:00:00 2001 From: ILL1A Date: Tue, 10 Jun 2025 23:41:36 +0200 Subject: [PATCH 7/7] Made minor spelling and structure changes --- README.md | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 3914f88..3250136 100644 --- a/README.md +++ b/README.md @@ -12,18 +12,21 @@ nodes in the network. Node contains the following components: -- **Permanent Storage Service**: Service built on top of the custom filesystem **MFS** (Meteor FileSystem). +- **Permanent Storage Service**: + Service built on top of the custom filesystem **MFS** (Meteor FileSystem). - **Network Service**: Service responsible for maintaining connections with other nodes in the network. It handles the 3-way handshake, and the requested *over-the-network* file transfers. -- **Control Service**: The main relay between the *Eclipse* and the - *Commander Service*. It is responsible for handling requests from the user - interface, and passing them to the *Commander Service*. +- **Control Service**: + The main relay between the *Eclipse* and the *Commander Service*, + responsible for handling requests from the user interface, + and passing them to the *Commander Service*. -- **Commander Service**: This is the coordinator of the node. It is responsible for - redirecting requests from the *Control Service* to the appropriate receiver. +- **Commander Service**: + Coordinator of the node, responsible for redirecting requests + from the *Control Service* to the appropriate receiver. ### Eclipse @@ -46,7 +49,7 @@ There are several easy steps you need to follow to deploy the Meteor Node. ### 1. Routing Table -As there is no central server, to deploy the Meteor you need to have a +As there is no centralized server, to deploy the Meteor you need to have a routing table (referred to as *RT*), which is the simple `.yaml` file that contains the list of nodes in the network with their addresses. @@ -81,13 +84,13 @@ There are several essential fields in the configuration file (but you can config - As we use statically allocated ports for the *Router* and *Listeners* it is recommended to specify your own values for those fields. - The `routing_table` field should point to the path of your RT file. -- The `control_listen_addr` field should be set to point to the **Eclipse** interface. +- The address of the **Eclipse** interface should be specified in the `control_listen_addr` field. You can use an example of the [configuration file](deployments/demo/config-1.yaml) as a template. ### 3. Running the Node -Having the built **meteor** binary, you can run the node using the following command: +Having the previously built **meteor** binary, you can run the node using the following command: ```bash ./build/node --config /path/to/config.yaml @@ -97,7 +100,7 @@ Having the built **meteor** binary, you can run the node using the following com That's it! Your node is now running and ready to accept connections from other nodes in the network! -Open the address specified in the `control_listen_addr` field in your browser to access the **Eclipse** interface. +Open the address, specified in the `control_listen_addr` field, in your browser to access the **Eclipse** interface. ## Debug