Skip to content

A distributed FUSE filesystem optimized for large-scale software development

License

Notifications You must be signed in to change notification settings

aristanetworks/quantumfs

Repository files navigation

QuantumFS is a distributed, branchable filesystem built on FUSE and heterogeneous
object stores.

See the Documentation directory for more information.


Dev Environment Setup
---------------------

1) Ensure your GOPATH environment variable is correctly pointed such that this
README's folder path is $GOPATH/src/github.com/aristanetworks/quantumfs/README

2) Fetch vendored dependencies.

   Populate the vendor subdirectory with the required dependency versions,
   independent of any present in $GOPATH/src.

	cd $GOPATH/src/github.com/aristanetworks/quantumfs
	make fetch

3) Compile and install the Google CityHash library.
   A version was downloaded by `make fetch` to the vendor/cityhash directory.

	cd vendor/cityhash
	./configure --enable-sse4.2
	make all check CXXFLAGS="-g -O3 -msse4.2"
	sudo make install
	cd ../..

4) Install protobufs:
	sudo yum install protobuf-devel

5) Install some other necessary libraries:
        sudo yum install glibc-static libstdc++-static glibc.i686

6) Follow the instructions in QFSClient/README to install the prerequisites for
building QFSClient.

7) If you want to generate an RPM, you must also install fpm
(https://fpm.readthedocs.io).


Vendoring Dependencies
----------------------

This build environment uses `dep` to manage dependency copies in the vendor
subdirectory.

The documentation for `dep` can be found at: https://github.com/golang/dep

This tool helps us ensure that we have a record of the precise versions of
every go dependency in use by the QuantumFS build environment - especially
when preparing RPMs for releasde.

Any package present in the vendor directory will be used instead of
an equivalent available elsewhere (eg under $GOPATH/src).

Use `make fetch` to refresh the content of the vendor directory based on
the versions recorded in Gopkg.lock. `dep` will be installed if necessary.

Use `make update` to check for updates to existing dependencies, or where
new dependencies are referenced in the code.  This will attempt to resolve
any conflicting version requirements, and record the updated versions in
use in Gopkg.lock.
If there are updates, ensure tests are passing, and then commit the
updated Gopkg.*.


Instructions
------------

* to compile:

	make all

* to generate an RPM:

	make fetch
	make rpm

Limits
------

* Maximum supported file size is 28.4 terabytes
* Maximum size of an atomic DIRECT_IO write is 128KB. Writes larger than 128KB
  are split into a set of 128KB writes by the kernel.

Signals
-------
Sending SIGUSR1 to quantumfsd will cause the read cache to be dropped and further
additions disallowed. This puts QuantumFS into a lower memory mode. This is useful,
for example, when attempting to gracefully upgrade QuantumFS to a newer version
without forcefully terminating existing users.

Sending SIGUSR2 to quantumfsd will result in it printing debug information to its
qlog. This information can be used for testing and debugging purposes.

About

A distributed FUSE filesystem optimized for large-scale software development

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages