)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10725,"name":"Sergey Gotliv","email":"sgotliv@redhat.com","username":"sgotliv"},"change_message_id":"b9881e15d6f43d9b2295b3eef0418c15aef3d6c8","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-04-08 23:17:26 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Partially implements guest agent upgrade strategy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I9496e443cef5386f2e31f94ef408628c9e1ce128"},{"line_number":10,"context_line":"Implements: blueprint upgrade-guestagent"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAW3%2F%2F9jc%3D","line":8,"updated":"2014-04-09 08:21:55.000000000","message":"And what is the strategy? Is it written in any place?","commit_id":"754b4ea63883ea096f80ef3f3a13f40fa9c13df9"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"d646af756a009bc2dcd0bc0dc837c2760eb7f5bd","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-04-08 23:17:26 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Partially implements guest agent upgrade strategy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I9496e443cef5386f2e31f94ef408628c9e1ce128"},{"line_number":10,"context_line":"Implements: blueprint upgrade-guestagent"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAW3%2F%2F4D4%3D","line":8,"in_reply_to":"AAAAW3%2F%2F9jc%3D","updated":"2014-04-09 18:44:19.000000000","message":"Hey Sergey,\n\nThe strategy pattern was introduced in trove for a number of features that required different implementations.  This patch follows suit with that pattern.\n\nThe default strategy uses pip to install trove guest agent code.\nSwift is the default location for the package as was decided during the mid-cycle meetup.","commit_id":"754b4ea63883ea096f80ef3f3a13f40fa9c13df9"}],"etc/trove/trove-guestagent.conf.sample":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":70,"context_line":"backup_chunk_size \u003d 65536"},{"line_number":71,"context_line":"backup_segment_max_size \u003d 2147483648"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"# Properties for upgrade"},{"line_number":74,"context_line":"upgrade_strategy \u003d Pip"},{"line_number":75,"context_line":"upgrade_namespace \u003d  trove.guestagent.strategies.upgrade.pip"},{"line_number":76,"context_line":"upgrade_filepath \u003d /tmp/trove-upgrade"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAWH%2F9eIM%3D","line":73,"updated":"2014-04-04 09:56:05.000000000","message":"to be more presice, i think we should mention here all possible (at this point of time and future) strategies","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":70,"context_line":"backup_chunk_size \u003d 65536"},{"line_number":71,"context_line":"backup_segment_max_size \u003d 2147483648"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"# Properties for upgrade"},{"line_number":74,"context_line":"upgrade_strategy \u003d Pip"},{"line_number":75,"context_line":"upgrade_namespace \u003d  trove.guestagent.strategies.upgrade.pip"},{"line_number":76,"context_line":"upgrade_filepath \u003d /tmp/trove-upgrade"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAWH%2F9ZMw%3D","line":73,"in_reply_to":"AAAAWH%2F9eIM%3D","updated":"2014-04-04 20:39:48.000000000","message":"agreed","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"3ee8e9437a44a29d5261b871dd42bda3fbc11fed","unresolved":false,"context_lines":[{"line_number":77,"context_line":"guest_config_filepath \u003d /etc/trove"},{"line_number":78,"context_line":"guest_config_file \u003d trove-guestagent.conf"},{"line_number":79,"context_line":"upgrade_aes_cbc_key \u003d \"default_aes_cbc_key\""},{"line_number":80,"context_line":"# only necessary for private swift creds that don\u0027t belong to the tenant"},{"line_number":81,"context_line":"upgrade_swift_public_key \u003d default_upgrade_swift_public_key"},{"line_number":82,"context_line":"upgrade_swift_private_key \u003d defalut_upgrade_swift_private_key"},{"line_number":83,"context_line":"upgrade_swift_auth_url \u003d default_upgrade_swift_auth_url"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"AAAAW3%2F%2F0hg%3D","line":80,"updated":"2014-04-10 07:42:02.000000000","message":"i suggest to place this attributes to the anothe configuration group, because they are not strictly required, and can be avoided by the deployer.","commit_id":"cb8a30607187f65460edfe02ab56da10f471a06c"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"37b2ec45b9a7d0d377cb81734e649f0373f37b32","unresolved":false,"context_lines":[{"line_number":77,"context_line":"guest_config_filepath \u003d /etc/trove"},{"line_number":78,"context_line":"guest_config_file \u003d trove-guestagent.conf"},{"line_number":79,"context_line":"upgrade_aes_cbc_key \u003d \"default_aes_cbc_key\""},{"line_number":80,"context_line":"# only necessary for private swift creds that don\u0027t belong to the tenant"},{"line_number":81,"context_line":"upgrade_swift_public_key \u003d default_upgrade_swift_public_key"},{"line_number":82,"context_line":"upgrade_swift_private_key \u003d defalut_upgrade_swift_private_key"},{"line_number":83,"context_line":"upgrade_swift_auth_url \u003d default_upgrade_swift_auth_url"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"AAAAW3%2F%2FvfM%3D","line":80,"in_reply_to":"AAAAW3%2F%2F0hg%3D","updated":"2014-04-10 17:36:21.000000000","message":"k, I\u0027ll research that.","commit_id":"cb8a30607187f65460edfe02ab56da10f471a06c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":70,"context_line":"backup_chunk_size \u003d 65536"},{"line_number":71,"context_line":"backup_segment_max_size \u003d 2147483648"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"# Properties for upgrade strategy"},{"line_number":74,"context_line":"upgrade_strategy \u003d Pip"},{"line_number":75,"context_line":"upgrade_namespace \u003d  trove.guestagent.strategies.upgrade.pip"},{"line_number":76,"context_line":"upgrade_filepath \u003d /tmp"}],"source_content_type":"application/octet-stream","patch_set":24,"id":"AAAAXH%2F%2FDJ4%3D","line":73,"updated":"2014-04-24 11:44:22.000000000","message":"please write the small descrption about all strategies which are mentioned in this patch (pip, venv)","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"90f02299d2d21dbdcbbdae7eec28009ae71ea02b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"backup_chunk_size \u003d 65536"},{"line_number":71,"context_line":"backup_segment_max_size \u003d 2147483648"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"# Properties for upgrade strategy"},{"line_number":74,"context_line":"upgrade_strategy \u003d Pip"},{"line_number":75,"context_line":"upgrade_namespace \u003d  trove.guestagent.strategies.upgrade.pip"},{"line_number":76,"context_line":"upgrade_filepath \u003d /tmp"}],"source_content_type":"application/octet-stream","patch_set":24,"id":"AAAAXX%2F%2F90A%3D","line":73,"in_reply_to":"AAAAXH%2F%2FDJ4%3D","updated":"2014-04-24 23:51:54.000000000","message":"k, also going to make some of these constants in there respective strategy classes as per Tim.","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":76,"context_line":"upgrade_filepath \u003d /tmp"},{"line_number":77,"context_line":"guest_config_filepath \u003d /etc/trove"},{"line_number":78,"context_line":"guest_config_file \u003d trove-guestagent.conf"},{"line_number":79,"context_line":"upgrade_aes_cbc_key \u003d \"default_aes_cbc_key\""},{"line_number":80,"context_line":"# only necessary for private swift creds that don\u0027t belong to the tenant"},{"line_number":81,"context_line":"upgrade_swift_public_key \u003d default_upgrade_swift_public_key"},{"line_number":82,"context_line":"upgrade_swift_private_key \u003d defalut_upgrade_swift_private_key"}],"source_content_type":"application/octet-stream","patch_set":24,"id":"AAAAXH%2F%2FDJ0%3D","line":79,"updated":"2014-04-24 11:44:22.000000000","message":"use another password, that differes from backup_aes_cbc_key","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"90f02299d2d21dbdcbbdae7eec28009ae71ea02b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"upgrade_filepath \u003d /tmp"},{"line_number":77,"context_line":"guest_config_filepath \u003d /etc/trove"},{"line_number":78,"context_line":"guest_config_file \u003d trove-guestagent.conf"},{"line_number":79,"context_line":"upgrade_aes_cbc_key \u003d \"default_aes_cbc_key\""},{"line_number":80,"context_line":"# only necessary for private swift creds that don\u0027t belong to the tenant"},{"line_number":81,"context_line":"upgrade_swift_public_key \u003d default_upgrade_swift_public_key"},{"line_number":82,"context_line":"upgrade_swift_private_key \u003d defalut_upgrade_swift_private_key"}],"source_content_type":"application/octet-stream","patch_set":24,"id":"AAAAXX%2F%2F9z8%3D","line":79,"in_reply_to":"AAAAXH%2F%2FDJ0%3D","updated":"2014-04-24 23:51:54.000000000","message":"k","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"475ea30fa03009efddd42b462dd4aa369df9fdba","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"# Properties for upgrade strategy"},{"line_number":101,"context_line":"upgrade_strategy \u003d Pip"},{"line_number":102,"context_line":"upgrade_namespace \u003d  trove.guestagent.strategies.upgrade.pip"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"# Upgrade metadata properties"},{"line_number":105,"context_line":"upgrade_aes_cbc_key \u003d \"default_upgrade_aes_cbc_key\""}],"source_content_type":"application/octet-stream","patch_set":54,"id":"1ae5cdf2_e32c0105","line":102,"updated":"2014-06-02 21:34:01.000000000","message":"Will consolidate on the namespace following discussion with grapex.","commit_id":"557197c0d25799a517bdc1ec9d57e465d10b33b9"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":97,"context_line":"backup_chunk_size \u003d 65536"},{"line_number":98,"context_line":"backup_segment_max_size \u003d 2147483648"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"# Properties for upgrade strategy"},{"line_number":101,"context_line":"upgrade_namespace \u003d  trove.guestagent.strategies.upgrade.pip.Pip"},{"line_number":102,"context_line":"guestagent_version_source \u003d trove.guestagent.version.PipVersionSource"},{"line_number":103,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":66,"id":"baada198_c737814b","line":100,"updated":"2014-07-07 21:04:31.000000000","message":"see my comments in cfg.py (regarding the lack of a header).\n\nif a header is not introduced, i\u0027d like the upgrade_ prefix to instead be agent_upgrade_ or guestagent_upgrade_; it\u0027s far more explicit.","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":97,"context_line":"backup_chunk_size \u003d 65536"},{"line_number":98,"context_line":"backup_segment_max_size \u003d 2147483648"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"# Properties for upgrade strategy"},{"line_number":101,"context_line":"upgrade_namespace \u003d  trove.guestagent.strategies.upgrade.pip.Pip"},{"line_number":102,"context_line":"guestagent_version_source \u003d trove.guestagent.version.PipVersionSource"},{"line_number":103,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":66,"id":"baada198_8a080d93","line":100,"in_reply_to":"baada198_c737814b","updated":"2014-07-09 01:01:58.000000000","message":"Will consolidate under one GUEST_UPGRADE header","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"01b040cba64b060f33d0fe096f637170019867ab","unresolved":false,"context_lines":[{"line_number":103,"context_line":"version_source \u003d trove.guestagent.version.PipVersionSource"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"# Guest upgrade metadata properties"},{"line_number":106,"context_line":"aes_cbc_key \u003d \"default_upgrade_aes_cbc_key\""},{"line_number":107,"context_line":"swift_public_key \u003d default_upgrade_swift_public_key"},{"line_number":108,"context_line":"swift_private_key \u003d defalut_upgrade_swift_private_key"},{"line_number":109,"context_line":"swift_auth_url \u003d default_upgrade_swift_auth_url"}],"source_content_type":"application/octet-stream","patch_set":71,"id":"baada198_c08a6463","line":106,"updated":"2014-07-11 15:25:43.000000000","message":"pick another password","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"46fea0f4636aac9c81938748bede240849f035e4","unresolved":false,"context_lines":[{"line_number":103,"context_line":"version_source \u003d trove.guestagent.version.PipVersionSource"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"# Guest upgrade metadata properties"},{"line_number":106,"context_line":"aes_cbc_key \u003d \"default_upgrade_aes_cbc_key\""},{"line_number":107,"context_line":"swift_public_key \u003d default_upgrade_swift_public_key"},{"line_number":108,"context_line":"swift_private_key \u003d defalut_upgrade_swift_private_key"},{"line_number":109,"context_line":"swift_auth_url \u003d default_upgrade_swift_auth_url"}],"source_content_type":"application/octet-stream","patch_set":71,"id":"baada198_6ce683b2","line":106,"in_reply_to":"baada198_0197ac48","updated":"2014-07-15 20:53:24.000000000","message":"The idea here is that \u0027default_upgrade_aes_cbc_key\u0027 would be replaced by deployment scripts for the actual value.\n\nIt is unique to avoid non-intentional matches.","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"be433c2bf68e6ee009be9a9201f529bc91c86dfa","unresolved":false,"context_lines":[{"line_number":103,"context_line":"version_source \u003d trove.guestagent.version.PipVersionSource"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"# Guest upgrade metadata properties"},{"line_number":106,"context_line":"aes_cbc_key \u003d \"default_upgrade_aes_cbc_key\""},{"line_number":107,"context_line":"swift_public_key \u003d default_upgrade_swift_public_key"},{"line_number":108,"context_line":"swift_private_key \u003d defalut_upgrade_swift_private_key"},{"line_number":109,"context_line":"swift_auth_url \u003d default_upgrade_swift_auth_url"}],"source_content_type":"application/octet-stream","patch_set":71,"id":"baada198_13019baf","line":106,"in_reply_to":"baada198_6ce683b2","updated":"2014-07-15 21:05:58.000000000","message":"i though it was equal to backup key, so, just ignore this comment.","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a74c51e3d76b4430919a58e084af2e2524e38f28","unresolved":false,"context_lines":[{"line_number":103,"context_line":"version_source \u003d trove.guestagent.version.PipVersionSource"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"# Guest upgrade metadata properties"},{"line_number":106,"context_line":"aes_cbc_key \u003d \"default_upgrade_aes_cbc_key\""},{"line_number":107,"context_line":"swift_public_key \u003d default_upgrade_swift_public_key"},{"line_number":108,"context_line":"swift_private_key \u003d defalut_upgrade_swift_private_key"},{"line_number":109,"context_line":"swift_auth_url \u003d default_upgrade_swift_auth_url"}],"source_content_type":"application/octet-stream","patch_set":71,"id":"baada198_0197ac48","line":106,"in_reply_to":"baada198_c08a6463","updated":"2014-07-15 06:46:58.000000000","message":"can you elaborate denis, not sure i understand what you\u0027re advocating for?","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"de78d08cfa8de8437e6aee118747372a386a4c8f","unresolved":false,"context_lines":[{"line_number":106,"context_line":"aes_cbc_key \u003d \"default_upgrade_aes_cbc_key\""},{"line_number":107,"context_line":"swift_public_key \u003d default_upgrade_swift_public_key"},{"line_number":108,"context_line":"swift_private_key \u003d defalut_upgrade_swift_private_key"},{"line_number":109,"context_line":"swift_auth_url \u003d default_upgrade_swift_auth_url"},{"line_number":110,"context_line":"swift_tenant_name \u003d default_upgrade_swift_tenant_name"}],"source_content_type":"application/octet-stream","patch_set":72,"id":"baada198_64612811","line":109,"updated":"2014-07-16 05:43:42.000000000","message":"Hey Dan, i think the swift_auth_url is already defined (swift_url). Look at line 52.\n\nMaybe it is very late and i need to sleep but i didnt see these config values being referenced in your patch. Are they being used?","commit_id":"aae30f25eda7fdb86400dba7b83db6f398eb48d8"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"b0333b62d1e9e850eca18af3ae0079cb559e23ab","unresolved":false,"context_lines":[{"line_number":106,"context_line":"aes_cbc_key \u003d \"default_upgrade_aes_cbc_key\""},{"line_number":107,"context_line":"swift_public_key \u003d default_upgrade_swift_public_key"},{"line_number":108,"context_line":"swift_private_key \u003d defalut_upgrade_swift_private_key"},{"line_number":109,"context_line":"swift_auth_url \u003d default_upgrade_swift_auth_url"},{"line_number":110,"context_line":"swift_tenant_name \u003d default_upgrade_swift_tenant_name"}],"source_content_type":"application/octet-stream","patch_set":72,"id":"baada198_b1aa4e18","line":109,"in_reply_to":"baada198_64612811","updated":"2014-07-17 17:08:26.000000000","message":"yep, you are correct but this one is under the new [Guest_UPGRADE] group.\n\nSo, you actually get to it another level down like this.\n\nCONF.guest_upgrade.swift_auth_url\n\nThe reason it\u0027s here at all is to give folks the option of using a different swift location then the backups, etc.","commit_id":"aae30f25eda7fdb86400dba7b83db6f398eb48d8"}],"trove/common/cfg.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"3ee8e9437a44a29d5261b871dd42bda3fbc11fed","unresolved":false,"context_lines":[{"line_number":216,"context_line":"               default\u003dNone,"},{"line_number":217,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":218,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_auth_url\u0027,"},{"line_number":219,"context_line":"               default\u003d\u0027http://0.0.0.0:5000/v2.0\u0027,"},{"line_number":220,"context_line":"               help\u003d\u0027Default swift auth endpoint\u0027),"},{"line_number":221,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_tenant_name\u0027,"},{"line_number":222,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAW3%2F%2F0hE%3D","line":219,"updated":"2014-04-10 07:42:02.000000000","message":"i guess this can be the part of the service catalog, so, can be retrieved from it, but service catalog didn\u0027t land yet, so, until that i\u0027m fine with this.","commit_id":"cb8a30607187f65460edfe02ab56da10f471a06c"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":220,"context_line":"               help\u003d\u0027Default swift auth endpoint\u0027),"},{"line_number":221,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_tenant_name\u0027,"},{"line_number":222,"context_line":"               default\u003dNone,"},{"line_number":223,"context_line":"               help\u003d\u0027Default directory for upgrade packages\u0027),"},{"line_number":224,"context_line":"    cfg.StrOpt(\u0027remote_dns_client\u0027,"},{"line_number":225,"context_line":"               default\u003d\u0027trove.common.remote.dns_client\u0027),"},{"line_number":226,"context_line":"    cfg.StrOpt(\u0027remote_guest_client\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAXH%2F%2FHcA%3D","line":223,"updated":"2014-04-23 22:50:02.000000000","message":"Could some of these configs be moved to their respective strategy directories? Or maybe even nested under another config namespace? It would help compartmentalize the overwhelming number of config options we\u0027re getting in the guest.","commit_id":"47b5e1d9af7aeec17b69bbdbec3b5a2df4a38fc0"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":220,"context_line":"               help\u003d\u0027Default swift auth endpoint\u0027),"},{"line_number":221,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_tenant_name\u0027,"},{"line_number":222,"context_line":"               default\u003dNone,"},{"line_number":223,"context_line":"               help\u003d\u0027Default directory for upgrade packages\u0027),"},{"line_number":224,"context_line":"    cfg.StrOpt(\u0027remote_dns_client\u0027,"},{"line_number":225,"context_line":"               default\u003d\u0027trove.common.remote.dns_client\u0027),"},{"line_number":226,"context_line":"    cfg.StrOpt(\u0027remote_guest_client\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXH%2F%2FHKA%3D","line":223,"updated":"2014-04-23 22:55:03.000000000","message":"Could some of these configs be moved to their respective strategy directories? Or maybe even nested under another config namespace? It would help compartmentalize the overwhelming number of config options we\u0027re getting in the guest.","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"3c247ebafc418aff0b74e1d8210c4a686d2da36d","unresolved":false,"context_lines":[{"line_number":220,"context_line":"               help\u003d\u0027Default swift auth endpoint\u0027),"},{"line_number":221,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_tenant_name\u0027,"},{"line_number":222,"context_line":"               default\u003dNone,"},{"line_number":223,"context_line":"               help\u003d\u0027Default directory for upgrade packages\u0027),"},{"line_number":224,"context_line":"    cfg.StrOpt(\u0027remote_dns_client\u0027,"},{"line_number":225,"context_line":"               default\u003d\u0027trove.common.remote.dns_client\u0027),"},{"line_number":226,"context_line":"    cfg.StrOpt(\u0027remote_guest_client\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXH%2F%2FHHE%3D","line":223,"in_reply_to":"AAAAXH%2F%2FHKA%3D","updated":"2014-04-24 23:21:26.000000000","message":"I\u0027ll look into it.  It is pretty noisy.","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":204,"context_line":"               help\u003d\"Maximum size of each segment of the backup file.\"),"},{"line_number":205,"context_line":"    cfg.StrOpt(\u0027upgrade_namespace\u0027,"},{"line_number":206,"context_line":"               default\u003d\u0027trove.guestagent.strategies.upgrade.pip.Pip\u0027,"},{"line_number":207,"context_line":"               help\u003d\u0027Default upgrade namespace for guest agent\u0027),"},{"line_number":208,"context_line":"    cfg.StrOpt(\u0027guestagent_version_source\u0027,"},{"line_number":209,"context_line":"               default\u003d\u0027trove.guestagent.version.PipVersionSource\u0027,"},{"line_number":210,"context_line":"               help\u003d\u0027Default version namespace for guest agent\u0027),"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_a757edc8","line":207,"updated":"2014-07-07 21:04:31.000000000","message":"help string needs to end in a period (otherwise someone will file a bug to fix it, bloating the commit log)","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":204,"context_line":"               help\u003d\"Maximum size of each segment of the backup file.\"),"},{"line_number":205,"context_line":"    cfg.StrOpt(\u0027upgrade_namespace\u0027,"},{"line_number":206,"context_line":"               default\u003d\u0027trove.guestagent.strategies.upgrade.pip.Pip\u0027,"},{"line_number":207,"context_line":"               help\u003d\u0027Default upgrade namespace for guest agent\u0027),"},{"line_number":208,"context_line":"    cfg.StrOpt(\u0027guestagent_version_source\u0027,"},{"line_number":209,"context_line":"               default\u003d\u0027trove.guestagent.version.PipVersionSource\u0027,"},{"line_number":210,"context_line":"               help\u003d\u0027Default version namespace for guest agent\u0027),"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_aa3a31e5","line":207,"in_reply_to":"baada198_a757edc8","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":207,"context_line":"               help\u003d\u0027Default upgrade namespace for guest agent\u0027),"},{"line_number":208,"context_line":"    cfg.StrOpt(\u0027guestagent_version_source\u0027,"},{"line_number":209,"context_line":"               default\u003d\u0027trove.guestagent.version.PipVersionSource\u0027,"},{"line_number":210,"context_line":"               help\u003d\u0027Default version namespace for guest agent\u0027),"},{"line_number":211,"context_line":"    cfg.StrOpt(\u0027remote_dns_client\u0027,"},{"line_number":212,"context_line":"               default\u003d\u0027trove.common.remote.dns_client\u0027),"},{"line_number":213,"context_line":"    cfg.StrOpt(\u0027remote_guest_client\u0027,"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_e7748569","line":210,"updated":"2014-07-07 21:04:31.000000000","message":"help string needs to end in a period (otherwise someone will file a bug to fix it, bloating the commit log)","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":207,"context_line":"               help\u003d\u0027Default upgrade namespace for guest agent\u0027),"},{"line_number":208,"context_line":"    cfg.StrOpt(\u0027guestagent_version_source\u0027,"},{"line_number":209,"context_line":"               default\u003d\u0027trove.guestagent.version.PipVersionSource\u0027,"},{"line_number":210,"context_line":"               help\u003d\u0027Default version namespace for guest agent\u0027),"},{"line_number":211,"context_line":"    cfg.StrOpt(\u0027remote_dns_client\u0027,"},{"line_number":212,"context_line":"               default\u003d\u0027trove.common.remote.dns_client\u0027),"},{"line_number":213,"context_line":"    cfg.StrOpt(\u0027remote_guest_client\u0027,"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_ca3f65d5","line":210,"in_reply_to":"baada198_e7748569","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":426,"context_line":""},{"line_number":427,"context_line":"# Upgrade Metadata Group"},{"line_number":428,"context_line":"upgrade_metadata_group \u003d cfg.OptGroup("},{"line_number":429,"context_line":"    \u0027upgrade_metadata\u0027, title\u003d\u0027virtualenv Guest Agent upgrade options\u0027,"},{"line_number":430,"context_line":"    help\u003d\u0027Oslo option group for upgrade metadata\u0027)"},{"line_number":431,"context_line":"upgrade_metadata_opts \u003d ["},{"line_number":432,"context_line":"    cfg.StrOpt(\u0027upgrade_aes_cbc_key\u0027,"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_0793395b","line":429,"updated":"2014-07-07 21:04:31.000000000","message":"1. i\u0027d change the title from \"virtualenv Guest Agent upgrade options\u0027 to \u0027guest agent upgrade options\u0027. the fact that a virtualenv is used is an implementation detail, and might even change depending on the namespace/strategy in use.\n\n2.\n\nother OptGroups actually have the opts under the header.\n\nex:\n\n    [mongodb]\n    tcp_ports \u003d ...\n\nhere, you\u0027ve defined upgrade_metadata, but in the trove-guestagent.conf in this patch-set, these parameters aren\u0027t under [upgrade_metadata]?\n\nif they are supposed to be under [upgrade_metadata], then the upgrade_ prefixes for all of the options can be removed as they are redundant.\n\n3. i would really prefer \"agent_upgrade_metadata\" or \"guestagent_upgrade_metadata\" to \"upgrade_metadata\"; it\u0027s far more explicit.","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":426,"context_line":""},{"line_number":427,"context_line":"# Upgrade Metadata Group"},{"line_number":428,"context_line":"upgrade_metadata_group \u003d cfg.OptGroup("},{"line_number":429,"context_line":"    \u0027upgrade_metadata\u0027, title\u003d\u0027virtualenv Guest Agent upgrade options\u0027,"},{"line_number":430,"context_line":"    help\u003d\u0027Oslo option group for upgrade metadata\u0027)"},{"line_number":431,"context_line":"upgrade_metadata_opts \u003d ["},{"line_number":432,"context_line":"    cfg.StrOpt(\u0027upgrade_aes_cbc_key\u0027,"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_d159d18f","line":429,"in_reply_to":"baada198_0793395b","updated":"2014-07-09 01:01:58.000000000","message":"I created a group that is inclusive of all guest_upgrade properties.  We will not distinguish metadata properties from the other guest upgrade properties.  Let me know if this works.\n\n[GUEST_UPGRADE]\n# Properties for guest upgrade strategy\nnamespace \u003d  trove.guestagent.strategies.upgrade.pip.Pip\nguestagent_version_source \u003d trove.guestagent.version.PipVersionSource\n\n# Guest upgrade metadata properties\naes_cbc_key \u003d \"default_upgrade_aes_cbc_key\"\nswift_public_key \u003d default_upgrade_swift_public_key\nswift_private_key \u003d defalut_upgrade_swift_private_key\nswift_auth_url \u003d default_upgrade_swift_auth_url\nswift_tenant_name \u003d default_upgrade_swift_tenant_name","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":431,"context_line":"upgrade_metadata_opts \u003d ["},{"line_number":432,"context_line":"    cfg.StrOpt(\u0027upgrade_aes_cbc_key\u0027,"},{"line_number":433,"context_line":"               default\u003dNone,"},{"line_number":434,"context_line":"               help\u003d\u0027Key used for decrypting upgrade files\u0027),"},{"line_number":435,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_public_key\u0027,"},{"line_number":436,"context_line":"               default\u003dNone,"},{"line_number":437,"context_line":"               help\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_276bdd85","line":434,"updated":"2014-07-07 21:04:31.000000000","message":"help string needs to end in a period (otherwise someone will file a bug to fix it, bloating the commit log)","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":431,"context_line":"upgrade_metadata_opts \u003d ["},{"line_number":432,"context_line":"    cfg.StrOpt(\u0027upgrade_aes_cbc_key\u0027,"},{"line_number":433,"context_line":"               default\u003dNone,"},{"line_number":434,"context_line":"               help\u003d\u0027Key used for decrypting upgrade files\u0027),"},{"line_number":435,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_public_key\u0027,"},{"line_number":436,"context_line":"               default\u003dNone,"},{"line_number":437,"context_line":"               help\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_d0a9d2e0","line":434,"in_reply_to":"baada198_276bdd85","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":434,"context_line":"               help\u003d\u0027Key used for decrypting upgrade files\u0027),"},{"line_number":435,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_public_key\u0027,"},{"line_number":436,"context_line":"               default\u003dNone,"},{"line_number":437,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":438,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_private_key\u0027,"},{"line_number":439,"context_line":"               default\u003dNone,"},{"line_number":440,"context_line":"               help\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_27483dcb","line":437,"updated":"2014-07-07 21:04:31.000000000","message":"Needs help text.","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":434,"context_line":"               help\u003d\u0027Key used for decrypting upgrade files\u0027),"},{"line_number":435,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_public_key\u0027,"},{"line_number":436,"context_line":"               default\u003dNone,"},{"line_number":437,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":438,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_private_key\u0027,"},{"line_number":439,"context_line":"               default\u003dNone,"},{"line_number":440,"context_line":"               help\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_714ac5ad","line":437,"in_reply_to":"baada198_27483dcb","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":437,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":438,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_private_key\u0027,"},{"line_number":439,"context_line":"               default\u003dNone,"},{"line_number":440,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":441,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_auth_url\u0027,"},{"line_number":442,"context_line":"               default\u003d\u0027http://0.0.0.0:5000/v2.0\u0027,"},{"line_number":443,"context_line":"               help\u003d\u0027Default swift auth endpoint\u0027),"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_474371ae","line":440,"updated":"2014-07-07 21:04:31.000000000","message":"Needs help text.","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":437,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":438,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_private_key\u0027,"},{"line_number":439,"context_line":"               default\u003dNone,"},{"line_number":440,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":441,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_auth_url\u0027,"},{"line_number":442,"context_line":"               default\u003d\u0027http://0.0.0.0:5000/v2.0\u0027,"},{"line_number":443,"context_line":"               help\u003d\u0027Default swift auth endpoint\u0027),"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_91c67915","line":440,"in_reply_to":"baada198_474371ae","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":443,"context_line":"               help\u003d\u0027Default swift auth endpoint\u0027),"},{"line_number":444,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_tenant_name\u0027,"},{"line_number":445,"context_line":"               default\u003dNone,"},{"line_number":446,"context_line":"               help\u003d\u0027Default directory for upgrade packages\u0027),"},{"line_number":447,"context_line":"]"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_476611bc","line":446,"updated":"2014-07-07 21:04:31.000000000","message":"help text here is a bit misleading.\n\nalso, help string needs to end in a period (otherwise someone will file a bug to fix it, bloating the commit log)","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":443,"context_line":"               help\u003d\u0027Default swift auth endpoint\u0027),"},{"line_number":444,"context_line":"    cfg.StrOpt(\u0027upgrade_swift_tenant_name\u0027,"},{"line_number":445,"context_line":"               default\u003dNone,"},{"line_number":446,"context_line":"               help\u003d\u0027Default directory for upgrade packages\u0027),"},{"line_number":447,"context_line":"]"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_f0adf6eb","line":446,"in_reply_to":"baada198_476611bc","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"be433c2bf68e6ee009be9a9201f529bc91c86dfa","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    cfg.StrOpt(\u0027version_source\u0027,"},{"line_number":431,"context_line":"               default\u003d\u0027trove.guestagent.version.PipVersionSource\u0027,"},{"line_number":432,"context_line":"               help\u003d\u0027Default version namespace for guest agent.\u0027),"},{"line_number":433,"context_line":"    cfg.StrOpt(\u0027aes_cbc_key\u0027,"},{"line_number":434,"context_line":"               default\u003dNone,"},{"line_number":435,"context_line":"               help\u003d\u0027Key used for decrypting upgrade files.\u0027),"},{"line_number":436,"context_line":"    cfg.StrOpt(\u0027swift_public_key\u0027,"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_b312af07","line":433,"updated":"2014-07-15 21:05:58.000000000","message":"should be marked as secret","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"be433c2bf68e6ee009be9a9201f529bc91c86dfa","unresolved":false,"context_lines":[{"line_number":436,"context_line":"    cfg.StrOpt(\u0027swift_public_key\u0027,"},{"line_number":437,"context_line":"               default\u003dNone,"},{"line_number":438,"context_line":"               help\u003d\u0027Swift public key for storing/retrieving upgrade files.\u0027),"},{"line_number":439,"context_line":"    cfg.StrOpt(\u0027swift_private_key\u0027,"},{"line_number":440,"context_line":"               default\u003dNone,"},{"line_number":441,"context_line":"               help\u003d\u0027Swift private key for storing/retrieving upgrade files.\u0027),"},{"line_number":442,"context_line":"    cfg.StrOpt(\u0027swift_auth_url\u0027,"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_f3f347e5","line":439,"updated":"2014-07-15 21:05:58.000000000","message":"should be marked as secret","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"de78d08cfa8de8437e6aee118747372a386a4c8f","unresolved":false,"context_lines":[{"line_number":441,"context_line":"               default\u003dNone,"},{"line_number":442,"context_line":"               secret\u003dTrue,"},{"line_number":443,"context_line":"               help\u003d\u0027Swift private key for storing/retrieving upgrade files.\u0027),"},{"line_number":444,"context_line":"    cfg.StrOpt(\u0027swift_auth_url\u0027,"},{"line_number":445,"context_line":"               default\u003d\u0027http://0.0.0.0:5000/v2.0\u0027,"},{"line_number":446,"context_line":"               help\u003d\u0027Default swift auth endpoint.\u0027),"},{"line_number":447,"context_line":"    cfg.StrOpt(\u0027swift_tenant_name\u0027,"}],"source_content_type":"text/x-python","patch_set":72,"id":"baada198_84663c28","line":444,"updated":"2014-07-16 05:43:42.000000000","message":"This may already be defined as swift_url","commit_id":"aae30f25eda7fdb86400dba7b83db6f398eb48d8"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"b0333b62d1e9e850eca18af3ae0079cb559e23ab","unresolved":false,"context_lines":[{"line_number":441,"context_line":"               default\u003dNone,"},{"line_number":442,"context_line":"               secret\u003dTrue,"},{"line_number":443,"context_line":"               help\u003d\u0027Swift private key for storing/retrieving upgrade files.\u0027),"},{"line_number":444,"context_line":"    cfg.StrOpt(\u0027swift_auth_url\u0027,"},{"line_number":445,"context_line":"               default\u003d\u0027http://0.0.0.0:5000/v2.0\u0027,"},{"line_number":446,"context_line":"               help\u003d\u0027Default swift auth endpoint.\u0027),"},{"line_number":447,"context_line":"    cfg.StrOpt(\u0027swift_tenant_name\u0027,"}],"source_content_type":"text/x-python","patch_set":72,"id":"baada198_f17be6bb","line":444,"in_reply_to":"baada198_84663c28","updated":"2014-07-17 17:08:26.000000000","message":"It should belong to the guest_upgrade group.","commit_id":"aae30f25eda7fdb86400dba7b83db6f398eb48d8"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":447,"context_line":"               default\u003dNone,"},{"line_number":448,"context_line":"               secret\u003dTrue,"},{"line_number":449,"context_line":"               help\u003d\u0027Swift private key for storing/retrieving upgrade files.\u0027),"},{"line_number":450,"context_line":"    cfg.StrOpt(\u0027swift_auth_url\u0027,"},{"line_number":451,"context_line":"               default\u003d\u0027http://0.0.0.0:5000/v2.0\u0027,"},{"line_number":452,"context_line":"               help\u003d\u0027Default swift auth endpoint.\u0027),"},{"line_number":453,"context_line":"    cfg.StrOpt(\u0027swift_tenant_name\u0027,"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_19e04325","line":450,"updated":"2014-07-19 11:03:02.000000000","message":"since there\u0027s similar option for in default group, i\u0027d suggest to name it like: \"external_swift_url\"","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"}],"trove/conductor/manager.py":[{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        if payload.get(\u0027service_status\u0027) is not None:"},{"line_number":87,"context_line":"            status.set_status(ServiceStatus.from_description("},{"line_number":88,"context_line":"                payload[\u0027service_status\u0027]))"},{"line_number":89,"context_line":"        # TODO(esp): persist data to agent_heartbeats table when model merges"},{"line_number":90,"context_line":"        status.save()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def update_backup(self, context, instance_id, backup_id,"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_a70b6d7b","line":89,"updated":"2014-07-07 21:04:31.000000000","message":"model has merged, no?","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        if payload.get(\u0027service_status\u0027) is not None:"},{"line_number":87,"context_line":"            status.set_status(ServiceStatus.from_description("},{"line_number":88,"context_line":"                payload[\u0027service_status\u0027]))"},{"line_number":89,"context_line":"        # TODO(esp): persist data to agent_heartbeats table when model merges"},{"line_number":90,"context_line":"        status.save()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def update_backup(self, context, instance_id, backup_id,"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_b1f29d6d","line":89,"in_reply_to":"baada198_a70b6d7b","updated":"2014-07-09 01:01:58.000000000","message":"yep, will wire this in now :)","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"}],"trove/guestagent/datastore/mysql/manager.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        Upgrade the guest agent based on the strategy"},{"line_number":211,"context_line":"        \"\"\""},{"line_number":212,"context_line":"        LOG.info(_(\"%s, %s, %s, %s, %s\") % ("},{"line_number":213,"context_line":"            instance_id, instance_version, strategy, location, metadata))"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        upgrade.upgrade(context, instance_id, instance_version,"},{"line_number":216,"context_line":"                        strategy, location, metadata)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eHc%3D","line":213,"updated":"2014-04-04 09:56:05.000000000","message":"i don\u0027t think this formatting would work with the translation, string should be formatted through dict.","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        Upgrade the guest agent based on the strategy"},{"line_number":211,"context_line":"        \"\"\""},{"line_number":212,"context_line":"        LOG.info(_(\"%s, %s, %s, %s, %s\") % ("},{"line_number":213,"context_line":"            instance_id, instance_version, strategy, location, metadata))"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        upgrade.upgrade(context, instance_id, instance_version,"},{"line_number":216,"context_line":"                        strategy, location, metadata)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZMo%3D","line":213,"in_reply_to":"AAAAWH%2F9eHc%3D","updated":"2014-04-04 20:39:48.000000000","message":"Done","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eb409a82ee2421119bb206f68a04f6e634435e28","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        Upgrade the guest agent based on the strategy"},{"line_number":210,"context_line":"        \"\"\""},{"line_number":211,"context_line":"        log_msg \u003d \"%(instance_id)s, %(instance_version)s, %(strategy)s,\" \\"},{"line_number":212,"context_line":"                  \" %(location)s, %s(metadata)\" % {"},{"line_number":213,"context_line":"            \u0027instance_id\u0027: instance_id, \u0027instance_version\u0027: instance_version,"},{"line_number":214,"context_line":"            \u0027strategy\u0027: strategy, \u0027location\u0027: location, \u0027metadata\u0027: metadata}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F9TTU%3D","line":211,"updated":"2014-04-07 09:17:48.000000000","message":"do not use \\ in multiple string formatting","commit_id":"4fc08ff9e77629dee723dc879a4ed8169fd78f92"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        LOG.debug(msg % {\u0027instance_version\u0027: instance_version,"},{"line_number":213,"context_line":"                         \u0027location\u0027: location, \u0027metadata\u0027: metadata})"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        upgrade.upgrade(context, instance_version, location, metadata)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAXH%2F%2FHbc%3D","line":215,"updated":"2014-04-23 22:50:02.000000000","message":"I think **kwargs should be captured here and sent to the upgrade strategy. For example, location only makes sense if you\u0027re using pip or virtualenv, and not if you\u0027re going to be upgrading with Debian.","commit_id":"47b5e1d9af7aeec17b69bbdbec3b5a2df4a38fc0"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        LOG.debug(msg % {\u0027instance_version\u0027: instance_version,"},{"line_number":213,"context_line":"                         \u0027location\u0027: location, \u0027metadata\u0027: metadata})"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        upgrade.upgrade(context, instance_version, location, metadata)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXH%2F%2FHJ4%3D","line":215,"updated":"2014-04-23 22:55:03.000000000","message":"**kwargs should be captured here and sent to the upgrade strategy. For example, location only makes sense if you\u0027re using pip or virtualenv, and not if you\u0027re going to be upgrading with Debian.","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"3c247ebafc418aff0b74e1d8210c4a686d2da36d","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        LOG.debug(msg % {\u0027instance_version\u0027: instance_version,"},{"line_number":213,"context_line":"                         \u0027location\u0027: location, \u0027metadata\u0027: metadata})"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        upgrade.upgrade(context, instance_version, location, metadata)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXH%2F%2FHGY%3D","line":215,"in_reply_to":"AAAAXH%2F%2FHJ4%3D","updated":"2014-04-24 23:21:26.000000000","message":"yep, will change to take kwargs","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from trove.guestagent import dbaas"},{"line_number":23,"context_line":"from trove.guestagent import backup"},{"line_number":24,"context_line":"from trove.guestagent import volume"},{"line_number":25,"context_line":"from trove.guestagent import upgrade"},{"line_number":26,"context_line":"from trove.guestagent.datastore.mysql.service import MySqlAppStatus"},{"line_number":27,"context_line":"from trove.guestagent.datastore.mysql.service import MySqlAdmin"},{"line_number":28,"context_line":"from trove.guestagent.datastore.mysql.service import MySqlApp"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_67631542","line":25,"updated":"2014-07-07 21:04:31.000000000","message":"http://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from trove.guestagent import dbaas"},{"line_number":23,"context_line":"from trove.guestagent import backup"},{"line_number":24,"context_line":"from trove.guestagent import volume"},{"line_number":25,"context_line":"from trove.guestagent import upgrade"},{"line_number":26,"context_line":"from trove.guestagent.datastore.mysql.service import MySqlAppStatus"},{"line_number":27,"context_line":"from trove.guestagent.datastore.mysql.service import MySqlAdmin"},{"line_number":28,"context_line":"from trove.guestagent.datastore.mysql.service import MySqlApp"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_ea133e0b","line":25,"in_reply_to":"baada198_67631542","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":223,"context_line":"            operation\u003d\u0027demote_replication_master\u0027, datastore\u003dMANAGER)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def upgrade(self, context, **kwargs):"},{"line_number":226,"context_line":"        \"\"\""},{"line_number":227,"context_line":"        Upgrade the guest agent based on the message info and config."},{"line_number":228,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_56734c7f","line":225,"updated":"2014-07-21 10:47:20.000000000","message":"again, why only mysql?","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e92111be71064a0c796638ede5d6fc22e9196833","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":223,"context_line":"            operation\u003d\u0027demote_replication_master\u0027, datastore\u003dMANAGER)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def upgrade(self, context, **kwargs):"},{"line_number":226,"context_line":"        \"\"\""},{"line_number":227,"context_line":"        Upgrade the guest agent based on the message info and config."},{"line_number":228,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_4273717f","line":225,"in_reply_to":"baada198_56734c7f","updated":"2014-07-21 20:11:50.000000000","message":"Done","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"}],"trove/guestagent/datastore/mysql/service.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                    LOG.info(\"Service Status is SHUTDOWN.\")"},{"line_number":185,"context_line":"                    return rd_instance.ServiceStatuses.SHUTDOWN"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def update(self):"},{"line_number":188,"context_line":"        \"\"\"Find and report status of DB on this machine."},{"line_number":189,"context_line":"        The database is updated and the status is also returned."},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eHE%3D","line":187,"updated":"2014-04-04 09:56:05.000000000","message":"update or upgrade ?","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                    LOG.info(\"Service Status is SHUTDOWN.\")"},{"line_number":185,"context_line":"                    return rd_instance.ServiceStatuses.SHUTDOWN"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def update(self):"},{"line_number":188,"context_line":"        \"\"\"Find and report status of DB on this machine."},{"line_number":189,"context_line":"        The database is updated and the status is also returned."},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZMM%3D","line":187,"in_reply_to":"AAAAWH%2F9eHE%3D","updated":"2014-04-04 20:39:48.000000000","message":"This actually overrides the update method used to send heartbeats from the agent --\u003e conductor.\n\nI updated the comment to try to describe it.","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"            self.set_status(status, guest_agent_version)"},{"line_number":203,"context_line":"        else:"},{"line_number":204,"context_line":"            LOG.info(\"DB server is not installed or is in restart mode, so \""},{"line_number":205,"context_line":"                     \"for now we\u0027ll skip determining the status of DB on this \""},{"line_number":206,"context_line":"                     \"box.\")"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eGo%3D","line":204,"updated":"2014-04-04 09:56:05.000000000","message":"_()\n\ntranslation is required","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"            self.set_status(status, guest_agent_version)"},{"line_number":203,"context_line":"        else:"},{"line_number":204,"context_line":"            LOG.info(\"DB server is not installed or is in restart mode, so \""},{"line_number":205,"context_line":"                     \"for now we\u0027ll skip determining the status of DB on this \""},{"line_number":206,"context_line":"                     \"box.\")"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZMI%3D","line":204,"in_reply_to":"AAAAWH%2F9eGo%3D","updated":"2014-04-04 20:39:48.000000000","message":"Done","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eb409a82ee2421119bb206f68a04f6e634435e28","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        \"\"\""},{"line_number":189,"context_line":"        Overrides the super class impl to add the version if appropriate"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        Find and report status of DB on this machine."},{"line_number":192,"context_line":"        The database is updated and the status is also returned."},{"line_number":193,"context_line":"        \"\"\""},{"line_number":194,"context_line":"        if self.is_installed and not self._is_restarting:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F9TSs%3D","line":191,"updated":"2014-04-07 09:17:48.000000000","message":"if this doc.string talks about method, it should be like:\n\nFinds and reports status of the DB on this machine.","commit_id":"4fc08ff9e77629dee723dc879a4ed8169fd78f92"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"0b46b8354dc6a881630faf24d03f0d07e79efad8","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        \"\"\""},{"line_number":189,"context_line":"        Overrides the super class impl to add the version if appropriate"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        Find and report status of DB on this machine."},{"line_number":192,"context_line":"        The database is updated and the status is also returned."},{"line_number":193,"context_line":"        \"\"\""},{"line_number":194,"context_line":"        if self.is_installed and not self._is_restarting:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F9P8I%3D","line":191,"in_reply_to":"AAAAWH%2F9TSs%3D","updated":"2014-04-07 18:05:52.000000000","message":"Done","commit_id":"4fc08ff9e77629dee723dc879a4ed8169fd78f92"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"            # Adds guest agent version to heartbeat"},{"line_number":197,"context_line":"            guest_agent_version \u003d None"},{"line_number":198,"context_line":"            if CONF.upgrade_strategy and CONF.upgrade_namespace:"},{"line_number":199,"context_line":"                upgrade_strategy \u003d UpgradeAgent.get_upgrade_runner()"},{"line_number":200,"context_line":"                guest_agent_version \u003d upgrade_strategy.get_version()"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAXH%2F%2FHZo%3D","line":198,"updated":"2014-04-23 22:50:02.000000000","message":"Also, the logic for determining this should live in an update module instead of being put here.","commit_id":"47b5e1d9af7aeec17b69bbdbec3b5a2df4a38fc0"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            guest_agent_version \u003d None"},{"line_number":198,"context_line":"            if CONF.upgrade_strategy and CONF.upgrade_namespace:"},{"line_number":199,"context_line":"                upgrade_strategy \u003d UpgradeAgent.get_upgrade_runner()"},{"line_number":200,"context_line":"                guest_agent_version \u003d upgrade_strategy.get_version()"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"            self.set_status(status, guest_agent_version)"},{"line_number":203,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAXH%2F%2FHaU%3D","line":200,"updated":"2014-04-23 22:50:02.000000000","message":"Why would the upgrade_strategy return the current version? Shouldn\u0027t it be possible to bake this into the guest?","commit_id":"47b5e1d9af7aeec17b69bbdbec3b5a2df4a38fc0"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        else:"},{"line_number":204,"context_line":"            LOG.info(_(\"DB server is not installed or is in restart mode, so \""},{"line_number":205,"context_line":"                     \"for now we\u0027ll skip determining the status of DB on this \""},{"line_number":206,"context_line":"                     \"box.\"))"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"class LocalSqlClient(object):"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAXH%2F%2FHas%3D","line":206,"updated":"2014-04-23 22:50:02.000000000","message":"Why wasn\u0027t BaseDbStatus\u0027s update method changed instead?","commit_id":"47b5e1d9af7aeec17b69bbdbec3b5a2df4a38fc0"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"            # Adds guest agent version to heartbeat"},{"line_number":197,"context_line":"            guest_agent_version \u003d None"},{"line_number":198,"context_line":"            if CONF.upgrade_strategy and CONF.upgrade_namespace:"},{"line_number":199,"context_line":"                upgrade_strategy \u003d UpgradeAgent.get_upgrade_runner()"},{"line_number":200,"context_line":"                guest_agent_version \u003d upgrade_strategy.get_version()"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXH%2F%2FHJw%3D","line":198,"updated":"2014-04-23 22:55:03.000000000","message":"The logic to get the current version of the guest should not be tied to the update strategy.","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"3c247ebafc418aff0b74e1d8210c4a686d2da36d","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"            # Adds guest agent version to heartbeat"},{"line_number":197,"context_line":"            guest_agent_version \u003d None"},{"line_number":198,"context_line":"            if CONF.upgrade_strategy and CONF.upgrade_namespace:"},{"line_number":199,"context_line":"                upgrade_strategy \u003d UpgradeAgent.get_upgrade_runner()"},{"line_number":200,"context_line":"                guest_agent_version \u003d upgrade_strategy.get_version()"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXX%2F%2F%2BYw%3D","line":198,"in_reply_to":"AAAAXH%2F%2FHJw%3D","updated":"2014-04-24 23:21:26.000000000","message":"Done","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                upgrade_strategy \u003d UpgradeAgent.get_upgrade_runner()"},{"line_number":200,"context_line":"                guest_agent_version \u003d upgrade_strategy.get_version()"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"            self.set_status(status, guest_agent_version)"},{"line_number":203,"context_line":"        else:"},{"line_number":204,"context_line":"            LOG.info(_(\"DB server is not installed or is in restart mode, so \""},{"line_number":205,"context_line":"                     \"for now we\u0027ll skip determining the status of DB on this \""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXH%2F%2FHJs%3D","line":202,"updated":"2014-04-23 22:55:03.000000000","message":"Why wasn\u0027t BaseDbStatus\u0027s update method changed instead?","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"3c247ebafc418aff0b74e1d8210c4a686d2da36d","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                upgrade_strategy \u003d UpgradeAgent.get_upgrade_runner()"},{"line_number":200,"context_line":"                guest_agent_version \u003d upgrade_strategy.get_version()"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"            self.set_status(status, guest_agent_version)"},{"line_number":203,"context_line":"        else:"},{"line_number":204,"context_line":"            LOG.info(_(\"DB server is not installed or is in restart mode, so \""},{"line_number":205,"context_line":"                     \"for now we\u0027ll skip determining the status of DB on this \""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXX%2F%2F%2BY8%3D","line":202,"in_reply_to":"AAAAXH%2F%2FHJs%3D","updated":"2014-04-24 23:21:26.000000000","message":"Done","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        The database is updated and the status is also returned."},{"line_number":191,"context_line":"        \"\"\""},{"line_number":192,"context_line":"        if self.is_installed and not self._is_restarting:"},{"line_number":193,"context_line":"            LOG.info(\"Determining status of DB server...\")"},{"line_number":194,"context_line":"            status \u003d self._get_actual_db_status()"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"            # Adds guest agent version to heartbeat"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDJM%3D","line":193,"updated":"2014-04-24 11:44:22.000000000","message":"localization is required","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"90f02299d2d21dbdcbbdae7eec28009ae71ea02b","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        The database is updated and the status is also returned."},{"line_number":191,"context_line":"        \"\"\""},{"line_number":192,"context_line":"        if self.is_installed and not self._is_restarting:"},{"line_number":193,"context_line":"            LOG.info(\"Determining status of DB server...\")"},{"line_number":194,"context_line":"            status \u003d self._get_actual_db_status()"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"            # Adds guest agent version to heartbeat"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXX%2F%2F9z0%3D","line":193,"in_reply_to":"AAAAXH%2F%2FDJM%3D","updated":"2014-04-24 23:51:54.000000000","message":"removing this.","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"}],"trove/guestagent/datastore/service.py":[{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        }"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if guest_agent_version:"},{"line_number":118,"context_line":"            heartbeat[\u0027guest_agent_version\u0027] \u003d guest_agent_version"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        conductor_api.API(ctxt).heartbeat(CONF.guest_id,"},{"line_number":121,"context_line":"                                          heartbeat,"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAXH%2F%2FHZY%3D","line":118,"updated":"2014-04-23 22:50:02.000000000","message":"This should be calling something else to know it\u0027s version. For example, there could be an upgrade module that could determine this.","commit_id":"47b5e1d9af7aeec17b69bbdbec3b5a2df4a38fc0"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        }"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if guest_agent_version:"},{"line_number":118,"context_line":"            heartbeat[\u0027guest_agent_version\u0027] \u003d guest_agent_version"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        conductor_api.API(ctxt).heartbeat(CONF.guest_id,"},{"line_number":121,"context_line":"                                          heartbeat,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXH%2F%2FHJU%3D","line":118,"updated":"2014-04-23 22:55:03.000000000","message":"The logic to determine the version should be called from here, rather than forcing subclasses to call this method with the current version.","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"3c247ebafc418aff0b74e1d8210c4a686d2da36d","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        }"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if guest_agent_version:"},{"line_number":118,"context_line":"            heartbeat[\u0027guest_agent_version\u0027] \u003d guest_agent_version"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        conductor_api.API(ctxt).heartbeat(CONF.guest_id,"},{"line_number":121,"context_line":"                                          heartbeat,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXX%2F%2F%2BYY%3D","line":118,"in_reply_to":"AAAAXH%2F%2FHJU%3D","updated":"2014-04-24 23:21:26.000000000","message":"Done","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3fdbb4d549f98171213a2243835251c98da69133","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        Returns the trove package version"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        pkg \u003d pkg_resources.get_distribution(name)"},{"line_number":114,"context_line":"        return pkg.version"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def set_status(self, status):"},{"line_number":117,"context_line":"        \"\"\"Use conductor to update the DB app status.\"\"\""}],"source_content_type":"text/x-python","patch_set":38,"id":"9ad9bd40_722feff6","line":114,"updated":"2014-05-02 21:22:32.000000000","message":"Try to make this come from a hard set global variable which we know won\u0027t change while the process is running. If that isn\u0027t possible, make a config value which will determine the strategy of how the guest finds its own version (this can just be a simple function, imported with good \u0027ole import utils, which when called returns the version string).","commit_id":"200860974516780038fd7227325ed5a57941ac53"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2bb0d846fdf508ea80ac570c41f8b8dbf4673dec","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        Returns the trove package version"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        pkg \u003d pkg_resources.get_distribution(name)"},{"line_number":114,"context_line":"        return pkg.version"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def set_status(self, status):"},{"line_number":117,"context_line":"        \"\"\"Use conductor to update the DB app status.\"\"\""}],"source_content_type":"text/x-python","patch_set":38,"id":"9ad9bd40_fc766e3d","line":114,"in_reply_to":"9ad9bd40_722feff6","updated":"2014-05-03 07:12:36.000000000","message":"A bit disagree. I\u0027d suggest to define version as a @property, described with singleton pattern. Because, as already said, version won\u0027t change within one deployment. Adding another config attribute that defines a strategy of how version is discovered seems to be complex and IMHO not really what a guest needs. Current implementation almost ideal for given case.","commit_id":"200860974516780038fd7227325ed5a57941ac53"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"cbac9941a90c887d0c2a16c628ced9aa9bca527f","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        Returns the trove package version"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        pkg \u003d pkg_resources.get_distribution(name)"},{"line_number":114,"context_line":"        return pkg.version"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def set_status(self, status):"},{"line_number":117,"context_line":"        \"\"\"Use conductor to update the DB app status.\"\"\""}],"source_content_type":"text/x-python","patch_set":38,"id":"9ad9bd40_4924d5c4","line":114,"in_reply_to":"9ad9bd40_fc766e3d","updated":"2014-05-05 18:53:15.000000000","message":"I completely disagree with Tim. Basically the pkg_resources already does exactly what you envision without having to write this function. pkg_resources searches the python path and discovers all the \u0027egg_info\u0027 for all packages which is a simple ini file in the package. This cannot be changed during run time without monkey patching the pkg_resources module itself (which we don\u0027t do). In short this is the correct way to find out what version of a python package you have installed.","commit_id":"200860974516780038fd7227325ed5a57941ac53"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2bb0d846fdf508ea80ac570c41f8b8dbf4673dec","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def set_status(self, status):"},{"line_number":117,"context_line":"        \"\"\"Use conductor to update the DB app status.\"\"\""},{"line_number":118,"context_line":"        LOG.debug(\"Casting set_status message to conductor.\")"},{"line_number":119,"context_line":"        ctxt \u003d context.TroveContext(user\u003dCONF.nova_proxy_admin_user,"},{"line_number":120,"context_line":"                                    auth_token\u003dCONF.nova_proxy_admin_pass)"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9ad9bd40_fcad8e89","line":118,"updated":"2014-05-03 07:12:36.000000000","message":"Localization is required _()","commit_id":"200860974516780038fd7227325ed5a57941ac53"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"d2b34fee67f0988b05b033a163f5cf0d87930a06","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        Returns the trove package version"},{"line_number":113,"context_line":"        \"\"\""},{"line_number":114,"context_line":"        pkg \u003d pkg_resources.get_distribution(name)"},{"line_number":115,"context_line":"        return pkg.version"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def set_status(self, status):"},{"line_number":118,"context_line":"        \"\"\"Use conductor to update the DB app status.\"\"\""}],"source_content_type":"text/x-python","patch_set":54,"id":"1ae5cdf2_f6d75d21","line":115,"updated":"2014-06-02 22:07:13.000000000","message":"This class is intended to find the status of the datastore. Adding code to get the version of the guest agent itself violated the single responsibility principle. \n\nThe other thing is I don\u0027t trust using pkg_resoruces for this.\n\nSo, can you make a new class to do this?","commit_id":"557197c0d25799a517bdc1ec9d57e465d10b33b9"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"d2b34fee67f0988b05b033a163f5cf0d87930a06","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        guest_agent_version \u003d BaseDbStatus._get_version()"},{"line_number":128,"context_line":"        if guest_agent_version:"},{"line_number":129,"context_line":"            heartbeat[\u0027guest_agent_version\u0027] \u003d guest_agent_version"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        conductor_api.API(ctxt).heartbeat(CONF.guest_id,"},{"line_number":132,"context_line":"                                          heartbeat,"}],"source_content_type":"text/x-python","patch_set":54,"id":"1ae5cdf2_b6a9557d","line":129,"updated":"2014-06-02 22:07:13.000000000","message":"So unfortunately, this needs to be moved.\n\nThis class is all about the datastore status, but now its sending a message that has general heartbeat info, which means other things such as the agent version. \n\nAt this point, there needs to be a heartbeat class which has two variables: an instance of this, plus an instance of a class to get the version of the agent.\n\nThen that heartbeat class should send the message instead of this one.","commit_id":"557197c0d25799a517bdc1ec9d57e465d10b33b9"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from trove.instance import models as rd_models"},{"line_number":22,"context_line":"from trove.openstack.common import log as logging"},{"line_number":23,"context_line":"from trove.openstack.common.gettextutils import _  # noqa"},{"line_number":24,"context_line":"from trove.guestagent.heartbeat import HeartBeat"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_0724190b","line":24,"updated":"2014-07-07 21:04:31.000000000","message":"according to hacking rules, trove.guestagent imports should be before trove.openstack (alpha-ordering)\nsee http://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from trove.instance import models as rd_models"},{"line_number":22,"context_line":"from trove.openstack.common import log as logging"},{"line_number":23,"context_line":"from trove.openstack.common.gettextutils import _  # noqa"},{"line_number":24,"context_line":"from trove.guestagent.heartbeat import HeartBeat"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_8aa002a7","line":24,"in_reply_to":"baada198_0724190b","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"52bda60f4169a60740c414caa17772138d5391e1","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from trove.common import instance as rd_instance"},{"line_number":21,"context_line":"from trove.guestagent.heartbeat import HeartBeat"},{"line_number":22,"context_line":"from trove.instance import models as rd_models"},{"line_number":23,"context_line":"from trove.openstack.common.gettextutils import _  # noqa"},{"line_number":24,"context_line":"from trove.openstack.common import log as logging"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_c0fd04b3","line":23,"updated":"2014-07-11 15:29:16.000000000","message":"remove # noqa","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"46fea0f4636aac9c81938748bede240849f035e4","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from trove.common import instance as rd_instance"},{"line_number":21,"context_line":"from trove.guestagent.heartbeat import HeartBeat"},{"line_number":22,"context_line":"from trove.instance import models as rd_models"},{"line_number":23,"context_line":"from trove.openstack.common.gettextutils import _  # noqa"},{"line_number":24,"context_line":"from trove.openstack.common import log as logging"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_b83e0eb8","line":23,"in_reply_to":"baada198_c0fd04b3","updated":"2014-07-15 20:53:24.000000000","message":"Done","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a74c51e3d76b4430919a58e084af2e2524e38f28","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            waited_time +\u003d WAIT_TIME"},{"line_number":135,"context_line":"            LOG.info(_(\"Waiting for DB status to change to %s...\") % status)"},{"line_number":136,"context_line":"            actual_status \u003d self._get_actual_db_status()"},{"line_number":137,"context_line":"            vars \u003d (actual_status, waited_time)"},{"line_number":138,"context_line":"            msg \u003d \"DB status was %s after %d seconds.\" % vars"},{"line_number":139,"context_line":"            LOG.info(msg)"},{"line_number":140,"context_line":"            if actual_status \u003d\u003d status:"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_937a2f75","line":137,"updated":"2014-07-15 06:46:58.000000000","message":"this is side-stepping H703 (see http://docs.openstack.org/developer/hacking/#internationalization-i18n-strings). should be using keyword parameters.","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"25ebbcb4b1f9fbf68fd2943272a7e56ade46da8c","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            waited_time +\u003d WAIT_TIME"},{"line_number":135,"context_line":"            LOG.info(_(\"Waiting for DB status to change to %s...\") % status)"},{"line_number":136,"context_line":"            actual_status \u003d self._get_actual_db_status()"},{"line_number":137,"context_line":"            vars \u003d (actual_status, waited_time)"},{"line_number":138,"context_line":"            msg \u003d \"DB status was %s after %d seconds.\" % vars"},{"line_number":139,"context_line":"            LOG.info(msg)"},{"line_number":140,"context_line":"            if actual_status \u003d\u003d status:"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_a96fc6c2","line":137,"in_reply_to":"baada198_937a2f75","updated":"2014-07-15 07:32:09.000000000","message":"+1","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from trove.common import instance as rd_instance"},{"line_number":21,"context_line":"from trove.guestagent.heartbeat import HeartBeat"},{"line_number":22,"context_line":"from trove.instance import models as rd_models"},{"line_number":23,"context_line":"from trove.openstack.common.gettextutils import _"},{"line_number":24,"context_line":"from trove.openstack.common import log as logging"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_160d54e8","line":23,"updated":"2014-07-21 10:47:20.000000000","message":"should come after logging import","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e92111be71064a0c796638ede5d6fc22e9196833","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from trove.common import instance as rd_instance"},{"line_number":21,"context_line":"from trove.guestagent.heartbeat import HeartBeat"},{"line_number":22,"context_line":"from trove.instance import models as rd_models"},{"line_number":23,"context_line":"from trove.openstack.common.gettextutils import _"},{"line_number":24,"context_line":"from trove.openstack.common import log as logging"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_42fa91bd","line":23,"in_reply_to":"baada198_160d54e8","updated":"2014-07-21 20:11:50.000000000","message":"Done","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"}],"trove/guestagent/heartbeat.py":[{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":"from trove.common import cfg"},{"line_number":17,"context_line":"from trove.common import context"},{"line_number":18,"context_line":"from trove.conductor import api as conductor_api"},{"line_number":19,"context_line":"from trove.guestagent import version"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_27767d06","line":16,"updated":"2014-07-07 21:04:31.000000000","message":"these imports are not following hacking rules: http://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":"from trove.common import cfg"},{"line_number":17,"context_line":"from trove.common import context"},{"line_number":18,"context_line":"from trove.conductor import api as conductor_api"},{"line_number":19,"context_line":"from trove.guestagent import version"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_aa2f86f5","line":16,"in_reply_to":"baada198_27767d06","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a74c51e3d76b4430919a58e084af2e2524e38f28","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.guestagent import version"},{"line_number":20,"context_line":"from trove.openstack.common.gettextutils import _  # noqa"},{"line_number":21,"context_line":"from trove.openstack.common import log as logging"},{"line_number":22,"context_line":"from trove.guestagent.common import timeutils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_a130c056","line":22,"updated":"2014-07-15 06:46:58.000000000","message":"according to hacking rules, this import should be underneath \"from trove.guestagent import version\"","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"46fea0f4636aac9c81938748bede240849f035e4","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.guestagent import version"},{"line_number":20,"context_line":"from trove.openstack.common.gettextutils import _  # noqa"},{"line_number":21,"context_line":"from trove.openstack.common import log as logging"},{"line_number":22,"context_line":"from trove.guestagent.common import timeutils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_ec7e13af","line":22,"in_reply_to":"baada198_a130c056","updated":"2014-07-15 20:53:24.000000000","message":"Done","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a74c51e3d76b4430919a58e084af2e2524e38f28","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def send(status):"},{"line_number":35,"context_line":"        LOG.debug(_(\"Casting set_status message to conductor.\"))"},{"line_number":36,"context_line":"        ctxt \u003d context.TroveContext(user\u003dCONF.nova_proxy_admin_user,"},{"line_number":37,"context_line":"                                    auth_token\u003dCONF.nova_proxy_admin_pass)"},{"line_number":38,"context_line":"        heartbeat \u003d {"},{"line_number":39,"context_line":"            \u0027service_status\u0027: status.description,"},{"line_number":40,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_01416ca8","line":37,"updated":"2014-07-15 06:46:58.000000000","message":"as an fyi: https://bugs.launchpad.net/trove/+bug/1339349 (not suggesting you fix it here, just to be aware)","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"46fea0f4636aac9c81938748bede240849f035e4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def send(status):"},{"line_number":35,"context_line":"        LOG.debug(_(\"Casting set_status message to conductor.\"))"},{"line_number":36,"context_line":"        ctxt \u003d context.TroveContext(user\u003dCONF.nova_proxy_admin_user,"},{"line_number":37,"context_line":"                                    auth_token\u003dCONF.nova_proxy_admin_pass)"},{"line_number":38,"context_line":"        heartbeat \u003d {"},{"line_number":39,"context_line":"            \u0027service_status\u0027: status.description,"},{"line_number":40,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_870c903d","line":37,"in_reply_to":"baada198_01416ca8","updated":"2014-07-15 20:53:24.000000000","message":"Update the bug with this link.\n\nthx!","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @staticmethod"},{"line_number":34,"context_line":"    def send(status):"},{"line_number":35,"context_line":"        LOG.debug(_(\"Casting set_status message to conductor.\"))"},{"line_number":36,"context_line":"        ctxt \u003d context.TroveContext(user\u003dCONF.nova_proxy_admin_user,"},{"line_number":37,"context_line":"                                    auth_token\u003dCONF.nova_proxy_admin_pass)"},{"line_number":38,"context_line":"        heartbeat \u003d {"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_99cb73a3","line":35,"updated":"2014-07-19 11:03:02.000000000","message":"should not be wrapped","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        conductor_api.API(ctxt).heartbeat(CONF.guest_id,"},{"line_number":48,"context_line":"                                          heartbeat,"},{"line_number":49,"context_line":"                                          sent\u003dtimeutils.float_utcnow())"},{"line_number":50,"context_line":"        LOG.debug(_(\"Successfully cast set_status.\"))"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_b9c3d788","line":50,"updated":"2014-07-19 11:03:02.000000000","message":"same","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from trove.common import context"},{"line_number":18,"context_line":"from trove.conductor import api as conductor_api"},{"line_number":19,"context_line":"from trove.guestagent import version"},{"line_number":20,"context_line":"from trove.guestagent.common import timeutils"},{"line_number":21,"context_line":"from trove.openstack.common.gettextutils import _"},{"line_number":22,"context_line":"from trove.openstack.common import log as logging"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_56fa6cbd","line":20,"updated":"2014-07-21 10:47:20.000000000","message":"from trove.openstack.common import log as logging\n\nfrom trove.openstack.common.gettextutils import _","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e92111be71064a0c796638ede5d6fc22e9196833","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from trove.common import context"},{"line_number":18,"context_line":"from trove.conductor import api as conductor_api"},{"line_number":19,"context_line":"from trove.guestagent import version"},{"line_number":20,"context_line":"from trove.guestagent.common import timeutils"},{"line_number":21,"context_line":"from trove.openstack.common.gettextutils import _"},{"line_number":22,"context_line":"from trove.openstack.common import log as logging"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_22b59dec","line":20,"in_reply_to":"baada198_56fa6cbd","updated":"2014-07-21 20:11:50.000000000","message":"Done","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @staticmethod"},{"line_number":34,"context_line":"    def send(status):"},{"line_number":35,"context_line":"        LOG.debug(_(\"Casting set_status message to conductor.\"))"},{"line_number":36,"context_line":"        ctxt \u003d context.TroveContext(user\u003dCONF.nova_proxy_admin_user,"},{"line_number":37,"context_line":"                                    auth_token\u003dCONF.nova_proxy_admin_pass)"},{"line_number":38,"context_line":"        heartbeat \u003d {"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_7350625e","line":35,"updated":"2014-07-21 10:47:20.000000000","message":"shouldn\u0027t be wrapped","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e92111be71064a0c796638ede5d6fc22e9196833","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @staticmethod"},{"line_number":34,"context_line":"    def send(status):"},{"line_number":35,"context_line":"        LOG.debug(_(\"Casting set_status message to conductor.\"))"},{"line_number":36,"context_line":"        ctxt \u003d context.TroveContext(user\u003dCONF.nova_proxy_admin_user,"},{"line_number":37,"context_line":"                                    auth_token\u003dCONF.nova_proxy_admin_pass)"},{"line_number":38,"context_line":"        heartbeat \u003d {"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_42cff17e","line":35,"in_reply_to":"baada198_7350625e","updated":"2014-07-21 20:11:50.000000000","message":"Done","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        conductor_api.API(ctxt).heartbeat(CONF.guest_id,"},{"line_number":48,"context_line":"                                          heartbeat,"},{"line_number":49,"context_line":"                                          sent\u003dtimeutils.float_utcnow())"},{"line_number":50,"context_line":"        LOG.debug(_(\"Successfully cast set_status.\"))"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_b3467aa5","line":50,"updated":"2014-07-21 10:47:20.000000000","message":"same","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e92111be71064a0c796638ede5d6fc22e9196833","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        conductor_api.API(ctxt).heartbeat(CONF.guest_id,"},{"line_number":48,"context_line":"                                          heartbeat,"},{"line_number":49,"context_line":"                                          sent\u003dtimeutils.float_utcnow())"},{"line_number":50,"context_line":"        LOG.debug(_(\"Successfully cast set_status.\"))"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_62ca356f","line":50,"in_reply_to":"baada198_b3467aa5","updated":"2014-07-21 20:11:50.000000000","message":"Done","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"}],"trove/guestagent/strategies/upgrade/__init__.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    param: name: Class name"},{"line_number":26,"context_line":"    param: ns: Name space"},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    LOG.debug(\"Getting upgrade strategy: %s\")"},{"line_number":29,"context_line":"    return Strategy.get_strategy(name, ns\u003dns)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eGg%3D","line":28,"updated":"2014-04-04 09:56:05.000000000","message":"translation is required","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    param: name: Class name"},{"line_number":26,"context_line":"    param: ns: Name space"},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    LOG.debug(\"Getting upgrade strategy: %s\")"},{"line_number":29,"context_line":"    return Strategy.get_strategy(name, ns\u003dns)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZIM%3D","line":28,"in_reply_to":"AAAAWH%2F9eGg%3D","updated":"2014-04-04 20:39:48.000000000","message":"Done","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"7d0901673a993fa63e9719e8af253cb447558f72","unresolved":false,"context_lines":[{"line_number":21,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def get_upgrade_strategy(ns\u003d__name__):"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    param: ns: Name space"},{"line_number":27,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_d6157540","line":24,"updated":"2014-07-07 20:04:28.000000000","message":"All this function does is wrap import_class.\n\nIIRC import_class can be a class or a function. So there isn\u0027t a good reason to not use it directly.","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def get_upgrade_strategy(ns\u003d__name__):"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    param: ns: Name space"},{"line_number":27,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_87cd8933","line":24,"in_reply_to":"baada198_d6157540","updated":"2014-07-07 21:04:31.000000000","message":"+1","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":21,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def get_upgrade_strategy(ns\u003d__name__):"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    param: ns: Name space"},{"line_number":27,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_0a015239","line":24,"in_reply_to":"baada198_d6157540","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"a6fb1bfd018494872cf26a5814618c61a52cb480","unresolved":false,"context_lines":[{"line_number":21,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def get_upgrade_strategy(ns\u003d__name__):"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    param: ns: Name space"},{"line_number":27,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_debbb50d","line":24,"updated":"2014-07-15 16:49:02.000000000","message":"I still don\u0027t understand why there\u0027s a wrapper to just call the import_class message. I won\u0027t minus one due to this but it doesn\u0027t seem like get_upgrade_strategy is being called from enough places to make it worthwhile.","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"46fea0f4636aac9c81938748bede240849f035e4","unresolved":false,"context_lines":[{"line_number":21,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def get_upgrade_strategy(ns\u003d__name__):"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    param: ns: Name space"},{"line_number":27,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_a7799432","line":24,"in_reply_to":"baada198_debbb50d","updated":"2014-07-15 20:53:24.000000000","message":"Agree w/ you.  I probably just missed this, I actually think we can remove the whole thing.  Consider it another artifact for following the backups implementation too closely.","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"52bda60f4169a60740c414caa17772138d5391e1","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    param: ns: Name space"},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    msg \u003d _(\"Getting upgrade strategy: %s\")"},{"line_number":29,"context_line":"    LOG.debug(msg % ns)"},{"line_number":30,"context_line":"    return import_class(ns)"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_4029f435","line":28,"updated":"2014-07-11 15:29:16.000000000","message":"debug should not be translated","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a74c51e3d76b4430919a58e084af2e2524e38f28","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    param: ns: Name space"},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    msg \u003d _(\"Getting upgrade strategy: %s\")"},{"line_number":29,"context_line":"    LOG.debug(msg % ns)"},{"line_number":30,"context_line":"    return import_class(ns)"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_81149ca0","line":28,"in_reply_to":"baada198_4029f435","updated":"2014-07-15 06:46:58.000000000","message":"+1","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"46fea0f4636aac9c81938748bede240849f035e4","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    param: ns: Name space"},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    msg \u003d _(\"Getting upgrade strategy: %s\")"},{"line_number":29,"context_line":"    LOG.debug(msg % ns)"},{"line_number":30,"context_line":"    return import_class(ns)"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_4792784c","line":28,"in_reply_to":"baada198_4029f435","updated":"2014-07-15 20:53:24.000000000","message":"will remove :)","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"46fea0f4636aac9c81938748bede240849f035e4","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    param: ns: Name space"},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    msg \u003d _(\"Getting upgrade strategy: %s\")"},{"line_number":29,"context_line":"    LOG.debug(msg % ns)"},{"line_number":30,"context_line":"    return import_class(ns)"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_879c905f","line":28,"in_reply_to":"baada198_81149ca0","updated":"2014-07-15 20:53:24.000000000","message":"will remove :)","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"}],"trove/guestagent/strategies/upgrade/base.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        \"\"\""},{"line_number":61,"context_line":"        Runs system commands"},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        self.process \u003d subprocess.Popen(command, shell\u003dTrue,"},{"line_number":64,"context_line":"                                        stdout\u003dsubprocess.PIPE,"},{"line_number":65,"context_line":"                                        stderr\u003dsubprocess.PIPE,"},{"line_number":66,"context_line":"                                        preexec_fn\u003dos.setsid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eFo%3D","line":63,"updated":"2014-04-04 09:56:05.000000000","message":"Are there any strong points why do we need to use subprocess instead of the common \"execute_with_timeout\" ?","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        \"\"\""},{"line_number":61,"context_line":"        Runs system commands"},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        self.process \u003d subprocess.Popen(command, shell\u003dTrue,"},{"line_number":64,"context_line":"                                        stdout\u003dsubprocess.PIPE,"},{"line_number":65,"context_line":"                                        stderr\u003dsubprocess.PIPE,"},{"line_number":66,"context_line":"                                        preexec_fn\u003dos.setsid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZHM%3D","line":63,"in_reply_to":"AAAAWH%2F9eFo%3D","updated":"2014-04-04 20:39:48.000000000","message":"originally I was going to keep track of the pid which is not returned by the wrapper.  I\u0027ll go ahead and use the processutils.execute for now.","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                                        stderr\u003dsubprocess.PIPE,"},{"line_number":66,"context_line":"                                        preexec_fn\u003dos.setsid)"},{"line_number":67,"context_line":"        self.pid \u003d self.process.pid"},{"line_number":68,"context_line":"        LOG.debug(_(\"Running command: %s pid: %s\") % (command, self.pid))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eGQ%3D","line":68,"updated":"2014-04-04 09:56:05.000000000","message":"translation string expect dict formatting","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                                        stderr\u003dsubprocess.PIPE,"},{"line_number":66,"context_line":"                                        preexec_fn\u003dos.setsid)"},{"line_number":67,"context_line":"        self.pid \u003d self.process.pid"},{"line_number":68,"context_line":"        LOG.debug(_(\"Running command: %s pid: %s\") % (command, self.pid))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZHE%3D","line":68,"in_reply_to":"AAAAWH%2F9eGQ%3D","updated":"2014-04-04 20:39:48.000000000","message":"Done","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"3ee8e9437a44a29d5261b871dd42bda3fbc11fed","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        out, err \u003d utils.execute(full_cmd, shell\u003dTrue)"},{"line_number":109,"context_line":"        if err:"},{"line_number":110,"context_line":"            LOG.error(err)"},{"line_number":111,"context_line":"            raise Exception()"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @staticmethod"},{"line_number":114,"context_line":"    def _handle_encrypted_config(context, config_location):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAW3%2F%2F0gE%3D","line":111,"updated":"2014-04-10 07:42:02.000000000","message":"better to raise TroveError with appropriate message","commit_id":"cb8a30607187f65460edfe02ab56da10f471a06c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"3ee8e9437a44a29d5261b871dd42bda3fbc11fed","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        \"\"\""},{"line_number":162,"context_line":"        connection \u003d None"},{"line_number":163,"context_line":"        try:"},{"line_number":164,"context_line":"            connection \u003d Connection(CONF.upgrade_swift_auth_url,"},{"line_number":165,"context_line":"                                    CONF.upgrade_swift_public_key,"},{"line_number":166,"context_line":"                                    CONF.upgrade_swift_private_key,"},{"line_number":167,"context_line":"                                    tenant_name\u003dCONF.upgrade_swift_tenant_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAW3%2F%2F0f8%3D","line":164,"updated":"2014-04-10 07:42:02.000000000","message":"please move it to the remote.py","commit_id":"cb8a30607187f65460edfe02ab56da10f471a06c"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"37b2ec45b9a7d0d377cb81734e649f0373f37b32","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        \"\"\""},{"line_number":162,"context_line":"        connection \u003d None"},{"line_number":163,"context_line":"        try:"},{"line_number":164,"context_line":"            connection \u003d Connection(CONF.upgrade_swift_auth_url,"},{"line_number":165,"context_line":"                                    CONF.upgrade_swift_public_key,"},{"line_number":166,"context_line":"                                    CONF.upgrade_swift_private_key,"},{"line_number":167,"context_line":"                                    tenant_name\u003dCONF.upgrade_swift_tenant_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAW3%2F%2Fvc0%3D","line":164,"in_reply_to":"AAAAW3%2F%2F0f8%3D","updated":"2014-04-10 17:36:21.000000000","message":"well, I don\u0027t want to put this in remote.py right now because the methods there are generalized for remote services use by the customers tenant.\n\nIn this case we trying to allow for an alternate private swift account that doesn\u0027t belong to the customer.","commit_id":"cb8a30607187f65460edfe02ab56da10f471a06c"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @staticmethod"},{"line_number":45,"context_line":"    @abc.abstractmethod"},{"line_number":46,"context_line":"    def install(package, metadata\u003dNone):"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        Installs the package, handles metadata when present"},{"line_number":49,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAXH%2F%2FHQk%3D","line":46,"updated":"2014-04-23 22:50:02.000000000","message":"This method shouldn\u0027t be in the abc class either since it is only used by the implementations. It and restart should actually be prefixed with an underscore to show that.","commit_id":"47b5e1d9af7aeec17b69bbdbec3b5a2df4a38fc0"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \"\"\""},{"line_number":50,"context_line":"    @staticmethod"},{"line_number":51,"context_line":"    @abc.abstractmethod"},{"line_number":52,"context_line":"    def restart(trove_guest_new\u003dNone):"},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        Restart the guest agent"},{"line_number":55,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAXH%2F%2FHQ0%3D","line":52,"updated":"2014-04-23 22:50:02.000000000","message":"This method is only being used by the pip and virtualenv upgrade strategies. It would not be necessary if you were updating using Debian packages as they would update the guest itself and restart it automatically.","commit_id":"47b5e1d9af7aeec17b69bbdbec3b5a2df4a38fc0"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @abc.abstractmethod"},{"line_number":58,"context_line":"    def get_version(self, name\u003d\"trove\"):"},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        Returns the version of package define by the upgrade strategy"},{"line_number":61,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAXH%2F%2FHPw%3D","line":58,"updated":"2014-04-23 22:50:02.000000000","message":"I don\u0027t like that we\u0027re relying on pip to tell us what version of the guest is running. What if our upgrade strategy screws up and leaves the old version running? In that case this method will end up telling us the wrong information.\n\nInstead the guest version should be hardcoded into the guest itself by the setup py or something. Additionally, we don\u0027t need the way to get the current version to be part of an \"upgrade\" strategy as it won\u0027t have anything to do with the upgrade process.","commit_id":"47b5e1d9af7aeec17b69bbdbec3b5a2df4a38fc0"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            CONF.guest_config_filepath + \"/\" + CONF.guest_config_file)"},{"line_number":76,"context_line":"        guest_config_file_bak \u003d guest_config_file + \".\" + time.strftime("},{"line_number":77,"context_line":"            \"%Y-%m-%d\") + \".bak\""},{"line_number":78,"context_line":"        BaseUpgradeRunner._copy_file(guest_config_file, guest_config_file_bak)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @staticmethod"},{"line_number":81,"context_line":"    def _copy_file(infile, outfile):"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAXH%2F%2FHPA%3D","line":78,"updated":"2014-04-23 22:50:02.000000000","message":"Again, I feel like all of these methods are too specific to pip and virtualenv. They should be moved to a subclass of this class which will then be the base class of those two strategies.","commit_id":"47b5e1d9af7aeec17b69bbdbec3b5a2df4a38fc0"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @staticmethod"},{"line_number":45,"context_line":"    @abc.abstractmethod"},{"line_number":46,"context_line":"    def install(package, metadata\u003dNone):"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        Installs the package, handles metadata when present"},{"line_number":49,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXH%2F%2FHJQ%3D","line":46,"updated":"2014-04-23 22:55:03.000000000","message":"This method shouldn\u0027t be in the abc class either since it is only used by the implementations. It and restart should actually be prefixed with an underscore to show that.","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \"\"\""},{"line_number":50,"context_line":"    @staticmethod"},{"line_number":51,"context_line":"    @abc.abstractmethod"},{"line_number":52,"context_line":"    def restart(trove_guest_new\u003dNone):"},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        Restart the guest agent"},{"line_number":55,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXH%2F%2FHJM%3D","line":52,"updated":"2014-04-23 22:55:03.000000000","message":"This method is only being used by the pip and virtualenv upgrade strategies. It would not be necessary if you were updating using Debian packages as they would update the guest itself and restart it automatically.","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"3c247ebafc418aff0b74e1d8210c4a686d2da36d","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \"\"\""},{"line_number":50,"context_line":"    @staticmethod"},{"line_number":51,"context_line":"    @abc.abstractmethod"},{"line_number":52,"context_line":"    def restart(trove_guest_new\u003dNone):"},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        Restart the guest agent"},{"line_number":55,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXX%2F%2F%2BX4%3D","line":52,"in_reply_to":"AAAAXH%2F%2FHJM%3D","updated":"2014-04-24 23:21:26.000000000","message":"Done","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @abc.abstractmethod"},{"line_number":58,"context_line":"    def get_version(self, name\u003d\"trove\"):"},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        Returns the version of package define by the upgrade strategy"},{"line_number":61,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXH%2F%2FHJE%3D","line":58,"updated":"2014-04-23 22:55:03.000000000","message":"I don\u0027t like that we\u0027re relying on pip to tell us what version of the guest is running. What if our upgrade strategy screws up and leaves the old version running? In that case this method will end up telling us the wrong information.\n\nInstead the guest version should be hardcoded into the guest itself by the setup py or something. Additionally, we don\u0027t need the way to get the current version to be part of an \"upgrade\" strategy as it won\u0027t have anything to do with the upgrade process.","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"3c247ebafc418aff0b74e1d8210c4a686d2da36d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @abc.abstractmethod"},{"line_number":58,"context_line":"    def get_version(self, name\u003d\"trove\"):"},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        Returns the version of package define by the upgrade strategy"},{"line_number":61,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXX%2F%2F%2BYE%3D","line":58,"in_reply_to":"AAAAXH%2F%2FHJE%3D","updated":"2014-04-24 23:21:26.000000000","message":"Done","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3af2751eae5599ebb99dae537f51fea268454c36","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @staticmethod"},{"line_number":70,"context_line":"    def _backup_previous():"},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        Rename the previous config file"},{"line_number":73,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXH%2F%2FHJA%3D","line":70,"updated":"2014-04-23 22:55:03.000000000","message":"Again, I feel like all of these methods are too specific to pip and virtualenv. They should be moved to a subclass of this class which will then be the base class of those two strategies.","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"3c247ebafc418aff0b74e1d8210c4a686d2da36d","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @staticmethod"},{"line_number":70,"context_line":"    def _backup_previous():"},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        Rename the previous config file"},{"line_number":73,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAXX%2F%2F%2BLU%3D","line":70,"in_reply_to":"AAAAXH%2F%2FHJA%3D","updated":"2014-04-24 23:21:26.000000000","message":"yeah, I will move this :)","commit_id":"24274eeab7fa0ba56b2454086ab0e02771936dd5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        out, err \u003d utils.execute(full_cmd, shell\u003dTrue)"},{"line_number":110,"context_line":"        if err:"},{"line_number":111,"context_line":"            LOG.error(err)"},{"line_number":112,"context_line":"            raise Exception()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @staticmethod"},{"line_number":115,"context_line":"    def _handle_encrypted_config(context, config_location):"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDI0%3D","line":112,"updated":"2014-04-24 11:44:22.000000000","message":"raise GuestError()","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3fdbb4d549f98171213a2243835251c98da69133","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def run(self, *args, **kwargs):"},{"line_number":31,"context_line":"        \"\"\""},{"line_number":32,"context_line":"        Main method to run the installer"},{"line_number":33,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":38,"id":"9ad9bd40_d23fdb23","line":33,"updated":"2014-05-02 21:22:32.000000000","message":"NICE! Now this is simple. :)","commit_id":"200860974516780038fd7227325ed5a57941ac53"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"7d0901673a993fa63e9719e8af253cb447558f72","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    Upgrade Guest Agent to a new version"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    __strategy_type__ \u003d \u0027upgrade_runner\u0027"},{"line_number":27,"context_line":"    __strategy_ns__ \u003d \u0027trove.guestagent.strategies.upgrade\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @abc.abstractmethod"},{"line_number":30,"context_line":"    def run(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_b643a111","line":27,"updated":"2014-07-07 20:04:28.000000000","message":"Do we need an ABC class that just has a single method?\n\nAlso, what are these variables used for? Should they have double underscores around both of them?","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    Upgrade Guest Agent to a new version"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    __strategy_type__ \u003d \u0027upgrade_runner\u0027"},{"line_number":27,"context_line":"    __strategy_ns__ \u003d \u0027trove.guestagent.strategies.upgrade\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @abc.abstractmethod"},{"line_number":30,"context_line":"    def run(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_a7d0cdc9","line":27,"in_reply_to":"baada198_b643a111","updated":"2014-07-07 21:04:31.000000000","message":"+1","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    Upgrade Guest Agent to a new version"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    __strategy_type__ \u003d \u0027upgrade_runner\u0027"},{"line_number":27,"context_line":"    __strategy_ns__ \u003d \u0027trove.guestagent.strategies.upgrade\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @abc.abstractmethod"},{"line_number":30,"context_line":"    def run(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_eaa33e4d","line":27,"in_reply_to":"baada198_b643a111","updated":"2014-07-09 01:01:58.000000000","message":"nah, was thinking there could be more here one day when we have more implementations.  I can pull it out tho.\n\nI don\u0027t think the vars are necessary.  I think I put them there because I was following the \u0027backups\u0027 implementation for consistency.\n\nI\u0027ll talk to you more about this soon :)","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"be433c2bf68e6ee009be9a9201f529bc91c86dfa","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    Upgrade Guest Agent to a new version"},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def run(self, *args, **kwargs):"},{"line_number":27,"context_line":"        \"\"\""},{"line_number":28,"context_line":"        Main method to run the installer"},{"line_number":29,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_33ecdff3","line":26,"updated":"2014-07-15 21:05:58.000000000","message":"should have decorator @abc.abstractmethod","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1fa5cc960033bee4c638cb633eb0ab380e08422d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from trove.guestagent.strategy import Strategy"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class BaseUpgradeRunner(Strategy):"},{"line_number":21,"context_line":"    \"\"\""},{"line_number":22,"context_line":"    Base class for Upgrade Strategy implementations"},{"line_number":23,"context_line":"    Upgrade Guest Agent to a new version"}],"source_content_type":"text/x-python","patch_set":72,"id":"baada198_ffe141fd","line":20,"updated":"2014-07-16 05:56:46.000000000","message":"Should be decorated with @six.metaclass(abc.Metaclass)","commit_id":"aae30f25eda7fdb86400dba7b83db6f398eb48d8"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"b0333b62d1e9e850eca18af3ae0079cb559e23ab","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from trove.guestagent.strategy import Strategy"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class BaseUpgradeRunner(Strategy):"},{"line_number":21,"context_line":"    \"\"\""},{"line_number":22,"context_line":"    Base class for Upgrade Strategy implementations"},{"line_number":23,"context_line":"    Upgrade Guest Agent to a new version"}],"source_content_type":"text/x-python","patch_set":72,"id":"baada198_713ef6db","line":20,"in_reply_to":"baada198_ffe141fd","updated":"2014-07-17 17:08:26.000000000","message":"We decided to not use abc here for just one silly run method.\nI did originally but core talked my out of it.","commit_id":"aae30f25eda7fdb86400dba7b83db6f398eb48d8"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1fa5cc960033bee4c638cb633eb0ab380e08422d","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    Upgrade Guest Agent to a new version"},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def run(self, *args, **kwargs):"},{"line_number":27,"context_line":"        \"\"\""},{"line_number":28,"context_line":"        Main method to run the installer"},{"line_number":29,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":72,"id":"baada198_fff301e5","line":26,"updated":"2014-07-16 05:56:46.000000000","message":"This method should be decorated with abc.abstractmethod \nSince this class is a  nothing else than abstraction layer. So please fix it.","commit_id":"aae30f25eda7fdb86400dba7b83db6f398eb48d8"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"b0333b62d1e9e850eca18af3ae0079cb559e23ab","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    Upgrade Guest Agent to a new version"},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def run(self, *args, **kwargs):"},{"line_number":27,"context_line":"        \"\"\""},{"line_number":28,"context_line":"        Main method to run the installer"},{"line_number":29,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":72,"id":"baada198_11185a83","line":26,"in_reply_to":"baada198_fff301e5","updated":"2014-07-17 17:08:26.000000000","message":"We decided to not use abc here for just one silly run method. I did originally but core talked my out of it.\n\nI am considering not extending the Strategy class and not following the strategy stuff so closely in this next patch so hopefully this part improves a bit.","commit_id":"aae30f25eda7fdb86400dba7b83db6f398eb48d8"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class BaseUpgradeRunner(object):"},{"line_number":19,"context_line":"    \"\"\""},{"line_number":20,"context_line":"    Base class for Upgrade Strategy implementations"},{"line_number":21,"context_line":"    Upgrade Guest Agent to a new version"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_d9c08b7e","line":18,"updated":"2014-07-19 11:03:02.000000000","message":"@six.metaclass(abc.Metaclass)","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    Upgrade Guest Agent to a new version"},{"line_number":22,"context_line":"    \"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def run(self, context, **kwargs):"},{"line_number":25,"context_line":"        \"\"\""},{"line_number":26,"context_line":"        Main method to run the installer"},{"line_number":27,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_f9b9cf16","line":24,"updated":"2014-07-19 11:03:02.000000000","message":"@abs.abstractmethod","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class BaseUpgradeRunner(object):"},{"line_number":19,"context_line":"    \"\"\""},{"line_number":20,"context_line":"    Base class for Upgrade Strategy implementations"},{"line_number":21,"context_line":"    Upgrade Guest Agent to a new version"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_d3c84e24","line":18,"updated":"2014-07-21 10:47:20.000000000","message":"@six.metaclass(abc.Metaclass)","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    Upgrade Guest Agent to a new version"},{"line_number":22,"context_line":"    \"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def run(self, context, **kwargs):"},{"line_number":25,"context_line":"        \"\"\""},{"line_number":26,"context_line":"        Main method to run the installer"},{"line_number":27,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_f3cb921b","line":24,"updated":"2014-07-21 10:47:20.000000000","message":"@six.metaclass(abc.Metaclass)","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cfedf1cb75a62dd818171db7cb4b79b3e1c1a728","unresolved":false,"context_lines":[{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":9,"context_line":"#"},{"line_number":10,"context_line":"#    Unless required by applicable law or agreed to in writing, software"},{"line_number":11,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_1d5b9a86","line":10,"updated":"2014-07-21 20:33:47.000000000","message":"This comments were ignored not even once. Fix it.","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"587b47077fd7d6ce6cf35a538fb431ec16bfed81","unresolved":false,"context_lines":[{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":9,"context_line":"#"},{"line_number":10,"context_line":"#    Unless required by applicable law or agreed to in writing, software"},{"line_number":11,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_38d22c00","line":10,"in_reply_to":"baada198_1d5b9a86","updated":"2014-07-21 20:52:25.000000000","message":"Hey Denis, I think I addressed this a couple of patches before.\n\nAfter talking with Tim S., we felt like having on method wasn\u0027t enough to justify enforcing abc.\n\nYou\u0027ll notice that I no longer extend Strategy either","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cfedf1cb75a62dd818171db7cb4b79b3e1c1a728","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class BaseUpgradeRunner(object):"},{"line_number":19,"context_line":"    \"\"\""},{"line_number":20,"context_line":"    Base class for Upgrade Strategy implementations"}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_5d699223","line":17,"updated":"2014-07-21 20:33:47.000000000","message":"@six.metaclass(abc.Metaclass)","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"587b47077fd7d6ce6cf35a538fb431ec16bfed81","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class BaseUpgradeRunner(object):"},{"line_number":19,"context_line":"    \"\"\""},{"line_number":20,"context_line":"    Base class for Upgrade Strategy implementations"}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_984178a8","line":17,"in_reply_to":"baada198_5d699223","updated":"2014-07-21 20:52:25.000000000","message":"please see my comments above and hit me up on irc if you have questions.","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cfedf1cb75a62dd818171db7cb4b79b3e1c1a728","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    Base class for Upgrade Strategy implementations"},{"line_number":21,"context_line":"    Upgrade Guest Agent to a new version"},{"line_number":22,"context_line":"    \"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def run(self, context, **kwargs):"},{"line_number":25,"context_line":"        \"\"\""},{"line_number":26,"context_line":"        Main method to run the installer"}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_fd57c657","line":23,"updated":"2014-07-21 20:33:47.000000000","message":"@six.metaclass(abc.Metaclass)","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"587b47077fd7d6ce6cf35a538fb431ec16bfed81","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    Base class for Upgrade Strategy implementations"},{"line_number":21,"context_line":"    Upgrade Guest Agent to a new version"},{"line_number":22,"context_line":"    \"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def run(self, context, **kwargs):"},{"line_number":25,"context_line":"        \"\"\""},{"line_number":26,"context_line":"        Main method to run the installer"}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_d81690a6","line":23,"in_reply_to":"baada198_fd57c657","updated":"2014-07-21 20:52:25.000000000","message":"please see my comments above and hit me up on irc if you have questions.","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"}],"trove/guestagent/strategies/upgrade/metadata_mixin.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        out, err \u003d utils.execute(full_cmd, shell\u003dTrue)"},{"line_number":83,"context_line":"        if err:"},{"line_number":84,"context_line":"            LOG.error(err)"},{"line_number":85,"context_line":"            raise Exception()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_593c7b93","line":85,"updated":"2014-07-19 11:03:02.000000000","message":"could you please raise more specific exception, Exception is too broad.","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    @staticmethod"},{"line_number":156,"context_line":"    def _get_swift_client(context):"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        Return the swift connection"},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":"        return create_swift_client(context)"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_d947ab1b","line":158,"updated":"2014-07-19 11:03:02.000000000","message":"Returns","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":162,"context_line":"    @staticmethod"},{"line_number":163,"context_line":"    def _get_content(connection, location):"},{"line_number":164,"context_line":"        \"\"\""},{"line_number":165,"context_line":"        Retrieve the file object from swift"},{"line_number":166,"context_line":"        \"\"\""},{"line_number":167,"context_line":"        path \u003d urlparse.urlparse(\"%s\" % location)[2]"},{"line_number":168,"context_line":"        container, filename \u003d path.split(\"/\")"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_f950efd6","line":165,"updated":"2014-07-19 11:03:02.000000000","message":"Retrieves","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        headers, content \u003d connection.get_object(container, filename)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        msg \u003d _(\"Swift headers for upgrade package: %s\")"},{"line_number":173,"context_line":"        LOG.debug(msg % headers)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        return content, filename"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_793dbf8d","line":172,"updated":"2014-07-19 11:03:02.000000000","message":"shouldn\u0027t be wrapped","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        with open(filepath, \u0027wb\u0027) as f:"},{"line_number":183,"context_line":"            for chunk in content:"},{"line_number":184,"context_line":"                f.write(chunk)"},{"line_number":185,"context_line":"        f.close()"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    @staticmethod"},{"line_number":188,"context_line":"    def _cleanup_filepath(filepath):"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_194e8338","line":185,"updated":"2014-07-19 11:03:02.000000000","message":"you don\u0027t have to call close(), it\u0027s already done in __exit__ method of \u0027f\u0027 object","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"}],"trove/guestagent/strategies/upgrade/pip.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        Restart the guest agent service"},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        # TODO(DN): This may not be enough in some cases, should check pid"},{"line_number":43,"context_line":"        command \u003d \"service trove-guest stop\""},{"line_number":44,"context_line":"        self.execute(command)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def get_version(self, name\u003d\"trove\"):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eFM%3D","line":43,"updated":"2014-04-04 09:56:05.000000000","message":"restart expect the restart command not the \"stop\"","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        Restart the guest agent service"},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        # TODO(DN): This may not be enough in some cases, should check pid"},{"line_number":43,"context_line":"        command \u003d \"service trove-guest stop\""},{"line_number":44,"context_line":"        self.execute(command)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def get_version(self, name\u003d\"trove\"):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZGo%3D","line":43,"in_reply_to":"AAAAWH%2F9eFM%3D","updated":"2014-04-04 20:39:48.000000000","message":"Done","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \"\"\""},{"line_number":50,"context_line":"        command \u003d \"pip show %s | grep Version | awk \u0027{print $2}\u0027\" % name"},{"line_number":51,"context_line":"        self.execute(command)"},{"line_number":52,"context_line":"        out, err \u003d self.process.communicate()"},{"line_number":53,"context_line":"        if err:"},{"line_number":54,"context_line":"            LOG.error(\"Error: %s encountered executing: %s\" % (err, command))"},{"line_number":55,"context_line":"        version \u003d out.strip()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eEU%3D","line":52,"updated":"2014-04-04 09:56:05.000000000","message":"take a look at previous comments, it would be easier to use \"execute_with_timeout\", because it\u0027ll give you an ability to check the stdin and stdout within one call.\nAnd, of course, it\u0027s safer than subprocess","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \"\"\""},{"line_number":50,"context_line":"        command \u003d \"pip show %s | grep Version | awk \u0027{print $2}\u0027\" % name"},{"line_number":51,"context_line":"        self.execute(command)"},{"line_number":52,"context_line":"        out, err \u003d self.process.communicate()"},{"line_number":53,"context_line":"        if err:"},{"line_number":54,"context_line":"            LOG.error(\"Error: %s encountered executing: %s\" % (err, command))"},{"line_number":55,"context_line":"        version \u003d out.strip()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZGc%3D","line":52,"in_reply_to":"AAAAWH%2F9eEU%3D","updated":"2014-04-04 20:39:48.000000000","message":"Done","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.execute(command)"},{"line_number":52,"context_line":"        out, err \u003d self.process.communicate()"},{"line_number":53,"context_line":"        if err:"},{"line_number":54,"context_line":"            LOG.error(\"Error: %s encountered executing: %s\" % (err, command))"},{"line_number":55,"context_line":"        version \u003d out.strip()"},{"line_number":56,"context_line":"        LOG.debug(\"Version is: %s\" % version)"},{"line_number":57,"context_line":"        return version"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eEI%3D","line":54,"updated":"2014-04-04 09:56:05.000000000","message":"translation is expected","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.execute(command)"},{"line_number":52,"context_line":"        out, err \u003d self.process.communicate()"},{"line_number":53,"context_line":"        if err:"},{"line_number":54,"context_line":"            LOG.error(\"Error: %s encountered executing: %s\" % (err, command))"},{"line_number":55,"context_line":"        version \u003d out.strip()"},{"line_number":56,"context_line":"        LOG.debug(\"Version is: %s\" % version)"},{"line_number":57,"context_line":"        return version"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZF0%3D","line":54,"in_reply_to":"AAAAWH%2F9eEI%3D","updated":"2014-04-04 20:39:48.000000000","message":"Done","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        if err:"},{"line_number":54,"context_line":"            LOG.error(\"Error: %s encountered executing: %s\" % (err, command))"},{"line_number":55,"context_line":"        version \u003d out.strip()"},{"line_number":56,"context_line":"        LOG.debug(\"Version is: %s\" % version)"},{"line_number":57,"context_line":"        return version"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eEE%3D","line":56,"updated":"2014-04-04 09:56:05.000000000","message":"translation is expected","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        if err:"},{"line_number":54,"context_line":"            LOG.error(\"Error: %s encountered executing: %s\" % (err, command))"},{"line_number":55,"context_line":"        version \u003d out.strip()"},{"line_number":56,"context_line":"        LOG.debug(\"Version is: %s\" % version)"},{"line_number":57,"context_line":"        return version"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZFk%3D","line":56,"in_reply_to":"AAAAWH%2F9eEE%3D","updated":"2014-04-04 20:39:48.000000000","message":"Done","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eb409a82ee2421119bb206f68a04f6e634435e28","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        pip -f install target (tarball from sdist)"},{"line_number":86,"context_line":"        \"\"\""},{"line_number":87,"context_line":"        msg \u003d \"Installing package %(package)s\" % {\u0027package\u0027: package}"},{"line_number":88,"context_line":"        LOG.debug(_(msg))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        cmd \u003d \"pip install --upgrade --no-deps -f  %s\" % package"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F9TQ0%3D","line":87,"updated":"2014-04-07 09:17:48.000000000","message":"i\u0027d suggest to use \n\n{\u0027package\u0027 : \u0027 \u0027.join(packages)}\n\ninstead of\n\n{\u0027package\u0027: package}","commit_id":"4fc08ff9e77629dee723dc879a4ed8169fd78f92"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eb409a82ee2421119bb206f68a04f6e634435e28","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        LOG.debug(_(msg))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        cmd \u003d \"pip install --upgrade --no-deps -f  %s\" % package"},{"line_number":91,"context_line":"        utils.execute(cmd\u003dcmd)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    @staticmethod"},{"line_number":94,"context_line":"    def restart():"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F9TPw%3D","line":91,"updated":"2014-04-07 09:17:48.000000000","message":"utils.execute(cmd\u003dcmd, shell\u003dTrue)","commit_id":"4fc08ff9e77629dee723dc879a4ed8169fd78f92"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eb409a82ee2421119bb206f68a04f6e634435e28","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        pip show trove | grep Version | awk \u0027{print $2}\u0027"},{"line_number":107,"context_line":"        \"\"\""},{"line_number":108,"context_line":"        cmd \u003d \"pip show %s | grep Version | awk \u0027{print $2}\u0027\" % name"},{"line_number":109,"context_line":"        out, err \u003d utils.execute(cmd\u003dcmd)"},{"line_number":110,"context_line":"        if err:"},{"line_number":111,"context_line":"            msg \u003d \"Error: %(err)s encountered executing: %(cmd)s\" % {"},{"line_number":112,"context_line":"                \u0027err\u0027: err, \u0027cmd\u0027: cmd}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F9TPs%3D","line":109,"updated":"2014-04-07 09:17:48.000000000","message":"utils.execute(cmd\u003dcmd, shell\u003dTrue)","commit_id":"4fc08ff9e77629dee723dc879a4ed8169fd78f92"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        \"\"\""},{"line_number":40,"context_line":"        msg \u003d _(\"Installing package: %s\")"},{"line_number":41,"context_line":"        LOG.debug(msg % package)"},{"line_number":42,"context_line":"        utils.execute(\"pip\", \"install\", \"trove\", \"--upgrade\", \"--no-deps\","},{"line_number":43,"context_line":"                      \"-f\", package, run_as_root\u003dTrue, root_helper\u003d\"sudo\","},{"line_number":44,"context_line":"                      attempts\u003d3)"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDIw%3D","line":42,"updated":"2014-04-24 11:44:22.000000000","message":"try-except is required with logging appropriate messages","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @staticmethod"},{"line_number":47,"context_line":"    def create_file(filepath, mask, owner_group):"},{"line_number":48,"context_line":"        utils.execute("},{"line_number":49,"context_line":"            \"touch\", filepath, run_as_root\u003dTrue, root_helper\u003d\"sudo\")"},{"line_number":50,"context_line":"        utils.execute("},{"line_number":51,"context_line":"            \"chmod\", mask, filepath, run_as_root\u003dTrue, root_helper\u003d\"sudo\")"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDIo%3D","line":48,"updated":"2014-04-24 11:44:22.000000000","message":"try except required","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        upstart_conf_new \u003d \"/etc/init/%s%s\" % (trove_guest_new, \".conf\")"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        # Start the new guest agent service"},{"line_number":95,"context_line":"        utils.execute(\"service\", trove_guest_new, \"start\", run_as_root\u003dTrue,"},{"line_number":96,"context_line":"                      root_helper\u003d\"sudo\")"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        # replace the trove-guest.conf for the next time we upgrade"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDIg%3D","line":95,"updated":"2014-04-24 11:44:22.000000000","message":"try except required","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"2a93c6bbbb2164aabcff020206e6b8c545fa86b4","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        LOG.debug(_(\"Stopping trove guest agent\"))"},{"line_number":104,"context_line":"        sys.exit(0)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def get_version(self, name\u003d\"trove\"):"},{"line_number":107,"context_line":"        \"\"\""},{"line_number":108,"context_line":"        pip show trove | grep Version | awk \u0027{print $2}\u0027"},{"line_number":109,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FBwE%3D","line":106,"updated":"2014-04-24 14:55:45.000000000","message":"Don\u0027t use pip to do this. Instead do this:\n\n    import pkg_resources\n    pkg \u003d pkg_resources.get_distribution(name)\n    return pkg.version","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e68c334f728831d0db036c8a71f77cb4e6cfd81e","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        LOG.debug(_(\"Stopping trove guest agent\"))"},{"line_number":104,"context_line":"        sys.exit(0)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def get_version(self, name\u003d\"trove\"):"},{"line_number":107,"context_line":"        \"\"\""},{"line_number":108,"context_line":"        pip show trove | grep Version | awk \u0027{print $2}\u0027"},{"line_number":109,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FBB4%3D","line":106,"in_reply_to":"AAAAXH%2F%2FBhQ%3D","updated":"2014-04-24 16:29:35.000000000","message":"thx","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e9a241341f8bfdd9cae17c7b6dfba9c623d5f6ca","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        LOG.debug(_(\"Stopping trove guest agent\"))"},{"line_number":104,"context_line":"        sys.exit(0)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def get_version(self, name\u003d\"trove\"):"},{"line_number":107,"context_line":"        \"\"\""},{"line_number":108,"context_line":"        pip show trove | grep Version | awk \u0027{print $2}\u0027"},{"line_number":109,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FBhQ%3D","line":106,"in_reply_to":"AAAAXH%2F%2FBwE%3D","updated":"2014-04-24 15:23:01.000000000","message":"After small research i totally agreed with Robert.","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e68c334f728831d0db036c8a71f77cb4e6cfd81e","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        LOG.debug(_(\"Stopping trove guest agent\"))"},{"line_number":104,"context_line":"        sys.exit(0)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def get_version(self, name\u003d\"trove\"):"},{"line_number":107,"context_line":"        \"\"\""},{"line_number":108,"context_line":"        pip show trove | grep Version | awk \u0027{print $2}\u0027"},{"line_number":109,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FBB8%3D","line":106,"in_reply_to":"AAAAXH%2F%2FBwE%3D","updated":"2014-04-24 16:29:35.000000000","message":"Thx for the example. I\u0027ll get it into the next set of changes.\n\nI chose \u0027pip show\u0027 because that\u0027s what someone on our side suggested.  I was initially thinking of something like what grapex brought up, writing the version to a file somewhere on the guest but I like what you proposed.","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        \"\"\""},{"line_number":108,"context_line":"        pip show trove | grep Version | awk \u0027{print $2}\u0027"},{"line_number":109,"context_line":"        \"\"\""},{"line_number":110,"context_line":"        out, err \u003d utils.execute("},{"line_number":111,"context_line":"            \"pip\", \"show\", name, \"|\", \"grep\", \"Version\", \"|\","},{"line_number":112,"context_line":"            \"awk\", \"\u0027{print $2}\u0027\")"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDIY%3D","line":110,"updated":"2014-04-24 11:44:22.000000000","message":"try except required","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"UPSTART_CONF \u003d \"/etc/init/trove-guest.conf\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class Pip(BaseUpgradeRunner):"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_c7b86177","line":28,"updated":"2014-07-07 21:04:31.000000000","message":"this probably needs an os-check, see https://github.com/openstack/trove-integration/search?q\u003d%22trove-guest%22\u0026ref\u003dcmdform","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"UPSTART_CONF \u003d \"/etc/init/trove-guest.conf\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class Pip(BaseUpgradeRunner):"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_05d063f6","line":28,"in_reply_to":"baada198_c7b86177","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        \"\"\""},{"line_number":40,"context_line":"        msg \u003d _(\"Installing package: %s\")"},{"line_number":41,"context_line":"        LOG.debug(msg % package)"},{"line_number":42,"context_line":"        utils.execute(\"pip\", \"install\", \"trove\", \"--upgrade\", \"--no-deps\","},{"line_number":43,"context_line":"                      \"-f\", package, run_as_root\u003dTrue, root_helper\u003d\"sudo\","},{"line_number":44,"context_line":"                      attempts\u003d3)"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_072339bd","line":42,"updated":"2014-07-07 21:04:31.000000000","message":"why --no-deps? ex: when configuration-groups was added, jinja2 became a dependency for the newest guestagent. if --no-deps is on, and we attempted to install the latest guestagent in that situation, it would have never succeeded.","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        \"\"\""},{"line_number":40,"context_line":"        msg \u003d _(\"Installing package: %s\")"},{"line_number":41,"context_line":"        LOG.debug(msg % package)"},{"line_number":42,"context_line":"        utils.execute(\"pip\", \"install\", \"trove\", \"--upgrade\", \"--no-deps\","},{"line_number":43,"context_line":"                      \"-f\", package, run_as_root\u003dTrue, root_helper\u003d\"sudo\","},{"line_number":44,"context_line":"                      attempts\u003d3)"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_253d67bc","line":42,"in_reply_to":"baada198_072339bd","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"7d0901673a993fa63e9719e8af253cb447558f72","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        location \u003d kwargs.get(\u0027location\u0027)"},{"line_number":131,"context_line":"        metadata \u003d kwargs.get(\u0027metadata\u0027)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        Pip._install(location, metadata)"},{"line_number":134,"context_line":"        time.sleep(5)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        upstart_conf_new, trove_guest_new \u003d Pip._get_new_configs("}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_d622d550","line":133,"updated":"2014-07-07 20:04:28.000000000","message":"I won\u0027t hold up the pull request but you can use \"self\" here in place of Pip.","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        location \u003d kwargs.get(\u0027location\u0027)"},{"line_number":131,"context_line":"        metadata \u003d kwargs.get(\u0027metadata\u0027)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        Pip._install(location, metadata)"},{"line_number":134,"context_line":"        time.sleep(5)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        upstart_conf_new, trove_guest_new \u003d Pip._get_new_configs("}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_852ab3e5","line":133,"in_reply_to":"baada198_d622d550","updated":"2014-07-09 01:01:58.000000000","message":"k, I like that.  Done.","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        metadata \u003d kwargs.get(\u0027metadata\u0027)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        Pip._install(location, metadata)"},{"line_number":134,"context_line":"        time.sleep(5)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        upstart_conf_new, trove_guest_new \u003d Pip._get_new_configs("},{"line_number":137,"context_line":"            instance_version)"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_c2220fa2","line":134,"updated":"2014-07-07 21:04:31.000000000","message":"can you explain the purpose of this sleep?","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        metadata \u003d kwargs.get(\u0027metadata\u0027)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        Pip._install(location, metadata)"},{"line_number":134,"context_line":"        time.sleep(5)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        upstart_conf_new, trove_guest_new \u003d Pip._get_new_configs("},{"line_number":137,"context_line":"            instance_version)"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_25f48786","line":134,"in_reply_to":"baada198_c2220fa2","updated":"2014-07-09 01:01:58.000000000","message":"Yeah, during my testing it became clear that we need to give a little time for the new package to install (extract, etc)","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        upstart_conf_new, trove_guest_new \u003d Pip._get_new_configs("},{"line_number":137,"context_line":"            instance_version)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        Pip._create_file(upstart_conf_new, \"666\", \"ubuntu:ubuntu\")"},{"line_number":140,"context_line":"        Pip._make_new_upstart_conf(metadata, UPSTART_CONF, upstart_conf_new)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        Pip._restart(trove_guest_new)"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_822c979a","line":139,"updated":"2014-07-07 21:04:31.000000000","message":"this should just inherit/use the user/group that was set on the original upstart file.","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        upstart_conf_new, trove_guest_new \u003d Pip._get_new_configs("},{"line_number":137,"context_line":"            instance_version)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        Pip._create_file(upstart_conf_new, \"666\", \"ubuntu:ubuntu\")"},{"line_number":140,"context_line":"        Pip._make_new_upstart_conf(metadata, UPSTART_CONF, upstart_conf_new)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        Pip._restart(trove_guest_new)"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_a0788590","line":139,"in_reply_to":"baada198_822c979a","updated":"2014-07-09 01:01:58.000000000","message":"This is sorta nasty because I had to use root to create the file first and then come back and write to it.  It\u0027s due to the fact ubuntu can\u0027t write to /etc/init.\n\nI\u0027ll see if I can figure out a better way as I\u0027m re-testing all of these changes.","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"938039f7adb17dc68271b60202b0c8eb2829e53c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import datetime"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import sys"},{"line_number":20,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_561a457d","line":17,"updated":"2014-07-15 07:39:03.000000000","message":"top-posting, because these are general questions about the approach/implementation:\n\n- i\u0027m a bit confused, because i see no code that actually interacts with swift. why is that? (see swift-related code @ https://review.openstack.org/#/c/85225/71/etc/trove/trove-guestagent.conf.sample)\n\n- ignoring the swift thing for a moment: the \"-f\" flag for pip assumes a true pip repository, meaning if you \"python setup.py sdist\" trove and throw it on a random apache server, \"-f http://host/trove-2014.tar.gz\" will not install. you need to actually curl/wget it it locally, then -f it.\n\n- the \"--no-deps\" flag is problematic, because if the latest tarball added a new entry in requirements.txt (or increased the version of a dependency not for niceties sake, but because it was an absolutely necessity), --no-deps will prevent it from being installed, meaning your guest will blow up.\n\n- since you\u0027re always using \"pip install trove\", the result will always be in lib/site-packages/trove; so i\u0027m really confused on what all the conf/new_conf logic is attempting to do?\n\n- what\u0027s our approach on distro packages that have been added in trove-integration disk image elements, but won\u0027t be present on existing guests? ex: pretend for a second we didn\u0027t have a pip dependency on MySQL-python. MySQL-python has a dependency on distro package libmysqlclient-dev. how will existing guests know to \"sudo apt-get install libmysqlclient-dev\" before attempting to pip install the tarball (otherwise they\u0027ll get EnvironmentError: mysql_config not found).\n\n- what\u0027s the plan on adding tooling/scripts to build these tarballs in redstack/devstack? or is the plan to merely add it to the documentation?\n\nirrespective of the answers above, you can reply with how you\u0027re building the guest tarball? i think there might be some confusion here that\u0027s causing the issues above.","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"46fea0f4636aac9c81938748bede240849f035e4","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import datetime"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import sys"},{"line_number":20,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_957033de","line":17,"in_reply_to":"baada198_561a457d","updated":"2014-07-15 20:53:24.000000000","message":"All good questions.  I sent you and Tim and Email to try to explain these.\nI\u0027ll try to reach out to you on chat to see if I can do a better job on some of these points.","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"be433c2bf68e6ee009be9a9201f529bc91c86dfa","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import datetime"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import sys"},{"line_number":20,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_b3854f09","line":17,"in_reply_to":"baada198_957033de","updated":"2014-07-15 21:05:58.000000000","message":"whould be nice to see anwsers in public","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"52bda60f4169a60740c414caa17772138d5391e1","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @staticmethod"},{"line_number":109,"context_line":"    def _get_datetime():"},{"line_number":110,"context_line":"        d \u003d datetime.datetime.now()"},{"line_number":111,"context_line":"        label \u003d d.strftime(\"%Y-%m-%dT%H:%M:%SZ\")"},{"line_number":112,"context_line":"        return label"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_40e014fa","line":110,"updated":"2014-07-11 15:29:16.000000000","message":"you can use utils.utcnow()","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a74c51e3d76b4430919a58e084af2e2524e38f28","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @staticmethod"},{"line_number":109,"context_line":"    def _get_datetime():"},{"line_number":110,"context_line":"        d \u003d datetime.datetime.now()"},{"line_number":111,"context_line":"        label \u003d d.strftime(\"%Y-%m-%dT%H:%M:%SZ\")"},{"line_number":112,"context_line":"        return label"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_b3f493f1","line":110,"in_reply_to":"baada198_40e014fa","updated":"2014-07-15 06:46:58.000000000","message":"+1.","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"46fea0f4636aac9c81938748bede240849f035e4","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @staticmethod"},{"line_number":109,"context_line":"    def _get_datetime():"},{"line_number":110,"context_line":"        d \u003d datetime.datetime.now()"},{"line_number":111,"context_line":"        label \u003d d.strftime(\"%Y-%m-%dT%H:%M:%SZ\")"},{"line_number":112,"context_line":"        return label"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_d571cbdf","line":110,"in_reply_to":"baada198_40e014fa","updated":"2014-07-15 20:53:24.000000000","message":"thx, will do.","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"46fea0f4636aac9c81938748bede240849f035e4","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @staticmethod"},{"line_number":109,"context_line":"    def _get_datetime():"},{"line_number":110,"context_line":"        d \u003d datetime.datetime.now()"},{"line_number":111,"context_line":"        label \u003d d.strftime(\"%Y-%m-%dT%H:%M:%SZ\")"},{"line_number":112,"context_line":"        return label"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_f57ecfae","line":110,"in_reply_to":"baada198_b3f493f1","updated":"2014-07-15 20:53:24.000000000","message":"Done","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"52bda60f4169a60740c414caa17772138d5391e1","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        if os.path.isfile(upstart_conf_new):"},{"line_number":120,"context_line":"            timestamp \u003d Pip._get_datetime()"},{"line_number":121,"context_line":"            upstart_conf_new \u003d \"/etc/init/%s-%s%s\" % ("},{"line_number":122,"context_line":"                \"trove-guest\", timestamp, \".conf\")"},{"line_number":123,"context_line":"            trove_guest_new \u003d \"trove-guest-%s\" % timestamp"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_40b734f5","line":121,"updated":"2014-07-11 15:29:16.000000000","message":"if \u0027trove-guest\u0027 and \u0027.conf\u0027 parts are static why they are placed at rendering step?","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"46fea0f4636aac9c81938748bede240849f035e4","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        if os.path.isfile(upstart_conf_new):"},{"line_number":120,"context_line":"            timestamp \u003d Pip._get_datetime()"},{"line_number":121,"context_line":"            upstart_conf_new \u003d \"/etc/init/%s-%s%s\" % ("},{"line_number":122,"context_line":"                \"trove-guest\", timestamp, \".conf\")"},{"line_number":123,"context_line":"            trove_guest_new \u003d \"trove-guest-%s\" % timestamp"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_7542bf69","line":121,"in_reply_to":"baada198_40b734f5","updated":"2014-07-15 20:53:24.000000000","message":"yeah that would be fine.  I can change it.","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":1925,"name":"Vipul Sabhaya","email":"vipuls@gmail.com","username":"vipuls"},"change_message_id":"461e06cfdc5e4afd0861b0bf5ca5c5da72dd5cde","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \"\"\""},{"line_number":38,"context_line":"        msg \u003d _(\"Installing package: %s\")"},{"line_number":39,"context_line":"        LOG.debug(msg % package)"},{"line_number":40,"context_line":"        utils.execute(\"pip\", \"install\", \"trove\", \"--upgrade\", \"--no-deps\","},{"line_number":41,"context_line":"                      \"-f\", package, run_as_root\u003dTrue, root_helper\u003d\"sudo\","},{"line_number":42,"context_line":"                      attempts\u003d3)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"baada198_8a8bad1d","line":40,"updated":"2014-07-15 23:24:44.000000000","message":"Looks like a lot of the comments you addressed from patch 66 are gone? (i.e. remove --no-deps)","commit_id":"aae30f25eda7fdb86400dba7b83db6f398eb48d8"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"b0333b62d1e9e850eca18af3ae0079cb559e23ab","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \"\"\""},{"line_number":38,"context_line":"        msg \u003d _(\"Installing package: %s\")"},{"line_number":39,"context_line":"        LOG.debug(msg % package)"},{"line_number":40,"context_line":"        utils.execute(\"pip\", \"install\", \"trove\", \"--upgrade\", \"--no-deps\","},{"line_number":41,"context_line":"                      \"-f\", package, run_as_root\u003dTrue, root_helper\u003d\"sudo\","},{"line_number":42,"context_line":"                      attempts\u003d3)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"baada198_a36125d5","line":40,"in_reply_to":"baada198_8a8bad1d","updated":"2014-07-17 17:08:26.000000000","message":"The --no-deps thing I brought back after talking with Auston.  The work that I\u0027m doing today *should* address how we might handle dependencies.","commit_id":"aae30f25eda7fdb86400dba7b83db6f398eb48d8"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_1913e301","line":1,"updated":"2014-07-19 11:03:02.000000000","message":"Please add docstring to each method, so it would easier to understand what\u0027s going on.","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import sys"},{"line_number":19,"context_line":"import time"},{"line_number":20,"context_line":"import trove.common.utils as utils"},{"line_number":21,"context_line":"from trove.guestagent.strategies.upgrade.base import BaseUpgradeRunner"},{"line_number":22,"context_line":"from trove.openstack.common import log as logging"},{"line_number":23,"context_line":"from trove.openstack.common.gettextutils import _"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_39d34739","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":34},"updated":"2014-07-19 11:03:02.000000000","message":"from trove.common import utils","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"UPSTART_CONF \u003d \"/etc/init/trove-guest.conf\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class Pip(BaseUpgradeRunner):"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_d96ecb95","line":27,"updated":"2014-07-19 11:03:02.000000000","message":"we should not hardcode upstart conf, since it forces deployers to stich with only certain file structure.\n\nglucas is working on https://review.openstack.org/#/c/100381/ parametrizing injection path, so i think we should merge that patch and then revisit this one.","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class Pip(BaseUpgradeRunner):"},{"line_number":31,"context_line":"    \"\"\"Implement the Upgrade Strategy for python package.\"\"\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @staticmethod"},{"line_number":34,"context_line":"    def _install(package):"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_f9154fe6","line":31,"updated":"2014-07-19 11:03:02.000000000","message":"Implements","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        Installs new package from a remote package location"},{"line_number":37,"context_line":"        \"\"\""},{"line_number":38,"context_line":"        msg \u003d _(\"Installing package: %s\")"},{"line_number":39,"context_line":"        LOG.debug(msg % package)"},{"line_number":40,"context_line":"        utils.execute(\"pip\", \"install\", \"trove\", \"--upgrade\", \"--no-deps\","},{"line_number":41,"context_line":"                      \"-f\", package, run_as_root\u003dTrue, root_helper\u003d\"sudo\","}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_59639bb0","line":38,"updated":"2014-07-19 11:03:02.000000000","message":"shouldn\u0027t be wrapped","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                \u0027guest_config\u0027: guest_config}"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        exec_cmd \u003d (\u0027exec su -c \"%(guest_agent)s \u0027"},{"line_number":65,"context_line":"                    \u0027--config-file\u003d%(guest_info)s \u0027"},{"line_number":66,"context_line":"                    \u0027--config-file\u003d%(guest_config)s\" \u0027"},{"line_number":67,"context_line":"                    \u0027ubuntu\u0027) % vars"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_b9f837c5","line":65,"updated":"2014-07-19 11:03:02.000000000","message":"same here, for now - it\u0027s totally ok, but, for the future to simplify launch procedure, you should use \"--conf-dir\u003d...\"","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        Start a new trove guest, stop this one"},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":"        # TODO(esp): need refactor to create a file in /tmp to run restart!"},{"line_number":94,"context_line":"        upstart_conf_new \u003d \"/etc/init/%s%s\" % (trove_guest_new, \".conf\")"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        # Start the new guest agent service"},{"line_number":97,"context_line":"        utils.execute(\"service\", trove_guest_new, \"start\", run_as_root\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_d9f5ebcb","line":94,"range":{"start_line":94,"start_character":8,"end_line":94,"end_character":45},"updated":"2014-07-19 11:03:02.000000000","message":"upstart_conf_new \u003d \"/etc/init/%s.conf\" % trove_guest_new","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        sys.exit(0)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @staticmethod"},{"line_number":109,"context_line":"    def _get_datetime():"},{"line_number":110,"context_line":"        d \u003d utils.utcnow()"},{"line_number":111,"context_line":"        label \u003d d.strftime(\"%Y-%m-%dT%H:%M:%SZ\")"},{"line_number":112,"context_line":"        return label"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_f9fe2fae","line":109,"updated":"2014-07-19 11:03:02.000000000","message":"return d.strftime(\"%Y-%m-%dT%H:%M:%SZ\")","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    @staticmethod"},{"line_number":115,"context_line":"    def _get_new_configs(instance_version):"},{"line_number":116,"context_line":"        trove_guest_new \u003d \"trove-guest-%s\" % instance_version"},{"line_number":117,"context_line":"        upstart_conf_new \u003d \"/etc/init/%s%s\" % (trove_guest_new, \".conf\")"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        if os.path.isfile(upstart_conf_new):"},{"line_number":120,"context_line":"            timestamp \u003d Pip._get_datetime()"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_392c274a","line":117,"updated":"2014-07-19 11:03:02.000000000","message":"upstart_conf_new \u003d \"/etc/init/%s.conf\" % trove_guest_new","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        metadata \u003d kwargs.get(\u0027metadata\u0027)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        self._install(location)"},{"line_number":135,"context_line":"        # wait a little bit to allow package to download \u0026 extract"},{"line_number":136,"context_line":"        time.sleep(5)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        upstart_conf_new, trove_guest_new \u003d Pip._get_new_configs("}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_d91c0b16","line":135,"updated":"2014-07-19 11:03:02.000000000","message":"actually, comment is a bit wrong, because at line above package gets installed, pulled and extracted means a bit different thing in terms of packaging process, so please fix it","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        self._install(location)"},{"line_number":135,"context_line":"        # wait a little bit to allow package to download \u0026 extract"},{"line_number":136,"context_line":"        time.sleep(5)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        upstart_conf_new, trove_guest_new \u003d Pip._get_new_configs("},{"line_number":139,"context_line":"            instance_version)"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_79221f55","line":136,"updated":"2014-07-19 11:03:02.000000000","message":"it\u0027s totally incorrect to expect that package would be installed during 5 secs.\n\nyou have to use polling mechanism that will verify that version was updated.","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import sys"},{"line_number":19,"context_line":"import time"},{"line_number":20,"context_line":"import trove.common.utils as utils"},{"line_number":21,"context_line":"from trove.guestagent.strategies.upgrade.base import BaseUpgradeRunner"},{"line_number":22,"context_line":"from trove.openstack.common import log as logging"},{"line_number":23,"context_line":"from trove.openstack.common.gettextutils import _"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_b38bdabe","line":20,"updated":"2014-07-21 10:47:20.000000000","message":"from trove.common import utils","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"UPSTART_CONF \u003d \"/etc/init/trove-guest.conf\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class Pip(BaseUpgradeRunner):"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_d3320e0f","line":27,"updated":"2014-07-21 10:47:20.000000000","message":"See https://review.openstack.org/#/c/100381/","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class Pip(BaseUpgradeRunner):"},{"line_number":31,"context_line":"    \"\"\""},{"line_number":32,"context_line":"    Implement the Upgrade Strategy for python package."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    Requires the following properties in the config."},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_f3c0f2e1","line":32,"updated":"2014-07-21 10:47:20.000000000","message":"Implements","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @staticmethod"},{"line_number":43,"context_line":"    def _install(package):"},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        Installs new package from a remote package location"},{"line_number":46,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_9617a4ed","line":43,"updated":"2014-07-21 10:47:20.000000000","message":"i wonder what if you have to install more than one package?\n\nI\u0027d suggest to rewrite this method to expect that income `package` parameter can be a list or single package","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        LOG.debug(\"Installing package: %s\" % package)"},{"line_number":48,"context_line":"        utils.execute(\"pip\", \"install\", \"trove\", \"--upgrade\", \"--no-deps\","},{"line_number":49,"context_line":"                      \"-f\", package, run_as_root\u003dTrue, root_helper\u003d\"sudo\","},{"line_number":50,"context_line":"                      attempts\u003d3)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @staticmethod"},{"line_number":53,"context_line":"    def _create_file(filepath, mask, owner_group):"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_76693024","line":50,"updated":"2014-07-21 10:47:20.000000000","message":"Another thing, you have to provide new configuration option that will be responsible for additional arguments for this exec. This is required because from one release to another you have to upgrade all dependencies.\n\n\nAnd even more, why `--no-deps`? As for me, you have to upgrade/update dependecies once you need to upgrade guest.","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        Start a new trove guest, stop this one"},{"line_number":100,"context_line":"        \"\"\""},{"line_number":101,"context_line":"        upstart_conf_new \u003d \"/etc/init/%s%s\" % (trove_guest_new, \".conf\")"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        # replace the trove-guest.conf for the next time we upgrade"},{"line_number":104,"context_line":"        utils.execute(\"cp\", upstart_conf_new, \"/etc/init/trove-guest.conf\","}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_53dc3ee4","line":101,"updated":"2014-07-21 10:47:20.000000000","message":"upstart_conf_new \u003d \"/etc/init/%s.conf\" % trove_guest_new","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        upstart_conf_new \u003d \"/etc/init/%s%s\" % (trove_guest_new, \".conf\")"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        # replace the trove-guest.conf for the next time we upgrade"},{"line_number":104,"context_line":"        utils.execute(\"cp\", upstart_conf_new, \"/etc/init/trove-guest.conf\","},{"line_number":105,"context_line":"                      run_as_root\u003dTrue, root_helper\u003d\"sudo\")"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # Start the new guest agent service"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_b3503a2d","line":104,"updated":"2014-07-21 10:47:20.000000000","message":"again, i\u0027d suggest to mark this patchset as WIP, because there\u0027s a fix hanging on the review that maked guest config injections configurable. And we must wait until it gets merged.\n\nSee https://review.openstack.org/#/c/100381/","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                      root_helper\u003d\"sudo\")"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        # Stop this guest agent service"},{"line_number":112,"context_line":"        LOG.debug(\"Stopping trove guest agent.\")"},{"line_number":113,"context_line":"        sys.exit(0)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_33e98a7f","line":112,"updated":"2014-07-21 10:47:20.000000000","message":"should be \u0027terminating\u0027 instead if \u0027stopping\u0027","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    def _get_datetime():"},{"line_number":117,"context_line":"        d \u003d utils.utcnow()"},{"line_number":118,"context_line":"        label \u003d d.strftime(\"%Y-%m-%dT%H:%M:%SZ\")"},{"line_number":119,"context_line":"        return label"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @staticmethod"},{"line_number":122,"context_line":"    def _get_new_configs(instance_version):"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_b6e908e5","line":119,"updated":"2014-07-21 10:47:20.000000000","message":"return d.strftime(\"%Y-%m-%dT%H:%M:%SZ\")\n\nplease reduce methods` LOC size","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    @staticmethod"},{"line_number":122,"context_line":"    def _get_new_configs(instance_version):"},{"line_number":123,"context_line":"        trove_guest_new \u003d \"trove-guest-%s\" % instance_version"},{"line_number":124,"context_line":"        upstart_conf_new \u003d \"/etc/init/%s.conf\" % trove_guest_new"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        if os.path.isfile(upstart_conf_new):"},{"line_number":127,"context_line":"            timestamp \u003d Pip._get_datetime()"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_5696ec4c","line":124,"updated":"2014-07-21 10:47:20.000000000","message":"what if `init.d` ?\n\nAll of this should be taken into account.\n\nAnd what about updating previous upstart scripts? Suppose you\u0027ve changed configuration file location (that\u0027s what you\u0027re actually doing) and guest was registered as OS service and it has start stop scripts?\n\nAs for me, it\u0027s a huge uncovered gap. Too many hardcoding, too many specific deployment-orientied things that are not covered with documentation( upgrade/update documentation is missing at all).\n\n\nPlease find more flexible way to address given concerns.","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        if os.path.isfile(upstart_conf_new):"},{"line_number":127,"context_line":"            timestamp \u003d Pip._get_datetime()"},{"line_number":128,"context_line":"            upstart_conf_new \u003d \"/etc/init/trove-guest-%s.conf\" % timestamp"},{"line_number":129,"context_line":"            trove_guest_new \u003d \"trove-guest-%s\" % timestamp"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        return upstart_conf_new, trove_guest_new"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_76913051","line":128,"updated":"2014-07-21 10:47:20.000000000","message":"same","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        self._install(location)"},{"line_number":142,"context_line":"        # wait a little bit to allow package to download \u0026 extract"},{"line_number":143,"context_line":"        time.sleep(5)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        upstart_conf_new, trove_guest_new \u003d Pip._get_new_configs("},{"line_number":146,"context_line":"            instance_version)"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_b64108a8","line":143,"updated":"2014-07-21 10:47:20.000000000","message":"I\u0027m not happy about such thing. Implement version tracking polling mechanism instead of providing random sleep time (as i already mentioned once, you can predict how long can package be installed with/without deps","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        upstart_conf_new, trove_guest_new \u003d Pip._get_new_configs("},{"line_number":146,"context_line":"            instance_version)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        self._create_file(upstart_conf_new, \"666\", \"ubuntu:ubuntu\")"},{"line_number":149,"context_line":"        self._make_new_upstart_conf(metadata, UPSTART_CONF, upstart_conf_new)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        self._restart(trove_guest_new)"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_33a0aa41","line":148,"updated":"2014-07-21 10:47:20.000000000","message":"i\u0027m totally not happy about pinning to a specific hardcoded user.\n\nUser and group _must_ be configurable. Please fix it.","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cfedf1cb75a62dd818171db7cb4b79b3e1c1a728","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import sys"},{"line_number":19,"context_line":"import time"},{"line_number":20,"context_line":"import trove.common.utils as utils"},{"line_number":21,"context_line":"from trove.guestagent.strategies.upgrade.base import BaseUpgradeRunner"},{"line_number":22,"context_line":"from trove.openstack.common import log as logging"},{"line_number":23,"context_line":"from trove.openstack.common.gettextutils import _"}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_7d4bb6b0","line":20,"updated":"2014-07-21 20:33:47.000000000","message":"from trove.common import utils","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"587b47077fd7d6ce6cf35a538fb431ec16bfed81","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import sys"},{"line_number":19,"context_line":"import time"},{"line_number":20,"context_line":"import trove.common.utils as utils"},{"line_number":21,"context_line":"from trove.guestagent.strategies.upgrade.base import BaseUpgradeRunner"},{"line_number":22,"context_line":"from trove.openstack.common import log as logging"},{"line_number":23,"context_line":"from trove.openstack.common.gettextutils import _"}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_9846d8a5","line":20,"in_reply_to":"baada198_7d4bb6b0","updated":"2014-07-21 20:52:25.000000000","message":"I\u0027ll come back to this one. thx!","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cfedf1cb75a62dd818171db7cb4b79b3e1c1a728","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        LOG.debug(\"Installing package: %s\" % package)"},{"line_number":48,"context_line":"        utils.execute(\"pip\", \"install\", \"trove\", \"--upgrade\", \"--no-deps\","},{"line_number":49,"context_line":"                      \"-f\", package, run_as_root\u003dTrue, root_helper\u003d\"sudo\","},{"line_number":50,"context_line":"                      attempts\u003d3)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_7de2d6a0","line":49,"updated":"2014-07-21 20:33:47.000000000","message":"None of comments from previous patches hadn\u0027t been addressed.","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"587b47077fd7d6ce6cf35a538fb431ec16bfed81","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        LOG.debug(\"Installing package: %s\" % package)"},{"line_number":48,"context_line":"        utils.execute(\"pip\", \"install\", \"trove\", \"--upgrade\", \"--no-deps\","},{"line_number":49,"context_line":"                      \"-f\", package, run_as_root\u003dTrue, root_helper\u003d\"sudo\","},{"line_number":50,"context_line":"                      attempts\u003d3)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_3855cc4f","line":49,"in_reply_to":"baada198_7de2d6a0","updated":"2014-07-21 20:52:25.000000000","message":"This was already discussed with previous reviewers.","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"}],"trove/guestagent/strategies/upgrade/virtualenv.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # TODO(DN): implement"},{"line_number":41,"context_line":"        raise NotImplemented()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def get_version(self, name\u003d\"trove\"):"},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        pip show trove | grep Version | awk \u0027{print $2}\u0027"},{"line_number":46,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eDs%3D","line":43,"updated":"2014-04-04 09:56:05.000000000","message":"this method is common to both strategies (pip and venv), please move it to the mixing","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # TODO(DN): implement"},{"line_number":41,"context_line":"        raise NotImplemented()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def get_version(self, name\u003d\"trove\"):"},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        pip show trove | grep Version | awk \u0027{print $2}\u0027"},{"line_number":46,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZEs%3D","line":43,"in_reply_to":"AAAAWH%2F9eDs%3D","updated":"2014-04-04 20:39:48.000000000","message":"I will directly subclass Pip instead of the \"base\" class.  I think they are going to be similar enough to warrant this although it pains me to use inheritance so much.","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eb409a82ee2421119bb206f68a04f6e634435e28","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        LOG.debug(_(msg))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        cmd \u003d \"tar xvzf %s\" % package"},{"line_number":56,"context_line":"        out, err \u003d utils.execute(cmd\u003dcmd)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # dirname could come from metadata"},{"line_number":59,"context_line":"        Virtualenv.handle_metadata(metadata)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F9TP8%3D","line":56,"updated":"2014-04-07 09:17:48.000000000","message":"utils.execute(cmd\u003dcmd, shell\u003dTrue)","commit_id":"4fc08ff9e77629dee723dc879a4ed8169fd78f92"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        LOG.debug(msg % package)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        cmd \u003d \"tar xvzf %s\" % package"},{"line_number":45,"context_line":"        out, err \u003d utils.execute(cmd, shell\u003dTrue)"},{"line_number":46,"context_line":"        dirname \u003d out.strip()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        if err:"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDII%3D","line":45,"updated":"2014-04-24 11:44:22.000000000","message":"try except required","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \"\"\""},{"line_number":43,"context_line":"        Extract the tarball."},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        msg \u003d _(\"Installing package %s\")"},{"line_number":46,"context_line":"        LOG.debug(msg % package)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        cmd \u003d \"tar xzf %s\" % package"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_59d8fb52","line":45,"updated":"2014-07-19 11:03:02.000000000","message":"should not be wrapped","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        connection \u003d Virtualenv._get_swift_client(context)"},{"line_number":70,"context_line":"        content, filename \u003d Virtualenv._get_content(connection, location)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        package \u003d UPGRADE_FILEPATH + \"/\" + str(filename)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        Virtualenv._write_to_disk(content, package)"},{"line_number":75,"context_line":"        Virtualenv._install(package, metadata)"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_79d93f55","line":72,"updated":"2014-07-19 11:03:02.000000000","message":"os.path.join(UPGRADE_FILEPATH, str(filename))","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        Virtualenv._write_to_disk(content, package)"},{"line_number":75,"context_line":"        Virtualenv._install(package, metadata)"},{"line_number":76,"context_line":"        time.sleep(5)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        # handle upstart configs"},{"line_number":79,"context_line":"        # upstart_conf_new, trove_guest_new \u003d Virtualenv._get_new_configs("}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_99de133d","line":76,"updated":"2014-07-19 11:03:02.000000000","message":"same, you should not do this, use version polling mechanism instead","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        Virtualenv._install(package, metadata)"},{"line_number":76,"context_line":"        time.sleep(5)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        # handle upstart configs"},{"line_number":79,"context_line":"        # upstart_conf_new, trove_guest_new \u003d Virtualenv._get_new_configs("},{"line_number":80,"context_line":"        #     instance_version)"},{"line_number":81,"context_line":"        #"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_d9e32b03","line":78,"updated":"2014-07-19 11:03:02.000000000","message":"please remove commented lines","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import urlparse"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import trove.common.utils as utils"},{"line_number":21,"context_line":"from trove.guestagent.strategies.upgrade.pip import Pip"},{"line_number":22,"context_line":"from trove.guestagent.strategies.upgrade.pip import UPSTART_CONF"},{"line_number":23,"context_line":"from trove.openstack.common import log as logging"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_b64668a5","line":21,"updated":"2014-07-21 10:47:20.000000000","message":"please reduce imports:\n\nfrom trove.guestagent.strategies.upgrade import pip","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e92111be71064a0c796638ede5d6fc22e9196833","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import urlparse"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import trove.common.utils as utils"},{"line_number":21,"context_line":"from trove.guestagent.strategies.upgrade.pip import Pip"},{"line_number":22,"context_line":"from trove.guestagent.strategies.upgrade.pip import UPSTART_CONF"},{"line_number":23,"context_line":"from trove.openstack.common import log as logging"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_22e83db2","line":21,"in_reply_to":"baada198_b64668a5","updated":"2014-07-21 20:11:50.000000000","message":"atm this is necessary I think.","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        target_location \u003d target_dir + \"/\" + filename"},{"line_number":49,"context_line":"        payload \u003d urllib.URLopener()"},{"line_number":50,"context_line":"        payload.retrieve(url, target_location)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        return target_location"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_363c18e1","line":50,"updated":"2014-07-21 10:47:20.000000000","message":"please use httplib2 that\u0027s mentioned in requirements.txt to prevent missing package with custom python installations.","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        upstart_conf_new, trove_guest_new \u003d Virtualenv._get_new_configs("},{"line_number":78,"context_line":"            instance_version)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        Virtualenv._create_file(upstart_conf_new, \"666\", \"ubuntu:ubuntu\")"},{"line_number":81,"context_line":"        Virtualenv._make_new_upstart_conf("},{"line_number":82,"context_line":"            metadata, UPSTART_CONF, upstart_conf_new)"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_9303360f","line":80,"updated":"2014-07-21 10:47:20.000000000","message":"same, user and group must be configurable.","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e92111be71064a0c796638ede5d6fc22e9196833","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        upstart_conf_new, trove_guest_new \u003d Virtualenv._get_new_configs("},{"line_number":78,"context_line":"            instance_version)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        Virtualenv._create_file(upstart_conf_new, \"666\", \"ubuntu:ubuntu\")"},{"line_number":81,"context_line":"        Virtualenv._make_new_upstart_conf("},{"line_number":82,"context_line":"            metadata, UPSTART_CONF, upstart_conf_new)"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_02aed980","line":80,"in_reply_to":"baada198_9303360f","updated":"2014-07-21 20:11:50.000000000","message":"Yeah I was thinking about that too but since upstart is a Ubuntu specific this we are already locked into the impl here.\n\nI think we could follow up with something that would allow for Fedora or Centos as well.\n\nNeed to talk things over with folks first.","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cfedf1cb75a62dd818171db7cb4b79b3e1c1a728","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import urlparse"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import trove.common.utils as utils"},{"line_number":21,"context_line":"from trove.guestagent.strategies.upgrade.pip import Pip"},{"line_number":22,"context_line":"from trove.guestagent.strategies.upgrade.pip import UPSTART_CONF"},{"line_number":23,"context_line":"from trove.openstack.common import log as logging"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_fde506a4","line":21,"updated":"2014-07-21 20:33:47.000000000","message":"it\u0027s not, fix imports, please","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"587b47077fd7d6ce6cf35a538fb431ec16bfed81","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import urlparse"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import trove.common.utils as utils"},{"line_number":21,"context_line":"from trove.guestagent.strategies.upgrade.pip import Pip"},{"line_number":22,"context_line":"from trove.guestagent.strategies.upgrade.pip import UPSTART_CONF"},{"line_number":23,"context_line":"from trove.openstack.common import log as logging"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_38030c43","line":21,"in_reply_to":"baada198_fde506a4","updated":"2014-07-21 20:52:25.000000000","message":"I\u0027ll speak to you about this.","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cfedf1cb75a62dd818171db7cb4b79b3e1c1a728","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        target_location \u003d target_dir + \"/\" + filename"},{"line_number":49,"context_line":"        payload \u003d urllib.URLopener()"},{"line_number":50,"context_line":"        payload.retrieve(url, target_location)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        return target_location"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_7df9f64c","line":50,"updated":"2014-07-21 20:33:47.000000000","message":"not addressed, sine patchset #75","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"587b47077fd7d6ce6cf35a538fb431ec16bfed81","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        target_location \u003d target_dir + \"/\" + filename"},{"line_number":49,"context_line":"        payload \u003d urllib.URLopener()"},{"line_number":50,"context_line":"        payload.retrieve(url, target_location)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        return target_location"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_58fe0039","line":50,"in_reply_to":"baada198_7df9f64c","updated":"2014-07-21 20:52:25.000000000","message":"I\u0027ll speak to you about this.","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cfedf1cb75a62dd818171db7cb4b79b3e1c1a728","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        upstart_conf_new, trove_guest_new \u003d Virtualenv._get_new_configs("},{"line_number":78,"context_line":"            instance_version)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        Virtualenv._create_file(upstart_conf_new, \"666\", \"ubuntu:ubuntu\")"},{"line_number":81,"context_line":"        Virtualenv._make_new_upstart_conf("},{"line_number":82,"context_line":"            metadata, UPSTART_CONF, upstart_conf_new)"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_dd992220","line":80,"updated":"2014-07-21 20:33:47.000000000","message":"user and group should be configurable initialy, not later","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"587b47077fd7d6ce6cf35a538fb431ec16bfed81","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        upstart_conf_new, trove_guest_new \u003d Virtualenv._get_new_configs("},{"line_number":78,"context_line":"            instance_version)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        Virtualenv._create_file(upstart_conf_new, \"666\", \"ubuntu:ubuntu\")"},{"line_number":81,"context_line":"        Virtualenv._make_new_upstart_conf("},{"line_number":82,"context_line":"            metadata, UPSTART_CONF, upstart_conf_new)"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_78f9044d","line":80,"in_reply_to":"baada198_dd992220","updated":"2014-07-21 20:52:25.000000000","message":"I\u0027ll speak to you about this.","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"}],"trove/guestagent/upgrade/__init__.py":[{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3fdbb4d549f98171213a2243835251c98da69133","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from trove.guestagent.upgrade.upgradeagent import UpgradeAgent"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"AGENT \u003d UpgradeAgent()"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def upgrade(context, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":38,"id":"9ad9bd40_d2543b56","line":20,"updated":"2014-05-02 21:22:32.000000000","message":"Would it be that bad if users of the upgrade function below just created this class themselves instead? Creating an instance as the file is being parsed could lead to issues down the line if the class grows complex.","commit_id":"200860974516780038fd7227325ed5a57941ac53"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2bb0d846fdf508ea80ac570c41f8b8dbf4673dec","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from trove.guestagent.upgrade.upgradeagent import UpgradeAgent"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"AGENT \u003d UpgradeAgent()"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def upgrade(context, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":38,"id":"9ad9bd40_9c9d625c","line":20,"in_reply_to":"9ad9bd40_d2543b56","updated":"2014-05-03 07:12:36.000000000","message":"Agreed","commit_id":"200860974516780038fd7227325ed5a57941ac53"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from trove.guestagent.upgrade.upgradeagent import execute_upgrade"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# TODO(esp): remove this ?"},{"line_number":21,"context_line":"def upgrade(context, **kwargs):"},{"line_number":22,"context_line":"    execute_upgrade(context, **kwargs)"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_f9ec6ff6","line":20,"updated":"2014-07-19 11:03:02.000000000","message":"Yeah, seems line we don\u0027t need it at all, because it doesn\u0027t add anything useful. But i\u0027d let it for cores to decide.","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# from trove.guestagent.upgrade.upgradeagent import execute_upgrade"},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":"#"},{"line_number":20,"context_line":"# # TODO(esp): remove this ?"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_961a446d","line":17,"updated":"2014-07-21 10:47:20.000000000","message":"if file doesn\u0027t contain any logic it should be empty","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e92111be71064a0c796638ede5d6fc22e9196833","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# from trove.guestagent.upgrade.upgradeagent import execute_upgrade"},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":"#"},{"line_number":20,"context_line":"# # TODO(esp): remove this ?"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_02fc1971","line":17,"in_reply_to":"baada198_961a446d","updated":"2014-07-21 20:11:50.000000000","message":"Done","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"}],"trove/guestagent/upgrade/upgradeagent.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        Process the upgrade message"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        LOG.debug(_("},{"line_number":52,"context_line":"            \"Upgrading Guest Agent: %s, %s, %s, %s, %s\") % ("},{"line_number":53,"context_line":"                instance_id, instance_version, strategy, location, metadata))"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            upgrade_strategy \u003d UpgradeAgent.get_upgrade_runner()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eDY%3D","line":52,"updated":"2014-04-04 09:56:05.000000000","message":"as i remember translation string expects the dict formatting","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        Process the upgrade message"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        LOG.debug(_("},{"line_number":52,"context_line":"            \"Upgrading Guest Agent: %s, %s, %s, %s, %s\") % ("},{"line_number":53,"context_line":"                instance_id, instance_version, strategy, location, metadata))"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            upgrade_strategy \u003d UpgradeAgent.get_upgrade_runner()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZEg%3D","line":52,"in_reply_to":"AAAAWH%2F9eDY%3D","updated":"2014-04-04 20:39:48.000000000","message":"Done","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            upgrade_strategy.install(package, metadata)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"            UpgradeAgent._cleanup_package(package)"},{"line_number":61,"context_line":"            upgrade_strategy.restart()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        except Exception as e:"},{"line_number":64,"context_line":"            LOG.error(e)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eDM%3D","line":61,"updated":"2014-04-04 09:56:05.000000000","message":"given restart actually stops the guest","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            upgrade_strategy.install(package, metadata)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"            UpgradeAgent._cleanup_package(package)"},{"line_number":61,"context_line":"            upgrade_strategy.restart()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        except Exception as e:"},{"line_number":64,"context_line":"            LOG.error(e)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZEc%3D","line":61,"in_reply_to":"AAAAWH%2F9eDM%3D","updated":"2014-04-04 20:39:48.000000000","message":"Done","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        \"\"\""},{"line_number":73,"context_line":"        connection \u003d create_swift_client(context)"},{"line_number":74,"context_line":"        # Note: swift client already defaults to 5 retries, allows override"},{"line_number":75,"context_line":"        connection.retry \u003d retry"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        path \u003d urlparse.urlparse(\"%s\" % location)[2]"},{"line_number":78,"context_line":"        container, filename \u003d path.split(\"/\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eCo%3D","line":75,"updated":"2014-04-04 09:56:05.000000000","message":"is it really necassery ?","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        \"\"\""},{"line_number":73,"context_line":"        connection \u003d create_swift_client(context)"},{"line_number":74,"context_line":"        # Note: swift client already defaults to 5 retries, allows override"},{"line_number":75,"context_line":"        connection.retry \u003d retry"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        path \u003d urlparse.urlparse(\"%s\" % location)[2]"},{"line_number":78,"context_line":"        container, filename \u003d path.split(\"/\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZEY%3D","line":75,"in_reply_to":"AAAAWH%2F9eCo%3D","updated":"2014-04-04 20:39:48.000000000","message":"I probably not, I\u0027ll remove it.","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eb409a82ee2421119bb206f68a04f6e634435e28","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        Process the upgrade message"},{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        msg \u003d \"Upgrading Guest Agent: %(instance_id)s, %(instance_version)s,\" \\"},{"line_number":48,"context_line":"              \" %(strategy)s, %(location)s, %(metadata)s\" % {"},{"line_number":49,"context_line":"            \u0027instance_id\u0027: instance_id, \u0027instance_version\u0027: instance_version,"},{"line_number":50,"context_line":"            \u0027strategy\u0027: strategy, \u0027location\u0027: location, \u0027metadata\u0027: metadata}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F9TPg%3D","line":47,"updated":"2014-04-07 09:17:48.000000000","message":"please avoid use of \\","commit_id":"4fc08ff9e77629dee723dc879a4ed8169fd78f92"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"0b46b8354dc6a881630faf24d03f0d07e79efad8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        Process the upgrade message"},{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        msg \u003d \"Upgrading Guest Agent: %(instance_id)s, %(instance_version)s,\" \\"},{"line_number":48,"context_line":"              \" %(strategy)s, %(location)s, %(metadata)s\" % {"},{"line_number":49,"context_line":"            \u0027instance_id\u0027: instance_id, \u0027instance_version\u0027: instance_version,"},{"line_number":50,"context_line":"            \u0027strategy\u0027: strategy, \u0027location\u0027: location, \u0027metadata\u0027: metadata}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F9PeQ%3D","line":47,"in_reply_to":"AAAAWH%2F9TPg%3D","updated":"2014-04-07 18:05:52.000000000","message":"Done","commit_id":"4fc08ff9e77629dee723dc879a4ed8169fd78f92"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"3fdbb4d549f98171213a2243835251c98da69133","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        except Exception as e:"},{"line_number":50,"context_line":"            LOG.error(e)"},{"line_number":51,"context_line":"            LOG.error(_(\"Error upgrading guest agent\"))"}],"source_content_type":"text/x-python","patch_set":38,"id":"9ad9bd40_52c82b22","line":51,"updated":"2014-05-02 21:22:32.000000000","message":"Since these are both staticmethods, maybe they could just be free-standing functions instead?","commit_id":"200860974516780038fd7227325ed5a57941ac53"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"7d0901673a993fa63e9719e8af253cb447558f72","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    Returns an instance of the strategy"},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":"    namespace \u003d CONF.get(\u0027upgrade_namespace\u0027)"},{"line_number":31,"context_line":"    upgrade_strategy \u003d get_upgrade_strategy(namespace)"},{"line_number":32,"context_line":"    return upgrade_strategy()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_56632541","line":31,"updated":"2014-07-07 20:04:28.000000000","message":"I\u0027m confused why something simpler like the Driver pattern isn\u0027t being used here.\n\n\"Drivers\" are used throughout OpenStack and are pretty simple. Here we have to set \"upgrade_namespace\" which is passed to something that uses importclass. Why not just use import class right here?","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    Returns an instance of the strategy"},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":"    namespace \u003d CONF.get(\u0027upgrade_namespace\u0027)"},{"line_number":31,"context_line":"    upgrade_strategy \u003d get_upgrade_strategy(namespace)"},{"line_number":32,"context_line":"    return upgrade_strategy()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_c2592f36","line":31,"in_reply_to":"baada198_56632541","updated":"2014-07-07 21:04:31.000000000","message":"+1","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    Returns an instance of the strategy"},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":"    namespace \u003d CONF.get(\u0027upgrade_namespace\u0027)"},{"line_number":31,"context_line":"    upgrade_strategy \u003d get_upgrade_strategy(namespace)"},{"line_number":32,"context_line":"    return upgrade_strategy()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_e0f7ddf3","line":31,"in_reply_to":"baada198_56632541","updated":"2014-07-09 01:01:58.000000000","message":"we can, it\u0027s just not the way backups implemented the \u0027strategy\u0027 paradigm","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"7d0901673a993fa63e9719e8af253cb447558f72","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    except Exception as e:"},{"line_number":43,"context_line":"        LOG.error(e)"},{"line_number":44,"context_line":"        LOG.error(_(\"Error upgrading guest agent\"))"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_d656555b","line":44,"updated":"2014-07-07 20:04:28.000000000","message":"Why not raise the error?","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    except Exception as e:"},{"line_number":43,"context_line":"        LOG.error(e)"},{"line_number":44,"context_line":"        LOG.error(_(\"Error upgrading guest agent\"))"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_408fa975","line":44,"in_reply_to":"baada198_d656555b","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"52bda60f4169a60740c414caa17772138d5391e1","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import logging"},{"line_number":17,"context_line":"from trove.common import cfg"},{"line_number":18,"context_line":"from trove.common.utils import import_class"},{"line_number":19,"context_line":"from trove.openstack.common.gettextutils import _  # noqa"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":22,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_c099847a","line":19,"updated":"2014-07-11 15:29:16.000000000","message":"remove noqa","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"46fea0f4636aac9c81938748bede240849f035e4","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import logging"},{"line_number":17,"context_line":"from trove.common import cfg"},{"line_number":18,"context_line":"from trove.common.utils import import_class"},{"line_number":19,"context_line":"from trove.openstack.common.gettextutils import _  # noqa"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":22,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_384bde60","line":19,"in_reply_to":"baada198_c099847a","updated":"2014-07-15 20:53:24.000000000","message":"Done","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    Process the upgrade message."},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":"    try:"},{"line_number":40,"context_line":"        LOG.debug(\"context: %s\" % context)"},{"line_number":41,"context_line":"        LOG.debug(\"kwargs: %s\" % kwargs)"},{"line_number":42,"context_line":"        get_upgrade_runner().run(context, **kwargs)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_b6dd88df","line":40,"updated":"2014-07-21 10:47:20.000000000","message":"i don\u0027t see any big need in logging RpcContext","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e92111be71064a0c796638ede5d6fc22e9196833","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    Process the upgrade message."},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":"    try:"},{"line_number":40,"context_line":"        LOG.debug(\"context: %s\" % context)"},{"line_number":41,"context_line":"        LOG.debug(\"kwargs: %s\" % kwargs)"},{"line_number":42,"context_line":"        get_upgrade_runner().run(context, **kwargs)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_62223502","line":40,"in_reply_to":"baada198_b6dd88df","updated":"2014-07-21 20:11:50.000000000","message":"Done","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        LOG.debug(\"kwargs: %s\" % kwargs)"},{"line_number":42,"context_line":"        get_upgrade_runner().run(context, **kwargs)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    except Exception as e:"},{"line_number":45,"context_line":"        LOG.error(_(\"Error upgrading guest agent.\"))"},{"line_number":46,"context_line":"        raise e"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_d6ef5c85","line":44,"updated":"2014-07-21 10:47:20.000000000","message":"too broad exception","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e92111be71064a0c796638ede5d6fc22e9196833","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        LOG.debug(\"kwargs: %s\" % kwargs)"},{"line_number":42,"context_line":"        get_upgrade_runner().run(context, **kwargs)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    except Exception as e:"},{"line_number":45,"context_line":"        LOG.error(_(\"Error upgrading guest agent.\"))"},{"line_number":46,"context_line":"        raise e"}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_42037141","line":44,"in_reply_to":"baada198_d6ef5c85","updated":"2014-07-21 20:11:50.000000000","message":"I\u0027m probably gonna leave this for now but I would like to add some better exceptions.","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cfedf1cb75a62dd818171db7cb4b79b3e1c1a728","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    try:"},{"line_number":40,"context_line":"        get_upgrade_runner().run(context, **kwargs)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    except Exception as e:"},{"line_number":43,"context_line":"        LOG.error(_(\"Error upgrading guest agent.\"))"},{"line_number":44,"context_line":"        raise e"}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_bdbd4e6a","line":42,"updated":"2014-07-21 20:33:47.000000000","message":"Sounds good. Please add #TODO with appropriate message","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"}],"trove/guestagent/version.py":[{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"7d0901673a993fa63e9719e8af253cb447558f72","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    @staticmethod"},{"line_number":38,"context_line":"    def get_version(name):"},{"line_number":39,"context_line":"        \"\"\"Implement in the subclass.\"\"\""},{"line_number":40,"context_line":"        pass"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class PipVersionSource(BaseVersionSource):"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_49154a9a","line":40,"updated":"2014-07-07 20:04:28.000000000","message":"There is no reason to have this superclass.","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"1fad973b8114e1c9d3e1626ab853512c7306ffe1","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    @staticmethod"},{"line_number":38,"context_line":"    def get_version(name):"},{"line_number":39,"context_line":"        \"\"\"Implement in the subclass.\"\"\""},{"line_number":40,"context_line":"        pass"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class PipVersionSource(BaseVersionSource):"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_023fa7b4","line":40,"in_reply_to":"baada198_49154a9a","updated":"2014-07-07 21:04:31.000000000","message":"+1","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"bdb7be7cd8eff71701a7bdc3d45520d20740c460","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    @staticmethod"},{"line_number":38,"context_line":"    def get_version(name):"},{"line_number":39,"context_line":"        \"\"\"Implement in the subclass.\"\"\""},{"line_number":40,"context_line":"        pass"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class PipVersionSource(BaseVersionSource):"}],"source_content_type":"text/x-python","patch_set":66,"id":"baada198_a06245ab","line":40,"in_reply_to":"baada198_49154a9a","updated":"2014-07-09 01:01:58.000000000","message":"Done","commit_id":"8911a48351061483441c7ca8b2a0b31bdef697c0"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @staticmethod"},{"line_number":47,"context_line":"    def get_version(name\u003d\"version\"):"},{"line_number":48,"context_line":"        # TODO(esp): return a version string from a file or class"},{"line_number":49,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_79b05ffd","line":48,"updated":"2014-07-19 11:03:02.000000000","message":"can\u0027t we use `trove-manage\u0027 for gettin version?","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"}],"trove/tests/api/upgrade.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4eab27cc6e26a7ea301aa821c77d5ae7284f2aea","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9eCA%3D","line":1,"updated":"2014-04-04 09:56:05.000000000","message":"file should be empty","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"35516a76429d564ab66a1618c925b06beece2300","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F9ZEA%3D","line":1,"in_reply_to":"AAAAWH%2F9eCA%3D","updated":"2014-04-04 20:39:48.000000000","message":"well I gotta write some tests here, so hopefully it won\u0027t be empty next time you see it.","commit_id":"8a6323bd04cb7d3e36c58c9f5ad1cd3c32a127aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class TestUpgradeHelper(object):"},{"line_number":19,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDHY%3D","line":16,"updated":"2014-04-24 11:44:22.000000000","message":"import abc","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    Provide utility methods to assist in testing"},{"line_number":21,"context_line":"    \"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def create_pip_package(self):"},{"line_number":24,"context_line":"        pass"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def create_virtualenv_tarball(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDHE%3D","line":23,"updated":"2014-04-24 11:44:22.000000000","message":"@abc.abstractmethod","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    def create_pip_package(self):"},{"line_number":24,"context_line":"        pass"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def create_virtualenv_tarball(self):"},{"line_number":27,"context_line":"        pass"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def create_config(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDG8%3D","line":26,"updated":"2014-04-24 11:44:22.000000000","message":"@abc.abstractmethod","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    def create_virtualenv_tarball(self):"},{"line_number":27,"context_line":"        pass"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def create_config(self):"},{"line_number":30,"context_line":"        pass"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def encrypt_file(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDG4%3D","line":29,"updated":"2014-04-24 11:44:22.000000000","message":"@abc.abstractmethod","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def create_config(self):"},{"line_number":30,"context_line":"        pass"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def encrypt_file(self):"},{"line_number":33,"context_line":"        pass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDG0%3D","line":32,"updated":"2014-04-24 11:44:22.000000000","message":"@abc.abstractmethod","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \"\"\""},{"line_number":38,"context_line":"    Use the pip upgrade strategy to install a new guest agent"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    pass"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class GuestAgentVirtualenvUpgrade(object):"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDH4%3D","line":40,"updated":"2014-04-24 11:44:22.000000000","message":"pass is not required","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":"    Use the virtualenv strategy to install a new guest agent"},{"line_number":46,"context_line":"    \"\"\""},{"line_number":47,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDH0%3D","line":47,"updated":"2014-04-24 11:44:22.000000000","message":"pass is not required","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"}],"trove/tests/unittests/guestagent/test_agent_heartbeats_models.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                         heartbeat.instance_id)"},{"line_number":77,"context_line":"        self.assertIsNotNone(heartbeat.updated_at)"},{"line_number":78,"context_line":"        self.assertIsNone(heartbeat.guest_agent_version)"},{"line_number":79,"context_line":"        self.assertEqual(None, heartbeat.guest_agent_version)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def test_find_by_instance_id(self):"},{"line_number":82,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_99b533ef","line":79,"updated":"2014-07-19 11:03:02.000000000","message":"self.assertIsNotNone(heartbeat.guest_agent_version)","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                         heartbeat.instance_id)"},{"line_number":77,"context_line":"        self.assertIsNotNone(heartbeat.updated_at)"},{"line_number":78,"context_line":"        self.assertIsNone(heartbeat.guest_agent_version)"},{"line_number":79,"context_line":"        self.assertEqual(None, heartbeat.guest_agent_version)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def test_find_by_instance_id(self):"},{"line_number":82,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_161e345f","line":79,"updated":"2014-07-21 10:47:20.000000000","message":"self.assertIsNotNone(heartbeat.guest_agent_version)","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e92111be71064a0c796638ede5d6fc22e9196833","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                         heartbeat.instance_id)"},{"line_number":77,"context_line":"        self.assertIsNotNone(heartbeat.updated_at)"},{"line_number":78,"context_line":"        self.assertIsNone(heartbeat.guest_agent_version)"},{"line_number":79,"context_line":"        self.assertEqual(None, heartbeat.guest_agent_version)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def test_find_by_instance_id(self):"},{"line_number":82,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_a279adc6","line":79,"in_reply_to":"baada198_161e345f","updated":"2014-07-21 20:11:50.000000000","message":"I\u0027m expecting heartbeat.guest_agent_version to be None","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cfedf1cb75a62dd818171db7cb4b79b3e1c1a728","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                         heartbeat.instance_id)"},{"line_number":77,"context_line":"        self.assertIsNotNone(heartbeat.updated_at)"},{"line_number":78,"context_line":"        self.assertIsNone(heartbeat.guest_agent_version)"},{"line_number":79,"context_line":"        self.assertEqual(None, heartbeat.guest_agent_version)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def test_find_by_instance_id(self):"},{"line_number":82,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_3db13e8f","line":79,"updated":"2014-07-21 20:33:47.000000000","message":"self.assertIsNone(heartbeat.guest_agent_version)","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"2e938e5ed7c0df6d8fdbfb92a72e9ffd25cdbb1e","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                         heartbeat.instance_id)"},{"line_number":77,"context_line":"        self.assertIsNotNone(heartbeat.updated_at)"},{"line_number":78,"context_line":"        self.assertIsNone(heartbeat.guest_agent_version)"},{"line_number":79,"context_line":"        self.assertEqual(None, heartbeat.guest_agent_version)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def test_find_by_instance_id(self):"},{"line_number":82,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":76,"id":"baada198_971ae2c4","line":79,"in_reply_to":"baada198_3db13e8f","updated":"2014-07-24 16:49:37.000000000","message":"Done","commit_id":"8cb9f1cd970cf6a704b2b02d37193127bb21e3f1"}],"trove/tests/unittests/guestagent/test_upgrade.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4e0552ce6be9fba4a8576d632f4089f14de50d55","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import time"},{"line_number":19,"context_line":"import urlparse"},{"line_number":20,"context_line":"import trove.common.utils as utils"},{"line_number":21,"context_line":"from mock import Mock, MagicMock"},{"line_number":22,"context_line":"from trove.common import cfg"},{"line_number":23,"context_line":"from trove.guestagent.upgrade.upgradeagent import UpgradeAgent"},{"line_number":24,"context_line":"from trove.guestagent.strategies.upgrade.base import BaseUpgradeRunner"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAXH%2F%2FDGs%3D","line":21,"updated":"2014-04-24 11:44:22.000000000","message":"please use single import per line or use \"import mock\"","commit_id":"9f8e44d9a9c4957f637e812cb11d7b4e593bf56a"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a74c51e3d76b4430919a58e084af2e2524e38f28","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_e1a0f843","line":1,"updated":"2014-07-15 06:46:58.000000000","message":"shouldn\u0027t be attributed to the OpenStack Foundation, it should be attributed to HP.","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"a6fb1bfd018494872cf26a5814618c61a52cb480","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_fea799a5","line":1,"in_reply_to":"baada198_69876e61","updated":"2014-07-15 16:49:02.000000000","message":"I think the issue is the copyright of intellectual property can\u0027t be assigned to another company / person unless you sign a legal contract. In this case the thing we sign to dev on OpenStack doesn\u0027t assign the copyright to the foundation, it just proves our company is allowing us to do work which will be licensed under the Apache License to the project. Although I\u0027m not a lawyer so of course take everything I say with a grain of salt. :)","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"25ebbcb4b1f9fbf68fd2943272a7e56ade46da8c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_69876e61","line":1,"in_reply_to":"baada198_e1a0f843","updated":"2014-07-15 07:32:09.000000000","message":"does it really matter ?","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a74c51e3d76b4430919a58e084af2e2524e38f28","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from mock import Mock"},{"line_number":19,"context_line":"from trove.common import cfg"},{"line_number":20,"context_line":"import trove.guestagent.upgrade.upgradeagent as UpgradeAgent"},{"line_number":21,"context_line":"from trove.guestagent.strategies.upgrade.pip import Pip"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d cfg.CONF"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_a168c0f5","line":21,"updated":"2014-07-15 06:46:58.000000000","message":"imports aren\u0027t following hacking rules (http://docs.openstack.org/developer/hacking/#imports)","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"25ebbcb4b1f9fbf68fd2943272a7e56ade46da8c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from mock import Mock"},{"line_number":19,"context_line":"from trove.common import cfg"},{"line_number":20,"context_line":"import trove.guestagent.upgrade.upgradeagent as UpgradeAgent"},{"line_number":21,"context_line":"from trove.guestagent.strategies.upgrade.pip import Pip"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d cfg.CONF"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":71,"id":"baada198_897a0275","line":21,"in_reply_to":"baada198_a168c0f5","updated":"2014-07-15 07:32:09.000000000","message":"+1","commit_id":"1fabdbc15fb3e7b9fe1f8afc8bc5846f1d64ee32"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from mock import Mock"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from trove.common import cfg"},{"line_number":24,"context_line":"import trove.common.utils as utils"},{"line_number":25,"context_line":"from trove.guestagent.strategies.upgrade.metadata_mixin import MetaMixin"},{"line_number":26,"context_line":"from trove.guestagent.strategies.upgrade.metadata_mixin import UPGRADE_FILEPATH"},{"line_number":27,"context_line":"from trove.guestagent.strategies.upgrade.pip import Pip"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_f9c38f55","line":24,"updated":"2014-07-19 11:03:02.000000000","message":"`import` statement should come before `from` statement","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from trove.common import cfg"},{"line_number":24,"context_line":"import trove.common.utils as utils"},{"line_number":25,"context_line":"from trove.guestagent.strategies.upgrade.metadata_mixin import MetaMixin"},{"line_number":26,"context_line":"from trove.guestagent.strategies.upgrade.metadata_mixin import UPGRADE_FILEPATH"},{"line_number":27,"context_line":"from trove.guestagent.strategies.upgrade.pip import Pip"},{"line_number":28,"context_line":"from trove.guestagent.strategies.upgrade.virtualenv import Virtualenv"}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_b9cd9788","line":25,"updated":"2014-07-19 11:03:02.000000000","message":"could you please simplify imports ?\n\nfrom trove.guestagent.strategies.upgrade import metadata_mixin","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4c5b0b53c0aa04adc418d40a1de050a605cc65bb","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from trove.guestagent.strategies.upgrade.metadata_mixin import UPGRADE_FILEPATH"},{"line_number":27,"context_line":"from trove.guestagent.strategies.upgrade.pip import Pip"},{"line_number":28,"context_line":"from trove.guestagent.strategies.upgrade.virtualenv import Virtualenv"},{"line_number":29,"context_line":"import trove.guestagent.upgrade.upgradeagent as UpgradeAgent"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from trove.openstack.common import log as logging"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":74,"id":"baada198_19c1234e","line":29,"updated":"2014-07-19 11:03:02.000000000","message":"same","commit_id":"b46c6905ec9abffa64f7f06b6e6668deb01fa813"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e23f7694eaeb4f27d1b28a758a387b004f141bfa","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import trove.common.utils as utils"},{"line_number":21,"context_line":"from trove.guestagent.strategies.upgrade.pip import Pip"},{"line_number":22,"context_line":"from trove.guestagent.strategies.upgrade.virtualenv import Virtualenv"},{"line_number":23,"context_line":"import trove.guestagent.upgrade.upgradeagent as UpgradeAgent"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from trove.openstack.common import log as logging"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_f678e090","line":23,"updated":"2014-07-21 10:47:20.000000000","message":"from trove.guestagent.upgrade import upgradeagent\n\n\nAnd `import` statemets should come before `from` statements","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"e92111be71064a0c796638ede5d6fc22e9196833","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import trove.common.utils as utils"},{"line_number":21,"context_line":"from trove.guestagent.strategies.upgrade.pip import Pip"},{"line_number":22,"context_line":"from trove.guestagent.strategies.upgrade.virtualenv import Virtualenv"},{"line_number":23,"context_line":"import trove.guestagent.upgrade.upgradeagent as UpgradeAgent"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from trove.openstack.common import log as logging"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"baada198_a227edc5","line":23,"in_reply_to":"baada198_f678e090","updated":"2014-07-21 20:11:50.000000000","message":"http://docs.openstack.org/developer/hacking/#import-order-template\n\n^ this looks like they want alphabetical order regardless of \u0027from\u0027 vs \u0027import\u0027","commit_id":"3994259409420703fe910e11d1303e67a56fcaf5"}]}
