Retire github mirror, repo moved to opendev
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 257e54f..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,19 +0,0 @@
-*.DS_Store
-*.egg*
-*.mo
-*.pyc
-*.swo
-*.swp
-*.sqlite
-*~
-*.sql
-.pythoscope
-.tox
-.venv
-.testrepository
-.test
-AUTHORS
-build/*
-ChangeLog
-doc/build/*
-dist/
diff --git a/.gitreview b/.gitreview
deleted file mode 100644
index 6f75009..0000000
--- a/.gitreview
+++ /dev/null
@@ -1,4 +0,0 @@
-[gerrit]
-host=review.openstack.org
-port=29418
-project=openstack/turbo-hipster.git
diff --git a/.testr.conf b/.testr.conf
deleted file mode 100644
index b951a05..0000000
--- a/.testr.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-[DEFAULT]
-test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \
- OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \
- OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-60} \
- ${PYTHON:-python} -m subunit.run discover -t ./ ./tests $LISTOPT $IDOPTION
-
-test_id_option=--load-list $IDFILE
-test_list_option=--list
-test_run_concurrency=echo 1
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 68c771a..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,176 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
diff --git a/README.md b/README.md
index d55b45f..aca98a9 100644
--- a/README.md
+++ b/README.md
@@ -1,49 +1,3 @@
-turbo-hipster
-=============
+# This repo has moved to OpenDev
-A set of CI tools.
-
-worker_server.py is a worker server that loads and runs task_plugins.
-
-Each task_plugin is a zuul gearman worker that implements, handles, executes a
-job, uploads/post-processes the logs and sends back the results to zuul.
-
-Plugins
--------
-
-**gate_real_db_upgrade**:
-Runs the db_sync migrations on each dataset available in the datasets subdir.
-
-Installation
-------------
-
-* boot a fresh Ubuntu image
-* setup ssh authentication for your admin team
-* apt-get update; apt-get dist-upgrade
-* adduser th
-* apt-get install vim git python-pip python-setuptools python-keystoneclient virtualenvwrapper python-eventlet python-numpy python-mysqldb python-git python-gitdb python-netaddr python-pkg-resources libxml2-dev libxml2-utils libxslt-dev git-review libxml2-dev libxml2-utils libxslt-dev libmysqlclient-dev pep8 postgresql-server-dev-9.1 python2.7-dev python-coverage python-netaddr
-* pip install -U pip
-* apt-get purge python-pip
-* cd /home/th; git clone http://github.com/stackforge/turbo-hipster
-* apply any patches you need
-* python setup.py install
-* cp turbo_hipster/task_plugins/gate_real_db_upgrade/*.sh /usr/local/lib/python2.7/dist-packages/turbo_hipster/task_plugins/gate_real_db_upgrade/
-* cp -R etc/* /etc/
-* mkdir /var/lib/turbo-hipster
-* chown -R th.th /var/lib/turbo-hipster
-* mkdir /var/log/turbo-hipster
-* chown -R th.th /var/log/turbo-hipster
-* install your chosen MySQL-like database engine (percona, maria, mysql)
-* mysql -u root --password=$1 -e "create user 'nova'@'localhost' identified by 'tester';"
-* mysql -u root --password=$1 -e "create user 'nova'@'172.16.0.2' identified by 'tester';"
-* mysql -u root --password=$1 -e "grant all privileges on *.* to 'nova'@'localhost' with grant option;"
-* mysql -u root --password=$1 -e "grant all privileges on *.* to 'nova'@'172.16.0.2' with grant option;"
-* /etc/rc.local
-* rsync the datasets from the master
-* logrotate -f /etc/logrotate.conf
-* chmod -R ugo+r /var/log/*
-* chmod ugo+rx /var/log/mysql
-* mkdir /var/cache/pip
-* chmod -R ugo+rwx /var/cache/pip
-* touch /var/log/mysql/slow-queries.log
-* /etc/init.d/turbo-hipster start
\ No newline at end of file
+It can now be found at [https://opendev.org/x/turbo-hipster](https://opendev.org/x/turbo-hipster)
diff --git a/datasets/datasets_devstack_131007/131007_devstack_export/config.json b/datasets/datasets_devstack_131007/131007_devstack_export/config.json
deleted file mode 100644
index 82d9786..0000000
--- a/datasets/datasets_devstack_131007/131007_devstack_export/config.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "Innodb_rows_read": {
- "default": 1000
- },
- "XInnodb_rows_changed": {
- "default": 1000
- },
- "database": "nova_dataset_131007_devstack",
- "db_pass": "tester",
- "db_user": "nova",
- "logging_conf": "logging.conf",
- "maximum_migration_times": {
- "default": 60
- },
- "project": "openstack/nova",
- "seed_data": "nova.sql",
- "type": "mysql"
-}
\ No newline at end of file
diff --git a/datasets/datasets_devstack_131007/131007_devstack_export/input.json b/datasets/datasets_devstack_131007/131007_devstack_export/input.json
deleted file mode 100644
index fe7b59e..0000000
--- a/datasets/datasets_devstack_131007/131007_devstack_export/input.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "project": "openstack/nova",
- "type": "mysql",
- "db_user": "nova",
- "db_pass": "tester",
- "database": "nova_dataset_131007_devstack",
- "seed_data": "nova.sql",
- "logging_conf": "logging.conf",
- "maximum_migration_times": {
- "default": 60
- },
- "XInnodb_rows_changed": {
- "default": 1000
- },
- "Innodb_rows_read": {
- "default": 1000
- }
-}
diff --git a/datasets/datasets_trivial_500/nova_trivial_500/config.json b/datasets/datasets_trivial_500/nova_trivial_500/config.json
deleted file mode 100644
index 175f6f1..0000000
--- a/datasets/datasets_trivial_500/nova_trivial_500/config.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "Innodb_rows_read": {
- "default": 1000
- },
- "XInnodb_rows_changed": {
- "default": 1000
- },
- "database": "nova_dataset_trivial_500",
- "db_pass": "tester",
- "db_user": "nova",
- "logging_conf": "logging.conf",
- "maximum_migration_times": {
- "151->152": 84.0,
- "152->151": 103.0,
- "default": 60
- },
- "project": "openstack/nova",
- "seed_data": "nova_trivial_500.sql",
- "type": "mysql"
-}
\ No newline at end of file
diff --git a/datasets/datasets_trivial_500/nova_trivial_500/input.json b/datasets/datasets_trivial_500/nova_trivial_500/input.json
deleted file mode 100644
index d71a8e0..0000000
--- a/datasets/datasets_trivial_500/nova_trivial_500/input.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "project": "openstack/nova",
- "type": "mysql",
- "db_user": "nova",
- "db_pass": "tester",
- "database": "nova_dataset_trivial_500",
- "seed_data": "nova_trivial_500.sql",
- "logging_conf": "logging.conf",
- "maximum_migration_times": {
- "default": 60
- },
- "XInnodb_rows_changed": {
- "default": 1000
- },
- "Innodb_rows_read": {
- "default": 1000
- }
-}
-
diff --git a/datasets/datasets_trivial_6000/nova_trivial_6000/config.json b/datasets/datasets_trivial_6000/nova_trivial_6000/config.json
deleted file mode 100644
index 6d1ccb6..0000000
--- a/datasets/datasets_trivial_6000/nova_trivial_6000/config.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "Innodb_rows_read": {
- "default": 1000
- },
- "XInnodb_rows_changed": {
- "default": 1000
- },
- "database": "nova_dataset_trivial_6000",
- "db_pass": "tester",
- "db_user": "nova",
- "logging_conf": "logging.conf",
- "maximum_migration_times": {
- "151->152": 159.0,
- "152->151": 195.0,
- "184->185": 66.0,
- "186->185": 144.0,
- "default": 60
- },
- "project": "openstack/nova",
- "seed_data": "nova_trivial_6000.sql",
- "type": "mysql"
-}
\ No newline at end of file
diff --git a/datasets/datasets_trivial_6000/nova_trivial_6000/input.json b/datasets/datasets_trivial_6000/nova_trivial_6000/input.json
deleted file mode 100644
index e4a1ebd..0000000
--- a/datasets/datasets_trivial_6000/nova_trivial_6000/input.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "project": "openstack/nova",
- "type": "mysql",
- "db_user": "nova",
- "db_pass": "tester",
- "database": "nova_dataset_trivial_6000",
- "seed_data": "nova_trivial_6000.sql",
- "logging_conf": "logging.conf",
- "maximum_migration_times": {
- "default": 60
- },
- "XInnodb_rows_changed": {
- "default": 1000
- },
- "Innodb_rows_read": {
- "default": 1000
- }
-}
-
diff --git a/datasets/datasets_user_001/user_001/config.json b/datasets/datasets_user_001/user_001/config.json
deleted file mode 100644
index 97f1ddb..0000000
--- a/datasets/datasets_user_001/user_001/config.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "Innodb_rows_read": {
- "148->149": 110000,
- "151->152": 3470000,
- "159->160": 200000,
- "160->161": 390000,
- "202->203": 260000,
- "205->206": 140000,
- "215->216": 930000,
- "default": 100000
- },
- "XInnodb_rows_changed": {
- "148->149": 110000,
- "151->152": 3200000,
- "184->185": 140000,
- "193->194": 150000,
- "202->203": 520000,
- "203->204": 260000,
- "205->206": 190000,
- "215->216": 260000,
- "229->230": 140000,
- "default": 100000
- },
- "database": "nova_datasets_user_001",
- "db_pass": "tester",
- "db_user": "nova",
- "logging_conf": "logging.conf",
- "maximum_migration_times": {
- "134->135": 200.0,
- "135->134": 97.0,
- "137->138": 85.0,
- "138->137": 100.0,
- "148->149": 135.0,
- "149->148": 158.0,
- "151->152": 333.0,
- "152->151": 330.0,
- "158->159": 136.0,
- "159->158": 168.0,
- "186->185": 569.0,
- "204->205": 97.0,
- "205->204": 98.0,
- "205->206": 116.0,
- "206->205": 106.0,
- "215->216": 137.0,
- "229->230": 122.0,
- "230->229": 84.0,
- "230->231": 120,
- "231->230": 120,
- "_138_bugs": [
- 1263835
- ],
- "_149_bugs": [
- 1263836
- ],
- "_205_bugs": [
- 1263868
- ],
- "default": 60
- },
- "project": "openstack/nova",
- "seed_data": "nova_user_001.sql",
- "type": "mysql"
-}
\ No newline at end of file
diff --git a/datasets/datasets_user_001/user_001/input.json b/datasets/datasets_user_001/user_001/input.json
deleted file mode 100644
index 1e8366d..0000000
--- a/datasets/datasets_user_001/user_001/input.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "project": "openstack/nova",
- "type": "mysql",
- "db_user": "nova",
- "db_pass": "tester",
- "database": "nova_datasets_user_001",
- "seed_data": "nova_user_001.sql",
- "logging_conf": "logging.conf",
- "maximum_migration_times": {
- "default": 60,
- "_138_bugs": [1263835],
- "_149_bugs": [1263836],
- "_205_bugs": [1263868]
- },
- "XInnodb_rows_changed": {
- "default": 100000
- },
- "Innodb_rows_read": {
- "default": 100000
- }
-}
-
diff --git a/datasets/datasets_user_002/user_002/config.json b/datasets/datasets_user_002/user_002/config.json
deleted file mode 100644
index e0d6e9a..0000000
--- a/datasets/datasets_user_002/user_002/config.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "Innodb_rows_read": {
- "default": 100000
- },
- "XInnodb_rows_changed": {
- "default": 100000
- },
- "database": "nova_dataset_user_002",
- "db_pass": "tester",
- "db_user": "nova",
- "logging_conf": "logging.conf",
- "maximum_migration_times": {
- "default": 60
- },
- "project": "openstack/nova",
- "seed_data": "nova_user_002.sql",
- "type": "mysql"
-}
\ No newline at end of file
diff --git a/datasets/datasets_user_002/user_002/input.json b/datasets/datasets_user_002/user_002/input.json
deleted file mode 100644
index 8a1b8a0..0000000
--- a/datasets/datasets_user_002/user_002/input.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "project": "openstack/nova",
- "type": "mysql",
- "db_user": "nova",
- "db_pass": "tester",
- "database": "nova_dataset_user_002",
- "seed_data": "nova_user_002.sql",
- "logging_conf": "logging.conf",
- "maximum_migration_times": {
- "default": 60
- },
- "XInnodb_rows_changed": {
- "default": 100000
- },
- "Innodb_rows_read": {
- "default": 100000
- }
-}
-
diff --git a/doc/Makefile b/doc/Makefile
deleted file mode 100644
index 5dfa362..0000000
--- a/doc/Makefile
+++ /dev/null
@@ -1,153 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS =
-SPHINXBUILD = sphinx-build
-PAPER =
-BUILDDIR = build
-
-# Internal variables.
-PAPEROPT_a4 = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
-
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
-
-help:
- @echo "Please use \`make <target>' where <target> is one of"
- @echo " html to make standalone HTML files"
- @echo " dirhtml to make HTML files named index.html in directories"
- @echo " singlehtml to make a single large HTML file"
- @echo " pickle to make pickle files"
- @echo " json to make JSON files"
- @echo " htmlhelp to make HTML files and a HTML help project"
- @echo " qthelp to make HTML files and a qthelp project"
- @echo " devhelp to make HTML files and a Devhelp project"
- @echo " epub to make an epub"
- @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
- @echo " latexpdf to make LaTeX files and run them through pdflatex"
- @echo " text to make text files"
- @echo " man to make manual pages"
- @echo " texinfo to make Texinfo files"
- @echo " info to make Texinfo files and run them through makeinfo"
- @echo " gettext to make PO message catalogs"
- @echo " changes to make an overview of all changed/added/deprecated items"
- @echo " linkcheck to check all external links for integrity"
- @echo " doctest to run all doctests embedded in the documentation (if enabled)"
-
-clean:
- -rm -rf $(BUILDDIR)/*
-
-html:
- $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-dirhtml:
- $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-singlehtml:
- $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
- @echo
- @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-pickle:
- $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
- @echo
- @echo "Build finished; now you can process the pickle files."
-
-json:
- $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
- @echo
- @echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
- $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
- @echo
- @echo "Build finished; now you can run HTML Help Workshop with the" \
- ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
- $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
- @echo
- @echo "Build finished; now you can run "qcollectiongenerator" with the" \
- ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
- @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/turbo-hipster.qhcp"
- @echo "To view the help file:"
- @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/turbo-hipster.qhc"
-
-devhelp:
- $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
- @echo
- @echo "Build finished."
- @echo "To view the help file:"
- @echo "# mkdir -p $$HOME/.local/share/devhelp/turbo-hipster"
- @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/turbo-hipster"
- @echo "# devhelp"
-
-epub:
- $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
- @echo
- @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-latex:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo
- @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
- @echo "Run \`make' in that directory to run these through (pdf)latex" \
- "(use \`make latexpdf' here to do that automatically)."
-
-latexpdf:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo "Running LaTeX files through pdflatex..."
- $(MAKE) -C $(BUILDDIR)/latex all-pdf
- @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-text:
- $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
- @echo
- @echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-man:
- $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
- @echo
- @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-texinfo:
- $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
- @echo
- @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
- @echo "Run \`make' in that directory to run these through makeinfo" \
- "(use \`make info' here to do that automatically)."
-
-info:
- $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
- @echo "Running Texinfo files through makeinfo..."
- make -C $(BUILDDIR)/texinfo info
- @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-gettext:
- $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
- @echo
- @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-changes:
- $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
- @echo
- @echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
- $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
- @echo
- @echo "Link check complete; look for any errors in the above output " \
- "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
- $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
- @echo "Testing of doctests in the sources finished, look at the " \
- "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/doc/images/THTestResult.png b/doc/images/THTestResult.png
deleted file mode 100644
index 846ec3e..0000000
--- a/doc/images/THTestResult.png
+++ /dev/null
Binary files differ
diff --git a/doc/source/conf.py b/doc/source/conf.py
deleted file mode 100644
index 7c3d8e3..0000000
--- a/doc/source/conf.py
+++ /dev/null
@@ -1,242 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# turbo-hipster documentation build configuration file, created by
-# sphinx-quickstart on Thu Sep 5 10:30:13 2013.
-#
-# This file is execfile()d with the current directory set to its containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-import sys, os
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.insert(0, os.path.abspath('.'))
-
-# -- General configuration -----------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be extensions
-# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ['sphinxcontrib.seqdiag']
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix of source filenames.
-source_suffix = '.rst'
-
-# The encoding of source files.
-#source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = 'index'
-
-# General information about the project.
-project = u'turbo-hipster'
-copyright = u'2013, Joshua Hesketh'
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-version = '0.1'
-# The full version, including alpha/beta/rc tags.
-release = '0.1'
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = []
-
-# The reST default role (used for this markup: `text`) to use for all documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
-
-
-# -- Options for HTML output ---------------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-html_theme = 'default'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-#html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
-
-# The name for this set of Sphinx documents. If None, it defaults to
-# "<project> v<release> documentation".
-#html_title = None
-
-# A shorter title for the navigation bar. Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-#html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-# html_static_path = ['_static']
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#html_additional_pages = {}
-
-# If false, no module index is generated.
-#html_domain_indices = True
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it. The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'turbo-hipsterdoc'
-
-
-# -- Options for LaTeX output --------------------------------------------------
-
-latex_elements = {
-# The paper size ('letterpaper' or 'a4paper').
-#'papersize': 'letterpaper',
-
-# The font size ('10pt', '11pt' or '12pt').
-#'pointsize': '10pt',
-
-# Additional stuff for the LaTeX preamble.
-#'preamble': '',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass [howto/manual]).
-latex_documents = [
- ('index', 'turbo-hipster.tex', u'turbo-hipster Documentation',
- u'Joshua Hesketh', 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# If true, show page references after internal links.
-#latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-#latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_domain_indices = True
-
-
-# -- Options for manual page output --------------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
- ('index', 'turbo-hipster', u'turbo-hipster Documentation',
- [u'Joshua Hesketh'], 1)
-]
-
-# If true, show URL addresses after external links.
-#man_show_urls = False
-
-
-# -- Options for Texinfo output ------------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-# dir menu entry, description, category)
-texinfo_documents = [
- ('index', 'turbo-hipster', u'turbo-hipster Documentation',
- u'Joshua Hesketh', 'turbo-hipster', 'One line description of project.',
- 'Miscellaneous'),
-]
-
-# Documents to append as an appendix to all manuals.
-#texinfo_appendices = []
-
-# If false, no module index is generated.
-#texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-#texinfo_show_urls = 'footnote'
diff --git a/doc/source/index.rst b/doc/source/index.rst
deleted file mode 100644
index dfd276a..0000000
--- a/doc/source/index.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-Welcome to turbo-hipster's documentation!
-=========================================
-
-Contents:
-
-.. toctree::
- :maxdepth: 2
-
- intro
- installation
- running
-
-
-Indices and tables
-==================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
-
diff --git a/doc/source/installation.rst b/doc/source/installation.rst
deleted file mode 100644
index d77337e..0000000
--- a/doc/source/installation.rst
+++ /dev/null
@@ -1,129 +0,0 @@
-:title: Installation
-
-.. _gearman: http://gearman.org/
-.. _zuul: http://docs.openstack.org/infra/zuul/
-
-Installation
-============
-
-Turbo-hipster is installed directly into your Python ``site-packages``
-directory, and is then run as a service. It is managed using a configuration
-file, which is in yaml format.
-
-Installing turbo-hipster
-------------------------
-
-1. Turbo-hipster can be installed directly to your Python ``site-packages``
-directory:
-
- $ sudo python setup.py install
-
-2. Copy the configuration file to a convenient location. By default,
-turbo-hipster will look in ``/etc/turbo-hipster/config.yaml``:
-
- $ cp -R etc/turbo-hipster /etc/
-
-3. The turbo-hipster configuration file is in yaml format. Open the
-``config.yaml`` configuration file in your preferred editor and modify it
-for your environment::
-
- **zuul_server**
- A dictionary containing details about how to communicate
- with zuul
- **git_url**
- The publicly accessible protocol and URI from where
- to clone projects and zuul_ references from. For
- example::
- http://review.openstack.org/p/
- or::
- git://review.example.org
- **gearman_host**
- The host of gearman_. zuul talks to its workers via
- the gearman protocol and while it comes with a built-
- in gearman server you can use a separate one.
- **gearman_port**
- The port that gearman listens on.
- **debug_log**
- A path to the debug log. Turbo-hipster will attempt to create
- the file but must have write permissions.
- **jobs_working_dir**
- Each job will likely need to write out log and debug
- information. This defines where turbo-hipster will do that.
- **git_working_dir**
- turbo-hipster needs to take a copy of the git tree of a
- project to work from. This is the path it'll clone into and
- work from (if needed).
- **pip_download_cache**
- Some of turbo-hipsters task plugins download requirements
- for projects. This is the cache directory used by pip.
- **jobs**
- A list of registered jobs.
- **name**
- The name of the job to register. This is the function name
- for zuul's job. eg build:some_job.
- **plugin** (optional)
- The plugin to use. Defaults to shell_task.
- Any other variables the plugin may require for the job.
- **plugins** (depreciated)
- This is depreciated in favour of jobs (above).
- A list of enabled plugins and their settings in a dictionary.
- The only required parameters are *name*, which should be the
- same as the folder containing the plugin module, and
- *function*, which is the function registered with zuul.
- Any other parameters are specified by the plugin themselves
- as required.
- **publish_logs**
- Log results from plugins can be published using multiple
- methods. Currently only a local copy is fully implemented.
- **type**
- The type of protocol to copy the log to. eg 'local'
- **path**
- A type specific parameter defining the local location
- destination.
- **prepend_url**
- What to prepend to the path when sending the result
- URL back to zuul. This can be useful as you may want
- to use a script to authenticate against a swift
- account or to use *laughing_spice* to format the logs
- etc.
- **conf_d**
- A path of a directory containing pieces of json confiuration.
- This is helpful when you want different plugins to add extra
- or even modify the default configuration.
-
-4. Create a turbo-hipster user:
-
- $ useradd turbo-hipster
-
-5. Create the directories listed in the configuration file, and give the
-``turbo-hipster`` user write access:
-
- $ mkdir -p /var/log/turbo-hipster/
- $ chown turbo-hipster:turbo-hipster /var/log/turbo-hipster/
-
- $ mkdir -p /var/lib/turbo-hipster/jobs
- $ chown turbo-hipster:turbo-hipster /var/lib/turbo-hipster/jobs
-
- $ mkdir -p /var/lib/turbo-hipster/git
- $ chown turbo-hipster:turbo-hipster /var/lib/turbo-hipster/git
-
- $ mkdir -p /var/cache/pip
- $ chown turbo-hipster:turbo-hipster /var/cache/pip
-
-6. Open the MySQL log rotation configuration file in your preferred text
-editor, and edit it to ensure it is writable by ``other``:
-
- $ vim /etc/logrotate.d/mysql-server
- # edit create 640 to 644.
-
-.. note::
- The turbo-hipster source code is also available for download from
- the `turbo-hipster github page <https://github.com/rcbau/turbo-hipster/>`_
-
- $ git clone https://github.com/rcbau/turbo-hipster
-
-.. note::
- Debug logging must be configured for turbo-hipster, as it uses the Python
- logging framework to capture log messages from the task plugin code.
- To configure debug logging, set the ``debug_log`` configuration
- setting in the ``config.yaml`` configuration file.
diff --git a/doc/source/intro.rst b/doc/source/intro.rst
deleted file mode 100644
index e8f1c31..0000000
--- a/doc/source/intro.rst
+++ /dev/null
@@ -1,95 +0,0 @@
-Turbo-hipster
-=============
-
-Turbo-hipster works with the existing OpenStack code review system to
-implement testing-related plugins. Historically, whenever code has been
-written for Nova it has been tested against trivial datasets rather than
-real data. This can mean that when users run the updated code on their
-databases they can run into issues that were not found during testing. A
-variety of real-world databases have been collected, anonymized, and added
-to the database migration plugin used by turbo-hipster. Turbo-hipster is
-integrated into the existing code review system, and automatically runs
-tests against these larger test datasets. Turbo-hipster is specifically
-designed to flag issues where changes to the database schema may not work
-due to outliers in real datasets, and to identify situations where a
-migration may take an unreasonable amount of time against a large database.
-
-.. note::
- Database anonymity is important, and can be very time consuming.
- The databases used by turbo-hipster to test against are real-world databases
- that have been anonymized with a database anonymization tool called Fuzzy
- Happiness. Fuzzy Happiness takes markup in the sqlalchemy models file and
- uses that to decide what values to anonymize, and how to do so. This feature
- is still in development, and until it is complete turbo-hipster will not
- report back to Zuul automatically.
-
-Additionally, turbo-hipster has been designed to be extensible, so it is
-possible to write other plugins to expand its capabilities.
-
-Turbo-hipster and Zuul
-----------------------
-
-Turbo-hipster is a Gearman worker. Zuul provides arguments that turbo-
-hipster uses to check out the patch, perform the database testing, and then
-report back with success or failure. Zuul allows you to specify which jobs
-should be run against which projects. You can create a rule in Zuul for it
-to select jobs that require testing against a database. Turbo-hipster will
-then register as being able to complete that type of job. Gearman handles
-the connection between Zuul and turbo-hipster, recognizing when a job
-matches the rule, and passing it to turbo-hipster for testing. When turbo-
-hipster receives the patchset for the job, it creates a virtual environment
-to test it. The result of the test is sent back to Gearman as a json string,
-which contains links to compiled logfiles.
-
-The simplified workflow for turbo-hipster:
-
-1. Registers as a worker against Zuul's Gearman server
-2. Receives jobs from Zuul as they arrive
-3. Checks out the patchset
-4. Sets up a new virtual environment for testing
-5. Loads a representative subset of the available datasets
-6. Runs the migration against each dataset, and checks the result
-7. Reports the results to Zuul, using the Gearman protocol
-
-Typical workflow diagram
-------------------------
-
-.. seqdiag::
-
- seqdiag admin {
- # define order of elements
- # seqdiag sorts elements by order they appear
- humanoid; gerrit; zuul; gearman; turbo-hipster1; turbo-hipster2;
-
- humanoid -> gerrit [leftnote = "Patchset uploaded"];
-
- zuul -> gearman [label = "register-server"];
- zuul <-- gearman;
-
- turbo-hipster1 -> gearman [label = "add server"];
- turbo-hipster1 <-- gearman;
- turbo-hipster1 -> gearman [label = "register functions"];
- turbo-hipster1 <-- gearman;
-
- turbo-hipster2 -> gearman [label = "add server"];
- turbo-hipster2 <-- gearman;
- turbo-hipster2 -> gearman [label = "register functions"];
- turbo-hipster2 <-- gearman;
-
-
- gerrit -> zuul [label = "patchset-uploaded"];
- zuul -> gearman [label = "request worker"];
- zuul -> gearman [label = "request worker"];
- gearman -> turbo-hipster1 [label = "run function"];
- gearman -> turbo-hipster2 [label = "run function"];
- gearman <- turbo-hipster1 [label = "return result"];
- gearman <- turbo-hipster2 [label = "return result"];
- zuul <- gearman [label = "return result"];
- zuul <- gearman [label = "return result"];
- gerrit <- zuul [label = "voting results"];
-
- humanoid <-- gerrit;
-
- }
-
-
diff --git a/doc/source/running.rst b/doc/source/running.rst
deleted file mode 100644
index 7613662..0000000
--- a/doc/source/running.rst
+++ /dev/null
@@ -1,157 +0,0 @@
-:title: Running
-
-
-Running
-=======
-
-Starting turbo-hipster
-----------------------
-
-Turbo-hipster can be run from the command line::
-
- $ turbo-hipster
-
-This option allows you to pass parameters to turbo-hipster. Use the --help
-parameter to see a full list.
-
-+-------+--------------+--------------------------------------------------------+
-| Short | Long | Description |
-+=======+==============+========================================================+
-| -c | --config | Print the path to the configuration file and exit |
-+-------+--------------+--------------------------------------------------------+
-| -b | --background | Run as a daemon in the background |
-+-------+--------------+--------------------------------------------------------+
-| -p | --pidfile | Specify the PID file to lock while running as a daemon |
-+-------+--------------+--------------------------------------------------------+
-
-Alternatively, you can start turbo-hipster as a service.
-
-1. Copy the turbo-hipster init.d script to /etc/init.d/:
-
- $ sudo cp etc/init.d/turbo-hipster /etc/init.d/
-
-2. Reload the script with the default configuration:
-
- $ sudo update-rc.d turbo-hipster defaults
-
-3. Start the service:
-
- $ sudo service turbo-hipster start
-
-Plugins
-=======
-
-Plugins can be used to extend turbo-hipster's capabilities.
-
-.. note::
- Currently, the only available plugin for turbo-hipster is the
- database migration plugin, ``real_db_upgrade``, which tests code
- against a variety of real-world databases.
-
-Installing plugins
-------------------
-
-Turbo-hipster plugins are responsible for handling the jobs that are passed
-to it. They must successfully build reports and publish them according to
-their configuration. They must also be able to communicate test results back
-to Zuul using Gearman.
-
-Plugins must take a standard format in order to be able to work correctly
-with turbo-hipster. They must contain a ``task.py`` file with a ``Runner``
-class.
-
-Once you have created a turbo-hipster plugin, you need to configure it in
-the ``config.yaml`` configuration file.
-
-.. FIXME More config information required here
-
-Plugin: Database migration with ``real_db_upgrade``
---------------------------------------------------------
-
-The database migration plugin, ``real_db_upgrade``, is used to test
-datasets against real-world, anonymized, databases.
-
-Migrating a database
---------------------
-
-In order to use turbo-hipster with the ``real_db_upgrade`` plugin, you
-need to set up the databases to test against, and point to the plugin in
-turbo-hipster's configuration file.
-
-1. Create a directory for the datasets:
-
- $ mkdir -p /var/lib/turbo-hipster/datasets
-
-2. Copy the json dataset to the directory you created:
-
- $ cp /my/dataset.json /var/lib/turbo-hipster/datasets/
-
-3. Open the ``/etc/turbo-hipster/config.yaml`` file in your preferred
-editor, locate the plugins section, and add this line::
-
- **plugins**
- real_db_upgrade
-
-Testing with turbo-hipster
-==========================
-
-When turbo-hipster completes a test, it sends the result of the test back to
-Gearman. These results contain a link to a compiled log file for the test.
-
-If the test fails, or takes too long to complete, turbo-hipster will add a
-review to your patchset that looks like this:
-
-.. image:: ../images/THTestResult.png
-
-Reading test reports
---------------------
-
-An example of a standard log file:
-http://thw01.rcbops.com/results/54/54202/5/check/gate-real-db-upgrade_nova_mysql_devstack_150/ddd6d53/20130910_devstack_applied_to_150.log
-
-An example of the same logfile, using the javascript logviewer:
-http://thw01.rcbops.com/logviewer/?q=/results/54/54202/5/check/gate-real-db-upgrade_nova_mysql_devstack_150/ddd6d53/20130910_devstack_applied_to_150.log
-
-Test failure codes
-------------------
-
-This section gives a list of failure codes, including some steps you can
-take for troubleshooting errors:
-
- FAILURE - Did not find the end of a migration after a start
-
-If you look at the log you should find that a migration began but never
-finished. Hopefully there'll be a traceroute for you to follow through to
-get some hints about why it failed.
-
- WARNING - Migration %s took too long
-
-In this case your migration took a long time to run against one of the test
-datasets. You should reconsider what operations your migration is performing
-and see if there are any optimizations you can make, or if it is really
-necessary. If there is no way to speed up your migration you can email us at
-rcbau@rcbops.com for an exception.
-
- FAILURE - Final schema version does not match expectation
-
-Somewhere along the line the migrations stopped and did not reach the
-expected version. Our datasets start at previous releases and have to
-upgrade all the way through to the most current release. If you see this,
-inspect the log for traceroutes or other hints about the failure.
-
- FAILURE - Could not setup seed database.
- FAILURE - Could not find seed database.
-
-These errors are internal errors. If you see either of these, contact us at
-rcbau@rcbops.com to let us know so we can fix and rerun the tests for you.
-
- FAILURE - Could not import required module.
-
-This error probably shouldn't happen as Jenkins should catch it in the unit
-tests before Turbo-Hipster launches. If you see this, please contact us at
-rcbau@rcbops.com and let us know.
-
-If you receive an error that you think is a false positive, leave a comment
-on the review with the sole contents of "recheck migrations".
-
-If you have any questions/problems please contact us at rcbau@rcbops.com.
diff --git a/etc/init.d/turbo-hipster b/etc/init.d/turbo-hipster
deleted file mode 100755
index 4cc16d1..0000000
--- a/etc/init.d/turbo-hipster
+++ /dev/null
@@ -1,158 +0,0 @@
-#! /bin/sh
-### BEGIN INIT INFO
-# Provides: turbo-hipster-worker-server
-# Required-Start: $remote_fs $syslog
-# Required-Stop: $remote_fs $syslog
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: turbo-hipster CI Worker
-# Description: Service to run extra CI tests
-### END INIT INFO
-
-# Do NOT "set -e"
-
-# PATH should only include /usr/* if it runs after the mountnfs.sh script
-PATH=/sbin:/usr/sbin:/bin:/usr/bin
-DESC="turbo-hipster CI Worker Server"
-NAME=turbo-hipster-worker-server
-DAEMON=/usr/local/bin/turbo-hipster
-PIDFILE=/var/run/$NAME/$NAME.pid
-DAEMON_ARGS="--background -c /etc/turbo-hipster/config.json -p $PIDFILE"
-SCRIPTNAME=/etc/init.d/$NAME
-USER=th
-
-# Exit if the package is not installed
-[ -x "$DAEMON" ] || exit 0
-
-# Read configuration variable file if it is present
-[ -r /etc/default/$NAME ] && . /etc/default/$NAME
-
-# Load the VERBOSE setting and other rcS variables
-. /lib/init/vars.sh
-
-# Define LSB log_* functions.
-# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
-. /lib/lsb/init-functions
-
-#
-# Function that starts the daemon/service
-#
-do_start()
-{
-# Return
-# 0 if daemon has been started
-# 1 if daemon was already running
-# 2 if daemon could not be started
-
-mkdir -p /var/run/$NAME
-chown $USER /var/run/$NAME
-start-stop-daemon --start --quiet --pidfile $PIDFILE -c $USER --exec $DAEMON --test > /dev/null \
-|| return 1
-start-stop-daemon --start --quiet --pidfile $PIDFILE -c $USER --exec $DAEMON -- \
-$DAEMON_ARGS \
-|| return 2
-# Add code here, if necessary, that waits for the process to be ready
-# to handle requests from services started subsequently which depend
-# on this one. As a last resort, sleep for some time.
-}
-
-#
-# Function that stops the daemon/service
-#
-do_stop()
-{
-# Return
-# 0 if daemon has been stopped
-# 1 if daemon was already stopped
-# 2 if daemon could not be stopped
-# other if a failure occurred
-start-stop-daemon --stop --signal 9 --pidfile $PIDFILE
-RETVAL="$?"
-[ "$RETVAL" = 2 ] && return 2
-rm -f /var/run/$NAME/*
-return "$RETVAL"
-}
-
-#
-# Function that stops the daemon/service
-#
-#do_graceful_stop()
-#{
-# PID=`cat $PIDFILE`
-# kill -USR1 $PID
-#
-# # wait until really stopped
-# if [ -n "${PID:-}" ]; then
-# i=0
-# while kill -0 "${PID:-}" 2> /dev/null; do
-# if [ $i -eq '0' ]; then
-# echo -n " ... waiting "
-# else
-# echo -n "."
-# fi
-# i=$(($i+1))
-# sleep 1
-# done
-# fi
-#
-# rm -f /var/run/$NAME/*
-#}
-
-#
-# Function that sends a SIGHUP to the daemon/service
-#
-#do_reload() {
-# #
-# # If the daemon can reload its configuration without
-# # restarting (for example, when it is sent a SIGHUP),
-# # then implement that here.
-# #
-# start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name zuul-server
-# return 0
-#}
-
-case "$1" in
- start)
-[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
-do_start
-case "$?" in
-0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
-2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
-esac
-;;
- stop)
-[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
-do_stop
-case "$?" in
-0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
-2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
-esac
-;;
- status)
- status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
- ;;
-# reload)
-# #
-# # If do_reload() is not implemented then leave this commented out
-# # and leave 'force-reload' as an alias for 'restart'.
-# #
-# log_daemon_msg "Reloading $DESC" "$NAME"
-# do_reload
-# log_end_msg $?
-# ;;
- restart|force-reload)
-#
-# If the "reload" option is implemented then remove the
-# 'force-reload' alias
-#
-log_daemon_msg "Restarting $DESC" "$NAME"
-do_stop
-do_start
-;;
- *)
-echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
-exit 3
-;;
-esac
-
-:
\ No newline at end of file
diff --git a/etc/logrotate.d/mysql-server b/etc/logrotate.d/mysql-server
deleted file mode 100644
index 5f66109..0000000
--- a/etc/logrotate.d/mysql-server
+++ /dev/null
@@ -1,27 +0,0 @@
-# - I put everything in one block and added sharedscripts, so that mysql gets
-# flush-logs'd only once.
-# Else the binary logs would automatically increase by n times every day.
-# - The error log is obsolete, messages go to syslog now.
-/var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log /var/log/mysql/error.log {
- daily
- rotate 7
- missingok
- create 644 mysql adm
- compress
- sharedscripts
- postrotate
- test -x /usr/bin/mysqladmin || exit 0
- # If this fails, check debian.conf!
- MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
- if [ -z "`$MYADMIN ping 2>/dev/null`" ]; then
- # Really no mysqld or rather a missing debian-sys-maint user?
- # If this occurs and is not a error please report a bug.
- #if ps cax | grep -q mysqld; then
- if killall -q -s0 -umysql mysqld; then
- exit 1
- fi
- else
- $MYADMIN flush-logs
- fi
- endscript
-}
\ No newline at end of file
diff --git a/etc/logrotate.d/rsyslog b/etc/logrotate.d/rsyslog
deleted file mode 100644
index 3d00952..0000000
--- a/etc/logrotate.d/rsyslog
+++ /dev/null
@@ -1,37 +0,0 @@
-/var/log/syslog
-{
- rotate 7
- daily
- missingok
- notifempty
- delaycompress
- compress
- postrotate
- reload rsyslog >/dev/null 2>&1 || true
- endscript
-}
-
-/var/log/mail.info
-/var/log/mail.warn
-/var/log/mail.err
-/var/log/mail.log
-/var/log/daemon.log
-/var/log/kern.log
-/var/log/auth.log
-/var/log/user.log
-/var/log/lpr.log
-/var/log/cron.log
-/var/log/debug
-/var/log/messages
-{
- rotate 4
- weekly
- missingok
- notifempty
- compress
- delaycompress
- sharedscripts
- postrotate
- reload rsyslog >/dev/null 2>&1 || true
- endscript
-}
\ No newline at end of file
diff --git a/etc/mysql/my.cnf b/etc/mysql/my.cnf
deleted file mode 100644
index ce34161..0000000
--- a/etc/mysql/my.cnf
+++ /dev/null
@@ -1,127 +0,0 @@
-#
-# The MySQL database server configuration file.
-#
-# You can copy this to one of:
-# - "/etc/mysql/my.cnf" to set global options,
-# - "~/.my.cnf" to set user-specific options.
-#
-# One can use all long options that the program supports.
-# Run program with --help to get a list of available options and with
-# --print-defaults to see which it would actually understand and use.
-#
-# For explanations see
-# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
-
-# This will be passed to all mysql clients
-# It has been reported that passwords should be enclosed with ticks/quotes
-# escpecially if they contain "#" chars...
-# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
-[client]
-port = 3306
-socket = /var/run/mysqld/mysqld.sock
-
-# Here is entries for some specific programs
-# The following values assume you have at least 32M ram
-
-# This was formally known as [safe_mysqld]. Both versions are currently parsed.
-[mysqld_safe]
-socket = /var/run/mysqld/mysqld.sock
-nice = 0
-
-[mysqld]
-#
-# * Basic Settings
-#
-user = mysql
-pid-file = /var/run/mysqld/mysqld.pid
-socket = /var/run/mysqld/mysqld.sock
-port = 3306
-basedir = /usr
-datadir = /var/lib/mysql
-tmpdir = /tmp
-lc-messages-dir = /usr/share/mysql
-skip-external-locking
-#
-# Instead of skip-networking the default is now to listen only on
-# localhost which is more compatible and is not less secure.
-bind-address = 0.0.0.0
-#
-# * Fine Tuning
-#
-key_buffer = 16M
-max_allowed_packet = 16M
-thread_stack = 192K
-thread_cache_size = 8
-# This replaces the startup script and checks MyISAM tables if needed
-# the first time they are touched
-myisam-recover = BACKUP
-#max_connections = 100
-#table_cache = 64
-#thread_concurrency = 10
-#
-# * Query Cache Configuration
-#
-query_cache_limit = 1M
-query_cache_size = 16M
-#
-# * Logging and Replication
-#
-# Both location gets rotated by the cronjob.
-# Be aware that this log type is a performance killer.
-# As of 5.1 you can enable the log at runtime!
-#general_log_file = /var/log/mysql/mysql.log
-#general_log = 1
-#
-# Error log - should be very few entries.
-#
-log_error = /var/log/mysql/error.log
-#
-# Here you can see queries with especially long duration
-#log_slow_queries = /var/log/mysql/mysql-slow.log
-#long_query_time = 2
-#log-queries-not-using-indexes
-#
-# The following can be used as easy to replay backup logs or for replication.
-# note: if you are setting up a replication slave, see README.Debian about
-# other settings you may need to change.
-#server-id = 1
-#log_bin = /var/log/mysql/mysql-bin.log
-expire_logs_days = 10
-max_binlog_size = 100M
-#binlog_do_db = include_database_name
-#binlog_ignore_db = include_database_name
-#
-# * InnoDB
-#
-# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
-# Read the manual for more InnoDB related options. There are many!
-#
-# * Security Features
-#
-# Read the manual, too, if you want chroot!
-# chroot = /var/lib/mysql/
-#
-# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
-#
-# ssl-ca=/etc/mysql/cacert.pem
-# ssl-cert=/etc/mysql/server-cert.pem
-# ssl-key=/etc/mysql/server-key.pem
-
-
-
-[mysqldump]
-quick
-quote-names
-max_allowed_packet = 16M
-
-[mysql]
-#no-auto-rehash # faster start of mysql but no tab completition
-
-[isamchk]
-key_buffer = 16M
-
-#
-# * IMPORTANT: Additional settings that can override those from this file!
-# The files must end with '.cnf', otherwise they'll be ignored.
-#
-!includedir /etc/mysql/conf.d/
diff --git a/etc/rc.local b/etc/rc.local
deleted file mode 100644
index db2b33a..0000000
--- a/etc/rc.local
+++ /dev/null
@@ -1,7 +0,0 @@
-ip netns add nonet
-ip link add veth0 type veth peer name veth1
-ifconfig veth0 172.16.0.1/24 up
-ip link set veth1 netns nonet
-ip netns exec nonet ifconfig veth1 172.16.0.2/24 up
-/sbin/iptables -A INPUT -p tcp --dport 3306 -i eth0 -j DROP
-/sbin/iptables -A INPUT -p tcp --dport 3306 -i eth1 -j DROP
diff --git a/etc/sudoers b/etc/sudoers
deleted file mode 100644
index 74e7a5c..0000000
--- a/etc/sudoers
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# This file MUST be edited with the 'visudo' command as root.
-#
-# Please consider adding local content in /etc/sudoers.d/ instead of
-# directly modifying this file.
-#
-# See the man page for details on how to write a sudoers file.
-#
-Defaults env_reset
-Defaults mail_badpass
-Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
-
-# Host alias specification
-
-# User alias specification
-
-# Cmnd alias specification
-
-# User privilege specification
-root ALL=(ALL:ALL) ALL
-
-# Members of the admin group may gain root privileges
-%admin ALL=(ALL) ALL
-
-# Allow members of group sudo to execute any command
-%sudo ALL=(ALL:ALL) ALL
-
-# Turbo Hipster
-th ALL=(root) NOPASSWD: /sbin/ip netns exec nonet *
-th ALL=(root) NOPASSWD: /usr/sbin/service mysql *
-
-# See sudoers(5) for more information on "#include" directives:
-
-#includedir /etc/sudoers.d
diff --git a/etc/turbo-hipster/config.yaml b/etc/turbo-hipster/config.yaml
deleted file mode 100644
index 9d57865..0000000
--- a/etc/turbo-hipster/config.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-zuul_server:
- gerrit_site: http://review.openstack.org
- git_origin: https://git.openstack.org
- gearman_host: 119.9.13.90
- gearman_port: 4730
-
-debug_log: /var/log/turbo-hipster/debug.log
-jobs_working_dir: /var/lib/turbo-hipster/jobs
-git_working_dir: /var/lib/turbo-hipster/git
-pip_download_cache: /var/cache/pip
-
-plugins:
- - name: real_db_upgrade
- datasets_dir: /var/lib/turbo-hipster/datasets_devstack_131007
- function: build:real-db-upgrade_nova_mysql_devstack_131007
-
- - name: real_db_upgrade
- datasets_dir: /var/lib/turbo-hipster/datasets_devstack_150
- function: build:real-db-upgrade_nova_mysql_devstack_150
-
- - name: real_db_upgrade
- datasets_dir: /var/lib/turbo-hipster/datasets_trivial_500
- function: build:real-db-upgrade_nova_mysql_trivial_500
-
- - name: real_db_upgrade
- datasets_dir: /var/lib/turbo-hipster/datasets_trivial_6000
- function: build:real-db-upgrade_nova_mysql_trivial_6000
-
- - name: real_db_upgrade
- datasets_dir: /var/lib/turbo-hipster/datasets_user_001
- function: build:real-db-upgrade_nova_mysql_user_001
-
- - name: real_db_upgrade
- datasets_dir: /var/lib/turbo-hipster/datasets_user_002
- function: build:real-db-upgrade_nova_mysql_user_002
-
-publish_logs:
- type: swift
- authurl: https://identity.api.rackspacecloud.com/v2.0/
- tenant: XXXX
- user: XXXXXX
- password: XXXXXX
- container: XXXXXX
- region: SYD
- prepend_url: http://www.rcbops.com/turbo_hipster/results/
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 813008a..0000000
--- a/requirements.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-gear>=0.5.4,<1.0.0
-python-swiftclient
-python-keystoneclient
-
-lockfile
-python-daemon<2.0
-extras
-GitPython>=0.3.2.RC1
-# NOTE(tonyb) Pillow isn't directly needed but it's pulled in via
-# Collecting Pillow (from blockdiag>=1.5.0->sphinxcontrib-blockdiag>=0.5.5
-# So cap as per global-requirements until https://launchpad.net/bugs/1501995
-# is properly fixed
-Pillow>=2.4.0,<3.0.0 # MIT
-sphinxcontrib-programoutput
-sphinxcontrib-seqdiag
-
-mysql-python
-
-requests
-PyYAML>=3.1.0,<4.0.0
-
-jenkins-job-builder
-xmltodict
-python-magic
diff --git a/setup.cfg b/setup.cfg
deleted file mode 100644
index 906906c..0000000
--- a/setup.cfg
+++ /dev/null
@@ -1,34 +0,0 @@
-[metadata]
-name = turbo-hipster
-summary = A set of CI tools for openstack
-description-file = README.md
-author = Rackspace Australia
-author-email = joshua.hesketh@rackspace.com
-url = https://github.com/rcbau/turbo-hipster
-classifier =
- Intended Audience :: Information Technology
- Intended Audience :: System Administrators
- License :: OSI Approved :: Apache Software License
- Operating System :: POSIX :: Linux
- Programming Language :: Python
- Programming Language :: Python :: 2
- Programming Language :: Python :: 2.7
-
-[files]
-packages =
- turbo_hipster
-
-[pbr]
-warnerrors = True
-
-[entry_points]
-console_scripts =
- turbo-hipster = turbo_hipster.cmd.server:main
- turbo-hipster-analyse = turbo_hipster.cmd.analyse_historical:main
- turbo-hipster-report = turbo_hipster.cmd.report_historical:main
- turbo-hipster-queue-logger = turbo_hipster.cmd.queue_logger:main
-
-[build_sphinx]
-source-dir = doc/source
-build-dir = doc/build
-all_files = 1
diff --git a/setup.py b/setup.py
deleted file mode 100755
index 536855f..0000000
--- a/setup.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import setuptools
-
-setuptools.setup(setup_requires=['pbr'], pbr=True)
diff --git a/test-requirements.txt b/test-requirements.txt
deleted file mode 100644
index 1943ed8..0000000
--- a/test-requirements.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-hacking>=0.9.2,<0.10
-coverage>=3.6
-
-sphinx>=1.1.2,!=1.2.0,!=1.3b1,<1.3
-discover
-mock
-six
-unittest2
-python-subunit
-testrepository>=0.0.13
-testtools>=0.9.27
-test
diff --git a/tests/__init__.py b/tests/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/tests/__init__.py
+++ /dev/null
diff --git a/tests/assets/20131007_devstack_export.log b/tests/assets/20131007_devstack_export.log
deleted file mode 100644
index 0d9790a..0000000
--- a/tests/assets/20131007_devstack_export.log
+++ /dev/null
@@ -1,867 +0,0 @@
-2013-11-21 22:22:00,378 [output] To execute this script manually, run this:
-2013-11-21 22:22:00,379 [output] /usr/local/lib/python2.7/dist-packages/turbo_hipster/task_plugins/gate_real_db_upgrade/nova_mysql_migrations.sh e0a387e790954342b8d410ac8f062164 /var/lib/turbo-hipster/jobs/56/56287/10/check/gate-real-db-upgrade_nova_mysql_devstack_20131007/e0a387e /var/lib/turbo-hipster/git/gate_real_db_upgrade-turbo-hipster-worker-0/openstack/nova nova tester nova_dataset_20131007_devstack /var/lib/turbo-hipster/datasets_devstack_20131007/20131007_devstack_export/nova.sql /var/lib/turbo-hipster/datasets_devstack_20131007/20131007_devstack_export/logging.conf /var/cache/pip
-2013-11-21 22:22:00,379 [output] Restoring test database nova_dataset_20131007_devstack
-2013-11-21 22:22:00,380 [output] + mysql -u nova --password=tester -e 'drop database nova_dataset_20131007_devstack'
-2013-11-21 22:22:01,562 [output] + mysql -u nova --password=tester -e 'create database nova_dataset_20131007_devstack'
-2013-11-21 22:22:01,596 [output] + mysql -u nova --password=tester nova_dataset_20131007_devstack
-2013-11-21 22:22:01,659 [output] /usr/local/lib/python2.7/dist-packages/turbo_hipster/task_plugins/gate_real_db_upgrade/nova_mysql_migrations.sh: line 89: //var/lib/turbo-hipster/datasets_devstack_20131007/20131007_devstack_export/nova.sql: Permission denied
-2013-11-21 22:22:01,660 [output] + set +x
-2013-11-21 22:22:01,660 [output] Build test environment
-2013-11-21 22:22:01,660 [output] Setting up virtual env
-2013-11-21 22:22:03,529 [output] New python executable in e0a387e790954342b8d410ac8f062164/bin/python
-2013-11-21 22:22:08,190 [output] Installing distribute...........................................................................................................................................................................................................................done.
-2013-11-21 22:22:10,446 [output] Installing pip................done.
-2013-11-21 22:22:10,984 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/bin/predeactivate
-2013-11-21 22:22:10,985 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/bin/postdeactivate
-2013-11-21 22:22:11,014 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/bin/preactivate
-2013-11-21 22:22:11,014 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/bin/postactivate
-2013-11-21 22:22:11,014 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/bin/get_env_details
-2013-11-21 22:22:13,614 [output] Enabled global site-packages
-2013-11-21 22:22:13,688 [output] ERROR 1146 (42S02) at line 1: Table 'nova_dataset_20131007_devstack.migrate_version' doesn't exist
-2013-11-21 22:22:13,690 [output] Schema version is
-2013-11-21 22:22:13,725 [output] error: branch 'working' not found.
-2013-11-21 22:22:14,006 [output] Switched to a new branch 'working'
-2013-11-21 22:22:14,202 [output] Update database to current state of trunk
-2013-11-21 22:22:14,490 [output] Switched to branch 'master'
-2013-11-21 22:22:27,225 [output] Install pip requirements from requirements.txt
-2013-11-21 22:22:30,334 [heartbeat]
-2013-11-21 22:23:00,338 [heartbeat]
-2013-11-21 22:23:30,350 [heartbeat]
-2013-11-21 22:24:00,374 [heartbeat]
-2013-11-21 22:24:30,374 [heartbeat]
-2013-11-21 22:25:00,378 [heartbeat]
-2013-11-21 22:25:30,386 [heartbeat]
-2013-11-21 22:26:00,390 [heartbeat]
-2013-11-21 22:26:30,414 [heartbeat]
-2013-11-21 22:27:00,434 [heartbeat]
-2013-11-21 22:27:30,438 [heartbeat]
-2013-11-21 22:28:00,438 [heartbeat]
-2013-11-21 22:28:30,454 [heartbeat]
-2013-11-21 22:29:00,458 [heartbeat]
-2013-11-21 22:29:30,458 [heartbeat]
-2013-11-21 22:30:00,465 [heartbeat]
-2013-11-21 22:30:21,943 [output] Requirements installed
-2013-11-21 22:30:22,318 [output] ***** Start DB upgrade to state of trunk *****
-2013-11-21 22:30:27,278 [output] warning: no files found matching 'AUTHORS'
-2013-11-21 22:30:27,284 [output] warning: no files found matching 'ChangeLog'
-2013-11-21 22:30:27,430 [output] warning: no previously-included files matching '*.pyc' found anywhere in distribution
-2013-11-21 22:30:27,477 [output] warning: no files found matching 'AUTHORS'
-2013-11-21 22:30:27,484 [output] warning: no files found matching 'ChangeLog'
-2013-11-21 22:30:27,502 [output] warning: no previously-included files found matching '.gitignore'
-2013-11-21 22:30:27,526 [output] warning: no previously-included files found matching '.gitreview'
-2013-11-21 22:30:27,554 [output] warning: no previously-included files matching '*.pyc' found anywhere in distribution
-2013-11-21 22:30:29,394 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,394 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,395 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,395 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,395 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.4.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,395 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,395 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-11-21 22:30:29,395 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,395 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,395 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,395 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,396 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,396 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,396 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,396 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.7.2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,396 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr>=0.7.6 in /usr/lib/python2.7/dist-packages
-2013-11-21 22:30:29,396 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,396 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,396 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,396 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,397 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.4,!=0.1.5,!=0.1.6 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,397 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,397 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,397 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,406 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,406 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.4.1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,422 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-11-21 22:30:29,430 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.10 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,430 [output] Requirement already satisfied (use --upgrade to upgrade): websockify>=0.5.1,<0.6 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,430 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:30:29,430 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg (from pbr>=0.5.21,<1.0)
-2013-11-21 22:30:29,431 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-11-21 22:30:29,431 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-11-21 22:30:29,431 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-11-21 22:30:29,431 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.7.2)
-2013-11-21 22:30:29,431 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.7.2)
-2013-11-21 22:30:29,431 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-11-21 22:30:29,431 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-11-21 22:30:29,431 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from Babel>=1.3)
-2013-11-21 22:30:29,431 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-cinderclient>=1.0.6)
-2013-11-21 22:30:29,432 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-11-21 22:30:29,432 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-11-21 22:30:29,432 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-11-21 22:30:29,432 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-11-21 22:30:29,432 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-11-21 22:30:29,432 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-11-21 22:30:29,432 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-11-21 22:30:29,433 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-11-21 22:30:29,433 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-11-21 22:30:29,433 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-11-21 22:30:29,433 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-11-21 22:30:29,433 [output] Cleaning up...
-2013-11-21 22:30:30,476 [heartbeat]
-2013-11-21 22:31:00,476 [heartbeat]
-2013-11-21 22:31:06,456 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/56/56287/10/check/gate-real-db-upgrade_nova_mysql_devstack_20131007/e0a387e/nova-trunk.conf db sync
-2013-11-21 22:31:17,190 [output] 132 -> 133...
-2013-11-21 22:31:22,933 [output] done
-2013-11-21 22:31:22,933 [output] 133 -> 134...
-2013-11-21 22:31:23,081 [output] done
-2013-11-21 22:31:23,081 [output] 134 -> 135...
-2013-11-21 22:31:23,356 [output] done
-2013-11-21 22:31:23,356 [output] 135 -> 136...
-2013-11-21 22:31:23,539 [output] done
-2013-11-21 22:31:23,539 [output] 136 -> 137...
-2013-11-21 22:31:23,675 [output] done
-2013-11-21 22:31:23,675 [output] 137 -> 138...
-2013-11-21 22:31:23,726 [output] done
-2013-11-21 22:31:23,726 [output] 138 -> 139...
-2013-11-21 22:31:23,773 [output] done
-2013-11-21 22:31:23,773 [output] 139 -> 140...
-2013-11-21 22:31:23,812 [output] done
-2013-11-21 22:31:23,812 [output] 140 -> 141...
-2013-11-21 22:31:23,849 [output] done
-2013-11-21 22:31:23,849 [output] 141 -> 142...
-2013-11-21 22:31:23,958 [output] done
-2013-11-21 22:31:23,958 [output] 142 -> 143...
-2013-11-21 22:31:24,070 [output] done
-2013-11-21 22:31:24,070 [output] 143 -> 144...
-2013-11-21 22:31:24,230 [output] done
-2013-11-21 22:31:24,231 [output] 144 -> 145...
-2013-11-21 22:31:24,298 [output] done
-2013-11-21 22:31:24,298 [output] 145 -> 146...
-2013-11-21 22:31:24,361 [output] done
-2013-11-21 22:31:24,361 [output] 146 -> 147...
-2013-11-21 22:31:24,462 [output] done
-2013-11-21 22:31:24,462 [output] 147 -> 148...
-2013-11-21 22:31:24,658 [output] done
-2013-11-21 22:31:24,658 [output] 148 -> 149...
-2013-11-21 22:31:25,562 [output] done
-2013-11-21 22:31:25,562 [output] 149 -> 150...
-2013-11-21 22:31:25,706 [output] done
-2013-11-21 22:31:25,706 [output] 150 -> 151...
-2013-11-21 22:31:25,811 [output] done
-2013-11-21 22:31:25,811 [output] 151 -> 152...
-2013-11-21 22:31:30,477 [heartbeat]
-2013-11-21 22:31:31,142 [output] done
-2013-11-21 22:31:31,142 [output] 152 -> 153...
-2013-11-21 22:31:31,190 [output] done
-2013-11-21 22:31:31,190 [output] 153 -> 154...
-2013-11-21 22:31:32,916 [output] done
-2013-11-21 22:31:32,916 [output] 154 -> 155...
-2013-11-21 22:31:33,051 [output] done
-2013-11-21 22:31:33,051 [output] 155 -> 156...
-2013-11-21 22:31:33,157 [output] done
-2013-11-21 22:31:33,157 [output] 156 -> 157...
-2013-11-21 22:31:33,226 [output] done
-2013-11-21 22:31:33,226 [output] 157 -> 158...
-2013-11-21 22:31:33,318 [output] done
-2013-11-21 22:31:33,326 [output] 158 -> 159...
-2013-11-21 22:31:33,975 [output] done
-2013-11-21 22:31:33,975 [output] 159 -> 160...
-2013-11-21 22:31:34,002 [output] done
-2013-11-21 22:31:34,002 [output] 160 -> 161...
-2013-11-21 22:31:34,034 [output] done
-2013-11-21 22:31:34,034 [output] 161 -> 162...
-2013-11-21 22:31:34,070 [output] done
-2013-11-21 22:31:34,070 [output] 162 -> 163...
-2013-11-21 22:31:34,072 [output] done
-2013-11-21 22:31:34,072 [output] 163 -> 164...
-2013-11-21 22:31:34,077 [output] done
-2013-11-21 22:31:34,077 [output] 164 -> 165...
-2013-11-21 22:31:34,085 [output] done
-2013-11-21 22:31:34,085 [output] 165 -> 166...
-2013-11-21 22:31:34,091 [output] done
-2013-11-21 22:31:34,091 [output] 166 -> 167...
-2013-11-21 22:31:34,094 [output] done
-2013-11-21 22:31:34,094 [output] 167 -> 168...
-2013-11-21 22:31:34,120 [output] done
-2013-11-21 22:31:34,143 [output] 168 -> 169...
-2013-11-21 22:31:34,143 [output] done
-2013-11-21 22:31:34,143 [output] 169 -> 170...
-2013-11-21 22:31:34,144 [output] done
-2013-11-21 22:31:34,144 [output] 170 -> 171...
-2013-11-21 22:31:34,162 [output] done
-2013-11-21 22:31:34,163 [output] 171 -> 172...
-2013-11-21 22:31:34,329 [output] done
-2013-11-21 22:31:34,329 [output] 172 -> 173...
-2013-11-21 22:31:34,411 [output] done
-2013-11-21 22:31:34,412 [output] 173 -> 174...
-2013-11-21 22:31:34,530 [output] done
-2013-11-21 22:31:34,530 [output] 174 -> 175...
-2013-11-21 22:31:34,693 [output] done
-2013-11-21 22:31:34,694 [output] 175 -> 176...
-2013-11-21 22:31:34,733 [output] done
-2013-11-21 22:31:34,734 [output] 176 -> 177...
-2013-11-21 22:31:34,822 [output] done
-2013-11-21 22:31:34,823 [output] 177 -> 178...
-2013-11-21 22:31:34,915 [output] done
-2013-11-21 22:31:34,916 [output] 178 -> 179...
-2013-11-21 22:31:35,116 [output] done
-2013-11-21 22:31:35,116 [output] 179 -> 180...
-2013-11-21 22:31:35,278 [output] done
-2013-11-21 22:31:35,278 [output] 180 -> 181...
-2013-11-21 22:31:35,403 [output] done
-2013-11-21 22:31:35,404 [output] 181 -> 182...
-2013-11-21 22:31:35,514 [output] done
-2013-11-21 22:31:35,514 [output] 182 -> 183...
-2013-11-21 22:31:35,596 [output] done
-2013-11-21 22:31:35,596 [output] 183 -> 184...
-2013-11-21 22:31:36,314 [output] done
-2013-11-21 22:31:36,314 [output] 184 -> 185...
-2013-11-21 22:31:37,422 [output] done
-2013-11-21 22:31:37,423 [output] 185 -> 186...
-2013-11-21 22:31:38,346 [output] done
-2013-11-21 22:31:38,346 [output] 186 -> 187...
-2013-11-21 22:31:38,786 [output] done
-2013-11-21 22:31:38,786 [output] 187 -> 188...
-2013-11-21 22:31:38,857 [output] done
-2013-11-21 22:31:38,858 [output] 188 -> 189...
-2013-11-21 22:31:38,995 [output] done
-2013-11-21 22:31:38,995 [output] 189 -> 190...
-2013-11-21 22:31:39,062 [output] done
-2013-11-21 22:31:39,062 [output] 190 -> 191...
-2013-11-21 22:31:39,151 [output] done
-2013-11-21 22:31:39,151 [output] 191 -> 192...
-2013-11-21 22:31:39,366 [output] done
-2013-11-21 22:31:39,367 [output] 192 -> 193...
-2013-11-21 22:31:39,616 [output] done
-2013-11-21 22:31:39,617 [output] 193 -> 194...
-2013-11-21 22:31:40,814 [output] done
-2013-11-21 22:31:40,814 [output] 194 -> 195...
-2013-11-21 22:31:40,946 [output] done
-2013-11-21 22:31:40,946 [output] 195 -> 196...
-2013-11-21 22:31:41,050 [output] done
-2013-11-21 22:31:41,051 [output] 196 -> 197...
-2013-11-21 22:31:41,143 [output] done
-2013-11-21 22:31:41,144 [output] 197 -> 198...
-2013-11-21 22:31:41,239 [output] done
-2013-11-21 22:31:41,240 [output] 198 -> 199...
-2013-11-21 22:31:41,314 [output] done
-2013-11-21 22:31:41,314 [output] 199 -> 200...
-2013-11-21 22:31:41,728 [output] done
-2013-11-21 22:31:41,728 [output] 200 -> 201...
-2013-11-21 22:31:41,742 [output] done
-2013-11-21 22:31:41,742 [output] 201 -> 202...
-2013-11-21 22:31:41,823 [output] done
-2013-11-21 22:31:41,823 [output] 202 -> 203...
-2013-11-21 22:31:42,202 [output] done
-2013-11-21 22:31:42,202 [output] 203 -> 204...
-2013-11-21 22:31:42,294 [output] done
-2013-11-21 22:31:42,310 [output] 204 -> 205...
-2013-11-21 22:31:42,393 [output] done
-2013-11-21 22:31:42,394 [output] 205 -> 206...
-2013-11-21 22:31:42,574 [output] done
-2013-11-21 22:31:42,574 [output] 206 -> 207...
-2013-11-21 22:31:42,756 [output] done
-2013-11-21 22:31:42,757 [output] 207 -> 208...
-2013-11-21 22:31:42,934 [output] done
-2013-11-21 22:31:42,934 [output] 208 -> 209...
-2013-11-21 22:31:43,514 [output] done
-2013-11-21 22:31:43,515 [output] 209 -> 210...
-2013-11-21 22:31:43,624 [output] done
-2013-11-21 22:31:43,624 [output] 210 -> 211...
-2013-11-21 22:31:43,717 [output] done
-2013-11-21 22:31:43,717 [output] 211 -> 212...
-2013-11-21 22:31:43,832 [output] done
-2013-11-21 22:31:43,832 [output] 212 -> 213...
-2013-11-21 22:31:44,066 [output] done
-2013-11-21 22:31:44,066 [output] 213 -> 214...
-2013-11-21 22:31:44,242 [output] done
-2013-11-21 22:31:44,242 [output] 214 -> 215...
-2013-11-21 22:31:44,244 [output] done
-2013-11-21 22:31:44,245 [output] 215 -> 216...
-2013-11-21 22:31:44,321 [output] done
-2013-11-21 22:31:44,321 [output] 216 -> 217...
-2013-11-21 22:31:44,333 [output] done
-2013-11-21 22:31:44,333 [output] 217 -> 218...
-2013-11-21 22:31:44,341 [output] done
-2013-11-21 22:31:44,342 [output] 218 -> 219...
-2013-11-21 22:31:44,350 [output] done
-2013-11-21 22:31:44,350 [output] 219 -> 220...
-2013-11-21 22:31:44,367 [output] done
-2013-11-21 22:31:44,367 [output] 220 -> 221...
-2013-11-21 22:31:44,390 [output] done
-2013-11-21 22:31:44,390 [output] 221 -> 222...
-2013-11-21 22:31:44,410 [output] done
-2013-11-21 22:31:44,410 [output] 222 -> 223...
-2013-11-21 22:31:44,416 [output] done
-2013-11-21 22:31:44,416 [output] 223 -> 224...
-2013-11-21 22:31:44,429 [output] done
-2013-11-21 22:31:44,429 [output] 224 -> 225...
-2013-11-21 22:31:44,474 [output] done
-2013-11-21 22:31:44,474 [output] 225 -> 226...
-2013-11-21 22:31:44,530 [output] done
-2013-11-21 22:31:44,531 [output] 226 -> 227...
-2013-11-21 22:31:44,533 [output] done
-2013-11-21 22:31:44,533 [output] 227 -> 228...
-2013-11-21 22:31:44,631 [output] done
-2013-11-21 22:31:45,743 [output] + set +x
-2013-11-21 22:31:45,745 [output] ***** Finished DB upgrade to state of trunk *****
-2013-11-21 22:31:48,002 [output] Switched to branch 'working'
-2013-11-21 22:31:48,023 [output] Now test the patchset
-2013-11-21 22:31:48,854 [output] Install pip requirements from requirements.txt
-2013-11-21 22:31:49,174 [output] Requirements installed
-2013-11-21 22:31:50,658 [output] ***** Start DB upgrade to state of patchset *****
-2013-11-21 22:31:54,659 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,659 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,659 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,659 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,659 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.4.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,660 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,660 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-11-21 22:31:54,660 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,660 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,660 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,660 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,690 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,690 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,690 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,690 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.7.2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,691 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr>=0.7.6 in /usr/lib/python2.7/dist-packages
-2013-11-21 22:31:54,691 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,691 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,691 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,691 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,691 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.4,!=0.1.5,!=0.1.6 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,691 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,691 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,691 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,692 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,692 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.4.1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,692 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-11-21 22:31:54,692 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.10 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,692 [output] Requirement already satisfied (use --upgrade to upgrade): websockify>=0.5.1,<0.6 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,692 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:31:54,693 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg (from pbr>=0.5.21,<1.0)
-2013-11-21 22:31:54,693 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-11-21 22:31:54,693 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-11-21 22:31:54,693 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-11-21 22:31:54,693 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.7.2)
-2013-11-21 22:31:54,693 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.7.2)
-2013-11-21 22:31:54,693 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-11-21 22:31:54,693 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-11-21 22:31:54,693 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from Babel>=1.3)
-2013-11-21 22:31:54,694 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-cinderclient>=1.0.6)
-2013-11-21 22:31:54,694 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-11-21 22:31:54,699 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-11-21 22:31:54,699 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-11-21 22:31:54,699 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-11-21 22:31:54,699 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-11-21 22:31:54,699 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-11-21 22:31:54,699 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-11-21 22:31:54,700 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-11-21 22:31:54,700 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-11-21 22:31:54,700 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-11-21 22:31:54,700 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-11-21 22:31:54,700 [output] Cleaning up...
-2013-11-21 22:31:55,743 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/56/56287/10/check/gate-real-db-upgrade_nova_mysql_devstack_20131007/e0a387e/nova-patchset.conf db sync
-2013-11-21 22:31:58,186 [output] + set +x
-2013-11-21 22:31:58,186 [output] ***** Finished DB upgrade to state of patchset *****
-2013-11-21 22:31:58,974 [output] Schema version is 228
-2013-11-21 22:31:58,974 [output] Now downgrade all the way back to Folsom
-2013-11-21 22:31:59,906 [output] ***** Start DB upgrade to state of patchset *****
-2013-11-21 22:32:00,483 [heartbeat]
-2013-11-21 22:32:03,111 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,111 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,112 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,112 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,112 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.4.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,112 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,112 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-11-21 22:32:03,112 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,112 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,112 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,113 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,113 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,113 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,113 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,113 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.7.2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,113 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr>=0.7.6 in /usr/lib/python2.7/dist-packages
-2013-11-21 22:32:03,113 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,113 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,113 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,114 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,114 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.4,!=0.1.5,!=0.1.6 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,114 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,114 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,114 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,117 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,118 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.4.1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,118 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-11-21 22:32:03,118 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.10 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,118 [output] Requirement already satisfied (use --upgrade to upgrade): websockify>=0.5.1,<0.6 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,118 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:03,118 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg (from pbr>=0.5.21,<1.0)
-2013-11-21 22:32:03,118 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-11-21 22:32:03,119 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-11-21 22:32:03,119 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-11-21 22:32:03,119 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.7.2)
-2013-11-21 22:32:03,119 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.7.2)
-2013-11-21 22:32:03,119 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-11-21 22:32:03,119 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-11-21 22:32:03,119 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from Babel>=1.3)
-2013-11-21 22:32:03,119 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-cinderclient>=1.0.6)
-2013-11-21 22:32:03,120 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-11-21 22:32:03,120 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-11-21 22:32:03,120 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-11-21 22:32:03,120 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-11-21 22:32:03,120 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-11-21 22:32:03,120 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-11-21 22:32:03,120 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-11-21 22:32:03,149 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-11-21 22:32:03,149 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-11-21 22:32:03,149 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-11-21 22:32:03,149 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-11-21 22:32:03,149 [output] Cleaning up...
-2013-11-21 22:32:04,541 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/56/56287/10/check/gate-real-db-upgrade_nova_mysql_devstack_20131007/e0a387e/nova-patchset.conf db sync --version 133
-2013-11-21 22:32:07,648 [output] 228 -> 227...
-2013-11-21 22:32:07,798 [output] done
-2013-11-21 22:32:07,798 [output] 227 -> 226...
-2013-11-21 22:32:07,799 [output] done
-2013-11-21 22:32:07,799 [output] 226 -> 225...
-2013-11-21 22:32:07,799 [output] done
-2013-11-21 22:32:07,799 [output] 225 -> 224...
-2013-11-21 22:32:07,799 [output] done
-2013-11-21 22:32:07,799 [output] 224 -> 223...
-2013-11-21 22:32:07,802 [output] done
-2013-11-21 22:32:07,802 [output] 223 -> 222...
-2013-11-21 22:32:07,807 [output] done
-2013-11-21 22:32:07,807 [output] 222 -> 221...
-2013-11-21 22:32:07,841 [output] done
-2013-11-21 22:32:07,841 [output] 221 -> 220...
-2013-11-21 22:32:07,841 [output] done
-2013-11-21 22:32:07,841 [output] 220 -> 219...
-2013-11-21 22:32:07,841 [output] done
-2013-11-21 22:32:07,842 [output] 219 -> 218...
-2013-11-21 22:32:07,842 [output] done
-2013-11-21 22:32:07,842 [output] 218 -> 217...
-2013-11-21 22:32:07,842 [output] done
-2013-11-21 22:32:07,842 [output] 217 -> 216...
-2013-11-21 22:32:07,843 [output] done
-2013-11-21 22:32:07,843 [output] 216 -> 215...
-2013-11-21 22:32:07,852 [output] done
-2013-11-21 22:32:07,852 [output] 215 -> 214...
-2013-11-21 22:32:07,878 [output] done
-2013-11-21 22:32:07,878 [output] 214 -> 213...
-2013-11-21 22:32:08,487 [output] done
-2013-11-21 22:32:08,487 [output] 213 -> 212...
-2013-11-21 22:32:08,607 [output] done
-2013-11-21 22:32:08,607 [output] 212 -> 211...
-2013-11-21 22:32:08,743 [output] done
-2013-11-21 22:32:08,744 [output] 211 -> 210...
-2013-11-21 22:32:08,838 [output] done
-2013-11-21 22:32:08,838 [output] 210 -> 209...
-2013-11-21 22:32:08,994 [output] done
-2013-11-21 22:32:08,995 [output] 209 -> 208...
-2013-11-21 22:32:09,322 [output] done
-2013-11-21 22:32:09,323 [output] 208 -> 207...
-2013-11-21 22:32:09,510 [output] done
-2013-11-21 22:32:09,510 [output] 207 -> 206...
-2013-11-21 22:32:09,603 [output] done
-2013-11-21 22:32:09,603 [output] 206 -> 205...
-2013-11-21 22:32:09,830 [output] done
-2013-11-21 22:32:09,831 [output] 205 -> 204...
-2013-11-21 22:32:09,930 [output] done
-2013-11-21 22:32:09,930 [output] 204 -> 203...
-2013-11-21 22:32:09,990 [output] done
-2013-11-21 22:32:09,990 [output] 203 -> 202...
-2013-11-21 22:32:10,199 [output] done
-2013-11-21 22:32:10,200 [output] 202 -> 201...
-2013-11-21 22:32:10,282 [output] done
-2013-11-21 22:32:10,282 [output] 201 -> 200...
-2013-11-21 22:32:10,302 [output] done
-2013-11-21 22:32:10,303 [output] 200 -> 199...
-2013-11-21 22:32:10,630 [output] done
-2013-11-21 22:32:10,631 [output] 199 -> 198...
-2013-11-21 22:32:10,734 [output] done
-2013-11-21 22:32:10,734 [output] 198 -> 197...
-2013-11-21 22:32:10,845 [output] done
-2013-11-21 22:32:10,845 [output] 197 -> 196...
-2013-11-21 22:32:10,905 [output] done
-2013-11-21 22:32:10,905 [output] 196 -> 195...
-2013-11-21 22:32:10,982 [output] done
-2013-11-21 22:32:10,982 [output] 195 -> 194...
-2013-11-21 22:32:11,127 [output] done
-2013-11-21 22:32:11,128 [output] 194 -> 193...
-2013-11-21 22:32:12,270 [output] done
-2013-11-21 22:32:12,270 [output] 193 -> 192...
-2013-11-21 22:32:12,803 [output] done
-2013-11-21 22:32:12,804 [output] 192 -> 191...
-2013-11-21 22:32:13,358 [output] done
-2013-11-21 22:32:13,358 [output] 191 -> 190...
-2013-11-21 22:32:13,406 [output] done
-2013-11-21 22:32:13,406 [output] 190 -> 189...
-2013-11-21 22:32:13,478 [output] done
-2013-11-21 22:32:13,478 [output] 189 -> 188...
-2013-11-21 22:32:13,550 [output] done
-2013-11-21 22:32:13,550 [output] 188 -> 187...
-2013-11-21 22:32:13,722 [output] done
-2013-11-21 22:32:13,723 [output] 187 -> 186...
-2013-11-21 22:32:13,918 [output] done
-2013-11-21 22:32:13,918 [output] 186 -> 185...
-2013-11-21 22:32:14,754 [output] done
-2013-11-21 22:32:14,755 [output] 185 -> 184...
-2013-11-21 22:32:16,059 [output] done
-2013-11-21 22:32:16,059 [output] 184 -> 183...
-2013-11-21 22:32:17,230 [output] done
-2013-11-21 22:32:17,230 [output] 183 -> 182...
-2013-11-21 22:32:17,274 [output] done
-2013-11-21 22:32:17,274 [output] 182 -> 181...
-2013-11-21 22:32:17,495 [output] done
-2013-11-21 22:32:17,495 [output] 181 -> 180...
-2013-11-21 22:32:17,687 [output] done
-2013-11-21 22:32:17,687 [output] 180 -> 179...
-2013-11-21 22:32:17,814 [output] done
-2013-11-21 22:32:17,814 [output] 179 -> 178...
-2013-11-21 22:32:17,910 [output] done
-2013-11-21 22:32:17,910 [output] 178 -> 177...
-2013-11-21 22:32:17,989 [output] done
-2013-11-21 22:32:17,990 [output] 177 -> 176...
-2013-11-21 22:32:18,094 [output] done
-2013-11-21 22:32:18,094 [output] 176 -> 175...
-2013-11-21 22:32:18,178 [output] done
-2013-11-21 22:32:18,179 [output] 175 -> 174...
-2013-11-21 22:32:18,322 [output] done
-2013-11-21 22:32:18,323 [output] 174 -> 173...
-2013-11-21 22:32:18,398 [output] done
-2013-11-21 22:32:18,398 [output] 173 -> 172...
-2013-11-21 22:32:18,551 [output] done
-2013-11-21 22:32:18,551 [output] 172 -> 171...
-2013-11-21 22:32:18,689 [output] done
-2013-11-21 22:32:18,689 [output] 171 -> 170...
-2013-11-21 22:32:18,718 [output] done
-2013-11-21 22:32:18,719 [output] 170 -> 169...
-2013-11-21 22:32:18,778 [output] done
-2013-11-21 22:32:18,778 [output] 169 -> 168...
-2013-11-21 22:32:18,814 [output] done
-2013-11-21 22:32:18,814 [output] 168 -> 167...
-2013-11-21 22:32:18,821 [output] done
-2013-11-21 22:32:18,821 [output] 167 -> 166...
-2013-11-21 22:32:18,838 [output] done
-2013-11-21 22:32:18,838 [output] 166 -> 165...
-2013-11-21 22:32:18,855 [output] done
-2013-11-21 22:32:18,855 [output] 165 -> 164...
-2013-11-21 22:32:18,890 [output] done
-2013-11-21 22:32:18,891 [output] 164 -> 163...
-2013-11-21 22:32:18,895 [output] done
-2013-11-21 22:32:18,896 [output] 163 -> 162...
-2013-11-21 22:32:18,934 [output] done
-2013-11-21 22:32:18,934 [output] 162 -> 161...
-2013-11-21 22:32:18,954 [output] done
-2013-11-21 22:32:18,955 [output] 161 -> 160...
-2013-11-21 22:32:19,008 [output] done
-2013-11-21 22:32:19,009 [output] 160 -> 159...
-2013-11-21 22:32:19,062 [output] done
-2013-11-21 22:32:19,062 [output] 159 -> 158...
-2013-11-21 22:32:19,984 [output] done
-2013-11-21 22:32:19,984 [output] 158 -> 157...
-2013-11-21 22:32:20,157 [output] done
-2013-11-21 22:32:20,158 [output] 157 -> 156...
-2013-11-21 22:32:20,186 [output] done
-2013-11-21 22:32:20,188 [output] 156 -> 155...
-2013-11-21 22:32:20,350 [output] done
-2013-11-21 22:32:20,350 [output] 155 -> 154...
-2013-11-21 22:32:20,395 [output] done
-2013-11-21 22:32:20,396 [output] 154 -> 153...
-2013-11-21 22:32:21,790 [output] done
-2013-11-21 22:32:21,790 [output] 153 -> 152...
-2013-11-21 22:32:21,792 [output] done
-2013-11-21 22:32:21,792 [output] 152 -> 151...
-2013-11-21 22:32:30,486 [heartbeat]
-2013-11-21 22:32:32,628 [output] done
-2013-11-21 22:32:32,629 [output] 151 -> 150...
-2013-11-21 22:32:32,867 [output] done
-2013-11-21 22:32:32,868 [output] 150 -> 149...
-2013-11-21 22:32:32,912 [output] done
-2013-11-21 22:32:32,912 [output] 149 -> 148...
-2013-11-21 22:32:34,030 [output] done
-2013-11-21 22:32:34,031 [output] 148 -> 147...
-2013-11-21 22:32:34,114 [output] done
-2013-11-21 22:32:34,114 [output] 147 -> 146...
-2013-11-21 22:32:34,207 [output] done
-2013-11-21 22:32:34,207 [output] 146 -> 145...
-2013-11-21 22:32:34,281 [output] done
-2013-11-21 22:32:34,281 [output] 145 -> 144...
-2013-11-21 22:32:34,303 [output] done
-2013-11-21 22:32:34,303 [output] 144 -> 143...
-2013-11-21 22:32:34,516 [output] done
-2013-11-21 22:32:34,516 [output] 143 -> 142...
-2013-11-21 22:32:34,671 [output] done
-2013-11-21 22:32:34,671 [output] 142 -> 141...
-2013-11-21 22:32:34,738 [output] done
-2013-11-21 22:32:34,739 [output] 141 -> 140...
-2013-11-21 22:32:34,767 [output] done
-2013-11-21 22:32:34,767 [output] 140 -> 139...
-2013-11-21 22:32:34,772 [output] done
-2013-11-21 22:32:34,772 [output] 139 -> 138...
-2013-11-21 22:32:34,886 [output] done
-2013-11-21 22:32:34,886 [output] 138 -> 137...
-2013-11-21 22:32:34,928 [output] done
-2013-11-21 22:32:34,928 [output] 137 -> 136...
-2013-11-21 22:32:34,965 [output] done
-2013-11-21 22:32:34,965 [output] 136 -> 135...
-2013-11-21 22:32:34,998 [output] done
-2013-11-21 22:32:34,998 [output] 135 -> 134...
-2013-11-21 22:32:35,102 [output] done
-2013-11-21 22:32:35,102 [output] 134 -> 133...
-2013-11-21 22:32:35,222 [output] done
-2013-11-21 22:32:35,870 [output] + set +x
-2013-11-21 22:32:35,870 [output] ***** Finished DB upgrade to state of patchset *****
-2013-11-21 22:32:35,910 [output] Schema version is 133
-2013-11-21 22:32:35,910 [output] And now back up to head from Folsom
-2013-11-21 22:32:36,942 [output] ***** Start DB upgrade to state of patchset *****
-2013-11-21 22:32:41,040 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,041 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,041 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,042 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,042 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.4.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,042 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,042 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-11-21 22:32:41,043 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,043 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,043 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,043 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,043 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,043 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,043 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,044 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.7.2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,044 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr>=0.7.6 in /usr/lib/python2.7/dist-packages
-2013-11-21 22:32:41,044 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,044 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,044 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,044 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,044 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.4,!=0.1.5,!=0.1.6 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,044 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,045 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,045 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,045 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,045 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.4.1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,045 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-11-21 22:32:41,046 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.10 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,046 [output] Requirement already satisfied (use --upgrade to upgrade): websockify>=0.5.1,<0.6 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,046 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages
-2013-11-21 22:32:41,070 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg (from pbr>=0.5.21,<1.0)
-2013-11-21 22:32:41,070 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-11-21 22:32:41,070 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-11-21 22:32:41,071 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-11-21 22:32:41,071 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.7.2)
-2013-11-21 22:32:41,071 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.7.2)
-2013-11-21 22:32:41,071 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-11-21 22:32:41,071 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-11-21 22:32:41,071 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from Babel>=1.3)
-2013-11-21 22:32:41,071 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-cinderclient>=1.0.6)
-2013-11-21 22:32:41,071 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-11-21 22:32:41,071 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-11-21 22:32:41,072 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-11-21 22:32:41,072 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-11-21 22:32:41,072 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-11-21 22:32:41,072 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-11-21 22:32:41,072 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-11-21 22:32:41,073 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-11-21 22:32:41,073 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-11-21 22:32:41,073 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-11-21 22:32:41,073 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/e0a387e790954342b8d410ac8f062164/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-11-21 22:32:41,073 [output] Cleaning up...
-2013-11-21 22:32:42,123 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/56/56287/10/check/gate-real-db-upgrade_nova_mysql_devstack_20131007/e0a387e/nova-patchset.conf db sync
-2013-11-21 22:32:43,902 [output] 133 -> 134...
-2013-11-21 22:32:44,039 [output] done
-2013-11-21 22:32:44,039 [output] 134 -> 135...
-2013-11-21 22:32:44,146 [output] done
-2013-11-21 22:32:44,146 [output] 135 -> 136...
-2013-11-21 22:32:44,239 [output] done
-2013-11-21 22:32:44,240 [output] 136 -> 137...
-2013-11-21 22:32:44,298 [output] done
-2013-11-21 22:32:44,298 [output] 137 -> 138...
-2013-11-21 22:32:44,378 [output] done
-2013-11-21 22:32:44,378 [output] 138 -> 139...
-2013-11-21 22:32:44,478 [output] done
-2013-11-21 22:32:44,479 [output] 139 -> 140...
-2013-11-21 22:32:44,499 [output] done
-2013-11-21 22:32:44,499 [output] 140 -> 141...
-2013-11-21 22:32:44,566 [output] done
-2013-11-21 22:32:44,566 [output] 141 -> 142...
-2013-11-21 22:32:44,623 [output] done
-2013-11-21 22:32:44,624 [output] 142 -> 143...
-2013-11-21 22:32:44,731 [output] done
-2013-11-21 22:32:44,731 [output] 143 -> 144...
-2013-11-21 22:32:44,888 [output] done
-2013-11-21 22:32:44,889 [output] 144 -> 145...
-2013-11-21 22:32:44,946 [output] done
-2013-11-21 22:32:44,947 [output] 145 -> 146...
-2013-11-21 22:32:45,006 [output] done
-2013-11-21 22:32:45,006 [output] 146 -> 147...
-2013-11-21 22:32:45,070 [output] done
-2013-11-21 22:32:45,070 [output] 147 -> 148...
-2013-11-21 22:32:45,245 [output] done
-2013-11-21 22:32:45,245 [output] 148 -> 149...
-2013-11-21 22:32:45,909 [output] done
-2013-11-21 22:32:45,909 [output] 149 -> 150...
-2013-11-21 22:32:46,046 [output] done
-2013-11-21 22:32:46,046 [output] 150 -> 151...
-2013-11-21 22:32:46,129 [output] done
-2013-11-21 22:32:46,129 [output] 151 -> 152...
-2013-11-21 22:32:51,484 [output] done
-2013-11-21 22:32:51,484 [output] 152 -> 153...
-2013-11-21 22:32:51,526 [output] done
-2013-11-21 22:32:51,526 [output] 153 -> 154...
-2013-11-21 22:32:53,696 [output] done
-2013-11-21 22:32:53,697 [output] 154 -> 155...
-2013-11-21 22:32:53,838 [output] done
-2013-11-21 22:32:53,838 [output] 155 -> 156...
-2013-11-21 22:32:54,053 [output] done
-2013-11-21 22:32:54,053 [output] 156 -> 157...
-2013-11-21 22:32:54,175 [output] done
-2013-11-21 22:32:54,176 [output] 157 -> 158...
-2013-11-21 22:32:54,280 [output] done
-2013-11-21 22:32:54,280 [output] 158 -> 159...
-2013-11-21 22:32:54,780 [output] done
-2013-11-21 22:32:54,781 [output] 159 -> 160...
-2013-11-21 22:32:54,806 [output] done
-2013-11-21 22:32:54,807 [output] 160 -> 161...
-2013-11-21 22:32:54,815 [output] done
-2013-11-21 22:32:54,815 [output] 161 -> 162...
-2013-11-21 22:32:54,840 [output] done
-2013-11-21 22:32:54,840 [output] 162 -> 163...
-2013-11-21 22:32:54,840 [output] done
-2013-11-21 22:32:54,840 [output] 163 -> 164...
-2013-11-21 22:32:54,840 [output] done
-2013-11-21 22:32:54,840 [output] 164 -> 165...
-2013-11-21 22:32:54,841 [output] done
-2013-11-21 22:32:54,841 [output] 165 -> 166...
-2013-11-21 22:32:54,841 [output] done
-2013-11-21 22:32:54,841 [output] 166 -> 167...
-2013-11-21 22:32:54,858 [output] done
-2013-11-21 22:32:54,858 [output] 167 -> 168...
-2013-11-21 22:32:54,858 [output] done
-2013-11-21 22:32:54,859 [output] 168 -> 169...
-2013-11-21 22:32:54,863 [output] done
-2013-11-21 22:32:54,863 [output] 169 -> 170...
-2013-11-21 22:32:54,885 [output] done
-2013-11-21 22:32:54,885 [output] 170 -> 171...
-2013-11-21 22:32:54,890 [output] done
-2013-11-21 22:32:54,890 [output] 171 -> 172...
-2013-11-21 22:32:55,062 [output] done
-2013-11-21 22:32:55,062 [output] 172 -> 173...
-2013-11-21 22:32:55,151 [output] done
-2013-11-21 22:32:55,151 [output] 173 -> 174...
-2013-11-21 22:32:55,214 [output] done
-2013-11-21 22:32:55,214 [output] 174 -> 175...
-2013-11-21 22:32:55,374 [output] done
-2013-11-21 22:32:55,375 [output] 175 -> 176...
-2013-11-21 22:32:55,410 [output] done
-2013-11-21 22:32:55,410 [output] 176 -> 177...
-2013-11-21 22:32:55,478 [output] done
-2013-11-21 22:32:55,478 [output] 177 -> 178...
-2013-11-21 22:32:55,552 [output] done
-2013-11-21 22:32:55,552 [output] 178 -> 179...
-2013-11-21 22:32:55,676 [output] done
-2013-11-21 22:32:55,677 [output] 179 -> 180...
-2013-11-21 22:32:55,775 [output] done
-2013-11-21 22:32:55,775 [output] 180 -> 181...
-2013-11-21 22:32:55,922 [output] done
-2013-11-21 22:32:55,922 [output] 181 -> 182...
-2013-11-21 22:32:56,065 [output] done
-2013-11-21 22:32:56,065 [output] 182 -> 183...
-2013-11-21 22:32:56,090 [output] done
-2013-11-21 22:32:56,091 [output] 183 -> 184...
-2013-11-21 22:32:56,586 [output] done
-2013-11-21 22:32:56,586 [output] 184 -> 185...
-2013-11-21 22:32:57,642 [output] done
-2013-11-21 22:32:57,643 [output] 185 -> 186...
-2013-11-21 22:32:58,165 [output] done
-2013-11-21 22:32:58,165 [output] 186 -> 187...
-2013-11-21 22:32:58,642 [output] done
-2013-11-21 22:32:58,642 [output] 187 -> 188...
-2013-11-21 22:32:58,750 [output] done
-2013-11-21 22:32:58,751 [output] 188 -> 189...
-2013-11-21 22:32:58,826 [output] done
-2013-11-21 22:32:58,827 [output] 189 -> 190...
-2013-11-21 22:32:58,870 [output] done
-2013-11-21 22:32:58,871 [output] 190 -> 191...
-2013-11-21 22:32:58,905 [output] done
-2013-11-21 22:32:58,905 [output] 191 -> 192...
-2013-11-21 22:32:59,057 [output] done
-2013-11-21 22:32:59,057 [output] 192 -> 193...
-2013-11-21 22:32:59,470 [output] done
-2013-11-21 22:32:59,470 [output] 193 -> 194...
-2013-11-21 22:33:00,490 [heartbeat]
-2013-11-21 22:33:01,050 [output] done
-2013-11-21 22:33:01,051 [output] 194 -> 195...
-2013-11-21 22:33:01,162 [output] done
-2013-11-21 22:33:01,162 [output] 195 -> 196...
-2013-11-21 22:33:01,300 [output] done
-2013-11-21 22:33:01,300 [output] 196 -> 197...
-2013-11-21 22:33:01,385 [output] done
-2013-11-21 22:33:01,385 [output] 197 -> 198...
-2013-11-21 22:33:01,486 [output] done
-2013-11-21 22:33:01,486 [output] 198 -> 199...
-2013-11-21 22:33:01,558 [output] done
-2013-11-21 22:33:01,558 [output] 199 -> 200...
-2013-11-21 22:33:02,049 [output] done
-2013-11-21 22:33:02,049 [output] 200 -> 201...
-2013-11-21 22:33:02,073 [output] done
-2013-11-21 22:33:02,074 [output] 201 -> 202...
-2013-11-21 22:33:02,208 [output] done
-2013-11-21 22:33:02,208 [output] 202 -> 203...
-2013-11-21 22:33:02,641 [output] done
-2013-11-21 22:33:02,642 [output] 203 -> 204...
-2013-11-21 22:33:02,726 [output] done
-2013-11-21 22:33:02,726 [output] 204 -> 205...
-2013-11-21 22:33:02,886 [output] done
-2013-11-21 22:33:02,886 [output] 205 -> 206...
-2013-11-21 22:33:03,142 [output] done
-2013-11-21 22:33:03,143 [output] 206 -> 207...
-2013-11-21 22:33:03,320 [output] done
-2013-11-21 22:33:03,320 [output] 207 -> 208...
-2013-11-21 22:33:03,602 [output] done
-2013-11-21 22:33:03,602 [output] 208 -> 209...
-2013-11-21 22:33:04,392 [output] done
-2013-11-21 22:33:04,392 [output] 209 -> 210...
-2013-11-21 22:33:04,622 [output] done
-2013-11-21 22:33:04,622 [output] 210 -> 211...
-2013-11-21 22:33:04,761 [output] done
-2013-11-21 22:33:04,769 [output] 211 -> 212...
-2013-11-21 22:33:04,872 [output] done
-2013-11-21 22:33:04,872 [output] 212 -> 213...
-2013-11-21 22:33:05,180 [output] done
-2013-11-21 22:33:05,180 [output] 213 -> 214...
-2013-11-21 22:33:05,722 [output] done
-2013-11-21 22:33:05,723 [output] 214 -> 215...
-2013-11-21 22:33:05,754 [output] done
-2013-11-21 22:33:05,754 [output] 215 -> 216...
-2013-11-21 22:33:05,854 [output] done
-2013-11-21 22:33:05,856 [output] 216 -> 217...
-2013-11-21 22:33:05,879 [output] done
-2013-11-21 22:33:05,879 [output] 217 -> 218...
-2013-11-21 22:33:05,884 [output] done
-2013-11-21 22:33:05,884 [output] 218 -> 219...
-2013-11-21 22:33:05,934 [output] done
-2013-11-21 22:33:05,935 [output] 219 -> 220...
-2013-11-21 22:33:05,937 [output] done
-2013-11-21 22:33:05,937 [output] 220 -> 221...
-2013-11-21 22:33:05,942 [output] done
-2013-11-21 22:33:05,942 [output] 221 -> 222...
-2013-11-21 22:33:05,951 [output] done
-2013-11-21 22:33:05,951 [output] 222 -> 223...
-2013-11-21 22:33:05,952 [output] done
-2013-11-21 22:33:05,952 [output] 223 -> 224...
-2013-11-21 22:33:05,967 [output] done
-2013-11-21 22:33:05,974 [output] 224 -> 225...
-2013-11-21 22:33:06,002 [output] done
-2013-11-21 22:33:06,002 [output] 225 -> 226...
-2013-11-21 22:33:06,002 [output] done
-2013-11-21 22:33:06,003 [output] 226 -> 227...
-2013-11-21 22:33:06,023 [output] done
-2013-11-21 22:33:06,023 [output] 227 -> 228...
-2013-11-21 22:33:06,286 [output] done
-2013-11-21 22:33:06,666 [output] + set +x
-2013-11-21 22:33:06,667 [output] ***** Finished DB upgrade to state of patchset *****
-2013-11-21 22:33:06,686 [output] Final schema version is 228
-2013-11-21 22:33:06,829 [output] Switched to branch 'master'
-2013-11-21 22:33:06,905 [output] Deleted branch working (was d9deb04).
-2013-11-21 22:33:06,905 [output] Cleaning up virtual env
-2013-11-21 22:33:09,362 [output] Removing e0a387e790954342b8d410ac8f062164...
-2013-11-21 22:33:14,787 [script exit code = 0]
diff --git a/tests/assets/logcontent b/tests/assets/logcontent
deleted file mode 100644
index 3f2c334..0000000
--- a/tests/assets/logcontent
+++ /dev/null
@@ -1,1490 +0,0 @@
-2013-12-24 05:14:28,492 [output] Test running on thw09-percona.rcbops.com
-2013-12-24 05:14:28,493 [output] To execute this script manually, run this:
-2013-12-24 05:14:28,493 [output] /usr/local/lib/python2.7/dist-packages/turbo_hipster/task_plugins/gate_real_db_upgrade/nova_mysql_migrations.sh d6a119ba740447589c347a83e5bd4d48 /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova nova tester nova_datasets_user_001 /var/lib/turbo-hipster/datasets_user_001/user_001/nova_user_001.sql /var/lib/turbo-hipster/datasets_user_001/user_001/logging.conf /var/cache/pip
-2013-12-24 05:14:28,494 [output] Restoring test database nova_datasets_user_001
-2013-12-24 05:14:28,494 [output] + mysql -u nova --password=tester -e 'drop database nova_datasets_user_001'
-2013-12-24 05:14:32,395 [output] + mysql -u nova --password=tester -e 'create database nova_datasets_user_001'
-2013-12-24 05:14:32,407 [output] + mysql -u nova --password=tester nova_datasets_user_001
-2013-12-24 05:14:58,482 [heartbeat]
-2013-12-24 05:15:28,482 [heartbeat]
-2013-12-24 05:15:58,483 [heartbeat]
-2013-12-24 05:16:28,483 [heartbeat]
-2013-12-24 05:16:58,484 [heartbeat]
-2013-12-24 05:17:01,211 [syslog] Dec 24 05:17:01 thw09-percona CRON[23920]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
-2013-12-24 05:17:11,291 [output] + set +x
-2013-12-24 05:17:11,291 [output] Build test environment
-2013-12-24 05:17:11,291 [output] Setting up virtual env
-2013-12-24 05:17:15,805 [output] New python executable in d6a119ba740447589c347a83e5bd4d48/bin/python
-2013-12-24 05:17:17,040 [output] Installing Setuptools..............................................................................................................................................................................................................................done.
-2013-12-24 05:17:17,840 [output] Installing Pip.....................................................................................................................................................................................................................................................................................................................................done.
-2013-12-24 05:17:17,997 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin/predeactivate
-2013-12-24 05:17:17,997 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin/postdeactivate
-2013-12-24 05:17:17,998 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin/preactivate
-2013-12-24 05:17:17,998 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin/postactivate
-2013-12-24 05:17:17,998 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin/get_env_details
-2013-12-24 05:17:19,312 [output] Enabled global site-packages
-2013-12-24 05:17:19,701 [output] Deleted branch working (was 18241f2).
-2013-12-24 05:17:19,806 [output] Switched to a new branch 'working'
-2013-12-24 05:17:19,832 [output] Schema version is 133
-2013-12-24 05:17:19,832 [output] Database is from Folsom! Upgrade via Grizzly
-2013-12-24 05:17:25,270 [output] Switched to branch 'stable/grizzly'
-2013-12-24 05:17:28,484 [heartbeat]
-2013-12-24 05:17:35,955 [output] Install pip requirements from tools/pip-requires
-2013-12-24 05:17:58,587 [heartbeat]
-2013-12-24 05:18:28,588 [heartbeat]
-2013-12-24 05:18:58,588 [heartbeat]
-2013-12-24 05:19:28,588 [heartbeat]
-2013-12-24 05:19:58,589 [heartbeat]
-2013-12-24 05:20:28,589 [heartbeat]
-2013-12-24 05:20:58,590 [heartbeat]
-2013-12-24 05:21:28,590 [heartbeat]
-2013-12-24 05:21:50,494 [output] Requirements installed
-2013-12-24 05:21:58,590 [heartbeat]
-2013-12-24 05:22:06,611 [output] ***** Start DB upgrade to state of grizzly *****
-2013-12-24 05:22:06,612 [output] No such file: /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova/nova/bin/nova-manage
-2013-12-24 05:22:06,612 [output] Setting up the nova-manage entry point
-2013-12-24 05:22:24,796 [output] warning: no files found matching 'AUTHORS'
-2013-12-24 05:22:24,802 [output] warning: no files found matching 'ChangeLog'
-2013-12-24 05:22:24,828 [output] warning: no previously-included files matching '*.pyc' found anywhere in distribution
-2013-12-24 05:22:28,302 [output] warning: no files found matching 'AUTHORS'
-2013-12-24 05:22:28,308 [output] warning: no files found matching 'ChangeLog'
-2013-12-24 05:22:28,334 [output] warning: no previously-included files matching '*.pyc' found anywhere in distribution
-2013-12-24 05:22:28,591 [heartbeat]
-2013-12-24 05:22:41,589 [output] zip_safe flag not set; analyzing archive contents...
-2013-12-24 05:22:41,590 [output] nova.crypto: module references __file__
-2013-12-24 05:22:41,592 [output] nova.utils: module references __file__
-2013-12-24 05:22:41,592 [output] nova.service: module MAY be using inspect.stack
-2013-12-24 05:22:41,595 [output] nova.loadables: module references __path__
-2013-12-24 05:22:41,595 [output] nova.paths: module references __file__
-2013-12-24 05:22:41,652 [output] nova.virt.baremetal.db.sqlalchemy.migration: module references __file__
-2013-12-24 05:22:41,665 [output] nova.openstack.common.log: module MAY be using inspect.stack
-2013-12-24 05:22:41,666 [output] nova.openstack.common.setup: module references __file__
-2013-12-24 05:22:41,671 [output] nova.openstack.common.rpc.__init__: module MAY be using inspect.stack
-2013-12-24 05:22:41,676 [output] nova.openstack.common.db.sqlalchemy.session: module references __file__
-2013-12-24 05:22:41,685 [output] nova.tests.test_migrations: module references __file__
-2013-12-24 05:22:41,701 [output] nova.tests.test_misc: module references __file__
-2013-12-24 05:22:41,720 [output] nova.tests.test_xenapi: module references __file__
-2013-12-24 05:22:41,733 [output] nova.tests.test_nova_manage: module references __file__
-2013-12-24 05:22:41,735 [output] nova.tests.test_wsgi: module references __file__
-2013-12-24 05:22:41,756 [output] nova.tests.integrated.test_api_samples: module references __file__
-2013-12-24 05:22:41,772 [output] nova.tests.baremetal.test_nova_baremetal_deploy_helper: module references __file__
-2013-12-24 05:22:41,774 [output] nova.tests.baremetal.test_nova_baremetal_manage: module references __file__
-2013-12-24 05:22:41,829 [output] nova.tests.api.ec2.test_cloud: module references __file__
-2013-12-24 05:22:41,849 [output] nova.tests.image.test_s3: module references __file__
-2013-12-24 05:22:41,885 [output] nova.api.openstack.compute.contrib.__init__: module references __path__
-2013-12-24 05:22:41,911 [output] nova.db.sqlalchemy.migration: module references __file__
-2013-12-24 05:22:41,924 [output] nova.network.linux_net: module MAY be using inspect.stack
-2013-12-24 05:22:48,097 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b/nova-grizzly.conf --verbose db sync
-2013-12-24 05:22:50,034 [output] 133 -> 134...
-2013-12-24 05:22:50,609 [output] done
-2013-12-24 05:22:50,610 [output] 134 -> 135...
-2013-12-24 05:22:58,591 [heartbeat]
-2013-12-24 05:23:28,592 [heartbeat]
-2013-12-24 05:23:58,592 [heartbeat]
-2013-12-24 05:24:28,592 [heartbeat]
-2013-12-24 05:24:38,787 [output] done
-2013-12-24 05:24:38,787 [output] 135 -> 136...
-2013-12-24 05:24:40,777 [output] done
-2013-12-24 05:24:40,777 [output] 136 -> 137...
-2013-12-24 05:24:41,557 [output] done
-2013-12-24 05:24:41,557 [output] 137 -> 138...
-2013-12-24 05:24:58,593 [heartbeat]
-2013-12-24 05:25:28,593 [heartbeat]
-2013-12-24 05:25:58,593 [heartbeat]
-2013-12-24 05:26:28,594 [heartbeat]
-2013-12-24 05:26:40,643 [output] done
-2013-12-24 05:26:40,644 [output] 138 -> 139...
-2013-12-24 05:26:40,826 [output] done
-2013-12-24 05:26:40,826 [output] 139 -> 140...
-2013-12-24 05:26:40,876 [output] done
-2013-12-24 05:26:40,876 [output] 140 -> 141...
-2013-12-24 05:26:41,028 [output] done
-2013-12-24 05:26:41,028 [output] 141 -> 142...
-2013-12-24 05:26:41,118 [output] done
-2013-12-24 05:26:41,119 [output] 142 -> 143...
-2013-12-24 05:26:45,094 [output] done
-2013-12-24 05:26:45,095 [output] 143 -> 144...
-2013-12-24 05:26:45,662 [output] done
-2013-12-24 05:26:45,662 [output] 144 -> 145...
-2013-12-24 05:26:45,692 [output] done
-2013-12-24 05:26:45,692 [output] 145 -> 146...
-2013-12-24 05:26:45,745 [output] done
-2013-12-24 05:26:45,745 [output] 146 -> 147...
-2013-12-24 05:26:45,787 [output] done
-2013-12-24 05:26:45,788 [output] 147 -> 148...
-2013-12-24 05:26:45,872 [output] done
-2013-12-24 05:26:45,872 [output] 148 -> 149...
-2013-12-24 05:26:58,594 [heartbeat]
-2013-12-24 05:27:28,594 [heartbeat]
-2013-12-24 05:27:58,595 [heartbeat]
-2013-12-24 05:28:28,595 [heartbeat]
-2013-12-24 05:28:58,596 [heartbeat]
-2013-12-24 05:29:28,596 [heartbeat]
-2013-12-24 05:29:52,184 [output] done
-2013-12-24 05:29:52,184 [output] 149 -> 150...
-2013-12-24 05:29:53,377 [output] done
-2013-12-24 05:29:53,377 [output] 150 -> 151...
-2013-12-24 05:29:53,410 [output] done
-2013-12-24 05:29:53,411 [output] 151 -> 152...
-2013-12-24 05:29:58,596 [heartbeat]
-2013-12-24 05:30:28,597 [heartbeat]
-2013-12-24 05:30:58,597 [heartbeat]
-2013-12-24 05:31:28,597 [heartbeat]
-2013-12-24 05:31:58,598 [heartbeat]
-2013-12-24 05:32:28,598 [heartbeat]
-2013-12-24 05:32:58,599 [heartbeat]
-2013-12-24 05:33:28,599 [heartbeat]
-2013-12-24 05:33:58,599 [heartbeat]
-2013-12-24 05:34:09,330 [output] done
-2013-12-24 05:34:09,331 [output] 152 -> 153...
-2013-12-24 05:34:15,709 [output] done
-2013-12-24 05:34:15,709 [output] 153 -> 154...
-2013-12-24 05:34:16,547 [output] done
-2013-12-24 05:34:16,547 [output] 154 -> 155...
-2013-12-24 05:34:16,616 [output] done
-2013-12-24 05:34:16,617 [output] 155 -> 156...
-2013-12-24 05:34:16,643 [output] done
-2013-12-24 05:34:16,643 [output] 156 -> 157...
-2013-12-24 05:34:16,653 [output] done
-2013-12-24 05:34:16,653 [output] 157 -> 158...
-2013-12-24 05:34:16,682 [output] done
-2013-12-24 05:34:16,682 [output] 158 -> 159...
-2013-12-24 05:34:28,600 [heartbeat]
-2013-12-24 05:34:58,600 [heartbeat]
-2013-12-24 05:35:06,350 [output] done
-2013-12-24 05:35:06,350 [output] 159 -> 160...
-2013-12-24 05:35:07,306 [output] done
-2013-12-24 05:35:07,306 [output] 160 -> 161...
-2013-12-24 05:35:08,313 [output] done
-2013-12-24 05:35:08,695 [output] + manage_exit=0
-2013-12-24 05:35:08,695 [output] + set +x
-2013-12-24 05:35:08,696 [output] nova-manage returned exit code 0
-2013-12-24 05:35:08,696 [output] ***** Finished DB upgrade to state of grizzly *****
-2013-12-24 05:35:09,062 [output] Schema version is 161
-2013-12-24 05:35:09,063 [output] Database is from Grizzly! Upgrade via Havana
-2013-12-24 05:35:12,068 [output] Switched to branch 'stable/havana'
-2013-12-24 05:35:13,934 [output] Install pip requirements from requirements.txt
-2013-12-24 05:35:17,065 [output] Requirements installed
-2013-12-24 05:35:17,179 [output] ***** Start DB upgrade to state of havana *****
-2013-12-24 05:35:17,180 [output] No such file: /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova/nova/bin/nova-manage
-2013-12-24 05:35:17,180 [output] Setting up the nova-manage entry point
-2013-12-24 05:35:19,591 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:19,591 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,591 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,591 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,591 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.4.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,591 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.7.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr in /usr/lib/python2.7/dist-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.8 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:21,325 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.3.2 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:21,325 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:21,325 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.10 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:21,325 [output] Downloading/unpacking websockify>=0.5.1,<0.6
-2013-12-24 05:35:21,326 [output] Using download cache from /var/cache/pip/http%3A%2F%2Fwww.rcbops.com%2Fpypi%2Fmirror%2Fwebsockify%2Fwebsockify-0.5.1.tar.gz
-2013-12-24 05:35:21,326 [output] Running setup.py egg_info for package websockify
-2013-12-24 05:35:21,326 [output]
-2013-12-24 05:35:21,326 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:21,326 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /usr/lib/python2.7/dist-packages (from pbr>=0.5.21,<1.0)
-2013-12-24 05:35:21,326 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-12-24 05:35:21,326 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-12-24 05:35:21,326 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-12-24 05:35:21,326 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.7.2)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.7.2)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /usr/local/lib/python2.7/dist-packages (from Babel>=1.3)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /usr/local/lib/python2.7/dist-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:35:21,328 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:35:21,328 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:35:21,328 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-12-24 05:35:21,328 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:35:21,328 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:35:21,724 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:35:21,724 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:35:21,724 [output] Installing collected packages: websockify
-2013-12-24 05:35:21,724 [output] Found existing installation: websockify 0.3.0
-2013-12-24 05:35:21,725 [output] Uninstalling websockify:
-2013-12-24 05:35:21,725 [output] Successfully uninstalled websockify
-2013-12-24 05:35:21,725 [output] Running setup.py install for websockify
-2013-12-24 05:35:21,725 [output]
-2013-12-24 05:35:21,725 [output] Installing websockify script to /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin
-2013-12-24 05:35:21,725 [output] Successfully installed websockify
-2013-12-24 05:35:21,725 [output] Cleaning up...
-2013-12-24 05:35:27,446 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b/nova-havana.conf --verbose db sync
-2013-12-24 05:35:28,601 [heartbeat]
-2013-12-24 05:35:31,817 [output] 161 -> 162...
-2013-12-24 05:35:31,822 [output] done
-2013-12-24 05:35:31,822 [output] 162 -> 163...
-2013-12-24 05:35:31,826 [output] done
-2013-12-24 05:35:31,826 [output] 163 -> 164...
-2013-12-24 05:35:31,831 [output] done
-2013-12-24 05:35:31,831 [output] 164 -> 165...
-2013-12-24 05:35:31,836 [output] done
-2013-12-24 05:35:31,836 [output] 165 -> 166...
-2013-12-24 05:35:31,840 [output] done
-2013-12-24 05:35:31,840 [output] 166 -> 167...
-2013-12-24 05:35:31,844 [output] done
-2013-12-24 05:35:31,844 [output] 167 -> 168...
-2013-12-24 05:35:31,849 [output] done
-2013-12-24 05:35:31,849 [output] 168 -> 169...
-2013-12-24 05:35:31,853 [output] done
-2013-12-24 05:35:31,853 [output] 169 -> 170...
-2013-12-24 05:35:31,858 [output] done
-2013-12-24 05:35:31,858 [output] 170 -> 171...
-2013-12-24 05:35:31,862 [output] done
-2013-12-24 05:35:31,862 [output] 171 -> 172...
-2013-12-24 05:35:32,305 [output] done
-2013-12-24 05:35:32,306 [output] 172 -> 173...
-2013-12-24 05:35:32,397 [output] Deleted duplicated row with id: 2086 from table: key_pairs
-2013-12-24 05:35:32,398 [output] Deleted duplicated row with id: 2086 from table: key_pairs
-2013-12-24 05:35:32,399 [output] Deleted duplicated row with id: 1161 from table: key_pairs
-2013-12-24 05:35:32,399 [output] Deleted duplicated row with id: 1161 from table: key_pairs
-2013-12-24 05:35:32,407 [output] Deleted duplicated row with id: 1107 from table: key_pairs
-2013-12-24 05:35:32,407 [output] Deleted duplicated row with id: 1107 from table: key_pairs
-2013-12-24 05:35:32,738 [output] done
-2013-12-24 05:35:32,739 [output] 173 -> 174...
-2013-12-24 05:35:32,786 [output] done
-2013-12-24 05:35:32,786 [output] 174 -> 175...
-2013-12-24 05:35:32,820 [output] done
-2013-12-24 05:35:32,820 [output] 175 -> 176...
-2013-12-24 05:35:32,837 [output] done
-2013-12-24 05:35:32,837 [output] 176 -> 177...
-2013-12-24 05:35:32,904 [output] done
-2013-12-24 05:35:32,904 [output] 177 -> 178...
-2013-12-24 05:35:32,927 [output] done
-2013-12-24 05:35:32,927 [output] 178 -> 179...
-2013-12-24 05:35:32,974 [output] done
-2013-12-24 05:35:32,975 [output] 179 -> 180...
-2013-12-24 05:35:33,021 [output] done
-2013-12-24 05:35:33,021 [output] 180 -> 181...
-2013-12-24 05:35:33,059 [output] done
-2013-12-24 05:35:33,059 [output] 181 -> 182...
-2013-12-24 05:35:33,091 [output] done
-2013-12-24 05:35:33,091 [output] 182 -> 183...
-2013-12-24 05:35:33,106 [output] done
-2013-12-24 05:35:33,106 [output] 183 -> 184...
-2013-12-24 05:35:33,244 [output] done
-2013-12-24 05:35:33,244 [output] 184 -> 185...
-2013-12-24 05:35:40,277 [output] done
-2013-12-24 05:35:40,278 [output] 185 -> 186...
-2013-12-24 05:35:40,517 [output] done
-2013-12-24 05:35:40,517 [output] 186 -> 187...
-2013-12-24 05:35:40,620 [output] done
-2013-12-24 05:35:40,621 [output] 187 -> 188...
-2013-12-24 05:35:40,643 [output] done
-2013-12-24 05:35:40,644 [output] 188 -> 189...
-2013-12-24 05:35:40,672 [output] done
-2013-12-24 05:35:40,672 [output] 189 -> 190...
-2013-12-24 05:35:41,873 [output] done
-2013-12-24 05:35:41,873 [output] 190 -> 191...
-2013-12-24 05:35:41,926 [output] done
-2013-12-24 05:35:41,926 [output] 191 -> 192...
-2013-12-24 05:35:42,011 [output] done
-2013-12-24 05:35:42,011 [output] 192 -> 193...
-2013-12-24 05:35:42,354 [output] done
-2013-12-24 05:35:42,354 [output] 193 -> 194...
-2013-12-24 05:35:44,595 [output] done
-2013-12-24 05:35:44,596 [output] 194 -> 195...
-2013-12-24 05:35:44,730 [output] done
-2013-12-24 05:35:44,731 [output] 195 -> 196...
-2013-12-24 05:35:44,782 [output] done
-2013-12-24 05:35:44,782 [output] 196 -> 197...
-2013-12-24 05:35:44,810 [output] done
-2013-12-24 05:35:44,811 [output] 197 -> 198...
-2013-12-24 05:35:44,839 [output] done
-2013-12-24 05:35:44,840 [output] 198 -> 199...
-2013-12-24 05:35:44,869 [output] done
-2013-12-24 05:35:44,870 [output] 199 -> 200...
-2013-12-24 05:35:45,003 [output] done
-2013-12-24 05:35:45,003 [output] 200 -> 201...
-2013-12-24 05:35:45,011 [output] done
-2013-12-24 05:35:45,011 [output] 201 -> 202...
-2013-12-24 05:35:45,044 [output] done
-2013-12-24 05:35:45,044 [output] 202 -> 203...
-2013-12-24 05:35:52,958 [output] done
-2013-12-24 05:35:52,958 [output] 203 -> 204...
-2013-12-24 05:35:58,601 [heartbeat]
-2013-12-24 05:35:59,629 [output] done
-2013-12-24 05:35:59,629 [output] 204 -> 205...
-2013-12-24 05:36:27,289 [output] done
-2013-12-24 05:36:27,289 [output] 205 -> 206...
-2013-12-24 05:36:28,601 [heartbeat]
-2013-12-24 05:36:58,602 [heartbeat]
-2013-12-24 05:37:03,760 [output] done
-2013-12-24 05:37:03,760 [output] 206 -> 207...
-2013-12-24 05:37:03,872 [output] done
-2013-12-24 05:37:03,872 [output] 207 -> 208...
-2013-12-24 05:37:03,923 [output] done
-2013-12-24 05:37:03,923 [output] 208 -> 209...
-2013-12-24 05:37:05,003 [output] done
-2013-12-24 05:37:05,004 [output] 209 -> 210...
-2013-12-24 05:37:05,083 [output] done
-2013-12-24 05:37:05,083 [output] 210 -> 211...
-2013-12-24 05:37:05,160 [output] done
-2013-12-24 05:37:05,161 [output] 211 -> 212...
-2013-12-24 05:37:05,232 [output] done
-2013-12-24 05:37:05,233 [output] 212 -> 213...
-2013-12-24 05:37:05,349 [output] done
-2013-12-24 05:37:05,349 [output] 213 -> 214...
-2013-12-24 05:37:05,508 [output] done
-2013-12-24 05:37:05,508 [output] 214 -> 215...
-2013-12-24 05:37:05,580 [output] done
-2013-12-24 05:37:05,580 [output] 215 -> 216...
-2013-12-24 05:37:28,602 [heartbeat]
-2013-12-24 05:37:46,436 [output] done
-2013-12-24 05:37:46,820 [output] + manage_exit=0
-2013-12-24 05:37:46,820 [output] + set +x
-2013-12-24 05:37:46,820 [output] nova-manage returned exit code 0
-2013-12-24 05:37:46,821 [output] ***** Finished DB upgrade to state of havana *****
-2013-12-24 05:37:46,988 [output] Schema after stable_release_db_sync version is 216
-2013-12-24 05:37:47,101 [output] Update database to current state of trunk
-2013-12-24 05:37:50,276 [output] Switched to branch 'master'
-2013-12-24 05:37:50,933 [output] Install pip requirements from requirements.txt
-2013-12-24 05:37:56,962 [output] Requirements installed
-2013-12-24 05:37:57,685 [output] ***** Start DB upgrade to state of trunk *****
-2013-12-24 05:37:57,686 [output] No such file: /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova/nova/bin/nova-manage
-2013-12-24 05:37:57,686 [output] Setting up the nova-manage entry point
-2013-12-24 05:37:58,602 [heartbeat]
-2013-12-24 05:38:00,849 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:01,094 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,094 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,094 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,094 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.12.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,094 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,094 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:01,095 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,095 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,095 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,095 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,095 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,108 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,108 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,108 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.8.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr>=0.7.6 in /usr/lib/python2.7/dist-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.8 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,110 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:02,534 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:02,534 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:02,534 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.12 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:02,534 [output] Downloading/unpacking websockify>=0.5.1,<0.6
-2013-12-24 05:38:02,534 [output] Using download cache from /var/cache/pip/http%3A%2F%2Fwww.rcbops.com%2Fpypi%2Fmirror%2Fwebsockify%2Fwebsockify-0.5.1.tar.gz
-2013-12-24 05:38:02,535 [output] Running setup.py egg_info for package websockify
-2013-12-24 05:38:02,535 [output]
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): pycadf>=0.1.9 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /usr/lib/python2.7/dist-packages (from pbr>=0.5.21,<1.0)
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /usr/local/lib/python2.7/dist-packages (from Babel>=1.3)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /usr/local/lib/python2.7/dist-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:02,537 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:02,537 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:02,537 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-12-24 05:38:02,537 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:02,912 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:02,912 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:02,912 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:02,912 [output] Installing collected packages: websockify
-2013-12-24 05:38:02,912 [output] Found existing installation: websockify 0.3.0
-2013-12-24 05:38:02,913 [output] Uninstalling websockify:
-2013-12-24 05:38:02,913 [output] Successfully uninstalled websockify
-2013-12-24 05:38:02,913 [output] Running setup.py install for websockify
-2013-12-24 05:38:02,913 [output]
-2013-12-24 05:38:02,913 [output] Installing websockify script to /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin
-2013-12-24 05:38:02,913 [output] Successfully installed websockify
-2013-12-24 05:38:02,913 [output] Cleaning up...
-2013-12-24 05:38:06,814 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b/nova-trunk.conf --verbose db sync
-2013-12-24 05:38:08,338 [output] 216 -> 217...
-2013-12-24 05:38:08,451 [output] done
-2013-12-24 05:38:08,451 [output] 217 -> 218...
-2013-12-24 05:38:08,455 [output] done
-2013-12-24 05:38:08,455 [output] 218 -> 219...
-2013-12-24 05:38:08,460 [output] done
-2013-12-24 05:38:08,460 [output] 219 -> 220...
-2013-12-24 05:38:08,464 [output] done
-2013-12-24 05:38:08,464 [output] 220 -> 221...
-2013-12-24 05:38:08,469 [output] done
-2013-12-24 05:38:08,469 [output] 221 -> 222...
-2013-12-24 05:38:08,473 [output] done
-2013-12-24 05:38:08,473 [output] 222 -> 223...
-2013-12-24 05:38:08,477 [output] done
-2013-12-24 05:38:08,478 [output] 223 -> 224...
-2013-12-24 05:38:08,482 [output] done
-2013-12-24 05:38:08,482 [output] 224 -> 225...
-2013-12-24 05:38:08,486 [output] done
-2013-12-24 05:38:08,486 [output] 225 -> 226...
-2013-12-24 05:38:08,491 [output] done
-2013-12-24 05:38:08,491 [output] 226 -> 227...
-2013-12-24 05:38:08,512 [output] done
-2013-12-24 05:38:08,513 [output] 227 -> 228...
-2013-12-24 05:38:08,550 [output] done
-2013-12-24 05:38:08,550 [output] 228 -> 229...
-2013-12-24 05:38:08,579 [output] done
-2013-12-24 05:38:08,797 [output] + manage_exit=0
-2013-12-24 05:38:08,797 [output] + set +x
-2013-12-24 05:38:08,798 [output] nova-manage returned exit code 0
-2013-12-24 05:38:08,798 [output] ***** Finished DB upgrade to state of trunk *****
-2013-12-24 05:38:08,873 [output] Switched to branch 'working'
-2013-12-24 05:38:08,876 [output] Now test the patchset
-2013-12-24 05:38:09,510 [output] Install pip requirements from requirements.txt
-2013-12-24 05:38:11,885 [output] Requirements installed
-2013-12-24 05:38:12,398 [output] ***** Start DB upgrade to state of patchset *****
-2013-12-24 05:38:12,398 [output] No such file: /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova/nova/bin/nova-manage
-2013-12-24 05:38:12,398 [output] Setting up the nova-manage entry point
-2013-12-24 05:38:15,066 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.12.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.8.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr>=0.7.6 in /usr/lib/python2.7/dist-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.8 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:16,714 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:16,714 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:16,715 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.12 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:16,715 [output] Downloading/unpacking websockify>=0.5.1,<0.6
-2013-12-24 05:38:16,715 [output] Using download cache from /var/cache/pip/http%3A%2F%2Fwww.rcbops.com%2Fpypi%2Fmirror%2Fwebsockify%2Fwebsockify-0.5.1.tar.gz
-2013-12-24 05:38:16,715 [output] Running setup.py egg_info for package websockify
-2013-12-24 05:38:16,715 [output]
-2013-12-24 05:38:16,715 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:16,715 [output] Requirement already satisfied (use --upgrade to upgrade): pycadf>=0.1.9 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:16,715 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /usr/lib/python2.7/dist-packages (from pbr>=0.5.21,<1.0)
-2013-12-24 05:38:16,715 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /usr/local/lib/python2.7/dist-packages (from Babel>=1.3)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /usr/local/lib/python2.7/dist-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:17,101 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:17,101 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:17,101 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:17,101 [output] Installing collected packages: websockify
-2013-12-24 05:38:17,101 [output] Found existing installation: websockify 0.3.0
-2013-12-24 05:38:17,101 [output] Uninstalling websockify:
-2013-12-24 05:38:17,102 [output] Successfully uninstalled websockify
-2013-12-24 05:38:17,102 [output] Running setup.py install for websockify
-2013-12-24 05:38:17,102 [output]
-2013-12-24 05:38:17,102 [output] Installing websockify script to /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin
-2013-12-24 05:38:17,102 [output] Successfully installed websockify
-2013-12-24 05:38:17,102 [output] Cleaning up...
-2013-12-24 05:38:17,665 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b/nova-patchset.conf --verbose db sync
-2013-12-24 05:38:19,169 [output] + manage_exit=0
-2013-12-24 05:38:19,169 [output] + set +x
-2013-12-24 05:38:19,169 [output] nova-manage returned exit code 0
-2013-12-24 05:38:19,170 [output] ***** Finished DB upgrade to state of patchset *****
-2013-12-24 05:38:19,187 [output] Schema version is 229
-2013-12-24 05:38:19,187 [output] Now downgrade all the way back to the last stable version (v216)
-2013-12-24 05:38:19,674 [output] ***** Start DB upgrade to state of patchset *****
-2013-12-24 05:38:19,674 [output] No such file: /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova/nova/bin/nova-manage
-2013-12-24 05:38:19,674 [output] Setting up the nova-manage entry point
-2013-12-24 05:38:22,380 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:22,380 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,380 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,380 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,380 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.12.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,380 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.8.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr>=0.7.6 in /usr/lib/python2.7/dist-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.8 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,383 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,383 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:24,027 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:24,211 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:24,212 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.12 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:24,212 [output] Downloading/unpacking websockify>=0.5.1,<0.6
-2013-12-24 05:38:24,212 [output] Using download cache from /var/cache/pip/http%3A%2F%2Fwww.rcbops.com%2Fpypi%2Fmirror%2Fwebsockify%2Fwebsockify-0.5.1.tar.gz
-2013-12-24 05:38:24,212 [output] Running setup.py egg_info for package websockify
-2013-12-24 05:38:24,212 [output]
-2013-12-24 05:38:24,212 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:24,212 [output] Requirement already satisfied (use --upgrade to upgrade): pycadf>=0.1.9 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:24,214 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /usr/lib/python2.7/dist-packages (from pbr>=0.5.21,<1.0)
-2013-12-24 05:38:24,214 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-12-24 05:38:24,214 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-12-24 05:38:24,214 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-12-24 05:38:24,214 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:24,223 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /usr/local/lib/python2.7/dist-packages (from Babel>=1.3)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /usr/local/lib/python2.7/dist-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:24,225 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:24,225 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:24,225 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-12-24 05:38:24,225 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:24,410 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:24,410 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:24,410 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:24,410 [output] Installing collected packages: websockify
-2013-12-24 05:38:24,410 [output] Found existing installation: websockify 0.3.0
-2013-12-24 05:38:24,410 [output] Uninstalling websockify:
-2013-12-24 05:38:24,411 [output] Successfully uninstalled websockify
-2013-12-24 05:38:24,411 [output] Running setup.py install for websockify
-2013-12-24 05:38:24,411 [output]
-2013-12-24 05:38:24,411 [output] Installing websockify script to /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin
-2013-12-24 05:38:24,411 [output] Successfully installed websockify
-2013-12-24 05:38:24,411 [output] Cleaning up...
-2013-12-24 05:38:24,965 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b/nova-patchset.conf --verbose db sync --version 216
-2013-12-24 05:38:26,228 [output] 229 -> 228...
-2013-12-24 05:38:26,427 [output] done
-2013-12-24 05:38:26,428 [output] 228 -> 227...
-2013-12-24 05:38:26,455 [output] done
-2013-12-24 05:38:26,455 [output] 227 -> 226...
-2013-12-24 05:38:26,460 [output] done
-2013-12-24 05:38:26,460 [output] 226 -> 225...
-2013-12-24 05:38:26,464 [output] done
-2013-12-24 05:38:26,464 [output] 225 -> 224...
-2013-12-24 05:38:26,468 [output] done
-2013-12-24 05:38:26,468 [output] 224 -> 223...
-2013-12-24 05:38:26,473 [output] done
-2013-12-24 05:38:26,473 [output] 223 -> 222...
-2013-12-24 05:38:26,477 [output] done
-2013-12-24 05:38:26,477 [output] 222 -> 221...
-2013-12-24 05:38:26,481 [output] done
-2013-12-24 05:38:26,482 [output] 221 -> 220...
-2013-12-24 05:38:26,486 [output] done
-2013-12-24 05:38:26,486 [output] 220 -> 219...
-2013-12-24 05:38:26,490 [output] done
-2013-12-24 05:38:26,491 [output] 219 -> 218...
-2013-12-24 05:38:26,495 [output] done
-2013-12-24 05:38:26,495 [output] 218 -> 217...
-2013-12-24 05:38:26,499 [output] done
-2013-12-24 05:38:26,499 [output] 217 -> 216...
-2013-12-24 05:38:26,504 [output] done
-2013-12-24 05:38:26,722 [output] + manage_exit=0
-2013-12-24 05:38:26,723 [output] + set +x
-2013-12-24 05:38:26,723 [output] nova-manage returned exit code 0
-2013-12-24 05:38:26,723 [output] ***** Finished DB upgrade to state of patchset *****
-2013-12-24 05:38:26,746 [output] Schema version is 216
-2013-12-24 05:38:26,747 [output] And now back up to head from the start of trunk
-2013-12-24 05:38:26,816 [output] Already on 'working'
-2013-12-24 05:38:27,378 [output] ***** Start DB upgrade to state of patchset *****
-2013-12-24 05:38:27,378 [output] No such file: /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova/nova/bin/nova-manage
-2013-12-24 05:38:27,379 [output] Setting up the nova-manage entry point
-2013-12-24 05:38:28,603 [heartbeat]
-2013-12-24 05:38:30,066 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:30,066 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,066 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,066 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.12.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.8.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr>=0.7.6 in /usr/lib/python2.7/dist-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.8 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,069 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,069 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,069 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:31,691 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:31,692 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:31,692 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.12 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:31,692 [output] Downloading/unpacking websockify>=0.5.1,<0.6
-2013-12-24 05:38:31,692 [output] Using download cache from /var/cache/pip/http%3A%2F%2Fwww.rcbops.com%2Fpypi%2Fmirror%2Fwebsockify%2Fwebsockify-0.5.1.tar.gz
-2013-12-24 05:38:31,692 [output] Running setup.py egg_info for package websockify
-2013-12-24 05:38:31,692 [output]
-2013-12-24 05:38:31,692 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:31,692 [output] Requirement already satisfied (use --upgrade to upgrade): pycadf>=0.1.9 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:31,692 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /usr/lib/python2.7/dist-packages (from pbr>=0.5.21,<1.0)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /usr/local/lib/python2.7/dist-packages (from Babel>=1.3)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /usr/local/lib/python2.7/dist-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:32,077 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:32,077 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:32,077 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:32,078 [output] Installing collected packages: websockify
-2013-12-24 05:38:32,078 [output] Found existing installation: websockify 0.3.0
-2013-12-24 05:38:32,078 [output] Uninstalling websockify:
-2013-12-24 05:38:32,078 [output] Successfully uninstalled websockify
-2013-12-24 05:38:32,078 [output] Running setup.py install for websockify
-2013-12-24 05:38:32,078 [output]
-2013-12-24 05:38:32,078 [output] Installing websockify script to /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin
-2013-12-24 05:38:32,078 [output] Successfully installed websockify
-2013-12-24 05:38:32,078 [output] Cleaning up...
-2013-12-24 05:38:32,639 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b/nova-patchset.conf --verbose db sync
-2013-12-24 05:38:33,973 [output] 216 -> 217...
-2013-12-24 05:38:34,016 [output] done
-2013-12-24 05:38:34,017 [output] 217 -> 218...
-2013-12-24 05:38:34,022 [output] done
-2013-12-24 05:38:34,022 [output] 218 -> 219...
-2013-12-24 05:38:34,026 [output] done
-2013-12-24 05:38:34,026 [output] 219 -> 220...
-2013-12-24 05:38:34,030 [output] done
-2013-12-24 05:38:34,031 [output] 220 -> 221...
-2013-12-24 05:38:34,035 [output] done
-2013-12-24 05:38:34,035 [output] 221 -> 222...
-2013-12-24 05:38:34,039 [output] done
-2013-12-24 05:38:34,039 [output] 222 -> 223...
-2013-12-24 05:38:34,043 [output] done
-2013-12-24 05:38:34,043 [output] 223 -> 224...
-2013-12-24 05:38:34,048 [output] done
-2013-12-24 05:38:34,048 [output] 224 -> 225...
-2013-12-24 05:38:34,052 [output] done
-2013-12-24 05:38:34,052 [output] 225 -> 226...
-2013-12-24 05:38:34,056 [output] done
-2013-12-24 05:38:34,056 [output] 226 -> 227...
-2013-12-24 05:38:34,066 [output] done
-2013-12-24 05:38:34,066 [output] 227 -> 228...
-2013-12-24 05:38:34,099 [output] done
-2013-12-24 05:38:34,099 [output] 228 -> 229...
-2013-12-24 05:38:34,126 [output] done
-2013-12-24 05:38:34,339 [output] + manage_exit=0
-2013-12-24 05:38:34,339 [output] + set +x
-2013-12-24 05:38:34,340 [output] nova-manage returned exit code 0
-2013-12-24 05:38:34,340 [output] ***** Finished DB upgrade to state of patchset *****
-2013-12-24 05:38:34,362 [output] Final schema version is 229
-2013-12-24 05:38:34,362 [output] Cleaning up virtual env
-2013-12-24 05:38:35,354 [output] Removing d6a119ba740447589c347a83e5bd4d48...
-2013-12-24 05:38:37,955 [script exit code = 0]
- 2013-12-24 05:14:28,492 [output] Test running on thw09-percona.rcbops.com
-2013-12-24 05:14:28,493 [output] To execute this script manually, run this:
-2013-12-24 05:14:28,493 [output] /usr/local/lib/python2.7/dist-packages/turbo_hipster/task_plugins/gate_real_db_upgrade/nova_mysql_migrations.sh d6a119ba740447589c347a83e5bd4d48 /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova nova tester nova_datasets_user_001 /var/lib/turbo-hipster/datasets_user_001/user_001/nova_user_001.sql /var/lib/turbo-hipster/datasets_user_001/user_001/logging.conf /var/cache/pip
-2013-12-24 05:14:28,494 [output] Restoring test database nova_datasets_user_001
-2013-12-24 05:14:28,494 [output] + mysql -u nova --password=tester -e 'drop database nova_datasets_user_001'
-2013-12-24 05:14:32,395 [output] + mysql -u nova --password=tester -e 'create database nova_datasets_user_001'
-2013-12-24 05:14:32,407 [output] + mysql -u nova --password=tester nova_datasets_user_001
-2013-12-24 05:14:58,482 [heartbeat]
-2013-12-24 05:15:28,482 [heartbeat]
-2013-12-24 05:15:58,483 [heartbeat]
-2013-12-24 05:16:28,483 [heartbeat]
-2013-12-24 05:16:58,484 [heartbeat]
-2013-12-24 05:17:01,211 [syslog] Dec 24 05:17:01 thw09-percona CRON[23920]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
-2013-12-24 05:17:11,291 [output] + set +x
-2013-12-24 05:17:11,291 [output] Build test environment
-2013-12-24 05:17:11,291 [output] Setting up virtual env
-2013-12-24 05:17:15,805 [output] New python executable in d6a119ba740447589c347a83e5bd4d48/bin/python
-2013-12-24 05:17:17,040 [output] Installing Setuptools..............................................................................................................................................................................................................................done.
-2013-12-24 05:17:17,840 [output] Installing Pip.....................................................................................................................................................................................................................................................................................................................................done.
-2013-12-24 05:17:17,997 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin/predeactivate
-2013-12-24 05:17:17,997 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin/postdeactivate
-2013-12-24 05:17:17,998 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin/preactivate
-2013-12-24 05:17:17,998 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin/postactivate
-2013-12-24 05:17:17,998 [output] virtualenvwrapper.user_scripts creating /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin/get_env_details
-2013-12-24 05:17:19,312 [output] Enabled global site-packages
-2013-12-24 05:17:19,701 [output] Deleted branch working (was 18241f2).
-2013-12-24 05:17:19,806 [output] Switched to a new branch 'working'
-2013-12-24 05:17:19,832 [output] Schema version is 133
-2013-12-24 05:17:19,832 [output] Database is from Folsom! Upgrade via Grizzly
-2013-12-24 05:17:25,270 [output] Switched to branch 'stable/grizzly'
-2013-12-24 05:17:28,484 [heartbeat]
-2013-12-24 05:17:35,955 [output] Install pip requirements from tools/pip-requires
-2013-12-24 05:17:58,587 [heartbeat]
-2013-12-24 05:18:28,588 [heartbeat]
-2013-12-24 05:18:58,588 [heartbeat]
-2013-12-24 05:19:28,588 [heartbeat]
-2013-12-24 05:19:58,589 [heartbeat]
-2013-12-24 05:20:28,589 [heartbeat]
-2013-12-24 05:20:58,590 [heartbeat]
-2013-12-24 05:21:28,590 [heartbeat]
-2013-12-24 05:21:50,494 [output] Requirements installed
-2013-12-24 05:21:58,590 [heartbeat]
-2013-12-24 05:22:06,611 [output] ***** Start DB upgrade to state of grizzly *****
-2013-12-24 05:22:06,612 [output] No such file: /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova/nova/bin/nova-manage
-2013-12-24 05:22:06,612 [output] Setting up the nova-manage entry point
-2013-12-24 05:22:24,796 [output] warning: no files found matching 'AUTHORS'
-2013-12-24 05:22:24,802 [output] warning: no files found matching 'ChangeLog'
-2013-12-24 05:22:24,828 [output] warning: no previously-included files matching '*.pyc' found anywhere in distribution
-2013-12-24 05:22:28,302 [output] warning: no files found matching 'AUTHORS'
-2013-12-24 05:22:28,308 [output] warning: no files found matching 'ChangeLog'
-2013-12-24 05:22:28,334 [output] warning: no previously-included files matching '*.pyc' found anywhere in distribution
-2013-12-24 05:22:28,591 [heartbeat]
-2013-12-24 05:22:41,589 [output] zip_safe flag not set; analyzing archive contents...
-2013-12-24 05:22:41,590 [output] nova.crypto: module references __file__
-2013-12-24 05:22:41,592 [output] nova.utils: module references __file__
-2013-12-24 05:22:41,592 [output] nova.service: module MAY be using inspect.stack
-2013-12-24 05:22:41,595 [output] nova.loadables: module references __path__
-2013-12-24 05:22:41,595 [output] nova.paths: module references __file__
-2013-12-24 05:22:41,652 [output] nova.virt.baremetal.db.sqlalchemy.migration: module references __file__
-2013-12-24 05:22:41,665 [output] nova.openstack.common.log: module MAY be using inspect.stack
-2013-12-24 05:22:41,666 [output] nova.openstack.common.setup: module references __file__
-2013-12-24 05:22:41,671 [output] nova.openstack.common.rpc.__init__: module MAY be using inspect.stack
-2013-12-24 05:22:41,676 [output] nova.openstack.common.db.sqlalchemy.session: module references __file__
-2013-12-24 05:22:41,685 [output] nova.tests.test_migrations: module references __file__
-2013-12-24 05:22:41,701 [output] nova.tests.test_misc: module references __file__
-2013-12-24 05:22:41,720 [output] nova.tests.test_xenapi: module references __file__
-2013-12-24 05:22:41,733 [output] nova.tests.test_nova_manage: module references __file__
-2013-12-24 05:22:41,735 [output] nova.tests.test_wsgi: module references __file__
-2013-12-24 05:22:41,756 [output] nova.tests.integrated.test_api_samples: module references __file__
-2013-12-24 05:22:41,772 [output] nova.tests.baremetal.test_nova_baremetal_deploy_helper: module references __file__
-2013-12-24 05:22:41,774 [output] nova.tests.baremetal.test_nova_baremetal_manage: module references __file__
-2013-12-24 05:22:41,829 [output] nova.tests.api.ec2.test_cloud: module references __file__
-2013-12-24 05:22:41,849 [output] nova.tests.image.test_s3: module references __file__
-2013-12-24 05:22:41,885 [output] nova.api.openstack.compute.contrib.__init__: module references __path__
-2013-12-24 05:22:41,911 [output] nova.db.sqlalchemy.migration: module references __file__
-2013-12-24 05:22:41,924 [output] nova.network.linux_net: module MAY be using inspect.stack
-2013-12-24 05:22:48,097 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b/nova-grizzly.conf --verbose db sync
-2013-12-24 05:22:50,034 [output] 133 -> 134...
-2013-12-24 05:22:50,609 [output] done
-2013-12-24 05:22:50,610 [output] 134 -> 135...
-2013-12-24 05:22:58,591 [heartbeat]
-2013-12-24 05:23:28,592 [heartbeat]
-2013-12-24 05:23:58,592 [heartbeat]
-2013-12-24 05:24:28,592 [heartbeat]
-2013-12-24 05:24:38,787 [output] done
-2013-12-24 05:24:38,787 [output] 135 -> 136...
-2013-12-24 05:24:40,777 [output] done
-2013-12-24 05:24:40,777 [output] 136 -> 137...
-2013-12-24 05:24:41,557 [output] done
-2013-12-24 05:24:41,557 [output] 137 -> 138...
-2013-12-24 05:24:58,593 [heartbeat]
-2013-12-24 05:25:28,593 [heartbeat]
-2013-12-24 05:25:58,593 [heartbeat]
-2013-12-24 05:26:28,594 [heartbeat]
-2013-12-24 05:26:40,643 [output] done
-2013-12-24 05:26:40,644 [output] 138 -> 139...
-2013-12-24 05:26:40,826 [output] done
-2013-12-24 05:26:40,826 [output] 139 -> 140...
-2013-12-24 05:26:40,876 [output] done
-2013-12-24 05:26:40,876 [output] 140 -> 141...
-2013-12-24 05:26:41,028 [output] done
-2013-12-24 05:26:41,028 [output] 141 -> 142...
-2013-12-24 05:26:41,118 [output] done
-2013-12-24 05:26:41,119 [output] 142 -> 143...
-2013-12-24 05:26:45,094 [output] done
-2013-12-24 05:26:45,095 [output] 143 -> 144...
-2013-12-24 05:26:45,662 [output] done
-2013-12-24 05:26:45,662 [output] 144 -> 145...
-2013-12-24 05:26:45,692 [output] done
-2013-12-24 05:26:45,692 [output] 145 -> 146...
-2013-12-24 05:26:45,745 [output] done
-2013-12-24 05:26:45,745 [output] 146 -> 147...
-2013-12-24 05:26:45,787 [output] done
-2013-12-24 05:26:45,788 [output] 147 -> 148...
-2013-12-24 05:26:45,872 [output] done
-2013-12-24 05:26:45,872 [output] 148 -> 149...
-2013-12-24 05:26:58,594 [heartbeat]
-2013-12-24 05:27:28,594 [heartbeat]
-2013-12-24 05:27:58,595 [heartbeat]
-2013-12-24 05:28:28,595 [heartbeat]
-2013-12-24 05:28:58,596 [heartbeat]
-2013-12-24 05:29:28,596 [heartbeat]
-2013-12-24 05:29:52,184 [output] done
-2013-12-24 05:29:52,184 [output] 149 -> 150...
-2013-12-24 05:29:53,377 [output] done
-2013-12-24 05:29:53,377 [output] 150 -> 151...
-2013-12-24 05:29:53,410 [output] done
-2013-12-24 05:29:53,411 [output] 151 -> 152...
-2013-12-24 05:29:58,596 [heartbeat]
-2013-12-24 05:30:28,597 [heartbeat]
-2013-12-24 05:30:58,597 [heartbeat]
-2013-12-24 05:31:28,597 [heartbeat]
-2013-12-24 05:31:58,598 [heartbeat]
-2013-12-24 05:32:28,598 [heartbeat]
-2013-12-24 05:32:58,599 [heartbeat]
-2013-12-24 05:33:28,599 [heartbeat]
-2013-12-24 05:33:58,599 [heartbeat]
-2013-12-24 05:34:09,330 [output] done
-2013-12-24 05:34:09,331 [output] 152 -> 153...
-2013-12-24 05:34:15,709 [output] done
-2013-12-24 05:34:15,709 [output] 153 -> 154...
-2013-12-24 05:34:16,547 [output] done
-2013-12-24 05:34:16,547 [output] 154 -> 155...
-2013-12-24 05:34:16,616 [output] done
-2013-12-24 05:34:16,617 [output] 155 -> 156...
-2013-12-24 05:34:16,643 [output] done
-2013-12-24 05:34:16,643 [output] 156 -> 157...
-2013-12-24 05:34:16,653 [output] done
-2013-12-24 05:34:16,653 [output] 157 -> 158...
-2013-12-24 05:34:16,682 [output] done
-2013-12-24 05:34:16,682 [output] 158 -> 159...
-2013-12-24 05:34:28,600 [heartbeat]
-2013-12-24 05:34:58,600 [heartbeat]
-2013-12-24 05:35:06,350 [output] done
-2013-12-24 05:35:06,350 [output] 159 -> 160...
-2013-12-24 05:35:07,306 [output] done
-2013-12-24 05:35:07,306 [output] 160 -> 161...
-2013-12-24 05:35:08,313 [output] done
-2013-12-24 05:35:08,695 [output] + manage_exit=0
-2013-12-24 05:35:08,695 [output] + set +x
-2013-12-24 05:35:08,696 [output] nova-manage returned exit code 0
-2013-12-24 05:35:08,696 [output] ***** Finished DB upgrade to state of grizzly *****
-2013-12-24 05:35:09,062 [output] Schema version is 161
-2013-12-24 05:35:09,063 [output] Database is from Grizzly! Upgrade via Havana
-2013-12-24 05:35:12,068 [output] Switched to branch 'stable/havana'
-2013-12-24 05:35:13,934 [output] Install pip requirements from requirements.txt
-2013-12-24 05:35:17,065 [output] Requirements installed
-2013-12-24 05:35:17,179 [output] ***** Start DB upgrade to state of havana *****
-2013-12-24 05:35:17,180 [output] No such file: /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova/nova/bin/nova-manage
-2013-12-24 05:35:17,180 [output] Setting up the nova-manage entry point
-2013-12-24 05:35:19,591 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:19,591 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,591 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,591 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,591 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.4.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,591 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.7.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,592 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr in /usr/lib/python2.7/dist-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.8 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:19,593 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:21,325 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.3.2 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:21,325 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:21,325 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.10 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:35:21,325 [output] Downloading/unpacking websockify>=0.5.1,<0.6
-2013-12-24 05:35:21,326 [output] Using download cache from /var/cache/pip/http%3A%2F%2Fwww.rcbops.com%2Fpypi%2Fmirror%2Fwebsockify%2Fwebsockify-0.5.1.tar.gz
-2013-12-24 05:35:21,326 [output] Running setup.py egg_info for package websockify
-2013-12-24 05:35:21,326 [output]
-2013-12-24 05:35:21,326 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:35:21,326 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /usr/lib/python2.7/dist-packages (from pbr>=0.5.21,<1.0)
-2013-12-24 05:35:21,326 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-12-24 05:35:21,326 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-12-24 05:35:21,326 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-12-24 05:35:21,326 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.7.2)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.7.2)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /usr/local/lib/python2.7/dist-packages (from Babel>=1.3)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:35:21,327 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /usr/local/lib/python2.7/dist-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:35:21,328 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:35:21,328 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:35:21,328 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-12-24 05:35:21,328 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:35:21,328 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:35:21,724 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:35:21,724 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:35:21,724 [output] Installing collected packages: websockify
-2013-12-24 05:35:21,724 [output] Found existing installation: websockify 0.3.0
-2013-12-24 05:35:21,725 [output] Uninstalling websockify:
-2013-12-24 05:35:21,725 [output] Successfully uninstalled websockify
-2013-12-24 05:35:21,725 [output] Running setup.py install for websockify
-2013-12-24 05:35:21,725 [output]
-2013-12-24 05:35:21,725 [output] Installing websockify script to /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin
-2013-12-24 05:35:21,725 [output] Successfully installed websockify
-2013-12-24 05:35:21,725 [output] Cleaning up...
-2013-12-24 05:35:27,446 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b/nova-havana.conf --verbose db sync
-2013-12-24 05:35:28,601 [heartbeat]
-2013-12-24 05:35:31,817 [output] 161 -> 162...
-2013-12-24 05:35:31,822 [output] done
-2013-12-24 05:35:31,822 [output] 162 -> 163...
-2013-12-24 05:35:31,826 [output] done
-2013-12-24 05:35:31,826 [output] 163 -> 164...
-2013-12-24 05:35:31,831 [output] done
-2013-12-24 05:35:31,831 [output] 164 -> 165...
-2013-12-24 05:35:31,836 [output] done
-2013-12-24 05:35:31,836 [output] 165 -> 166...
-2013-12-24 05:35:31,840 [output] done
-2013-12-24 05:35:31,840 [output] 166 -> 167...
-2013-12-24 05:35:31,844 [output] done
-2013-12-24 05:35:31,844 [output] 167 -> 168...
-2013-12-24 05:35:31,849 [output] done
-2013-12-24 05:35:31,849 [output] 168 -> 169...
-2013-12-24 05:35:31,853 [output] done
-2013-12-24 05:35:31,853 [output] 169 -> 170...
-2013-12-24 05:35:31,858 [output] done
-2013-12-24 05:35:31,858 [output] 170 -> 171...
-2013-12-24 05:35:31,862 [output] done
-2013-12-24 05:35:31,862 [output] 171 -> 172...
-2013-12-24 05:35:32,305 [output] done
-2013-12-24 05:35:32,306 [output] 172 -> 173...
-2013-12-24 05:35:32,397 [output] Deleted duplicated row with id: 2086 from table: key_pairs
-2013-12-24 05:35:32,398 [output] Deleted duplicated row with id: 2086 from table: key_pairs
-2013-12-24 05:35:32,399 [output] Deleted duplicated row with id: 1161 from table: key_pairs
-2013-12-24 05:35:32,399 [output] Deleted duplicated row with id: 1161 from table: key_pairs
-2013-12-24 05:35:32,407 [output] Deleted duplicated row with id: 1107 from table: key_pairs
-2013-12-24 05:35:32,407 [output] Deleted duplicated row with id: 1107 from table: key_pairs
-2013-12-24 05:35:32,738 [output] done
-2013-12-24 05:35:32,739 [output] 173 -> 174...
-2013-12-24 05:35:32,786 [output] done
-2013-12-24 05:35:32,786 [output] 174 -> 175...
-2013-12-24 05:35:32,820 [output] done
-2013-12-24 05:35:32,820 [output] 175 -> 176...
-2013-12-24 05:35:32,837 [output] done
-2013-12-24 05:35:32,837 [output] 176 -> 177...
-2013-12-24 05:35:32,904 [output] done
-2013-12-24 05:35:32,904 [output] 177 -> 178...
-2013-12-24 05:35:32,927 [output] done
-2013-12-24 05:35:32,927 [output] 178 -> 179...
-2013-12-24 05:35:32,974 [output] done
-2013-12-24 05:35:32,975 [output] 179 -> 180...
-2013-12-24 05:35:33,021 [output] done
-2013-12-24 05:35:33,021 [output] 180 -> 181...
-2013-12-24 05:35:33,059 [output] done
-2013-12-24 05:35:33,059 [output] 181 -> 182...
-2013-12-24 05:35:33,091 [output] done
-2013-12-24 05:35:33,091 [output] 182 -> 183...
-2013-12-24 05:35:33,106 [output] done
-2013-12-24 05:35:33,106 [output] 183 -> 184...
-2013-12-24 05:35:33,244 [output] done
-2013-12-24 05:35:33,244 [output] 184 -> 185...
-2013-12-24 05:35:40,277 [output] done
-2013-12-24 05:35:40,278 [output] 185 -> 186...
-2013-12-24 05:35:40,517 [output] done
-2013-12-24 05:35:40,517 [output] 186 -> 187...
-2013-12-24 05:35:40,620 [output] done
-2013-12-24 05:35:40,621 [output] 187 -> 188...
-2013-12-24 05:35:40,643 [output] done
-2013-12-24 05:35:40,644 [output] 188 -> 189...
-2013-12-24 05:35:40,672 [output] done
-2013-12-24 05:35:40,672 [output] 189 -> 190...
-2013-12-24 05:35:41,873 [output] done
-2013-12-24 05:35:41,873 [output] 190 -> 191...
-2013-12-24 05:35:41,926 [output] done
-2013-12-24 05:35:41,926 [output] 191 -> 192...
-2013-12-24 05:35:42,011 [output] done
-2013-12-24 05:35:42,011 [output] 192 -> 193...
-2013-12-24 05:35:42,354 [output] done
-2013-12-24 05:35:42,354 [output] 193 -> 194...
-2013-12-24 05:35:44,595 [output] done
-2013-12-24 05:35:44,596 [output] 194 -> 195...
-2013-12-24 05:35:44,730 [output] done
-2013-12-24 05:35:44,731 [output] 195 -> 196...
-2013-12-24 05:35:44,782 [output] done
-2013-12-24 05:35:44,782 [output] 196 -> 197...
-2013-12-24 05:35:44,810 [output] done
-2013-12-24 05:35:44,811 [output] 197 -> 198...
-2013-12-24 05:35:44,839 [output] done
-2013-12-24 05:35:44,840 [output] 198 -> 199...
-2013-12-24 05:35:44,869 [output] done
-2013-12-24 05:35:44,870 [output] 199 -> 200...
-2013-12-24 05:35:45,003 [output] done
-2013-12-24 05:35:45,003 [output] 200 -> 201...
-2013-12-24 05:35:45,011 [output] done
-2013-12-24 05:35:45,011 [output] 201 -> 202...
-2013-12-24 05:35:45,044 [output] done
-2013-12-24 05:35:45,044 [output] 202 -> 203...
-2013-12-24 05:35:52,958 [output] done
-2013-12-24 05:35:52,958 [output] 203 -> 204...
-2013-12-24 05:35:58,601 [heartbeat]
-2013-12-24 05:35:59,629 [output] done
-2013-12-24 05:35:59,629 [output] 204 -> 205...
-2013-12-24 05:36:27,289 [output] done
-2013-12-24 05:36:27,289 [output] 205 -> 206...
-2013-12-24 05:36:28,601 [heartbeat]
-2013-12-24 05:36:58,602 [heartbeat]
-2013-12-24 05:37:03,760 [output] done
-2013-12-24 05:37:03,760 [output] 206 -> 207...
-2013-12-24 05:37:03,872 [output] done
-2013-12-24 05:37:03,872 [output] 207 -> 208...
-2013-12-24 05:37:03,923 [output] done
-2013-12-24 05:37:03,923 [output] 208 -> 209...
-2013-12-24 05:37:05,003 [output] done
-2013-12-24 05:37:05,004 [output] 209 -> 210...
-2013-12-24 05:37:05,083 [output] done
-2013-12-24 05:37:05,083 [output] 210 -> 211...
-2013-12-24 05:37:05,160 [output] done
-2013-12-24 05:37:05,161 [output] 211 -> 212...
-2013-12-24 05:37:05,232 [output] done
-2013-12-24 05:37:05,233 [output] 212 -> 213...
-2013-12-24 05:37:05,349 [output] done
-2013-12-24 05:37:05,349 [output] 213 -> 214...
-2013-12-24 05:37:05,508 [output] done
-2013-12-24 05:37:05,508 [output] 214 -> 215...
-2013-12-24 05:37:05,580 [output] done
-2013-12-24 05:37:05,580 [output] 215 -> 216...
-2013-12-24 05:37:28,602 [heartbeat]
-2013-12-24 05:37:46,436 [output] done
-2013-12-24 05:37:46,820 [output] + manage_exit=0
-2013-12-24 05:37:46,820 [output] + set +x
-2013-12-24 05:37:46,820 [output] nova-manage returned exit code 0
-2013-12-24 05:37:46,821 [output] ***** Finished DB upgrade to state of havana *****
-2013-12-24 05:37:46,988 [output] Schema after stable_release_db_sync version is 216
-2013-12-24 05:37:47,101 [output] Update database to current state of trunk
-2013-12-24 05:37:50,276 [output] Switched to branch 'master'
-2013-12-24 05:37:50,933 [output] Install pip requirements from requirements.txt
-2013-12-24 05:37:56,962 [output] Requirements installed
-2013-12-24 05:37:57,685 [output] ***** Start DB upgrade to state of trunk *****
-2013-12-24 05:37:57,686 [output] No such file: /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova/nova/bin/nova-manage
-2013-12-24 05:37:57,686 [output] Setting up the nova-manage entry point
-2013-12-24 05:37:58,602 [heartbeat]
-2013-12-24 05:38:00,849 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:01,094 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,094 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,094 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,094 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.12.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,094 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,094 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:01,095 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,095 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,095 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,095 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,095 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,108 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,108 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,108 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.8.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr>=0.7.6 in /usr/lib/python2.7/dist-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.8 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,109 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:01,110 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:02,534 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:02,534 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:02,534 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.12 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:02,534 [output] Downloading/unpacking websockify>=0.5.1,<0.6
-2013-12-24 05:38:02,534 [output] Using download cache from /var/cache/pip/http%3A%2F%2Fwww.rcbops.com%2Fpypi%2Fmirror%2Fwebsockify%2Fwebsockify-0.5.1.tar.gz
-2013-12-24 05:38:02,535 [output] Running setup.py egg_info for package websockify
-2013-12-24 05:38:02,535 [output]
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): pycadf>=0.1.9 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /usr/lib/python2.7/dist-packages (from pbr>=0.5.21,<1.0)
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-12-24 05:38:02,535 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /usr/local/lib/python2.7/dist-packages (from Babel>=1.3)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:02,536 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /usr/local/lib/python2.7/dist-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:02,537 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:02,537 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:02,537 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-12-24 05:38:02,537 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:02,912 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:02,912 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:02,912 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:02,912 [output] Installing collected packages: websockify
-2013-12-24 05:38:02,912 [output] Found existing installation: websockify 0.3.0
-2013-12-24 05:38:02,913 [output] Uninstalling websockify:
-2013-12-24 05:38:02,913 [output] Successfully uninstalled websockify
-2013-12-24 05:38:02,913 [output] Running setup.py install for websockify
-2013-12-24 05:38:02,913 [output]
-2013-12-24 05:38:02,913 [output] Installing websockify script to /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin
-2013-12-24 05:38:02,913 [output] Successfully installed websockify
-2013-12-24 05:38:02,913 [output] Cleaning up...
-2013-12-24 05:38:06,814 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b/nova-trunk.conf --verbose db sync
-2013-12-24 05:38:08,338 [output] 216 -> 217...
-2013-12-24 05:38:08,451 [output] done
-2013-12-24 05:38:08,451 [output] 217 -> 218...
-2013-12-24 05:38:08,455 [output] done
-2013-12-24 05:38:08,455 [output] 218 -> 219...
-2013-12-24 05:38:08,460 [output] done
-2013-12-24 05:38:08,460 [output] 219 -> 220...
-2013-12-24 05:38:08,464 [output] done
-2013-12-24 05:38:08,464 [output] 220 -> 221...
-2013-12-24 05:38:08,469 [output] done
-2013-12-24 05:38:08,469 [output] 221 -> 222...
-2013-12-24 05:38:08,473 [output] done
-2013-12-24 05:38:08,473 [output] 222 -> 223...
-2013-12-24 05:38:08,477 [output] done
-2013-12-24 05:38:08,478 [output] 223 -> 224...
-2013-12-24 05:38:08,482 [output] done
-2013-12-24 05:38:08,482 [output] 224 -> 225...
-2013-12-24 05:38:08,486 [output] done
-2013-12-24 05:38:08,486 [output] 225 -> 226...
-2013-12-24 05:38:08,491 [output] done
-2013-12-24 05:38:08,491 [output] 226 -> 227...
-2013-12-24 05:38:08,512 [output] done
-2013-12-24 05:38:08,513 [output] 227 -> 228...
-2013-12-24 05:38:08,550 [output] done
-2013-12-24 05:38:08,550 [output] 228 -> 229...
-2013-12-24 05:38:08,579 [output] done
-2013-12-24 05:38:08,797 [output] + manage_exit=0
-2013-12-24 05:38:08,797 [output] + set +x
-2013-12-24 05:38:08,798 [output] nova-manage returned exit code 0
-2013-12-24 05:38:08,798 [output] ***** Finished DB upgrade to state of trunk *****
-2013-12-24 05:38:08,873 [output] Switched to branch 'working'
-2013-12-24 05:38:08,876 [output] Now test the patchset
-2013-12-24 05:38:09,510 [output] Install pip requirements from requirements.txt
-2013-12-24 05:38:11,885 [output] Requirements installed
-2013-12-24 05:38:12,398 [output] ***** Start DB upgrade to state of patchset *****
-2013-12-24 05:38:12,398 [output] No such file: /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova/nova/bin/nova-manage
-2013-12-24 05:38:12,398 [output] Setting up the nova-manage entry point
-2013-12-24 05:38:15,066 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.12.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:15,114 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.8.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,115 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr>=0.7.6 in /usr/lib/python2.7/dist-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.8 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:15,116 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:16,714 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:16,714 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:16,715 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.12 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:16,715 [output] Downloading/unpacking websockify>=0.5.1,<0.6
-2013-12-24 05:38:16,715 [output] Using download cache from /var/cache/pip/http%3A%2F%2Fwww.rcbops.com%2Fpypi%2Fmirror%2Fwebsockify%2Fwebsockify-0.5.1.tar.gz
-2013-12-24 05:38:16,715 [output] Running setup.py egg_info for package websockify
-2013-12-24 05:38:16,715 [output]
-2013-12-24 05:38:16,715 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:16,715 [output] Requirement already satisfied (use --upgrade to upgrade): pycadf>=0.1.9 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:16,715 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /usr/lib/python2.7/dist-packages (from pbr>=0.5.21,<1.0)
-2013-12-24 05:38:16,715 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /usr/local/lib/python2.7/dist-packages (from Babel>=1.3)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:16,716 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /usr/local/lib/python2.7/dist-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-12-24 05:38:16,717 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:17,101 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:17,101 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:17,101 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:17,101 [output] Installing collected packages: websockify
-2013-12-24 05:38:17,101 [output] Found existing installation: websockify 0.3.0
-2013-12-24 05:38:17,101 [output] Uninstalling websockify:
-2013-12-24 05:38:17,102 [output] Successfully uninstalled websockify
-2013-12-24 05:38:17,102 [output] Running setup.py install for websockify
-2013-12-24 05:38:17,102 [output]
-2013-12-24 05:38:17,102 [output] Installing websockify script to /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin
-2013-12-24 05:38:17,102 [output] Successfully installed websockify
-2013-12-24 05:38:17,102 [output] Cleaning up...
-2013-12-24 05:38:17,665 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b/nova-patchset.conf --verbose db sync
-2013-12-24 05:38:19,169 [output] + manage_exit=0
-2013-12-24 05:38:19,169 [output] + set +x
-2013-12-24 05:38:19,169 [output] nova-manage returned exit code 0
-2013-12-24 05:38:19,170 [output] ***** Finished DB upgrade to state of patchset *****
-2013-12-24 05:38:19,187 [output] Schema version is 229
-2013-12-24 05:38:19,187 [output] Now downgrade all the way back to the last stable version (v216)
-2013-12-24 05:38:19,674 [output] ***** Start DB upgrade to state of patchset *****
-2013-12-24 05:38:19,674 [output] No such file: /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova/nova/bin/nova-manage
-2013-12-24 05:38:19,674 [output] Setting up the nova-manage entry point
-2013-12-24 05:38:22,380 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:22,380 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,380 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,380 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,380 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.12.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,380 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,381 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.8.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr>=0.7.6 in /usr/lib/python2.7/dist-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.8 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,382 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,383 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:22,383 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:24,027 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:24,211 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:24,212 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.12 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:24,212 [output] Downloading/unpacking websockify>=0.5.1,<0.6
-2013-12-24 05:38:24,212 [output] Using download cache from /var/cache/pip/http%3A%2F%2Fwww.rcbops.com%2Fpypi%2Fmirror%2Fwebsockify%2Fwebsockify-0.5.1.tar.gz
-2013-12-24 05:38:24,212 [output] Running setup.py egg_info for package websockify
-2013-12-24 05:38:24,212 [output]
-2013-12-24 05:38:24,212 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:24,212 [output] Requirement already satisfied (use --upgrade to upgrade): pycadf>=0.1.9 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:24,214 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /usr/lib/python2.7/dist-packages (from pbr>=0.5.21,<1.0)
-2013-12-24 05:38:24,214 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-12-24 05:38:24,214 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-12-24 05:38:24,214 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-12-24 05:38:24,214 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:24,223 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /usr/local/lib/python2.7/dist-packages (from Babel>=1.3)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:24,224 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /usr/local/lib/python2.7/dist-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:24,225 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:24,225 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:24,225 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-12-24 05:38:24,225 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:24,410 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:24,410 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:24,410 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:24,410 [output] Installing collected packages: websockify
-2013-12-24 05:38:24,410 [output] Found existing installation: websockify 0.3.0
-2013-12-24 05:38:24,410 [output] Uninstalling websockify:
-2013-12-24 05:38:24,411 [output] Successfully uninstalled websockify
-2013-12-24 05:38:24,411 [output] Running setup.py install for websockify
-2013-12-24 05:38:24,411 [output]
-2013-12-24 05:38:24,411 [output] Installing websockify script to /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin
-2013-12-24 05:38:24,411 [output] Successfully installed websockify
-2013-12-24 05:38:24,411 [output] Cleaning up...
-2013-12-24 05:38:24,965 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b/nova-patchset.conf --verbose db sync --version 216
-2013-12-24 05:38:26,228 [output] 229 -> 228...
-2013-12-24 05:38:26,427 [output] done
-2013-12-24 05:38:26,428 [output] 228 -> 227...
-2013-12-24 05:38:26,455 [output] done
-2013-12-24 05:38:26,455 [output] 227 -> 226...
-2013-12-24 05:38:26,460 [output] done
-2013-12-24 05:38:26,460 [output] 226 -> 225...
-2013-12-24 05:38:26,464 [output] done
-2013-12-24 05:38:26,464 [output] 225 -> 224...
-2013-12-24 05:38:26,468 [output] done
-2013-12-24 05:38:26,468 [output] 224 -> 223...
-2013-12-24 05:38:26,473 [output] done
-2013-12-24 05:38:26,473 [output] 223 -> 222...
-2013-12-24 05:38:26,477 [output] done
-2013-12-24 05:38:26,477 [output] 222 -> 221...
-2013-12-24 05:38:26,481 [output] done
-2013-12-24 05:38:26,482 [output] 221 -> 220...
-2013-12-24 05:38:26,486 [output] done
-2013-12-24 05:38:26,486 [output] 220 -> 219...
-2013-12-24 05:38:26,490 [output] done
-2013-12-24 05:38:26,491 [output] 219 -> 218...
-2013-12-24 05:38:26,495 [output] done
-2013-12-24 05:38:26,495 [output] 218 -> 217...
-2013-12-24 05:38:26,499 [output] done
-2013-12-24 05:38:26,499 [output] 217 -> 216...
-2013-12-24 05:38:26,504 [output] done
-2013-12-24 05:38:26,722 [output] + manage_exit=0
-2013-12-24 05:38:26,723 [output] + set +x
-2013-12-24 05:38:26,723 [output] nova-manage returned exit code 0
-2013-12-24 05:38:26,723 [output] ***** Finished DB upgrade to state of patchset *****
-2013-12-24 05:38:26,746 [output] Schema version is 216
-2013-12-24 05:38:26,747 [output] And now back up to head from the start of trunk
-2013-12-24 05:38:26,816 [output] Already on 'working'
-2013-12-24 05:38:27,378 [output] ***** Start DB upgrade to state of patchset *****
-2013-12-24 05:38:27,378 [output] No such file: /var/lib/turbo-hipster/git/gate_real_db_upgrade-thw09-percona.rcbops.com-4/openstack/nova/nova/bin/nova-manage
-2013-12-24 05:38:27,379 [output] Setting up the nova-manage entry point
-2013-12-24 05:38:28,603 [heartbeat]
-2013-12-24 05:38:30,066 [output] Requirement already satisfied (use --upgrade to upgrade): pbr>=0.5.21,<1.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:30,066 [output] Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy>=0.7.8,<=0.7.99 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,066 [output] Requirement already satisfied (use --upgrade to upgrade): amqplib>=0.6.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,066 [output] Requirement already satisfied (use --upgrade to upgrade): anyjson>=0.3.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): boto>=2.12.0,!=2.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): eventlet>=0.13.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): Jinja2 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): kombu>=2.4.8 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): Routes>=1.12.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): WebOb>=1.2.3,<1.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,067 [output] Requirement already satisfied (use --upgrade to upgrade): PasteDeploy>=1.5.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): Paste in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): sqlalchemy-migrate>=0.8.2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): netaddr>=0.7.6 in /usr/lib/python2.7/dist-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): suds>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): paramiko>=1.8.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): pyasn1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): Babel>=1.3 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): iso8601>=0.1.8 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:30,068 [output] Requirement already satisfied (use --upgrade to upgrade): jsonschema>=1.3.0,!=1.4.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,069 [output] Requirement already satisfied (use --upgrade to upgrade): python-cinderclient>=1.0.6 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,069 [output] Requirement already satisfied (use --upgrade to upgrade): python-neutronclient>=2.3.0,<3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:30,069 [output] Requirement already satisfied (use --upgrade to upgrade): python-glanceclient>=0.9.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:31,691 [output] Requirement already satisfied (use --upgrade to upgrade): python-keystoneclient>=0.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:31,692 [output] Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:31,692 [output] Requirement already satisfied (use --upgrade to upgrade): stevedore>=0.12 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:31,692 [output] Downloading/unpacking websockify>=0.5.1,<0.6
-2013-12-24 05:38:31,692 [output] Using download cache from /var/cache/pip/http%3A%2F%2Fwww.rcbops.com%2Fpypi%2Fmirror%2Fwebsockify%2Fwebsockify-0.5.1.tar.gz
-2013-12-24 05:38:31,692 [output] Running setup.py egg_info for package websockify
-2013-12-24 05:38:31,692 [output]
-2013-12-24 05:38:31,692 [output] Requirement already satisfied (use --upgrade to upgrade): oslo.config>=1.2.0 in /usr/local/lib/python2.7/dist-packages
-2013-12-24 05:38:31,692 [output] Requirement already satisfied (use --upgrade to upgrade): pycadf>=0.1.9 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages
-2013-12-24 05:38:31,692 [output] Requirement already satisfied (use --upgrade to upgrade): pip>=1.0 in /usr/lib/python2.7/dist-packages (from pbr>=0.5.21,<1.0)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): markupsafe in /usr/local/lib/python2.7/dist-packages (from Jinja2)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): amqp>=1.3.3,<2.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from kombu>=2.4.8)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): repoze.lru>=0.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from Routes>=1.12.3)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): decorator in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): Tempita>=0.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from sqlalchemy-migrate>=0.8.2)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): pycrypto>=2.1,!=2.4 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): ecdsa in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from paramiko>=1.8.0)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): pytz>=0a in /usr/local/lib/python2.7/dist-packages (from Babel>=1.3)
-2013-12-24 05:38:31,693 [output] Requirement already satisfied (use --upgrade to upgrade): PrettyTable>=0.6,<0.8 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): requests>=1.1 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): simplejson>=2.0.9 in /usr/local/lib/python2.7/dist-packages (from python-cinderclient>=1.0.6)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): cliff>=1.4.3 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): httplib2 in /usr/local/lib/python2.7/dist-packages (from python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): warlock>=1.0.1,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from python-glanceclient>=0.9.0)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/lib/python2.7/dist-packages (from websockify>=0.5.1,<0.6)
-2013-12-24 05:38:31,694 [output] Requirement already satisfied (use --upgrade to upgrade): pyparsing>=2.0.1 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:32,077 [output] Requirement already satisfied (use --upgrade to upgrade): cmd2>=0.6.7 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from cliff>=1.4.3->python-neutronclient>=2.3.0,<3)
-2013-12-24 05:38:32,077 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpatch>=0.10,<2 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:32,077 [output] Requirement already satisfied (use --upgrade to upgrade): jsonpointer>=1.0 in /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/lib/python2.7/site-packages (from jsonpatch>=0.10,<2->warlock>=1.0.1,<2->python-glanceclient>=0.9.0)
-2013-12-24 05:38:32,078 [output] Installing collected packages: websockify
-2013-12-24 05:38:32,078 [output] Found existing installation: websockify 0.3.0
-2013-12-24 05:38:32,078 [output] Uninstalling websockify:
-2013-12-24 05:38:32,078 [output] Successfully uninstalled websockify
-2013-12-24 05:38:32,078 [output] Running setup.py install for websockify
-2013-12-24 05:38:32,078 [output]
-2013-12-24 05:38:32,078 [output] Installing websockify script to /home/turbo-hipster/.virtualenvs/d6a119ba740447589c347a83e5bd4d48/bin
-2013-12-24 05:38:32,078 [output] Successfully installed websockify
-2013-12-24 05:38:32,078 [output] Cleaning up...
-2013-12-24 05:38:32,639 [output] + nova-manage --config-file /var/lib/turbo-hipster/jobs/63/63610/1/check/gate-real-db-upgrade_nova_percona_user_001/d6a119b/nova-patchset.conf --verbose db sync
-2013-12-24 05:38:33,973 [output] 216 -> 217...
-2013-12-24 05:38:34,016 [output] done
-2013-12-24 05:38:34,017 [output] 217 -> 218...
-2013-12-24 05:38:34,022 [output] done
-2013-12-24 05:38:34,022 [output] 218 -> 219...
-2013-12-24 05:38:34,026 [output] done
-2013-12-24 05:38:34,026 [output] 219 -> 220...
-2013-12-24 05:38:34,030 [output] done
-2013-12-24 05:38:34,031 [output] 220 -> 221...
-2013-12-24 05:38:34,035 [output] done
-2013-12-24 05:38:34,035 [output] 221 -> 222...
-2013-12-24 05:38:34,039 [output] done
-2013-12-24 05:38:34,039 [output] 222 -> 223...
-2013-12-24 05:38:34,043 [output] done
-2013-12-24 05:38:34,043 [output] 223 -> 224...
-2013-12-24 05:38:34,048 [output] done
-2013-12-24 05:38:34,048 [output] 224 -> 225...
-2013-12-24 05:38:34,052 [output] done
-2013-12-24 05:38:34,052 [output] 225 -> 226...
-2013-12-24 05:38:34,056 [output] done
-2013-12-24 05:38:34,056 [output] 226 -> 227...
-2013-12-24 05:38:34,066 [output] done
-2013-12-24 05:38:34,066 [output] 227 -> 228...
-2013-12-24 05:38:34,099 [output] done
-2013-12-24 05:38:34,099 [output] 228 -> 229...
-2013-12-24 05:38:34,126 [output] done
-2013-12-24 05:38:34,339 [output] + manage_exit=0
-2013-12-24 05:38:34,339 [output] + set +x
-2013-12-24 05:38:34,340 [output] nova-manage returned exit code 0
-2013-12-24 05:38:34,340 [output] ***** Finished DB upgrade to state of patchset *****
-2013-12-24 05:38:34,362 [output] Final schema version is 229
-2013-12-24 05:38:34,362 [output] Cleaning up virtual env
-2013-12-24 05:38:35,354 [output] Removing d6a119ba740447589c347a83e5bd4d48...
-2013-12-24 05:38:37,955 [script exit code = 0]
diff --git a/tests/assets/user_001.log b/tests/assets/user_001.log
deleted file mode 100644
index adc4e14..0000000
--- a/tests/assets/user_001.log
+++ /dev/null
@@ -1,743 +0,0 @@
-2014-01-16 06:57:33,961 [output] Triggered by: https://review.openstack.org/65615
-2014-01-16 06:57:33,961 [output] + [[ ! -e .git ]]
-2014-01-16 06:57:33,961 [output] + git checkout master
-2014-01-16 06:57:36,767 [output] Switched to branch 'master'
-2014-01-16 06:57:36,794 [output] + git pull
-2014-01-16 06:57:45,964 [output] Already up-to-date.
-2014-01-16 06:57:45,965 [output] + git remote set-url origin https://review.openstack.org/p/openstack/nova
-2014-01-16 06:57:45,970 [output] + git remote update
-2014-01-16 06:57:45,983 [output] Fetching origin
-2014-01-16 06:57:54,415 [output] + git reset --hard
-2014-01-16 06:57:54,478 [output] HEAD is now at b77282d Merge "baremetal: stop deployment if block devices are not available"
-2014-01-16 06:57:54,480 [output] + git clean -x -f -d -q
-2014-01-16 06:57:55,081 [output] + '[' -z '' ']'
-2014-01-16 06:57:55,082 [output] + git fetch http://zuul.rcbops.com/p/openstack/nova refs/zuul/master/Zfa8228d022314ccd967a79ca3f853198
-2014-01-16 06:58:03,651 [output] From http://zuul.rcbops.com/p/openstack/nova
-2014-01-16 06:58:03,652 [output] * branch refs/zuul/master/Zfa8228d022314ccd967a79ca3f853198 -> FETCH_HEAD
-2014-01-16 06:58:03,660 [output] + git checkout FETCH_HEAD
-2014-01-16 06:58:03,825 [output] Note: checking out 'FETCH_HEAD'.
-2014-01-16 06:58:03,826 [output] You are in 'detached HEAD' state. You can look around, make experimental
-2014-01-16 06:58:03,826 [output] changes and commit them, and you can discard any commits you make in this
-2014-01-16 06:58:03,826 [output] state without impacting any branches by performing another checkout.
-2014-01-16 06:58:03,826 [output] If you want to create a new branch to retain commits you create, you may
-2014-01-16 06:58:03,826 [output] do so (now or later) by using -b with the checkout command again. Example:
-2014-01-16 06:58:03,826 [output] git checkout -b new_branch_name
-2014-01-16 06:58:03,826 [output] HEAD is now at b1856cf... Merge commit 'refs/changes/15/65615/7' of ssh://review.openstack.org:29418/openstack/nova
-2014-01-16 06:58:03,828 [output] + git reset --hard FETCH_HEAD
-2014-01-16 06:58:03,891 [output] HEAD is now at b1856cf Merge commit 'refs/changes/15/65615/7' of ssh://review.openstack.org:29418/openstack/nova
-2014-01-16 06:58:03,893 [output] + git clean -x -f -d -q
-2014-01-16 06:58:03,918 [output] + git branch -D working
-2014-01-16 06:58:03,924 [output] Deleted branch working (was 888c8c4).
-2014-01-16 06:58:03,924 [output] + git checkout -b working
-2014-01-16 06:58:03,955 [heartbeat]
-2014-01-16 06:58:03,996 [output] Switched to a new branch 'working'
-2014-01-16 06:58:03,999 [output] + '[' -f .gitmodules ']'
-2014-01-16 06:58:04,000 [script exit code = 0]
-2014-01-16 06:58:04,022 [output] Instance flavor: rackspace_standard_2cpu_2gb
-2014-01-16 06:58:04,023 [output] IO test starts
-2014-01-16 06:58:12,972 [output] 1024+0 records in
-2014-01-16 06:58:13,049 [output] 1024+0 records out
-2014-01-16 06:58:13,054 [output] 1048576000 bytes (1.0 GB) copied, 9.02551 s, 116 MB/s
-2014-01-16 06:58:13,055 [output] real 0m9.033s
-2014-01-16 06:58:13,055 [output] user 0m0.000s
-2014-01-16 06:58:13,055 [output] sys 0m2.398s
-2014-01-16 06:58:14,069 [output] IO test ends
-2014-01-16 06:58:14,070 [script exit code = 0]
-2014-01-16 06:58:14,529 [output] Test running on thw-percona-007 as th (/home/th, /home/th), using log processing profile full
-2014-01-16 06:58:14,530 [output] To execute this script manually, run this:
-2014-01-16 06:58:14,530 [output] .../task_plugins/gate_real_db_upgrade/nova_mysql_migrations.sh bc1198bacf884c0295037e8e32c0ec17 .../jobs/65/65615/7/check/gate-real-db-upgrade_nova_percona_user_001/bc1198b .../git/gate_real_db_upgrade-thw-percona-007-4/openstack/nova nova tester nova_datasets_user_001 .../datasets_user_001/user_001/nova_user_001.sql .../datasets_user_001/user_001/logging.conf /var/cache/pip
-2014-01-16 06:58:14,530 [output] Restoring test database nova_datasets_user_001
-2014-01-16 06:58:14,530 [output] + mysql -u nova --password=... -e 'drop database nova_datasets_user_001'
-2014-01-16 06:58:17,395 [output] + mysql -u nova --password=... -e 'create database nova_datasets_user_001'
-2014-01-16 06:58:17,410 [output] + mysql -u nova --password=... nova_datasets_user_001
-2014-01-16 06:58:44,133 [heartbeat]
-2014-01-16 06:59:14,134 [heartbeat]
-2014-01-16 06:59:42,044 [output] + set +x
-2014-01-16 06:59:42,044 [output] Build test environment
-2014-01-16 06:59:42,044 [output] Setting up virtual env
-2014-01-16 06:59:44,134 [heartbeat]
-2014-01-16 06:59:44,204 [output] New python executable in bc1198bacf884c0295037e8e32c0ec17/bin/python
-2014-01-16 06:59:44,914 [output] Installing Setuptools..............................................................................................................................................................................................................................done.
-2014-01-16 06:59:45,678 [output] Installing Pip.....................................................................................................................................................................................................................................................................................................................................done.
-2014-01-16 06:59:45,840 [output] virtualenvwrapper.user_scripts creating .../envs/bc1198bacf884c0295037e8e32c0ec17/bin/predeactivate
-2014-01-16 06:59:45,841 [output] virtualenvwrapper.user_scripts creating .../envs/bc1198bacf884c0295037e8e32c0ec17/bin/postdeactivate
-2014-01-16 06:59:45,841 [output] virtualenvwrapper.user_scripts creating .../envs/bc1198bacf884c0295037e8e32c0ec17/bin/preactivate
-2014-01-16 06:59:45,841 [output] virtualenvwrapper.user_scripts creating .../envs/bc1198bacf884c0295037e8e32c0ec17/bin/postactivate
-2014-01-16 06:59:45,842 [output] virtualenvwrapper.user_scripts creating .../envs/bc1198bacf884c0295037e8e32c0ec17/bin/get_env_details
-2014-01-16 06:59:46,608 [output] Enabled global site-packages
-2014-01-16 06:59:46,831 [output] Schema version is 133
-2014-01-16 06:59:46,833 [output] Database is from Folsom! Upgrade via Grizzly
-2014-01-16 06:59:46,949 [output] Deleted branch stable/grizzly (was 3e451f1).
-2014-01-16 06:59:47,123 [output] Fetching origin
-2014-01-16 07:00:01,867 [output] Switched to a new branch 'stable/grizzly'
-2014-01-16 07:00:03,409 [output] HEAD is now at 3e451f1 use 'os_type' in ephemeral filename only if mkfs defined
-2014-01-16 07:00:04,297 [output] Install pip requirements from tools/pip-requires
-2014-01-16 07:00:14,135 [heartbeat]
-2014-01-16 07:00:44,135 [heartbeat]
-2014-01-16 07:01:14,135 [heartbeat]
-2014-01-16 07:01:44,136 [heartbeat]
-2014-01-16 07:02:14,136 [heartbeat]
-2014-01-16 07:02:44,136 [heartbeat]
-2014-01-16 07:03:14,137 [heartbeat]
-2014-01-16 07:03:26,278 [output] Requirements installed
-2014-01-16 07:03:26,303 [output] ***** Start DB upgrade to state of grizzly *****
-2014-01-16 07:03:26,303 [output] HEAD of branch under test is:
-2014-01-16 07:03:26,312 [output] commit 3e451f1bac57d24e47171cffb3ad59bb1610d836
-2014-01-16 07:03:26,312 [output] Author: Ryan Moore <ryan.moore@hp.com>
-2014-01-16 07:03:26,312 [output] Date: Fri Nov 29 14:21:19 2013 +0000
-2014-01-16 07:03:26,312 [output] use 'os_type' in ephemeral filename only if mkfs defined
-2014-01-16 07:03:26,313 [output]
-2014-01-16 07:03:26,313 [output] Currently for undefined os-types it will use the default mkfs
-2014-01-16 07:03:26,313 [output] command, but use the meta 'os_type' in the name of the
-2014-01-16 07:03:26,313 [output] ephemeral file (e.g. ephemeral_20_abcdef). Which can result
-2014-01-16 07:03:26,313 [output] in a lot of files (DoS?)
-2014-01-16 07:03:26,313 [output] This change will only use 'os_type' in the ephemeral filename
-2014-01-16 07:03:26,313 [output] if there is a specific mkfs command defined, otherwise it will
-2014-01-16 07:03:26,313 [output] use 'default' (e.g. ephemeral_20_default)
-2014-01-16 07:03:26,313 [output]
-2014-01-16 07:03:26,314 [output] Modifed the tests to test for:
-2014-01-16 07:03:26,314 [output] os_type=''
-2014-01-16 07:03:26,314 [output] os_type=None
-2014-01-16 07:03:26,314 [output] os_type='test' - with no mkfs command specified
-2014-01-16 07:03:26,314 [output] os_type='test' - with a mkfs command specified
-2014-01-16 07:03:26,314 [output]
-2014-01-16 07:03:26,314 [output] Closes-Bug: 1253980
-2014-01-16 07:03:26,315 [output]
-2014-01-16 07:03:26,315 [output] Backport of Original Change-Id: Ie4c10f99ce690c5e4ef181624bd688c38923855c
-2014-01-16 07:03:26,315 [output] to stable/grizzly
-2014-01-16 07:03:26,315 [output]
-2014-01-16 07:03:26,315 [output] Change-Id: Ia040910e90861a2987eff345ad1c01863655b124
-2014-01-16 07:03:26,315 [output] Setting up the nova-manage entry point
-2014-01-16 07:03:30,974 [output] warning: no files found matching 'AUTHORS'
-2014-01-16 07:03:30,982 [output] warning: no files found matching 'ChangeLog'
-2014-01-16 07:03:31,009 [output] warning: no previously-included files matching '*.pyc' found anywhere in distribution
-2014-01-16 07:03:32,636 [output] warning: no files found matching 'AUTHORS'
-2014-01-16 07:03:32,644 [output] warning: no files found matching 'ChangeLog'
-2014-01-16 07:03:32,671 [output] warning: no previously-included files matching '*.pyc' found anywhere in distribution
-2014-01-16 07:03:37,629 [output] zip_safe flag not set; analyzing archive contents...
-2014-01-16 07:03:37,634 [output] nova.crypto: module references __file__
-2014-01-16 07:03:37,636 [output] nova.loadables: module references __path__
-2014-01-16 07:03:37,637 [output] nova.service: module MAY be using inspect.stack
-2014-01-16 07:03:37,639 [output] nova.utils: module references __file__
-2014-01-16 07:03:37,639 [output] nova.paths: module references __file__
-2014-01-16 07:03:37,648 [output] nova.db.sqlalchemy.migration: module references __file__
-2014-01-16 07:03:37,682 [output] nova.api.openstack.compute.contrib.__init__: module references __path__
-2014-01-16 07:03:37,692 [output] nova.openstack.common.setup: module references __file__
-2014-01-16 07:03:37,693 [output] nova.openstack.common.log: module MAY be using inspect.stack
-2014-01-16 07:03:37,694 [output] nova.openstack.common.db.sqlalchemy.session: module references __file__
-2014-01-16 07:03:37,700 [output] nova.openstack.common.rpc.__init__: module MAY be using inspect.stack
-2014-01-16 07:03:37,711 [output] nova.network.linux_net: module MAY be using inspect.stack
-2014-01-16 07:03:37,735 [output] nova.tests.test_nova_manage: module references __file__
-2014-01-16 07:03:37,738 [output] nova.tests.test_misc: module references __file__
-2014-01-16 07:03:37,747 [output] nova.tests.test_wsgi: module references __file__
-2014-01-16 07:03:37,768 [output] nova.tests.test_xenapi: module references __file__
-2014-01-16 07:03:37,776 [output] nova.tests.test_migrations: module references __file__
-2014-01-16 07:03:37,787 [output] nova.tests.api.ec2.test_cloud: module references __file__
-2014-01-16 07:03:37,844 [output] nova.tests.integrated.test_api_samples: module references __file__
-2014-01-16 07:03:37,889 [output] nova.tests.image.test_s3: module references __file__
-2014-01-16 07:03:37,900 [output] nova.tests.baremetal.test_nova_baremetal_deploy_helper: module references __file__
-2014-01-16 07:03:37,900 [output] nova.tests.baremetal.test_nova_baremetal_manage: module references __file__
-2014-01-16 07:03:37,962 [output] nova.virt.baremetal.db.sqlalchemy.migration: module references __file__
-2014-01-16 07:03:43,411 [output] Migrations present:
-2014-01-16 07:03:43,424 [output] 133_folsom.py
-2014-01-16 07:03:43,424 [output] 134_add_counters_to_bw_usage_cache.py
-2014-01-16 07:03:43,425 [output] 135_add_node_to_instances.py
-2014-01-16 07:03:43,425 [output] 136_add_index_to_instances.py
-2014-01-16 07:03:43,425 [output] 137_add_indexes_to_migrations.py
-2014-01-16 07:03:43,425 [output] 138_drop_server_name_from_instances.py
-2014-01-16 07:03:43,425 [output] 139_add_indexes_to_fixed_ips.py
-2014-01-16 07:03:43,425 [output] 140_drop_unused_postgresql_volume_sequences.py
-2014-01-16 07:03:43,425 [output] 141_update_migrations_instance_uuid.py
-2014-01-16 07:03:43,425 [output] 142_add_migrations_instance_status_index.py
-2014-01-16 07:03:43,425 [output] 143_rename_instance_info_cache_sequence.py
-2014-01-16 07:03:43,426 [output] 144_add_node_to_migrations.py
-2014-01-16 07:03:43,426 [output] 145_add_volume_usage_cache.py
-2014-01-16 07:03:43,426 [output] 146_aggregate_zones.py
-2014-01-16 07:03:43,426 [output] 147_no_service_zones.py
-2014-01-16 07:03:43,426 [output] 148_add_instance_actions.py
-2014-01-16 07:03:43,426 [output] 149_inet_datatype_for_postgres.py
-2014-01-16 07:03:43,426 [output] 150_add_host_to_instance_faults.py
-2014-01-16 07:03:43,426 [output] 151_change_task_log_column_type.py
-2014-01-16 07:03:43,427 [output] 152_change_type_of_deleted_column.py
-2014-01-16 07:03:43,427 [output] 153_instance_type_in_system_metadata.py
-2014-01-16 07:03:43,427 [output] 154_add_shadow_tables.py
-2014-01-16 07:03:43,427 [output] 155_add_task_log_uc.py
-2014-01-16 07:03:43,427 [output] 156_cidr_column_length.py
-2014-01-16 07:03:43,427 [output] 157_add_security_group_default_rules.py
-2014-01-16 07:03:43,427 [output] 158_add_networks_uc.py
-2014-01-16 07:03:43,427 [output] 159_revert_ip_column_length.py
-2014-01-16 07:03:43,427 [output] 160_fix_system_metadata_deleted.py
-2014-01-16 07:03:43,428 [output] 161_fix_system_metadata_none_strings.py
-2014-01-16 07:03:43,428 [output] Restarting mysql
-2014-01-16 07:03:44,137 [heartbeat]
-2014-01-16 07:03:44,307 [sqlerr] 140116 7:03:44 [Note] /usr/sbin/mysqld: Normal shutdown
-2014-01-16 07:03:44,308 [sqlerr] 140116 7:03:44 [Note] Event Scheduler: Purging the queue. 0 events
-2014-01-16 07:03:44,440 [sqlerr] 140116 7:03:44 InnoDB: Starting shutdown...
-2014-01-16 07:03:46,242 [sqlerr] 140116 7:03:46 InnoDB: Shutdown completed; log sequence number 727562614175
-2014-01-16 07:03:46,244 [sqlerr] 140116 7:03:46 [Note] /usr/sbin/mysqld: Shutdown complete
-2014-01-16 07:03:46,260 [output] mysql stop/waiting
-2014-01-16 07:03:46,435 [syslog] Jan 16 07:03:46 thw-percona-007 kernel: [1470247.788188] type=1400 audit(1389855826.428:528): apparmor="STATUS" operation="profile_replace" parent=10171 profile="unconfined" name="/usr/sbin/mysqld" pid=10175 comm="apparmor_parser"
-2014-01-16 07:03:46,941 [sqlerr] 140116 7:03:46 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
-2014-01-16 07:03:46,941 [sqlerr] 140116 7:03:46 [Note] Plugin 'FEDERATED' is disabled.
-2014-01-16 07:03:46,942 [sqlerr] 140116 7:03:46 InnoDB: The InnoDB memory heap is disabled
-2014-01-16 07:03:46,942 [sqlerr] 140116 7:03:46 InnoDB: Mutexes and rw_locks use GCC atomic builtins
-2014-01-16 07:03:46,942 [sqlerr] 140116 7:03:46 InnoDB: Compressed tables use zlib 1.2.3
-2014-01-16 07:03:46,943 [sqlerr] 140116 7:03:46 InnoDB: Using Linux native AIO
-2014-01-16 07:03:46,960 [sqlerr] 140116 7:03:46 InnoDB: Initializing buffer pool, size = 128.0M
-2014-01-16 07:03:46,983 [sqlerr] 140116 7:03:46 InnoDB: Completed initialization of buffer pool
-2014-01-16 07:03:47,001 [sqlerr] 140116 7:03:46 InnoDB: highest supported file format is Barracuda.
-2014-01-16 07:03:47,107 [sqlerr] 140116 7:03:47 InnoDB: Waiting for the background threads to start
-2014-01-16 07:03:48,108 [sqlerr] 140116 7:03:48 Percona XtraDB (http://www.percona.com) 5.5.35-rel33.0 started; log sequence number 727562614175
-2014-01-16 07:03:48,113 [sqlerr] 140116 7:03:48 [Note] Event Scheduler: Loaded 0 events
-2014-01-16 07:03:48,114 [sqlerr] 140116 7:03:48 [Note] /usr/sbin/mysqld: ready for connections.
-2014-01-16 07:03:48,114 [sqlerr] Version: '5.5.35-33.0' socket: '/var/run/mysqld/mysqld.sock' port: 3306 Percona Server (GPL), Release 33.0
-2014-01-16 07:03:48,867 [output] mysql start/running, process 10179
-2014-01-16 07:03:48,870 [output] MySQL counters before upgrade:
-2014-01-16 07:03:48,881 [syslog] Jan 16 07:03:48 thw-percona-007 /etc/mysql/debian-start[10268]: Upgrading MySQL tables if necessary.
-2014-01-16 07:03:48,899 [output] Variable_name Value
-2014-01-16 07:03:48,900 [output] Innodb_adaptive_hash_cells 276671
-2014-01-16 07:03:48,900 [output] Innodb_adaptive_hash_heap_buffers 0
-2014-01-16 07:03:48,900 [output] Innodb_adaptive_hash_hash_searches 0
-2014-01-16 07:03:48,900 [output] Innodb_adaptive_hash_non_hash_searches 6949
-2014-01-16 07:03:48,900 [output] Innodb_background_log_sync 1
-2014-01-16 07:03:48,900 [output] Innodb_buffer_pool_pages_data 366
-2014-01-16 07:03:48,900 [output] Innodb_buffer_pool_bytes_data 5996544
-2014-01-16 07:03:48,900 [output] Innodb_buffer_pool_pages_dirty 0
-2014-01-16 07:03:48,901 [output] Innodb_buffer_pool_bytes_dirty 0
-2014-01-16 07:03:48,901 [output] Innodb_buffer_pool_pages_flushed 0
-2014-01-16 07:03:48,901 [output] Innodb_buffer_pool_pages_LRU_flushed 0
-2014-01-16 07:03:48,901 [output] Innodb_buffer_pool_pages_free 7824
-2014-01-16 07:03:48,901 [output] Innodb_buffer_pool_pages_made_not_young 0
-2014-01-16 07:03:48,901 [output] Innodb_buffer_pool_pages_made_young 0
-2014-01-16 07:03:48,901 [output] Innodb_buffer_pool_pages_misc 1
-2014-01-16 07:03:48,901 [output] Innodb_buffer_pool_pages_old 0
-2014-01-16 07:03:48,901 [output] Innodb_buffer_pool_pages_total 8191
-2014-01-16 07:03:48,902 [output] Innodb_buffer_pool_read_ahead_rnd 0
-2014-01-16 07:03:48,902 [output] Innodb_buffer_pool_read_ahead 0
-2014-01-16 07:03:48,902 [output] Innodb_buffer_pool_read_ahead_evicted 0
-2014-01-16 07:03:48,902 [output] Innodb_buffer_pool_read_requests 27689
-2014-01-16 07:03:48,902 [output] Innodb_buffer_pool_reads 367
-2014-01-16 07:03:48,902 [output] Innodb_buffer_pool_wait_free 0
-2014-01-16 07:03:48,902 [output] Innodb_buffer_pool_write_requests 0
-2014-01-16 07:03:48,902 [output] Innodb_checkpoint_age 0
-2014-01-16 07:03:48,906 [output] Innodb_checkpoint_max_age 7782360
-2014-01-16 07:03:48,906 [output] Innodb_checkpoint_target_age 7539162
-2014-01-16 07:03:48,906 [output] Innodb_data_fsyncs 3
-2014-01-16 07:03:48,906 [output] Innodb_data_pending_fsyncs 0
-2014-01-16 07:03:48,907 [output] Innodb_data_pending_reads 0
-2014-01-16 07:03:48,907 [output] Innodb_data_pending_writes 0
-2014-01-16 07:03:48,907 [output] Innodb_data_read 8196096
-2014-01-16 07:03:48,907 [output] Innodb_data_reads 377
-2014-01-16 07:03:48,907 [output] Innodb_data_writes 3
-2014-01-16 07:03:48,907 [output] Innodb_data_written 1536
-2014-01-16 07:03:48,907 [output] Innodb_dblwr_pages_written 0
-2014-01-16 07:03:48,907 [output] Innodb_dblwr_writes 0
-2014-01-16 07:03:48,907 [output] Innodb_deadlocks 0
-2014-01-16 07:03:48,908 [output] Innodb_dict_tables 10
-2014-01-16 07:03:48,908 [output] Innodb_have_atomic_builtins ON
-2014-01-16 07:03:48,908 [output] Innodb_history_list_length 871
-2014-01-16 07:03:48,908 [output] Innodb_ibuf_discarded_delete_marks 0
-2014-01-16 07:03:48,908 [output] Innodb_ibuf_discarded_deletes 0
-2014-01-16 07:03:48,908 [output] Innodb_ibuf_discarded_inserts 0
-2014-01-16 07:03:48,908 [output] Innodb_ibuf_free_list 5
-2014-01-16 07:03:48,908 [output] Innodb_ibuf_merged_delete_marks 0
-2014-01-16 07:03:48,908 [output] Innodb_ibuf_merged_deletes 0
-2014-01-16 07:03:48,909 [output] Innodb_ibuf_merged_inserts 0
-2014-01-16 07:03:48,909 [output] Innodb_ibuf_merges 0
-2014-01-16 07:03:48,909 [output] Innodb_ibuf_segment_size 7
-2014-01-16 07:03:48,909 [output] Innodb_ibuf_size 1
-2014-01-16 07:03:48,909 [output] Innodb_log_waits 0
-2014-01-16 07:03:48,909 [output] Innodb_log_write_requests 0
-2014-01-16 07:03:48,909 [output] Innodb_log_writes 1
-2014-01-16 07:03:48,909 [output] Innodb_lsn_current 727562614175
-2014-01-16 07:03:48,909 [output] Innodb_lsn_flushed 727562614175
-2014-01-16 07:03:48,909 [output] Innodb_lsn_last_checkpoint 727562614175
-2014-01-16 07:03:48,910 [output] Innodb_master_thread_1_second_loops 1
-2014-01-16 07:03:48,910 [output] Innodb_master_thread_10_second_loops 0
-2014-01-16 07:03:48,910 [output] Innodb_master_thread_background_loops 1
-2014-01-16 07:03:48,910 [output] Innodb_master_thread_main_flush_loops 1
-2014-01-16 07:03:48,910 [output] Innodb_master_thread_sleeps 1
-2014-01-16 07:03:48,910 [output] Innodb_max_trx_id 1636096
-2014-01-16 07:03:48,910 [output] Innodb_mem_adaptive_hash 2233968
-2014-01-16 07:03:48,910 [output] Innodb_mem_dictionary 614330
-2014-01-16 07:03:48,910 [output] Innodb_mem_total 137756672
-2014-01-16 07:03:48,911 [output] Innodb_mutex_os_waits 0
-2014-01-16 07:03:48,911 [output] Innodb_mutex_spin_rounds 0
-2014-01-16 07:03:48,911 [output] Innodb_mutex_spin_waits 0
-2014-01-16 07:03:48,911 [output] Innodb_oldest_view_low_limit_trx_id 1636096
-2014-01-16 07:03:48,911 [output] Innodb_os_log_fsyncs 3
-2014-01-16 07:03:48,911 [output] Innodb_os_log_pending_fsyncs 0
-2014-01-16 07:03:48,911 [output] Innodb_os_log_pending_writes 0
-2014-01-16 07:03:48,911 [output] Innodb_os_log_written 512
-2014-01-16 07:03:48,912 [output] Innodb_page_size 16384
-2014-01-16 07:03:48,912 [output] Innodb_pages_created 0
-2014-01-16 07:03:48,912 [output] Innodb_pages_read 366
-2014-01-16 07:03:48,912 [output] Innodb_pages_written 0
-2014-01-16 07:03:48,912 [output] Innodb_purge_trx_id 1635160
-2014-01-16 07:03:48,912 [output] Innodb_purge_undo_no 0
-2014-01-16 07:03:48,912 [output] Innodb_row_lock_current_waits 0
-2014-01-16 07:03:48,912 [output] Innodb_current_row_locks 0
-2014-01-16 07:03:48,913 [output] Innodb_row_lock_time 0
-2014-01-16 07:03:48,913 [output] Innodb_row_lock_time_avg 0
-2014-01-16 07:03:48,913 [output] Innodb_row_lock_time_max 0
-2014-01-16 07:03:48,913 [output] Innodb_row_lock_waits 0
-2014-01-16 07:03:48,913 [output] Innodb_rows_deleted 0
-2014-01-16 07:03:48,913 [output] Innodb_rows_inserted 0
-2014-01-16 07:03:48,913 [output] Innodb_rows_read 0
-2014-01-16 07:03:48,913 [output] Innodb_rows_updated 0
-2014-01-16 07:03:48,913 [output] Innodb_read_views_memory 88
-2014-01-16 07:03:48,913 [output] Innodb_descriptors_memory 8000
-2014-01-16 07:03:48,914 [output] Innodb_s_lock_os_waits 2
-2014-01-16 07:03:48,914 [output] Innodb_s_lock_spin_rounds 60
-2014-01-16 07:03:48,914 [output] Innodb_s_lock_spin_waits 2
-2014-01-16 07:03:48,914 [output] Innodb_truncated_status_writes 0
-2014-01-16 07:03:48,914 [output] Innodb_x_lock_os_waits 0
-2014-01-16 07:03:48,914 [output] Innodb_x_lock_spin_rounds 0
-2014-01-16 07:03:48,914 [output] Innodb_x_lock_spin_waits 0
-2014-01-16 07:03:48,950 [output] Test will migrate from 133 to 161
-2014-01-16 07:03:48,956 [output] ++ dirname .../task_plugins/gate_real_db_upgrade/nova_mysql_migrations.sh
-2014-01-16 07:03:48,961 [output] + sudo /sbin/ip netns exec nonet .../task_plugins/gate_real_db_upgrade/nova-manage-wrapper .../envs/bc1198bacf884c0295037e8e32c0ec17 --config-file .../jobs/65/65615/7/check/gate-real-db-upgrade_nova_percona_user_001/bc1198b/nova-grizzly.conf --verbose db sync --version 134
-2014-01-16 07:03:49,076 [syslog] Jan 16 07:03:49 thw-percona-007 /etc/mysql/debian-start[10272]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored
-2014-01-16 07:03:49,076 [syslog] Jan 16 07:03:49 thw-percona-007 /etc/mysql/debian-start[10272]: Looking for 'mysql' as: /usr/bin/mysql
-2014-01-16 07:03:49,076 [syslog] Jan 16 07:03:49 thw-percona-007 /etc/mysql/debian-start[10272]: Looking for 'mysqlcheck' as: /usr/bin/mysqlcheck
-2014-01-16 07:03:49,076 [syslog] Jan 16 07:03:49 thw-percona-007 /etc/mysql/debian-start[10272]: This installation of MySQL is already upgraded to 5.5.35, use --force if you still need to run mysql_upgrade
-2014-01-16 07:03:49,079 [syslog] Jan 16 07:03:49 thw-percona-007 /etc/mysql/debian-start[10299]: Checking for insecure root accounts.
-2014-01-16 07:03:49,102 [syslog] Jan 16 07:03:49 thw-percona-007 /etc/mysql/debian-start[10305]: Triggering myisam-recover for all MyISAM tables
-2014-01-16 07:03:50,665 [sqlerr] 140116 7:03:50 [Warning] IP address '172.16.0.2' could not be resolved: Name or service not known
-2014-01-16 07:03:50,708 [output] 133 -> 134...
-2014-01-16 07:03:50,879 [output] done
-2014-01-16 07:03:51,225 [output] + manage_exit=0
-2014-01-16 07:03:51,225 [output] + set +x
-2014-01-16 07:03:51,226 [output] MySQL counters after upgrade:
-2014-01-16 07:03:51,238 [output] Variable_name Value
-2014-01-16 07:03:51,238 [output] Innodb_adaptive_hash_cells 276671
-2014-01-16 07:03:51,238 [output] Innodb_adaptive_hash_heap_buffers 2
-2014-01-16 07:03:51,238 [output] Innodb_adaptive_hash_hash_searches 951
-2014-01-16 07:03:51,238 [output] Innodb_adaptive_hash_non_hash_searches 8727
-2014-01-16 07:03:51,238 [output] Innodb_background_log_sync 4
-2014-01-16 07:03:51,238 [output] Innodb_buffer_pool_pages_data 1143
-2014-01-16 07:03:51,239 [output] Innodb_buffer_pool_bytes_data 18726912
-2014-01-16 07:03:51,239 [output] Innodb_buffer_pool_pages_dirty 56
-2014-01-16 07:03:51,239 [output] Innodb_buffer_pool_bytes_dirty 917504
-2014-01-16 07:03:51,239 [output] Innodb_buffer_pool_pages_flushed 0
-2014-01-16 07:03:51,239 [output] Innodb_buffer_pool_pages_LRU_flushed 0
-2014-01-16 07:03:51,239 [output] Innodb_buffer_pool_pages_free 7045
-2014-01-16 07:03:51,239 [output] Innodb_buffer_pool_pages_made_not_young 0
-2014-01-16 07:03:51,239 [output] Innodb_buffer_pool_pages_made_young 0
-2014-01-16 07:03:51,240 [output] Innodb_buffer_pool_pages_misc 3
-2014-01-16 07:03:51,240 [output] Innodb_buffer_pool_pages_old 441
-2014-01-16 07:03:51,240 [output] Innodb_buffer_pool_pages_total 8191
-2014-01-16 07:03:51,240 [output] Innodb_buffer_pool_read_ahead_rnd 0
-2014-01-16 07:03:51,240 [output] Innodb_buffer_pool_read_ahead 0
-2014-01-16 07:03:51,240 [output] Innodb_buffer_pool_read_ahead_evicted 0
-2014-01-16 07:03:51,240 [output] Innodb_buffer_pool_read_requests 47329
-2014-01-16 07:03:51,240 [output] Innodb_buffer_pool_reads 1134
-2014-01-16 07:03:51,241 [output] Innodb_buffer_pool_wait_free 0
-2014-01-16 07:03:51,241 [output] Innodb_buffer_pool_write_requests 498
-2014-01-16 07:03:51,241 [output] Innodb_checkpoint_age 22103
-2014-01-16 07:03:51,241 [output] Innodb_checkpoint_max_age 7782360
-2014-01-16 07:03:51,241 [output] Innodb_checkpoint_target_age 7539162
-2014-01-16 07:03:51,241 [output] Innodb_data_fsyncs 14
-2014-01-16 07:03:51,241 [output] Innodb_data_pending_fsyncs 0
-2014-01-16 07:03:51,241 [output] Innodb_data_pending_reads 1
-2014-01-16 07:03:51,241 [output] Innodb_data_pending_writes 0
-2014-01-16 07:03:51,242 [output] Innodb_data_read 20779008
-2014-01-16 07:03:51,242 [output] Innodb_data_reads 1145
-2014-01-16 07:03:51,242 [output] Innodb_data_writes 14
-2014-01-16 07:03:51,242 [output] Innodb_data_written 29184
-2014-01-16 07:03:51,242 [output] Innodb_dblwr_pages_written 0
-2014-01-16 07:03:51,242 [output] Innodb_dblwr_writes 0
-2014-01-16 07:03:51,242 [output] Innodb_deadlocks 0
-2014-01-16 07:03:51,242 [output] Innodb_dict_tables 311
-2014-01-16 07:03:51,243 [output] Innodb_have_atomic_builtins ON
-2014-01-16 07:03:51,243 [output] Innodb_history_list_length 879
-2014-01-16 07:03:51,243 [output] Innodb_ibuf_discarded_delete_marks 0
-2014-01-16 07:03:51,243 [output] Innodb_ibuf_discarded_deletes 0
-2014-01-16 07:03:51,243 [output] Innodb_ibuf_discarded_inserts 0
-2014-01-16 07:03:51,243 [output] Innodb_ibuf_free_list 5
-2014-01-16 07:03:51,243 [output] Innodb_ibuf_merged_delete_marks 0
-2014-01-16 07:03:51,243 [output] Innodb_ibuf_merged_deletes 0
-2014-01-16 07:03:51,244 [output] Innodb_ibuf_merged_inserts 0
-2014-01-16 07:03:51,244 [output] Innodb_ibuf_merges 0
-2014-01-16 07:03:51,244 [output] Innodb_ibuf_segment_size 7
-2014-01-16 07:03:51,244 [output] Innodb_ibuf_size 1
-2014-01-16 07:03:51,244 [output] Innodb_log_waits 0
-2014-01-16 07:03:51,244 [output] Innodb_log_write_requests 54
-2014-01-16 07:03:51,244 [output] Innodb_log_writes 12
-2014-01-16 07:03:51,244 [output] Innodb_lsn_current 727562636278
-2014-01-16 07:03:51,244 [output] Innodb_lsn_flushed 727562636278
-2014-01-16 07:03:51,245 [output] Innodb_lsn_last_checkpoint 727562614175
-2014-01-16 07:03:51,245 [output] Innodb_master_thread_1_second_loops 4
-2014-01-16 07:03:51,245 [output] Innodb_master_thread_10_second_loops 0
-2014-01-16 07:03:51,245 [output] Innodb_master_thread_background_loops 1
-2014-01-16 07:03:51,245 [output] Innodb_master_thread_main_flush_loops 1
-2014-01-16 07:03:51,245 [output] Innodb_master_thread_sleeps 3
-2014-01-16 07:03:51,245 [output] Innodb_max_trx_id 1636119
-2014-01-16 07:03:51,245 [output] Innodb_mem_adaptive_hash 2266736
-2014-01-16 07:03:51,245 [output] Innodb_mem_dictionary 2568175
-2014-01-16 07:03:51,246 [output] Innodb_mem_total 137756672
-2014-01-16 07:03:51,246 [output] Innodb_mutex_os_waits 1
-2014-01-16 07:03:51,246 [output] Innodb_mutex_spin_rounds 30
-2014-01-16 07:03:51,246 [output] Innodb_mutex_spin_waits 1
-2014-01-16 07:03:51,246 [output] Innodb_oldest_view_low_limit_trx_id 1636119
-2014-01-16 07:03:51,246 [output] Innodb_os_log_fsyncs 14
-2014-01-16 07:03:51,246 [output] Innodb_os_log_pending_fsyncs 0
-2014-01-16 07:03:51,246 [output] Innodb_os_log_pending_writes 0
-2014-01-16 07:03:51,246 [output] Innodb_os_log_written 28160
-2014-01-16 07:03:51,247 [output] Innodb_page_size 16384
-2014-01-16 07:03:51,247 [output] Innodb_pages_created 9
-2014-01-16 07:03:51,247 [output] Innodb_pages_read 1133
-2014-01-16 07:03:51,247 [output] Innodb_pages_written 0
-2014-01-16 07:03:51,247 [output] Innodb_purge_trx_id 1636118
-2014-01-16 07:03:51,247 [output] Innodb_purge_undo_no 0
-2014-01-16 07:03:51,247 [output] Innodb_row_lock_current_waits 0
-2014-01-16 07:03:51,247 [output] Innodb_current_row_locks 0
-2014-01-16 07:03:51,247 [output] Innodb_row_lock_time 0
-2014-01-16 07:03:51,248 [output] Innodb_row_lock_time_avg 0
-2014-01-16 07:03:51,248 [output] Innodb_row_lock_time_max 0
-2014-01-16 07:03:51,248 [output] Innodb_row_lock_waits 0
-2014-01-16 07:03:51,248 [output] Innodb_rows_deleted 0
-2014-01-16 07:03:51,248 [output] Innodb_rows_inserted 0
-2014-01-16 07:03:51,248 [output] Innodb_rows_read 5
-2014-01-16 07:03:51,248 [output] Innodb_rows_updated 1
-2014-01-16 07:03:51,248 [output] Innodb_read_views_memory 88
-2014-01-16 07:03:51,248 [output] Innodb_descriptors_memory 8000
-2014-01-16 07:03:51,249 [output] Innodb_s_lock_os_waits 2
-2014-01-16 07:03:51,249 [output] Innodb_s_lock_spin_rounds 60
-2014-01-16 07:03:51,249 [output] Innodb_s_lock_spin_waits 2
-2014-01-16 07:03:51,249 [output] Innodb_truncated_status_writes 0
-2014-01-16 07:03:51,249 [output] Innodb_x_lock_os_waits 1
-2014-01-16 07:03:51,249 [output] Innodb_x_lock_spin_rounds 30
-2014-01-16 07:03:51,249 [output] Innodb_x_lock_spin_waits 1
-2014-01-16 07:03:51,250 [output] nova-manage returned exit code 0
-2014-01-16 07:03:51,250 [output] ++ dirname .../task_plugins/gate_real_db_upgrade/nova_mysql_migrations.sh
-2014-01-16 07:03:51,250 [output] + sudo /sbin/ip netns exec nonet .../task_plugins/gate_real_db_upgrade/nova-manage-wrapper .../envs/bc1198bacf884c0295037e8e32c0ec17 --config-file .../jobs/65/65615/7/check/gate-real-db-upgrade_nova_percona_user_001/bc1198b/nova-grizzly.conf --verbose db sync --version 135
-2014-01-16 07:03:52,241 [output] 134 -> 135...
-2014-01-16 07:04:14,138 [heartbeat]
-2014-01-16 07:04:44,138 [heartbeat]
-2014-01-16 07:04:52,187 [output] done
-2014-01-16 07:04:52,780 [output] + manage_exit=0
-2014-01-16 07:04:52,781 [output] + set +x
-2014-01-16 07:04:52,781 [output] MySQL counters after upgrade:
-2014-01-16 07:04:53,160 [output] Variable_name Value
-2014-01-16 07:04:53,160 [output] Innodb_adaptive_hash_cells 276671
-2014-01-16 07:04:53,160 [output] Innodb_adaptive_hash_heap_buffers 2
-2014-01-16 07:04:53,160 [output] Innodb_adaptive_hash_hash_searches 106083
-2014-01-16 07:04:53,160 [output] Innodb_adaptive_hash_non_hash_searches 298400
-2014-01-16 07:04:53,161 [output] Innodb_background_log_sync 66
-2014-01-16 07:04:53,161 [output] Innodb_buffer_pool_pages_data 8188
-2014-01-16 07:04:53,161 [output] Innodb_buffer_pool_bytes_data 134152192
-2014-01-16 07:04:53,161 [output] Innodb_buffer_pool_pages_dirty 7
-2014-01-16 07:04:53,161 [output] Innodb_buffer_pool_bytes_dirty 114688
-2014-01-16 07:04:53,161 [output] Innodb_buffer_pool_pages_flushed 45520
-2014-01-16 07:04:53,161 [output] Innodb_buffer_pool_pages_LRU_flushed 0
-2014-01-16 07:04:53,161 [output] Innodb_buffer_pool_pages_free 0
-2014-01-16 07:04:53,161 [output] Innodb_buffer_pool_pages_made_not_young 0
-2014-01-16 07:04:53,162 [output] Innodb_buffer_pool_pages_made_young 21156
-2014-01-16 07:04:53,162 [output] Innodb_buffer_pool_pages_misc 3
-2014-01-16 07:04:53,162 [output] Innodb_buffer_pool_pages_old 3003
-2014-01-16 07:04:53,162 [output] Innodb_buffer_pool_pages_total 8191
-2014-01-16 07:04:53,162 [output] Innodb_buffer_pool_read_ahead_rnd 0
-2014-01-16 07:04:53,162 [output] Innodb_buffer_pool_read_ahead 384
-2014-01-16 07:04:53,162 [output] Innodb_buffer_pool_read_ahead_evicted 74
-2014-01-16 07:04:53,162 [output] Innodb_buffer_pool_read_requests 1298715
-2014-01-16 07:04:53,162 [output] Innodb_buffer_pool_reads 26174
-2014-01-16 07:04:53,163 [output] Innodb_buffer_pool_wait_free 0
-2014-01-16 07:04:53,163 [output] Innodb_buffer_pool_write_requests 614699
-2014-01-16 07:04:53,163 [output] Innodb_checkpoint_age 6587228
-2014-01-16 07:04:53,163 [output] Innodb_checkpoint_max_age 7782360
-2014-01-16 07:04:53,163 [output] Innodb_checkpoint_target_age 7539162
-2014-01-16 07:04:53,163 [output] Innodb_data_fsyncs 1413
-2014-01-16 07:04:53,163 [output] Innodb_data_pending_fsyncs 0
-2014-01-16 07:04:53,163 [output] Innodb_data_pending_reads 0
-2014-01-16 07:04:53,164 [output] Innodb_data_pending_writes 0
-2014-01-16 07:04:53,164 [output] Innodb_data_read 437538816
-2014-01-16 07:04:53,164 [output] Innodb_data_reads 26582
-2014-01-16 07:04:53,164 [output] Innodb_data_writes 46917
-2014-01-16 07:04:53,164 [output] Innodb_data_written 1826503168
-2014-01-16 07:04:53,164 [output] Innodb_dblwr_pages_written 45520
-2014-01-16 07:04:53,164 [output] Innodb_dblwr_writes 443
-2014-01-16 07:04:53,164 [output] Innodb_deadlocks 0
-2014-01-16 07:04:53,164 [output] Innodb_dict_tables 345
-2014-01-16 07:04:53,165 [output] Innodb_have_atomic_builtins ON
-2014-01-16 07:04:53,165 [output] Innodb_history_list_length 883
-2014-01-16 07:04:53,165 [output] Innodb_ibuf_discarded_delete_marks 0
-2014-01-16 07:04:53,165 [output] Innodb_ibuf_discarded_deletes 0
-2014-01-16 07:04:53,165 [output] Innodb_ibuf_discarded_inserts 0
-2014-01-16 07:04:53,165 [output] Innodb_ibuf_free_list 5
-2014-01-16 07:04:53,165 [output] Innodb_ibuf_merged_delete_marks 1
-2014-01-16 07:04:53,165 [output] Innodb_ibuf_merged_deletes 0
-2014-01-16 07:04:53,165 [output] Innodb_ibuf_merged_inserts 143
-2014-01-16 07:04:53,166 [output] Innodb_ibuf_merges 18
-2014-01-16 07:04:53,166 [output] Innodb_ibuf_segment_size 7
-2014-01-16 07:04:53,166 [output] Innodb_ibuf_size 1
-2014-01-16 07:04:53,166 [output] Innodb_log_waits 0
-2014-01-16 07:04:53,166 [output] Innodb_log_write_requests 731094
-2014-01-16 07:04:53,166 [output] Innodb_log_writes 507
-2014-01-16 07:04:53,166 [output] Innodb_lsn_current 727897236746
-2014-01-16 07:04:53,166 [output] Innodb_lsn_flushed 727897236160
-2014-01-16 07:04:53,166 [output] Innodb_lsn_last_checkpoint 727890649518
-2014-01-16 07:04:53,167 [output] Innodb_master_thread_1_second_loops 64
-2014-01-16 07:04:53,167 [output] Innodb_master_thread_10_second_loops 6
-2014-01-16 07:04:53,167 [output] Innodb_master_thread_background_loops 1
-2014-01-16 07:04:53,167 [output] Innodb_master_thread_main_flush_loops 1
-2014-01-16 07:04:53,167 [output] Innodb_master_thread_sleeps 63
-2014-01-16 07:04:53,167 [output] Innodb_max_trx_id 1636137
-2014-01-16 07:04:53,167 [output] Innodb_mem_adaptive_hash 2266736
-2014-01-16 07:04:53,167 [output] Innodb_mem_dictionary 2812073
-2014-01-16 07:04:53,167 [output] Innodb_mem_total 137756672
-2014-01-16 07:04:53,168 [output] Innodb_mutex_os_waits 18
-2014-01-16 07:04:53,168 [output] Innodb_mutex_spin_rounds 630
-2014-01-16 07:04:53,168 [output] Innodb_mutex_spin_waits 21
-2014-01-16 07:04:53,168 [output] Innodb_oldest_view_low_limit_trx_id 1636137
-2014-01-16 07:04:53,168 [output] Innodb_os_log_fsyncs 516
-2014-01-16 07:04:53,168 [output] Innodb_os_log_pending_fsyncs 0
-2014-01-16 07:04:53,168 [output] Innodb_os_log_pending_writes 0
-2014-01-16 07:04:53,168 [output] Innodb_os_log_written 334849024
-2014-01-16 07:04:53,169 [output] Innodb_page_size 16384
-2014-01-16 07:04:53,169 [output] Innodb_pages_created 25512
-2014-01-16 07:04:53,169 [output] Innodb_pages_read 26571
-2014-01-16 07:04:53,169 [output] Innodb_pages_written 45520
-2014-01-16 07:04:53,169 [output] Innodb_purge_trx_id 1636136
-2014-01-16 07:04:53,169 [output] Innodb_purge_undo_no 0
-2014-01-16 07:04:53,169 [output] Innodb_row_lock_current_waits 0
-2014-01-16 07:04:53,169 [output] Innodb_current_row_locks 0
-2014-01-16 07:04:53,169 [output] Innodb_row_lock_time 0
-2014-01-16 07:04:53,170 [output] Innodb_row_lock_time_avg 0
-2014-01-16 07:04:53,170 [output] Innodb_row_lock_time_max 0
-2014-01-16 07:04:53,170 [output] Innodb_row_lock_waits 0
-2014-01-16 07:04:53,170 [output] Innodb_rows_deleted 0
-2014-01-16 07:04:53,170 [output] Innodb_rows_inserted 45463
-2014-01-16 07:04:53,170 [output] Innodb_rows_read 45472
-2014-01-16 07:04:53,170 [output] Innodb_rows_updated 2
-2014-01-16 07:04:53,170 [output] Innodb_read_views_memory 96
-2014-01-16 07:04:53,170 [output] Innodb_descriptors_memory 8000
-2014-01-16 07:04:53,171 [output] Innodb_s_lock_os_waits 14
-2014-01-16 07:04:53,171 [output] Innodb_s_lock_spin_rounds 420
-2014-01-16 07:04:53,171 [output] Innodb_s_lock_spin_waits 14
-2014-01-16 07:04:53,171 [output] Innodb_truncated_status_writes 0
-2014-01-16 07:04:53,171 [output] Innodb_x_lock_os_waits 408
-2014-01-16 07:04:53,171 [output] Innodb_x_lock_spin_rounds 12240
-2014-01-16 07:04:53,171 [output] Innodb_x_lock_spin_waits 2
-2014-01-16 07:04:53,172 [output] nova-manage returned exit code 0
-2014-01-16 07:04:53,172 [output] ++ dirname .../task_plugins/gate_real_db_upgrade/nova_mysql_migrations.sh
-2014-01-16 07:04:53,172 [output] + sudo /sbin/ip netns exec nonet .../task_plugins/gate_real_db_upgrade/nova-manage-wrapper .../envs/bc1198bacf884c0295037e8e32c0ec17 --config-file .../jobs/65/65615/7/check/gate-real-db-upgrade_nova_percona_user_001/bc1198b/nova-grizzly.conf --verbose db sync --version 136
-2014-01-16 07:04:55,160 [output] 135 -> 136...
-2014-01-16 07:04:56,173 [output] done
-2014-01-16 07:04:56,453 [output] + manage_exit=0
-2014-01-16 07:04:56,454 [output] + set +x
-2014-01-16 07:04:56,454 [output] MySQL counters after upgrade:
-2014-01-16 07:04:56,466 [output] Variable_name Value
-2014-01-16 07:04:56,466 [output] Innodb_adaptive_hash_cells 276671
-2014-01-16 07:04:56,466 [output] Innodb_adaptive_hash_heap_buffers 2
-2014-01-16 07:04:56,466 [output] Innodb_adaptive_hash_hash_searches 141986
-2014-01-16 07:04:56,466 [output] Innodb_adaptive_hash_non_hash_searches 308095
-2014-01-16 07:04:56,466 [output] Innodb_background_log_sync 69
-2014-01-16 07:04:56,466 [output] Innodb_buffer_pool_pages_data 8188
-2014-01-16 07:04:56,467 [output] Innodb_buffer_pool_bytes_data 134152192
-2014-01-16 07:04:56,467 [output] Innodb_buffer_pool_pages_dirty 92
-2014-01-16 07:04:56,467 [output] Innodb_buffer_pool_bytes_dirty 1507328
-2014-01-16 07:04:56,467 [output] Innodb_buffer_pool_pages_flushed 45520
-2014-01-16 07:04:56,467 [output] Innodb_buffer_pool_pages_LRU_flushed 0
-2014-01-16 07:04:56,467 [output] Innodb_buffer_pool_pages_free 0
-2014-01-16 07:04:56,467 [output] Innodb_buffer_pool_pages_made_not_young 0
-2014-01-16 07:04:56,467 [output] Innodb_buffer_pool_pages_made_young 25041
-2014-01-16 07:04:56,468 [output] Innodb_buffer_pool_pages_misc 3
-2014-01-16 07:04:56,468 [output] Innodb_buffer_pool_pages_old 3002
-2014-01-16 07:04:56,468 [output] Innodb_buffer_pool_pages_total 8191
-2014-01-16 07:04:56,468 [output] Innodb_buffer_pool_read_ahead_rnd 0
-2014-01-16 07:04:56,468 [output] Innodb_buffer_pool_read_ahead 384
-2014-01-16 07:04:56,468 [output] Innodb_buffer_pool_read_ahead_evicted 92
-2014-01-16 07:04:56,468 [output] Innodb_buffer_pool_read_requests 1402370
-2014-01-16 07:04:56,468 [output] Innodb_buffer_pool_reads 29629
-2014-01-16 07:04:56,468 [output] Innodb_buffer_pool_wait_free 0
-2014-01-16 07:04:56,469 [output] Innodb_buffer_pool_write_requests 661199
-2014-01-16 07:04:56,469 [output] Innodb_checkpoint_age 1026411
-2014-01-16 07:04:56,469 [output] Innodb_checkpoint_max_age 7782360
-2014-01-16 07:04:56,469 [output] Innodb_checkpoint_target_age 7539162
-2014-01-16 07:04:56,469 [output] Innodb_data_fsyncs 1418
-2014-01-16 07:04:56,469 [output] Innodb_data_pending_fsyncs 0
-2014-01-16 07:04:56,469 [output] Innodb_data_pending_reads 0
-2014-01-16 07:04:56,469 [output] Innodb_data_pending_writes 0
-2014-01-16 07:04:56,470 [output] Innodb_data_read 494145536
-2014-01-16 07:04:56,470 [output] Innodb_data_reads 30038
-2014-01-16 07:04:56,470 [output] Innodb_data_writes 46923
-2014-01-16 07:04:56,470 [output] Innodb_data_written 1827532288
-2014-01-16 07:04:56,470 [output] Innodb_dblwr_pages_written 45520
-2014-01-16 07:04:56,470 [output] Innodb_dblwr_writes 443
-2014-01-16 07:04:56,470 [output] Innodb_deadlocks 0
-2014-01-16 07:04:56,470 [output] Innodb_dict_tables 345
-2014-01-16 07:04:56,470 [output] Innodb_have_atomic_builtins ON
-2014-01-16 07:04:56,471 [output] Innodb_history_list_length 885
-2014-01-16 07:04:56,471 [output] Innodb_ibuf_discarded_delete_marks 0
-2014-01-16 07:04:56,471 [output] Innodb_ibuf_discarded_deletes 0
-2014-01-16 07:04:56,471 [output] Innodb_ibuf_discarded_inserts 0
-2014-01-16 07:04:56,471 [output] Innodb_ibuf_free_list 5
-2014-01-16 07:04:56,471 [output] Innodb_ibuf_merged_delete_marks 1
-2014-01-16 07:04:56,471 [output] Innodb_ibuf_merged_deletes 0
-2014-01-16 07:04:56,471 [output] Innodb_ibuf_merged_inserts 143
-2014-01-16 07:04:56,472 [output] Innodb_ibuf_merges 18
-2014-01-16 07:04:56,472 [output] Innodb_ibuf_segment_size 7
-2014-01-16 07:04:56,472 [output] Innodb_ibuf_size 1
-2014-01-16 07:04:56,472 [output] Innodb_log_waits 0
-2014-01-16 07:04:56,472 [output] Innodb_log_write_requests 733125
-2014-01-16 07:04:56,472 [output] Innodb_log_writes 511
-2014-01-16 07:04:56,472 [output] Innodb_lsn_current 727898262571
-2014-01-16 07:04:56,472 [output] Innodb_lsn_flushed 727898262571
-2014-01-16 07:04:56,473 [output] Innodb_lsn_last_checkpoint 727897236160
-2014-01-16 07:04:56,473 [output] Innodb_master_thread_1_second_loops 67
-2014-01-16 07:04:56,473 [output] Innodb_master_thread_10_second_loops 6
-2014-01-16 07:04:56,473 [output] Innodb_master_thread_background_loops 1
-2014-01-16 07:04:56,473 [output] Innodb_master_thread_main_flush_loops 1
-2014-01-16 07:04:56,473 [output] Innodb_master_thread_sleeps 66
-2014-01-16 07:04:56,473 [output] Innodb_max_trx_id 1636148
-2014-01-16 07:04:56,473 [output] Innodb_mem_adaptive_hash 2266736
-2014-01-16 07:04:56,473 [output] Innodb_mem_dictionary 2814121
-2014-01-16 07:04:56,474 [output] Innodb_mem_total 137756672
-2014-01-16 07:04:56,474 [output] Innodb_mutex_os_waits 18
-2014-01-16 07:04:56,474 [output] Innodb_mutex_spin_rounds 630
-2014-01-16 07:04:56,474 [output] Innodb_mutex_spin_waits 21
-2014-01-16 07:04:56,474 [output] Innodb_oldest_view_low_limit_trx_id 1636148
-2014-01-16 07:04:56,474 [output] Innodb_os_log_fsyncs 522
-2014-01-16 07:04:56,474 [output] Innodb_os_log_pending_fsyncs 0
-2014-01-16 07:04:56,474 [output] Innodb_os_log_pending_writes 0
-2014-01-16 07:04:56,474 [output] Innodb_os_log_written 335877632
-2014-01-16 07:04:56,475 [output] Innodb_page_size 16384
-2014-01-16 07:04:56,475 [output] Innodb_pages_created 25571
-2014-01-16 07:04:56,475 [output] Innodb_pages_read 30026
-2014-01-16 07:04:56,475 [output] Innodb_pages_written 45520
-2014-01-16 07:04:56,475 [output] Innodb_purge_trx_id 1636147
-2014-01-16 07:04:56,475 [output] Innodb_purge_undo_no 0
-2014-01-16 07:04:56,475 [output] Innodb_row_lock_current_waits 0
-2014-01-16 07:04:56,475 [output] Innodb_current_row_locks 0
-2014-01-16 07:04:56,476 [output] Innodb_row_lock_time 0
-2014-01-16 07:04:56,476 [output] Innodb_row_lock_time_avg 0
-2014-01-16 07:04:56,476 [output] Innodb_row_lock_time_max 0
-2014-01-16 07:04:56,476 [output] Innodb_row_lock_waits 0
-2014-01-16 07:04:56,476 [output] Innodb_rows_deleted 0
-2014-01-16 07:04:56,476 [output] Innodb_rows_inserted 90926
-2014-01-16 07:04:56,476 [output] Innodb_rows_read 45476
-2014-01-16 07:04:56,476 [output] Innodb_rows_updated 3
-2014-01-16 07:04:56,476 [output] Innodb_read_views_memory 96
-2014-01-16 07:04:56,476 [output] Innodb_descriptors_memory 8000
-2014-01-16 07:04:56,477 [output] Innodb_s_lock_os_waits 14
-2014-01-16 07:04:56,477 [output] Innodb_s_lock_spin_rounds 420
-2014-01-16 07:04:56,477 [output] Innodb_s_lock_spin_waits 14
-2014-01-16 07:04:56,477 [output] Innodb_truncated_status_writes 0
-2014-01-16 07:04:56,477 [output] Innodb_x_lock_os_waits 408
-2014-01-16 07:04:56,477 [output] Innodb_x_lock_spin_rounds 12240
-2014-01-16 07:04:56,477 [output] Innodb_x_lock_spin_waits 2
-2014-01-16 07:04:56,478 [output] nova-manage returned exit code 0
-2014-01-16 07:04:56,478 [output] ++ dirname .../task_plugins/gate_real_db_upgrade/nova_mysql_migrations.sh
-2014-01-16 07:04:56,478 [output] + sudo /sbin/ip netns exec nonet .../task_plugins/gate_real_db_upgrade/nova-manage-wrapper .../envs/bc1198bacf884c0295037e8e32c0ec17 --config-file .../jobs/65/65615/7/check/gate-real-db-upgrade_nova_percona_user_001/bc1198b/nova-grizzly.conf --verbose db sync --version 137
-2014-01-16 07:04:57,456 [output] 136 -> 137...
-2014-01-16 07:04:57,486 [output] done
-2014-01-16 07:04:57,741 [output] + manage_exit=0
-2014-01-16 07:04:57,742 [output] + set +x
-2014-01-16 07:04:57,742 [output] MySQL counters after upgrade:
-2014-01-16 07:04:57,754 [output] Variable_name Value
-2014-01-16 07:04:57,754 [output] Innodb_adaptive_hash_cells 276671
-2014-01-16 07:04:57,754 [output] Innodb_adaptive_hash_heap_buffers 2
-2014-01-16 07:04:57,754 [output] Innodb_adaptive_hash_hash_searches 141986
-2014-01-16 07:04:57,754 [output] Innodb_adaptive_hash_non_hash_searches 308112
-2014-01-16 07:04:57,754 [output] Innodb_background_log_sync 70
-2014-01-16 07:04:57,754 [output] Innodb_buffer_pool_pages_data 8188
-2014-01-16 07:04:57,754 [output] Innodb_buffer_pool_bytes_data 134152192
-2014-01-16 07:04:57,755 [output] Innodb_buffer_pool_pages_dirty 98
-2014-01-16 07:04:57,755 [output] Innodb_buffer_pool_bytes_dirty 1605632
-2014-01-16 07:04:57,755 [output] Innodb_buffer_pool_pages_flushed 45520
-2014-01-16 07:04:57,755 [output] Innodb_buffer_pool_pages_LRU_flushed 0
-2014-01-16 07:04:57,755 [output] Innodb_buffer_pool_pages_free 0
-2014-01-16 07:04:57,755 [output] Innodb_buffer_pool_pages_made_not_young 0
-2014-01-16 07:04:57,755 [output] Innodb_buffer_pool_pages_made_young 25046
-2014-01-16 07:04:57,755 [output] Innodb_buffer_pool_pages_misc 3
-2014-01-16 07:04:57,756 [output] Innodb_buffer_pool_pages_old 3002
-2014-01-16 07:04:57,756 [output] Innodb_buffer_pool_pages_total 8191
-2014-01-16 07:04:57,756 [output] Innodb_buffer_pool_read_ahead_rnd 0
-2014-01-16 07:04:57,756 [output] Innodb_buffer_pool_read_ahead 384
-2014-01-16 07:04:57,756 [output] Innodb_buffer_pool_read_ahead_evicted 92
-2014-01-16 07:04:57,756 [output] Innodb_buffer_pool_read_requests 1402454
-2014-01-16 07:04:57,756 [output] Innodb_buffer_pool_reads 29634
-2014-01-16 07:04:57,756 [output] Innodb_buffer_pool_wait_free 0
-2014-01-16 07:04:57,756 [output] Innodb_buffer_pool_write_requests 661250
-2014-01-16 07:04:57,757 [output] Innodb_checkpoint_age 1029808
-2014-01-16 07:04:57,757 [output] Innodb_checkpoint_max_age 7782360
-2014-01-16 07:04:57,757 [output] Innodb_checkpoint_target_age 7539162
-2014-01-16 07:04:57,757 [output] Innodb_data_fsyncs 1421
-2014-01-16 07:04:57,757 [output] Innodb_data_pending_fsyncs 0
-2014-01-16 07:04:57,757 [output] Innodb_data_pending_reads 0
-2014-01-16 07:04:57,757 [output] Innodb_data_pending_writes 0
-2014-01-16 07:04:57,757 [output] Innodb_data_read 494227456
-2014-01-16 07:04:57,758 [output] Innodb_data_reads 30044
-2014-01-16 07:04:57,758 [output] Innodb_data_writes 46927
-2014-01-16 07:04:57,758 [output] Innodb_data_written 1827536896
-2014-01-16 07:04:57,758 [output] Innodb_dblwr_pages_written 45520
-2014-01-16 07:04:57,758 [output] Innodb_dblwr_writes 443
-2014-01-16 07:04:57,758 [output] Innodb_deadlocks 0
-2014-01-16 07:04:57,758 [output] Innodb_dict_tables 345
-2014-01-16 07:04:57,758 [output] Innodb_have_atomic_builtins ON
-2014-01-16 07:04:57,758 [output] Innodb_history_list_length 887
-2014-01-16 07:04:57,759 [output] Innodb_ibuf_discarded_delete_marks 0
-2014-01-16 07:04:57,759 [output] Innodb_ibuf_discarded_deletes 0
-2014-01-16 07:04:57,759 [output] Innodb_ibuf_discarded_inserts 0
-2014-01-16 07:04:57,759 [output] Innodb_ibuf_free_list 5
-2014-01-16 07:04:57,759 [output] Innodb_ibuf_merged_delete_marks 1
-2014-01-16 07:04:57,759 [output] Innodb_ibuf_merged_deletes 0
-2014-01-16 07:04:57,759 [output] Innodb_ibuf_merged_inserts 143
-2014-01-16 07:04:57,759 [output] Innodb_ibuf_merges 18
-2014-01-16 07:04:57,760 [output] Innodb_ibuf_segment_size 7
-2014-01-16 07:04:57,760 [output] Innodb_ibuf_size 1
-2014-01-16 07:04:57,760 [output] Innodb_log_waits 0
-2014-01-16 07:04:57,760 [output] Innodb_log_write_requests 733132
-2014-01-16 07:04:57,760 [output] Innodb_log_writes 514
-2014-01-16 07:04:57,760 [output] Innodb_lsn_current 727898265968
-2014-01-16 07:04:57,760 [output] Innodb_lsn_flushed 727898265968
-2014-01-16 07:04:57,760 [output] Innodb_lsn_last_checkpoint 727897236160
-2014-01-16 07:04:57,761 [output] Innodb_master_thread_1_second_loops 68
-2014-01-16 07:04:57,761 [output] Innodb_master_thread_10_second_loops 6
-2014-01-16 07:04:57,761 [output] Innodb_master_thread_background_loops 1
-2014-01-16 07:04:57,761 [output] Innodb_master_thread_main_flush_loops 1
-2014-01-16 07:04:57,761 [output] Innodb_master_thread_sleeps 67
-2014-01-16 07:04:57,761 [output] Innodb_max_trx_id 1636159
-2014-01-16 07:04:57,761 [output] Innodb_mem_adaptive_hash 2266736
-2014-01-16 07:04:57,761 [output] Innodb_mem_dictionary 2816169
-2014-01-16 07:04:57,761 [output] Innodb_mem_total 137756672
-2014-01-16 07:04:57,762 [output] Innodb_mutex_os_waits 18
-2014-01-16 07:04:57,762 [output] Innodb_mutex_spin_rounds 630
-2014-01-16 07:04:57,762 [output] Innodb_mutex_spin_waits 21
-2014-01-16 07:04:57,762 [output] Innodb_oldest_view_low_limit_trx_id 1636148
-2014-01-16 07:04:57,762 [output] Innodb_os_log_fsyncs 525
-2014-01-16 07:04:57,762 [output] Innodb_os_log_pending_fsyncs 0
-2014-01-16 07:04:57,762 [output] Innodb_os_log_pending_writes 0
-2014-01-16 07:04:57,762 [output] Innodb_os_log_written 335882240
-2014-01-16 07:04:57,762 [output] Innodb_page_size 16384
-2014-01-16 07:04:57,763 [output] Innodb_pages_created 25573
-2014-01-16 07:04:57,763 [output] Innodb_pages_read 30031
-2014-01-16 07:04:57,763 [output] Innodb_pages_written 45520
-2014-01-16 07:04:57,763 [output] Innodb_purge_trx_id 1636147
-2014-01-16 07:04:57,763 [output] Innodb_purge_undo_no 0
-2014-01-16 07:04:57,763 [output] Innodb_row_lock_current_waits 0
-2014-01-16 07:04:57,763 [output] Innodb_current_row_locks 0
-2014-01-16 07:04:57,763 [output] Innodb_row_lock_time 0
-2014-01-16 07:04:57,764 [output] Innodb_row_lock_time_avg 0
-2014-01-16 07:04:57,764 [output] Innodb_row_lock_time_max 0
-2014-01-16 07:04:57,764 [output] Innodb_row_lock_waits 0
-2014-01-16 07:04:57,764 [output] Innodb_rows_deleted 0
-2014-01-16 07:04:57,764 [output] Innodb_rows_inserted 90929
-2014-01-16 07:04:57,764 [output] Innodb_rows_read 45480
-2014-01-16 07:04:57,764 [output] Innodb_rows_updated 4
-2014-01-16 07:04:57,764 [output] Innodb_read_views_memory 96
-2014-01-16 07:04:57,764 [output] Innodb_descriptors_memory 8000
-2014-01-16 07:04:57,764 [output] Innodb_s_lock_os_waits 14
-2014-01-16 07:04:57,765 [output] Innodb_s_lock_spin_rounds 420
-2014-01-16 07:04:57,765 [output] Innodb_s_lock_spin_waits 14
-2014-01-16 07:04:57,765 [output] Innodb_truncated_status_writes 0
-2014-01-16 07:04:57,765 [output] Innodb_x_lock_os_waits 408
-2014-01-16 07:04:57,765 [output] Innodb_x_lock_spin_rounds 12240
-2014-01-16 07:04:57,765 [output] Innodb_x_lock_spin_waits 2
-2014-01-16 07:04:57,765 [output] nova-manage returned exit code 0
-2014-01-16 07:04:57,766 [output] ++ dirname .../task_plugins/gate_real_db_upgrade/nova_mysql_migrations.sh
-2014-01-16 07:04:57,766 [output] + sudo /sbin/ip netns exec nonet .../task_plugins/gate_real_db_upgrade/nova-manage-wrapper .../envs/bc1198bacf884c0295037e8e32c0ec17 --config-file .../jobs/65/65615/7/check/gate-real-db-upgrade_nova_percona_user_001/bc1198b/nova-grizzly.conf --verbose db sync --version 138
-2014-01-16 07:04:58,757 [output] 137 -> 138...
-2014-01-16 07:05:14,138 [heartbeat]
-2014-01-16 07:05:22,054 [output] done
diff --git a/tests/base.py b/tests/base.py
deleted file mode 100644
index d4ff9da..0000000
--- a/tests/base.py
+++ /dev/null
@@ -1,86 +0,0 @@
-# Copyright 2014 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import fixtures
-import gear
-import logging
-import os
-import testtools
-import time
-import yaml
-
-import turbo_hipster.worker_server
-
-logging.basicConfig(level=logging.DEBUG,
- format='%(asctime)s %(name)-32s '
- '%(levelname)-8s %(message)s')
-
-
-class TestWithGearman(testtools.TestCase):
-
- log = logging.getLogger("TestWithGearman")
-
- def setUp(self):
- super(TestWithGearman, self).setUp()
- self.config = None
- self.worker_server = None
- self.gearman_server = gear.Server(0)
-
- def start_server(self):
- if not self.config:
- self._load_config_fixture()
- # Grab the port so the clients can connect to it
- self.config['zuul_server']['gearman_port'] = self.gearman_server.port
-
- self.worker_server = turbo_hipster.worker_server.Server(self.config)
- self.worker_server.setup_logging()
- self.worker_server.start()
- t0 = time.time()
- while time.time() - t0 < 10:
- if self.worker_server.services_started:
- break
- time.sleep(0.01)
- if not self.worker_server.services_started:
- self.fail("Failed to start worker_service services")
-
- def tearDown(self):
- if self.worker_server and not self.worker_server.stopped():
- self.worker_server.shutdown()
- self.gearman_server.shutdown()
- super(TestWithGearman, self).tearDown()
-
- def _load_config_fixture(self, config_name='default-config.yaml'):
- config_dir = os.path.join(os.path.dirname(__file__), 'etc')
- with open(os.path.join(config_dir, config_name), 'r') as config_stream:
- self.config = yaml.safe_load(config_stream)
-
- # Set all of the working dirs etc to a writeable temp dir
- self.temp_path = self.useFixture(fixtures.TempDir()).path
- for config_dir in ['debug_log', 'jobs_working_dir', 'git_working_dir',
- 'pip_download_cache']:
- if config_dir in self.config:
- if self.config[config_dir][0] == '/':
- self.config[config_dir] = self.config[config_dir][1:]
- self.config[config_dir] = os.path.join(self.temp_path,
- self.config[config_dir])
- if self.config['publish_logs']['type'] == 'local':
- if self.config['publish_logs']['path'][0] == '/':
- self.config['publish_logs']['path'] = \
- self.config['publish_logs']['path'][1:]
- self.config['publish_logs']['path'] = os.path.join(
- self.temp_path, self.config['publish_logs']['path'])
-
- if not os.path.isdir(
- os.path.dirname(self.config['publish_logs']['path'])):
- os.makedirs(os.path.dirname(self.config['publish_logs']['path']))
diff --git a/tests/datasets/some_dataset_example/config.json b/tests/datasets/some_dataset_example/config.json
deleted file mode 100644
index e80eace..0000000
--- a/tests/datasets/some_dataset_example/config.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "project": "openstack/nova",
- "type": "mysql",
- "db_user": "nova",
- "db_pass": "tester",
- "database": "nova",
- "seed_data": "nova.sql",
- "logging_conf": "logging.conf",
- "maximum_migration_times": {
- "default": 60,
- "134->135": 120,
- "148->149": 120,
- "151->152": 300,
- "158->159": 120,
- "215->216": 180
- }
-}
diff --git a/tests/datasets/some_dataset_example/logging.conf b/tests/datasets/some_dataset_example/logging.conf
deleted file mode 100644
index d53d188..0000000
--- a/tests/datasets/some_dataset_example/logging.conf
+++ /dev/null
@@ -1,53 +0,0 @@
-[loggers]
-keys = root, nova
-
-[handlers]
-keys = stderr
-
-[formatters]
-keys = default
-
-[logger_root]
-level = INFO
-handlers = stderr
-
-[logger_nova]
-level = INFO
-handlers = stderr
-qualname = nova
-
-[logger_amqplib]
-level = WARNING
-handlers = stderr
-qualname = amqplib
-
-[logger_sqlalchemy]
-level = WARNING
-handlers = stderr
-qualname = sqlalchemy
-# "level = INFO" logs SQL queries.
-# "level = DEBUG" logs SQL queries and results.
-# "level = WARNING" logs neither. (Recommended for production systems.)
-
-[logger_boto]
-level = WARNING
-handlers = stderr
-qualname = boto
-
-[logger_suds]
-level = INFO
-handlers = stderr
-qualname = suds
-
-[logger_eventletwsgi]
-level = WARNING
-handlers = stderr
-qualname = eventlet.wsgi.server
-
-[handler_stderr]
-class = StreamHandler
-args = (sys.stderr,)
-formatter = default
-
-[formatter_default]
-format = %(message)s
diff --git a/tests/disabled_common.py b/tests/disabled_common.py
deleted file mode 100644
index 493cc8e..0000000
--- a/tests/disabled_common.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/python2
-#
-# Copyright 2014 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import testtools
-
-import fakes
-
-from turbo_hipster.lib import common
-from turbo_hipster.lib import models
-
-
-class TestTaskStep(testtools.TestCase):
- def test_task_step_decorator(self):
- class FakeTask(models.Task):
- def __init__(self, global_config, job_name, job_config):
- super(FakeTask, self).__init__(global_config, job_name,
- job_config)
- # Define the number of steps we will do to determine our
- # progress.
- self.total_steps = 2
-
- @common.task_step
- def do_something(self):
- pass
-
- def non_step(self):
- pass
-
- @common.task_step
- def do_something_more(self):
- pass
-
- task = FakeTask({}, 'build:function', {})
- task.job = fakes.FakeJob()
-
- self.assertEqual(0, task.current_step)
-
- task.do_something()
- self.assertEqual(1, task.current_step)
-
- task.non_step()
- self.assertEqual(1, task.current_step)
-
- task.do_something_more()
- self.assertEqual(2, task.current_step)
diff --git a/tests/disabled_jjb_runner.py b/tests/disabled_jjb_runner.py
deleted file mode 100644
index e5f088c..0000000
--- a/tests/disabled_jjb_runner.py
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright 2014 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import base
-import fakes
-import fixtures
-import json
-import logging
-import os
-import uuid
-
-from turbo_hipster.lib import utils
-
-
-class TestTaskRunner(base.TestWithGearman):
- log = logging.getLogger("TestTaskRunner")
-
- def _grab_jjb(self):
- # Grab a copy of JJB's config
- temp_path = self.useFixture(fixtures.TempDir()).path
- cmd = 'git clone https://git.openstack.org/openstack-infra/config'
- utils.execute_to_log(cmd, '/dev/null', cwd=temp_path)
- return os.path.join(
- temp_path, 'config',
- 'modules/openstack_project/files/jenkins_job_builder/config'
- )
-
- def test_jjb_pep8_job(self):
- self.skipTest("This is buggy atm.")
- # We can only do this if we have the slave scripts installed in
- # /usr/local/jenkins/slave_scripts/
- if not os.path.isdir('/usr/local/jenkins/slave_scripts/'):
- self.skipTest("Slave scripts aren't installed")
-
- jjb_config_dir = self._grab_jjb()
- self._load_config_fixture('jjb-config.yaml')
- # set jjb_config to pulled in config
- self.config['plugins'][0]['jjb_config'] = jjb_config_dir
-
- self.start_server()
- zuul = fakes.FakeZuul(self.config['zuul_server']['gearman_host'],
- self.config['zuul_server']['gearman_port'])
-
- job_uuid = str(uuid.uuid1())[:8]
- data_req = {
- 'ZUUL_UUID': job_uuid,
- 'ZUUL_PROJECT': 'stackforge/turbo-hipster',
- 'ZUUL_PIPELINE': 'check',
- 'ZUUL_URL': 'https://git.openstack.org/',
- 'BRANCH': 'master',
- 'BASE_LOG_PATH': '56/123456/8',
- 'LOG_PATH': '56/123456/8/check/job_name/%s' % job_uuid
- }
-
- zuul.submit_job('build:gate-turbo-hipster-pep8', data_req)
- zuul.wait_for_completion()
-
- self.assertTrue(zuul.job.complete)
- last_data = json.loads(zuul.job.data[-1])
- self.log.debug(last_data)
- self.assertEqual("SUCCESS", last_data['result'])
diff --git a/tests/disabled_real_db_upgrade.py b/tests/disabled_real_db_upgrade.py
deleted file mode 100644
index 0f79525..0000000
--- a/tests/disabled_real_db_upgrade.py
+++ /dev/null
@@ -1,105 +0,0 @@
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import json
-import os
-import testtools
-
-from turbo_hipster.task_plugins.real_db_upgrade import handle_results
-
-TESTS_DIR = os.path.join(os.path.dirname(__file__))
-
-
-class TestHandleResults(testtools.TestCase):
- def test_line_to_time(self):
- test_line = '2013-11-22 21:42:45,908 [output] 141 -> 142... '
- logfile = os.path.join(TESTS_DIR, 'assets/logcontent')
- lp = handle_results.LogParser(logfile, None)
- result = lp.line_to_time(test_line)
- self.assertEqual(result, 1385156565)
-
- def test_check_migration(self):
- with open(os.path.join(TESTS_DIR,
- 'datasets/some_dataset_example/config.json'),
- 'r') as config_stream:
- dataset_config = json.load(config_stream)
- duration = 120
-
- result = handle_results.check_migration({'to': '151',
- 'from': '150'},
- 'maximum_migration_times',
- duration, dataset_config)
- self.assertFalse(result)
-
- result = handle_results.check_migration({'to': '152',
- 'from': '151'},
- 'maximum_migration_times',
- duration, dataset_config)
- self.assertTrue(result)
-
- def test_check_log_for_errors(self):
- logfile = os.path.join(TESTS_DIR,
- 'assets/20131007_devstack_export.log')
-
- def fake_find_schemas_230():
- return [230]
-
- lp = handle_results.LogParser(logfile, '/tmp/foo')
- lp.find_schemas = fake_find_schemas_230
- lp.process_log()
- self.assertEqual(['FAILURE - Final schema version does not match '
- 'expectation'], lp.errors)
- self.assertEqual([], lp.warnings)
-
- def fake_find_schemas_228():
- return [228]
-
- lp = handle_results.LogParser(logfile, '/tmp/foo')
- lp.find_schemas = fake_find_schemas_228
- lp.process_log()
- self.assertEqual([], lp.errors)
- self.assertEqual([], lp.warnings)
-
- def test_parse_log(self):
- # This is a regression test for a log which didn't used to parse.
- logfile = os.path.join(TESTS_DIR, 'assets/logcontent')
- lp = handle_results.LogParser(logfile, None)
- lp.process_log()
-
- self.assertEqual([], lp.errors)
- self.assertEqual([], lp.warnings)
-
- migrations = []
- for migration in lp.migrations:
- migrations.append(migration['to'])
-
- for migration in range(134, 229):
- self.assertTrue(migration in migrations,
- 'Migration %d missing from %s'
- % (migration, migrations))
-
- def test_innodb_stats(self):
- logfile = os.path.join(TESTS_DIR, 'assets/user_001.log')
-
- def fake_find_schemas_228():
- return [228]
-
- lp = handle_results.LogParser(logfile, '/tmp/foo')
- lp.find_schemas = fake_find_schemas_228
- lp.process_log()
-
- migration = lp.migrations[0]
- self.assertTrue('stats' in migration)
- self.assertTrue('Innodb_rows_read' in migration['stats'])
- self.assertEqual(5, migration['stats']['Innodb_rows_read'])
diff --git a/tests/disabled_shell_task.py b/tests/disabled_shell_task.py
deleted file mode 100644
index eb60552..0000000
--- a/tests/disabled_shell_task.py
+++ /dev/null
@@ -1,231 +0,0 @@
-# Copyright 2014 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import base
-import fakes
-import json
-import logging
-import mock
-import os
-import uuid
-
-from turbo_hipster.lib.models import ShellTask, Task
-
-
-class TestTaskRunner(base.TestWithGearman):
- log = logging.getLogger("TestTaskRunner")
-
- def test_simple_job_passes(self):
- self.start_server()
- zuul = fakes.FakeZuul(self.config['zuul_server']['gearman_host'],
- self.config['zuul_server']['gearman_port'])
-
- job_uuid = str(uuid.uuid1())[:8]
- data_req = {
- 'ZUUL_UUID': job_uuid,
- 'ZUUL_PROJECT': 'stackforge/turbo-hipster',
- 'ZUUL_PIPELINE': 'check',
- 'ZUUL_URL': 'https://git.openstack.org/',
- 'BRANCH': 'master',
- 'BASE_LOG_PATH': '56/123456/8',
- 'LOG_PATH': '56/123456/8/check/job_name/%s' % job_uuid
- }
-
- zuul.submit_job('build:do_something_shelly', data_req)
- zuul.wait_for_completion()
-
- last_data = json.loads(zuul.job.data[-1])
- self.log.debug(last_data)
-
- self.assertTrue(zuul.job.complete)
- self.assertFalse(zuul.job.failure)
- self.assertEqual("SUCCESS", last_data['result'])
-
- task_output_file = open(os.path.join(
- self.config['publish_logs']['path'], data_req['LOG_PATH'],
- 'task_output.log'
- ))
-
- self.assertIn("Step 1: Setup environment", task_output_file.readline())
-
- git_prep_file = open(os.path.join(
- self.config['publish_logs']['path'], data_req['LOG_PATH'],
- 'git_prep.log'
- ))
-
- self.assertIn("gerrit-git-prep.sh", git_prep_file.readline())
-
- shell_output_file = open(os.path.join(
- self.config['publish_logs']['path'], data_req['LOG_PATH'],
- 'shell_output.log'
- ))
-
- self.assertIn("ls -lah", shell_output_file.readline())
-
- def test_simple_job_fails(self):
- # Test when the script fails
- self.start_server()
- zuul = fakes.FakeZuul(self.config['zuul_server']['gearman_host'],
- self.config['zuul_server']['gearman_port'])
-
- job_uuid = str(uuid.uuid1())[:8]
- data_req = {
- 'ZUUL_UUID': job_uuid,
- 'ZUUL_PROJECT': 'stackforge/turbo-hipster',
- 'ZUUL_PIPELINE': 'check',
- 'ZUUL_URL': 'https://git.openstack.org/',
- 'BRANCH': 'master',
- 'BASE_LOG_PATH': '56/123456/8',
- 'LOG_PATH': '56/123456/8/check/job_name/%s' % job_uuid
- }
-
- # Modify the job to fail. The git_path, job_working_dir and unqiue_id
- # are all passed to the shell script. If we 'ls unique_id' it'll fail
- # since it doesn't exist.
- self.config['jobs'][0]['shell_script'] = 'ls -lah'
-
- zuul.submit_job('build:do_something_shelly', data_req)
- zuul.wait_for_completion()
-
- last_data = json.loads(zuul.job.data[-1])
- self.log.debug(last_data)
-
- self.assertTrue(zuul.job.complete)
- self.assertTrue(zuul.job.failure)
- self.assertEqual("Return code from test script was non-zero (2)",
- last_data['result'])
-
- task_output_file = open(os.path.join(
- self.config['publish_logs']['path'], data_req['LOG_PATH'],
- 'task_output.log'
- ))
-
- self.assertIn("Step 1: Setup environment", task_output_file.readline())
-
- git_prep_file = open(os.path.join(
- self.config['publish_logs']['path'], data_req['LOG_PATH'],
- 'git_prep.log'
- ))
-
- self.assertIn("gerrit-git-prep.sh", git_prep_file.readline())
-
- shell_output_file = open(os.path.join(
- self.config['publish_logs']['path'], data_req['LOG_PATH'],
- 'shell_output.log'
- ))
-
- self.assertIn("ls -lah", shell_output_file.readline())
-
- @mock.patch.object(ShellTask, '_parse_and_check_results')
- def test_logs_uploaded_during_failure(self,
- mocked_parse_and_check_results):
- # When turbo-hipster itself fails (eg analysing results) it should
- # still upload the python logging log if it can
-
- def side_effect():
- raise Exception('check results failed!')
-
- # ShellTask._parse_and_check_results = _fake_parse_and_check_results
- mocked_parse_and_check_results.side_effect = side_effect
-
- self.start_server()
- zuul = fakes.FakeZuul(self.config['zuul_server']['gearman_host'],
- self.config['zuul_server']['gearman_port'])
-
- job_uuid = str(uuid.uuid1())[:8]
- data_req = {
- 'ZUUL_UUID': job_uuid,
- 'ZUUL_PROJECT': 'stackforge/turbo-hipster',
- 'ZUUL_PIPELINE': 'check',
- 'ZUUL_URL': 'https://git.openstack.org/',
- 'BRANCH': 'master',
- 'BASE_LOG_PATH': '56/123456/8',
- 'LOG_PATH': '56/123456/8/check/job_name/%s' % job_uuid
- }
-
- zuul.submit_job('build:do_something_shelly', data_req)
- zuul.wait_for_completion()
-
- last_data = json.loads(zuul.job.data[-1])
- self.log.debug(last_data)
-
- self.assertTrue(zuul.job.complete)
- self.assertTrue(zuul.job.failure)
- self.assertEqual("FAILURE running the job\n"
- "Exception: check results failed!",
- last_data['result'])
-
- git_prep_file = open(os.path.join(
- self.config['publish_logs']['path'], data_req['LOG_PATH'],
- 'git_prep.log'
- ))
-
- self.assertIn("gerrit-git-prep.sh", git_prep_file.readline())
-
- shell_output_file = open(os.path.join(
- self.config['publish_logs']['path'], data_req['LOG_PATH'],
- 'shell_output.log'
- ))
-
- self.assertIn("ls -lah", shell_output_file.readline())
-
- task_output_file = open(os.path.join(
- self.config['publish_logs']['path'], data_req['LOG_PATH'],
- 'task_output.log'
- ))
-
- task_output_lines = task_output_file.readlines()
- self.assertIn("Step 1: Setup environment", task_output_lines[0])
- self.assertIn("Something failed running the job!",
- task_output_lines[6])
- self.assertIn("Exception: check results failed!",
- task_output_lines[len(task_output_lines) - 1])
-
- @mock.patch.object(Task, '_upload_results')
- def test_exception_when_uploading_fails(self, mocked_upload_results):
-
- def side_effect():
- raise Exception('uploading results failed!')
-
- mocked_upload_results.side_effect = side_effect
-
- self.start_server()
- zuul = fakes.FakeZuul(self.config['zuul_server']['gearman_host'],
- self.config['zuul_server']['gearman_port'])
-
- job_uuid = str(uuid.uuid1())[:8]
- data_req = {
- 'ZUUL_UUID': job_uuid,
- 'ZUUL_PROJECT': 'stackforge/turbo-hipster',
- 'ZUUL_PIPELINE': 'check',
- 'ZUUL_URL': 'https://git.openstack.org/',
- 'BRANCH': 'master',
- 'BASE_LOG_PATH': '56/123456/8',
- 'LOG_PATH': '56/123456/8/check/job_name/%s' % job_uuid
- }
-
- zuul.submit_job('build:do_something_shelly', data_req)
- zuul.wait_for_completion()
-
- last_data = json.loads(zuul.job.data[-1])
- self.log.debug(last_data)
-
- self.assertTrue(zuul.job.complete)
- self.assertTrue(zuul.job.failure)
- self.assertEqual("FAILURE during cleanup and log upload\n"
- "Exception: uploading results failed!",
- last_data['result'])
-
- def test_failure_during_setup(self):
- pass
diff --git a/tests/disabled_utils.py b/tests/disabled_utils.py
deleted file mode 100644
index 4965c03..0000000
--- a/tests/disabled_utils.py
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/python2
-#
-# Copyright 2014 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import fixtures
-import logging
-import os
-import testtools
-
-from turbo_hipster.lib import utils
-
-
-class TestExecuteToLog(testtools.TestCase):
- def test_makes_dir(self):
- tempdir = self.useFixture(fixtures.TempDir()).path
- self.assertFalse(os.path.exists(os.path.join(tempdir, 'foo')))
- utils.execute_to_log('echo yay',
- os.path.join(tempdir, 'foo', 'banana.log'),
- watch_logs=[])
- self.assertTrue(os.path.exists(os.path.join(tempdir, 'foo')))
-
- def test_logging_works(self):
- # Setup python logging to do what we need
- logging.basicConfig(format='%(asctime)s %(name)s %(message)s',
- level=logging.DEBUG)
-
- tempdir = self.useFixture(fixtures.TempDir()).path
- log_path = os.path.join(tempdir, 'banana.log')
-
- utils.execute_to_log('echo yay', log_path, watch_logs=[])
- self.assertTrue(os.path.exists(log_path))
-
- with open(log_path) as f:
- d = f.read()
- print d
-
- self.assertNotEqual('', d)
- self.assertEqual(4, len(d.split('\n')))
- self.assertNotEqual(-1, d.find('yay'))
- self.assertNotEqual(-1, d.find('[script exit code = 0]'))
-
- def test_timeout(self):
- # Setup python logging to do what we need
- logging.basicConfig(format='%(asctime)s %(name)s %(message)s',
- level=logging.DEBUG)
-
- tempdir = self.useFixture(fixtures.TempDir()).path
- log_path = os.path.join(tempdir, 'banana.log')
-
- utils.execute_to_log('/bin/sleep 30', log_path, watch_logs=[],
- timeout=0.1)
- self.assertTrue(os.path.exists(log_path))
-
- with open(log_path) as f:
- d = f.read()
- print d
-
- self.assertNotEqual('', d)
- self.assertNotEqual(-1, d.find('[timeout]'))
- self.assertNotEqual(-1, d.find('[script exit code = -9]'))
diff --git a/tests/disabled_worker_manager.py b/tests/disabled_worker_manager.py
deleted file mode 100644
index cebf8dc..0000000
--- a/tests/disabled_worker_manager.py
+++ /dev/null
@@ -1,246 +0,0 @@
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import os
-import time
-
-import base
-import fakes
-
-
-class TestWorkerServer(base.TestWithGearman):
- def test_jobs_load_from_legacy_plugins(self):
- "Test the configured plugins are loaded from legacy config.yaml layout"
-
- self.start_server()
-
- self.assertFalse(self.worker_server.stopped())
- self.assertEqual(3, len(self.worker_server.jobs))
-
- expected_jobs = {
- 'build:real-db-upgrade_nova_mysql_devstack_131007': {
- "name": "build:real-db-upgrade_nova_mysql_devstack_131007",
- "plugin": "real_db_upgrade",
- "runner_module_name": "turbo_hipster.task_plugins."
- "real_db_upgrade.task",
- "plugin_config": {
- "name": "real_db_upgrade",
- "datasets_dir": "/var/lib/turbo-hipster/"
- "datasets_devstack_131007",
- "function": "build:real-db-upgrade_nova_mysql_devstack_"
- "131007"
- },
- },
- 'build:real-db-upgrade_nova_mysql_user_001': {
- "name": "build:real-db-upgrade_nova_mysql_user_001",
- "plugin": "real_db_upgrade",
- "runner_module_name": "turbo_hipster.task_plugins."
- "real_db_upgrade.task",
- "plugin_config": {
- "name": "real_db_upgrade",
- "datasets_dir": "/var/lib/turbo-hipster/datasets_user_001",
- "function": "build:real-db-upgrade_nova_mysql_user_001"
- },
- },
- 'build:do_something_shelly': {
- "name": "build:do_something_shelly",
- "plugin": "shell_script",
- "runner_module_name": "turbo_hipster.task_plugins."
- "shell_script.task",
- "job_config": {
- "name": "build:do_something_shelly",
- "shell_script": "ls -lah && echo",
- },
- },
- }
-
- for job_name, job in self.worker_server.jobs.items():
- self.assertEqual(expected_jobs[job_name]['name'],
- job['name'])
- self.assertEqual(expected_jobs[job_name]['plugin'],
- job['plugin'])
- if 'plugin_config' in job:
- self.assertEqual(expected_jobs[job_name]['plugin_config'],
- job['plugin_config'])
- if 'job_config' in job:
- self.assertEqual(expected_jobs[job_name]['job_config'],
- job['job_config'])
- self.assertEqual(
- expected_jobs[job_name]['runner_module_name'],
- job['runner'].__module__
- )
-
- def test_job_configuration(self):
- "Test config.yaml job layout"
- self._load_config_fixture('config.yaml')
- self.start_server()
-
- self.assertFalse(self.worker_server.stopped())
- self.assertEqual(3, len(self.worker_server.jobs))
-
- expected_jobs = {
- 'build:real-db-upgrade_nova_mysql': {
- "name": "build:real-db-upgrade_nova_mysql",
- "plugin": "real_db_upgrade",
- "runner_module_name": "turbo_hipster.task_plugins."
- "real_db_upgrade.task",
- "job_config": {
- "name": "build:real-db-upgrade_nova_mysql",
- "plugin": "real_db_upgrade",
- "datasets_dir": "/home/josh/var/lib/turbo-hipster/datasets"
- },
- },
- 'build:real-db-upgrade_nova_mysql_user_001': {
- "name": "build:real-db-upgrade_nova_mysql_user_001",
- "plugin": "real_db_upgrade",
- "runner_module_name": "turbo_hipster.task_plugins."
- "real_db_upgrade.task",
- "plugin_config": {
- "name": "real_db_upgrade",
- "datasets_dir": "/var/lib/turbo-hipster/datasets_user_001",
- "function": "build:real-db-upgrade_nova_mysql_user_001",
- },
- },
- 'build:some_shell_job': {
- "name": "build:some_shell_job",
- "plugin": "shell_script",
- "runner_module_name": "turbo_hipster.task_plugins."
- "shell_script.task",
- "job_config": {
- "name": "build:some_shell_job",
- "shell_script": "/dev/null",
- },
- },
- }
-
- for job_name, job in self.worker_server.jobs.items():
- self.assertEqual(expected_jobs[job_name]['name'],
- job['name'])
- self.assertEqual(expected_jobs[job_name]['plugin'],
- job['plugin'])
- if 'plugin_config' in job:
- self.assertEqual(expected_jobs[job_name]['plugin_config'],
- job['plugin_config'])
- if 'job_config' in job:
- self.assertEqual(expected_jobs[job_name]['job_config'],
- job['job_config'])
- self.assertEqual(
- expected_jobs[job_name]['runner_module_name'],
- job['runner'].__module__
- )
-
- def test_zuul_client_started(self):
- "Test the zuul client has been started"
- self.start_server()
- self.assertFalse(self.worker_server.zuul_client.stopped())
-
- def test_zuul_manager_started(self):
- "Test the zuul manager has been started"
- self.start_server()
- self.assertFalse(self.worker_server.zuul_manager.stopped())
-
-
-class TestZuulClient(base.TestWithGearman):
- def test_setup_gearman_worker(self):
- "Make sure the client is registered as a worker with gearman"
- pass
-
- def test_registered_functions(self):
- "Test the correct functions are registered with gearman"
-
- self.start_server()
-
- # The client should have all of the functions defined in the config
- # registered with gearman
-
- # We need to wait for all the functions to register with the server..
- # We'll give it up to 10seconds to do so
- t0 = time.time()
- failed = True
- while time.time() - t0 < 10:
- # There should be 4 functions. 1 for each plugin + 1 for the
- # manager
- if len(self.gearman_server.functions) == 4:
- failed = False
- break
- time.sleep(0.01)
- if failed:
- self.log.debug(self.gearman_server.functions)
- self.fail("The correct number of functions haven't registered with"
- " gearman")
-
- self.assertIn('build:real-db-upgrade_nova_mysql_devstack_131007',
- self.gearman_server.functions)
- self.assertIn('build:real-db-upgrade_nova_mysql_user_001',
- self.gearman_server.functions)
- self.assertIn('build:do_something_shelly',
- self.gearman_server.functions)
-
- def test_waiting_for_job(self):
- "Make sure the client waits for jobs as expected"
- pass
-
- def test_stop(self):
- "Test sending a stop signal to the client exists correctly"
- pass
-
- def test_job_can_shutdown_th(self):
- self._load_config_fixture('shutdown-config.yaml')
- self.start_server()
- zuul = fakes.FakeZuul(self.config['zuul_server']['gearman_host'],
- self.config['zuul_server']['gearman_port'])
-
- # First check we can run a job that /doesn't/ shut down turbo-hipster
- data_req = zuul.make_zuul_data()
- zuul.submit_job('build:demo_job_clean', data_req)
- zuul.wait_for_completion()
- self.assertTrue(zuul.job.complete)
- self.assertFalse(self.worker_server.stopped())
-
- # Now run a job that leaves the environment dirty and /should/ shut
- # down turbo-hipster
- zuul.job = None
- zuul.submit_job('build:demo_job_dirty', data_req)
- zuul.wait_for_completion()
- self.assertTrue(zuul.job.complete)
- # Give the server a second to shutdown
- time.sleep(1)
- self.assertTrue(self.worker_server.stopped())
-
-
-class TestZuulManager(base.TestWithGearman):
- def test_registered_functions(self):
- "Test the correct functions are registered with gearman"
-
- self.start_server()
-
- # We need to wait for all the functions to register with the server..
- # We'll give it up to 10seconds to do so
- t0 = time.time()
- failed = True
- while time.time() - t0 < 10:
- # There should be 4 functions. 1 for each plugin + 1 for the
- # manager
- if len(self.gearman_server.functions) == 4:
- failed = False
- break
- time.sleep(0.01)
- if failed:
- self.log.debug(self.gearman_server.functions)
- self.fail("The correct number of functions haven't registered with"
- " gearman")
-
- hostname = os.uname()[1]
- self.assertIn('stop:turbo-hipster-manager-%s' % hostname,
- self.gearman_server.functions)
diff --git a/tests/disabled_worker_server.py b/tests/disabled_worker_server.py
deleted file mode 100644
index 200a7b3..0000000
--- a/tests/disabled_worker_server.py
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/python2
-#
-# Copyright 2014 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import os
-import testtools
-import yaml
-
-from turbo_hipster import worker_server
-
-CONFIG_DIR = os.path.join(os.path.dirname(__file__), 'etc')
-with open(os.path.join(CONFIG_DIR, 'config.yaml'), 'r') as config_stream:
- CONFIG = yaml.safe_load(config_stream)
-
-CONF_D_DIR = os.path.join(CONFIG_DIR, "conf.d")
-
-
-class TestServerManager(testtools.TestCase):
- def setUp(self):
- super(TestServerManager, self).setUp()
- self.config = CONFIG
-
- def tearDown(self):
- super(TestServerManager, self).tearDown()
-
- def test_confd_configuration(self):
- """ Check that the server can load in other configuration from a
- conf.d directory """
-
- def pass_function(*args, **kargs):
- pass
-
- self.config["conf_d"] = CONF_D_DIR
-
- worker_server.Server.setup_logging = pass_function
- serv = worker_server.Server(self.config)
- serv_config = serv.config
- self.assertIn("extra_configuration", serv_config)
- self.assertEquals("testing123", serv_config["extra_configuration"])
diff --git a/tests/etc/conf.d/extra.yaml b/tests/etc/conf.d/extra.yaml
deleted file mode 100644
index 44fe974..0000000
--- a/tests/etc/conf.d/extra.yaml
+++ /dev/null
@@ -1 +0,0 @@
-extra_configuration: testing123
diff --git a/tests/etc/config.yaml b/tests/etc/config.yaml
deleted file mode 100644
index 0b4230d..0000000
--- a/tests/etc/config.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-zuul_server:
- gerrit_site: http://review.openstack.org
- git_origin: https://git.openstack.org
- gearman_host: localhost
- gearman_port: 0
-
-debug_log: /home/josh/var/log/turbo-hipster/debug.log
-jobs_working_dir: /home/josh/var/lib/turbo-hipster/jobs
-git_working_dir: /home/josh/var/lib/turbo-hipster/git
-pip_download_cache: /home/josh/var/cache/pip
-
-jobs:
- - name: build:real-db-upgrade_nova_mysql
- datasets_dir: /home/josh/var/lib/turbo-hipster/datasets
- plugin: real_db_upgrade
- - name: build:some_shell_job
- shell_script: /dev/null
-
-# Legacy job definition as plugins
-plugins:
- - name: real_db_upgrade
- datasets_dir: /var/lib/turbo-hipster/datasets_user_001
- function: build:real-db-upgrade_nova_mysql_user_001
-
-publish_logs:
- type: local
- path: /home/josh/var/www/results/
- prepend_url: http://localhost/results/
diff --git a/tests/etc/default-config.yaml b/tests/etc/default-config.yaml
deleted file mode 100644
index e2cfa41..0000000
--- a/tests/etc/default-config.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
-zuul_server:
- gerrit_site: http://review.openstack.org
- git_origin: https://git.openstack.org
- gearman_host: localhost
- gearman_port: 0
-
-debug_log: /var/log/turbo-hipster/debug.log
-jobs_working_dir: /var/lib/turbo-hipster/jobs
-git_working_dir: /var/lib/turbo-hipster/git
-pip_download_cache: /var/cache/pip
-
-jobs:
- - name: build:do_something_shelly
- shell_script: 'ls -lah && echo'
-
-# Legacy job definition as plugins
-plugins:
- - name: real_db_upgrade
- datasets_dir: /var/lib/turbo-hipster/datasets_devstack_131007
- function: build:real-db-upgrade_nova_mysql_devstack_131007
-
- - name: real_db_upgrade
- datasets_dir: /var/lib/turbo-hipster/datasets_user_001
- function: build:real-db-upgrade_nova_mysql_user_001
-
-publish_logs:
- type: local
- path: /tmp/turbo-hipster/var/www/results/
- prepend_url: http://localhost/results/
diff --git a/tests/etc/jjb-config.yaml b/tests/etc/jjb-config.yaml
deleted file mode 100644
index 6a201c1..0000000
--- a/tests/etc/jjb-config.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-zuul_server:
- gerrit_site: http://review.openstack.org
- git_origin: https://git.openstack.org
- gearman_host: localhost
- gearman_port: 0
-
-debug_log: /var/log/turbo-hipster/debug.log
-jobs_working_dir: /var/lib/turbo-hipster/jobs
-git_working_dir: /var/lib/turbo-hipster/git
-pip_download_cache: /var/cache/pip
-
-plugins:
- - name: jjb_runner
- function: build:gate-turbo-hipster-pep8
- jjb_config: modules/openstack_project/files/jenkins_job_builder/config
-
-publish_logs:
- type: local
- path: /var/lib/turbo_hipster/logs
- prepend_url: http://mylogserver/
\ No newline at end of file
diff --git a/tests/etc/shutdown-config.yaml b/tests/etc/shutdown-config.yaml
deleted file mode 100644
index 605efe3..0000000
--- a/tests/etc/shutdown-config.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-zuul_server:
- gerrit_site: http://review.openstack.org
- git_origin: https://git.openstack.org
- gearman_host: localhost
- gearman_port: 0
-
-debug_log: /var/log/turbo-hipster/debug.log
-jobs_working_dir: /var/lib/turbo-hipster/jobs
-git_working_dir: /var/lib/turbo-hipster/git
-pip_download_cache: /var/cache/pip
-
-plugins:
- - name: shell_script
- function: build:demo_job_clean
- shell_script: /dev/null
- - name: shell_script
- function: build:demo_job_dirty
- shell_script: /dev/null
- shutdown-th: true
-
-publish_logs:
- type: local
- path: /var/lib/turbo_hipster/logs
- prepend_url: http://mylogserver/
\ No newline at end of file
diff --git a/tests/fakes.py b/tests/fakes.py
deleted file mode 100644
index 07e5eeb..0000000
--- a/tests/fakes.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/python2
-#
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import gear
-import json
-import time
-import uuid
-
-
-class FakeJob(object):
- def __init__(self):
- pass
-
- def sendWorkStatus(self, *args, **kwargs):
- pass
-
-
-class FakeZuul(object):
- """A fake zuul/gearman client to request work from gearman and check
- results"""
- def __init__(self, server, port):
- self.gearman = gear.Client('FakeZuul')
- self.gearman.addServer(server, port)
- self.gearman.waitForServer()
- self.job = None
-
- def make_zuul_data(self, data={}):
- job_uuid = str(uuid.uuid1())
- defaults = {
- 'ZUUL_UUID': job_uuid,
- 'ZUUL_REF': 'a',
- 'ZUUL_COMMIT': 'a',
- 'ZUUL_PROJECT': 'a',
- 'ZUUL_PIPELINE': 'a',
- 'ZUUL_URL': 'http://localhost',
- 'BASE_LOG_PATH': '56/123456/8',
- 'LOG_PATH': '56/123456/8/check/job_name/%s' % job_uuid
- }
- defaults.update(data)
- return defaults
-
- def submit_job(self, name, data):
- if not self.job:
- self.job = gear.Job(name,
- json.dumps(data),
- unique=str(time.time()))
- self.gearman.submitJob(self.job)
- else:
- raise Exception('A job already exists in self.job')
-
- return self.job
-
- def wait_for_completion(self):
- if self.job:
- while not self.job.complete:
- time.sleep(0.1)
diff --git a/tests/test_nothing.py b/tests/test_nothing.py
deleted file mode 100644
index fd7af1b..0000000
--- a/tests/test_nothing.py
+++ /dev/null
@@ -1,6 +0,0 @@
-import testtools
-
-
-class TestNothing(testtools.TestCase):
- def test_at_least_once(self):
- self.assertTrue(True)
diff --git a/tools/push_to_cloudfiles.py b/tools/push_to_cloudfiles.py
deleted file mode 100755
index cef60ca..0000000
--- a/tools/push_to_cloudfiles.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/python
-
-import json
-import os
-import pyrax
-import sys
-
-
-def copy_dir(topdir, path, container):
- for ent in os.listdir(path):
- fullpath = os.path.join(path, ent)
- shortpath = fullpath.replace(topdir + '/', '')
- if os.path.isdir(fullpath):
- copy_dir(topdir, fullpath, container)
- else:
- print shortpath
- container.upload_file(fullpath, obj_name=shortpath)
-
-
-def push(topdir, region, container_name):
- pyrax.set_setting('identity_type', 'rackspace')
- with open(os.path.expanduser('~/.cloudfiles'), 'r') as f:
- conf = json.loads(f.read())
- pyrax.set_credentials(conf['access_key'],
- conf['secret_key'],
- region=region)
- conn = pyrax.connect_to_cloudfiles(region=region.upper(), public=False)
- container = conn.create_container(container_name)
- copy_dir(topdir, topdir, container)
-
-
-if __name__ == '__main__':
- push(sys.argv[1], sys.argv[2], sys.argv[3])
diff --git a/tools/setup_software.sh b/tools/setup_software.sh
deleted file mode 100755
index dee8f86..0000000
--- a/tools/setup_software.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash -x
-
-# $1 is the db engine name, currently one of:
-# mysql
-# percona
-
-git pull
-
-# Percona support
-apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
-cp etc/percona.list /etc/apt/sources.list.d/percona.list
-
-apt-get update
-apt-get dist-upgrade -y
-apt-get install -y git python-pip libxml2-dev libxml2-utils libxslt-dev libmysqlclient-dev pep8 postgresql-server-dev-9.1 python2.7-dev python-coverage python-netaddr python-mysqldb $1-server python-git virtualenvwrapper python-numpy
-
-mkdir -p /var/log/mysql
-touch /var/log/mysql/slow-queries.log
-chown mysql.mysql /var/log/mysql/slow-queries.log
-
-chmod ugo+rx /var/log/mysql
-chmod ugo+r /var/log/syslog /var/log/mysql/slow-queries.log /var/log/mysql/error.log
-
-if [ -e /etc/logrotate.d/percona-server-server-5.5 ]
-then
- rm /etc/logrotate.d/percona-server-server-5.5
-fi
-/usr/sbin/logrotate /etc/logrotate.conf
-
-/etc/init.d/apparmor restart
-/etc/init.d/mysql restart
-
-mkdir -p /var/log/turbo-hipster
-chown turbo-hipster:turbo-hipster /var/log/turbo-hipster
-
-mkdir -p /var/lib/turbo-hipster
-chown turbo-hipster:turbo-hipster /var/log/turbo-hipster
-
-mysql -u root -e "create user 'nova'@'localhost' identified by 'tester';"
-mysql -u root -e "grant all privileges on nova.* TO 'nova'@'localhost';"
-
-# Fix log rotate for MySQL to be other readable.
\ No newline at end of file
diff --git a/tools/update_datasets.sh b/tools/update_datasets.sh
deleted file mode 100644
index b635b84..0000000
--- a/tools/update_datasets.sh
+++ /dev/null
@@ -1,278 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2014 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-# A tool to update a given dataset to a given version. Used to keep datasets
-# somewhat fresh rather than over-exercising old migrations.
-
-
-# Usage: ./update_datasets.sh VENV_NAME WORKING_DIR GIT_PATH DB_USER DB_PASS DB_NAME SEED_DATA OUTPUT_DATA
-# apt-get install git virtualenvwrapper python-pip mysql-server python-lxml build-essential libffi-dev
-
-# $1 is the unique job id
-# $2 is the working dir path
-# $3 is the path to the git repo path
-# $4 is the nova db user
-# $5 is the nova db password
-# $6 is the nova db name
-# $7 is the path to the seed dataset to test against
-# $8 is the logging.conf for openstack
-# $9 is the pip cache dir
-
-UNIQUE_ID=$1
-WORKING_DIR_PATH=`realpath $2`
-GIT_REPO_PATH=`realpath $3`
-DB_USER=$4
-DB_PASS=$5
-DB_NAME=$6
-DATASET_SEED_SQL=`realpath $7`
-DATASET_OUTPUT_SQL=$8
-
-SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
-
-# We also support the following environment variables to tweak our behavour:
-# NOCLEANUP: if set to anything, don't cleanup at the end of the run
-
-pip_requires() {
- pip install -q mysql-python
- pip install -q eventlet
- requires="tools/pip-requires"
- if [ ! -e $requires ]
- then
- requires="requirements.txt"
- fi
- echo "Install pip requirements from $requires"
- pip install -q -r $requires
- echo "Requirements installed"
-}
-
-db_sync() {
- # $1 is the test target (ie branch name)
- # $2 is an (optional) destination version number
-
- # Create a nova.conf file
- cat - > $WORKING_DIR_PATH/nova-$1.conf <<EOF
-[DEFAULT]
-sql_connection = mysql://$DB_USER:$DB_PASS@localhost/$DB_NAME?charset=utf8
-#log_config = $LOG_CONF_FILE
-EOF
-
- # Silently return git to a known good state (delete untracked files)
- git clean -xfdq
-
- echo "***** Start DB upgrade to state of $1 *****"
- echo "HEAD of branch under test is:"
- git log -n 1
-
- echo "Setting up the nova-manage entry point"
- python setup.py -q clean
- python setup.py -q develop
- python setup.py -q install
-
- # Log the migrations present
- echo "Migrations present:"
- ls $GIT_REPO_PATH/nova/db/sqlalchemy/migrate_repo/versions/*.py | sed 's/.*\///' | egrep "^[0-9]+_"
-
- # Flush innodb's caches
- echo "Restarting mysql"
- sudo service mysql stop
- sudo service mysql start
-
- start_version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
-
- if [ "%$2%" == "%%" ]
- then
- end_version=`ls $GIT_REPO_PATH/nova/db/sqlalchemy/migrate_repo/versions/*.py | sed 's/.*\///' | egrep "^[0-9]+_" | tail -1 | cut -f 1 -d "_"`
- else
- end_version=$2
- fi
-
- echo "Test will migrate from $start_version to $end_version"
- if [ $end_version -lt $start_version ]
- then
- increment=-1
- end_version=$(( $end_version + 1 ))
- else
- increment=1
- start_version=$(( $start_version + 1))
- fi
-
- for i in `seq $start_version $increment $end_version`
- do
- set -x
- $SCRIPT_DIR/nova-manage-wrapper.sh $VENV_PATH --config-file $WORKING_DIR_PATH/nova-$1.conf --verbose db sync --version $i
- manage_exit=$?
- set +x
-
- echo "nova-manage returned exit code $manage_exit"
- if [ $manage_exit -gt 0 ]
- then
- echo "Aborting early"
- exit $manage_exit
- fi
- done
-
- echo "***** Finished DB upgrade to state of $1 *****"
-}
-
-stable_release_db_sync() {
- version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
-
- # Some databases are from Folsom
- echo "Schema version is $version"
- if [ $version -lt "161" ]
- then
- echo "Database is from Folsom! Upgrade via Grizzly"
- git branch -D eol/grizzly || true
- git remote update
- git checkout -b eol/grizzly
- # Use tag
- git reset --hard grizzly-eol
- pip_requires
- db_sync "grizzly"
- fi
-
- version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
- # Some databases are from Grizzly
- echo "Schema version is $version"
- if [ $version -lt "216" ]
- then
- echo "Database is from Grizzly! Upgrade via Havana"
- git branch -D eol/havana || true
- git remote update
- git checkout -b eol/havana
- # Use tag
- git reset --hard havana-eol
- pip_requires
- db_sync "havana"
- fi
-
- version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
- # Some databases are from Havana
- echo "Schema version is $version"
- if [ $version -lt "234" ]
- then
- echo "Database is from Havana! Upgrade via Icehouse"
- git branch -D eol/icehouse || true
- git remote update
- git checkout -b eol/icehouse
- # Use tag
- git reset --hard icehouse-eol
- pip_requires
- db_sync "icehouse"
- fi
-
- version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
- # Some databases are from Icehouse
- echo "Schema version is $version"
- if [ $version -lt "254" ]
- then
- echo "Database is from Icehouse! Upgrade via Juno"
- git branch -D stable/juno || true
- git remote update
- git checkout -b stable/juno
- git reset --hard remotes/origin/stable/juno
- pip_requires
- db_sync "juno"
- fi
-
- version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
- # Some databases are from Juno
- echo "Schema version is $version"
- if [ $version -lt "280" ]
- then
- echo "Database is from Juno! Upgrade via Kilo"
- git branch -D stable/kilo || true
- git remote update
- git checkout -b stable/kilo
- git reset --hard remotes/origin/stable/kilo
- pip_requires
- db_sync "kilo"
-
- # TODO(jhesketh): This is a bit of a hack until we update our datasets to
- # have the flavour data migrated. We have to do this before upgrading from
- set -x
- $SCRIPT_DIR/nova-manage-wrapper.sh $VENV_PATH --config-file $WORKING_DIR_PATH/nova-kilo.conf --verbose db migrate_flavor_data --force
- set +x
- fi
-
- # TODO(jhesketh): Add in Liberty here once released
-
- # TODO(jhesketh): Make this more DRY and/or automatically match migration
- # numbers to releases.
-}
-
-echo "Test running on "`hostname`" as "`whoami`" ("`echo ~`", $HOME)"
-echo "To execute this script manually, run this:"
-echo "$0 $@"
-
-# Setup the environment
-set -x
-export PATH=/usr/lib/ccache:$PATH
-#export PIP_INDEX_URL="http://www.rcbops.com/pypi/mirror"
-export PIP_INDEX_URL="http://pypi.openstack.org/simple/"
-export PIP_EXTRA_INDEX_URL="https://pypi.python.org/simple/"
-which pip
-pip --version
-which virtualenv
-virtualenv --version
-which mkvirtualenv
-set +x
-
-# Restore database to known good state
-echo "Restoring test database $DB_NAME"
-set -x
-mysql -u $DB_USER --password=$DB_PASS -e "drop database $DB_NAME"
-mysql -u $DB_USER --password=$DB_PASS -e "create database $DB_NAME"
-mysql -u $DB_USER --password=$DB_PASS $DB_NAME < $DATASET_SEED_SQL
-set +x
-
-echo "Build test environment"
-cd $GIT_REPO_PATH
-
-echo "Setting up virtual env"
-source ~/.bashrc
-export WORKON_HOME=`pwd`/envs
-mkdir -p $WORKON_HOME
-VENV_PATH=$WORKON_HOME/$UNIQUE_ID
-rm -rf $VENV_PATH
-source /usr/local/bin/virtualenvwrapper.sh
-source /etc/bash_completion.d/virtualenvwrapper
-mkvirtualenv --no-site-packages $UNIQUE_ID
-#toggleglobalsitepackages
-export PYTHONPATH=$PYTHONPATH:$GIT_REPO_PATH
-
-if [ ! -e $VENV_PATH ]
-then
- echo "Error: making the virtual env failed"
- exit 1
-fi
-
-stable_release_db_sync
-
-# Determine the final schema version
-version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
-echo "Final schema version is $version"
-
-if [ "%$NOCLEANUP%" == "%%" ]
-then
- # Cleanup virtual env
- echo "Cleaning up virtual env"
- deactivate
- rmvirtualenv $UNIQUE_ID
-fi
-
-cd $SCRIPT_DIR
-mysqldump -u $DB_USER --password=$DB_PASS $DB_NAME > $DATASET_OUTPUT_SQL
diff --git a/tools/zuul_enqueue.py b/tools/zuul_enqueue.py
deleted file mode 100755
index 8236606..0000000
--- a/tools/zuul_enqueue.py
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/usr/bin/python
-# This tool is useful to query gerrit for negative or missing votes left by
-# a user. It may require tweaking for different failure messages etc.
-
-import json
-import requests
-import traceback
-
-# Set the user to watch
-user = 'turbo-hipster'
-author_name = 'DB Datasets CI'
-author_account_id = 9578
-upstream_user = 'jenkins'
-upstream_author_name = "Jenkins"
-upstream_author_account_id = 3
-
-# Grab a list of missing or negative reviews for a user:
-url = ("https://review.openstack.org/changes/?q=status:open "
- "project:openstack/nova NOT label:Verified>=0,%s "
- "branch:master&o=CURRENT_REVISION&o=MESSAGES" % user)
-
-print "Grabbing reviews from %s" % url
-r = requests.get(url)
-
-no_votes = []
-negative_votes = []
-merge_failures = []
-upstream_merge_failures = []
-unknown = []
-
-for change in json.loads(r.text[5:]):
- try:
- patchset = change['revisions'][change['current_revision']]['_number']
- change_id = str(change['_number']) + ',' + str(patchset)
- last_message = None
- last_upstream_message = None
- for message in sorted(change['messages'],
- key=lambda k: (k['_revision_number'],
- k['date']), reverse=True):
- if message['_revision_number'] < patchset:
- # Finished looking at all the messages on this patchset
- break
- if (not last_message and
- message['author']['_account_id'] == author_account_id):
- last_message = message['message']
- if (not last_upstream_message and
- message['author']['_account_id'] ==
- upstream_author_account_id):
- last_upstream_message = message['message']
-
- if (last_upstream_message and
- 'Merge Failed.' in last_upstream_message.split('\n')[2]):
- upstream_merge_failures.append({
- 'change_id': change_id,
- 'updated': change['updated'],
- 'change': change,
- 'last_upstream_message': last_upstream_message,
- })
- elif not last_message:
- # turbo-hister hasn't commented on this patchset
- no_votes.append({
- 'change_id': change_id,
- 'updated': change['updated'],
- 'change': change,
- 'last_upstream_message': last_upstream_message,
- })
- elif ('This change was unable to be automatically merged with the '
- 'current state of the repository.' in last_message):
- merge_failures.append({
- 'change_id': change_id,
- 'updated': change['updated'],
- 'change': change,
- 'last_upstream_message': last_upstream_message,
- })
- elif 'Database migration testing failed' in last_message:
- negative_votes.append({
- 'change_id': change_id,
- 'updated': change['updated'],
- 'change': change,
- 'last_upstream_message': last_upstream_message,
- })
- else:
- unknown.append({
- 'change_id': change_id,
- 'updated': change['updated'],
- 'change': change,
- 'last_upstream_message': last_upstream_message,
- })
-
- except Exception:
- print "Something failed.. Here is the change..."
- print change
- traceback.print_exc()
-
-
-def print_enqueues(changes):
- for change in sorted(changes, key=lambda k: k['updated'], reverse=True):
- print ("zuul enqueue --trigger gerrit --pipeline check "
- "--project openstack/nova --change %s" % (change['change_id']))
-
-print "=" * 20 + (" Changes with no votes (%d) " % len(no_votes)) + "=" * 20
-print_enqueues(no_votes)
-print ("=" * 20 + (" Changes with negative votes (%d) " % len(negative_votes))
- + "=" * 20)
-print_enqueues(negative_votes)
-print ("=" * 20 + (" Changes with merge failure (%d) " % len(merge_failures)) +
- "=" * 20)
-print_enqueues(merge_failures)
-print "=" * 20 + (" Others in this query (%d) " % len(unknown)) + "=" * 20
-print_enqueues(unknown)
-print "=" * 20 + (" Changes with merge failures upstream (%d) "
- % len(upstream_merge_failures)) + "=" * 20
-print_enqueues(upstream_merge_failures)
diff --git a/tox.ini b/tox.ini
deleted file mode 100644
index cfd9e06..0000000
--- a/tox.ini
+++ /dev/null
@@ -1,35 +0,0 @@
-# Tox (http://tox.testrun.org/) is a tool for running tests
-# in multiple virtualenvs. This configuration file will run the
-# test suite on all supported python versions. To use it, "pip install tox"
-# and then run "tox" from this directory.
-
-[tox]
-minversion = 1.6
-envlist = pep8, py27
-
-[testenv]
-setenv = VIRTUAL_ENV={envdir}
- LANG=en_US.UTF-8
- LANGUAGE=en_US:en
- LC_ALL=C
-usedevelop = True
-install_command = pip install {opts} {packages}
-deps = -r{toxinidir}/requirements.txt
- -r{toxinidir}/test-requirements.txt
-commands =
- python setup.py testr --slowest --testr-args='{posargs}'
-
-[testenv:pep8]
-commands = flake8
-
-[testenv:cover]
-commands =
- python setup.py testr --coverage
-
-[testenv:venv]
-commands = {posargs}
-
-[flake8]
-ignore = E125,H
-show-source = True
-exclude = .venv,.tox,dist,doc,build,*.egg
diff --git a/turbo_hipster/__init__.py b/turbo_hipster/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/turbo_hipster/__init__.py
+++ /dev/null
diff --git a/turbo_hipster/cmd/__init__.py b/turbo_hipster/cmd/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/turbo_hipster/cmd/__init__.py
+++ /dev/null
diff --git a/turbo_hipster/cmd/analyse_historical.py b/turbo_hipster/cmd/analyse_historical.py
deleted file mode 100644
index a7ce33a..0000000
--- a/turbo_hipster/cmd/analyse_historical.py
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/usr/bin/python2
-#
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import argparse
-import datetime
-import json
-import logging
-import MySQLdb
-import os
-import re
-import sys
-import yaml
-
-import swiftclient
-
-from turbo_hipster.task_plugins.real_db_upgrade import handle_results
-
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('-c', '--config',
- default='/etc/turbo-hipster/config.yaml',
- help='Path to yaml config file.')
- args = parser.parse_args()
-
- with open(args.config, 'r') as config_stream:
- config = yaml.safe_load(config_stream)
- swift_config = config['publish_logs']
-
- log = logging.getLogger(__name__)
- if not os.path.isdir(os.path.dirname(config['debug_log'])):
- os.makedirs(os.path.dirname(config['debug_log']))
- logging.basicConfig(format='%(asctime)s %(name)s %(message)s',
- filename=config['debug_log'], level=logging.INFO)
-
- # Open a connection to swift
- connection = swiftclient.client.Connection(
- authurl=swift_config['authurl'],
- user=swift_config['user'],
- key=swift_config['password'],
- os_options={'region_name': swift_config['region']},
- tenant_name=swift_config['tenant'],
- auth_version=2.0)
- log.info('Got connection to swift')
-
- # Open the results database
- db = MySQLdb.connect(host=config['results']['host'],
- port=config['results'].get('port', 3306),
- user=config['results']['username'],
- passwd=config['results']['password'],
- db=config['results']['database'])
- cursor = db.cursor(MySQLdb.cursors.DictCursor)
-
- # Iterate through the logs and determine timing information. This probably
- # should be done in a "more cloudy" way, but this is good enough for now.
- total_items = 0
- items = connection.get_container(swift_config['container'], limit=1000)[1]
- while items:
- total_items += len(items)
- print ('%s Processing %d items, %d items total'
- % (datetime.datetime.now(), len(items), total_items))
-
- for item in items:
- log.info('Processing %s' % item['name'])
- cursor.execute('select count(*) from summary where path="%s";'
- % item['name'])
- if cursor.rowcount == 0:
- for engine, dataset, migration in process(
- connection, swift_config['container'], item['name']):
- if 'duration' not in migration:
- continue
-
- if migration['stats']:
- cursor.execute('insert ignore into summary'
- '(path, parsed_at, engine, dataset, '
- 'migration, duration, stats_json) '
- 'values(%s, now(), %s, '
- '%s, %s, %s, %s);',
- (item['name'], engine, dataset,
- '%s->%s' % (migration['from'],
- migration['to']),
- migration['duration'],
- json.dumps(migration['stats'])))
- else:
- cursor.execute('insert ignore into summary'
- '(path, parsed_at, engine, dataset, '
- 'migration, duration, stats_json) '
- 'values(%s, now(), %s, '
- '%s, %s, %s, NULL);',
- (item['name'], engine, dataset,
- '%s->%s' % (migration['from'],
- migration['to']),
- migration['duration']))
-
- cursor.execute('commit;')
-
- items = connection.get_container(swift_config['container'],
- marker=item['name'], limit=1000)[1]
-
-TEST_NAME1_RE = re.compile('.*/real-db-upgrade_nova_([^_]+)_([^/]*)/.*')
-TEST_NAME2_RE = re.compile('.*/real-db-upgrade_nova_([^_]+)/.*/(.*).log')
-
-
-def process(connection, container, name):
- log = logging.getLogger(__name__)
- engine_name = None
- test_name = None
-
- m = TEST_NAME1_RE.match(name)
- if m:
- engine_name = m.group(1)
- test_name = m.group(2)
- else:
- m = TEST_NAME2_RE.match(name)
- if m:
- engine_name = m.group(1)
- test_name = m.group(2)
-
- if not engine_name or not test_name:
- log.warn('Log name %s does not match regexp' % name)
- return
-
- content = connection.get_object(container, name)[1]
- with open('/tmp/logcontent', 'w') as f:
- f.write(content)
-
- lp = handle_results.LogParser('/tmp/logcontent', None)
- lp.process_log()
- if not lp.migrations:
- log.warn('Log %s contained no migrations' % name)
-
- for migration in lp.migrations:
- if 'start' not in migration:
- continue
- if 'end' not in migration:
- continue
- yield (engine_name, test_name, migration)
-
-
-if __name__ == '__main__':
- sys.path.insert(0, os.path.abspath(
- os.path.join(os.path.dirname(__file__), '../')))
- main()
diff --git a/turbo_hipster/cmd/queue_logger.py b/turbo_hipster/cmd/queue_logger.py
deleted file mode 100644
index 3e35bcd..0000000
--- a/turbo_hipster/cmd/queue_logger.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/python2
-#
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import os
-import socket
-import sys
-
-
-def main():
- client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- client_socket.connect(('zuul.rcbops.com', 4730))
- client_socket.send('status\n')
-
- data = ''
-
- d = client_socket.recv(1024)
- while d:
- data += d
- if d.split('\n')[-2] == '.':
- break
- d = client_socket.recv(1024)
-
- queued_count = 0
- queued_detail = {}
- for line in data.split('\n')[:-2]:
- func, total, running, available_workers = line.split('\t')
- queued = int(total) - int(running)
- if queued > 0:
- queued_detail[func] = ('%d (%s workers)'
- % (queued, available_workers))
- queued_count += queued
-
- print 'There are %d turbo-hipster jobs queued' % queued_count
- for job in queued_detail:
- print ' %s: %s' % (job, queued_detail[job])
-
- client_socket.close()
-
-if __name__ == '__main__':
- sys.path.insert(0, os.path.abspath(
- os.path.join(os.path.dirname(__file__), '../')))
- main()
diff --git a/turbo_hipster/cmd/report_historical.py b/turbo_hipster/cmd/report_historical.py
deleted file mode 100644
index 50e4a28..0000000
--- a/turbo_hipster/cmd/report_historical.py
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/usr/bin/python2
-#
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import json
-import math
-import MySQLdb
-import os
-import sys
-import yaml
-
-
-def main():
- for dataset in ['devstack_131007', 'devstack_150', 'trivial_500',
- 'trivial_6000', 'user_001', 'user_002']:
- process_dataset(dataset)
-
-
-def process_dataset(dataset):
- with open('/etc/turbo-hipster/config.yaml', 'r') as config_stream:
- config = yaml.safe_load(config_stream)
- db = MySQLdb.connect(host=config['results']['host'],
- port=config['results'].get('port', 3306),
- user=config['results']['username'],
- passwd=config['results']['password'],
- db=config['results']['database'])
- cursor = db.cursor(MySQLdb.cursors.DictCursor)
-
- migrations = {}
- all_times = {}
- stats_summary = {}
-
- for engine in ['mysql', 'percona']:
- print '%s, %s' % (dataset, engine)
- cursor.execute('select distinct(migration) from summary where '
- 'engine="%s" and dataset="%s" order by migration;'
- % (engine, dataset))
- migrations_list = []
- for row in cursor:
- migrations_list.append(row['migration'])
-
- for migration in migrations_list:
- all_times.setdefault(migration, [])
-
- cursor.execute('select distinct(duration), count(*) from summary '
- 'where engine="%s" and dataset="%s" and '
- 'migration="%s" group by duration;'
- % (engine, dataset, migration))
- for row in cursor:
- for i in range(row['count(*)']):
- all_times[migration].append(row['duration'])
-
- cursor.execute('select stats_json from summary where engine="%s" '
- 'and dataset="%s" and migration="%s" and '
- 'not (stats_json = "{}");'
- % (engine, dataset, migration))
- for row in cursor:
- stats = json.loads(row['stats_json'])
- for key in stats:
- stats_summary.setdefault(migration, {})
- stats_summary[migration].setdefault(key, {})
- stats_summary[migration][key].setdefault(stats[key], 0)
- stats_summary[migration][key][stats[key]] += 1
-
- # Composed stats
- rows_changed = 0
- for key in ['Innodb_rows_updated',
- 'Innodb_rows_inserted',
- 'Innodb_rows_deleted']:
- rows_changed += stats.get(key, 0)
-
- stats_summary[migration].setdefault('XInnodb_rows_changed', {})
- stats_summary[migration]['XInnodb_rows_changed'].setdefault(
- rows_changed, 0)
- stats_summary[migration]['XInnodb_rows_changed'][rows_changed]\
- += 1
-
- with open('results.txt', 'w') as f:
- f.write('Migration,mysql,percona\n')
- for migration in sorted(migrations.keys()):
- f.write('%s' % migration)
- for engine in ['mysql', 'percona']:
- f.write(',%s' % migrations[migration].get(engine, ''))
- f.write('\n')
-
- # Write out the dataset config as a json blob
- config_path = os.path.join('datasets',
- 'datasets_%s' % dataset,
- omg_hard_to_predict_names(dataset))
- with open(os.path.join(config_path, 'input.json')) as f:
- config = json.loads(f.read())
-
- for migration in sorted(all_times.keys()):
- # Timing
- config_max = config['maximum_migration_times']['default']
- l = len(all_times[migration])
- if l > 10:
- sorted_all_times = sorted(all_times[migration])
- one_percent = int(math.ceil(l / 100))
- recommend = sorted_all_times[-one_percent] + 30
- if recommend > config_max:
- config['maximum_migration_times'][migration] = \
- math.ceil(recommend)
-
- # Innodb stats
- if migration not in stats_summary:
- continue
-
- for stats_key in ['XInnodb_rows_changed', 'Innodb_rows_read']:
- config_max = config[stats_key]['default']
-
- values = []
- results = stats_summary[migration].get(stats_key, {})
- for result in results:
- values.append(result)
-
- max_value = max(values)
- rounding = max_value % 10000
- if max_value > config_max:
- config[stats_key][migration] = max_value + (10000 - rounding)
-
- with open(os.path.join(config_path, 'config.json'), 'w') as f:
- f.write(json.dumps(config, indent=4, sort_keys=True))
-
-
-def omg_hard_to_predict_names(dataset):
- if dataset.startswith('trivial'):
- return 'nova_%s' % dataset
- if dataset == 'devstack_150':
- return 'datasets_devstack_150'
- if dataset == 'devstack_131007':
- return '131007_devstack_export'
- return dataset
-
-
-if __name__ == '__main__':
- sys.path.insert(0, os.path.abspath(
- os.path.join(os.path.dirname(__file__), '../')))
- main()
diff --git a/turbo_hipster/cmd/server.py b/turbo_hipster/cmd/server.py
deleted file mode 100644
index 06f9415..0000000
--- a/turbo_hipster/cmd/server.py
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/python2
-#
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import argparse
-import daemon
-import extras
-import os
-import signal
-import sys
-import time
-import yaml
-
-from turbo_hipster import worker_server
-
-# as of python-daemon 1.6 it doesn't bundle pidlockfile anymore
-# instead it depends on lockfile-0.9.1 which uses pidfile.
-PID_FILE_MODULE = extras.try_imports(['daemon.pidlockfile', 'daemon.pidfile'])
-
-
-def setup_server(args):
-
- with open(args.config, 'r') as config_stream:
- config = yaml.safe_load(config_stream)
-
- if not config['debug_log']:
- # NOTE(mikal): debug logging _must_ be enabled for the log writing
- # in lib.utils.execute_to_log to work correctly.
- raise Exception('Debug log not configured')
-
- server = worker_server.Server(config)
- server.setup_logging(config['debug_log'])
-
- def term_handler(signum, frame):
- server.shutdown()
- signal.signal(signal.SIGTERM, term_handler)
-
- if args.background:
- server.daemon = True
- server.start()
-
- while not server.stopped():
- try:
- time.sleep(3)
- except KeyboardInterrupt:
- print "Ctrl + C: asking tasks to exit nicely...\n"
- server.shutdown()
-
-
-def main():
- sys.path.insert(0, os.path.abspath(
- os.path.join(os.path.dirname(__file__), '../')))
- parser = argparse.ArgumentParser()
- parser.add_argument('-c', '--config',
- default='/etc/turbo-hipster/config.yaml',
- help='Path to yaml config file.')
- parser.add_argument('-b', '--background', action='store_true',
- help='Run as a daemon in the background.')
- parser.add_argument('-p', '--pidfile',
- default='/var/run/turbo-hipster/'
- 'turbo-hipster-worker-server.pid',
- help='PID file to lock during daemonization.')
- args = parser.parse_args()
- if args.background:
- pidfile = PID_FILE_MODULE.TimeoutPIDLockFile(args.pidfile, 10)
- with daemon.DaemonContext(pidfile=pidfile):
- setup_server(args)
- else:
- setup_server(args)
-
-
-if __name__ == '__main__':
- main()
diff --git a/turbo_hipster/lib/__init__.py b/turbo_hipster/lib/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/turbo_hipster/lib/__init__.py
+++ /dev/null
diff --git a/turbo_hipster/lib/common.py b/turbo_hipster/lib/common.py
deleted file mode 100644
index 85cfbbf..0000000
--- a/turbo_hipster/lib/common.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-def task_step(fn):
- """Decorator for the next step in a task."""
- def wrapper(*args, **kwargs):
- args[0]._do_next_step()
- result = fn(*args, **kwargs)
- return result
- return wrapper
diff --git a/turbo_hipster/lib/gerrit-git-prep.sh b/turbo_hipster/lib/gerrit-git-prep.sh
deleted file mode 100755
index 0726275..0000000
--- a/turbo_hipster/lib/gerrit-git-prep.sh
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/bin/bash -e
-
-# Stolen from http://git.openstack.org/cgit/openstack-infra/config/plain/modules/jenkins/files/slave_scripts/gerrit-git-prep.sh
-
-GERRIT_SITE=$1
-GIT_ORIGIN=$2
-
-if [ -z "$GERRIT_SITE" ]
-then
- echo "The gerrit site name (eg 'https://review.openstack.org') must be the first argument."
- exit 1
-fi
-
-if [ -z "$ZUUL_URL" ]
-then
- echo "The ZUUL_URL must be provided."
- exit 1
-fi
-
-if [ -z "$GIT_ORIGIN" ] || [ -n "$ZUUL_NEWREV" ]
-then
- GIT_ORIGIN="$GERRIT_SITE/p"
- # https://git.openstack.org/
- # https://review.openstack.org/p
-fi
-
-if [ -z "$ZUUL_REF" ]
-then
- if [ -n "$BRANCH" ]
- then
- echo "No ZUUL_REF so using requested branch $BRANCH from origin."
- ZUUL_REF=$BRANCH
- # use the origin since zuul mergers have outdated branches
- ZUUL_URL=$GIT_ORIGIN
- else
- echo "Provide either ZUUL_REF or BRANCH in the calling enviromnent."
- exit 1
- fi
-fi
-
-if [ ! -z "$ZUUL_CHANGE" ]
-then
- echo "Triggered by: $GERRIT_SITE/$ZUUL_CHANGE"
-fi
-
-set -x
-if [[ ! -e .git ]]
-then
- ls -a
- rm -fr .[^.]* *
- if [ -d /opt/git/$ZUUL_PROJECT/.git ]
- then
- git clone -vvvvvv file:///opt/git/$ZUUL_PROJECT .
- else
- git clone -vvvvvv $GIT_ORIGIN/$ZUUL_PROJECT .
- fi
-fi
-git remote -vvvvvv set-url origin $GIT_ORIGIN/$ZUUL_PROJECT
-
-# attempt to work around bugs 925790 and 1229352
-if ! git remote -vvvvvv update
-then
- echo "The remote update failed, so garbage collecting before trying again."
- git gc
- git remote -vvvvvv update
-fi
-
-git reset --hard
-if ! git clean -x -f -d -q ; then
- sleep 1
- git clean -x -f -d -q
-fi
-
-if echo "$ZUUL_REF" | grep -q ^refs/tags/
-then
- git fetch -vvvvvv --tags $ZUUL_URL/$ZUUL_PROJECT
- git checkout $ZUUL_REF
- git reset --hard $ZUUL_REF
-elif [ -z "$ZUUL_NEWREV" ]
-then
- git fetch -vvvvvv $ZUUL_URL/$ZUUL_PROJECT $ZUUL_REF
- git checkout FETCH_HEAD
- git reset --hard FETCH_HEAD
-else
- git checkout $ZUUL_NEWREV
- git reset --hard $ZUUL_NEWREV
-fi
-
-if ! git clean -x -f -d -q ; then
- sleep 1
- git clean -x -f -d -q
-fi
-
-if [ -f .gitmodules ]
-then
- git submodule init
- git submodule sync
- git submodule update --init
-fi
-
-# Added for turbo-hipster
-git branch -D working || true
-git checkout -b working
diff --git a/turbo_hipster/lib/models.py b/turbo_hipster/lib/models.py
deleted file mode 100644
index 78c599a..0000000
--- a/turbo_hipster/lib/models.py
+++ /dev/null
@@ -1,395 +0,0 @@
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import copy
-import json
-import logging
-import os
-import tempfile
-import pkg_resources
-import socket
-import uuid
-
-from turbo_hipster.lib import common
-from turbo_hipster.lib import utils
-
-
-class Task(object):
- """ A base object for running a job (aka Task) """
- log = logging.getLogger("task")
-
- def __init__(self, worker_server, job_name, job_config):
- # TODO(jhesketh): remove the need for worker_server here
- self.worker_server = worker_server
- # NOTE(jhesketh): job_config may be in the old format where name
- # refers to the plugin and function is the job name. Thus these should
- # never be used in a job, instead use the provided job_name.
- self.job_config = job_config
- self.job_name = job_name
- self._reset()
-
- # Define the number of steps we will do to determine our progress.
- self.total_steps = 0
-
- def _cleanup(self):
- if self.log_handler:
- self.log.removeHandler(self.log_handler)
- self.log_handler.flush()
- self.log_handler.close()
- if ('shutdown-th' in self.job_config and
- self.job_config['shutdown-th']):
- self.worker_server.shutdown_gracefully()
-
- def _reset(self):
- self.job = None
- self.job_arguments = None
- self.work_data = None
- self.cancelled = False
- self.success = True
- self.messages = []
- self.current_step = 0
- self.log_handler = None
- self.th_uuid = str(uuid.uuid4())[-12:]
-
- def _prep_working_dir(self):
- # Use the th_uuid so that if the same job is somehow taken twice from
- # zuul we won't re-use zuul's uuid. This shouldn't happen but if it
- # does it prevents overwriting previous results
- self.job_working_dir = os.path.join(
- self.worker_server.config['jobs_working_dir'],
- self.th_uuid,
- self.job_arguments['LOG_PATH']
- )
- self.job_results_dir = os.path.join(
- self.job_working_dir,
- 'results'
- )
- self.task_output_log = os.path.join(
- self.job_results_dir,
- 'task_output.log'
- )
-
- if not os.path.isdir(os.path.dirname(self.task_output_log)):
- os.makedirs(os.path.dirname(self.task_output_log))
-
- def _setup_task_logging(self):
- self.log_handler = logging.FileHandler(self.task_output_log)
- log_formatter = logging.Formatter('%(asctime)s %(message)s')
- self.log_handler.setFormatter(log_formatter)
- self.log.addHandler(self.log_handler)
- self.log.setLevel(logging.DEBUG)
-
- def start_job(self, job):
- self._reset()
- self.job = job
-
- if self.job is not None:
- try:
- self.job_arguments = \
- json.loads(self.job.arguments.decode('utf-8'))
- self.log.debug("Got job from ZUUL %s" % self.job_arguments)
-
- # Send an initial WORK_DATA and WORK_STATUS packets
- self._send_work_data()
-
- # Prep working dirs
- self._prep_working_dir()
-
- # Now we have working dirs we can log the job details to a file
- self._setup_task_logging()
-
- except Exception as e:
- # If something failed during this section we have been unable
- # to log to file. As such raise an exception to gearman
- self.log.exception("Failure during setup")
- self.log.exception(e)
- if not self.cancelled:
- self.success = False
- self.messages.append('FAILURE during the job setup')
- self.messages.append('Exception: %s' % e)
- self._send_work_data()
- self.job.sendWorkException(str(e).encode('utf-8'))
- # No point trying the job, lets return here
- self._send_final_results()
- return
-
- # From here we can log exceptions
- try:
- # Execute the job_steps
- self.do_job_steps()
- except Exception as e:
- # Log the problem
- if not self.cancelled:
- self.success = False
- self.log.exception('Something failed running the job!')
- self.messages.append('FAILURE running the job')
- self.messages.append('Exception: %s' % e)
- # Don't return from here as we can continue uploading the
- # logs
-
- try:
- self._cleanup()
- self._upload_results()
- except Exception as e:
- # If something failed during this section we have been unable
- # to upload the log. As such raise an exception to gearman
- self.log.exception("Failure during cleanup and upload")
- self.log.exception(e)
- if not self.cancelled:
- self.success = False
- self.messages.append('FAILURE during cleanup and log '
- 'upload')
- self.messages.append('Exception: %s' % e)
- self._send_work_data()
- self.job.sendWorkException(str(e).encode('utf-8'))
- finally:
- # Finally, send updated work data and completed packets
- self._send_final_results()
-
- def stop_working(self, number=None):
- # Check the number is for this job instance (None will cancel all)
- # (makes it possible to run multiple workers with this task
- # on this server)
- if number is None or number == self.job.unique:
- self.log.debug("We've been asked to stop by our gearman manager")
- self.cancelled = True
- # TODO: Work out how to kill current step
-
- def _get_work_data(self):
- if self.work_data is None:
- hostname = os.uname()[1]
- fqdn = socket.getfqdn()
- self.work_data = dict(
- name=self.job_name,
- number=self.job.unique,
- manager='turbo-hipster-manager-%s' % hostname,
- url='http://localhost',
- worker_hostname=hostname,
- worker_fqdn=fqdn,
- worker_program='turbo-hipster',
- )
- try:
- self.work_data['worker_version'] = (
- pkg_resources.get_distribution('turbo_hipster').version
- )
- except pkg_resources.DistributionNotFound:
- # Package isn't installed; I do not think that manually
- # attempting to extract version in some ad-hoc manner would be
- # worth it -> just ignore this.
- pass
- return self.work_data
-
- def _send_work_data(self):
- """ Send the WORK DATA in json format for job """
- self.log.debug("Send the work data response: %s" %
- json.dumps(self._get_work_data()))
- if self.success:
- self.work_data['result'] = 'SUCCESS'
- else:
- self.work_data['result'] = '\n'.join(self.messages)
- self.job.sendWorkData(json.dumps(self._get_work_data()))
-
- def _send_final_results(self):
- self._send_work_data()
-
- if self.success:
- self.job.sendWorkComplete(
- json.dumps(self._get_work_data()))
- else:
- self.job.sendWorkFail()
-
- def _do_next_step(self):
- """ Send a WORK_STATUS command to the gearman server.
- This can provide a progress bar. """
-
- # Each opportunity we should check if we need to stop
- if self.cancelled:
- self.work_data['result'] = "Failed: Job cancelled"
- self.job.sendWorkStatus(self.current_step, self.total_steps)
- self.job.sendWorkFail()
- raise Exception('Job cancelled')
-
- self.current_step += 1
- self.job.sendWorkStatus(self.current_step, self.total_steps)
-
- def _upload_results(self):
- """Upload the contents of the working dir either using the instructions
- provided by zuul and/or our configuration"""
-
- self.log.debug("Process the resulting files (upload/push)")
-
- dir_list = os.listdir(self.job_results_dir)
- path_list = [os.path.join(self.job_results_dir, i) for i in dir_list]
-
- if 'publish_logs' in self.worker_server.config:
- index_url = utils.push_files(
- self.job_arguments['LOG_PATH'], path_list,
- self.worker_server.config['publish_logs'])
- self.log.debug("Index URL found at %s" % index_url)
- self.work_data['url'] = index_url
-
- if 'ZUUL_EXTRA_SWIFT_URL' in self.job_arguments:
- # Upload to zuul's url as instructed
- utils.zuul_swift_upload(self.job_working_dir, self.job_arguments)
- self.work_data['url'] = self.job_arguments['LOG_PATH']
-
-
-class ShellTask(Task):
- log = logging.getLogger("task.shell_task")
-
- def __init__(self, worker_server, job_name, job_config):
- super(ShellTask, self).__init__(worker_server, job_name, job_config)
- # Define the number of steps we will do to determine our progress.
- self.total_steps = 5
-
- def _reset(self):
- super(ShellTask, self)._reset()
- self.git_path = None
- self.job_working_dir = None
- self.shell_output_log = None
- self.git_prep_log = None
- self.output_summary = None
-
- def do_job_steps(self):
- self.log.info('Step 1: Setup environment')
- self._setup_environment()
-
- self.log.info('Step 2: Checkout updates from git')
- self._grab_patchset(self.job_arguments)
-
- self.log.info('Step 3: Run shell script')
- self._execute_script()
-
- self.log.info('Step 4: Analyse logs for errors')
- self._parse_and_check_results()
-
- self.log.info('Step 5: Handle the results')
- self._handle_results()
-
- self.log.info('Step 6: Handle extra actions such as shutting down')
- self._handle_cleanup()
-
- @common.task_step
- def _setup_environment(self):
- self.git_prep_log = os.path.join(
- self.job_results_dir,
- 'git_prep.log'
- )
- self.shell_output_log = os.path.join(
- self.job_results_dir,
- 'shell_output.log'
- )
- self.output_summary = tempfile.mkstemp()
- self.log.info('Working on node %s' % (os.uname()[1]))
-
- @common.task_step
- def _grab_patchset(self, job_args):
- """ Checkout the reference into config['git_working_dir'] """
-
- # TODO(jhesketh): Use the zuul cloner stuff instead :-)
-
- self.log.debug("Grab the patchset we want to test against")
- local_path = os.path.join(self.worker_server.config['git_working_dir'],
- self.th_uuid, job_args['ZUUL_PROJECT'])
- if not os.path.exists(local_path):
- os.makedirs(local_path)
-
- env = os.environ
- git_args = copy.deepcopy(job_args)
- env.update(git_args)
-
- cmd = os.path.join(
- os.path.join(os.path.dirname(os.path.abspath(__file__)),
- 'gerrit-git-prep.sh')
- )
- cmd += ' ' + self.worker_server.config['zuul_server']['gerrit_site']
- cmd += ' ' + self.worker_server.config['zuul_server']['git_origin']
-
- # NOTE(jhesketh): The most common problem is the git remote timing out
- # Retry cloning multiple times before raising a failure.
- tries = 0
- return_code = 1
- while return_code != 0:
- tries += 1
- env.update({'GIT_CURL_VERBOSE': '1', 'GIT_TRACE': '1'})
- return_code = utils.execute_to_log(cmd, self.git_prep_log,
- env=env, cwd=local_path)
- if tries == 2:
- # Try upping the post buffer. See:
- # http://stackoverflow.com/questions/6842687/
- # the-remote-end-hung-up-unexpectedly-while-git-cloning
- utils.execute_to_log(
- "git config --global http.postBuffer 1048576000",
- self.git_prep_log, env=env, cwd=local_path)
- if tries >= 4:
- break
- if return_code != 0:
- cmd = 'ifconfig'
- utils.execute_to_log(cmd, self.git_prep_log)
- raise Exception("Failed to fetch patchset")
- self.git_path = local_path
- return local_path
-
- @common.task_step
- def _execute_script(self):
- # Run script
- cmd = self.job_config['shell_script']
- cmd += (
- (' %(git_path)s %(job_working_dir)s %(unique_id)s')
- % {
- 'git_path': self.git_path,
- 'job_working_dir': self.job_working_dir,
- 'unique_id': self.job.unique
- }
- )
-
- env_args = copy.deepcopy(os.environ)
- env_args.update(self.job_arguments)
- if self.job.name.startswith('build:'):
- env_args['TH_JOB_NAME'] = self.job.name[len('build:'):]
- else:
- env_args['TH_JOB_NAME'] = self.job.name
- env_args['TH_RESULT_FILE'] = self.output_summary[1]
-
- self.script_return_code = utils.execute_to_log(
- cmd,
- self.shell_output_log,
- env=env_args
- )
-
- @common.task_step
- def _parse_and_check_results(self):
- if self.script_return_code > 0:
- self.success = False
- with os.fdopen(self.output_summary[0]) as fp:
- line = fp.readline().strip()
- if len(line) and not line.startswith('SUCCESS'):
- self.messages.append(line)
- self.messages.append('Return code from test script was non-zero '
- '(%d)' % self.script_return_code)
-
- @common.task_step
- def _handle_cleanup(self):
- """Handle and cleanup functions. Shutdown if requested to so that no
- further jobs are ran if the environment is dirty."""
-
- try:
- os.remove(self.output_summary[1])
- except OSError:
- pass
-
- @common.task_step
- def _handle_results(self):
- pass
diff --git a/turbo_hipster/lib/utils.py b/turbo_hipster/lib/utils.py
deleted file mode 100644
index 0673869..0000000
--- a/turbo_hipster/lib/utils.py
+++ /dev/null
@@ -1,438 +0,0 @@
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import git
-import logging
-import magic
-import os
-import requests
-import select
-import shutil
-import subprocess
-import swiftclient
-import sys
-import tempfile
-import time
-
-
-log = logging.getLogger('lib.utils')
-
-
-class GitRepository(object):
-
- """ Manage a git repository for our uses """
- log = logging.getLogger("lib.utils.GitRepository")
-
- def __init__(self, remote_url, local_path):
- self.remote_url = remote_url
- self.local_path = local_path
- self._ensure_cloned()
-
- self.repo = git.Repo(self.local_path)
-
- def _ensure_cloned(self):
- if not os.path.exists(self.local_path):
- self.log.debug("Cloning from %s to %s" % (self.remote_url,
- self.local_path))
- git.Repo.clone_from(self.remote_url, self.local_path)
-
- def fetch(self, ref):
- # The git.remote.fetch method may read in git progress info and
- # interpret it improperly causing an AssertionError. Because the
- # data was fetched properly subsequent fetches don't seem to fail.
- # So try again if an AssertionError is caught.
- origin = self.repo.remotes.origin
- self.log.debug("Fetching %s from %s" % (ref, origin))
-
- try:
- origin.fetch(ref)
- except AssertionError:
- origin.fetch(ref)
-
- def checkout(self, ref):
- self.log.debug("Checking out %s" % ref)
- return self.repo.git.checkout(ref)
-
- def reset(self):
- self._ensure_cloned()
- self.log.debug("Resetting repository %s" % self.local_path)
- self.update()
- origin = self.repo.remotes.origin
- for ref in origin.refs:
- if ref.remote_head == 'HEAD':
- continue
- self.repo.create_head(ref.remote_head, ref, force=True)
-
- # Reset to remote HEAD (usually origin/master)
- self.repo.head.reference = origin.refs['HEAD']
- self.repo.head.reset(index=True, working_tree=True)
- self.repo.git.clean('-x', '-f', '-d')
-
- def update(self):
- self._ensure_cloned()
- self.log.debug("Updating repository %s" % self.local_path)
- origin = self.repo.remotes.origin
- origin.update()
- # If the remote repository is repacked, the repo object's
- # cache may be out of date. Specifically, it caches whether
- # to check the loose or packed DB for a given SHA. Further,
- # if there was no pack or lose directory to start with, the
- # repo object may not even have a database for it. Avoid
- # these problems by recreating the repo object.
- self.repo = git.Repo(self.local_path)
-
-
-def execute_to_log(cmd, logfile, timeout=-1, watch_logs=[], heartbeat=30,
- env=None, cwd=None):
- """ Executes a command and logs the STDOUT/STDERR and output of any
- supplied watch_logs from logs into a new logfile
-
- watch_logs is a list of tuples with (name,file) """
-
- if not os.path.isdir(os.path.dirname(logfile)):
- os.makedirs(os.path.dirname(logfile))
-
- logger = logging.getLogger(logfile)
- log_handler = logging.FileHandler(logfile)
- log_formatter = logging.Formatter('%(asctime)s %(message)s')
- log_handler.setFormatter(log_formatter)
- logger.addHandler(log_handler)
-
- descriptors = {}
-
- for watch_file in watch_logs:
- if not os.path.exists(watch_file[1]):
- logger.warning('Failed to monitor log file %s: file not found'
- % watch_file[1])
- continue
-
- try:
- fd = os.open(watch_file[1], os.O_RDONLY)
- os.lseek(fd, 0, os.SEEK_END)
- descriptors[fd] = {'name': watch_file[0],
- 'poll': select.POLLIN,
- 'lines': ''}
- except Exception as e:
- logger.warning('Failed to monitor log file %s: %s'
- % (watch_file[1], e))
-
- cmd += ' 2>&1'
- logger.info("[running %s]" % cmd)
- start_time = time.time()
- p = subprocess.Popen(
- cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
- env=env, cwd=cwd)
-
- descriptors[p.stdout.fileno()] = dict(
- name='[output]',
- poll=(select.POLLIN | select.POLLHUP),
- lines=''
- )
-
- poll_obj = select.poll()
- for fd, descriptor in descriptors.items():
- poll_obj.register(fd, descriptor['poll'])
-
- last_heartbeat = time.time()
-
- def process(fd):
- """ Write the fd to log """
- global last_heartbeat
- descriptors[fd]['lines'] += os.read(fd, 1024 * 1024)
- # Avoid partial lines by only processing input with breaks
- if descriptors[fd]['lines'].find('\n') != -1:
- elems = descriptors[fd]['lines'].split('\n')
- # Take all but the partial line
- for l in elems[:-1]:
- if len(l) > 0:
- l = '%s %s' % (descriptors[fd]['name'], l)
- logger.info(l)
- last_heartbeat = time.time()
- # Place the partial line back into lines to be processed
- descriptors[fd]['lines'] = elems[-1]
-
- while p.poll() is None:
- if timeout > 0 and time.time() - start_time > timeout:
- # Append to logfile
- logger.info("[timeout]")
- os.kill(p.pid, 9)
-
- for fd, flag in poll_obj.poll(0):
- process(fd)
-
- if heartbeat and (time.time() - last_heartbeat > heartbeat):
- # Append to logfile
- logger.info("[heartbeat]")
- last_heartbeat = time.time()
-
- # Do one last write to get the remaining lines
- for fd, flag in poll_obj.poll(0):
- process(fd)
-
- # Clean up
- for fd, descriptor in descriptors.items():
- poll_obj.unregister(fd)
- if fd == p.stdout.fileno():
- # Don't try and close the process, it'll clean itself up
- continue
- os.close(fd)
- try:
- p.kill()
- except OSError:
- pass
-
- logger.info('[script exit code = %d]' % p.returncode)
- logger.removeHandler(log_handler)
- log_handler.flush()
- log_handler.close()
- return p.returncode
-
-
-def zuul_swift_upload(file_path, job_arguments):
- """Upload working_dir to swift as per zuul's instructions"""
- # TODO(jhesketh): replace with swift_form_post_submit from below
-
- # NOTE(jhesketh): Zuul specifies an object prefix in the destination so
- # we don't need to be concerned with results_set_name
-
- file_list = []
- if os.path.isfile(file_path):
- file_list.append(file_path)
- elif os.path.isdir(file_path):
- for path, folders, files in os.walk(file_path):
- for f in files:
- f_path = os.path.join(path, f)
- file_list.append(f_path)
-
- # We are uploading the file_list as an HTTP POST multipart encoded.
- # First grab out the information we need to send back from the hmac_body
- payload = {}
- (object_prefix,
- payload['redirect'],
- payload['max_file_size'],
- payload['max_file_count'],
- payload['expires']) = \
- job_arguments['ZUUL_EXTRA_SWIFT_HMAC_BODY'].split('\n')
-
- url = job_arguments['ZUUL_EXTRA_SWIFT_URL']
- payload['signature'] = job_arguments['ZUUL_EXTRA_SWIFT_SIGNATURE']
- logserver_prefix = job_arguments['ZUUL_EXTRA_SWIFT_LOGSERVER_PREFIX']
-
- files = {}
- for i, f in enumerate(file_list):
- files['file%d' % (i + 1)] = open(f, 'rb')
-
- requests.post(url, data=payload, files=files)
-
- return (logserver_prefix +
- job_arguments['ZUUL_EXTRA_SWIFT_DESTINATION_PREFIX'])
-
-
-def generate_log_index(file_list, logserver_prefix, results_set_name):
- """Create an index of logfiles and links to them"""
-
- output = '<html><head><title>Index of results</title></head><body>'
- output += '<ul>'
- for f in file_list:
- file_url = os.path.join(logserver_prefix, results_set_name, f)
- # Because file_list is simply a list to create an index for and it
- # isn't necessarily on disk we can't check if a file is a folder or
- # not. As such we normalise the name to get the folder/filename but
- # then need to check if the last character was a trailing slash so to
- # re-append it to make it obvious that it links to a folder
- filename_postfix = '/' if f[-1] == '/' else ''
- filename = os.path.basename(os.path.normpath(f)) + filename_postfix
- output += '<li>'
- output += '<a href="%s">%s</a>' % (file_url, filename)
- output += '</li>'
-
- output += '</ul>'
- output += '</body></html>'
- return output
-
-
-def make_index_file(file_list, logserver_prefix, results_set_name,
- index_filename='index.html'):
- """Writes an index into a file for pushing"""
-
- index_content = generate_log_index(file_list, logserver_prefix,
- results_set_name)
- tempdir = tempfile.mkdtemp()
- fd = open(os.path.join(tempdir, index_filename), 'w')
- fd.write(index_content)
- return os.path.join(tempdir, index_filename)
-
-
-def get_file_mime(file_path):
- """Get the file mime using libmagic"""
-
- if not os.path.isfile(file_path):
- return None
-
- if hasattr(magic, 'from_file'):
- return magic.from_file(file_path, mime=True)
- else:
- # no magic.from_file, we might be using the libmagic bindings
- m = magic.open(magic.MAGIC_MIME)
- m.load()
- return m.file(file_path).split(';')[0]
-
-
-def swift_form_post_submit(file_list, url, hmac_body, signature):
- """Send the files to swift via the FormPost middleware"""
-
- # We are uploading the file_list as an HTTP POST multipart encoded.
- # First grab out the information we need to send back from the hmac_body
- payload = {}
-
- (object_prefix,
- payload['redirect'],
- payload['max_file_size'],
- payload['max_file_count'],
- payload['expires']) = hmac_body.split('\n')
- payload['signature'] = signature
-
- # Loop over the file list in chunks of max_file_count
- for sub_file_list in (file_list[pos:pos + int(payload['max_file_count'])]
- for pos in xrange(0, len(file_list),
- int(payload['max_file_count']))):
- if payload['expires'] < time.time():
- raise Exception("Ran out of time uploading files!")
- files = {}
- # Zuul's log path is generated without a tailing slash. As such the
- # object prefix does not contain a slash and the files would be
- # uploaded as 'prefix' + 'filename'. Assume we want the destination
- # url to look like a folder and make sure there's a slash between.
- filename_prefix = '/' if url[-1] != '/' else ''
- for i, f in enumerate(sub_file_list):
- if os.path.getsize(f['path']) > int(payload['max_file_size']):
- sys.stderr.write('Warning: %s exceeds %d bytes. Skipping...\n'
- % (f['path'], int(payload['max_file_size'])))
- continue
- files['file%d' % (i + 1)] = (filename_prefix + f['filename'],
- open(f['path'], 'rb'),
- get_file_mime(f['path']))
- requests.post(url, data=payload, files=files)
-
-
-def build_file_list(file_path, logserver_prefix, results_set_name,
- create_dir_indexes=True):
- """Generate a list of files to upload to zuul. Recurses through directories
- and generates index.html files if requested."""
-
- # file_list: a list of dicts with {path=..., filename=...} where filename
- # is appended to the end of the object (paths can be used)
- file_list = []
- if os.path.isfile(file_path):
- file_list.append({'filename': os.path.basename(file_path),
- 'path': file_path})
- elif os.path.isdir(file_path):
- if file_path[-1] == os.sep:
- file_path = file_path[:-1]
- parent_dir = os.path.dirname(file_path)
- for path, folders, files in os.walk(file_path):
- folder_contents = []
- for f in files:
- full_path = os.path.join(path, f)
- relative_name = os.path.relpath(full_path, parent_dir)
- push_file = {'filename': relative_name,
- 'path': full_path}
- file_list.append(push_file)
- folder_contents.append(relative_name)
-
- for f in folders:
- full_path = os.path.join(path, f)
- relative_name = os.path.relpath(full_path, parent_dir)
- folder_contents.append(relative_name + '/')
-
- if create_dir_indexes:
- index_file = make_index_file(folder_contents, logserver_prefix,
- results_set_name)
- relative_name = os.path.relpath(path, parent_dir)
- file_list.append({
- 'filename': os.path.join(relative_name,
- os.path.basename(index_file)),
- 'path': index_file})
-
- return file_list
-
-
-def push_files(results_set_name, path_list, publish_config,
- generate_indexes=True):
- """ Push a log file/foler to a server. Returns the public URL """
-
- file_list = []
- root_list = []
-
- for file_path in path_list:
- file_path = os.path.normpath(file_path)
- if os.path.isfile(file_path):
- root_list.append(os.path.basename(file_path))
- else:
- root_list.append(os.path.basename(file_path) + '/')
-
- file_list += build_file_list(
- file_path, publish_config['prepend_url'], results_set_name,
- generate_indexes
- )
-
- index_file = ''
- if generate_indexes:
- index_file = make_index_file(root_list, publish_config['prepend_url'],
- results_set_name)
- file_list.append({
- 'filename': os.path.basename(index_file),
- 'path': index_file})
-
- method = publish_config['type'] + '_push_files'
- if method in globals() and hasattr(globals()[method], '__call__'):
- globals()[method](results_set_name, file_list, publish_config)
-
- return os.path.join(publish_config['prepend_url'], results_set_name,
- os.path.basename(index_file))
-
-
-def swift_push_files(results_set_name, file_list, swift_config):
- """ Push a log file to a swift server. """
- for file_item in file_list:
- with open(file_item['path'], 'r') as fd:
- con = swiftclient.client.Connection(
- authurl=swift_config['authurl'],
- user=swift_config['user'],
- key=swift_config['password'],
- os_options={'region_name': swift_config['region']},
- tenant_name=swift_config['tenant'],
- auth_version=2.0)
- filename = os.path.join(results_set_name, file_item['filename'])
- con.put_object(swift_config['container'], filename, fd)
-
-
-def local_push_files(results_set_name, file_list, local_config):
- """ Copy the file locally somewhere sensible """
- for file_item in file_list:
- dest_dir = os.path.join(local_config['path'], results_set_name,
- os.path.dirname(file_item['filename']))
- dest_filename = os.path.basename(file_item['filename'])
- if not os.path.isdir(dest_dir):
- os.makedirs(dest_dir)
-
- dest_file = os.path.join(dest_dir, dest_filename)
- shutil.copyfile(file_item['path'], dest_file)
-
-
-def scp_push_files(results_set_name, file_path, local_config):
- """ Copy the file remotely over ssh """
- # TODO!
- pass
diff --git a/turbo_hipster/task_plugins/__init__.py b/turbo_hipster/task_plugins/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/turbo_hipster/task_plugins/__init__.py
+++ /dev/null
diff --git a/turbo_hipster/task_plugins/jjb_runner/__init__.py b/turbo_hipster/task_plugins/jjb_runner/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/turbo_hipster/task_plugins/jjb_runner/__init__.py
+++ /dev/null
diff --git a/turbo_hipster/task_plugins/jjb_runner/task.py b/turbo_hipster/task_plugins/jjb_runner/task.py
deleted file mode 100644
index 5156c8b..0000000
--- a/turbo_hipster/task_plugins/jjb_runner/task.py
+++ /dev/null
@@ -1,178 +0,0 @@
-# Copyright 2014 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import copy
-import logging
-import os
-import xmltodict
-
-import jenkins_jobs.builder
-
-from turbo_hipster.lib import common
-from turbo_hipster.lib import models
-from turbo_hipster.lib import utils
-
-
-class UnimplementedJJBFunction(Exception):
- pass
-
-
-class Runner(models.ShellTask):
-
- """A plugin to run jobs defined by JJB.
- Based on models.ShellTask the steps can be overwritten."""
-
- log = logging.getLogger("task_plugins.jjb_runner.task.Runner")
-
- def __init__(self, worker_server, plugin_config, job_name):
- super(Runner, self).__init__(worker_server, plugin_config, job_name)
- self.total_steps = 6
- self.jjb_instructions = {}
- self.script_return_codes = []
-
- def do_job_steps(self):
- self.log.info('Step 1: Prep job working dir')
- self._prep_working_dir()
-
- self.log.info('Step 2: Grab instructions from jjb')
- self._grab_jjb_instructions()
-
- self.log.info('Step 3: Follow JJB Instructions')
- self._execute_instructions()
-
- self.log.info('Step 4: Analyse logs for errors')
- self._parse_and_check_results()
-
- self.log.info('Step 5: handle the results (and upload etc)')
- self._handle_results()
-
- self.log.info('Step 6: Handle extra actions such as shutting down')
- self._handle_cleanup()
-
- @common.task_step
- def _grab_jjb_instructions(self):
- """ Use JJB to interpret instructions into a dictionary. """
-
- # For the moment we're just using xmltodict as the xml is very tightly
- # coupled to JJB. In the future we could have an interpreter for JJB
- # files.
-
- # Set up a builder with fake jenkins creds
- jjb = jenkins_jobs.builder.Builder('http://', '', '')
- jjb.load_files(self.plugin_config['jjb_config'])
- jjb.parser.generateXML([self.plugin_config['function']
- .replace('build:', '')])
- if len(jjb.parser.jobs) == 1:
- # got the right job
- self.jjb_instructions = xmltodict.parse(
- jjb.parser.jobs[0].output())
-
- @common.task_step
- def _execute_instructions(self):
- self.log.debug(self.plugin_config['function'].replace('build:', ''))
- self.log.debug(self.jjb_instructions.keys())
- self.log.debug(self.jjb_instructions)
-
- # Look at all of the items in the jenkins project and raise errors
- # for unimplemented functionality
- for key, value in self.jjb_instructions['project'].items():
- self.log.debug(key)
- self.log.debug(value)
-
- if key in ['actions', 'properties']:
- # Not sure how to handle these when they have values
- if value is None:
- continue
- else:
- raise UnimplementedJJBFunction(
- "Not sure how to handle values for %s (yet)" % key)
- elif key in ['description', 'keepDependencies',
- 'blockBuildWhenDownstreamBuilding',
- 'blockBuildWhenUpstreamBuilding', 'concurrentBuild',
- 'assignedNode', 'canRoam', 'logRotator', 'scm']:
- # Ignore all of these directives as they don't apply to
- # turbo-hipster/zuul
- continue
- elif key == 'builders':
- # Loop over builders
- self._handle_builders(value)
- elif key == 'publishers':
- # Ignore publishers for the moment
- continue
- elif key == 'buildWrappers':
- # Ignore buildWrappers for the moment but probably should
- # duplicate functionality for timeout reasons
- continue
- else:
- raise UnimplementedJJBFunction(
- "We don't know what to do with '%s' (yet)"
- % key)
-
- def _handle_builders(self, builders):
- for key, value in builders.items():
- self.log.debug('--builder')
- self.log.debug(key)
- self.log.debug(value)
- if key == 'hudson.tasks.Shell':
- self._handle_shell_items(value)
- else:
- raise UnimplementedJJBFunction(
- "We don't know how to handle the builder '%s' (yet)"
- % key)
-
- def _handle_shell_items(self, shell_tasks):
- for shell_task in shell_tasks:
- for key, value in shell_task.items():
- self.log.debug('--Shell')
- self.log.debug(key)
- self.log.debug(value)
- if key == 'command':
- self._handle_command(value)
- else:
- raise UnimplementedJJBFunction(
- "We don't know how to handle the command '%s' (yet)"
- % key)
-
- def _handle_command(self, command):
- # Cd to working dir
- # export job_params as env
- self.log.debug("EXECUTING COMMAND")
- cwd = os.path.join(self.job_working_dir, 'working/')
- if not os.path.isdir(os.path.dirname(cwd)):
- self.log.debug('making dir, %s' % cwd)
- os.makedirs(os.path.dirname(cwd))
-
- env = copy.deepcopy(self.job_arguments)
- env['PATH'] = os.environ['PATH']
-
- self.script_return_codes.append(utils.execute_to_log(
- command, self.shell_output_log,
- env=env,
- cwd=cwd
- ))
-
- @common.task_step
- def _parse_and_check_results(self):
- for return_code in self.script_return_codes:
- if return_code > 0:
- self.success = False
- self.messages.append('Return code from test script was '
- 'non-zero (%d)' % return_code)
-
- @common.task_step
- def _handle_results(self):
- """Upload the contents of the working dir either using the instructions
- provided by zuul and/or our configuration"""
-
- self.log.debug("Process the resulting files (upload/push)")
diff --git a/turbo_hipster/task_plugins/real_db_upgrade/__init__.py b/turbo_hipster/task_plugins/real_db_upgrade/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/turbo_hipster/task_plugins/real_db_upgrade/__init__.py
+++ /dev/null
diff --git a/turbo_hipster/task_plugins/real_db_upgrade/handle_results.py b/turbo_hipster/task_plugins/real_db_upgrade/handle_results.py
deleted file mode 100644
index e701c5b..0000000
--- a/turbo_hipster/task_plugins/real_db_upgrade/handle_results.py
+++ /dev/null
@@ -1,228 +0,0 @@
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-""" Methods to handle the results of the task.
-
-Primarily place the log files somewhere useful and optionally email
-somebody """
-
-import calendar
-import time
-import os
-import re
-
-
-MIGRATION_NUMBER_RE = re.compile('^([0-9]+).*\.py$')
-MIGRATION_START_RE = re.compile('.* ([0-9]+) -\> ([0-9]+)\.\.\..*$')
-MIGRATION_END_RE = re.compile('done$')
-MIGRATION_FINAL_SCHEMA_RE = re.compile('Final schema version is ([0-9]+)')
-INNODB_STATISTIC_RE = re.compile('.* (Innodb_.*)\t([0-9]+)')
-
-
-class LogParser(object):
- def __init__(self, logpath, gitpath):
- self.logpath = logpath
- self.gitpath = gitpath
- self._reset()
-
- def _reset(self):
- self.errors = []
- self.warnings = []
- self.migrations = []
-
- def find_schemas(self):
- """Return a list of the schema numbers present in git."""
-
- # TODO(mikal): once more of the cells code lands this needs to handle
- # the API migratons as well as the cells migration. Just do cells for
- # now though.
- cells_migration_path = os.path.join(
- self.gitpath,
- 'nova/db/sqlalchemy/cell_migrations/migrate_repo/versions')
-
- if not os.path.exists(cells_migration_path):
- cells_migration_path = os.path.join(
- self.gitpath,
- 'nova/db/sqlalchemy/migrate_repo/versions')
-
- return [int(MIGRATION_NUMBER_RE.findall(f)[0]) for f in os.listdir(
- cells_migration_path) if MIGRATION_NUMBER_RE.match(f)]
-
- def process_log(self):
- """Analyse a log for errors."""
- self._reset()
- innodb_stats = {}
- migration_stats = {}
- current_migration = {}
-
- with open(self.logpath, 'r') as fd:
- migration_started = False
-
- for line in fd:
- if 'ERROR 1045' in line:
- return False, "FAILURE - Could not setup seed database."
- elif 'ERROR 1049' in line:
- return False, "FAILURE - Could not find seed database."
- elif 'ImportError' in line:
- return False, "FAILURE - Could not import required module."
- elif MIGRATION_START_RE.search(line):
- if current_migration:
- current_migration['stats'] = migration_stats
- if (('start' in current_migration and
- 'end' in current_migration)):
- current_migration['duration'] = (
- current_migration['end'] -
- current_migration['start'])
- self.migrations.append(current_migration)
- current_migration = {}
- migration_stats = {}
-
- if migration_started:
- # We didn't see the last one finish,
- # something must have failed
- self.errors.append('FAILURE - Migration started '
- 'but did not end')
-
- migration_started = True
- current_migration['start'] = self.line_to_time(line)
-
- m = MIGRATION_START_RE.match(line)
- current_migration['from'] = int(m.group(1))
- current_migration['to'] = int(m.group(2))
-
- elif MIGRATION_END_RE.search(line):
- if migration_started:
- migration_started = False
- current_migration['end'] = self.line_to_time(line)
-
- elif INNODB_STATISTIC_RE.search(line):
- # NOTE(mikal): the stats for a migration step come after
- # the migration has ended, because they're the next
- # command in the script. We don't record them until the
- # next migration starts (or we hit the end of the file).
- m = INNODB_STATISTIC_RE.match(line)
- name = m.group(1)
- value = int(m.group(2))
-
- if name in innodb_stats and name not in migration_stats:
- delta = value - innodb_stats[name]
- if delta > 0:
- migration_stats[name] = delta
-
- innodb_stats[name] = value
-
- elif 'Final schema version is' in line and self.gitpath:
- # Check the final version is as expected
- final_version = MIGRATION_FINAL_SCHEMA_RE.findall(line)[0]
- if int(final_version) != max(self.find_schemas()):
- self.errors.append('FAILURE - Final schema version '
- 'does not match expectation')
-
- if migration_started:
- # We never saw the end of a migration, something must have
- # failed
- self.errors.append('FAILURE - Did not find the end of a '
- 'migration after a start')
-
- if current_migration:
- current_migration['stats'] = migration_stats
- if (('start' in current_migration and
- 'end' in current_migration)):
- current_migration['duration'] = (
- current_migration['end'] - current_migration['start'])
- self.migrations.append(current_migration)
-
- def line_to_time(self, line):
- """Extract a timestamp from a log line"""
- return calendar.timegm(time.strptime(line[:23],
- '%Y-%m-%d %H:%M:%S,%f'))
-
-
-def check_migration(migration, attribute, value, dataset_config):
- """Checks if a given migration is within its allowed parameters.
-
- Returns True if okay, False if it takes too long."""
-
- migration_name = '%s->%s' % (migration['from'], migration['to'])
- allowed = dataset_config[attribute].get(
- migration_name, dataset_config[attribute]['default'])
- if value > allowed:
- return False
- return True
-
-
-def check_log_file(log_file, git_path, dataset):
- lp = LogParser(log_file, git_path)
- lp.process_log()
-
- success = True
- messages = []
-
- if not lp.migrations:
- success = False
- messages.append('No migrations run')
-
- if lp.errors:
- success = False
- for err in lp.errors:
- messages.append(err)
-
- if lp.warnings:
- success = False
- for warn in lp.warnings:
- messages.append(warn)
-
- for migration in lp.migrations:
- migration.setdefault('stats', {})
-
- # check migration completed
- if 'duration' not in migration:
- success = False
- messages.append('WARNING - Migration %s->%s failed to complete'
- % (migration['from'], migration['to']))
- continue
-
- # Check total time
- if not check_migration(migration, 'maximum_migration_times',
- migration['duration'], dataset['config']):
- success = False
- messages.append('WARNING - Migration %s->%s took too long'
- % (migration['from'], migration['to']))
-
- # Check rows changed
- rows_changed = 0
- for key in ['Innodb_rows_updated',
- 'Innodb_rows_inserted',
- 'Innodb_rows_deleted']:
- rows_changed += migration['stats'].get(key, 0)
-
- if not check_migration(migration, 'XInnodb_rows_changed',
- rows_changed, dataset['config']):
- success = False
- messages.append('WARNING - Migration %s->%s changed too many '
- 'rows (%d)'
- % (migration['from'], migration['to'],
- rows_changed))
-
- # Check rows read
- rows_read = migration['stats'].get('Innodb_rows_read', 0)
- if not check_migration(migration, 'Innodb_rows_read',
- rows_read, dataset['config']):
- success = False
- messages.append('WARNING - Migration %s->%s read too many '
- 'rows (%d)'
- % (migration['from'], migration['to'], rows_read))
-
- return success, messages
diff --git a/turbo_hipster/task_plugins/real_db_upgrade/makenetnamespace.sh b/turbo_hipster/task_plugins/real_db_upgrade/makenetnamespace.sh
deleted file mode 100755
index 9432583..0000000
--- a/turbo_hipster/task_plugins/real_db_upgrade/makenetnamespace.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-# Create a network namespace with no network access
-sudo ip netns add nonet
-sudo ip link add veth0 type veth peer name veth1
-sudo ifconfig veth0 172.16.0.1/24 up
-sudo ip link set veth1 netns nonet
-sudo ip netns exec nonet ifconfig veth1 172.16.0.2/24 up
-
-# Firewall mysql connections from outside
-sudo /sbin/iptables -A INPUT -p tcp --dport 3306 -i eth0 -j DROP
-sudo /sbin/iptables -A INPUT -p tcp --dport 3306 -i eth1 -j DROP
-
-# Mysql permissions
-mysql -u root --password=$1 -e "create user 'nova'@'172.16.0.2' identified by 'tester';"
-mysql -u root --password=$1 -e "grant all privileges on *.* to 'nova'@'172.16.0.2' with grant option;"
diff --git a/turbo_hipster/task_plugins/real_db_upgrade/nova-manage-wrapper.sh b/turbo_hipster/task_plugins/real_db_upgrade/nova-manage-wrapper.sh
deleted file mode 100755
index 9a3b16a..0000000
--- a/turbo_hipster/task_plugins/real_db_upgrade/nova-manage-wrapper.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-
-source $1/bin/activate
-shift
-nova-manage $@
diff --git a/turbo_hipster/task_plugins/real_db_upgrade/nova_mysql_migrations.sh b/turbo_hipster/task_plugins/real_db_upgrade/nova_mysql_migrations.sh
deleted file mode 100755
index 408d7f4..0000000
--- a/turbo_hipster/task_plugins/real_db_upgrade/nova_mysql_migrations.sh
+++ /dev/null
@@ -1,306 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-# $1 is the unique job id
-# $2 is the working dir path
-# $3 is the path to the git repo path
-# $4 is the nova db user
-# $5 is the nova db password
-# $6 is the nova db name
-# $7 is the path to the seed dataset to test against
-# $8 is the logging.conf for openstack
-# $9 is the pip cache dir
-
-UNIQUE_ID=$1
-WORKING_DIR_PATH=$2
-GIT_REPO_PATH=$3
-DB_USER=$4
-DB_PASS=$5
-DB_NAME=$6
-DATASET_SEED_SQL=$7
-LOG_CONF_FILE=$8
-PIP_CACHE_DIR=$9
-
-# We also support the following environment variables to tweak our behavour:
-# NOCLEANUP: if set to anything, don't cleanup at the end of the run
-
-pip_requires() {
- # $1 is the branch to use for the upper constraints
- pip install -q mysql-python
- pip install -q eventlet
- requires="tools/pip-requires"
- if [ ! -e $requires ]
- then
- requires="requirements.txt"
- fi
-
- wget http://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=$1 -O $WORKING_DIR_PATH/upper-constraints.txt
- echo "Install pip requirements from $requires"
- pip install -c $WORKING_DIR_PATH/upper-constraints.txt -r $requires
-
- # Workaround for old python version on ubuntu-precise
- ubuntu_version=$( lsb_release -r | awk '{ print $2 }' | sed 's/[.]//' )
- if [ $ubuntu_version -eq 1204 ]
- then
- pip install -U "greenlet<0.4.9"
- fi
-
- echo "Requirements installed"
- pip freeze
-}
-
-db_sync() {
- # $1 is the test target (ie branch name)
- # $2 is an (optional) destination version number
-
- # Create a nova.conf file
- cat - > $WORKING_DIR_PATH/nova-$1.conf <<EOF
-[DEFAULT]
-sql_connection = mysql://$DB_USER:$DB_PASS@172.16.0.1/$DB_NAME?charset=utf8
-log_config = $LOG_CONF_FILE
-EOF
-
- # Silently return git to a known good state (delete untracked files)
- git clean -xfdq
-
- echo "***** Start DB upgrade to state of $1 *****"
- echo "HEAD of branch under test is:"
- git log -n 1
-
- echo "Setting up the nova-manage entry point"
- python setup.py -q clean
- python setup.py -q develop
- python setup.py -q install
-
- # Find where we store db versions
- # TODO(mikal): note this only handles the cell db for now
- versions_path="$GIT_REPO_PATH/nova/db/sqlalchemy/cell_migrations/migrate_repo/versions"
- if [ ! -e $versions_path ]
- then
- versions_path="$GIT_REPO_PATH/nova/db/sqlalchemy/migrate_repo/versions"
- fi
-
- # Log the migrations present
- echo "Migrations present:"
- ls $versions_path/*.py | sed 's/.*\///' | egrep "^[0-9]+_"
-
- # Flush innodb's caches
- echo "Restarting mysql"
- sudo service mysql stop
- sudo service mysql start
-
- echo "MySQL counters before upgrade:"
- mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "show status like 'innodb%';"
-
- start_version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
-
- if [ "%$2%" == "%%" ]
- then
- end_version=`ls $versions_path/*.py | sed 's/.*\///' | egrep "^[0-9]+_" | tail -1 | cut -f 1 -d "_"`
- else
- end_version=$2
- fi
-
- echo "Test will migrate from $start_version to $end_version"
- if [ $end_version -lt $start_version ]
- then
- increment=-1
- end_version=$(( $end_version + 1 ))
- else
- increment=1
- start_version=$(( $start_version + 1))
- fi
-
- for i in `seq $start_version $increment $end_version`
- do
- set -x
- sudo /sbin/ip netns exec nonet `dirname $0`/nova-manage-wrapper.sh $VENV_PATH --config-file $WORKING_DIR_PATH/nova-$1.conf --verbose db sync --version $i
- manage_exit=$?
- set +x
-
- echo "MySQL counters after upgrade:"
- mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "show status like 'innodb%';"
-
- echo "nova-manage returned exit code $manage_exit"
- if [ $manage_exit -gt 0 ]
- then
- echo "Aborting early"
- exit $manage_exit
- fi
- done
-
- echo "***** Finished DB upgrade to state of $1 *****"
-}
-
-stable_release_db_sync() {
- version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
- # Some databases are from Juno
- echo "Schema version is $version"
- if [ $version -lt "280" ]
- then
- echo "Database is from Juno! Upgrade via Kilo"
- git branch -D stable/kilo || true
- git remote update
- git checkout -b stable/kilo
- git reset --hard remotes/origin/stable/kilo
- pip_requires stable/kilo
- db_sync "kilo"
-
- # TODO(jhesketh): This is a bit of a hack until we update our datasets to
- # have the flavour data migrated. We have to do this before upgrading from
- # set -x
- # echo "MySQL counters before migrate_flavor_data:"
- # mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "show status like 'innodb%';"
- # sudo /sbin/ip netns exec nonet `dirname $0`/nova-manage-wrapper.sh $VENV_PATH --config-file $WORKING_DIR_PATH/nova-kilo.conf --verbose db migrate_flavor_data --force
- # echo "MySQL counters after migrate_flavor_data:"
- # mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "show status like 'innodb%';"
- # set +x
- fi
-
- version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
- # Some databases are from Kilo
- echo "Schema version is $version"
- if [ $version -lt "302" ]
- then
- echo "Database is from Kilo! Upgrade via Liberty"
- git branch -D stable/liberty || true
- git remote update
- git checkout -b stable/liberty
- git reset --hard remotes/origin/stable/liberty
- pip_requires stable/liberty
- db_sync "liberty"
- fi
-
- version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
- # Some databases are from Liberty
- echo "Schema version is $version"
- if [ $version -lt "319" ]
- then
- echo "Database is from Liberty! Upgrade via Mitaka"
- git branch -D stable/mitaka || true
- git remote update
- git checkout -b stable/mitaka
- git reset --hard remotes/origin/stable/mitaka
- pip_requires stable/mitaka
- db_sync "mitaka"
- fi
-
- # TODO(jhesketh): Add in Newton here once released
-
- # TODO(jhesketh): Make this more DRY and/or automatically match migration
- # numbers to releases.
-}
-
-echo "Test running on "`hostname`" as "`whoami`" ("`echo ~`", $HOME)"
-echo "To execute this script manually, run this:"
-echo "$0 $@"
-
-# Setup the environment
-set -x
-export PATH=/usr/lib/ccache:$PATH
-#export PIP_DOWNLOAD_CACHE=$PIP_CACHE_DIR
-#export PIP_INDEX_URL="http://www.rcbops.com/pypi/mirror"
-export PIP_INDEX_URL="http://pypi.openstack.org/simple/"
-export PIP_EXTRA_INDEX_URL="https://pypi.python.org/simple/"
-which pip
-pip --version
-which virtualenv
-virtualenv --version
-which mkvirtualenv
-set +x
-
-# Restore database to known good state
-echo "Loading test database $DB_NAME"
-set -x
-if ! mysql -u $DB_USER --password=$DB_PASS -e "use $DB_NAME"
-then
- mysql -u $DB_USER --password=$DB_PASS -e "create database $DB_NAME"
- mysql -u $DB_USER --password=$DB_PASS $DB_NAME < $DATASET_SEED_SQL
-fi
-set +x
-
-echo "Build test environment"
-cd $GIT_REPO_PATH
-
-echo "Setting up virtual env"
-source ~/.bashrc
-export WORKON_HOME=/var/lib/turbo-hipster/envs
-VENV_PATH=$WORKON_HOME/$UNIQUE_ID
-rm -rf $VENV_PATH
-source /usr/local/bin/virtualenvwrapper.sh
-mkvirtualenv --no-site-packages $UNIQUE_ID
-#toggleglobalsitepackages
-export PYTHONPATH=$PYTHONPATH:$GIT_REPO_PATH
-
-if [ ! -e $VENV_PATH ]
-then
- echo "Error: making the virtual env failed"
- exit 1
-fi
-
-stable_release_db_sync
-
-last_stable_version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
-echo "Schema after stable_release_db_sync version is $last_stable_version"
-
-# Make sure the test DB is up to date with trunk
-if [ `git show | grep "^\-\-\-" | grep "migrate_repo/versions" | wc -l` -gt 0 ]
-then
- echo "This change alters an existing migration, skipping trunk updates."
-else
- echo "Update database to current state of trunk"
- git checkout master
- pip_requires master
- db_sync "trunk"
- git checkout working
-fi
-
-# Now run the patchset
-echo "Now test the patchset"
-pip_requires master
-db_sync "patchset"
-
-# =============================================================================
-# We used to do downgrade testing, but nova no longer supports it
-# https://github.com/openstack/openstack-specs/blob/master/specs/no-downward-sql-migration.rst
-
-# # Determine the schema version
-# version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
-# echo "Schema version is $version"
-
-# echo "Now downgrade all the way back to the last stable version (v$last_stable_version)"
-# db_sync "downgrade" $last_stable_version
-
-# # Determine the schema version
-# version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
-# echo "Schema version is $version"
-
-# echo "And now back up to head from the start of trunk"
-# db_sync "patchset"
-# =============================================================================
-
-# Determine the final schema version
-version=`mysql -u $DB_USER --password=$DB_PASS $DB_NAME -e "select * from migrate_version \G" | grep version | sed 's/.*: //'`
-echo "Final schema version is $version"
-
-if [ "%$NOCLEANUP%" == "%%" ]
-then
- # Cleanup virtual env
- echo "Cleaning up virtual env"
- deactivate
- rmvirtualenv $UNIQUE_ID
-fi
diff --git a/turbo_hipster/task_plugins/real_db_upgrade/task.py b/turbo_hipster/task_plugins/real_db_upgrade/task.py
deleted file mode 100644
index ca67671..0000000
--- a/turbo_hipster/task_plugins/real_db_upgrade/task.py
+++ /dev/null
@@ -1,206 +0,0 @@
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import json
-import logging
-import os
-import re
-
-from turbo_hipster.lib import common
-from turbo_hipster.lib import models
-from turbo_hipster.lib import utils
-
-
-import turbo_hipster.task_plugins.real_db_upgrade.handle_results\
- as handle_results
-
-
-# Regex for log checking
-MIGRATION_START_RE = re.compile('([0-9]+) -> ([0-9]+)\.\.\.$')
-MIGRATION_END_RE = re.compile('^done$')
-
-
-class Runner(models.ShellTask):
-
- """ This thread handles the actual sql-migration tests.
- It pulls in a gearman job from the build:real-db-upgrade
- queue and runs it through _handle_patchset"""
-
- log = logging.getLogger("task.real_db_upgrade")
-
- def __init__(self, worker_server, job_name, job_config):
- super(Runner, self).__init__(worker_server, job_name, job_config)
-
- # Set up the runner worker
- self.datasets = []
- self.job_datasets = []
-
- # Define the number of steps we will do to determine our progress.
- self.total_steps += 1
-
- def do_job_steps(self):
- # Step 1: Figure out which datasets to run
- self.job_datasets = self._get_job_datasets()
-
- # all other steps are common to running a shell script
- super(Runner, self).do_job_steps()
-
- @common.task_step
- def _get_job_datasets(self):
- """ Take the applicable datasets for this job and set them up in
- self.job_datasets """
-
- job_datasets = []
- for dataset in self._get_datasets():
- # Only load a dataset if it is the right project and we
- # know how to process the upgrade
- if (self.job_arguments['ZUUL_PROJECT'] ==
- dataset['config']['project'] and
- self._get_project_command(dataset['config']['type'])):
- dataset['job_log_file_path'] = os.path.join(
- self.job_results_dir,
- dataset['name'] + '.log'
- )
- dataset['result'] = 'UNTESTED'
- dataset['command'] = \
- self._get_project_command(dataset['config']['type'])
-
- job_datasets.append(dataset)
-
- return job_datasets
-
- @common.task_step
- def _execute_script(self):
- # Run script
- self.script_return_code = self._execute_migrations()
-
- @common.task_step
- def _parse_and_check_results(self):
- super(Runner, self)._parse_and_check_results()
- self._check_all_dataset_logs_for_errors()
-
- def _check_all_dataset_logs_for_errors(self):
- self.log.debug('Check logs for errors')
-
- for i, dataset in enumerate(self.job_datasets):
- success, messages = handle_results.check_log_file(
- dataset['job_log_file_path'], self.git_path, dataset)
-
- if self.success and not success:
- self.success = False
- for message in messages:
- self.messages.append(message)
-
- if success:
- self.job_datasets[i]['result'] = 'SUCCESS'
- else:
- self.job_datasets[i]['result'] = messages[0]
-
- def _get_datasets(self):
- self.log.debug("Get configured datasets to run tests against")
- if len(self.datasets) > 0:
- return self.datasets
-
- datasets_path = self.job_config['datasets_dir']
- for ent in os.listdir(datasets_path):
- dataset_dir = os.path.join(datasets_path, ent)
- if (os.path.isdir(dataset_dir) and os.path.isfile(
- os.path.join(dataset_dir, 'config.json'))):
- dataset = {}
- with open(os.path.join(dataset_dir, 'config.json'),
- 'r') as config_stream:
- dataset_config = json.load(config_stream)
-
- dataset['name'] = ent
- dataset['dataset_dir'] = dataset_dir
- dataset['config'] = dataset_config
-
- self.datasets.append(dataset)
-
- return self.datasets
-
- def _get_project_command(self, db_type):
- command = (self.job_arguments['ZUUL_PROJECT'].split('/')[-1] + '_' +
- db_type + '_migrations.sh')
- command = os.path.join(os.path.dirname(__file__), command)
- if os.path.isfile(command):
- return command
- return False
-
- def _execute_migrations(self):
- """ Execute the migration on each dataset in datasets """
-
- self.log.debug("Run the db sync upgrade script")
-
- for dataset in self.job_datasets:
- cmd = dataset['command']
- # $1 is the unique id
- # $2 is the working dir path
- # $3 is the path to the git repo path
- # $4 is the db user
- # $5 is the db password
- # $6 is the db name
- # $7 is the path to the dataset to test against
- # $8 is the logging.conf for openstack
- # $9 is the pip cache dir
-
- cmd += (
- (' %(unique_id)s %(job_working_dir)s %(git_path)s'
- ' %(dbuser)s %(dbpassword)s %(db)s'
- ' %(dataset_path)s %(logging_conf)s %(pip_cache_dir)s')
- % {
- 'unique_id': self.job.unique,
- 'job_working_dir': self.job_working_dir,
- 'git_path': self.git_path,
- 'dbuser': dataset['config']['db_user'],
- 'dbpassword': dataset['config']['db_pass'],
- 'db': dataset['config']['database'],
- 'dataset_path': os.path.join(
- dataset['dataset_dir'],
- dataset['config']['seed_data']
- ),
- 'logging_conf': os.path.join(
- dataset['dataset_dir'],
- dataset['config']['logging_conf']
- ),
- 'pip_cache_dir':
- self.worker_server.config['pip_download_cache']
- }
- )
-
- # Gather logs to watch
- syslog = '/var/log/syslog'
- sqlslo = '/var/log/mysql/slow-queries.log'
- sqlerr = '/var/log/mysql/error.log'
- if 'logs' in self.worker_server.config:
- if 'syslog' in self.worker_server.config['logs']:
- syslog = self.worker_server.config['logs']['syslog']
- if 'sqlslo' in self.worker_server.config['logs']:
- sqlslo = self.worker_server.config['logs']['sqlslo']
- if 'sqlerr' in self.worker_server.config['logs']:
- sqlerr = self.worker_server.config['logs']['sqlerr']
-
- rc = utils.execute_to_log(
- cmd,
- dataset['job_log_file_path'],
- watch_logs=[
- ('[syslog]', syslog),
- ('[sqlslo]', sqlslo),
- ('[sqlerr]', sqlerr)
- ],
- )
- # FIXME: If more than one dataset is provided we won't actually
- # test them!
- return rc
diff --git a/turbo_hipster/task_plugins/shell_script/__init__.py b/turbo_hipster/task_plugins/shell_script/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/turbo_hipster/task_plugins/shell_script/__init__.py
+++ /dev/null
diff --git a/turbo_hipster/task_plugins/shell_script/task.py b/turbo_hipster/task_plugins/shell_script/task.py
deleted file mode 100644
index ce08729..0000000
--- a/turbo_hipster/task_plugins/shell_script/task.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import logging
-
-from turbo_hipster.lib import models
-
-
-class Runner(models.ShellTask):
-
- """A plugin to run any shell script as defined in the config. Based on
- models.ShellTask the steps can be overwritten."""
-
- log = logging.getLogger("task_plugins.shell_script.task.Runner")
diff --git a/turbo_hipster/worker_manager.py b/turbo_hipster/worker_manager.py
deleted file mode 100644
index a1cf47b..0000000
--- a/turbo_hipster/worker_manager.py
+++ /dev/null
@@ -1,198 +0,0 @@
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import gear
-import json
-import logging
-import os
-import threading
-import time
-
-
-class ZuulManager(threading.Thread):
-
- """ This thread manages all of the launched gearman workers.
- As required by the zuul protocol it handles stopping builds when they
- are cancelled through stop:turbo-hipster-manager-%hostname.
- To do this it implements its own gearman worker waiting for events on
- that manager. """
-
- log = logging.getLogger("worker_manager.ZuulManager")
-
- def __init__(self, worker_server, tasks):
- super(ZuulManager, self).__init__()
- self._stop = threading.Event()
- self.stopping = False
- self.running = False
-
- self.worker_server = worker_server
- self.tasks = tasks
-
- self.gearman_worker = None
- self.setup_gearman()
-
- def setup_gearman(self):
- hostname = os.uname()[1]
- self.gearman_worker = gear.Worker('turbo-hipster-manager-%s'
- % hostname)
- self.gearman_worker.addServer(
- self.worker_server.config['zuul_server']['gearman_host'],
- self.worker_server.config['zuul_server']['gearman_port']
- )
-
- def register_functions(self):
- hostname = os.uname()[1]
- self.gearman_worker.registerFunction(
- 'stop:turbo-hipster-manager-%s' % hostname)
-
- def stop_gracefully(self):
- self.stopping = True
- self.gearman_worker.stopWaitingForJobs()
- while self.running:
- self.log.debug('waiting to finish')
- time.sleep(0.1)
- self._stop.set()
- self.gearman_worker.shutdown()
-
- def stop(self):
- self._stop.set()
- # Unblock gearman
- self.log.debug("Telling gearman to stop waiting for jobs")
- self.gearman_worker.stopWaitingForJobs()
- self.gearman_worker.shutdown()
-
- def stopped(self):
- return self._stop.isSet()
-
- def run(self):
- while not self.stopped() and not self.stopping:
- self.running = True
- try:
- # gearman_worker.getJob() blocks until a job is available
- self.log.debug("Waiting for server")
- self.gearman_worker.waitForServer()
- if (not self.stopped() and self.gearman_worker.running and
- self.gearman_worker.active_connections):
- self.register_functions()
- self.gearman_worker.waitForServer()
- logging.debug("Waiting for job")
- self.current_step = 0
- job = self.gearman_worker.getJob()
- self._handle_job(job)
- except gear.InterruptedError:
- self.log.debug('We were asked to stop waiting for jobs')
- except:
- self.log.exception('Unknown exception waiting for job.')
- self.running = False
- self.log.debug("Finished manager thread")
-
- def _handle_job(self, job):
- """ Handle the requested job """
- try:
- job_arguments = json.loads(job.arguments.decode('utf-8'))
- self.tasks[job_arguments['name']].stop_working(
- job_arguments['number'])
- job.sendWorkComplete()
- except Exception as e:
- self.log.exception('Exception waiting for management job.')
- job.sendWorkException(str(e).encode('utf-8'))
-
-
-class ZuulClient(threading.Thread):
-
- """ ..."""
-
- log = logging.getLogger("worker_manager.ZuulClient")
-
- def __init__(self, worker_server):
- super(ZuulClient, self).__init__()
- self._stop = threading.Event()
- self.stopping = False
- self.running = False
-
- self.worker_server = worker_server
-
- # Set up the runner worker
- self.gearman_worker = None
- self.functions = {}
-
- self.job = None
-
- self.setup_gearman()
-
- def setup_gearman(self):
- self.log.debug("Set up gearman worker")
- self.gearman_worker = gear.Worker(self.worker_server.worker_name)
- self.gearman_worker.addServer(
- self.worker_server.config['zuul_server']['gearman_host'],
- self.worker_server.config['zuul_server']['gearman_port']
- )
-
- def register_functions(self):
- self.log.debug("Register functions with gearman")
- for function_name, plugin in self.functions.items():
- self.gearman_worker.registerFunction(function_name)
- self.log.debug(self.gearman_worker.functions)
-
- def add_function(self, function_name, plugin):
- self.log.debug("Add function, %s, to list" % function_name)
- self.functions[function_name] = plugin
-
- def stop(self):
- self._stop.set()
- for task in self.functions.values():
- task.stop_working()
- # Unblock gearman
- self.log.debug("Telling gearman to stop waiting for jobs")
- self.gearman_worker.stopWaitingForJobs()
- self.gearman_worker.shutdown()
-
- def stop_gracefully(self):
- self.stopping = True
- self.gearman_worker.stopWaitingForJobs()
- while self.running:
- time.sleep(0.1)
- self._stop.set()
- self.gearman_worker.shutdown()
-
- def stopped(self):
- return self._stop.isSet()
-
- def run(self):
- while not self.stopped() and not self.stopping:
- self.running = True
- try:
- # gearman_worker.getJob() blocks until a job is available
- self.log.debug("Waiting for server")
- self.gearman_worker.waitForServer()
- if (not self.stopped() and self.gearman_worker.running and
- self.gearman_worker.active_connections):
- self.register_functions()
- self.gearman_worker.waitForServer()
- self.log.debug("Waiting for job")
- self.job = self.gearman_worker.getJob()
- self._handle_job()
- except gear.InterruptedError:
- self.log.debug('We were asked to stop waiting for jobs')
- except:
- self.log.exception('Unknown exception waiting for job.')
- self.running = False
- self.log.debug("Finished client thread")
-
- def _handle_job(self):
- """ We have a job, give it to the right plugin """
- if self.job:
- self.log.debug("We have a job, we'll launch the task now.")
- self.functions[self.job.name].start_job(self.job)
diff --git a/turbo_hipster/worker_server.py b/turbo_hipster/worker_server.py
deleted file mode 100644
index 5a2ff00..0000000
--- a/turbo_hipster/worker_server.py
+++ /dev/null
@@ -1,178 +0,0 @@
-#!/usr/bin/python2
-#
-# Copyright 2013 Rackspace Australia
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-import logging
-import os
-import threading
-import yaml
-
-import worker_manager
-from os.path import join, isdir, isfile
-
-
-class Server(threading.Thread):
-
- """ This is the worker server object to be daemonized """
- log = logging.getLogger("worker_server.Server")
-
- def __init__(self, config):
- super(Server, self).__init__()
- self._stop = threading.Event()
- self.config = config
-
- # Load extra configuration first
- # NOTE(Mattoliverau): debug_log might be specified in
- # a conf.d snippet.
- if 'conf_d' in self.config:
- self.load_extra_configuration()
-
- # Python logging output file.
- self.debug_log = self.config['debug_log']
- self.setup_logging(self.debug_log)
-
- # Config init
- self.zuul_manager = None
- self.zuul_client = None
- self.services_started = False
-
- # TODO: Make me unique (random?) and we should be able to run multiple
- # instances of turbo-hipster on the one host
- self.worker_name = os.uname()[1]
-
- self.jobs = {}
- self.load_jobs()
-
- def load_extra_configuration(self):
- if isdir(self.config["conf_d"]):
- extra_configs = (join(self.config["conf_d"], item)
- for item in os.listdir(self.config["conf_d"])
- if isfile(join(self.config["conf_d"], item)))
- for conf in extra_configs:
- try:
- with open(conf, 'r') as config_stream:
- extra_config = yaml.safe_load(config_stream)
- self.config.update(extra_config)
- except:
- self.log.warn("Failed to load extra configuration: '%s'" %
- (conf))
- continue
- else:
- self.log.warn("conf_d parameter '%s' isn't a directory" %
- (self.config["conf_d"]))
-
- def setup_logging(self, log_file=None):
- if log_file:
- if not os.path.isdir(os.path.dirname(log_file)):
- os.makedirs(os.path.dirname(log_file))
- logging.basicConfig(format='%(asctime)s %(name)-32s '
- '%(levelname)-8s %(message)s',
- filename=log_file,
- level=logging.DEBUG)
-
- def load_jobs(self):
- # Legacy, load the plugins first
- self.load_plugins()
-
- self.log.debug("Loading jobs")
- if 'jobs' in self.config:
- for job in self.config['jobs']:
- try:
- plugin = 'shell_script'
- if 'plugin' in job:
- plugin = job['plugin']
-
- module = __import__('turbo_hipster.task_plugins.' +
- plugin + '.task',
- fromlist='turbo_hipster.task_plugins' +
- plugin)
-
- self.jobs[job['name']] = {
- 'name': job['name'],
- 'plugin': plugin,
- 'job_config': job,
- 'runner': module.Runner(self, job['name'], job),
- }
- self.log.debug('Job %s loaded' % job['name'])
- except Exception as e:
- self.log.exception("Failure loading job")
- self.log.exception(e)
-
- def load_plugins(self):
- """ Load the available plugins from task_plugins """
- self.log.debug('Loading plugins')
- # Load plugins
- if 'plugins' in self.config:
- for plugin in self.config['plugins']:
- try:
- module = __import__('turbo_hipster.task_plugins.' +
- plugin['name'] + '.task',
- fromlist='turbo_hipster.task_plugins' +
- plugin['name'])
-
- self.jobs[plugin['function']] = {
- 'name': plugin['function'],
- 'plugin': plugin['name'],
- 'plugin_config': plugin,
- 'runner': module.Runner(
- self, plugin['function'], plugin
- ),
- }
- self.log.debug('Job %s loaded' % plugin['function'])
- except Exception as e:
- self.log.exception("Failure loading plugin")
- self.log.exception(e)
-
- def start_zuul_client(self):
- """ Run the tasks """
- self.log.debug('Starting zuul client')
- self.zuul_client = worker_manager.ZuulClient(self)
-
- for job in self.jobs.values():
- self.zuul_client.add_function(job['name'], job['runner'])
-
- self.zuul_client.start()
-
- def start_zuul_manager(self):
- self.zuul_manager = worker_manager.ZuulManager(self, self.jobs)
- self.zuul_manager.start()
-
- def shutdown_gracefully(self):
- """ Shutdown while no work is currently happening """
- self.log.debug('Graceful shutdown once jobs are complete...')
- thread = threading.Thread(target=self._shutdown_gracefully)
- thread.start()
-
- def _shutdown_gracefully(self):
- self.zuul_client.stop_gracefully()
- self.zuul_manager.stop_gracefully()
- self._stop.set()
-
- def shutdown(self):
- self.log.debug('Shutting down now!...')
- self.zuul_client.stop()
- self.zuul_manager.stop()
- self._stop.set()
-
- def stopped(self):
- return self._stop.isSet()
-
- def run(self):
- self.start_zuul_client()
- self.start_zuul_manager()
- self.services_started = True
- while not self.stopped():
- self._stop.wait()