Skip to content

facesthe/remote_file_service

Repository files navigation

remote_file_service

remote file access using RPC

Prerequisites

  • Install rust
  • Install docker or podman, for cross
  • Install cross
    cargo install cross
  • Add compilation targets defined in makefile

Build and run

cargo b # build
cargo r --bin rfs_client # run client
cargo r --bin rfs_server # run server

cargo r --bin rfs_client -- --help # view help
cargo r --bin rfs_server -- --help # view help

make report # build report
make exe # build all targets (x86 windows, x86 linux, aarch64 linux)

Overview

This project contains an RPC-like library (rfs) and server/client executables. The executables (rfs_server, rfs_client) contain the following features:

  • UDP only communications
  • Implementations of various messaging protocols with various levels of fault tolerance
  • At-most-once invocation semantics
  • At-least-once invocation semantics

Implementations

As the project imposes restrictions on what types of libraries can be used, the following protocols/stuff is custom:

  • arbitrary serialization/deserialization
  • request/reply formats
  • proc-macro boilerplate code generation, inspired by tarpc

Known issues

Incorrect dispatch routing

There may be times when dispatch matches the method signature for a method early and routes the payload to the wrong method handler. This can happen if any method signature is a prefix of another, such as:

- SomeInterface::method
- SomeInterface::method_b

If this occurs, check that the signature collision unit test passes.

Full path displayed in filesystem tree

When rfs_server is run on a windows machine and connected to from a unix machine, the file paths in the filesystem tree window are displayed in full.

This is because unix paths do not take into account windows path delimiters \, while windows paths take into account both types / and \.

About

CE4013 Distributed Systems course project

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published