upgrade of swift 1.4.8 to 1.7.1 problems

Asked by steve A on 2012-10-19

I am creating a multi server installation of swift. This comprises of 1 proxy server + 5 storage nodes.
My use cases are exposure of native swift as well as S3 for multiple users/tenants.
All storage nodes reside on their own isolated network.
I have built out the platform on for Ubuntu 12.04 using the standard repo packages.
I then built out a Folsom openstack platform succesfully on 12.04 using the ubuntu cloud repo additional repo as outlined here - http://docs.openstack.org/trunk/openstack-compute/install/apt/content/assumptions.html

so far so good
I then wanted to attach my exisitng 1.4.8 swift platform to connect and test with Folsom which seemed to work fine.
I then took the step of upgrading the swift nodes to the Folsom release of swift by adding the repo as above, apt-get update and then apt-get upgrade.
I started on the storage nodes 1 at a time, then the proxy server last.

Issues encountered when upgrading the storage nodes - The python-swiftclient was not instaleld as part of the upgrade and as a result serveral object and container services failed to start. an install of python-swiftclient resolved these problems and the sotrage nodes upgraded successfully

so far so good.....

I then did the same process on the proxy server and once the upgrade was completed, i found that the proxy service would fail to start - see error here -

  swift-init proxy-server reload
Signal proxy-server pid: 1760 signal: 1
proxy-server (1760) appears to have stopped
Starting proxy-server...(/etc/swift/proxy-server.conf)
Traceback (most recent call last):
  File "/usr/bin/swift-proxy-server", line 22, in <module>
    run_wsgi(conf_file, 'proxy-server', default_port=8080, **options)
  File "/usr/lib/python2.7/dist-packages/swift/common/wsgi.py", line 138, in run_wsgi
    loadapp('config:%s' % conf_file, global_conf={'log_name': log_name})
  File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 247, in loadapp
    return loadobj(APP, uri, name=name, **kw)
  File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 271, in loadobj
  File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 296, in loadcontext
  File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 320, in _loadconfig
    return loader.get_context(object_type, name, global_conf)
  File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 450, in get_context
  File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 562, in _pipeline_app_context
    for name in pipeline[:-1]]
  File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 408, in get_context
    object_type, name=name)
  File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 587, in find_config_section
LookupError: No section 'swift3' (prefixed by 'filter') found in config /etc/swift/proxy-server.conf

this is my existing proxy-server.conf file

bind_port = 8888
user = swift
log_name = swift_proxy_log
log_level = DEBUG
log_headers = True
# cert_file = /etc/swift/cert.crt
# key_file = /etc/swift/cert.key
workers = 8

pipeline = catch_errors healthcheck cache swift3 authtoken keystone proxy-server

use = egg:swift#proxy
account_autocreate = true
allow_account_management = true
#object_chunk_size = 8192
#client_chunk_size = 8192
max_containers_per_account = 0
node_timeout = 15
client_timeout = 600

#use = egg:swift#swift3

paste.filter_factory = keystone.middleware.swift_auth:filter_factory
operator_roles = admin, swiftoperator, Admin, SwiftOperator

paste.filter_factory = keystone.middleware.auth_token:filter_factory
# Delaying the auth decision is required to support token-less
# usage for anonymous referrers ('.r:*') or for tempurl/formpost
# middleware.
delay_auth_decision = 1
service_protocol = http
service_port = 8888
service_host =
auth_protocol = http
auth_port = 35357
auth_host =
auth_token = kstoken1
admin_token = kstoken1
signing_dir = /var/cache/swift

use = egg:swift#memcache
set log_name = cache
memcache_servers =

use = egg:swift#catch_errors

use = egg:swift#healthcheck
# You can override the default log routing for this filter here:
set log_name = healthcheck
set log_facility = LOG_LOCAL0
set log_level = DEBUG
set log_headers = TRUE

It looks like the configuration to enable S3 access has changed. If you remove the 'swift3' from the pipeline:main section, the proxy service starts as normal

So my question is , how can i re-enable S3 access to swift once I have upgraded to version 1.7.4 ?

any advice or guidance is appreciated

Question information

English Edit question
OpenStack Object Storage (swift) Edit question
No assignee Edit question
Solved by:
Samuel Merritt
Last query:
Last reply:
Best Samuel Merritt (torgomatic) said : #1

The swift3 middleware now lives outside of Swift itself. You can find it on Github here: https://github.com/fujita/swift3

It was pulled out due to an OpenStack policy change regarding third-party APIs, namely that they don't belong in the core projects. Summary here: http://www.openstack.org/blog/2012/05/community-weekly-review-may-4-11/

steve A (dafridgie) said : #2

Thanks for the info and super quick response Samuel!
As a result of your answer, I've found that for Folsom on Ubuntu 12.04 you need to install the middleware as follows:
apt-get install swift-plugin-s3
I've not tested functionality as yet, but the proxy service now starts with swift3 defined without errors

thanks again

Steve A

steve A (dafridgie) said : #3

Thanks Samuel Merritt, that solved my question.

freakalad (freakalad) said : #4