From 94d8230a9e2ba205e33f3620cca5a6fcf82ea0f8 Mon Sep 17 00:00:00 2001 From: Zhijiang Hu Date: Sat, 8 Oct 2016 06:46:07 -0400 Subject: [PATCH] Delete oslo-incubator code & switch to oslo.service Change-Id: Ie0e70d3f603d61e8c7ad95b7c548008776c1af51 --- code/daisy/AUTHORS | 348 -- code/daisy/CONTRIBUTING.rst | 2 +- code/daisy/ChangeLog | 2866 ----------------- code/daisy/HACKING.rst | 4 +- code/daisy/README.rst | 12 +- code/daisy/daisy/cmd/api.py | 2 +- code/daisy/daisy/cmd/orchestration.py | 2 +- code/daisy/daisy/cmd/registry.py | 2 +- code/daisy/daisy/common/jsonpatchvalidator.py | 122 - code/daisy/daisy/openstack/__init__.py | 0 code/daisy/daisy/openstack/common/README | 16 - code/daisy/daisy/openstack/common/__init__.py | 0 code/daisy/daisy/openstack/common/_i18n.py | 45 - .../openstack/common/eventlet_backdoor.py | 151 - .../daisy/daisy/openstack/common/fileutils.py | 149 - code/daisy/daisy/openstack/common/local.py | 45 - .../daisy/openstack/common/loopingcall.py | 147 - code/daisy/daisy/openstack/common/service.py | 495 --- code/daisy/daisy/openstack/common/systemd.py | 105 - .../daisy/openstack/common/threadgroup.py | 149 - code/daisy/openstack-common.conf | 8 - code/daisy/rally-jobs/README.rst | 30 - code/daisy/rally-jobs/extra/README.rst | 5 - code/daisy/rally-jobs/extra/fake.img | 0 code/daisy/rally-jobs/glance.yaml | 45 - code/daisy/rally-jobs/plugins/README.rst | 9 - .../daisy/rally-jobs/plugins/plugin_sample.py | 91 - code/daisy/requirements.txt | 15 +- 28 files changed, 14 insertions(+), 4851 deletions(-) delete mode 100755 code/daisy/daisy/common/jsonpatchvalidator.py delete mode 100755 code/daisy/daisy/openstack/__init__.py delete mode 100755 code/daisy/daisy/openstack/common/README delete mode 100755 code/daisy/daisy/openstack/common/__init__.py delete mode 100755 code/daisy/daisy/openstack/common/_i18n.py delete mode 100755 code/daisy/daisy/openstack/common/eventlet_backdoor.py delete mode 100755 code/daisy/daisy/openstack/common/fileutils.py delete mode 100755 code/daisy/daisy/openstack/common/local.py delete mode 100755 code/daisy/daisy/openstack/common/loopingcall.py delete mode 100755 code/daisy/daisy/openstack/common/service.py delete mode 100755 code/daisy/daisy/openstack/common/systemd.py delete mode 100755 code/daisy/daisy/openstack/common/threadgroup.py delete mode 100755 code/daisy/openstack-common.conf delete mode 100755 code/daisy/rally-jobs/README.rst delete mode 100755 code/daisy/rally-jobs/extra/README.rst delete mode 100755 code/daisy/rally-jobs/extra/fake.img delete mode 100755 code/daisy/rally-jobs/glance.yaml delete mode 100755 code/daisy/rally-jobs/plugins/README.rst delete mode 100755 code/daisy/rally-jobs/plugins/plugin_sample.py diff --git a/code/daisy/AUTHORS b/code/daisy/AUTHORS index f4425b40..e69de29b 100755 --- a/code/daisy/AUTHORS +++ b/code/daisy/AUTHORS @@ -1,348 +0,0 @@ -Aaron Rosen -Abhijeet Malawade -Abhishek Kekane -Adam Gandelman -Adam Gandelman -Alberto Planas -Alessandro Pilotti -Alessio Ababilov -Alessio Ababilov -Alex Gaynor -Alex Meade -Alexander Gordeev -Alexander Tivelkov -Amala Basha -AmalaBasha -AmalaBasha -Anastasia Vlaskina -Andreas Jaeger -Andrew Hutchings -Andrew Melton -Andrew Tranquada -Andrey Brindeyev -Andy McCrae -Anita Kuno -Arnaud Legendre -Artur Svechnikov -Ashish Jain -Ashwini Shukla -Aswad Rangnekar -Attila Fazekas -Avinash Prasad -Balazs Gibizer -Bartosz Fic -Ben Nemec -Ben Roble -Bernhard M. Wiedemann -Bhuvan Arumugam -Boris Pavlovic -Brant Knudson -Brian Cline -Brian D. Elliott -Brian Elliott -Brian Elliott -Brian Lamar -Brian Rosmaita -Brian Waldon -Cerberus -Chang Bo Guo -ChangBo Guo(gcb) -Chmouel Boudjnah -Chris Allnutt -Chris Behrens -Chris Buccella -Chris Buccella -Chris Fattarsi -Christian Berendt -Christopher MacGown -Chuck Short -Cindy Pallares -Clark Boylan -Cory Wright -Dan Prince -Danny Al-Gaaf -Davanum Srinivas -Davanum Srinivas -Dave Chen -Dave Walker (Daviey) -David Koo -David Peraza -David Ripton -Dean Troyer -DennyZhang -Derek Higgins -Dirk Mueller -Dmitry Kulishenko -Dolph Mathews -Donal Lafferty -Doron Chen -Doug Hellmann -Doug Hellmann -Duncan McGreggor -Eddie Sheffield -Edward Hope-Morley -Eldar Nugaev -Elena Ezhova -Eoghan Glynn -Eric Brown -Eric Windisch -Erno Kuvaja -Eugeniya Kudryashova -Ewan Mellor -Fabio M. Di Nitto -Fei Long Wang -Fei Long Wang -Fengqian Gao -Flaper Fesp -Flavio Percoco -Florent Flament -Gabriel Hurley -Gauvain Pocentek -Geetika Batra -George Peristerakis -Georgy Okrokvertskhov -Gerardo Porras -Gorka Eguileor -Grant Murphy -Haiwei Xu -He Yongli -Hemanth Makkapati -Hemanth Makkapati -Hengqing Hu -Hirofumi Ichihara -Hui Xiang -Ian Cordasco -Iccha Sethi -Igor A. Lukyanenkov -Ihar Hrachyshka -Ildiko Vancsa -Ilya Pekelny -Inessa Vasilevskaya -Ionuț Arțăriși -Isaku Yamahata -J. Daniel Schmidt -Jakub Ruzicka -James Carey -James E. Blair -James Li -James Morgan -James Polley -Jamie Lennox -Jared Culp -Jasakov Artem -Jason Koelker -Jason Kölker -Jay Pipes -Jeremy Stanley -Jesse Andrews -Jesse J. Cook -Jia Dong -Jinwoo 'Joseph' Suh -Joe Gordon -Joe Gordon -Johannes Erdfelt -John Bresnahan -John Lenihan -John Warren -Jon Bernard -Joseph Suh -Josh Durgin -Josh Durgin -Josh Kearney -Joshua Harlow -Juan Manuel Olle -Juerg Haefliger -Julia Varlamova -Julien Danjou -Jun Hong Li -Justin Santa Barbara -Justin Shepherd -KIYOHIRO ADACHI -Kamil Rykowski -Kasey Alusi -Ken Pepple -Ken Thomas -Kent Wang -Keshava Bharadwaj -Kevin L. Mitchell -Kui Shi -Kun Huang -Lakshmi N Sampath -Lars Gellrich -Leam -Leandro I. Costantino -Liu Yuan -Lorin Hochstein -Louis Taylor -Louis Taylor -Luis A. Garcia -Major Hayden -Mark J. Washenberger -Mark J. Washenberger -Mark McLoughlin -Mark Washenberger -Martin Kletzander -Maru Newby -Masashi Ozawa -Matt Dietz -Matt Fischer -Matt Riedemann -Matthew Booth -Matthew Treinish -Matthias Schmitz -Maurice Leeflang -Mauro S. M. Rodrigues -Michael J Fork -Michael Still -Michal Dulko -Mike Fedosin -Mike Lundy -Monty Taylor -Nassim Babaci -Nicholas Kuechler -Nicolas Simonds -Nikhil Komawar -Nikhil Komawar -Nikolaj Starodubtsev -Noboru Arai -Noboru arai -Oleksii Chuprykov -Olena Logvinova -Pamela-Rose Virtucio -Patrick Mezard -Paul Bourke -Paul Bourke -Paul McMillan -Pavan Kumar Sunkara -Pawel Koniszewski -Pawel Skowron -Peng Yong -Pete Zaitcev -Pranali Deore -PranaliDeore -Pádraig Brady -Pádraig Brady -Radu -Rainya Mosher -Rajesh Tailor -Ray Chen -Reynolds Chin -Rick Clark -Rick Harris -Robert Collins -Rohan Kanade -Roman Bogorodskiy -Roman Bogorodskiy -Roman Vasilets -Rongze Zhu -RongzeZhu -Russell Bryant -Russell Sim -Sabari Kumar Murugesan -Sam Morrison -Sam Stavinoha -Samuel Merritt -Sascha Peilicke -Sascha Peilicke -Sathish Nagappan -Sean Dague -Sean Dague -Sergey Nikitin -Sergey Skripnick -Sergey Vilgelm -Sergio Cazzolato -Shane Wang -Soren Hansen -Stan Lagun -Steve Kowalik -Steve Lewis -Stuart McLaren -Sulochan Acharya -Svetlana Shturm -Taku Fukushima -Tatyana Leontovich -Therese McHale -Thierry Carrez -Thomas Bechtold -Thomas Bechtold -Thomas Leaman -Tim Daly, Jr -Toan Nguyen -Tom Hancock -Tom Leaman -Tomas Hancock -Travis Tripp -Unmesh Gurjar -Unmesh Gurjar -Vaibhav Bhatkar -Venkatesh Sampath -Venkatesh Sampath -Victor Morales -Victor Sergeyev -Vincent Untz -Vishvananda Ishaya -Vitaliy Kolosov -Vyacheslav Vakhlyuev -Wayne A. Walls -Wayne Okuma -Wen Cheng Ma -Wu Wenxiang -YAMAMOTO Takashi -Yaguang Tang -Yanis Guenane -Yufang Zhang -Yuriy Taraday -Yusuke Ide -ZHANG Hua -Zhenguo Niu -Zhi Yan Liu -ZhiQiang Fan -ZhiQiang Fan -Zhiteng Huang -Zhongyue Luo -abhishek-kekane -abhishekkekane -amalaba -ankitagrawal -ankur -annegentle -daisy-ycguo -eddie-sheffield -eos2102 -gengjh -henriquetruta -huangtianhua -hzrandd <82433422@qq.com> -iccha -iccha-sethi -iccha.sethi -isethi -jakedahn -jare6412 -jaypipes@gmail.com <> -jola-mirecka -lawrancejing -leseb -ling-yun -liuqing -liyingjun -liyingjun -lizheming -llg8212 -ls1175 -marianitadn -mathrock -nanhai liao -pran1990 -ravikumar-venkatesan -sai krishna sripada -sarvesh-ranjan -shreeduth-awasthi -shrutiranade38 -shu,xinxin -sridevik -sridevik -tanlin -tmcpeak -wanghong -yangxurong diff --git a/code/daisy/CONTRIBUTING.rst b/code/daisy/CONTRIBUTING.rst index 8fe8d547..b4f66fa7 100755 --- a/code/daisy/CONTRIBUTING.rst +++ b/code/daisy/CONTRIBUTING.rst @@ -13,4 +13,4 @@ Pull requests submitted through GitHub will be ignored. Bugs should be filed on Launchpad, not GitHub: - https://bugs.launchpad.net/glance + https://bugs.launchpad.net/daisycloud-core \ No newline at end of file diff --git a/code/daisy/ChangeLog b/code/daisy/ChangeLog index 63933ed3..493b7c94 100755 --- a/code/daisy/ChangeLog +++ b/code/daisy/ChangeLog @@ -1,2869 +1,3 @@ CHANGES ======= -2015.1.0 --------- - -* Metadef JSON files need to be updated -* Plugin types are not exposed to the client -* v1 API should be in SUPPORTED status -* Read tag name instead of ID -* Updated from global requirements -* Release Import of Translations from Transifex -* update .gitreview for stable/kilo - -2015.1.0rc1 ------------ - -* Fixes glance-manage exporting meta definitions issue -* Catch UnknownScheme exception -* Refactor API function test class -* Move elasticsearch dep to test-requirements.txt -* Update openstack-common reference in openstack/common/README -* Zero downtime config reload (glance-control) -* Imported Translations from Transifex -* Glance cache to not prune newly cached images -* glance-manage db load_metadefs does not load all resource_type_associations -* Fix intermittent unit test failures -* Fix intermittent test case failure due to dict order -* Imported Translations from Transifex -* A mixin for jsonpatch requests validation -* Artifact Plugins Loader -* Declarative definitions of Artifact Types -* Creating metadef object without any properties -* Zero downtime config reload (log handling) -* Database layer for Artifact Repository -* Catalog Index Service - Index Update -* Catalog Index Service -* Zero downtime config reload (socket handling) -* Typo in pylintrc file -* Fix metadef tags migrations -* Update documentation for glance-manage -* Fix common misspellings - -2015.1.0b3 ----------- - -* Replace assert statements with proper control-flow -* Remove use of contextlib.nested -* Use graduated oslo.policy -* oslo: migrate namespace-less import paths -* Fix typo in rpc controller -* Fixes typo in doc-string -* wsgi: clean JSON serializer -* use is_valid_port from oslo.utils -* Add ability to deactivate an image -* Remove deprecated option db_enforce_mysql_charset -* Raise exception if store location URL not found -* Fix missing translations for error and info -* Basic support for image conversion -* Extend images api v2 with new sorting syntax -* Add the ability to specify the sort dir for each key -* Move to graduated oslo.log module -* Provide a way to upgrade metadata definitions -* Pass a real image target to the policy enforcer -* Glance basic architecture section -* Fix typo in configuration file -* Updated from global requirements -* Add sync check for models_metadef -* Notifications for metadefinition resources -* Update config and docs for multiple datastores support -* Avoid usability regression when generating config -* Glance Image Introspection -* Add capabilities to storage driver -* Updated from global requirements -* Zero downtime configuration reload -* Add operators to provide multivalue support -* Remove the eventlet executor -* SemVer utility to store object versions in DB -* Switch to latest oslo-incubator -* Use oslo_config choices support -* Fix the wrong format in the example -* Remove en_US translation -* db_export_metadefs generates inappropriate json files -* Synchronising oslo-incubator service module -* Unify using six.moves.range rename everywhere -* Updated from global requirements -* Glance returns HTTP 500 for image download -* Remove boto from requirements.txt -* Unbreak python-swiftclient gate -* Eventlet green threads not released back to pool -* Imported Translations from Transifex -* Removes unnecessary assert -* Prevents swap files from being found by Git -* Add BadStoreConfiguration handling to glance-api -* Remove redundant parentheses in conditional statements -* Make sure the parameter has the consistent meaning -* Image data remains in backend for deleted image -* Remove is_public from reserved attribute in v2 -* unify some messages -* Typos fixed in the comments -* The metadef tags create api does not match blue-print -* Clarified doc of public_endpoint config option -* Add detail description of image_cache_max_size -* Updated from global requirements - -2015.1.0b2 ----------- - -* Add Support for TaskFlow Executor -* Include readonly flag in metadef API -* Fix for CooperativeReader to process read length -* Software Metadata Definitions -* Updated from global requirements -* Rewrite SSL tests -* Replace snet config with endpoint config -* Simplify context by using oslo.context -* Handle empty request body with chunked encoding -* Update vmware_adaptertype metadef values -* Typos fixed in the comments -* Updated from global requirements -* Redundant __init__ def in api.authorization.MetadefTagProxy -* Make digest algorithm configurable -* Switch to mox3 -* Remove argparse from requirement -* Remove optparse from glance-replicator -* Eliminate shell param from subprocesses in tests -* Remove test dependency on curl -* Cleanup chunks for deleted image that was 'saving' -* remove need for netaddr -* Fix copy-from when user_storage_quota is enabled -* remove extraneous --concurrency line in tox -* SQL scripts should not manage transactions -* Fixes line continuations -* Upgrade to hacking 0.10 -* Removed python-cinderclient from requirements.txt -* Move from oslo.db to oslo_db -* Move from oslo.config to oslo_config -* Improve documentation for glance_stores -* Fix reference to "stores" from deprecated name -* Move from oslo.utils to oslo_utils -* Updated from global requirements -* Updated from global requirements -* Prevent file, swift+config and filesystem schemes -* Simplify usage of str.startswith -* Adding filesystem schema check in async task -* Fix spelling typo -* Fix rendering of readme document -* Imported Translations from Transifex -* Add swift_store_cacert to config files and docs -* Add latest swift options in glance-cache.conf -* Fix document issue of image recover status -* rename oslo.concurrency to oslo_concurrency -* Provide a quick way to run flake8 -* Fix 3 intermittently failing tests -* Removed obsolete db_auto_create configuration option -* Fix client side i18n support for v1 api -* Move default_store option in glance-api.conf -* Removes http-requests to glance/example.com in glance test -* Remove _i18n from openstack-common -* Adds the ability to sort images with multiple keys -* Add sort key validation in v2 api -* Fixes typo: glance exception additional dot -* Allow $OS_AUTH_URL environment variable to override config file value -* Bump API version to 2.3 -* Replace '_' with '_LI', '_LE', '_LW', '_LC' - -2015.1.0b1 ----------- - -* Removes unused modules: timeutils and importutils -* Generate glance-manage.conf -* Imported Translations from Transifex -* Adding Metadef Tag support -* Removed unnecessary dot(.) from log message -* Using oslo.concurrency lib -* Update config and docs for Multiple Containers -* To prevent client use v2 patch api to handle file and swift location -* Updated from global requirements -* Use testr directly from tox -* Remove reliance on import order of oslo.db mods -* Remove openstack.common.gettextutils module -* Fix typo in common module -* Fix and add a test case for IPv6 -* Start server message changed -* Fix getaddrinfo if dnspython is installed -* Workflow documentation is now in infra-manual -* Allow None values to be returned from the API -* Expose nullable fields properties -* Allow some fields to be None -* Update glance.openstack.common.policy and cleanup -* A small refactoring of the domain -* Updated from global requirements -* Disable osprofiler by default -* Work toward Python 3.4 support and testing -* Correct GlanceStoreException to provide valid message - Glance -* Remove Python 2.6 classifier -* Add ModelSMigrationSync classes -* Alter models and add migration -* No 4 byte unicode allowed in image parameters -* Update rally-jobs files -* Move from using _ builtin to using glance.i18n _ -* Change Glance to use i18n instead of gettextutils -* Raising glance logging levels -* Imported Translations from Transifex -* Do not use LazyPluggable -* metadef modules should only use - from wsme.rest import json -* Wrong order of assertEquals args(Glance) -* Removal of unnecessary sample file from repository -* Upgrade tests' mocks to match glance_store -* Remove exception declarations from replicator.py -* Typo correction of the prefix value in compute-host-capabilities -* Replace custom lazy loading by stevedore -* vim ropeproject directories added to gitignore -* Initiate deletion of image files if the import was interrupted -* Raise an exception when quota config parameter is broken -* Fix context storage bug -* Ignore Eric IDE files and folders in git -* Make RequestContext use auth_token (not auth_tok) -* Swift Multi-tenant store: Pass context on upload -* Use unicode for error message -* change default value for s3_store_host -* remove url-path from the default value of s3_store_host -* Complete the change of adding public_endpoint option -* Update the vmware_disktype metadefs values -* Add config option to override url for versions -* Separate glance and eventlet wsgi logging -* Remove openstack.common.test -* Remove modules from openstack-common.conf -* Improve error log for expired image location url -* Handle some exceptions of image_create v2 api -* Remove eventlet_hub option -* Adds openSUSE in the installing documentation -* Glance scrubber should page thru images from registry -* Add logging to image_members and image_tags -* Update glance.openstack.common - -2014.2 ------- - -* Fix options and their groups - etc/glance-api.conf -* Fix options and their groups - etc/glance-api.conf -* Adjust authentication.rst doc to reference "identity_uri" -* Can not delete images if db deadlock occurs -* Reduce extraneous test output -* Isolate test from environment variables -* Fix for adopt glance.store library in Glance -* Adjust authentication.rst doc to reference "identity_uri" - -2014.2.rc2 ----------- - -* Use identity_uri instead of older fragments -* Prevent setting swift+config locations -* Metadef schema column name is a reserved word in MySQL -* Remove stale chunks when failed to update image to registry -* GET property which name includes resource type prefix -* g-api raises 500 error while uploading image -* Fix for Adopt glance.store library in Glance -* Update Metadefs associated with ImagePropertiesFilter -* updated translations -* Use ID for namespace generated by DB -* Metadef Property and Object schema columns should use JSONEncodedDict -* Add missing metadefs for shutdown behavior -* Update driver metadata definitions to Juno -* Mark custom properties in image schema as non-base -* Specify the MetadefNamespace.namespace column is not nullable -* Make compute-trust.json compatible with TrustFilter -* Include Metadata Defs Concepts in Dev Docs -* Nova instance config drive Metadata Definition -* Add missing metadefs for Aggregate Filters -* Updated from global requirements - -2014.2.rc1 ----------- - -* Imported Translations from Transifex -* Add specific docs build option to tox -* Add documentation for a new storage file permissions option -* Updated from global requirements -* Remove db_enforce_mysql_charset option for db_sync of glance-manage -* Fix assertEqual arguments order -* Prevent setting swift+config locations -* Remove stale chunks when failed to update image to registry -* Use specific exceptions instead of the general MetadefRecordNotFound -* Metadef schema column name is a reserved word in MySQL -* Fix for Adopt glance.store library in Glance -* GET property which name includes resource type prefix -* Incorrect parameters passed -* g-api raises 500 error while uploading image -* Minor style tidy up in metadata code -* Metadef Property and Object schema columns should use JSONEncodedDict -* Updated from global requirements -* Use ID for namespace generated by DB -* Switch to oslo.serialization -* Switch to oslo.utils -* Imported Translations from Transifex -* Add missing metadefs for shutdown behavior -* hacking: upgrade to 0.9.x serie -* Fix bad header bug in glance-replicator -* Run tests with default concurrency 0 -* Refactor test_migrations module -* Include Metadata Defs Concepts in Dev Docs -* Open Kilo development -* Mark custom properties in image schema as non-base -* Fix missing space in user_storage_quota help message -* Fix glance V2 incorrectly implements JSON Patch'add' -* Make compute-trust.json compatible with TrustFilter -* replace dict.iteritems() with six.iteritems(dict) -* Enforce using six.text_type() over unicode() -* Update driver metadata definitions to Juno -* Remove uses of unicode() builtin -* Fixes Error Calling GET on V1 Registry -* Enabling separated sample config file generation -* Update Metadefs associated with ImagePropertiesFilter -* Fixes logging in image_import's main module -* Refactor metadef ORM classes to use to_dict instead of as_dict -* Stop using intersphinx -* Just call register_opts in tests -* Replaces assertEqual with assertTrue and assertFalse -* Block sqlalchemy-migrate 0.9.2 -* Specify the MetadefNamespace.namespace column is not nullable -* Add missing metadefs for Aggregate Filters -* Nova instance config drive Metadata Definition -* Improve OS::Compute::HostCapabilities description -* Sync glance docs with metadefs api changes -* Change open(file) to with block -* Fix CommonImageProperties missing ":" -* Fix VMware Namespace capitalization & description -* Imported Translations from Transifex -* Duplicated image id return 409 instead of 500 in API v2 -* Glance API V2 can't recognize parameter 'id' -* API support for random access to images -* Adopt glance.store library in Glance -* Adds missing db registry api tests for Tasks -* warn against sorting requirements -* Introduces eventlet executor for Glance Tasks - -2014.2.b3 ---------- - -* Glance Metadata Definitions Catalog - API -* ignore .idea folder in glance -* Glance Metadata Definitions Catalog - Seed -* Glance Metadata Definitions Catalog - DB -* Restrict users from downloading protected image -* Syncing changes from oslo-incubator policy engine -* Use identity_uri instead of older fragments -* Fix legacy tests using system policy.json file -* Improve Glance profiling -* Fix collection order issues and unit test failures -* Check on schemes not stores -* Replacement mox by mock -* Imported Translations from Transifex -* Log task ID when the task status changes -* Changes HTTP response code for unsupported methods -* Enforce image_size_cap on v2 upload -* Do not assume order of images -* Ensure constant order when setting all image tags -* Fix bad indentation in glance -* Use @mock.patch.object instead of mock.MagicMock -* Adding status field to image location -- scrubber queue switching -* Bump osprofiler requirement to 0.3.0 -* Fix migration on older postgres -* Fix rally performance job in glance -* Integrate OSprofiler and Glance -* Fix image killed after deletion -* VMware store: Use the Content-Length if available -* Fix RBD store to use READ_CHUNKSIZE -* Trivial fix typo: Unavilable to Unavailable -* Quota column name 'key' in downgrade script -* Do not log password in swift URLs in g-registry -* Updated from global requirements -* Use `_LW` where appropriate in db/sqla/api -* Log upload failed exception trace rather than debug -* Decouple read chunk size from write chunk size -* Enable F821 check: undefined name 'name' - -2014.2.b2 ---------- - -* Security hardening: fix possible shell injection vulnerability -* Move to oslo.db -* Catch exception.InUseByStore at API layer -* Fixes the failure of updating or deleting image empty property -* Adding status field to image location -- scrubber changes -* Also run v2 functional tests with registry -* Refactoring Glance logging lowering levels -* Set defaults for amqp in glance-registry.conf -* Fix typo in swift store message -* Add a `_retry_on_deadlock` decorator -* Use auth_token from keystonemiddleware -* Allow some property operations when quota exceeded -* Raising 400 Bad Request when using "changes-since" filter on v2 -* Moving eventlet.hubs.use_hub call up -* Adding status field to image location -- domain and APIs changes -* Add task functions to v2 registry -* Changing replicator to use openstack.common.log -* Fix unsaved exception in v1 API controller -* Pass Message object to webob exception -* Some exceptions raise UnicodeError -* Handle session timeout in the VMware store -* Some v2 exceptions raise unicodeError -* Resolving the performance issue for image listing of v2 API on server -* Switch over oslo.i18n -* Fix typo in comment -* Updated from global requirements -* Imported Translations from Transifex -* Updated from global requirements -* Raise NotImplementedError instead of NotImplemented -* Fix unsaved exception in store.rbd.Store.add() -* Fix docstrings in enforce() and check() policy methods -* Added an extra parameter to the df command -* Add CONTRIBUTING.rst -* Imported Translations from Transifex -* Use (# of CPUs) glance workers by default -* Sync processutils and lockutils from oslo with deps -* Document registry 'workers' option -* Removing translation from debug messages -* Unifies how BadStoreUri gets raised and logged -* Fix lazy translation UnicodeErrors -* Changing Sheepdog driver to use correct configuration function -* Implemented S3 multi-part upload functionality -* Log swift container creation -* Synced jsonutils and its dependencies from oslo-incubator -* Remove user and key from location in swift -* Updated from global requirements -* Changed psutil dep. to match global requirements -* Add pluging sample for glance gate -* Fixes v2 return status on unauthorized download -* Update documentation surrounding the api and registry servers -* Do not call configure several times at startup -* Move `location`'s domain code out of glance.store -* sync oslo incubator code -* notifier: remove notifier_strategy compat support -* notifier: simply notifier_strategy compat support -* colorizer: use staticmethod rather than classmethod -* Improved coverage for glance.api.* -* Assign local variable in api.v2.image_data - -2014.2.b1 ---------- - -* Use df(1) in a portable way -* Add test for no_translate_debug_logs hacking check -* Add hacking checks -* replace dict.iteritems() with six.iteritems(dict) -* make uploading an image as public admin only by default -* remove default=None for config options -* Bump python-swiftclient version -* TaskTest:test_fail() should use asserIstNone -* debug level logs should not be translated -* use /usr/bin/env python instead of /usr/bin/python -* Remove all mostly untranslated PO files -* Remove duplicated is_uuid_like() function -* fixed typos found by RETF rules in RST files -* Use safe way through "with" statement to work with files -* Clean up openstack-common.conf -* Removing duplicate entry from base_conf -* Use safe way through "with" statement to work with files -* Use Chunked transfer encoding in the VMware store -* Ensures that task.message is of type unicode -* Replace unicode() for six.text_type -* Prevent creation of http images with invalid URIs -* Fixed a handful of typos -* Fixes installation of test-requirements -* Add rally performance gate job for glance -* To fixes import error for run_tests.sh -* Replace assert* with more suitable asserts in unit tests -* Get rid of TaskDetails in favor of TaskStub -* Fixes "bad format" in replicator for valid hosts -* Sync latest network_utils module from Oslo -* Fixes spelling error in test name -* Uses None instead of mutables for function param defaults -* Fix various Pep8 1.5.4 errors -* Fixes Glance Registry V2 client -* Update Glance configuration sample files for database options -* To prevent remote code injection on Sheepdog store -* Added undescore function to some log messages -* Adds TaskStub class -* Updated from global requirements -* user_storage_quota now accepts units with value -* Do not allow HEAD images/detail -* Configuration doc for VMware storage backend -* Catch loading failures if transport_url is not set -* Fix Jenkins translation jobs -* Fixed the pydev error message - -2014.1.rc1 ----------- - -* Open Juno development -* Making DB sanity checking be optional for DB migration -* Fix deprecation warning in test_multiprocessing -* Do not set Location header on HTTP/OK (200) responses -* Fix swift functional test "test_create_store" -* Sanitize set passed to jsonutils.dumps() -* When re-raising exceptions, use save_and_reraise -* Imported Translations from Transifex -* Sync common db code from Oslo -* Return 405 when attempting DELETE on /tasks -* Remove openstack.common.fixture -* Enable H304 check -* VMware store.add to return the image size uploaded -* registry: log errors on failure -* Removes use of timeutils.set_time_override -* Provide explicit image create value for test_image_paginate case -* Make the VMware datastore backend more robust -* Pass Message object to webob exception -* Detect MultiDict when generating json body -* Makes possible to enable Registry API v1 and v2 -* Do not use __builtin__ in python3 -* Updated from global requirements -* Fix swift functional test -* Provide an upgrade period for enabling stores -* API v2: Allow GET on unowned images with show_image_direct_url -* Add copyright text to glance/openstack/common/__init__.py -* Don't enable all stores by default -* Remove unused methods -* Fix glance db migration failed on 031 -* Document for API message localization - -2014.1.b3 ---------- - -* Add support for API message localization -* Add the OVA container format -* Store URI must start with the expected URI scheme -* Documentation for Glance tasks -* Remove import specific validation from tasks resource -* Remove dependency of test_v1_api on other tests -* Include Location header in POST /tasks response -* Catch exception when image cache pruning -* VMware storage backend should use oslo.vmware -* Sync common db code from Oslo -* Refactor UUID test -* Replaced calls of get(foo, None) -> get(foo) -* Use six.StringIO/BytesIO instead of StringIO.StringIO -* Replaced "...\'%s\'..." with "...'%s'..." -* Updated from global requirements -* Fix logging context to include user_identity -* Log 'image_id' with all BadStoreURI error messages -* Added undescore function to some strings -* Use 0-based indices for location entries -* Glance all: Replace basestring by six for python3 compatability -* Delete image metadata after image is deleted -* Modify assert statement when comparing with None -* Enable hacking H301 and disable H304, H302 -* Replacement mox by mock -* Keep py3.X compatibility for urllib -* Use uuid instead of uuidutils -* Use six.moves.urllib.parse instead of urlparse -* Switch over to oslosphinx -* Fix parsing of AMQP configuration -* Add `virtual_size` to Glance's API v2 -* Add a virtual_size attribute to the Image model -* Enable F841 check -* Add support for PartialTask list -* Rename Openstack to OpenStack -* Add a mailmap entry for myself -* Sync log.py from oslo -* Add unit tests around glance-manage -* Remove tox locale overrides -* Improve help strings -* Provide explicit image create value in Registry v2 API test -* VMware Datastore storage backend -* Adding status field to image location -- DB migration -* Apply image location selection strategy -* Switch to testrepository for running tests -* Clean up DatabaseMigrationError -* Enable H302 check -* Fix misspellings in glance -* Expose image property 'owner' in v2 API -* Removes logging of location uri -* Updated from global requirements -* Remove duplicate type defination of v2 images schema -* Enable H202 check -* Modify my mailmap -* glance-manage wont take version into consideration -* Move scrubber outside the store package -* Depending on python-swiftclient>=1.6 -* Now psutil>=1.1.0 is actually on PyPI -* Fix indentation errors found by Pep8 1.4.6+ -* Add VMware storage backend to location strategy -* Log a warning when a create fails due to quota -* glance requires pyOpenSSL>=0.11 -* Imported Translations from Transifex -* Restore image status to 'queued' if upload failed -* Don't override transport_url with old configs -* Provide explicit image create value in Registry v2 Client test -* Provide explicit task create and update value in controller tests -* Enable hacking H703 check -* Sync with global requirements -* Sync oslo.messaging version with global-requirements -* Don't rewrite the NotFound error message -* Update all the glance manpages -* Use common db migrations module from Oslo -* Check --store parameter validity before _reserve -* Sync gettextutils from Oslo -* Enable gating on H501 -* Add multifilesystem store to support NFS servers as backend -* Check first matching rule for protected properties -* Retry failed image download from Swift -* Restore image status on duplicate image upload - -2014.1.b2 ---------- - -* Tests added for glance/cmd/cache_pruner.py -* Prevent E500 when delayed delete is enabled -* Sync unhandled exception logging change from Oslo -* Check image id format before executing operations -* fix bug:range() is not same in py3.x and py2.x -* Fix the incorrect log message when creating images -* Adding image location selection strategies -* Fix inconsistent doc string and code of db_sync -* fixing typo in rst file -* Fix tmp DB path calculation for test_migrations.py -* Change assertTrue(isinstance()) by optimal assert -* add log for _get_images method -* Makes 'expires_at' not appear if not set on task -* Remove vim header -* Update the glance-api manpage -* Remove 'openstack/common/context.py' -* Allow users to customize max header size -* Decouple the config dependence on glance domain -* Fix typo in doc string -* Prevent min_disk and min_ram from being negative -* Set image size to None after removing all locations -* Update README to the valid Oslo-incubator doc -* Cleans up imports in models.py -* Sync Log levels from OSLO -* Align glance-api.conf rbd option defaults with config -* Bump hacking to 0.8 and get python 3.x compatibility -* Add config option to limit image locations -* replace type calls with isinstance -* Adding logs to tasks -* Skip unconfigurable drivers for store initialization -* Fix typo in gridfs store -* Oslo sync to recover from db2 server disconnects -* fix comments and docstrings misspelled words -* Fix call to store.safe_delete_from_backend -* Switch to Hacking 0.8.x -* assertEquals is deprecated, use assertEqual (H234) -* Consider @,! in properties protection rule as a configuration error -* Remove unused imports in glance -* Remove return stmt of add,save and remove method -* Migrate json to glance.openstack.common.jsonutils -* Use common Oslo database session -* Define sheepdog_port as an integer value -* Sync with oslo-incubator (git 6827012) -* Enable gating on F811 (duplicate function definition) -* Set image size after updating/adding locations -* Disallow negative image sizes -* Fix and enable gating on H306 -* Make code base E125 and E126 compliant -* Fix 031 migration failed on DB2 -* Remove the redundant code -* Correct URL in v1 test_get_images_unauthorized -* Refactor tests.unit.utils:FakeDB.reset -* Fixed wrong string format in glance.api.v2.image_data -* Empty files shouldn't contain copyright nor license -* Use uuid instead of uuidutils -* Enable H233/H301/H302 tests that are ignored at the moment -* Remove duplicate method implementations in ImageLocationsProxy -* Make Glance code base H102 compliant -* Make Glance code base H201 compliant -* Cleanup: remove unused code from store_utils -* Filter out deleted images from storage usage -* Add db2 communication error code when check the db connection -* Refine output of glance service managment -* Adds guard against upload contention -* Fixes HTTP 500 when updating image with locations for V2 -* Increase test coverage for glance.common.wsgi -* Return 204 when image data does not exist -* V2: disallow image format update for active status -* Enable tasks REST API for async worker -* Cleanly fail when location URI is malformed -* Rename duplicate test_add_copy_from_upload_image_unauthorized -* Adding missing copy_from policy from policy.json -* Fix simple-db image filtering on extra properties -* Pin sphinx to <1.2 -* assertEquals is deprecated, use assertEqual instead -* Fix and enable gating on H702 -* Replace startswith by more precise store matching -* Remove unused exceptions -* Remove duplicate method __getitem__ in quota/__init__.py -* Enforce copy_from policy during image-update -* Refactor StorageQuotaFull test cases in test_quota -* remove hardcode of usage -* Added error logging for http store -* Forbidden update message diffs images/tasks/member -* Unittests added for glance/cmd/cache_manage.py -* Makes tasks owner not nullable in models.py -* Move is_image_sharable to registry api -* Remove TestRegistryDB dependency on TestRegistryAPI -* Introduce Task Info Table - -2014.1.b1 ---------- - -* Migrate to oslo.messaging -* Add config option to limit image members -* Add config option to limit image tags -* Glance image-list failed when image number exceed DEFAULT_PAGE_SIZE -* DB migration changes to support DB2 as sqlalchemy backend -* Add documentation for some API parameters -* RBD add() now returns correct size if given zero -* Set upload_image policy to control data upload -* Replace deprecated method assertEquals -* Clean up duplicate code in v2.image_data.py -* Fix docstring on detail in glance/api/v1/images.py -* Use assertEqual instead of assertEquals in unit tests -* Remove unused package in requirement.txt -* Enable F40X checking -* Verify for duplicate location+metadata instances -* Adds domain level support for tasks -* Add eclipse project files to .gitignore -* Added unit tests for api/middleware/cache_manage.py -* Fixed quotes in _assert_tables() method -* Use common db model class from Oslo -* Add upload policy for glance v2 api -* Adding an image status transition diagram for dev doc -* Add config option to limit image properties -* Explicit listing of Glance policies in json file -* Imported Translations from Transifex -* Sync openstack.common.local from oslo -* Clean up numeric expressions with oslo constants -* Don't use deprecated module commands -* Add tests for glance/notifier/notify_kombu -* Fixes image delete and upload contention -* Log unhandled exceptions -* Add tests for glance/image_cache/client.py -* Remove lxml requirement -* Sync common db and db.sqlalchemy code from Oslo -* Update glance/opensatck/common from oslo Part 3 -* Tests added for glance/cmd/cache_cleaner.py -* glance-manage should work like nova-manage -* Adds tasks to db api -* Sync lockutils from oslo -* sync log from oslo -* Add policy style '@'/'!' rules to prop protections -* Enable H501: do not use locals() for formatting -* Remove use of locals() when creating messages -* Remove "image_cache_invalid_entry_grace_period" option -* Add unit test cases for get func of db member repo -* assertEquals is deprecated, use assertEqual -* Document default log location in config files -* Remove unused method setup_logging -* Start using PyFlakes and Hacking -* Sync units module from olso -* Fixes error message encoding issue when using qpid -* Use mock in test_policy -* Use packaged version of ordereddict -* Imported Translations from Transifex -* Glance v2: Include image/member id in 404 Response -* Replace qpid_host with qpid_hostname -* Fix Pep8 1.4.6 warnings -* Fixes content-type checking for image uploading in API v1 and v2 -* Update my mailmap -* Addition of third example for Property Protections -* Sync iso8601 requirement and fixes test case failures -* Fixes wrong Qpid protocol configuration -* Use HTTP storage to test copy file functionality -* Remove redundant dependencies in test-requirements -* Documentation for using policies for protected properties -* checking length of argument list in "glance-cache-image" command -* optimize queries for image-list -* Using policies for protected properties -* Cleanup and make HACKING.rst DRYer -* Enable tasks data model and table for async worker -* Updated from global requirements -* Add call to get specific image member -* Put formatting operation outside localisation call -* Remove unused import -* The V2 Api should delete a non existent image -* Avoid printing URIs which can contain credentials -* Remove whitespace from cfg options -* Use Unix style LF instead of DOS style CRLF -* Adding 'download_image' policy enforcement to image cache middleware -* Glance manage should parse glance-api.conf -* Fixes rbd _delete_image snapshot with missing image -* Correct documentation related to protected properties -* Update functional tests for swift changes -* Removed unsued import, HTTPError in v1/images.py -* Allow tests to run with both provenances of mox -* Glance GET /v2/images fails with 500 due to erroneous policy check -* Do not allow the same member to be added twice - -2013.2.rc1 ----------- - -* V2 RpcApi should register when db pool is enabled -* Imported Translations from Transifex -* Open Icehouse development -* Convert Windows to Unix style line endings -* Add documentation for property protections -* Adding checking to prevent conflict image size -* Fixes V2 member-create allows adding an empty tenantId as member -* Fixing glance-api hangs in the qpid notifier -* Change response code for successful delete image member to 204 -* Cache cleaner wrongly deletes cache for non invalid images -* Require oslo.config 1.2.0 final -* Use built-in print() instead of print statement -* Swift store add should not use wildcard raise -* Corrected v2 image sharing documentation -* Add swift_store_ssl_compression param -* Log a message when image object not found in swift -* Ensure prop protections are read/enforced in order -* Funtional Tests should call glance.db.get_api -* Enclose command args in with_venv.sh -* Fix typo in config string -* Adding encryption support for image multiple locations -* Fixes typos of v1 meta data in glanceapi.rst -* Respond with 410 after upload if image was deleted -* Fix misused assertTrue in unit tests -* Convert location meta data from pickle to string -* Disallow access/modify members of deleted image -* Fix typo in protected property message -* Remove the unused mapper of image member create -* Changed header from LLC to Foundation based on trademark policies -* Implement protected properties for API v1 -* Add rbd store support for zero size image -* Remove start index 0 in range() -* Convert non-English exception message when a store loading error -* add missing index for 'owner' column on images table -* Publish recent api changes as v2.2 -* Update schema descriptions to indicate readonly -* Enable protected properties in gateway -* Property Protection Layer -* Rule parser for property protections -* Scrubber refactoring -* Fix typo in IMAGE_META_HEADERS -* Fix localisation string usage -* Notify error not called on upload errors in V2 -* Fixes files with wrong bitmode -* Remove unused local vars -* Clean up data when store receiving image occurs error -* Show traceback info if a functional test fails -* Add a storage quota -* Avoid redefinition of test -* Fix useless assertTrue -* emit warning while running flake8 without virtual env -* Fix up trivial License mismatches -* Introduced DB pooling for non blocking DB calls -* Use latest Oslo's version -* Improve the error msg of v2 image_data.py -* Fix Sphinx warning -* Remove unused import -* test failure induced by reading system config file -* Prefetcher should perform data integrity check -* Make size/checksum immutable for active images -* Remove unused var DEFAULT_MAX_CACHE_SIZE -* Implement image query by tag -* Remove unused import of oslo.config -* Code dedup in glance/tests/unit/v1/test_registry_api.py -* Add unit test for migration 012 -* Call _post_downgrade_### after downgrade migration is run -* Use _pre_upgrade_### instead of _prerun_### -* Perform database migration snake walk test correctly -* redundant conditions in paginate-query -* Refactor glance/tests/unit/v2/test_registry_client.py -* Refactor glance/tests/unit/v1/test_registry_client.py -* Improve test/utils.py -* Make sure owner column doesn't get dropped during downgrade -* image-delete fires multiple queries to delete its child entries -* glance-replicator: enable logging exceptions into log file -* Make disk and container formats configurable -* Add space in etc/glance-cache.conf -* Removes duplicate options registration in registry clients -* remove flake8 option in run_tests.sh -* Allow tests to run without installation -* Remove glance CLI man page -* Fix some logic in get_caching_iter -* Adding metadata checking to image location proxy layer -* Update .mailmap -* Migrate to PBR for setup and version code -* Interpolate strings after calling _() -* BaseException.message is deprecated since Python 2.6 -* Raise jsonschema requirement -* Text formatting changes -* Using unicode() convert non-English exception message -* ambiguous column 'checksum' error when querying image-list(v2) -* Handle None value properties in glance-replicator -* Fixes Opt types in glance/notifier/notify_kombu.py -* Add unit test for migration 010 -* Sync models with migrations -* Rename requirements files to standard names -* Include pipeline option for using identity headers -* Adding arguments pre-check for glance-replicator -* Add v1 API x-image-meta- header whitelist -* Stub out dependency on subprocess in unit tests -* Allow insecure=True to be set in swiftclient -* Verify if the RPC result is an instance of dict -* Adds help messages to mongodb_store_db and mongodb_store_uri -* Remove support for sqlalchemy-migrate < 0.7 -* Don't rely on prog.Name for paste app -* Simulate image_locations table in simple/api.py -* Turn off debug logging in sqlalchemy by default -* Glance api to pass identity headers to registry v1 -* add doc/source/api in gitignore -* Use cross-platform 'ps' for test_multiprocessing -* Fix stubs setup and exception message formatting -* Handle client disconnect during image upload -* improving error handling in chunked upload - -2013.2.b2 ---------- - -* Adding Cinder backend storage driver to Glance -* File system store can send metadata back with the location -* index checksum image property -* removed unused variable 'registry_port' -* DB Driver for the Registry Service -* Unit tests for scrubber -* Remove references to clean arg from cache-manage -* Deleting image that is uploading leaves data -* Adding a policy layer for locations APIs -* Add/remove/replace locations from an image -* Adding multiple locations support to image downloading -* Make db properties functions consistent with the DB API -* Adds missing error msg for HTTPNotFound exception -* Allow storage drivers to add metadata to locations -* Fixes image-download error of v2 -* On deleting an image, its image_tags are not deleted -* Sync gettextutils from oslo -* Adding store location proxy to domain -* Notify does not occur on all image upload fails -* Add location specific information to image locations db -* Add custom RPC(Des|S)erializer to common/rpc.py -* use tenant:* as swift r/w acl -* Add image id to the logging message for upload -* Fix cache delete-all-queued-images for xattr -* Fix stale process after unit tests complete -* Sync install_venv_common from oslo -* Fix list formatting in docs -* Fix doc formatting issue -* Ignore files created by Sphinx build -* Use oslo.sphinx and remove local copy of doc theme -* Refactor unsupported default store testing -* Add Sheepdog store -* Fix 'glance-cache-manage -h' default interpolation -* Fix 'glance-cache-manage list-cached' for xattr -* Dont raise NotFound in simple db image_tag_get_all -* Use python module loading to run glance-manage -* Removed unusued variables to clean the code -* Fixes exposing trace during calling image create API -* Pin kombu and anyjson versions -* Do not raise NEW exceptions -* Port slow, overly assertive v1 functional tests to integration tests -* Add a bit of description -* Updated documentation to include notifications introduced in Grizzly -* Make eventlet hub choice configurable -* Don't run store tests without a store! -* Import sql_connection option before using it -* Fix for unencrypted uris in scrubber queue files -* Fix incorrect assertion in test_create_pool -* Do not send traceback to clients by default -* Use Python 3.x compatible octal literals -* Remove explicit distribute depend -* Add missing Keystone settings to scrubber conf -* Sql query optimization for image detail -* Prevent '500' error when admin uses private marker -* Replace openstack-common with oslo in HACKING.rst -* Patch changes Fedora 16 to 18 on install page -* Pass configure_via_auth down to auth plugin -* Move sql_connection option into sqlalchemy package -* Remove unused dictionary from test_registry_api.py -* Remove routes collection mappings -* updated content_type in the exception where it is missing -* python3: Introduce py33 to tox.ini -* Don't make functional tests inherit from IsolatedUnitTest -* Add a policy layer for membership APIs -* Prevent E500 when listing with null values -* Encode headers and params -* Fix pydevd module import error -* Add documentation on reserving a Glance image -* Import strutils from oslo, and convert to it -* Sync oslo imports to the latest version - -2013.2.b1 ---------- - -* Fix undefined variable in cache -* Make passing user token to registry configurable -* Respond with 412 after upload if image was deleted -* Add unittests for image upload functionality in v1 -* Remove glance-control from the test suite -* Prevent '500' error when using forbidden marker -* Improve unit tests for glance.common package -* Improve unit tests for glance.api.v1 module -* rbd: remove extra str() conversions and test with unicode -* rbd: return image size when asked -* Add qpid-python to test-requires -* tests: remove unused methods from test_s3 and test_swift -* Implement Registry's Client V2 -* RBD store uses common utils for reading file chunks -* Redirects requests from /v# to /v#/ with correct Location header -* Add documentation for query parameters -* Small change to 'is_public' documentation -* Fix test_mismatched_X test data deletion check -* Add GLANCE_LOCALEDIR env variable -* Remove gettext.install() from glance/__init__.py -* Implement registry API v2 -* Add RBD support with the location option -* Use flake8/hacking instead of pep8 -* Use RBAC policy to determine if context is admin -* Create package for registry's client -* Compress response's content according to client's accepted encoding -* Call os.kill for each child instead of the process group -* Improve unit tests for glance.common.auth module -* Convert scripts to entry points -* Fix functional test 'test_copy_from_swift' -* Remove unused configure_db function -* Don't raise HTTPForbidden on a multitenant environment -* Expand HACKING with commit message guidelines -* Redirects requests from /v# to /v#/ -* Functional tests use a clean cached db that is only created once -* Fixes for mis-use of various exceptions -* scrubber: dont print URI of image to be deleted -* Eliminate the race when selecting a port for tests -* Raise 404 while deleting a deleted image -* Fix test redifinitions -* Sync with oslo-incubator copy of setup.py and version.py -* Gracefully handle qpid errors -* Fix Qpid test cases -* Imported Translations from Transifex -* Fix the deletion of a pending_delete image -* Imported Translations from Transifex -* Imported Translations from Transifex -* Fix functional test 'test_scrubber_with_metadata_enc' -* Make "private" functions that shouldn't be exported -* Call monkey_patch before other modules are loaded -* Adding help text to the options that did not have it -* Improve unit tests for glance.api.middleware.cache module -* Add placeholder migrations to allow backports -* Add GridFS store -* glance-manage should not require glance-registry.conf -* Verify SSL certificates at boot time -* Invalid reference to self in functional test test_scrubber.py -* Make is_public an argument rather than a filter -* remove deprecated assert_unicode sqlalchemy attribute -* Functional tests display the logs of the services they started -* Add 'set_image_location' policy option -* Add a policy handler to control copy-from functionality -* Fallback to inferring image_members unique constraint name -* Standardize on newer except syntax -* Directly verifying that time and socket are monkey patched -* Reformat openstack-common.conf -* Fix domain database initialization -* Add tests for image visibility filter in db -* Add image_size_cap documentation -* Return 413 when image_size_cap exceeded -* Small change to exception handling in swift store -* Remove internal store references from migration 017 -* Check if creds are present and not None - -2013.1.rc1 ----------- - -* Delete swift segments when image_size_cap exceeded -* bump version to 2013.2 -* Don't print sql password in debug messages -* fixes use the fact that empty sequences are false -* Handle Swift 404 in scrubber -* Remove internal store references from migration 015 -* Pin SQLAlchemy to 0.7.x -* Add unit tests for glance.api.cached_images module -* Document the os options config for swift store -* Segmented images not deleted cleanly from swift -* Do not return location in headers -* Fix uniqueness constraint on image_members table -* Declare index on ImageMember model -* Log when image_size_cap has been exceeded -* Publish API version 2.1 -* Fix scrubber and other utils to use log.setup() -* Switch to final 1.1.0 oslo.config release -* Mark password options secret -* Fix circular import in glance/db/sqlalchemy -* Fix up publicize_image unit test -* Fix rabbit_max_retry -* Fix visibility on db image_member_find -* Fix calls to image_member_find in tests -* Characterize image_member_find -* Retain migration 12 indexes for table image_properties with sqlite -* Insure that migration 6 retains deleted image property index -* Fix check_003 method -* Ensure disk_ and container_format during upload -* Honor metadata_encryption_key in glance domain -* Fix v2 data upload to swift -* Switch to oslo.config -* Update acls in the domain model -* Refactor leaky abstractions -* Remove unused variable 'image_member_factory' -* Generate notification for cached v2 download -* A test for concurrency when glance uses sleep -* Update documentation to reflect API v2 image sharing -* v1 api image-list does not return shared images -* Cannot change locations on immutable images -* Update db layer to expose multiple image locations -* Test date with UTC instead of local timezone -* Added better schemas for image members, revised tests -* Add pre and check phases to test migration 006 -* Fix response code for successful image upload -* Remove unused imports -* Add pre and check phases to test migration 005 -* Add pre and check phases to test migration 004 -* Add PostgreSQL support to test migrations -* Enable support for MySQL with test migrations -* Set status to 'active' after image is uploaded -* Removed controversial common image property 'os_libosinfo_shortid' -* Parse JSON Schema Draft 10 in v2 Image update -* Redact location from notifications -* Fix broken JSON schemas in v2 tests -* Add migration 021 set_engine_mysql_innodb -* Refactor data migration tests -* Fix migration 016 for sqlite -* Pin jsonschema version below 1.0.0 -* Add check for image_locations table -* Avoid using logging in signal handlers -* monkey_patch the time module for eventlet -* Remove compat cfg wrapper -* Remove unnecessary logging from migration 019 -* Fix migration 015 downgrade with sqlite -* Document db_auto_create in default config files -* Update openstack.common -* Extend the domain model to v2 image data - -2013.1.g3 ---------- - -* Add migration 20 - drop images.location -* Add migration 19 - move image location data -* Filter images by status and add visibility shared -* Update oslo-config version -* Sync latest install_venv_common.py -* Adding new common image properties -* Use oslo-config-2013.1b3 -* Add migration 18 - create the image_locations table -* Create connection for each qpid notification -* Add migration to quote encrypted image location urls -* Updates OpenStack LLC with OpenStack Foundation -* Allowing member to set status of image membership -* Add an update option to run_tests.sh -* Use install_venv_common.py from oslo -* Add status column to image_members -* Adding image members in glance v2 api -* Fix issues with migration 012 -* Add migration.py based on the one in nova -* Updated_at not being passed to db in image create -* Fix moker typo in test_notifier -* Clean dangling image fragments in filesystem store -* Sample config and doc for the show_image_direct_url option -* Avoid dangling partial image on size/checksum mismatch -* Fix version issue during nosetests run -* Adding database layer for image members domain model -* Image Member Domain Model -* Additional image member information -* Adding finer notifications -* Add LazyPluggable utility from nova -* Update .coveragerc -* Removed unnecessary code -* Use more-specific value for X-Object-Manifest header -* Allow description fields to be translated in schema -* Mark password config options with secret -* Update HACKING.rst per recent changes -* Encrypt scrubber marker files -* Quote action strings before passing to registry -* Fixes 'not in' operator usage -* Add to multi-tenant swift store documentation -* Replace nose plugin with testtools details -* Convert some prints to addDetails calls -* Rearrange db tests in prep for testr -* Stop using detailed-errors plugin for nose -* Add _FATAL_EXCEPTION_FORMAT_ERRORS global -* Fix kwargs in xattr BadDriverConfiguration exc -* Prints list-cached dates in isoformat -* Fail sensibly if swiftclient absent in test -* Initialize CONF properly in store func tests -* Ensure swift_store_admin_tenants ACLs are set -* Remove Swift location/password from messages -* Removed unnecessary code -* Removed unncessary code -* Pull in tarball version fix from oslo -* Updated image loop to not use an enumerator -* Log exception details -* Update version code from oslo -* Revert "Avoid testtools 0.9.25" -* Avoid testtools 0.9.25 -* Update glance config files with log defaults -* Sync latest cfg and log from oslo-incubator -* Make v2 image tags test not load system policy -* Replace custom tearDown with fixtures and cleanup -* Update version code from oslo -* Use testtools for unittest base class -* Stub out find_file... fix policy.json test issue -* Remove unused declaration in images.py -* Add import for filesystem_store_datadir config -* Update v1/images DELETE so it returns empty body -* Relax version constraint on Webob-1.0.8 -* Set content-length despite webob -* Update common openstack code from oslo-incubator -* Modify the v2 image tags to use domain model - -grizzly-2 ---------- - -* Fix broken link in docs to controllingservers -* Adding a means for a glance worker to connect back to a pydevd debugger -* Use imported exception for update_store_acls -* Fix import order nits -* Verify size in addition to checksum of uploaded image -* Use one wsgi app, one dbengine worker -* Set Content-MD5 after calling webob.Response._app_iter__set -* Modify the v2 image controller to use domain model -* Log error on failure to load paste deploy app -* Configure endpoint_type and service_type for swift -* Refactor multi-tenant swift store -* Add registry_client_timeout parameter -* Use io.BufferedIOBase.read() instead of io.BytesIO.getvalue() -* Port to argparse based cfg -* wsgi.Middleware forward-compatibility with webob 1.2b1 or later -* Allow running testsuite as root user -* Allow newer boto library versions -* Fixed image not getting deleted from cache -* Updates keystone middleware classname in docs -* v2 API image upload set image status to active -* Use auth_token middleware from python-keystoneclient -* Add domain proxies that stop unauthorized actions -* Add domain proxies that do policy.enforce checks -* Use 'notifications' as default notification queue name -* Unused variables removed -* Fixed deleted image being downloadable by admin -* Rewrite S3 functional tests -* Add store test coverage for the get_size method -* Implement get_size filesystem store method -* Add an image repo proxy that handles notifications -* Fixed Typo -* Return size as int from store get call -* Wrap log messages with _() -* Add pep8 ignore options to run_tests.sh -* Fix typo uudiutils -> uuidutils -* Make cooperative reader always support read() -* Add an image proxy to handle stored image data - -grizzly-1 ---------- - -* Allow for not running pep8 -* Refactor where store drivers are initialized -* Audit error logging -* Stop logging all registry client exceptions -* Remove unused imports -* Add note about urlencoding the sql_connection config opt -* Add an image repo to encapsulate db api access -* Add an image domain model and related helpers -* Fix simple db image_get to look like sqlalchemy -* Return 403 on images you can see but can't modify -* Fixes is_image_visible to not use deleted key -* Ensure strings passed to librbd are not unicode -* Use generate_uuid from openstack common -* Update uuidutils from openstack common -* Code cleanup: remove ImageAddResult class -* Lowering certain log lines from error to info -* Prevent infinite respawn of child processes -* Make run_tests.sh run pep8 checks on bin -* Make tox.ini run pep8 checks on bin -* Pep8 fixes to bin/glance* scripts -* Ensure authorization before deleting from store -* Port uuidutils to Glance -* Delete from store after registry delete -* Unit test remaining glance-replicator methods -* Use openstack common timeutils in simple db api -* Unit test replication_dump -* pin sqlalchemy to the 0.7 series -* DRY up image fetch code in v2 API -* Return 403 when admin deletes a deleted image -* Pull in a versioning fix from openstack-common -* Fixes deletion of invalid image member -* Return HTTP 404 for deleted images in v2 -* Update common to 18 October 2012 -* implements selecting version in db sync -* add command "status" to "glance-control" -* Disallow admin updating deleted images in v2 api -* Clean up is_public filtering in image_get_all -* SSL functional tests always omitted -* Fix scrubber not scrubbing with swift backend -* Add OpenStack trove classifier for PyPI -* Disallow updating deleted images -* Unit test replication_size -* Add noseopts and replace noseargs where needed to run_test.sh -* Setup the pep8 config to check bin/glance-control -* Change useexisting to extend_existing to fix deprecation warnings -* Fix fragile respawn storm test -* Fix glance filesystem store race condition -* Add support for multiple db test classes -* Don't parse commandline in filesystem tests -* Improve test coverage for replicator's REST client -* Correct conversion of properties in headers -* Add test for v2 image visibility -* change the default sql connection timeout to 60s -* Add test for v1 image visibility -* FakeAuth not always admin -* Add GLANCE_TEST_TMP_DIR environment var for tests -* Call setup_s3 before checking for disabled state -* Add insecure option to registry https client -* Clean up pep8 E128 violations -* Rename non-public method in sqlalchemy db driver -* Add image_member_update to simple db api -* Multiprocess respawn functional test fix -* Remove unnecessary set_acl calls -* Clean up pep8 E127 violations -* Remove notifications on error -* Change type of rabbit_durable_queues to boolean -* Pass empty args to test config parser -* Document api deployment configuration -* Clean up pep8 E125 violations -* Clean up pep8 E124 violations -* Ensure workers set to 0 for all functional tests -* image_member_* db functions return dicts -* Alter image_member_[update|delete] to use member id -* Add test for db api method image_member_create -* Add test for image_tag_set_all -* Add rabbit_durable_queues config option -* Remove extraneous db method image_property_update -* Update docs with modified workers default value -* Replace README with links to better docs -* Remove unused animation module -* Drop Glance Client -* Enable multi-processing by default -* Ensure glance-api application is "greened" -* Clean up pep8 E122, E123 violations -* Clean up pep8 E121 violations -* Fix scrubber start & not scrubbing when not daemon -* Clean up pep8 E502, E711 violations -* Expand cache middleware unit tests -* Change qpid_heartbeat default -* Don't WARN if trying to add a scheme which exists -* Add unit tests for size_checked_iter -* Add functional tests for the HTTP store -* Generalize remote image functional test -* Add filesystem store driver to new func testing -* Add region configuration for swift -* Update openstack-common log and setup code -* Update v2.0 API version to CURRENT -* Set new version to open Grizzly development -* Add s3_store_bucket_url_format config option -* Ensure status of 'queued' image updated on delete -* Fallback to a temp pid file in glance-control -* Separate glance cache client from main client -* Rewrite Swift store functional tests -* Raise bad request early if image metadata is invalid -* Return actual unicode instead of escape sequences in v2 -* Handle multi-process SIGHUP correctly -* Remove extraneous whitespace in config files -* Remove db auto-creation magic from glance-manage -* Makes deployed APIs configurable -* Asynchronously copy from external image source -* Sort UUID lists in test_image_get_all_owned -* Call do_start correctly in glance-control reload -* Sync some misc changes from openstack-common -* Sync latest cfg changes from openstack-common -* Exception Handling for image upload in v2 -* Fix cache not handling backend failures -* Instantiate wsgi app for each worker -* Require 'status' in simple db image_create -* Drop glance client + keystone config docs -* Use PATCH instead of PUT for v2 image modification -* Delete image from backend store on delete -* Document how to deploy cachemanage middleware -* Clean up comments in paste files -* WARN and use defaults when no policy file is found -* Encode headers in v1 API to utf-8 -* Fix LP bug #1044462 cfg items need secret=True -* Always call stop_servers() after having started them in tests -* Adds registry logging -* Filter out deleted image properties in v2 api -* Limit simple db image_create to known image attrs -* Raise Duplicate on image_create with duplicate id -* Expand image_create db test -* Add test for nonexistent image in db layer -* Catch pruner exception when no images are cached -* Remove bad error message in glance-cache-manage -* Add missing columns to migration 14 -* Adds notifications for images v2 -* Move authtoken config out of paste -* Add kernel/ramdisk_id, instance_uuid to v2 schema -* Tweak doc page titles -* Drop architecture doc page -* Add link to notifications docs on index -* Remove repeated image-sharing docs -* Tidy up API docs -* Log level for BaseContextMiddleware should be warn -* Raise Forbidden exception in image_get -* Activation notification for glance v1 api -* Add glance/versioninfo to MANIFEST.in -* HTTPBadRequest in v2 on malformed JSON request body -* PEP8 fix in conf.py -* Typo fix in glance: existant => existent -* Rename glance api docs to something more concise -* Drop deprecated client docs -* Clean up policies docs page -* Remove autodoc and useless index docs -* Add nosehtmloutput as a test dependency -* Remove partial image data when filesystem is full -* Add 'bytes' to image size rejection message -* Add policy check for downloading image -* Convert limiting_iter to LimitingReader -* Add back necessary import -* Adds glance registry req id to glance api logging -* Make max image size upload configurable -* Correctly re-raise exception on bad v1 checksum -* Return httplib.HTTPResponse from fake reg conn -* Add DB Management docs -* Fix auth cred opts for glance-cache-manage -* Remove unused imports -* Set proper auth middleware option for anon. access -* multi_tenant: Fix 'context' is not defined error -* Validate uuid-ness in v2 image entity -* v2 Images API returns 201 on image data upload -* Fixes issue with non string header values in glance client -* Fix build_sphinx setup.py command -* Updates Image attribute updated_at -* Add policy enforcment for v2 api -* Raise 400 error on POST/PUTs missing request bodies - -folsom-3 --------- - -* Mark bin/glance as deprecated -* Return 201 on v2 image create -* Ignore duplicate tags in v2 API -* Expose 'protected' image attribute in v2 API -* Move to tag-based versioning -* Update restrictions on allowed v2 image properties -* Reveal v2 API as v2.0 in versions response -* Add min_ram and min_disk to v2 images schema -* Filter out None values from v2 API image entity -* Refactor v2 images resource unit tests -* Use container_format and disk_format as-is in v2 -* Make swift_store_admin_tenants a ListOpt -* Update rbd store to allow copy-on-write clones -* Call stop_servers() in direct_url func tests -* Drop unfinshed parts of v2 API -* Fix a couple i18n issues in glance/common/auth.py -* Sync with latest version of openstack.common.notifier -* Sync with latest version of openstack.common.log -* Sync with latest version of openstack.common.timeutils -* Sync with latest version of openstack.common.importutils -* Sync with latest version of openstack.common.cfg -* Allows exposing image location based on config -* Do not cache images that fail checksum verfication -* Omit deleted properties on image-list by property -* Allow server-side validation of client ssl certs -* Handle images which exist but can't be seen -* Adds proper response checking to HTTP Store -* Use function registration for policy checks -* fix the qpid_heartbeat option so that it's effective -* Add links to image access schema -* ^c shouldn't leave incomplete images in cache -* uuid is a silly name for a var -* Support master and slave having different tokens -* Add a missing header strip opportunity -* URLs to glance need to be absolute -* Use with for file IO -* Add swift_store_admin_tenants option -* Update v1/v2 images APIs to set store ACLs -* Use event.listen() instead of deprecated listeners kwarg -* Store context in local thread store for logging -* Process umask shouldn't allow world-readable files -* Make TCP_KEEPIDLE configurable -* Reject rather than ignore forbidden updates -* Raise HTTPBadRequest when schema validation fails -* Expose 'status' on v2 image entities -* Simplify image and access_record responses -* Move optional dependencies from pip-requires to test-requires -* Fix dead link to image access collection schema -* Add in missing image collection schema link -* Drop static API v2 responses -* Include dates in detailed image output -* Update image caching middleware for v2 URIs -* Ensure Content-Type is JSON-like where necessary -* Have non-empty image properties in image.delete payload -* Add Content-MD5 header to V2 API image download -* Adds set_acls function for swift store -* Store swift images in separate containers -* Include chunk_name in swift debug message -* Set deleted_at field when image members and properties are deleted -* Use size_checked_iter in v2 API -* Honor '--insecure' commandline flag also for keystone authentication -* Make functional tests listen on 127.0.0.1 -* Adds multi tenant support for swift backend -* Provide stores access to the request context -* Increase wait time for test_unsupported_default_store -* Match path_info in image cache middleware -* Dont show stack trace on command line for service error -* Replace example.com with localhost for some tests -* Fix registry error message and exception contents -* Move checked_iter from v1 API glance.api.common -* Support zero-size image creation via the v1 API -* Prevent client from overriding important headers -* Updates run_tests.sh to exclude openstack-common -* Use openstack.common.log to log request id -* Update 'logging' imports to openstack-common -* Make get_endpoint a generic reusable function -* Adds service_catalog to the context -* Add openstack-common's local and notifier modules -* Making docs pretty! -* Removing 'Indices and tables' heading from docs -* Remove microseconds before time format conversion -* Add bin/glance-replicator to scripts in setup.py -* Initial implementation of glance replication -* Generate request id and return in header to client -* Reorganize context module -* Add openstack.common.log -* Ignore openstack-common in pep8 check -* Keystone dep is not actually needed -* Report size of image file in v2 API -* Expose owner on v2 image entities -* Add function tests for image members -* Allow admin's to modify image members -* Allow admins to share images regardless of owner -* Improve eventlet concurrency when uploading/downloading -* Simplify v2 API functional tests - -folsom-2 --------- - -* Fix IndexError when adding/updating image members -* Report image checksum in v2 API -* Store properties dict as list in simple db driver -* Use PyPI for swiftclient -* Refactor pagination db functional tests -* Combine same-time tests with main db test case -* Add retry to server launch in respawn test -* Reorder imports by full import path -* Adds /v2/schemas/images -* Implement image filtering in v2 -* Include all tests in generated tarballs -* Allow CONF.notifier_strategy to be a full path -* Add image access records schema for image resources -* Remove image members joinedload -* Clean up image member db api methods -* Retry test server launch on failure to listen -* Make image.upload notification send up2date metadata -* Added schema links logic to image resources -* Simplify sqlalchemy imports in driver -* Reduce 'global' usage in sqlalchemy db driver -* Standardize logger instantiation -* Add link descriptor objects to schemas -* Fix exception if glance fails to load schema -* Move the particulars of v2 schemas under v2 -* Remove listing of image tags -* Set up Simple DB driver tests -* Trace glance service on launch failure -* Revert "Funnel debug logging through nose properly." -* Capture logs of failing services in assertion msg -* Remove some more glance-cache PasteDeploy remnants -* Fix typo of conf variable in config.py -* Remove unused imports in db migrations -* Increase timeout to avoid spurious test failures -* adds missing import and removes empty docstring -* Convert db testing to use inheritance -* Clean up .pyc files before running tests -* make roles case-insensitive -* Funnel debug logging through nose properly -* Fix typo of swift_client/swiftclient in store_utils -* Stop revealing sensitive store info -* Avoid thread creation prior to service launch -* Don't use PasteDeploy for scrubber and cache daemons -* Remove some unused glance-cache-queue-image code -* Implement pagination and sorting in v2 -* Turn off SQL query logging at log level INFO -* Default db_auto_create to False -* Use zipballs instead of git urls -* Add metadata_encryption_key to glance-cache.conf -* Fix help messages for --debug -* Use python-swiftclient for swift store -* Fix to not use deprecated response.environ any more -* Import db driver through configuration -* Move RequestContext.is_image_* methods to db layer -* Begin replacement of sqlalchemy driver imports -* webob exception incorrectly used in v1 images.py -* Add tests and simplify GlanceExceptions -* Update default values for known_stores config -* Remove the conf passing PasteDeploy factories -* Port remaining code to global conf object -* Made changes to adhere to HACKING.rst specifications -* Use openstack-common's policy module -* Re-add migrate.cfg to tarball -* Implements cleaner fake_request -* Create 'simple' db driver -* Glance should use openstack.common.timeutils -* Clean up a few ugly bits from the testing patch -* Fix typo in doc -* Add cfg's new global CONF object -* fix side effects from seekability test on input file -* Just use pure nosetests -* Fix coverage jobs. Also, clean up the tox.ini -* Move glance.registry.db to glance.db -* Glance should use openstack.common.importutils -* Add read-only enforcement to v2 API -* Add a base class for tests -* Expose tags on image entities in v2 API -* Add additional info. to image.delete notification -* Expose timestamps on image entities in v2 API -* Sync with latest version of openstack.common.cfg -* Enable anonymous access through context middleware -* Add allow_additional_image_properties -* Fix integration of image properties in v2 API -* Lock pep8 at v1.1 -* Lock pep8 to version 0.6.1 in tox.ini -* Fail gracefully if paste config file is missing -* Add missing files to tarball -* Remove unused imports in setup.py -* Adds sql_ config settings to glance-api.conf -* Correct format of schema-image.json -* Fix paste to correctly deploy v2 API -* Add connection timeout to glance client -* Leave behind sqlite DB for red functional tests -* Support DB auto-create suppression -* Fix glance-api process leak in respawn storm test -* Stubout httplib to avoid actual http calls -* Backslash continuation removal (Glance folsom-1) -* Implement image visibility in v2 API -* Add min_ram and min_disk to bin/glance help -* Implements blueprint import-dynamic-stores -* Add credential quoting to Swift's StoreLocation -* Combine v2 functional image tests -* Simplify JSON Schema validation in v2 API -* Expose deployer-specific properties in v2 API -* Test that v2 deserializers use custom schemas -* Load schema properties when v2 API starts -* Support custom properties in schemas for v2 API -* Fix tiny format string nit in log message -* Fixes bug 997565 -* Allow chunked image upload in v2 API -* wsgi: do not respawn on missing eventlet hub -* Implement v2 API access resource -* Disallow image uploads in v2 API when data exists -* Implement v2 API image tags -* Use ConfigOpts.find_file() for policy and paste -* Implement image data upload/download for v2 API -* Use sdist cmdclass from openstack-common -* glance-api: separate exit status from message -* Update noauth caching pipeline to use unauth-ctx -* Return 204 from DELETE /v2/images/ -* Add localization catalog and initial po files to Glance. Fix bug 706449 -* Add /v2 to sample glance-api-paste.ini -* Basic functionality of v2 /images resource -* Split noauth context middleware into new class -* Add -c|--coverage option to run_tests.sh -* Convert glance to glance/openstack/common/setup.py -* Update glance to pass properly tenant_name -* Cleanup authtoken examples -* Support for directory source of config files -* Support conf from URL's with versions -* Auto generate AUTHORS file for glance -* Integrate openstack-common using update.py -* Fixes LP #992096 - Ensure version in URL -* Begin functional testing of v2 API -* Fixes LP #978119 - cachemanagement w/o keystone -* Omit Content-Length on chunked transfer -* Fix content type for qpid notifier -* Remove __init__.py from locale dir -* Fix i18n in glance.notifier.notify_kombu -* Override OS_AUTH_URL when running functional tests -* remove superfluous 'pass' -* fix bug lp:980892,update glance doc -* Add a space to fix minor typo in glance help -* Suppress pagination on non-tty glance index -* Kill glance-api child workers on SIGINT -* Ensure swift auth URL includes trailing slash -* add postgresql support to test_migrations -* 012_id_to_uuid: Also convert ramdisk + kernel ids -* API v2 controller/serialization separation -* search for logger in PATH -* Set install_requires in setup.py -* Minor grammar corrections -* Bootstrapping v2 Image API implementation -* Fix db migration 12 -* Remove unused imports -* Reorganize pipelines for multiple api versions -* Skip test depending on sqlite3 if unavailable -* Defaulted amazon disk & container formats -* Compile BigInteger to INTEGER for sqlite -* Updated RST docs on containers, fewer references to OVF format -* rename the right index -* Reject excessively long image names -* Test coverage for update of image ownership -* Add MySQLPingListener() back -* Add support for auth version 2 -* Run version_control after auto-creating the DB -* Allow specifying the current version in 'glance-manage version_control' -* Publish v2 in versions responses -* Allow yes-like values to be interpreted as bool -* Support owner paramater to glance add -* Adding versioned namespaces in test dir -* Typo -* Ensure functional db connection in configure_db() -* Set content_type for messages in Qpid notifier -* Avoid leaking secrets into config logging -* Fixes lp959670 -* Send output of stty test cmd to stderr -* Use unique per-test S3 bucket name -* Specify location when creating s3 bucket -* Open Folsom -* Update 'bin/glance add' docstring *_format options -* Ensure all unauthorized reponses return 403 -* Avoid leaking s3 credentials into logs -* Avoid glance-logcapture displaying empty logs -* Add 'publicize_image' policy -* Fixed db conn recovery issue. Fixes bug 954971 -* tox tests with run_tests.sh instead of nosetests -* Don't use auth url to determine service protocol -* Use tenant/user ids rather than names -* Update context middleware with supported headers -* Fixes LP #957401 - Remove stray output on stderr -* check connection in Listener. refer to Bug #943031 -* Avoid tests leaking empty tmp dirs -* Remove keystone.middleware.glance_auth_token -* Updating version of Keystone -* Add policy checks for cache manage middleware -* nose plugin to capture glance service logs -* Add new UnexpectedStatus exception -* Do not error when service does not have 'type' -* Disambiguates HTTP 401 and HTTP 403 in Glance. Fixes bug 956513 -* Add admin_role option -* Remove references to admin_token -* Remove glance-cache-queue-image -* Remove dependency on apiv1app from cachemanage -* Return 403 when policy engine denies action -* Add error checking to get_terminal_size -* Well-formed exception types for 413 & 503 -* Ensure copy and original image IDs differ -* Include babel.cfg and glance.pot in tarballs -* Updating authentication docs -* General cleanup -* General docs cleanup -* Remove todolist from docs -* Add note about cache config options -* Change CLIAuth arg names -* Retry sendfile on EAGAIN or EBUSY -* Add module name to ClientException -* Update cli docs -* Remove 'community' doc page -* Removing registry spec from docs -* Fixes LP#934492 - Allow Null Name -* Refresh SSL cfg after parsing service catalog entry -* Fix typo in tox.ini -* Glance cache updates to support Keystone Essex -* updates man page for glance-scrubber. this time with extra pep8 scrubbing powers. Fixes bug 908803 -* Update tox.ini for jenkins -* Replaced use of webob.Request.str_param -* Update paste file to use service tenant -* Update bin/glance to allow for specifying image id -* Fix deprecated warnings -* Remove trailing whitespaces in regular file -* add git commit date / sha1 to sphinx html docs -* Glance skip prompting if stdin isn't a tty -* Allow region selection when using V2 keystone -* Disallow file:// sources on location or copy-from -* Progress bar causes intermittent test failures -* Added first step of babel-based translations -* Complete fix for modification of unowned image -* Fix update of queued image with location set -* Support copy-from for queued images -* Add checksum to an external image during add -* Align to jenkins tox patterns -* Fix MANIFEST.in to include missing files -* Fix exception name -* Correct kernel/ramdisk example in docs -* Create sorting/pagination helper function -* Support new image copied from external storage -* blueprint progressbar-upload-image -* Avoid TestClient error on missing '__mro__' attr -* disk/container_format required on image activate -* Require container & disk formats on image create -* Support non-UTC timestamps in changes-since filter -* Return 503 if insufficient permission on filestore -* Adds README.rst to the tarball -* Ensure StorageFull only raised on space starvation -* Require auth URL if keystone strategy is enabled -* 003_add_disk_format.py: Avoid deadlock in upgrade -* Function uses 'msg' not 'message' -* Fix paging ties -* Ensure sane chunk size when pysendfile unavailable -* New -k/--insecure command line option -* Add a generic tox build environment -* Fix pep8 error -* Update Authors file -* Implement blueprint add-qpid-support -* Include glance/tests/etc -* Don't fail response if caching failed -* Force auth_strategy=keystone if --auth_url or OS_AUTH_URL is set -* Make Glance work with SQLAlchemy 0.7 -* Use sendfile() for zero-copy of uploaded images -* Respawn glance services on unexpected death -* Blueprint cli-auth: common cli args -* Prep tox config for jenkins builds -* Get rid of DeprecationWarning during db migration -* Add --capture-output option to glance-control -* Add filter validation to glance API -* Fixes LP 922723 -* Typofix is_publi -> is_public -* Add --await-child option to glance-control -* Fix Bug #919255 -* Cap boto version at 2.1.1 -* Simplify pep8 output to one line per violation -* Handle access restriction to public unowned image -* Check service catalogue type rather than name -* Restore inadvertantly dropped lines -* Include the LICENSE file in the tarball -* Change xattr usage to be more broadly compatible -* Fix mixed usage of 's' and 'self' -* Don't force client to supply SSL cert/key -* Few small cleanups to align with Nova - -essex-3 -------- - -* Adds documentation for policy files -* Client.add_image() accepts image data as iterable -* More flexible specification of auth credentials -* glance-api fails fast if default store unsupported -* Bug #909574: Glance does not sanity-check given image size on upload -* glance-control need not locate a server's config file (lp#919520) -* Bug#911599 - Location field wiped on update -* Return 400 if registry returns 400 -* Set url's on AuthBadRequest exceptions -* Add policy checking for basic image operations -* Swallow exception on unsupported image deletion -* Ensure we only send a single content-type header -* Multi-process Glance API server support -* Set size metadata correctly for remote images -* Make paste.ini file location configurable -* Avoid the need for users to manually edit PasteDeploy config in order to switch pipelines -* Split out paste deployment config from the core glance *.conf files into corresponding *-paste.ini files -* Fixes LP Bug#913608 - tests should be isolated -* Set correct Content-Length on cached remote images -* Implement retries in notify_kombu -* Return correct href if bind_host is 0.0.0.0 -* Remove assertDictEqual for python 2.6 compatibility -* Add optional revision field to version number -* LP Bug#912800 - Delete image remain in cache -* Add notifications for sending an image -* Bug #909533: Swift uploads through Glance using ridiculously small chunks -* Add Fedora clauses to the installing document -* Remove doc/Makefile -* Fixes incorrect URI scheme for s3 backend -* Add comments for swift options in glance-api.conf -* Split notification strategies out into modules -* fix bug 911681 -* Fix help output for inverse of BoolOpt -* PEP8 glance cleanup -* Add more man pages -* Set execute permissions on glance-cache-queue-image -* Add a LICENSE file -* Add ability to specify syslog facility -* Install an actual good version of pip -* Bug #909538: Swift upload via Glance logs the password it's using -* Add tox.ini file -* Synchronize notification queue setup between nova and glance -* Fixes keystone auth test failures in python 2.6 -* Removed bin/glance's TTY detection -* Fixes request with a deleted image as marker -* Adds support for protecting images from accidental deletion -* Fix for bug 901609, when using v2 auth should use /v2.0/tokens path -* Updated glance.registry.db for bug 904863 -* Removing caching cruft from bin/glance -* Fixes LP Bug#901534 - Lost properties in upload -* Update glance caching middleware so doesn't try to process calls to subresources. Fixes LP bug #889209 -* Ensure functional tests clean up their images -* Remove extra swift delete_object call -* Add missing files to tarball -* Allow glance keystone unit tests to run with essex keystone -* Convert glance to use the new cfg module -* Add new cfg module -* Lock keystone to specific commit in pip-requires -* Add the missing column header to list-cached -* Rename 'options' variables to 'conf' -* Add generic PasteDeploy app and filter factories -* Secondary iteration of fix for bug 891738 -* Rename .glance-venv to .venv -* Fix for bug 900258 -- add documentation for '--url' glance cli option -* Add --url option to glance cli -* Fixes LP Bug#850377 -* Fixes LP Bug#861650 - Glance client deps -* Added some examples for "glance add" -* Bug#894027: use correct module when building docs -* Adds option to set custom data buffer dir -* Fix bug 891738 -* Added missing depend on nosexcover -* Removed some cruft -* Fixes LP Bug#837817 - bin/glance cache disabled -* Separating add vs general store configuration -* Fixes LP Bug#885341 - Test failure in TestImageCacheManageXattr -* Making prefetcher call create_stores -* Fix handle get_from_backend returning a tuple -* Casting foreign_keys to a list in order to index into it -* Using Keystone's new port number 35357 -* Adding admin_token to image-cache config -* Removing assertGreaterEqual -* Correcting image cleanup in cache drivers -* Adding tests to check 'glance show ' format -* Update 'glance show' to print a valid URI. Fixes bug #888370 -* Gracefully handle image_cache_dir being undefined -* Remove unused versions pipeline from PasteDeploy config -* Allow glance-cache-* find their config files -* Add some test cases for glance.common.config -* Fix name error in cache middleware -* Check to make sure the incomplete file exists before moving it during rollback. Fixes bug #888241 -* Fix global name 'sleep' is not defined in wsgi.py. Fixes bug #888215 -* Fixes LP Bug#878411 - No docs for image cache -* Fix typo in the cached images controller - -essex-1 -------- - -* load gettext in __init__ to fix '_ is not defined' -* Adds option to encrypt 'location' metadata -* Fix LP Bug#885696 two issues with checked_iter -* Fix Keystone API skew issue with Glance client -* Fixed test failure in Python 2.6 -* Glance redirect support for clients -* Fixes LP Bug#882185 - Document Swift HTTPS default -* Fixes LP Bug#884297 - Install docs should have git -* Add "import errno" to a couple of files -* Consolidate glance.utils into glance.common.utils -* Correcting exception handling in glance-manage -* More cache refactoring - Management Middleware -* Fixes LP Bug#882585 - Backend storage disconnect -* Convert image id value to a uuid -* Remove 'location' from POST/PUT image responses -* Removing glance-upload -* Adds Driver Layer to Image Cache -* Removed 'mox==0.5.0' and replaced with just 'mox' in tools/pip-requires -* Removing duplicate mox install in pip-requires -* Add .gitreview config file for gerrit -* Making TCP_KEEPIDLE socket option optional -* Overhauls the image cache to be truly optional -* Fixing functional tests that require keystone -* Fixes LP Bug#844618 - SQLAlchemy errors not logged -* Additions to .gitignore -* Better document using Glance with Keystone -* Fixes LP Bug#872276 - small typo in error message -* Adds SSL configuration params to the client -* Increases test coverage for the common utils -* Refactoring/cleanup around our exception handling -* Port Authors test to git -* Add RBD store backend -* Fixes LP Bug#860862 - Security creds still shown -* Extract image members into new Glance API controller -* Refactoring registry api controllers -* Returning functionality of s3 backend to stream remote images -* Make remote swift image streaming functional -* Improving swfit store uri construction -* Fixes LP Bug #850685 -* Do not allow min_ram or min_disk properties to be NULL and if they are None, make sure to default to 0. Fixes bug 857711 -* Implementing changes-since param in api & registry -* Documenting nova_to_os_env.sh tool -* Added min_disk and min_ram properties to images Fixes LP Bug#849368 -* Fixing bug 794582 - Now able to stream http(s) images -* Fixes LP Bug#755916 - Location field shows creds -* Fixes LP Bug #804429 -* Fixes Bug #851216 -* Fixes LP Bug #833285 -* Fixes bug 851016 -* Fix keystone paste config for functional tests -* Updating image status docs -* * Scrubber now uses registry client to communicate with registry * glance-api writes out to a scrubber "queue" dir on delete * Scrubber determines images to deleted from "queue" dir not db -* Fixes LP Bug#845788 -* Open Essex -* Remove PWD from possible config_file_dirs -* Update paste config files with keystone examples. see ticket: lp839559 -* Adding Keystone support for Glance client -* Fix cached-images API endpoint -* Bug fix lp:726864 -* Fixes Bug: lp825024 -* Add functional tests -* Switch file based logging to WatchedFileHandler for logrotate -* Fixes LP Bug #827660 - Swift driver fail 5G upload -* Bug lp:829064 -* Bug lp:829654 -* Update rfc.sh to use 'true' -* Addresses glance/+spec/i18n -* Addresses glance/+spec/i18n -* Add rfc.sh for git review -* Add support for shared images -* Add notifications for uploads, updates and deletes -* Bug Fix lp:825493 -* Bug fix lp:824706 -* Adds syslog support -* Fixes image cache enabled config -* Improves logging by including traceback -* Addresses glance/+spec/i18n -* casting image_id to int in db api to prevent false matching in database lookups -* Addresses Bug lp:781410 -* Removes faked out datastore entirely, allowing the DB API to be unit tested -* Consolidates the functional API test cases into /glance/tests/functional/test_api.py, adds a new Swift functional test case, verified that it works on Cloud Files with a test account -* breaking up MAX_ITEM_LIMIT and making the new values configurable -* Add @skip_if_disabled decorator to test.utils and integrate it into the base functional API test case. The S3 functional test case now uses test_api.TestApi as its base class and the setUp() method sets the disabled and disabled_message attributes that the @skip_if_disabled decorator uses -* Adds swift_enable_snet config -* Fixes bug lp:821296 -* Detect python version in install_venv -* Implemented @utils.skip_test, @utils.skip_unless and @utils.skip_if functionality in glance/test/utils.py. Added glance/tests/unit/test_skip_examples.py which contains example skip case usages -* Changed setup.py to pull version info from git -* Removes the call to webob.Request.make_body_seekable() in the general images controller to prevent the image from being copied into memory. In the S3 controller, which needs a seekable file-like object when calling boto.s3.Key.set_contents_from_file(), we work around this by writing chunks of the request body to a tempfile on the API node, then stream this tempfile to S3 -* Make sure we're passing the temporary file in a read-mode file descriptor to S3 -* Removes the call to webob.Request.make_body_seekable() in the general images controller to prevent the image from being copied into memory. In the S3 controller, which needs a seekable file-like object when calling boto.s3.Key.set_contents_from_file(), we work around this by writing chunks of the request body to a tempfile on the API node, then stream this tempfile to S3 -* - removed curl api functional tests - moved httplib2 api functional tests to tests/functional/test_api.py -* merging trunk -* Make tests a package under glance -* removing curl tests and moving httplib2 tests -* Move tests under the glance namespace -* Add filter support to bin/glance index and details calls -* merging trunk -* Update registry db api to properly handle pagination through sorted results -* Our code doesn't work with python-xattr 0.5.0, and that's the version installed in RH/Centos :( Andrey has updated the RPM config to specify 0.6.0, and this does the same to pip-requires -* Replaced occurances of |str(e)| with |"%s" % e| -* First round of refactoring on stores -* Remove expected_size stuff -* Make calling delete on a store that doesn't support it raise an exception, clean up stubout of HTTP store and testing of http store -* adding sort_key/sort_dir to details -* merging lp:~rackspace-titan/glance/registry-marker-lp819551 -* adding sort_key/sort_dir params -* adding --fixes -* adding complex test cases to recreate bug; updating db api to respect marker -* Add configuration check for Filesystem store on configure(), not every call to add() -* Refactor S3 store to make configuration one-time at init versus every method call invocation -* Refactor Swift store to make configuration one-time at init versus every method call invocation -* Forgot to add a new file.. -* Refactors stores to be stateful: -* Make sure xattr>=0.6.0 in pip-requires -* updating documentation -* making limit option an integer -* updating broken tests -* adding limit/marker to bin/glance details call -* adding limit/marker params to bin/glance index -* merging trunk -* Use of "%default" in help string does not work, have to use "%(default)s". Per the 4th example http://docs.python.org/dev/library/argparse.html#prog -* Added nose-exclude to pip-requires -* Installed nose-exclude, ./run_tests.sh --unittests-only add '--exclude-dir=tests/functional' to NOSEARGS -* This one has been bugging me for a while, finally found out how to use the local default variable in the help string -* adding --fixes to commit -* Replaced occurances of |str(e)| with |"%s" % e| -* Completes the S3 storage backend. The original code did not actually fit the API from boto it turned out, and the stubs that were in the unit test were hiding this fact -* Fix for boto1.9b issue 540 (http://code.google.com/p/boto/issues/detail?id=540) -* Remove unnecessary hashlib entry in pip-requires -* Add myself to Authors (again) -* hashlib exists all of the way back to python 2.5, there's no need to install an additional copy -* Adds image_cache_enabled config needed to enable/disable the image-cache in the glance-api -* Add more unit tests for URI parsing and get_backend_class() (which is going away in refactor-stores branch, but oh well..) -* Added unit tests for swift_auth_url @property. It was broken. startwith('swift+http') matches swift+https first -* Don't tee into the cache if that image is already being written -* Re-add else: raise -* Final fixes merging Rick's swift_auth_url @property with previous URI parsing fixes that were in the S3 bug branch.. -* merge trunk -* This updates the pep8 version in pip-requires and updates run_tests.sh to provide a '-p' option that allows for just pep8 to be run -* Adding back image_cache_enabled config option for glance-api -* Don't tee same image into cache multiple times -* Fixes two things: -* adding run_tests.sh -p -* PEP8 whitespace fix -* Swift client library needs scheme -* Add tests for bad schemes passed to get_backend_class() -* Add tests for bad URI parsing and get_backend_class() -* Include missing bin/glance-scrubber in tarball -* Include bin/glance-scrubber in tarball binaries -* One more auth_tok-related change, to make it easier for nova to use the client without violating any abstraction boundaries -* Add fix for Bug #816386. Wait up to 5 min for the image to be deleted, but at least 15 seconds -* remove superfluous if statement -* Loop up to 5 min checking for when the scrubber deletes -* Typo in error condition for create_bucket_on_put, make body seekable in req object, and remove +glance from docs and configs -* Add functional test case for checking delete and get of non-existing image -* New local filesystem image cache with REST managment API -* PEP8 Fixes -* Using DELETE instead of POST reap_invalid, reap_stalled -* Forgot to put back fix for the get_backend_class problem.. -* Adding logging if unable to delete image cache file -* Add test case for S3 s3_store_host variations and fixes for URL bug -* Ensure image is active before trying to fetch it -* Boy, I'm an idiot...put this in the wrong branch directory.. -* Handling ZeroDivision Error -* Using alternate logging syntax -* Missing import of common.config in S3 driver -* Tighten up file-mode handling for cache entry -* Adding request context handling -* Merging trunk -* Fixed review stuff from Brian -* Allow delaying the actual deletion of an image -* have the scrubber init a real context instead of a dict -* merge trunk -* Adds authentication middleware support in glance (integration to keystone will be performed as a piece of middleware extending this and committed to the keystone repository). Also implements private images. No limited-visibility shared image support is provided yet -* Take out extraneous comments; tune up doc string; rename image_visible() to is_image_visible(); log authorization failures -* use runs_sql instead of hackery -* Updating setup.py per bin/image_cache removal -* Removing bin/image_cache directory -* Removing cache enabled flag from most confs -* Removing imagecache from default WSGI pipeline -* Allow plugging in alternate context classes so the owner property and the image_visible() method can be overridden -* Make a context property 'owner' that returns the tenant; this makes it possible to change the concept of ownership by using a different context object -* Unit tests for the context's image_visible() routine -* We don't really need elevate().. -* Merging in adding_image_caching -* Importing module rather than function -* PEP 8 fixes -* Adding reap stalled images -* Returning number of files deleted by cache-clear -* Returning num_reaped from reap_invalid -* Moving bin to image_cache/ -* Fixing comment -* Adding reaper script -* Adding percent done to incomplete and invalid image listing -* Renaming tmp_path to incomplete_path -* Renaming tmp_path to incomplete_path -* Renaming purge_all clear, less elegant variation -* Refactor to use lookup_command, so command map is used in one place -* Refactoring to use same command map between functions -* Renaming to cache-prefetching -* Renaming to cache-prefetch -* Renaming to cache-purge-all -* Renaming to cache-purge -* Renaming to cache-invalid -* Beginning to normalize names -* Refactoring out common code -* Refactoring prefetch -* Refactoring purge -* Refactoring purge_all -* Refactoring listing of prefetching images -* Using querystring params for invalid images -* Link incoming context with image owner for authorization decisions -* How in the world did I manage to forget this? *sigh* -* Make tests work again -* merge trunk -* pull-up from trunk -* This patch: -* PEP8 nit -* Added fix for Bug #813291: POST to /images setting x-image-meta-id to an already existing image id causes a 500 error -* One more try.. -* Yet another attempt to fix URIs -* Add in security context information -* Moving cached image list to middleware -* Initial work on moving cached_images to WSGI middleware -* API is now returning a 409 error on duplicate POST. I also modified the testcase to expect a 409 response -* Add owner to database schema -* Fix URI parsing on MacOSX - Python 2.6.1 urlparse bugs -* Namespacing xattr keys -* PEP8 fixes -* Added 3 tests in tests/functional/test_httplib2_api.py to validate is_public filtering works -* left in 2 fixes.. removing redundant fix -* If meta-data contains an id field, pass it to _image_update() -* Adding functional test to show bug #813291 -* fixed an inline comment -* removed pprint import, and added check for other 3 images to make sure is_public=True -* Added 3 tests to validate is_public filtering works -* Completed rewrite of tests/functional/test_curl_api.py using httplib2 -* Changes the default filtering of images to only show is_public to actually use a default filter instead of hard coding. This allows us to override the default behavior by passing in a new filter -* removing pprint import -* completed rewrite of test_ordered_images().. this completes rewrite of test_curl_api using httplib2 -* test_ordered_images() missing closing self.stop_servers() -* finished rewrite of test_filtered_images() -* add tests and make None filters work -* Change default is_public = True to just set a default filter instead of hard coding so it can be overridden -* make the tests work with new trunk -* merge trunk -* Refactoring PrettyTable so it doesn't print the lines itself -* Adding pruner and prefetcher to setup.py -* Removing extraneous text -* PEP 8 fixes -* Adding prefetching list to bin/glance -* More cleanups -* Adding prefetching of images -* Overhaul the way that the store URI works. We can now support specifying the authurls for Swift and S3 with either an http://, an https:// or no prefix at all -* Typo fix -* Removing test exception -* PEP 8 fixes -* Adding Error to invalid cache images -* Show invalid images from bin/glance -* Improving comments -* Cleaning up cache write -* Moving xattrs out to utils -* Clip and justify columns for display -* Including last accessed time in cached list -* Adding more comments -* Adding hit counter -* Pruning invalid cache entries after grace period -* Clear invalid images when purging all cached images -* Rollback by moving images to invalid_path -* Improving comments -* PEP8 fixes -* Adding cached image purge to bin/glance -* Adding purge all to bin/glance -* Adding catch_error decorator to bin/glance -* Adding 'cached' command to bin/glance -* Write incomplete files to tmp path -* Adding purge_all, skip if set if xattrs arent supported -* Adding purge cache API call -* Adding API call to query for cache entries -* Create bin/glance-pruner -* Adding image_caching -* rewrote test_traceback_not_consumed(), working on test_filtered_images() -* Only changes is reverting the patch that added migration to configure_db() and resets the in-memory SQLite database as the one used in functional testing. Yamahata's commits were unmodified.. -* Reverts commit that did db migration during configure_db() and makes functional tests use in-memory database again. The issues we were seeing had to do with the timeout not being long enough when starting servers with disk-based registry databases and migrate taking too long when spinning up the registry server... this was shown in almost random failures of tests saying failure to start servers. Rather than increase the timeout from 3 seconds, I reverted the change that runs migrate on every startup and cut the total test duration down about 15 seconds -* merged glance trunk -* updated Authors -* Resolves bug lp:803260, by adding a check to ensure req.headers['Accept'] exists before it gets assigned to a variable -* run_tests.py: make test runner accepts plugins -* run_tests.py: make run_tests.py work -* Fix the poor error handling uncovered through bug in nova -* Added stop_servers() to the end of the test cases -* adding testing & error handling for invalid markers -* removed pprint import -* removed extra space on test_queued_process_flow method definition -* removing commented out line -* merged in lp:~jshepher/glance/functional_tests_using_httplib2_part2 -* applied requested fix in merge-prop -* Removing ordering numbers from the test cases, per jay pipes -* cleaning up the 'no accept headers' test cases. this should fail until Bug lp:803260 is resolved -* Cleaning up docstring spacing -* rewrite of test_size_greater_2G_mysql from test_curl_api.py using httplib2. All tests currently pass -* completed rewrite of test_003_version_variations. bug lp:803260 filed about step #0, and noted as a comment in code -* Fix for bug 803188. This branch also proposed for merging into trunk -* miss-numbering of steps -* fixing pep8 violation -* Added a check to ensure req.headers['Accept'] exists before it gets assigned to a variable. All unit/functional tests pass with this patch -* half way done with rewrite of test_003_version_variations.. step #0 causes a 500 error unless we supply an Accept header -* Prevent query params from being set to None instead of a dict -* removing rogue print -* fixing issue where filters are set to None -* Backport for bug 803055 -* rewrote test_002_queued_process_flow from test_curl_api.py, all 6 steps pass against trunk revno:146 -* Backport for bug 803055 -* Prevent clients from adding query parameters set to None -* ignores None param values passed to do_request -* cleaning up docstrings -* merging trunk -* docstring -* Added sort_key and sort_dir query params to apis and clients -* fixing one last docstring -* docstrings\! -* unit/test_config.py: make it independent on sys.argv -* run_tests.py: make test runner accepts plugins -* reverting one import change; another docstring fix -* docstring -* Switch image_data to be a file-like object instead of bare string in image creating and updating Without this Glance loads all image into memory, then copies it one time, then writes it to temp file, and only after all this copies image to target repository -* Add myself to Authors file -* cleaning up None values being passed into images_get_all_public db call -* adding base client module -* restructuring client code -* merging trunk -* Explicitly set headers rather than add them -* fixing httplib2 functional test that was expecting wrong content-type value -* merging trunk -* rewrite of test_get_head_simple_post from tests/functional/test_curl_api.py using httplib2 -* adding assert to check content_type in GET /images/ test -* Explicitly setting Content-Type, Content-Length, ETag, Location headers to prevent duplication -* Bug #801703: No logging is configured for unit tests -* Bug #801703: No logging is configured for unit tests -* Change image_data to body_file instead of body -* reset _MAKER every test and make sure to stop the servers -* Trunk merge, changed returned content-type header from 'application/octet-stream' to 'text/html; charset=UTF-8, application/octet-stream' -* yea python strings -* updated main docstring, as it was directly coppied from test_curl_api.py -* merged trunk -* refactoring for Jay -* make image data a constant -* Fixes build failures due to webob upgrade. Updated pop-requires as well -* upgrading webob and fixing tests -* - refactoring wsgi code to divide deserialization, controller, serialization among different objects - Resource object acts as coordinator -* updating client docs -* fixing bad request error messages -* making SUPPORTED_* lists into tuples -* slight refactoring -* updating docs -* adding ordering support to glance api -* adding support to registry server and client for sort_key and sort_dir params -* re-ordered imports, using alpha-ordering -* removing unnecessary unittest import -* moved httplib2 tests to their own test case file, and uncommented md5 match -* updating docs; adding support for status filter -* adding query filters to bin/glance details -* adding query filters to bin/glance index -* forgot to remove pprint import -* adding hashlib as a dependency to pip-requires (not 100% sure it is not part of the base install though) -* fixed pep8 violation -* rewote the test #7 - #11 for testcase (test_get_head_simple_post) -* refactoring for Brian -* refactoring from Rick's comments -* Added httplib2 dependency to tools/pip-requires -* rewriting functional tests to utilize httplib2 instead of curl -* make sure it runs as a daemon for the tests -* default to no daemon -* also allow for daemon in the config file so that we can test it easier -* default to non-daemon mode -* change order of paramaters and make event optional -* initial refactoring from Jay's comments -* remove eventlet import and leftover function from previous refactoring -* remove file that got resurrected by accident -* fixed test case -* add functional tests of the scrubber and delayed_delete -* start the scrubber in addition to the api and registry -* add glance-scrubber to glance-control -* call it a Daemon, cuz it is -* Update Authors -* add the function to the stubs -* cleanup -* adding tests for wsgi module -* removing rogue print -* further refactoring -* adding refactored wsgi code from nova; moving registry api to new wsgi -* delayed scrubbing now works -* add the scrubber startup script -* remove unnecessary option -* add pending_delete to stub api -* pep8 fixed -* pep8 fixes -* pass in the type we want so it gets converted properly -* self leaked ;( -* only return the results that we need to act on -* allow passing of time to get only results earlier than the time' -* server and scrubber work -* update the docstring to reflect current -* pass in a wakeup_time for the default time between database hits -* start making the server that will periodicly scrub -* Config file for the scrubber. We make our own connection to the db here and bypass using the registry client so we don't have to expose non-public images over the http connection -* make the commits -* Add webob>=1.0.7 requirement to tools/pip-requires -* all delayed deletes will be going through a new service, if delayed_delete is False, then delete it right away, otherwise set it to pending_delete -* add scrub file -* set the image to pending delete prior to scheduling the delete -* refactor a bit so the db gets updated as needed and we only trigger the delay if the config option is set -* add scheduled_delete_from_backend which delays the deletion of images for at least 1 second -* don't delete directly but schedule deletion -* add the api function to get the images that are pending deleteion -* add in delayed delete options -* Add workaround for Webob bug issue #12 and fix DELETE operation in S3 where URL parsing was broken -* Add ability to create missing s3 bucket on first post, similar to Swift driver -* Adding support for marker/limit query params from api, through registry client/api, and implementing at registry db api layer -* Bug #787296: test_walk_versions fails with SQLalchemy 0.7 -* OK, fixes the issue where older versions of webob.Request did not have the body_file_seekable attribute. After investigation, turned out that webob.Request.make_body_seekable() method was available in all versions of webob, so we use that instead -* Added new disk_format type of 'iso'. Nova can use this information to identify images that have to be booted from a CDROM -* adding marker & limit params to glance client -* Auto-migrate if the tables don't exist yet -* Fix up unit tests for S3 after note from Chris. Also fix bug when S3 test was skipped, was returning error by accident -* * Adds functional test that works with Amazon S3 * Fixes parsing of "S3 URLs" which urlparse utterly barfs on because Amazon stupidly allows forward slashes in their secret keys * Update /etc/glance-api.conf for S3 settings -* merging trunk, resolving conflicts -* fixing sql query -* completing marker functionality -* Call stop_servers() for those 2 test cases missing it -* Correct documentation -* Add missing stop_servers() calls to two functional test cases -* Remove changes to stub database -* Auto-migrate if tables don't exist -* Fix accidental delete -* Remove additions to FIXTURES in test/stubs.py, which requried changes elsewhere -* Sync with trunk -* Documentation for new results filtering in the API and client -* Fix tiny typo -* Documentation for new results filtering in the API and client -* Adding support for query filtering from the glance client library -* renaming query_params to params -* abstracting out filters query param serialization into BaseClient.do_request -* renaming tests to resolve conflict -* adding filters param to get_images and get_images_detailed in glance client -* Bug #787296: test_walk_versions fails with SQLalchemy 0.7 -* Updated doc with 'iso' disk_format -* Update documentation -* Adding support for api query filtering - equality testing on select attributes: name, status, container_format, disk_format - relative comparison of size attribute with size_min, size_max - equality testing on user-defined properties (preface property name with "property-" in query) -* updating stubs with new sorting logic; updating tests -* fixing some copy/paste errors -* fixing some webob exceptions -* slight modification to registry db api to ensure marker works correctly -* slight refactoring per jaypipes' suggestions; sort on get images calls is now created_at desc -* Add tests for 'iso' image type. Remove hard coding of next available image id in tests. This prevents new test images from being added to the set generated by tests.unit.stubs.FakeDatastore -* pulling from parent branch -* docstring fix -* pushing marker/limit logic down into registry db api -* adding support for marker & limit query params -* removing some unnecessary imports -* making registry db api filters more structured; adding in a bit of sqlalchemy code to filter image properties more efficiently -* consolidating image_get_all_public and image_get_filtered in registry db api -* adding test case for multiple parameters from command line -* adding custom property api filtering -* adding size_min and size_max api query filters -* implemented api filtering on name, status, disk_format, and container_format -* Adds versioning to the Glance API -* Add test and fix for /v1.2/images not properly returning version choices -* Add more tests for version URIs and accept headers and fix up some of Brian's review comments -* Fix merge conflict.. -* Changes versioned URIs to be /v1/ instead of /v1.0/ -* Improve logging configuration docs.. -* Doc and docstring fixes from Dan's review -* Removed some test config files that slipped in.. -* Fix up find_config_file() to accept an app_name arg. Update all documentation referencing config files -* Fix pep8 complaint -* Add DISK_FORMAT for 'iso' type images -* Adds versioning to Glance's API -* Changes glance index to return all public images in any status other than 'killed'. This should allow tools like euca-describe-images to show images while they are in a saving/untarring/decrypting state -* Fix numbering in comment.. -* Fixed doh. Updates test case to test for condition that should have failed with status!='active' -* Changes glance index to return all public images in any status other than 'killed'. This should allow tools like euca-describe-images to show images while they are in a saving/untarring/decrypting state -* Adding prefilled Authors, mailmap files Adding test to validate Authors file is properly set up -* Documentation updates to make glance add command clearer, hopefully :) -* adding Authors functionality; fixing one rogue pep8 violation -* Improve logging configuration docs.. -* Prevent users from uploading images with a bad or missing store. Allow deletion from registry when backend cannot be used -* bcwaldon review fixups -* adding comment -* Fix for bug #768969: glance index shows non-active images; glance show does not show status -* Completes the S3 storage backend. The original code did not actually fit the API from boto it turned out, and the stubs that were in the unit test were hiding this fact -* catching NotFound to prevent failure on bad location -* Prevent requests with invalid store in location param -* Allow registry deletion to succeed if store deletion fails -* Documentation updates to make glance add command clearer, hopefully :) -* Fix for LP Bug #768969 -* Expanding user confirmation default behavior -* removing excessive exception handling -* pep8 fixes -* docstring and exception handling -* Expanding user_confirm default behavior -* I modified documentation to show more first-time user friendly examples on using glance. With the previous examples, I followed it as a first-time user and had to spend more than necessary time to figure out how to use it. With this modification, other first-time users would make it work on their systems more quickly -* - Require user confirmation for "bin/glance clear" and "bin/glance delete " - Allow for override with -f/--force command-line option -* adding --force option to test_add_clear -* Adds a test case for updating an image's Name attribute. glance update was not regarding 'name' as a top-level modifiable attribute.. -* Name is an attribute that is modifiable in glance update, too. -* Mark image properties as deleted when deleting images. Added a unit test to verify public images and their properties get deleted when running a 'glance clear' command -* Update tests and .bzrignore to use tests.sqlite instead of glance.sqlite -* Only modify the connection URL in runs_sql if the original connection string starts with 'sqlite' -* Create a decorator that handles setting the SQL store to a disk-based SQLite database when arbitrary SQL statements need to be run against the registry database during a test case -* Docstring update on the run_sql_command function -* Mark image properties as deleted when deleting images. Added a unit test to verify public images and their properties get deleted when running a 'glance clear' command -* Add log_file to example glance.conf -* fixing spacing in help text -* adding confirmation on image delete/clear; adding user_confirm functionality -* Add log_file to example glance.conf -* Make sure we use get_option() when dealing with boolean values read from configuration files...otherwise "False" is True :( -* Fixing tests. Sorry for late response -* Make sure we use get_option() when dealing with boolean values read from configuration files...otherwise "False" is True :( -* resolve merge conflicts -* chnaged output -* Open Diablo release -* Diablo versioning -* Fake merge with ancient trunk. This is only so that people who "accidentally" have been following lp:~hudson-openstack/glance/trunk will not have problems updating to this -* Final versioning for Cactus -* fixing after review -* Removes capture of exception from eventlet in _upload_and_activate(), which catches the exceptions that come from the _safe_kill() method properly -* RickH fixups from review -* Add catch-all except: block in _upload() -* change output from glance-registry -* get latest from lp:glance -* Ensures that configuration values for debug and verbose are used if command-line options are not set -* Removes capture of exception from eventlet in _upload_and_activate(), which catches the exceptions that come from the _safe_kill() method properly -* Fix logging in swift -* Fix Thierry's notice about switched debug and verbose -* Change parsing of headers to accept 'True', 'on', 1 for boolean truth values -* Final cactus versioning -* OK, fix docs to make it clear that only the string 'true' is allowed for boolean headers. Add False-hood unit tests as well -* Logging was not being setup with configuration file values for debug/verbose -* Fix up the way the exception is raised from _safe_kill()... When I "fixed" bug 729726, I mistakenly used the traceback as the message. doh -* Change parsing of headers to accept 'True', 'on', 1 for boolean truth values -* Add the migration sql scripts to MANIFEST.in. The gets them included in not only the tarball, but also by setup.py install -* Add the migration sql scripts to MANIFEST.in. The gets them included in not only the tarball, but also by setup.py install -* Changed raise of exception to avoid displaying incorrect error message in _safe_kill() -* fix logging in swift -* Changes "key" column in image_properties to "name" -* Updated properties should be marked as deleted=0. This allows previously deleted properties to be reactivated on an update -* Adds --config-file option to common options processing -* Update the docs in bin/glance so that help for the 'update' command states that metadata not specified will be deleted -* Fix config test fixtures and pep8 error in bin/glance-manage -* Provide revised schema and migration scripts for turning 'size' column in 'images' table to BIGINT. This overcomes a 2 gig limit on images sizes that can be downloaded from Glance -* Updated properties should be marked as deleted=0. Add unit tests -* Use logging module, not echo, for logging SQLAlchemy. Fixes bug 746435 -* Change order of setting debug/verbose logging. Thanks for spotting this, Elgar -* Use logging module, not echo, for logging SQLAlchemy. Fixes bug 746435 -* Ensure we don't ask the backend store to delete an image if the image is in a queued or saving state, since clearly the backend state has yet to completely store the image -* Changes "key" column in image_properties to "name" -* Use logging module, not echo for logging SQLAlchemy -* Updates glance-manage to use configuration files as well as command line options -* Ensure we don't ask a backend store to delete an image if the image is queued or saving -* Moved migration into Python script, otherwise PostgreSQL was not migrated. Added changes to the functional test base class to reset the data store between tests. GLANCE_SQL_CONNECTION env variable is now GLANCE_TEST_SQL_CONNECTION -* changed to more typical examples -* Add migration scripts for revising the datatype of the 'size' column in the images table -* Changes to database schema required to support images larger than 2Gig on MySQL. Does not update the migration scripts -* Updates to the Registry API such that only external requests to update image properties purge existing properties. The update_image call now contains an extra flag to purge_props which is set to True for external requests but False internally -* Updates to the Registry API such that only external requests to update image properties purge existing properties. The update_image call now contains an extra flag to purge_props which is set to True for external requests but False internally -* Update the glance registry so that it marks properties as deleted if they are no longer exist when images are updated -* Simple one.. just add back the Changelog I removed by accident in r94. Fixes bug #742353 -* Adds checksumming to Glance -* Uhhhm, stop_servers() should stop servers, not start them! Thanks to Cory for uncovering this copy/paste fail -* Fix up test case after merging in bug fixes from trunk... expected results were incorrect in curl test -* Add ChangeLog back to MANIFEST.in -* Add migration testing and migration for disk_format/container_format -* tests.unit.test_misc.execute -> tests.utils.execute after merge -* Allow someone to set the GLANCE_TEST_MIGRATIONS_CONF environment variable to override the config file to run for the migrations unit test: -* Update the glance registry so that it marks properties as deleted if they are no longer in the update list -* Start eventlet WSGI server with a logger to avoid stdout output -* Adds robust functional testing to Glance -* Add migration script for checksum column -* Fixed an oops. Didn't realized Repository.latest returned a 0-based version number, and forgot to reversed() the downgrade test -* OK, migrations are finally under control and properly tested -* Remove non-existing files from MANIFEST.in -* Removed glance-combined. Fixed README -* Removed glance-commit -* Re-raise _safe_kill() exception in non-3-arg form to avoid pep8 deprecation error -* Bug #737979: glance-control uses fixed path to Python interpreter, breaking virtualenv -* Bug #737979: glance-control uses fixed path to Python interpreter, breaking virtualenv -* Removes glance-combined and fixes TypeError from bad function calls in glance-manage -* Start eventlet WSGI server with a logger to avoid stdout output -* Pass boolean values to glance.client as strings, not integers -* Small adjustment on wait_for_servers()... fixed infinite loop possibility -* Adds robust functional testing to Glance -* Ensure Content-type set to application/octet-stream for GET /images/ -* Ensure Content-Length sent for GET /images/ -* HTTPBackend.get() needed options in kwargs -* Remove glance-combined (use glance-control all start). Fix glance-manage to call the setup_logging() and add_logging_options() methods according to the way they are called in glance-api and glance-registry -* Support account:user:key in Swift URIs. Adds unit tests for various calls to parse_swift_tokens() -* Adds documentation on configuring logging and a unit test for checking simple log output -* Support account:user:key in Swift URIs. Adds unit tests for various calls to parse_swift_tokens() -* Cherry pick r86 from bug720816 -* Cherry pick r87 from bug720816 -* Fixed run_tests.py addError() method since I noted it was faulty in another branch.. -* Tiny pep8'ers -* I stole the colorized code from nova -* Fix typo -* A quick patch to allow running the test suite on an alternate db backend -* Merged trunk -resolved conflicts -* [Add] colorization stolen from nova -* Don't require swift module for unit-tests -* Pep8 fix -* Backing out unit-test workaround -* Changed to have 2 slashes -* Allow unit-tests to run without swift module -* Remove spurios comment in test file -* Add Glance CLI tool -* Silly mistake when resolving merge conflict...fixed -* Fixes passing of None values in metadata by turning them into strings. Also fixes the passing of the deleted column by converting it to and from a bool. The test for passing metadata was updated to include these values -* Adds documentation on configuring logging and a test that log_file works. It didn't, so this also inludes fixes for setting up log handling :) -* fix data passing -* add failing test for None and deleted -* Uses logger instead of logging in migration.py -* Using logger in migration api instead of logging directly -* Only clean up in the cleanup method. Also, we don't need the separate URI now -* Use unregister_models instead of os.unlink to clean up after ourselves -* Fixed unregister_models to actually work -* Fixed migration test to use a second DB URL -* Replaced use of has_key with get + default value -* Make it clear that the checksum is an MD5 checksum in docs -* Adds checksumming to Glance -* Whoops! Left out a self.db_path -* Allow tests to run on an alternate dburi given via environment variables -* Adds ability for Swift to be used as a full-fledged backend. Adds POST/PUT capabilities to the SwiftBackend Adds lots of unit tests for both FilesystemBackend and SwiftBackend Removes now-unused tests.unit.fakeswifthttp module -* Remove last vestiges of account in Swift store -* Quick fixup on registry.get_client() -* Public? => Public: per Cory's comment. Added a little more robust exception handling to some methods in bin/glance -* Fixes for Devin and Rick's reviews -* Adds disk_format and container_format to Image, and removes the type column -* Fixes client update_image to work like create_image. Also fixes some messed up exceptions that were causing a try, except to reraise -* Final review fixes. Makes disk_format and container_format optional. Makes glance-upload --type put the type in properties -* remove test skip -* Put account in glance.conf.sample's swift_store_auth_address, use real swift.common.client.ClientException, ensure tests work with older installed versions of Swift (which do not have, for example, swift.common.client.Connection.get_auth method) -* Work around Eventlet exception clearing by memorizing exception context and re-raising using 3-arg form -* Adds bin/glance to setup.py -* Fixes from Rick's review #1 -* Reverts Image `type` back to the old behavior of being nullable -* Work around Eventlet exception clearing -* Add sys.path mangling to glance-upload -* Add sys.path adjustment magic to glance-upload -* Adds ability for Swift to be used as a full-fledged backend. Adds POST/PUT capabilities to the SwiftBackend Adds lots of unit tests for both FilesystemBackend and SwiftBackend Removes now-unused tests.unit.fakeswifthttp module -* Couple tiny cleanups noticed when readin merge diff. -* bin/glance-admin => bin/glance, since it's really just the CLI tool to interact with Glance. Added lots of documentation and more logging statements in some critical areas (like the glance.registry calls.. -* Adds lots of unit tests for verifying exceptions are raised properly with invalid or mismatched disk and container formats -* Makes --kernel and --ramdisk required arguments for glance-upload since Nova currently requires them -* Removing image_type required behavior -* Removing requirement to pass kernel and ramdisk -* Add test cases for missing and invalid disk and container formats -* Requiring kernel and ramdisk args in glance-upload -* Make disk_format and container_format required -* Make disk_format and container_format required -* Adds an admin tool to Glance (bin/glance-admin) that allows a user to administer the Glance server: -* Make sure validate_image() doesn't throw exception on missing status when updating image -* Adds disk_format and container_format to Image, and removes the type column -* This adds a test case for LP Bug 704854 -- Exception raised by Registry server gets eaten by API server -* Add debugging output to assert in test_misc. Trying to debug what Hudson fails on.. -* Fixups from Rick's review -* Removes now-unnecessary @validates decorator on model -* I should probably rebase this commit considering all the previous commits weren't actually addressing the issue. The fact that I had glance-api and glance-registry installed on my local machine was causing the test runs to improperly return a passing result -* Use Nova's path trick in all bins.. -* Add path to glance-control -* Removes image type validation in the Glance registry -* Adding vhd as recognized image type -* Reverting the removal of validation -* Removing image type validation -* Adds --pid-file option to bin/glance-control -* Add %default for image type in glance-upload -* Adds Location: header to return from API server for POST /images, per APP spec -* Cleanups from Soren's review -* Add an ImportError check when importing migrate.exceptions, as the location of that module changed in a recent version of the sqlalchemy-migrate library -* Adds Location: header to return from API server for POST /images, per APP spec -* This adds a test case for LP Bug 704854 -- Exception raised by Registry server gets eaten by API server -* Adds --pid-file option to bin/glance-control -* Add an ImportError check when importing migrate.exceptions, as the location of that module changed in a recent version of the sqlalchemy-migrate library -* Adds sql_idle_timeout to reestablish connections to database after given period of time -* Add sql_idle_timeout -* Removes lockfile and custom python-daemon server initialization in favour of paste.deploy -* Review 3 fixups -* Remove get_config_file_options() from glance-control -* Fixes for Rick review #2 -* Remove no-longer-needed imports.. -* Remove extraneous debug import.. -* Changes the server daemon programs to be configured only via paste.deploy configuration files. Removed ability to configure server options from CLI options when starting the servers with the exception of --verbose and --debug, which are useful during debugging -* Adds glance-combined and glance-manage to setup.py -* Fix merge conflicts -* Adds glance-combined and glance-manage to setup.py -* Fixes bug 714454 -* ReStructure Text files need to end in .rst, not .py ;) -* Update README, remove some vestigial directories, and other small tweaks -* Removing dubious advice -* Adds facilities for configuring Glance's servers via configuration files -* Use fix_path on find_config_file() too -* Fixups from Rick's review -* Including tests/ in pep8 -* Typo fixes, clarifying -* Updating README, rmdir some empty dirs -* Adds bin/glance-control program server daemonization wrapper program based on Swift's swift-init script -* Ignore build and deploy-related files -* Adds sqlalchemy migrations -* Fix bug 712575. Make BASE = models.BASE -* Make sure BASE is the models.BASE, not a new declarative_base() object -* Had to reverse search order of directories for finding config files -* Removes lockfile and custom python-daemon server initialization in favour of paste.deploy -* Adds facilities for configuring Glance's servers via configuration files -* Creating indexes -* Adding migration test -* Fixing migration import errors -* Small cleanups -* glance-manage uses common options -* Merging in glance/cactus -* Pep8 fix -* Pep8 fixes -* Refactoring into option groups -* Hopefully-final versioning (0.1.7), no review needed -* Final versioning, no review needed -* Adding db_sync to mirror nova -* Adding some basic documentation -* Better logging -* Adding image_properties migration -* Adding migration for images table -* Adding migration management commands -* Remove debugging output that wasn't supposed to go into this branch (yet) :) -* Adds --debug option for DEBUG-level logging. --verbose now only outputs INFO-level log records -* Typo add_option -> add_options -* Fixes from Rick's review. Thanks, Rick -* Adds --sql-connection option -* First round of logging functionality: -* Merged use-optparse -* Removes glance.common.db.sqlalchemy and moves registration of models and create_engine into glance.registry.db.api -* pep8-er in bin/glance-combined -* Fixes lp710789 - use-optparse breaks daemonized process stop -* Adds bin/glance-combined. Useful in testing.. -* Tiny pep8 fixup in setup.py -* Rework what comes back from parse_options()[0] to not stringify option values. Keep them typed -* Remove use of gflags entirely. Use optparse -* Removing unecessary param to get_all_public -* Merging trunk -* Adding back some missing code -* Cleaning up some code -* Makes Glance's versioning non-static. Uses Nova's versioning scheme -* Adds/updates the copyright info on most of the files in glance and copies over the Authors check from Nova -* Removing sqlalchemy dir -* Removed methods from sqlalchemy/api -* Refactor update/create -* Messed up a permission somehow -* Refactoring destroy -* feh -* A few more -* A few more I missed -* version bumped after tarball cut. no review needed.. -* Bump version -* Removing authors test for now -* PEP8 cleanup -* PEP8 cleanup -* Should fix the sphinx issue -* Adds architecture docs and enables Graphviz sphinx extension. Also cleans up source code formatting in docs -* Make sphinx conditional -* bumps version after tarball release of 0.1.4 -* Bump version -* Added bzr to pip-requires and refixed some pep8 stuff -* Authors check -* A few more copyrights -* Copyright year change -* Pylint cleanup -* Added copyright info -* Adds architecture docs and enables Graphviz sphinx extension. Also cleans up source code formatting in docs -* bumps release version. ready for Bexar final release -* Version bump after release -* added sphinx and argparse into tools/pip-requires so that setup.py works. this bug also prevents nova from creating a virtualenv -* fixes setup install pip dependencies -* Version bump for release -* Fixes bug #706636: Make sure pep8 failures will return failure for run_tests.sh -* Make run_tests.sh return failure when pep8 returns fail, and fix the pep8 error in /bin/glance-upload -* This patch: * Converts dashes to underscores when extracting image-properties from HTTP headers (we already do this for 'regular' image attributes * Update image_properties on image PUTs rather than trying to create dups -* This patch replaces some remaining references to req.body (which buffers the entire request body into memory!) with the util.has_body method which can determine whether a body is present without reading any of it into memory -* Adding Apache license, fixing long line -* Making glance-upload a first-class binary -* Revove useless test_data.py file, add image uploader -* Fix property create -* Dont buffer entire image stream on PUT -* Adds man pages for glance-registry and glance-api programs. Adds Getting Started guide to the Glance documentation -* Fixes LP Bug #700162: Images greater than 2GB cannot be uploaded using glance.client.Client -* Duh, it helps to import the class you are inheriting from... -* OK, found a solution to our test or functional dilemma. w00t -* Make compat with chunked transfer -* Removes the last vestiges of Twisted from Glance -* Pull in typo fix -* Add in manpage installation hook. Thanks Soren :) -* Fixes LP Bug #700162: Images greater than 2GB cannot be uploaded using glance.client.Client -* Removes Twisted from tools/install_venv.py and zope.interface from tools/pip-requires. Shaved a full 45 seconds for me off of run_tests.sh -V -f now we're not downloading a giant Twisted tarball.. -* Remove last little vestiges of twisted -* Quick typo fix in docs -* Add run_tests.py to tarball -* Also include run_tests.py in tarball -* Adds man pages for glance-registry and glance-api. Adds Getting Started guide to Glance docs -* Fixes bug #696375: x-image-meta-size not optional despite documentation saying so -* PEP8 fixes in /glance/store/__init__.py -* Fix Bug #704038: Unable to start or connect to register server on anything other than 0.0.0.0:9191 -* Fix Bug #704038: Unable to start or connect to register server on anything other than 0.0.0.0:9191 -* upgrade version.. -* Fixes Bug#696375: x-image-meta-size is not optional, contrary to documentation -* Increase version after release -* Cut 0.1.2 -* Files missing from the tarball (and you probably need to cut a 0.1.2.) -* Cleanup of RST documentation and addition of docs on an image's status -* Include some files that were left out -* Implements the S3 store to the level of the swift store -* fixes bug698318 -* Fixes suggested by JayPipes review. Did not modify docstrings in non-related files -* This merge is in conjunction with lp:~rconradharris/nova/xs-snap-return-image-id-before-snapshot -* Updating docs -* Merging trunk -* Clean up the rest of Glance's PEP8 problems -* PEP-8 Fixes -* Fixing eventlet-raise issue -* Bug #698316: Glance reads the whole image into memory when handling a POST /images request -* Merging trunk -* Fixed pylint/pep8 for glance.store.s3 -* Implement S3 to the level of swift -* removing old methods -* refactoring so update can take image_data -* More PEP8 fixes -* Fix all Glance's pep8 problems -* Remove incorrect doccomments about there being a default for the host parameter, fix misdocumented default port, and remove handling of missing parameters in BaseClient, because the values are always specified by the subclass's __init__ -* Bug #696385: Glance is not pep8-clean -* Bug #696382: Glance client parameter defaults misdocumented -* Fixes a number of things that came up during initial coding of the admin tool: -* Made review changes from Rick -* Duh, use_ssl should not use HTTPConnection.. -* Remove final debugging statement -* merge trunk -* Remove debugging statements -* Fixes a number of things that came up during initial coding of the admin tool: -* fix bug 694382 -* Bug #694382: setup.py refers to parallax-server and teller-server, when these have been renamed -* documentation cleanup and matching to other OpenStack projects. Glance is no longer the red-headed documentation stepchild in OpenStack.. -* Converts timestamp attributes to datetime objects before persisting -* Adding __protected_attributes__, some PEP8 cleanups -* review fixes -* Update sphinx conf to match other OpenStack projects -* Documentation cleanup. Splits out index.rst into multiple section docs -* Converting to datetime before saving image -* Enhances POST /images call to, you know, actually make it work.. -* Make directory for filesystem backend -* doing the merge of this again...somehow the trunk branch never got rev26 :( -* Adds POST /images work that saves image data to a store backend -* Update docs for adding image.. -* Fix Chris minor nit on docstring -* Fixes binaries, updates WSGI file to more recent version from Nova, and fixes an issue in SQLAlchemy API that was being hidden by stubs and only showed up when starting up the actual binaries and testing.. -* Major refactoring.. -* Fix testing/debug left in -* Fixes from review -* Documentation updates and GlanceClient -> Client -* Refactor a bunch of stuff around the image files collection -* Cleanup around x-image-meta and x-image-meta-property HTTP headers in GET/HEAD -* Update /glance/client.py to have GlanceClient do all operations that RegistryClient does -* Merges Glance API with the registry API: * Makes HEAD /images/ return metadata in headers * Make GET /images/ return image data with metadata in headers Updates docs some (more needed) -* Second step in simplifying the Glance API -* This is the first part of simplifying the Glance API and consolidating the Teller and Parallax APIs into a single, unified Glance API -* Adds DELETE call to Teller API -* Fixes Swift URL Parsing in Python 2.6.5 by adding back netloc -* Moving imports into main which will only be executed after we daemonize thus avoiding the premature initialization of epoll -* Delaying eventlet import until after daemonization -* Fix Swift URL parsing for Python 2.6.5 -* Don't leak implementation details in Swift backend. Return None on successful delete_object call -* Adds call to Swift's DELETE -* Typo fixed and tiny cleanups -* Adds DELETE to Teller's API -* Just some small cleanups, fixing: * Swapped port numbers (Parallax Port <=> Teller port) * Removing extraneous routes in Teller API * Adding required slashes to do_request -* * Changes Teller API to use REST with opaque ID sent in API calls instead of a "parallax URI". This hides the URI stuff behind the API layer in communication between Parallax and Teller. * Adds unit tests for the only complete Teller API call so far: GET images/, which returns a gzip'd string of image data -* Fixing swapped port numbers, removing extraneous routes in Teller controller, adding required slash for do_request calls -* * Changes Teller API to use REST with opaque ID sent in API calls instead of a "parallax URI". This hides the URI stuff behind the API layer in communication between Parallax and Teller. * Adds unit tests for the only complete Teller API call so far: GET images/, which returns a gzip'd string of image data -* Add files attribute to Parallax client tests -* Adds client classes for Parallax and Teller and fixes some issues where our controller was not returning proper HTTP response codes on errors.. -* Cleanup/fixes for Rick review -* Adds client classes ParallaxClient and (stubbed) TellerClient to new glance.client module -* packaging fixups preparing for release candidate -* Remove symlinks in bin/ -* Packaging fixups -* awesomeness. merging into trunk since my parallax-api is already in trunk I believe. :) -* Moving ATTR helpers into db module -* PUTing and POSTing using image key -* Quick fix...gives base Model an update() method to make it behave like a dict -* Make returned mapping have an 'image' key to help in XML serialization -* Ignore virtualenv directory in bzr -* This patch removes unique index on the 'key' column of image_metadatum and replaces it with a compound UniqueConstraint on 'image_id' and 'key'. The 'key' column remains indexed -* Fixes lp653358 -* Renaming is_cloudfiles_available -> is_swift_available -* Adds compound unique constraint to ImageMetadatum -* Using swift.common.client rather than python-cloudfiles in Teller's Swift backend -* Adds DELETE to the Parallax REST API -* Implements the REST call for updating image metadata in the Parallax API -* Implements Parallax API call to register a new image -* Adds a /images/detail route to the Parallax controller, adds a unit test for it, and cleans up Michael's suggestions -* Works around non-RFC compliance in Python (< 2.6.5) urlparse library -* Workaround for bug in Python 2.6.1 urlparse library -* Adds tests for bad status set on image -* Implements Parallax API call to register a new image -* This patch overhauls the testing in Glance: -* unittest2 -> unittest. For now, since not using unittest2 features yet -* Fixes up test_teller_api.py to use stubout correctly. Fixes a few bugs that showed up in the process, and remove the now-unnecessary FakeParallaxAdapter -* First round of cleaning up the unittests. Adds test suite runner, support for virtualenv setup and library dependencies, resolves issues with ImportErrors on cloudfiles, adds pymox/stubout support and splits the backend testing into distinct unittest cases -* With this patch Parallax and teller now work end-to-end with the Swift backend -* Adding missing backend files, fixing typos in comments -* This patch: * Decouples Controller for ParallaxAdapter implementation by adding generic RegistryAdapter and providing a lookup function * Adds base model attributes to Parallax's JSON (created_at, etc) -* Improving symmetry between teller and parallax -* Fixing swift authurl -* Add RegistryAdapter, include ModelBase attributes -* Fixing Teller image tests -* Created teller-server.py in bin/ -* Cleaning up Teller backend -* Rewrote ImageController to inherit from the work Rick Harris did in glance.common. Moved it into teller/api/images.py to make teller match parallax. Fixed tests. Renamed them to distinguish if any parallax tests ever get written -* Adding Image index call, nesting the Image show dict to facilitate XML serialization -* Moving parallax models out of common and into the parallax module -* Updated tests -* Reimplements server.py as a wsgi api inheriting from glance.common -* This patch: * pulls in a number of useful libraries from Nova under the common/ path (we can factor those out to a shared library in Bexar-release) * Defines the models in common.db.sqlalchemy.models.py (this should be factored out into the parallax package soon) * Adds the parallax api-server under /bin (if PyPI was used to pull python-daemon and python-lockfile, you may need to apply a patch I have against it) -* Changes the obj['uri'] to obj['location'] to better sync with the representation within Nova. Adds the image_lookup_fn = ParallaxAdapter.lookup to teller.server -* ImageChunk -> ImageFile, merging APIRouter into API for now -* Adding Apache header to test_data.py -* Small cleanups -* Parallax will return obj['location'] instead of obj['uri'], also maybe a parallax lookup fn would be nice? -* Implements a Parallax adapter for looking up images requested from nova. Adds a size check to SwiftBackend to ensure that the chunks haven't been truncated or anything -* Reconciling parallax modifications with modulization of glance -* Adding Images controller -* Adding API directory and server.py -* Modulify the imports -* Implements Parallax adapter for lookups from Teller, also adds size expectations to the backend adapters -* Adding files from Nova -* Makes glance a module, containing teller and parallax sub-modules -* libify glance into teller and parallax modules. Make nosetests work by making tests and tests/unit/ into packages -* Rearranged the code a little. Added a setup.py. Added sphinx doc skeleton -* Added setup.py and sphinx docs -* Reorg to make Monty's build pedanticness side happier -* Implements Swift backend for teller -* ignore all .pyc files -* Merging ricks changes -* Adding basic image controller and mock backends -* Adding description of registry data structure -* Adding teller_server -* adding filesystem and http backends -* Initial check-in diff --git a/code/daisy/HACKING.rst b/code/daisy/HACKING.rst index 769d76ef..fe5ff939 100755 --- a/code/daisy/HACKING.rst +++ b/code/daisy/HACKING.rst @@ -1,11 +1,11 @@ -glance Style Commandments +daisycloud-core Style Commandments ======================= - Step 1: Read the OpenStack Style Commandments http://docs.openstack.org/developer/hacking/ - Step 2: Read on -glance Specific Commandments +daisycloud-core Specific Commandments -------------------------- - [G316] Change assertTrue(isinstance(A, B)) by optimal assert like diff --git a/code/daisy/README.rst b/code/daisy/README.rst index 406a999b..8f5d7916 100755 --- a/code/daisy/README.rst +++ b/code/daisy/README.rst @@ -1,11 +1,9 @@ ====== -Glance +Daisy ====== -Glance is a project that defines services for discovering, registering, -retrieving and storing virtual machine images. +Daisy(Openstack project name: daisycloud-core) provides automated deployment and +management of OpenStack and other distributed systems. -Use the following resources to learn more: - -* `Official Glance documentation `_ -* `Official Client documentation `_ +## Website +http://www.daisycloud.org \ No newline at end of file diff --git a/code/daisy/daisy/cmd/api.py b/code/daisy/daisy/cmd/api.py index 4a8a2622..828a717b 100755 --- a/code/daisy/daisy/cmd/api.py +++ b/code/daisy/daisy/cmd/api.py @@ -37,7 +37,7 @@ from daisy.common import config from daisy.common import exception from daisy.common import wsgi from daisy import notifier -from daisy.openstack.common import systemd +from oslo_service import systemd # Monkey patch socket, time, select, threads eventlet.patcher.monkey_patch(all=False, socket=True, time=True, diff --git a/code/daisy/daisy/cmd/orchestration.py b/code/daisy/daisy/cmd/orchestration.py index 7c4fdaf9..05e45f12 100755 --- a/code/daisy/daisy/cmd/orchestration.py +++ b/code/daisy/daisy/cmd/orchestration.py @@ -28,7 +28,7 @@ from oslo_config import cfg from oslo_log import log as logging from daisy.common import exception from daisy.common import config -from daisy.openstack.common import loopingcall +from oslo_service import loopingcall from daisy.orchestration import manager import six diff --git a/code/daisy/daisy/cmd/registry.py b/code/daisy/daisy/cmd/registry.py index 200a6221..1ffb8c08 100755 --- a/code/daisy/daisy/cmd/registry.py +++ b/code/daisy/daisy/cmd/registry.py @@ -34,7 +34,7 @@ from daisy.common import config from daisy.common import utils from daisy.common import wsgi from daisy import notifier -from daisy.openstack.common import systemd +from oslo_service import systemd # Monkey patch socket and time eventlet.patcher.monkey_patch(all=False, socket=True, time=True, thread=True) diff --git a/code/daisy/daisy/common/jsonpatchvalidator.py b/code/daisy/daisy/common/jsonpatchvalidator.py deleted file mode 100755 index 0d92852c..00000000 --- a/code/daisy/daisy/common/jsonpatchvalidator.py +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright 2015 OpenStack Foundation. -# All Rights Reserved. -# -# 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 mixin that validates the given body for jsonpatch-compatibility. -The methods supported are limited to listed in METHODS_ALLOWED -""" - -import re - -import jsonschema - -import daisy.common.exception as exc -from daisy.openstack.common._i18n import _ - - -class JsonPatchValidatorMixin(object): - # a list of allowed methods allowed according to RFC 6902 - ALLOWED = ["replace", "test", "remove", "add", "copy"] - PATH_REGEX_COMPILED = re.compile("^/[^/]+(/[^/]+)*$") - - def __init__(self, methods_allowed=["replace", "remove"]): - self.schema = self._gen_schema(methods_allowed) - self.methods_allowed = [m for m in methods_allowed - if m in self.ALLOWED] - - @staticmethod - def _gen_schema(methods_allowed): - """ - Generates a jsonschema for jsonpatch request based on methods_allowed - """ - # op replace needs no 'value' param, so needs a special schema if - # present in methods_allowed - basic_schema = { - "type": "array", - "items": {"properties": {"op": {"type": "string", - "enum": methods_allowed}, - "path": {"type": "string"}, - "value": {"type": ["string", - "object", - "integer", - "array", - "boolean"]} - }, - "required": ["op", "path", "value"], - "type": "object"}, - "$schema": "http://json-schema.org/draft-04/schema#" - } - if "remove" in methods_allowed: - methods_allowed.remove("remove") - no_remove_op_schema = { - "type": "object", - "properties": { - "op": {"type": "string", "enum": methods_allowed}, - "path": {"type": "string"}, - "value": {"type": ["string", "object", - "integer", "array", "boolean"]} - }, - "required": ["op", "path", "value"]} - op_remove_only_schema = { - "type": "object", - "properties": { - "op": {"type": "string", "enum": ["remove"]}, - "path": {"type": "string"} - }, - "required": ["op", "path"]} - - basic_schema = { - "type": "array", - "items": { - "oneOf": [no_remove_op_schema, op_remove_only_schema]}, - "$schema": "http://json-schema.org/draft-04/schema#" - } - return basic_schema - - def validate_body(self, body): - try: - jsonschema.validate(body, self.schema) - # now make sure everything is ok with path - return [{"path": self._decode_json_pointer(e["path"]), - "value": e.get("value", None), - "op": e["op"]} for e in body] - except jsonschema.ValidationError: - raise exc.InvalidJsonPatchBody(body=body, schema=self.schema) - - def _check_for_path_errors(self, pointer): - if not re.match(self.PATH_REGEX_COMPILED, pointer): - msg = _("Json path should start with a '/', " - "end with no '/', no 2 subsequent '/' are allowed.") - raise exc.InvalidJsonPatchPath(path=pointer, explanation=msg) - if re.search('~[^01]', pointer) or pointer.endswith('~'): - msg = _("Pointer contains '~' which is not part of" - " a recognized escape sequence [~0, ~1].") - raise exc.InvalidJsonPatchPath(path=pointer, explanation=msg) - - def _decode_json_pointer(self, pointer): - """Parses a json pointer. Returns a pointer as a string. - - Json Pointers are defined in - http://tools.ietf.org/html/draft-pbryan-zyp-json-pointer . - The pointers use '/' for separation between object attributes. - A '/' character in an attribute name is encoded as "~1" and - a '~' character is encoded as "~0". - """ - self._check_for_path_errors(pointer) - ret = [] - for part in pointer.lstrip('/').split('/'): - ret.append(part.replace('~1', '/').replace('~0', '~').strip()) - return '/'.join(ret) diff --git a/code/daisy/daisy/openstack/__init__.py b/code/daisy/daisy/openstack/__init__.py deleted file mode 100755 index e69de29b..00000000 diff --git a/code/daisy/daisy/openstack/common/README b/code/daisy/daisy/openstack/common/README deleted file mode 100755 index 04a61664..00000000 --- a/code/daisy/daisy/openstack/common/README +++ /dev/null @@ -1,16 +0,0 @@ -oslo-incubator --------------- - -A number of modules from oslo-incubator are imported into this project. -You can clone the oslo-incubator repository using the following url: - - git://git.openstack.org/openstack/oslo-incubator - -These modules are "incubating" in oslo-incubator and are kept in sync -with the help of oslo-incubator's update.py script. See: - - https://wiki.openstack.org/wiki/Oslo#Syncing_Code_from_Incubator - -The copy of the code should never be directly modified here. Please -always update oslo-incubator first and then run the script to copy -the changes across. diff --git a/code/daisy/daisy/openstack/common/__init__.py b/code/daisy/daisy/openstack/common/__init__.py deleted file mode 100755 index e69de29b..00000000 diff --git a/code/daisy/daisy/openstack/common/_i18n.py b/code/daisy/daisy/openstack/common/_i18n.py deleted file mode 100755 index 2822a054..00000000 --- a/code/daisy/daisy/openstack/common/_i18n.py +++ /dev/null @@ -1,45 +0,0 @@ -# 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. - -"""oslo.i18n integration module. - -See http://docs.openstack.org/developer/oslo.i18n/usage.html - -""" - -try: - import oslo_i18n - - # NOTE(dhellmann): This reference to o-s-l-o will be replaced by the - # application name when this module is synced into the separate - # repository. It is OK to have more than one translation function - # using the same domain, since there will still only be one message - # catalog. - _translators = oslo_i18n.TranslatorFactory(domain='glance') - - # The primary translation function using the well-known name "_" - _ = _translators.primary - - # Translators for log levels. - # - # The abbreviated names are meant to reflect the usual use of a short - # name like '_'. The "L" is for "log" and the other letter comes from - # the level. - _LI = _translators.log_info - _LW = _translators.log_warning - _LE = _translators.log_error - _LC = _translators.log_critical -except ImportError: - # NOTE(dims): Support for cases where a project wants to use - # code from oslo-incubator, but is not ready to be internationalized - # (like tempest) - _ = _LI = _LW = _LE = _LC = lambda x: x diff --git a/code/daisy/daisy/openstack/common/eventlet_backdoor.py b/code/daisy/daisy/openstack/common/eventlet_backdoor.py deleted file mode 100755 index 4eae75eb..00000000 --- a/code/daisy/daisy/openstack/common/eventlet_backdoor.py +++ /dev/null @@ -1,151 +0,0 @@ -# Copyright (c) 2012 OpenStack Foundation. -# Administrator of the National Aeronautics and Space Administration. -# All Rights Reserved. -# -# 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. - -from __future__ import print_function - -import copy -import errno -import gc -import logging -import os -import pprint -import socket -import sys -import traceback - -import eventlet.backdoor -import greenlet -from oslo_config import cfg - -from daisy.openstack.common._i18n import _LI - -help_for_backdoor_port = ( - "Acceptable values are 0, , and :, where 0 results " - "in listening on a random tcp port number; results in listening " - "on the specified port number (and not enabling backdoor if that port " - "is in use); and : results in listening on the smallest " - "unused port number within the specified range of port numbers. The " - "chosen port is displayed in the service's log file.") -eventlet_backdoor_opts = [ - cfg.StrOpt('backdoor_port', - help="Enable eventlet backdoor. %s" % help_for_backdoor_port) -] - -CONF = cfg.CONF -CONF.register_opts(eventlet_backdoor_opts) -LOG = logging.getLogger(__name__) - - -def list_opts(): - """Entry point for oslo-config-generator. - """ - return [(None, copy.deepcopy(eventlet_backdoor_opts))] - - -class EventletBackdoorConfigValueError(Exception): - def __init__(self, port_range, help_msg, ex): - msg = ('Invalid backdoor_port configuration %(range)s: %(ex)s. ' - '%(help)s' % - {'range': port_range, 'ex': ex, 'help': help_msg}) - super(EventletBackdoorConfigValueError, self).__init__(msg) - self.port_range = port_range - - -def _dont_use_this(): - print("Don't use this, just disconnect instead") - - -def _find_objects(t): - return [o for o in gc.get_objects() if isinstance(o, t)] - - -def _print_greenthreads(): - for i, gt in enumerate(_find_objects(greenlet.greenlet)): - print(i, gt) - traceback.print_stack(gt.gr_frame) - print() - - -def _print_nativethreads(): - for threadId, stack in sys._current_frames().items(): - print(threadId) - traceback.print_stack(stack) - print() - - -def _parse_port_range(port_range): - if ':' not in port_range: - start, end = port_range, port_range - else: - start, end = port_range.split(':', 1) - try: - start, end = int(start), int(end) - if end < start: - raise ValueError - return start, end - except ValueError as ex: - raise EventletBackdoorConfigValueError(port_range, ex, - help_for_backdoor_port) - - -def _listen(host, start_port, end_port, listen_func): - try_port = start_port - while True: - try: - return listen_func((host, try_port)) - except socket.error as exc: - if (exc.errno != errno.EADDRINUSE or - try_port >= end_port): - raise - try_port += 1 - - -def initialize_if_enabled(): - backdoor_locals = { - 'exit': _dont_use_this, # So we don't exit the entire process - 'quit': _dont_use_this, # So we don't exit the entire process - 'fo': _find_objects, - 'pgt': _print_greenthreads, - 'pnt': _print_nativethreads, - } - - if CONF.backdoor_port is None: - return None - - start_port, end_port = _parse_port_range(str(CONF.backdoor_port)) - - # NOTE(johannes): The standard sys.displayhook will print the value of - # the last expression and set it to __builtin__._, which overwrites - # the __builtin__._ that gettext sets. Let's switch to using pprint - # since it won't interact poorly with gettext, and it's easier to - # read the output too. - def displayhook(val): - if val is not None: - pprint.pprint(val) - sys.displayhook = displayhook - - sock = _listen('localhost', start_port, end_port, eventlet.listen) - - # In the case of backdoor port being zero, a port number is assigned by - # listen(). In any case, pull the port number out here. - port = sock.getsockname()[1] - LOG.info( - _LI('Eventlet backdoor listening on %(port)s for process %(pid)d') % - {'port': port, 'pid': os.getpid()} - ) - eventlet.spawn_n(eventlet.backdoor.backdoor_server, sock, - locals=backdoor_locals) - return port diff --git a/code/daisy/daisy/openstack/common/fileutils.py b/code/daisy/daisy/openstack/common/fileutils.py deleted file mode 100755 index 9097c35d..00000000 --- a/code/daisy/daisy/openstack/common/fileutils.py +++ /dev/null @@ -1,149 +0,0 @@ -# Copyright 2011 OpenStack Foundation. -# All Rights Reserved. -# -# 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 contextlib -import errno -import logging -import os -import stat -import tempfile - -from oslo_utils import excutils - -LOG = logging.getLogger(__name__) - -_FILE_CACHE = {} -DEFAULT_MODE = stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO - - -def ensure_tree(path, mode=DEFAULT_MODE): - """Create a directory (and any ancestor directories required) - - :param path: Directory to create - :param mode: Directory creation permissions - """ - try: - os.makedirs(path, mode) - except OSError as exc: - if exc.errno == errno.EEXIST: - if not os.path.isdir(path): - raise - else: - raise - - -def read_cached_file(filename, force_reload=False): - """Read from a file if it has been modified. - - :param force_reload: Whether to reload the file. - :returns: A tuple with a boolean specifying if the data is fresh - or not. - """ - global _FILE_CACHE - - if force_reload: - delete_cached_file(filename) - - reloaded = False - mtime = os.path.getmtime(filename) - cache_info = _FILE_CACHE.setdefault(filename, {}) - - if not cache_info or mtime > cache_info.get('mtime', 0): - LOG.debug("Reloading cached file %s" % filename) - with open(filename) as fap: - cache_info['data'] = fap.read() - cache_info['mtime'] = mtime - reloaded = True - return (reloaded, cache_info['data']) - - -def delete_cached_file(filename): - """Delete cached file if present. - - :param filename: filename to delete - """ - global _FILE_CACHE - - if filename in _FILE_CACHE: - del _FILE_CACHE[filename] - - -def delete_if_exists(path, remove=os.unlink): - """Delete a file, but ignore file not found error. - - :param path: File to delete - :param remove: Optional function to remove passed path - """ - - try: - remove(path) - except OSError as e: - if e.errno != errno.ENOENT: - raise - - -@contextlib.contextmanager -def remove_path_on_error(path, remove=delete_if_exists): - """Protect code that wants to operate on PATH atomically. - Any exception will cause PATH to be removed. - - :param path: File to work with - :param remove: Optional function to remove passed path - """ - - try: - yield - except Exception: - with excutils.save_and_reraise_exception(): - remove(path) - - -def file_open(*args, **kwargs): - """Open file - - see built-in open() documentation for more details - - Note: The reason this is kept in a separate module is to easily - be able to provide a stub module that doesn't alter system - state at all (for unit tests) - """ - return open(*args, **kwargs) - - -def write_to_tempfile(content, path=None, suffix='', prefix='tmp'): - """Create temporary file or use existing file. - - This util is needed for creating temporary file with - specified content, suffix and prefix. If path is not None, - it will be used for writing content. If the path doesn't - exist it'll be created. - - :param content: content for temporary file. - :param path: same as parameter 'dir' for mkstemp - :param suffix: same as parameter 'suffix' for mkstemp - :param prefix: same as parameter 'prefix' for mkstemp - - For example: it can be used in database tests for creating - configuration files. - """ - if path: - ensure_tree(path) - - (fd, path) = tempfile.mkstemp(suffix=suffix, dir=path, prefix=prefix) - try: - os.write(fd, content) - finally: - os.close(fd) - return path diff --git a/code/daisy/daisy/openstack/common/local.py b/code/daisy/daisy/openstack/common/local.py deleted file mode 100755 index 0819d5b9..00000000 --- a/code/daisy/daisy/openstack/common/local.py +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright 2011 OpenStack Foundation. -# All Rights Reserved. -# -# 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. - -"""Local storage of variables using weak references""" - -import threading -import weakref - - -class WeakLocal(threading.local): - def __getattribute__(self, attr): - rval = super(WeakLocal, self).__getattribute__(attr) - if rval: - # NOTE(mikal): this bit is confusing. What is stored is a weak - # reference, not the value itself. We therefore need to lookup - # the weak reference and return the inner value here. - rval = rval() - return rval - - def __setattr__(self, attr, value): - value = weakref.ref(value) - return super(WeakLocal, self).__setattr__(attr, value) - - -# NOTE(mikal): the name "store" should be deprecated in the future -store = WeakLocal() - -# A "weak" store uses weak references and allows an object to fall out of scope -# when it falls out of scope in the code that uses the thread local storage. A -# "strong" store will hold a reference to the object so that it never falls out -# of scope. -weak_store = WeakLocal() -strong_store = threading.local() diff --git a/code/daisy/daisy/openstack/common/loopingcall.py b/code/daisy/daisy/openstack/common/loopingcall.py deleted file mode 100755 index 655f2a29..00000000 --- a/code/daisy/daisy/openstack/common/loopingcall.py +++ /dev/null @@ -1,147 +0,0 @@ -# Copyright 2010 United States Government as represented by the -# Administrator of the National Aeronautics and Space Administration. -# Copyright 2011 Justin Santa Barbara -# All Rights Reserved. -# -# 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 sys -import time - -from eventlet import event -from eventlet import greenthread - -from daisy.openstack.common._i18n import _LE, _LW - -LOG = logging.getLogger(__name__) - -# NOTE(zyluo): This lambda function was declared to avoid mocking collisions -# with time.time() called in the standard logging module -# during unittests. -_ts = lambda: time.time() - - -class LoopingCallDone(Exception): - """Exception to break out and stop a LoopingCallBase. - - The poll-function passed to LoopingCallBase can raise this exception to - break out of the loop normally. This is somewhat analogous to - StopIteration. - - An optional return-value can be included as the argument to the exception; - this return-value will be returned by LoopingCallBase.wait() - - """ - - def __init__(self, retvalue=True): - """:param retvalue: Value that LoopingCallBase.wait() should return.""" - self.retvalue = retvalue - - -class LoopingCallBase(object): - def __init__(self, f=None, *args, **kw): - self.args = args - self.kw = kw - self.f = f - self._running = False - self.done = None - - def stop(self): - self._running = False - - def wait(self): - return self.done.wait() - - -class FixedIntervalLoopingCall(LoopingCallBase): - """A fixed interval looping call.""" - - def start(self, interval, initial_delay=None): - self._running = True - done = event.Event() - - def _inner(): - if initial_delay: - greenthread.sleep(initial_delay) - - try: - while self._running: - start = _ts() - self.f(*self.args, **self.kw) - end = _ts() - if not self._running: - break - delay = end - start - interval - if delay > 0: - LOG.warn(_LW('task %(func_name)r run outlasted ' - 'interval by %(delay).2f sec'), - {'func_name': self.f, 'delay': delay}) - greenthread.sleep(-delay if delay < 0 else 0) - except LoopingCallDone as e: - self.stop() - done.send(e.retvalue) - except Exception: - LOG.exception(_LE('in fixed duration looping call')) - done.send_exception(*sys.exc_info()) - return - else: - done.send(True) - - self.done = done - - greenthread.spawn_n(_inner) - return self.done - - -class DynamicLoopingCall(LoopingCallBase): - """A looping call which sleeps until the next known event. - - The function called should return how long to sleep for before being - called again. - """ - - def start(self, initial_delay=None, periodic_interval_max=None): - self._running = True - done = event.Event() - - def _inner(): - if initial_delay: - greenthread.sleep(initial_delay) - - try: - while self._running: - idle = self.f(*self.args, **self.kw) - if not self._running: - break - - if periodic_interval_max is not None: - idle = min(idle, periodic_interval_max) - LOG.debug('Dynamic looping call %(func_name)r sleeping ' - 'for %(idle).02f seconds', - {'func_name': self.f, 'idle': idle}) - greenthread.sleep(idle) - except LoopingCallDone as e: - self.stop() - done.send(e.retvalue) - except Exception: - LOG.exception(_LE('in dynamic looping call')) - done.send_exception(*sys.exc_info()) - return - else: - done.send(True) - - self.done = done - - greenthread.spawn(_inner) - return self.done diff --git a/code/daisy/daisy/openstack/common/service.py b/code/daisy/daisy/openstack/common/service.py deleted file mode 100755 index ccf76172..00000000 --- a/code/daisy/daisy/openstack/common/service.py +++ /dev/null @@ -1,495 +0,0 @@ -# Copyright 2010 United States Government as represented by the -# Administrator of the National Aeronautics and Space Administration. -# Copyright 2011 Justin Santa Barbara -# All Rights Reserved. -# -# 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. - -"""Generic Node base class for all workers that run on hosts.""" - -import errno -import logging -import os -import random -import signal -import sys -import time - -try: - # Importing just the symbol here because the io module does not - # exist in Python 2.6. - from io import UnsupportedOperation # noqa -except ImportError: - # Python 2.6 - UnsupportedOperation = None - -import eventlet -from eventlet import event -from oslo_config import cfg - -from daisy.openstack.common import eventlet_backdoor -from daisy.openstack.common._i18n import _LE, _LI, _LW -from daisy.openstack.common import systemd -from daisy.openstack.common import threadgroup - - -CONF = cfg.CONF -LOG = logging.getLogger(__name__) - - -def _sighup_supported(): - return hasattr(signal, 'SIGHUP') - - -def _is_daemon(): - # The process group for a foreground process will match the - # process group of the controlling terminal. If those values do - # not match, or ioctl() fails on the stdout file handle, we assume - # the process is running in the background as a daemon. - # http://www.gnu.org/software/bash/manual/bashref.html#Job-Control-Basics - try: - is_daemon = os.getpgrp() != os.tcgetpgrp(sys.stdout.fileno()) - except OSError as err: - if err.errno == errno.ENOTTY: - # Assume we are a daemon because there is no terminal. - is_daemon = True - else: - raise - except UnsupportedOperation: - # Could not get the fileno for stdout, so we must be a daemon. - is_daemon = True - return is_daemon - - -def _is_sighup_and_daemon(signo): - if not (_sighup_supported() and signo == signal.SIGHUP): - # Avoid checking if we are a daemon, because the signal isn't - # SIGHUP. - return False - return _is_daemon() - - -def _signo_to_signame(signo): - signals = {signal.SIGTERM: 'SIGTERM', - signal.SIGINT: 'SIGINT'} - if _sighup_supported(): - signals[signal.SIGHUP] = 'SIGHUP' - return signals[signo] - - -def _set_signals_handler(handler): - signal.signal(signal.SIGTERM, handler) - signal.signal(signal.SIGINT, handler) - if _sighup_supported(): - signal.signal(signal.SIGHUP, handler) - - -class Launcher(object): - """Launch one or more services and wait for them to complete.""" - - def __init__(self): - """Initialize the service launcher. - - :returns: None - - """ - self.services = Services() - self.backdoor_port = eventlet_backdoor.initialize_if_enabled() - - def launch_service(self, service): - """Load and start the given service. - - :param service: The service you would like to start. - :returns: None - - """ - service.backdoor_port = self.backdoor_port - self.services.add(service) - - def stop(self): - """Stop all services which are currently running. - - :returns: None - - """ - self.services.stop() - - def wait(self): - """Waits until all services have been stopped, and then returns. - - :returns: None - - """ - self.services.wait() - - def restart(self): - """Reload config files and restart service. - - :returns: None - - """ - cfg.CONF.reload_config_files() - self.services.restart() - - -class SignalExit(SystemExit): - def __init__(self, signo, exccode=1): - super(SignalExit, self).__init__(exccode) - self.signo = signo - - -class ServiceLauncher(Launcher): - def _handle_signal(self, signo, frame): - # Allow the process to be killed again and die from natural causes - _set_signals_handler(signal.SIG_DFL) - raise SignalExit(signo) - - def handle_signal(self): - _set_signals_handler(self._handle_signal) - - def _wait_for_exit_or_signal(self, ready_callback=None): - status = None - signo = 0 - - LOG.debug('Full set of CONF:') - CONF.log_opt_values(LOG, logging.DEBUG) - - try: - if ready_callback: - ready_callback() - super(ServiceLauncher, self).wait() - except SignalExit as exc: - signame = _signo_to_signame(exc.signo) - LOG.info(_LI('Caught %s, exiting'), signame) - status = exc.code - signo = exc.signo - except SystemExit as exc: - status = exc.code - finally: - self.stop() - - return status, signo - - def wait(self, ready_callback=None): - systemd.notify_once() - while True: - self.handle_signal() - status, signo = self._wait_for_exit_or_signal(ready_callback) - if not _is_sighup_and_daemon(signo): - return status - self.restart() - - -class ServiceWrapper(object): - def __init__(self, service, workers): - self.service = service - self.workers = workers - self.children = set() - self.forktimes = [] - - -class ProcessLauncher(object): - def __init__(self): - """Constructor.""" - - self.children = {} - self.sigcaught = None - self.running = True - rfd, self.writepipe = os.pipe() - self.readpipe = eventlet.greenio.GreenPipe(rfd, 'r') - self.handle_signal() - - def handle_signal(self): - _set_signals_handler(self._handle_signal) - - def _handle_signal(self, signo, frame): - self.sigcaught = signo - self.running = False - - # Allow the process to be killed again and die from natural causes - _set_signals_handler(signal.SIG_DFL) - - def _pipe_watcher(self): - # This will block until the write end is closed when the parent - # dies unexpectedly - self.readpipe.read() - - LOG.info(_LI('Parent process has died unexpectedly, exiting')) - - sys.exit(1) - - def _child_process_handle_signal(self): - # Setup child signal handlers differently - def _sigterm(*args): - signal.signal(signal.SIGTERM, signal.SIG_DFL) - raise SignalExit(signal.SIGTERM) - - def _sighup(*args): - signal.signal(signal.SIGHUP, signal.SIG_DFL) - raise SignalExit(signal.SIGHUP) - - signal.signal(signal.SIGTERM, _sigterm) - if _sighup_supported(): - signal.signal(signal.SIGHUP, _sighup) - # Block SIGINT and let the parent send us a SIGTERM - signal.signal(signal.SIGINT, signal.SIG_IGN) - - def _child_wait_for_exit_or_signal(self, launcher): - status = 0 - signo = 0 - - # NOTE(johannes): All exceptions are caught to ensure this - # doesn't fallback into the loop spawning children. It would - # be bad for a child to spawn more children. - try: - launcher.wait() - except SignalExit as exc: - signame = _signo_to_signame(exc.signo) - LOG.info(_LI('Child caught %s, exiting'), signame) - status = exc.code - signo = exc.signo - except SystemExit as exc: - status = exc.code - except BaseException: - LOG.exception(_LE('Unhandled exception')) - status = 2 - finally: - launcher.stop() - - return status, signo - - def _child_process(self, service): - self._child_process_handle_signal() - - # Reopen the eventlet hub to make sure we don't share an epoll - # fd with parent and/or siblings, which would be bad - eventlet.hubs.use_hub() - - # Close write to ensure only parent has it open - os.close(self.writepipe) - # Create greenthread to watch for parent to close pipe - eventlet.spawn_n(self._pipe_watcher) - - # Reseed random number generator - random.seed() - - launcher = Launcher() - launcher.launch_service(service) - return launcher - - def _start_child(self, wrap): - if len(wrap.forktimes) > wrap.workers: - # Limit ourselves to one process a second (over the period of - # number of workers * 1 second). This will allow workers to - # start up quickly but ensure we don't fork off children that - # die instantly too quickly. - if time.time() - wrap.forktimes[0] < wrap.workers: - LOG.info(_LI('Forking too fast, sleeping')) - time.sleep(1) - - wrap.forktimes.pop(0) - - wrap.forktimes.append(time.time()) - - pid = os.fork() - if pid == 0: - launcher = self._child_process(wrap.service) - while True: - self._child_process_handle_signal() - status, signo = self._child_wait_for_exit_or_signal(launcher) - if not _is_sighup_and_daemon(signo): - break - launcher.restart() - - os._exit(status) - - LOG.info(_LI('Started child %d'), pid) - - wrap.children.add(pid) - self.children[pid] = wrap - - return pid - - def launch_service(self, service, workers=1): - wrap = ServiceWrapper(service, workers) - - LOG.info(_LI('Starting %d workers'), wrap.workers) - while self.running and len(wrap.children) < wrap.workers: - self._start_child(wrap) - - def _wait_child(self): - try: - # Block while any of child processes have exited - pid, status = os.waitpid(0, 0) - if not pid: - return None - except OSError as exc: - if exc.errno not in (errno.EINTR, errno.ECHILD): - raise - return None - - if os.WIFSIGNALED(status): - sig = os.WTERMSIG(status) - LOG.info(_LI('Child %(pid)d killed by signal %(sig)d'), - dict(pid=pid, sig=sig)) - else: - code = os.WEXITSTATUS(status) - LOG.info(_LI('Child %(pid)s exited with status %(code)d'), - dict(pid=pid, code=code)) - - if pid not in self.children: - LOG.warning(_LW('pid %d not in child list'), pid) - return None - - wrap = self.children.pop(pid) - wrap.children.remove(pid) - return wrap - - def _respawn_children(self): - while self.running: - wrap = self._wait_child() - if not wrap: - continue - while self.running and len(wrap.children) < wrap.workers: - self._start_child(wrap) - - def wait(self): - """Loop waiting on children to die and respawning as necessary.""" - - systemd.notify_once() - LOG.debug('Full set of CONF:') - CONF.log_opt_values(LOG, logging.DEBUG) - - try: - while True: - self.handle_signal() - self._respawn_children() - # No signal means that stop was called. Don't clean up here. - if not self.sigcaught: - return - - signame = _signo_to_signame(self.sigcaught) - LOG.info(_LI('Caught %s, stopping children'), signame) - if not _is_sighup_and_daemon(self.sigcaught): - break - - for pid in self.children: - os.kill(pid, signal.SIGHUP) - self.running = True - self.sigcaught = None - except eventlet.greenlet.GreenletExit: - LOG.info(_LI("Wait called after thread killed. Cleaning up.")) - - self.stop() - - def stop(self): - """Terminate child processes and wait on each.""" - self.running = False - for pid in self.children: - try: - os.kill(pid, signal.SIGTERM) - except OSError as exc: - if exc.errno != errno.ESRCH: - raise - - # Wait for children to die - if self.children: - LOG.info(_LI('Waiting on %d children to exit'), len(self.children)) - while self.children: - self._wait_child() - - -class Service(object): - """Service object for binaries running on hosts.""" - - def __init__(self, threads=1000): - self.tg = threadgroup.ThreadGroup(threads) - - # signal that the service is done shutting itself down: - self._done = event.Event() - - def reset(self): - # NOTE(Fengqian): docs for Event.reset() recommend against using it - self._done = event.Event() - - def start(self): - pass - - def stop(self, graceful=False): - self.tg.stop(graceful) - self.tg.wait() - # Signal that service cleanup is done: - if not self._done.ready(): - self._done.send() - - def wait(self): - self._done.wait() - - -class Services(object): - - def __init__(self): - self.services = [] - self.tg = threadgroup.ThreadGroup() - self.done = event.Event() - - def add(self, service): - self.services.append(service) - self.tg.add_thread(self.run_service, service, self.done) - - def stop(self): - # wait for graceful shutdown of services: - for service in self.services: - service.stop() - service.wait() - - # Each service has performed cleanup, now signal that the run_service - # wrapper threads can now die: - if not self.done.ready(): - self.done.send() - - # reap threads: - self.tg.stop() - - def wait(self): - self.tg.wait() - - def restart(self): - self.stop() - self.done = event.Event() - for restart_service in self.services: - restart_service.reset() - self.tg.add_thread(self.run_service, restart_service, self.done) - - @staticmethod - def run_service(service, done): - """Service start wrapper. - - :param service: service to run - :param done: event to wait on until a shutdown is triggered - :returns: None - - """ - service.start() - done.wait() - - -def launch(service, workers=1): - if workers is None or workers == 1: - launcher = ServiceLauncher() - launcher.launch_service(service) - else: - launcher = ProcessLauncher() - launcher.launch_service(service, workers=workers) - - return launcher diff --git a/code/daisy/daisy/openstack/common/systemd.py b/code/daisy/daisy/openstack/common/systemd.py deleted file mode 100755 index 36243b34..00000000 --- a/code/daisy/daisy/openstack/common/systemd.py +++ /dev/null @@ -1,105 +0,0 @@ -# Copyright 2012-2014 Red Hat, Inc. -# -# 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. - -""" -Helper module for systemd service readiness notification. -""" - -import logging -import os -import socket -import sys - - -LOG = logging.getLogger(__name__) - - -def _abstractify(socket_name): - if socket_name.startswith('@'): - # abstract namespace socket - socket_name = '\0%s' % socket_name[1:] - return socket_name - - -def _sd_notify(unset_env, msg): - notify_socket = os.getenv('NOTIFY_SOCKET') - if notify_socket: - sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) - try: - sock.connect(_abstractify(notify_socket)) - sock.sendall(msg) - if unset_env: - del os.environ['NOTIFY_SOCKET'] - except EnvironmentError: - LOG.debug("Systemd notification failed", exc_info=True) - finally: - sock.close() - - -def notify(): - """Send notification to Systemd that service is ready. - - For details see - http://www.freedesktop.org/software/systemd/man/sd_notify.html - """ - _sd_notify(False, 'READY=1') - - -def notify_once(): - """Send notification once to Systemd that service is ready. - - Systemd sets NOTIFY_SOCKET environment variable with the name of the - socket listening for notifications from services. - This method removes the NOTIFY_SOCKET environment variable to ensure - notification is sent only once. - """ - _sd_notify(True, 'READY=1') - - -def onready(notify_socket, timeout): - """Wait for systemd style notification on the socket. - - :param notify_socket: local socket address - :type notify_socket: string - :param timeout: socket timeout - :type timeout: float - :returns: 0 service ready - 1 service not ready - 2 timeout occurred - """ - sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) - sock.settimeout(timeout) - sock.bind(_abstractify(notify_socket)) - try: - msg = sock.recv(512) - except socket.timeout: - return 2 - finally: - sock.close() - if 'READY=1' in msg: - return 0 - else: - return 1 - - -if __name__ == '__main__': - # simple CLI for testing - if len(sys.argv) == 1: - notify() - elif len(sys.argv) >= 2: - timeout = float(sys.argv[1]) - notify_socket = os.getenv('NOTIFY_SOCKET') - if notify_socket: - retval = onready(notify_socket, timeout) - sys.exit(retval) diff --git a/code/daisy/daisy/openstack/common/threadgroup.py b/code/daisy/daisy/openstack/common/threadgroup.py deleted file mode 100755 index 4561d2c5..00000000 --- a/code/daisy/daisy/openstack/common/threadgroup.py +++ /dev/null @@ -1,149 +0,0 @@ -# Copyright 2012 Red Hat, Inc. -# -# 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 threading - -import eventlet -from eventlet import greenpool - -from daisy.openstack.common import loopingcall - - -LOG = logging.getLogger(__name__) - - -def _thread_done(gt, *args, **kwargs): - """Callback function to be passed to GreenThread.link() when we spawn() - Calls the :class:`ThreadGroup` to notify if. - - """ - kwargs['group'].thread_done(kwargs['thread']) - - -class Thread(object): - """Wrapper around a greenthread, that holds a reference to the - :class:`ThreadGroup`. The Thread will notify the :class:`ThreadGroup` when - it has done so it can be removed from the threads list. - """ - def __init__(self, thread, group): - self.thread = thread - self.thread.link(_thread_done, group=group, thread=self) - - def stop(self): - self.thread.kill() - - def wait(self): - return self.thread.wait() - - def link(self, func, *args, **kwargs): - self.thread.link(func, *args, **kwargs) - - -class ThreadGroup(object): - """The point of the ThreadGroup class is to: - - * keep track of timers and greenthreads (making it easier to stop them - when need be). - * provide an easy API to add timers. - """ - def __init__(self, thread_pool_size=10): - self.pool = greenpool.GreenPool(thread_pool_size) - self.threads = [] - self.timers = [] - - def add_dynamic_timer(self, callback, initial_delay=None, - periodic_interval_max=None, *args, **kwargs): - timer = loopingcall.DynamicLoopingCall(callback, *args, **kwargs) - timer.start(initial_delay=initial_delay, - periodic_interval_max=periodic_interval_max) - self.timers.append(timer) - - def add_timer(self, interval, callback, initial_delay=None, - *args, **kwargs): - pulse = loopingcall.FixedIntervalLoopingCall(callback, *args, **kwargs) - pulse.start(interval=interval, - initial_delay=initial_delay) - self.timers.append(pulse) - - def add_thread(self, callback, *args, **kwargs): - gt = self.pool.spawn(callback, *args, **kwargs) - th = Thread(gt, self) - self.threads.append(th) - return th - - def thread_done(self, thread): - self.threads.remove(thread) - - def _stop_threads(self): - current = threading.current_thread() - - # Iterate over a copy of self.threads so thread_done doesn't - # modify the list while we're iterating - for x in self.threads[:]: - if x is current: - # don't kill the current thread. - continue - try: - x.stop() - except eventlet.greenlet.GreenletExit: - pass - except Exception as ex: - LOG.exception(ex) - - def stop_timers(self): - for x in self.timers: - try: - x.stop() - except Exception as ex: - LOG.exception(ex) - self.timers = [] - - def stop(self, graceful=False): - """stop function has the option of graceful=True/False. - - * In case of graceful=True, wait for all threads to be finished. - Never kill threads. - * In case of graceful=False, kill threads immediately. - """ - self.stop_timers() - if graceful: - # In case of graceful=True, wait for all threads to be - # finished, never kill threads - self.wait() - else: - # In case of graceful=False(Default), kill threads - # immediately - self._stop_threads() - - def wait(self): - for x in self.timers: - try: - x.wait() - except eventlet.greenlet.GreenletExit: - pass - except Exception as ex: - LOG.exception(ex) - current = threading.current_thread() - - # Iterate over a copy of self.threads so thread_done doesn't - # modify the list while we're iterating - for x in self.threads[:]: - if x is current: - continue - try: - x.wait() - except eventlet.greenlet.GreenletExit: - pass - except Exception as ex: - LOG.exception(ex) diff --git a/code/daisy/openstack-common.conf b/code/daisy/openstack-common.conf deleted file mode 100755 index b149287f..00000000 --- a/code/daisy/openstack-common.conf +++ /dev/null @@ -1,8 +0,0 @@ -[DEFAULT] - -# The list of modules to copy from oslo-incubator -module=install_venv_common -module=service - -# The base module to hold the copy of openstack.common -base=daisy diff --git a/code/daisy/rally-jobs/README.rst b/code/daisy/rally-jobs/README.rst deleted file mode 100755 index fc822c8f..00000000 --- a/code/daisy/rally-jobs/README.rst +++ /dev/null @@ -1,30 +0,0 @@ -Rally job related files -======================= - -This directory contains rally tasks and plugins that are run by OpenStack CI. - -Structure ---------- - -* plugins - directory where you can add rally plugins. Almost everything in - Rally is a plugin. Benchmark context, Benchmark scenario, SLA checks, Generic - cleanup resources, .... - -* extra - all files from this directory will be copy pasted to gates, so you - are able to use absolute paths in rally tasks. - Files will be located in ~/.rally/extra/* - -* glance.yaml is a task that is run in gates against OpenStack (nova network) - deployed by DevStack - - -Useful links ------------- - -* More about Rally: https://rally.readthedocs.org/en/latest/ - -* How to add rally-gates: https://rally.readthedocs.org/en/latest/rally_gatejob.html - -* About plugins: https://rally.readthedocs.org/en/latest/plugins.html - -* Plugin samples: https://github.com/stackforge/rally/tree/master/doc/samples/plugins \ No newline at end of file diff --git a/code/daisy/rally-jobs/extra/README.rst b/code/daisy/rally-jobs/extra/README.rst deleted file mode 100755 index 836f35a0..00000000 --- a/code/daisy/rally-jobs/extra/README.rst +++ /dev/null @@ -1,5 +0,0 @@ -Extra files -=========== - -All files from this directory will be copy pasted to gates, so you are able to -use absolute path in rally tasks. Files will be in ~/.rally/extra/* diff --git a/code/daisy/rally-jobs/extra/fake.img b/code/daisy/rally-jobs/extra/fake.img deleted file mode 100755 index e69de29b..00000000 diff --git a/code/daisy/rally-jobs/glance.yaml b/code/daisy/rally-jobs/glance.yaml deleted file mode 100755 index 8e5db0e9..00000000 --- a/code/daisy/rally-jobs/glance.yaml +++ /dev/null @@ -1,45 +0,0 @@ ---- - GlanceImages.create_and_list_image: - - - args: - image_location: "http://download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-disk.img" - container_format: "bare" - disk_format: "qcow2" - runner: - type: "constant" - times: 20 - concurrency: 5 - context: - users: - tenants: 1 - users_per_tenant: 1 - - GlanceImages.create_and_delete_image: - - - args: - image_location: "http://download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-disk.img" - container_format: "bare" - disk_format: "qcow2" - runner: - type: "constant" - times: 20 - concurrency: 5 - context: - users: - tenants: 5 - users_per_tenant: 2 - - GlancePlugin.create_and_list: - - - args: - image_location: "~/.rally/extra/fake.img" - container_format: "bare" - disk_format: "qcow2" - runner: - type: "constant" - times: 700 - concurrency: 7 - context: - users: - tenants: 1 - users_per_tenant: 1 diff --git a/code/daisy/rally-jobs/plugins/README.rst b/code/daisy/rally-jobs/plugins/README.rst deleted file mode 100755 index 9b989240..00000000 --- a/code/daisy/rally-jobs/plugins/README.rst +++ /dev/null @@ -1,9 +0,0 @@ -Rally plugins -============= - -All *.py modules from this directory will be auto-loaded by Rally and all -plugins will be discoverable. There is no need of any extra configuration -and there is no difference between writing them here and in rally code base. - -Note that it is better to push all interesting and useful benchmarks to Rally -code base, this simplifies administration for Operators. \ No newline at end of file diff --git a/code/daisy/rally-jobs/plugins/plugin_sample.py b/code/daisy/rally-jobs/plugins/plugin_sample.py deleted file mode 100755 index 7a5676eb..00000000 --- a/code/daisy/rally-jobs/plugins/plugin_sample.py +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright 2014 Mirantis Inc. -# All Rights Reserved. -# -# 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. - -""" Sample of plugin for Glance. - -For more Glance related benchmarks take a look here: -github.com/stackforge/rally/blob/master/rally/benchmark/scenarios/glance/ - -About plugins: https://rally.readthedocs.org/en/latest/plugins.html - -Rally concepts https://wiki.openstack.org/wiki/Rally/Concepts -""" - -import os - -from rally.benchmark.scenarios import base -from rally.benchmark import utils as bench_utils - - -class GlancePlugin(base.Scenario): - - @base.atomic_action_timer("glance.create_image_label") - def _create_image(self, image_name, container_format, - image_location, disk_format, **kwargs): - """Create a new image. - - :param image_name: String used to name the image - :param container_format: Container format of image. - Acceptable formats: ami, ari, aki, bare, and ovf. - :param image_location: image file location used to upload - :param disk_format: Disk format of image. Acceptable formats: - ami, ari, aki, vhd, vmdk, raw, qcow2, vdi, and iso. - :param **kwargs: optional parameters to create image - - returns: object of image - """ - - kw = { - "name": image_name, - "container_format": container_format, - "disk_format": disk_format, - } - - kw.update(kwargs) - - try: - if os.path.isfile(os.path.expanduser(image_location)): - kw["data"] = open(os.path.expanduser(image_location)) - else: - kw["copy_from"] = image_location - - image = self.clients("glance").images.create(**kw) - - image = bench_utils.wait_for( - image, - is_ready=bench_utils.resource_is("active"), - update_resource=bench_utils.get_from_manager(), - timeout=100, - check_interval=0.5) - - finally: - if "data" in kw: - kw["data"].close() - - return image - - @base.atomic_action_timer("glance.list_images_label") - def _list_images(self): - return list(self.clients("glance").images.list()) - - @base.scenario(context={"cleanup": ["glance"]}) - def create_and_list(self, container_format, - image_location, disk_format, **kwargs): - self._create_image(self._generate_random_name(), - container_format, - image_location, - disk_format, - **kwargs) - self._list_images() diff --git a/code/daisy/requirements.txt b/code/daisy/requirements.txt index 45cf101c..f316ac03 100755 --- a/code/daisy/requirements.txt +++ b/code/daisy/requirements.txt @@ -2,7 +2,8 @@ # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. -pbr>=0.6,!=0.7,<1.0 +pbr>=1.6 # Apache-2.0 + # # The greenlet package must be compiled with gcc and needs # the Python.h headers. Make sure you install the python-dev @@ -30,14 +31,6 @@ stevedore>=1.3.0,<1.4.0 # Apache-2.0 taskflow>=0.7.1,<0.8.0 keystonemiddleware>=1.5.0,<1.6.0 WSME>=0.6 -# For openstack/common/lockutils -posix_ipc - -# For Swift storage backend. -python-swiftclient>=2.2.0,<2.5.0 - -# For VMware storage backed. -oslo_vmware>=0.11.1,<0.12.0 # Apache-2.0 # For paste.util.template used in keystone.common.template Paste @@ -54,12 +47,10 @@ oslo_log>=1.0.0,<1.1.0 # Apache-2.0 oslo_messaging>=1.8.0,<1.9.0 # Apache-2.0 oslo_policy>=0.3.1,<0.4.0 # Apache-2.0 oslo_serialization>=1.4.0,<1.5.0 # Apache-2.0 +oslo.service>=0.1.0 # Apache-2.0 retrying>=1.2.3,!=1.3.0 # Apache-2.0 osprofiler>=0.3.0 # Apache-2.0 -# Glance Store -glance_store>=0.3.0,<0.5.0 # Apache-2.0 - # Artifact repository semantic_version>=2.3.1