OpenStack Storage (Swift)
Go to file
Darrell Bishop ec084de189 Optimize the ring builder's _reassign_parts() method.
Another ring builder optimization.  Profiling revealed hotspots in many
calls to min() and list.sort() in _reassign_parts().  That method didn't
get exercised in my last optimization pass because that pass targeted a
rebalance where nothing really moved around.

This time, I wrote a script which created a fresh ring, added a bunch of
devices, did the initial balance, deleted some devices, balanced, and
added some more back in.

Results from homebrew Python 2.7.3 on OS X 10.8.2 Macbook Pro
(bare-metal):

 BEFORE:
 Using part-power = 18, adding 600 devices, removing 100, then adding 300 more...
 NOT Profiling to 'initial_balance.prof'
   wall-time delta: 131.33s
 NOT Profiling to 'deleting_200_rebalance.prof'
   wall-time delta: 25.67s
 NOT Profiling to 'first_rebalance.prof'
   wall-time delta: 62.00s

 AFTER:
 Using part-power = 18, adding 600 devices, removing 100, then adding 300 more...
 NOT Profiling to 'initial_balance.prof'
   wall-time delta: 28.04s
 NOT Profiling to 'deleting_200_rebalance.prof'
   wall-time delta: 9.35s
 NOT Profiling to 'first_rebalance.prof'
   wall-time delta: 16.41s

The driver script I used is available here:
https://gist.github.com/adb982aec6f0709f1273

Change-Id: I17e270acb12b5e4d4bbb1e34d8867dea90678961
2013-02-01 22:33:38 -08:00
bin Allow rebalance to take a seed. 2013-01-29 17:08:20 -08:00
doc Remove tempauth allowed_sync_hosts conf option 2013-01-31 18:30:10 +00:00
etc Remove tempauth allowed_sync_hosts conf option 2013-01-31 18:30:10 +00:00
locale Reverted the pulling out of various middleware: 2012-05-16 21:25:10 +00:00
swift Optimize the ring builder's _reassign_parts() method. 2013-02-01 22:33:38 -08:00
test Merge "Deterministic, repeatable serialization for rings." 2013-02-02 02:23:22 +00:00
tools Fixed version req for netifaces to 0.5 2013-01-10 23:07:02 +00:00
.coveragerc Align tox.ini and fix coverage jobs in jenkins. 2012-06-08 20:05:14 -04:00
.functests Allow dot test runners from any dir 2012-12-07 14:08:49 -08:00
.gitignore Ignore pycscope files 2012-12-04 11:17:38 -05:00
.gitreview Add .gitreview config file for gerrit. 2011-10-24 15:05:49 -04:00
.mailmap authors and changelog update for swift 1.7.6 2013-01-18 08:42:47 -08:00
.probetests Allow dot test runners from any dir 2012-12-07 14:08:49 -08:00
.unittests one dot, 5% increase in coverage 2012-12-17 09:45:46 -08:00
AUTHORS Allow rebalance to take a seed. 2013-01-29 17:08:20 -08:00
CHANGELOG authors and changelog update for swift 1.7.6 2013-01-18 08:42:47 -08:00
CONTRIBUTING.md Add CONTRIBUTING file. 2012-11-21 11:23:15 -08:00
LICENSE Convert LICENSE to use unix style line endings. 2012-12-19 12:48:27 -05:00
MANIFEST.in Add README.md to the tarball. 2012-09-14 20:42:05 -04:00
README.md new more helpful README 2012-09-13 20:59:41 -07:00
babel.cfg add pybabel setup.py commands and initial .pot 2011-01-27 00:01:24 +00:00
setup.cfg Align tox.ini and fix coverage jobs in jenkins. 2012-06-08 20:05:14 -04:00
setup.py Bulk Requests: auto extract archive and bulk delete middleware. 2013-01-24 12:34:56 -08:00
tox.ini Upgrade pep8 to 1.3.3. 2012-11-26 18:15:21 -08:00

README.md

Swift

A distributed object storage system designed to scale from a single machine to thousands of servers. Swift is optimized for multi-tenancy and high concurrency. Swift is ideal for backups, web and mobile content, and any other unstructured data that can grow without bound.

Swift provides a simple, REST-based API fully documented at http://doc.openstack.org/.

Swift was originally developed as the basis for Rackspace's Cloud Files and was open-sourced in 2010 as part of the OpenStack project. It has since grown to include contributions from many companies and has spawned a thriving ecosystem of 3rd party tools. Swift's contributors are listed in the AUTHORS file.

Docs

To build documentation install sphinx (pip install sphinx), run python setup.py build_sphinx, and then browse to /doc/build/html/index.html. These docs are auto-generated after every commit and available online at http://docs.openstack.org/developer/swift/.

For Developers

The best place to get started is the "SAIO - Swift All In One". This document will walk you through setting up a development cluster of Swift in a VM. The SAIO environment is ideal for running small-scale tests against swift and trying out new features and bug fixes.

You can run unit tests with .unittests and functional tests with .functests.

Code Organization

  • bin/: Executable scripts that are the processes run by the deployer
  • doc/: Documentation
  • etc/: Sample config files
  • swift/: Core code
    • account/: account server
    • common/: code shared by different modules
      • middleware/: "standard", officially-supported middleware
      • ring/: code implementing Swift's ring
    • container/: container server
    • obj/: object server
    • proxy/: proxy server
  • test/: Unit and functional tests

Data Flow

Swift is a WSGI application and uses eventlet's WSGI server. After the processes are running, the entry point for new requests is the Application class in swift/proxy/server.py. From there, a controller is chosen, and the request is processed. The proxy may choose to forward the request to a back- end server. For example, the entry point for requests to the object server is the ObjectController class in swift/obj/server.py.

For Deployers

Deployer docs are also available at http://docs.openstack.org/developer/swift/. A good starting point is at http://docs.openstack.org/developer/swift/deployment_guide.html

You can run functional tests against a swift cluster with .functests. These functional tests require /etc/swift/test.conf to run. A sample config file can be found in this source tree in test/sample.conf.

For Client Apps

For client applications, official Python language bindings are provided at http://github.com/openstack/python-swiftclient.

Complete API documentation at http://docs.openstack.org/api/openstack-object-storage/1.0/content/


For more information come hang out in #openstack-swift on freenode.

Thanks,

The Swift Development Team