Swift Object Server implementation that enables objects created using the Swift API to be accessed as files on a POSIX filesystem.
Go to file
Prashanth Pai 9e65dd9ceb Introduce fallocate support
fallocate() allows for reserving disk space for a particular inode and
fd. Hence, a client can be sure that he won't see a ENOSPC (eventually
a 507 HTTP response) later during writes. Swift's object server has
had fallocate() support from a long time.

P.S: Older versions of glusterfs (<3.6) did not support fallocate
because FUSE did not support it earlier.
http://review.gluster.org/4969
http://fuse.996288.n3.nabble.com/fallocate-support-in-FUSE-td10668.html

Change-Id: Ida4b16357901707d624f92bf1b2dc8f07da4f1ad
Signed-off-by: Prashanth Pai <ppai@redhat.com>
2015-12-08 11:06:55 +05:30
bin Minor cleanups 2015-11-17 17:55:23 +05:30
doc/markdown Minor cleanups 2015-11-17 17:55:23 +05:30
etc Introduce fallocate support 2015-12-08 11:06:55 +05:30
extras/apache-deploy Fix building of RPMs 2015-07-15 12:50:49 +05:30
swiftonfile Introduce fallocate support 2015-12-08 11:06:55 +05:30
test Introduce fallocate support 2015-12-08 11:06:55 +05:30
.functests Rebase to Swift 2.3.0 2015-07-06 15:22:10 +05:30
.functests-ci changes references to swiftonfile in tests scripts 2014-07-08 11:04:31 -04:00
.gitignore Modify unit tests and func tests 2014-05-08 12:11:46 +05:30
.gitmodules Add OpenStack Swift as a git submodule 2013-09-05 04:23:50 -07:00
.gitreview Update .gitreview for new namespace 2015-10-17 22:40:40 +00:00
.unittests changes references to swiftonfile in tests scripts 2014-07-08 11:04:31 -04:00
makerpm.sh Fix building of RPMs 2015-07-15 12:50:49 +05:30
MANIFEST.in Fix building of RPMs 2015-07-15 12:50:49 +05:30
pkgconfig.py changing references of gluster to swiftonfile 2014-07-08 11:04:31 -04:00
README.md Note limitation of swift geo-replication. 2015-01-30 19:03:08 -07:00
requirements.txt fix requirements.txt 2015-10-01 14:59:16 +05:30
setup.py Minor cleanups 2015-11-17 17:55:23 +05:30
swiftonfile.spec Minor cleanups 2015-11-17 17:55:23 +05:30
test-requirements.txt Rebase to Swift 2.2.1 release 2015-02-02 11:17:59 +05:30
tox.ini Minor cleanups 2015-11-17 17:55:23 +05:30

Build Status

Swift-on-File

Swift-on-File is a Swift Object Server implementation that enables users to access the same data, both as an object and as a file. Data can be stored and retrieved through Swift's REST interface or as files from NAS interfaces including native GlusterFS, GPFS, NFS and CIFS.

Swift-on-File is to be deployed as a Swift storage policy, which provides the advantages of being able to extend an existing Swift cluster and also migrating data to and from policies with different storage backends.

The main difference from the default Swift Object Server is that Swift-on-File stores objects following the same path hierarchy as the object's URL. In contrast, the default Swift implementation stores the object following the mapping given by the Ring, and its final file path is unkown to the user.

For example, an object with URL: https://swift.example.com/v1/acct/cont/obj, would be stored the following way by the two systems:

  • Swift: /mnt/sdb1/2/node/sdb2/objects/981/f79/f566bd022b9285b05e665fd7b843bf79/1401254393.89313.data
  • SoF: /mnt/swiftonfile/acct/cont/obj

Use cases

Swift-on-File can be especially useful in cases where access over multiple protocols is desired. For example, imagine a deployment where video files are uploaded as objects over Swift's REST interface and a legacy video transcoding software access those videos as files.

Along the same lines, data can be ingested over Swift's REST interface and then analytic software like Hadoop can operate directly on the data without having to move the data to a separate location.

Another use case is where users might need to migrate data from an existing file storage systems to a Swift cluster.

Similarly, scientific applications may process file data and then select some or all of the data to publish to outside users through the swift interface.

Limitations and Future plans

Swift-On-File currently works only with Filesystems with extended attributes support. It is also recommended that these Filesystems provide data durability as Swift-On-File should not use Swift's replication mechanisms.

GlusterFS and GPFS are good examples of Filesystems that work well with Swift-on-File. Both provide a posix interface, global namespace, scalability, data replication and support for extended attributes.

Currently, files added over a file interface (e.g., native GlusterFS), do not show up in container listings, still those files would be accessible over Swift's REST interface with a GET request. We are working to provide a solution to this limitation.

Because Swift-On-File relies on the data replication support of the filesystem the Swift Object replicator process does not have any role for containers using the Swift-on-File storage policy. This means that Swift geo replication is not available to objects in in containers using the Swift-on-File storage policy. Multi-site replication for these objects must be provided by the filesystem.

Future plans includes adding support for Filesystems without extended attributes, which should extend the ability to migrate data for legacy storage systems.

Get involved:

To learn more about Swift-On-File, you can watch the presentation given at the Paris OpenStack Summit: Deploying Swift on a File System. The Paris presentation slides can be found here Also see the presentation given at the Atlanta Openstack Summit: Breaking the Mold with Openstack Swift and GlusterFS. The Atlanta presentation slides can be found here.

Join us in contributing to the project. Feel free to file bugs, help with documentation or work directly on the code. You can file bugs or blueprints on launchpad

or find us in the #swiftonfile channel on Freenode.

Guides to get started:

  1. Quick Start Guide with XFS/GlusterFS
  2. Developer Guide