)]}'
{"trove/common/cfg.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"254928981a76682319d8f6ad3149fa01d9074864","unresolved":false,"context_lines":[{"line_number":487,"context_line":"    cfg.StrOpt(\u0027mount_point\u0027, default\u003d\u0027/var/lib/postgresql\u0027,"},{"line_number":488,"context_line":"               help\u003d\"Filesystem path for mounting \""},{"line_number":489,"context_line":"               \"volumes if volume support is enabled.\"),"},{"line_number":490,"context_line":"    cfg.IntOpt(\u0027usage_timeout\u0027, default\u003d450,"},{"line_number":491,"context_line":"               help\u003d\u0027Timeout to wait for a guest to become active.\u0027),"},{"line_number":492,"context_line":"    cfg.BoolOpt(\u0027root_on_create\u0027, default\u003dFalse,"},{"line_number":493,"context_line":"                help\u003d\u0027Enable the automatic creation of the root user for the \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_81209db1","line":490,"updated":"2014-08-27 09:16:34.000000000","message":"usage timeout is now the part of common conf group","commit_id":"987e415df4ea784eabb8924de898108e0679020a"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"646c76120fe56de7ef0d3fdfd09774d4672b7130","unresolved":false,"context_lines":[{"line_number":487,"context_line":"    cfg.StrOpt(\u0027mount_point\u0027, default\u003d\u0027/var/lib/postgresql\u0027,"},{"line_number":488,"context_line":"               help\u003d\"Filesystem path for mounting \""},{"line_number":489,"context_line":"               \"volumes if volume support is enabled.\"),"},{"line_number":490,"context_line":"    cfg.IntOpt(\u0027usage_timeout\u0027, default\u003d450,"},{"line_number":491,"context_line":"               help\u003d\u0027Timeout to wait for a guest to become active.\u0027),"},{"line_number":492,"context_line":"    cfg.BoolOpt(\u0027root_on_create\u0027, default\u003dFalse,"},{"line_number":493,"context_line":"                help\u003d\u0027Enable the automatic creation of the root user for the \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_fc04947f","line":490,"in_reply_to":"1abeadc6_81209db1","updated":"2014-08-27 09:26:48.000000000","message":"+1","commit_id":"987e415df4ea784eabb8924de898108e0679020a"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"c09d801bd5aa8419671699f16e1a57551afc1bd9","unresolved":false,"context_lines":[{"line_number":487,"context_line":"    cfg.StrOpt(\u0027mount_point\u0027, default\u003d\u0027/var/lib/postgresql\u0027,"},{"line_number":488,"context_line":"               help\u003d\"Filesystem path for mounting \""},{"line_number":489,"context_line":"               \"volumes if volume support is enabled.\"),"},{"line_number":490,"context_line":"    cfg.IntOpt(\u0027usage_timeout\u0027, default\u003d450,"},{"line_number":491,"context_line":"               help\u003d\u0027Timeout to wait for a guest to become active.\u0027),"},{"line_number":492,"context_line":"    cfg.BoolOpt(\u0027root_on_create\u0027, default\u003dFalse,"},{"line_number":493,"context_line":"                help\u003d\u0027Enable the automatic creation of the root user for the \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_54ae1399","line":490,"in_reply_to":"1abeadc6_fc04947f","updated":"2014-08-28 09:39:41.000000000","message":"usage_timeout is also still a part of the mysql and percona config groups. Are you saying it is part of the common group and I no longer _have_ to have one here or that it has no effect because only the common one counts?","commit_id":"987e415df4ea784eabb8924de898108e0679020a"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f2a8682b4a95d6d9bc6d6a2c8e48c55e9bf3848e","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                default\u003d{\u0027mysql\u0027: \u00272f3ff068-2bfb-4f70-9a9d-a6bb65bc084b\u0027,"},{"line_number":235,"context_line":"                         \u0027redis\u0027: \u0027b216ffc5-1947-456c-a4cf-70f94c05f7d0\u0027,"},{"line_number":236,"context_line":"                         \u0027cassandra\u0027: \u0027459a230d-4e97-4344-9067-2a54a310b0ed\u0027,"},{"line_number":237,"context_line":"                         \u0027couchbase\u0027: \u0027fa62fe68-74d9-4779-a24e-36f19602c415\u0027,"},{"line_number":238,"context_line":"                         \u0027mongodb\u0027: \u0027c8c907af-7375-456f-b929-b637ff9209ee\u0027},"},{"line_number":239,"context_line":"                help\u003d\u0027Unique ID to tag notification events.\u0027),"},{"line_number":240,"context_line":"    cfg.StrOpt(\u0027nova_proxy_admin_user\u0027, default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_b4677324","line":237,"updated":"2014-09-02 21:55:19.000000000","message":"you forgot to add postgresql here; afaik, this will impact billing for one company in particular.","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f2a8682b4a95d6d9bc6d6a2c8e48c55e9bf3848e","unresolved":false,"context_lines":[{"line_number":489,"context_line":"    cfg.StrOpt(\u0027device_path\u0027, default\u003d\u0027/dev/vdb\u0027),"},{"line_number":490,"context_line":"]"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"# PostgreSQL"},{"line_number":493,"context_line":"postgresql_group \u003d cfg.OptGroup("},{"line_number":494,"context_line":"    \u0027postgresql\u0027, title\u003d\u0027PostgreSQL options\u0027,"},{"line_number":495,"context_line":"    help\u003d\"Oslo option group for the PostgreSQL datastore.\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_e5cea3b3","line":492,"updated":"2014-09-02 21:55:19.000000000","message":"the standard thus far has been to add every applicable optgroup to trove.conf.sample and trove-taskmanager.conf.sample (see https://github.com/openstack/trove/blob/master/etc/trove/trove.conf.sample#L187-L213 and https://github.com/openstack/trove/blob/master/etc/trove/trove-taskmanager.conf.sample#L187-L214).\n\n    [postgresql]\n    volume_support \u003d True\n    device_path \u003d /dev/vdb\n\nshould suffice.","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"f67d693c60772e17fbd3493a40bb28ec8117e45a","unresolved":false,"context_lines":[{"line_number":489,"context_line":"    cfg.StrOpt(\u0027device_path\u0027, default\u003d\u0027/dev/vdb\u0027),"},{"line_number":490,"context_line":"]"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"# PostgreSQL"},{"line_number":493,"context_line":"postgresql_group \u003d cfg.OptGroup("},{"line_number":494,"context_line":"    \u0027postgresql\u0027, title\u003d\u0027PostgreSQL options\u0027,"},{"line_number":495,"context_line":"    help\u003d\"Oslo option group for the PostgreSQL datastore.\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_f66bb8ee","line":492,"in_reply_to":"fa98f980_e5cea3b3","updated":"2014-09-03 01:20:48.000000000","message":"I missed that there wasn\u0027t a corresponding opt-group in trove.conf.sample. +1 to adding a section to that.","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6f2007d7ced3bf80fbb37c449d13bb21bc7df3f6","unresolved":false,"context_lines":[{"line_number":489,"context_line":"    cfg.StrOpt(\u0027device_path\u0027, default\u003d\u0027/dev/vdb\u0027),"},{"line_number":490,"context_line":"]"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"# PostgreSQL"},{"line_number":493,"context_line":"postgresql_group \u003d cfg.OptGroup("},{"line_number":494,"context_line":"    \u0027postgresql\u0027, title\u003d\u0027PostgreSQL options\u0027,"},{"line_number":495,"context_line":"    help\u003d\"Oslo option group for the PostgreSQL datastore.\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_dae324a2","line":492,"in_reply_to":"fa98f980_f66bb8ee","updated":"2014-09-03 13:43:57.000000000","message":"That\u0027s what i was asking few patchsets ago.","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"}],"trove/common/utils.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"32f023175149ca1c1cf1098e36b53ad5ff4c6888","unresolved":false,"context_lines":[{"line_number":269,"context_line":"def execute_with_timeout(*args, **kwargs):"},{"line_number":270,"context_line":"    time \u003d kwargs.get(\u0027timeout\u0027, 30)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def cb_timeout():"},{"line_number":273,"context_line":"        msg \u003d (_(\"Time out after waiting\""},{"line_number":274,"context_line":"                 \" %(time)s seconds when running proc: %(args)s\""},{"line_number":275,"context_line":"                 \" %(kwargs)s\") % {\u0027time\u0027: time, \u0027args\u0027: args,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bs4o%3D","side":"PARENT","line":272,"updated":"2013-11-21 11:24:11.000000000","message":"Any reasons to remove this ?","commit_id":"ad4bbe19bc0b7b7b3f21b418119a822a89ed18ad"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def execute_with_timeout(*args, **kwargs):"},{"line_number":268,"context_line":"    # execute will except if timeout is left in the kwargs."},{"line_number":269,"context_line":"    time \u003d kwargs.pop(\u0027timeout\u0027, 30)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    timeout \u003d Timeout(time)"},{"line_number":272,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fy6g%3D","line":269,"updated":"2013-12-31 13:53:27.000000000","message":"this change deserves its own BP or bugreport","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"}],"trove/guestagent/backup/backupagent.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        try:"},{"line_number":74,"context_line":"            with runner(filename\u003dbackup_id, extra_opts\u003dextra_opts,"},{"line_number":75,"context_line":"                        user\u003duser, password\u003dpassword) as bkup:"},{"line_number":76,"context_line":"                try:"},{"line_number":77,"context_line":"                    LOG.info(\"Starting Backup %s\", backup_id)"},{"line_number":78,"context_line":"                    success, note, checksum, location \u003d storage.save("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fy6Y%3D","side":"PARENT","line":75,"updated":"2013-12-31 13:53:27.000000000","message":"same as previous comment","commit_id":"84dbe87c22eb45934e57eef36bd88b350fc141f8"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        try:"},{"line_number":74,"context_line":"            with runner(filename\u003dbackup_id, extra_opts\u003dextra_opts,"},{"line_number":75,"context_line":"                        user\u003duser, password\u003dpassword) as bkup:"},{"line_number":76,"context_line":"                try:"},{"line_number":77,"context_line":"                    LOG.info(\"Starting Backup %s\", backup_id)"},{"line_number":78,"context_line":"                    success, note, checksum, location \u003d storage.save("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyjk%3D","side":"PARENT","line":75,"in_reply_to":"AAAAT3%2F%2Fy6Y%3D","updated":"2013-12-31 15:52:08.000000000","message":"I disagree. This change is related to the change made to \u0027trove/guestagent/strategies/backup/mysql_impl.py\u0027. The original code works. I only changed it to make postgresql work.","commit_id":"84dbe87c22eb45934e57eef36bd88b350fc141f8"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        try:"},{"line_number":74,"context_line":"            with runner(filename\u003dbackup_id, extra_opts\u003dextra_opts,"},{"line_number":75,"context_line":"                        user\u003duser, password\u003dpassword) as bkup:"},{"line_number":76,"context_line":"                try:"},{"line_number":77,"context_line":"                    LOG.info(\"Starting Backup %s\", backup_id)"},{"line_number":78,"context_line":"                    success, note, checksum, location \u003d storage.save("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FybA%3D","side":"PARENT","line":75,"in_reply_to":"AAAAT3%2F%2Fyjk%3D","updated":"2013-12-31 16:17:05.000000000","message":"if you want to make it more general - report a bug, and make another patchset.","commit_id":"84dbe87c22eb45934e57eef36bd88b350fc141f8"}],"trove/guestagent/datastore/postgresql/__init__.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fy6U%3D","line":1,"updated":"2013-12-31 13:53:27.000000000","message":"no logic. empty file should be","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyjs%3D","line":1,"in_reply_to":"AAAAT3%2F%2Fy6U%3D","updated":"2013-12-31 15:52:08.000000000","message":"Fair enough. I will empty this file.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"}],"trove/guestagent/datastore/postgresql/manager.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"32f023175149ca1c1cf1098e36b53ad5ff4c6888","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        return app.is_root_enabled()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def prepare("},{"line_number":116,"context_line":"            self,"},{"line_number":117,"context_line":"            context,"},{"line_number":118,"context_line":"            packages,"},{"line_number":119,"context_line":"            databases,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bs3c%3D","line":116,"updated":"2013-11-21 11:24:11.000000000","message":"Sorry, but it\u0027s not so comfortable to read","commit_id":"9b7676ec63e404c516432c2ffa7a863f0992b1e5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"32f023175149ca1c1cf1098e36b53ad5ff4c6888","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            self.create_user(context, users)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def restart(self, context):"},{"line_number":158,"context_line":"        app \u003d PgSqlApp(PgSqlAppStatus.get())"},{"line_number":159,"context_line":"        app.restart()"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def start_db_with_conf_changes(self, context, config_contents):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bs3E%3D","line":158,"updated":"2013-11-21 11:24:11.000000000","message":"it would be better to use single app instance through whole manager class","commit_id":"9b7676ec63e404c516432c2ffa7a863f0992b1e5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"32f023175149ca1c1cf1098e36b53ad5ff4c6888","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        :param backup_id: the db instance id of the backup task"},{"line_number":181,"context_line":"        \"\"\""},{"line_number":182,"context_line":"        backup.backup(context, backup_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bs3U%3D","line":182,"updated":"2013-11-21 11:24:11.000000000","message":"backup is not implemented","commit_id":"9b7676ec63e404c516432c2ffa7a863f0992b1e5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"254928981a76682319d8f6ad3149fa01d9074864","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.guestagent import dbaas"},{"line_number":20,"context_line":"from trove.guestagent import backup"},{"line_number":21,"context_line":"from trove.guestagent import volume"},{"line_number":22,"context_line":"from .service.config import PgSqlConfig"},{"line_number":23,"context_line":"from .service.database import PgSqlDatabase"},{"line_number":24,"context_line":"from .service.install import PgSqlInstall"},{"line_number":25,"context_line":"from .service.root import PgSqlRoot"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_41168556","line":22,"updated":"2014-08-27 09:16:34.000000000","message":"use of relative paths is not allowed, please fix it.","commit_id":"987e415df4ea784eabb8924de898108e0679020a"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"646c76120fe56de7ef0d3fdfd09774d4672b7130","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.guestagent import dbaas"},{"line_number":20,"context_line":"from trove.guestagent import backup"},{"line_number":21,"context_line":"from trove.guestagent import volume"},{"line_number":22,"context_line":"from .service.config import PgSqlConfig"},{"line_number":23,"context_line":"from .service.database import PgSqlDatabase"},{"line_number":24,"context_line":"from .service.install import PgSqlInstall"},{"line_number":25,"context_line":"from .service.root import PgSqlRoot"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_1c7dd0e7","line":22,"in_reply_to":"1abeadc6_41168556","updated":"2014-08-27 09:26:48.000000000","message":"This is H304, which we are not validating yet.","commit_id":"987e415df4ea784eabb8924de898108e0679020a"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"97b82b42e6debf5a63c513348094aef639dac3ba","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"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":14,"id":"1abeadc6_b96ae9ea","line":1,"updated":"2014-08-28 18:56:56.000000000","message":"you probably meant to have this as 2014 Rackspace Hosting (the issue is in quite a few files, fyi)","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b16336e973a22b505a229fac7a2dfa1357a05e5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"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":14,"id":"1abeadc6_93cd0634","line":1,"in_reply_to":"1abeadc6_b96ae9ea","updated":"2014-08-28 22:00:37.000000000","message":"This isn\u0027t really a Rackspace thing, but I didn\u0027t see any other copyrights from individual contributors so I used the OpenStack Foundation.","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"5c8d9e5421b6aedf66538ecd6c7b19dfcb992982","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.guestagent import dbaas"},{"line_number":20,"context_line":"from trove.guestagent import backup"},{"line_number":21,"context_line":"from trove.guestagent import volume"},{"line_number":22,"context_line":"from .service.config import PgSqlConfig"},{"line_number":23,"context_line":"from .service.database import PgSqlDatabase"},{"line_number":24,"context_line":"from .service.install import PgSqlInstall"},{"line_number":25,"context_line":"from .service.root import PgSqlRoot"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_6a6a43ee","line":22,"updated":"2014-08-28 13:08:48.000000000","message":"Please add comment that code needs to be fixed once H304 is enabled.","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"157a89bd0dcf1cd07e9f8a46d4d6abdf3c02a3e5","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.guestagent import dbaas"},{"line_number":20,"context_line":"from trove.guestagent import backup"},{"line_number":21,"context_line":"from trove.guestagent import volume"},{"line_number":22,"context_line":"from .service.config import PgSqlConfig"},{"line_number":23,"context_line":"from .service.database import PgSqlDatabase"},{"line_number":24,"context_line":"from .service.install import PgSqlInstall"},{"line_number":25,"context_line":"from .service.root import PgSqlRoot"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_4d0a018b","line":22,"in_reply_to":"1abeadc6_6a6a43ee","updated":"2014-08-28 13:20:40.000000000","message":"We talked about this at the mid-cycle. Everyone is fine with our current hacking rules in place. We have no plans to add any more especially H304 which add virtually nothing to the quality of our code. Therefore this is okay and there is no need to add a note.","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"6bac5756601c8c30f785d6f747ea70d848372c19","unresolved":false,"context_lines":[{"line_number":33,"context_line":"CONF \u003d cfg.CONF"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class Manager("},{"line_number":37,"context_line":"        periodic_task.PeriodicTasks,"},{"line_number":38,"context_line":"        PgSqlUsers,"},{"line_number":39,"context_line":"        PgSqlDatabase,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_4a2ca799","line":36,"updated":"2014-08-28 13:15:37.000000000","message":"please format these the standard way to conform with the rest of the code:\n\n    class Manager(arg1,\n                         arg2,\n                         ...\n                         argN):\n\nI can\u0027t seem to get them to line up in this editor but I think you get the idea.","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"6bac5756601c8c30f785d6f747ea70d848372c19","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":46,"context_line":"        super(Manager, self).__init__(*args, **kwargs)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    @periodic_task.periodic_task(ticks_between_runs\u003d3)"},{"line_number":49,"context_line":"    def update_status(self, context):"},{"line_number":50,"context_line":"        PgSqlAppStatus.get().update()"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_c72272b8","line":48,"updated":"2014-08-28 13:15:37.000000000","message":"This seems like it should be a configuration option. Even if the others are like this.","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6f2007d7ced3bf80fbb37c449d13bb21bc7df3f6","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":"CONF \u003d cfg.CONF"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class Manager("},{"line_number":37,"context_line":"        periodic_task.PeriodicTasks,"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_5ae734ac","line":34,"updated":"2014-09-03 13:43:57.000000000","message":"logging and conf instance wasn\u0027t used","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"}],"trove/guestagent/datastore/postgresql/pgutil.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0ad402fbacc24ba5f55cb691bd183aa6a558f3","unresolved":false,"context_lines":[{"line_number":10,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"def execute(*command, **kwargs):"},{"line_number":14,"context_line":"    \"\"\"Execute a command as the \u0027postgres\u0027 user.\"\"\""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    LOG.debug(\u0027Running as postgres: {0}\u0027.format(command))"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_c8645e24","line":13,"updated":"2014-06-11 11:26:09.000000000","message":"do we actually need to wrap log call and exec into another func?","commit_id":"5e72733c1a87b5891920fad785eee7f9a75fc3a8"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"254928981a76682319d8f6ad3149fa01d9074864","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import uuid"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from trove.common import utils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"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":13,"id":"1abeadc6_610c6143","line":21,"updated":"2014-08-27 09:16:34.000000000","message":"redundant two lines - 21, 22","commit_id":"987e415df4ea784eabb8924de898108e0679020a"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"6bac5756601c8c30f785d6f747ea70d848372c19","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    with open(filename, \u0027r+\u0027) as file_handle:"},{"line_number":55,"context_line":"        for line in file_handle:"},{"line_number":56,"context_line":"            if line !\u003d \"\":"},{"line_number":57,"context_line":"                yield line.split(\u0027,\u0027)"},{"line_number":58,"context_line":"    execute("},{"line_number":59,"context_line":"        \"rm\", \"{filename}\".format(filename\u003dfilename),"},{"line_number":60,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_aaf8db7c","line":57,"updated":"2014-08-28 13:15:37.000000000","message":"if the format is a csv file, you should really use the csv module, as this handles cases like this:\n   \n       \u0027My Name\u0027, \u0027100 Main st, My Town, TX\u0027, \u0027555-555-5555\u0027\n\nYour results would yield 5 results rather than 3","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b16336e973a22b505a229fac7a2dfa1357a05e5","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    with open(filename, \u0027r+\u0027) as file_handle:"},{"line_number":55,"context_line":"        for line in file_handle:"},{"line_number":56,"context_line":"            if line !\u003d \"\":"},{"line_number":57,"context_line":"                yield line.split(\u0027,\u0027)"},{"line_number":58,"context_line":"    execute("},{"line_number":59,"context_line":"        \"rm\", \"{filename}\".format(filename\u003dfilename),"},{"line_number":60,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_33c5125c","line":57,"in_reply_to":"1abeadc6_aaf8db7c","updated":"2014-08-28 22:00:37.000000000","message":"This utility is never intended to be used with general, ad-hoc queries. It is specifically used to get lists of users and databases.\n\nThe rules for PostgreSQL identifiers for users and databases do not allow commas as a value. As it is, this edge case does not apply. If someone changes this code later to do general queries then, yes, we should use csv. \n\nIn the mean time I\u0027d prefer to avoid another dependency.\n\nReference: http://www.postgresql.org/docs/9.1/static/sql-syntax-lexical.html","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"6bac5756601c8c30f785d6f747ea70d848372c19","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    file. The return value is a generator object that feeds from this file."},{"line_number":76,"context_line":"    \"\"\""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    filename \u003d os.path.join(tempfile.gettempdir(), str(uuid.uuid4()))"},{"line_number":79,"context_line":"    LOG.debug(\u0027Querying: {0}\u0027.format(statement))"},{"line_number":80,"context_line":"    psql("},{"line_number":81,"context_line":"        \"Copy ({statement}) To \u0027{filename}\u0027 With CSV\".format("}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_8a5a3ff0","line":78,"updated":"2014-08-28 13:15:37.000000000","message":"I would rather see this being done with a namedTempfile that way you could place this all in a with statement and have the file automatically removed for you.","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b16336e973a22b505a229fac7a2dfa1357a05e5","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    file. The return value is a generator object that feeds from this file."},{"line_number":76,"context_line":"    \"\"\""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    filename \u003d os.path.join(tempfile.gettempdir(), str(uuid.uuid4()))"},{"line_number":79,"context_line":"    LOG.debug(\u0027Querying: {0}\u0027.format(statement))"},{"line_number":80,"context_line":"    psql("},{"line_number":81,"context_line":"        \"Copy ({statement}) To \u0027{filename}\u0027 With CSV\".format("}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_13701671","line":78,"in_reply_to":"1abeadc6_8a5a3ff0","updated":"2014-08-28 22:00:37.000000000","message":"I actually tried NamedTemporaryFile(delete\u003dTrue) in the first iteration of this function. I had issues with file permissions.\n\nWhen python creates the named temp file it does so as the current Python user. This prevents pgsql from writing to the file. The workaround here is manually managing the temp file so I can change file permissions after pgsql creates the file as \u0027postgres\u0027.","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"08c519be2204e0ff1e6ddd9ae2e29b339eb973cb","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    filename \u003d os.path.join(tempfile.gettempdir(), str(uuid.uuid4()))"},{"line_number":79,"context_line":"    LOG.debug(\u0027Querying: {0}\u0027.format(statement))"},{"line_number":80,"context_line":"    psql("},{"line_number":81,"context_line":"        \"Copy ({statement}) To \u0027{filename}\u0027 With CSV\".format("},{"line_number":82,"context_line":"            statement\u003dstatement,"},{"line_number":83,"context_line":"            filename\u003dfilename,"},{"line_number":84,"context_line":"        ),"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_a5cbbb1c","line":81,"updated":"2014-09-03 00:58:35.000000000","message":"context: http://www.postgresql.org/docs/current/interactive/sql-copy.html","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f2a8682b4a95d6d9bc6d6a2c8e48c55e9bf3848e","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        statement \u003d \"SELECT usename FROM pg_catalog.pg_user\""},{"line_number":138,"context_line":"        if ignore:"},{"line_number":139,"context_line":"            # User a simple tautology so all clauses can be AND\u0027ed without"},{"line_number":140,"context_line":"            # crazy special logic."},{"line_number":141,"context_line":"            statement +\u003d \" WHERE 1\u003d1\""},{"line_number":142,"context_line":"        for name in ignore:"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_ef24c4b0","line":139,"updated":"2014-09-02 21:55:19.000000000","message":"User \u003d\u003e Use","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"}],"trove/guestagent/datastore/postgresql/service.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"32f023175149ca1c1cf1098e36b53ad5ff4c6888","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def install(self, packages):"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        self.status.begin_install()"},{"line_number":94,"context_line":"        # TODO(kevinconway): Add pgsql_pkg config option"},{"line_number":95,"context_line":"        # TODO(kevinconway): Make timeout configurable."},{"line_number":96,"context_line":"        # TODO(kevinconway): Install packages only if needed."},{"line_number":97,"context_line":"        pkg.Package().pkg_install(packages, {}, 1000)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bs4Q%3D","line":94,"updated":"2013-11-21 11:24:11.000000000","message":"already not necassery","commit_id":"9b7676ec63e404c516432c2ffa7a863f0992b1e5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"32f023175149ca1c1cf1098e36b53ad5ff4c6888","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        self.status.begin_install()"},{"line_number":94,"context_line":"        # TODO(kevinconway): Add pgsql_pkg config option"},{"line_number":95,"context_line":"        # TODO(kevinconway): Make timeout configurable."},{"line_number":96,"context_line":"        # TODO(kevinconway): Install packages only if needed."},{"line_number":97,"context_line":"        pkg.Package().pkg_install(packages, {}, 1000)"},{"line_number":98,"context_line":"        self.start_db()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bs4M%3D","line":95,"updated":"2013-11-21 11:24:11.000000000","message":"Not so very good idea, becuase configurable time could be unsuitable to another dbs installation.","commit_id":"9b7676ec63e404c516432c2ffa7a863f0992b1e5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"PGSQL_CONFIG \u003d \"/etc/postgresql/%s/main/postgresql.conf\""},{"line_number":32,"context_line":"PGSQL_HBA_CONFIG \u003d \"/etc/postgresql/%s/main/pg_hba.conf\""},{"line_number":33,"context_line":"PGSQL_PID \u003d \"\u0027/var/run/postgresql/postgresql.pid\u0027\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"PGSQL_SERVICE_CANDIDATES \u003d (\"postgresql\",)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FytM%3D","line":33,"updated":"2013-12-31 13:53:27.000000000","message":"aren\u0027t this values stored in postgres config file ?","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"PGSQL_CONFIG \u003d \"/etc/postgresql/%s/main/postgresql.conf\""},{"line_number":32,"context_line":"PGSQL_HBA_CONFIG \u003d \"/etc/postgresql/%s/main/pg_hba.conf\""},{"line_number":33,"context_line":"PGSQL_PID \u003d \"\u0027/var/run/postgresql/postgresql.pid\u0027\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"PGSQL_SERVICE_CANDIDATES \u003d (\"postgresql\",)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyig%3D","line":33,"in_reply_to":"AAAAT3%2F%2FytM%3D","updated":"2013-12-31 15:52:08.000000000","message":"Yes. It should pull from the config file. This was an oversight.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Run a simple scalar query to make sure the process is responsive."},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            utils.execute_with_timeout("},{"line_number":71,"context_line":"                \"sudo\", \"-u\", \"postgres\", \"psql\", \"-c\", \"SELECT 1\","},{"line_number":72,"context_line":"                timeout\u003d30,"},{"line_number":73,"context_line":"            )"},{"line_number":74,"context_line":"        except utils.Timeout:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyvs%3D","line":71,"updated":"2013-12-31 13:53:27.000000000","message":"is there any chanse to make sure service is running ?\n/etc/rc.d/rc.postgresql status - is more meaningful for status check than querry.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"a035f718802d19771dbdf43be8daae7a31c184cd","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Run a simple scalar query to make sure the process is responsive."},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            utils.execute_with_timeout("},{"line_number":71,"context_line":"                \"sudo\", \"-u\", \"postgres\", \"psql\", \"-c\", \"SELECT 1\","},{"line_number":72,"context_line":"                timeout\u003d30,"},{"line_number":73,"context_line":"            )"},{"line_number":74,"context_line":"        except utils.Timeout:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyHs%3D","line":71,"in_reply_to":"AAAAT3%2F%2FyTg%3D","updated":"2013-12-31 20:04:00.000000000","message":"Seems like it does \n/usr/lib/postgresql/bin/pg_ctl status -D /var/lib/postgres/data \u003e/dev/null 2\u003e\u00261 - should be executed as root","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"37be0009c3799d18f9e055ddd26727a96846a8f4","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Run a simple scalar query to make sure the process is responsive."},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            utils.execute_with_timeout("},{"line_number":71,"context_line":"                \"sudo\", \"-u\", \"postgres\", \"psql\", \"-c\", \"SELECT 1\","},{"line_number":72,"context_line":"                timeout\u003d30,"},{"line_number":73,"context_line":"            )"},{"line_number":74,"context_line":"        except utils.Timeout:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyTg%3D","line":71,"in_reply_to":"AAAAT3%2F%2Fyas%3D","updated":"2013-12-31 17:27:54.000000000","message":"PostgreSQL does not have a \"ping\" helper. A scalar query is the commonly used solution.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Run a simple scalar query to make sure the process is responsive."},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            utils.execute_with_timeout("},{"line_number":71,"context_line":"                \"sudo\", \"-u\", \"postgres\", \"psql\", \"-c\", \"SELECT 1\","},{"line_number":72,"context_line":"                timeout\u003d30,"},{"line_number":73,"context_line":"            )"},{"line_number":74,"context_line":"        except utils.Timeout:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyas%3D","line":71,"in_reply_to":"AAAAT3%2F%2FyiU%3D","updated":"2013-12-31 16:17:05.000000000","message":"variant suggested by me, also works, just try it, it\u0027s not simple \"service postgers status\" exec, it checks if instance really works, as i said just try it.\n\nPS: mysql has ping algorithm, redis has ping-pong algorithm, cassandra has nodetool statusthrift, i bet postges has something like that. It\u0027s bad idea to check status by querring.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Run a simple scalar query to make sure the process is responsive."},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            utils.execute_with_timeout("},{"line_number":71,"context_line":"                \"sudo\", \"-u\", \"postgres\", \"psql\", \"-c\", \"SELECT 1\","},{"line_number":72,"context_line":"                timeout\u003d30,"},{"line_number":73,"context_line":"            )"},{"line_number":74,"context_line":"        except utils.Timeout:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyiU%3D","line":71,"in_reply_to":"AAAAT3%2F%2Fyvs%3D","updated":"2013-12-31 15:52:08.000000000","message":"I think you mistake the point. This checks if the instance is responsive, not if running.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            return instance.ServiceStatuses.RUNNING"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class PgSqlApp(object):"},{"line_number":92,"context_line":"    \"\"\"Handles administrative tasks on the PgSQL database.\"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def __init__(self, status):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fy2g%3D","line":91,"updated":"2013-12-31 13:53:27.000000000","message":"I see a lot of execs, and it\u0027s normal, but\nthey are differ only with statementsm so i suggest to move them into it\u0027s own method or build own querry class","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            return instance.ServiceStatuses.RUNNING"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class PgSqlApp(object):"},{"line_number":92,"context_line":"    \"\"\"Handles administrative tasks on the PgSQL database.\"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def __init__(self, status):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyiI%3D","line":91,"in_reply_to":"AAAAT3%2F%2Fy2g%3D","updated":"2013-12-31 15:52:08.000000000","message":"Agreed.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        LOG.debug("},{"line_number":106,"context_line":"            \"%s: Beginning PgSql package installation.\" % (CONF.guest_id,)"},{"line_number":107,"context_line":"        )"},{"line_number":108,"context_line":"        self.status.begin_install()"},{"line_number":109,"context_line":"        packager \u003d pkg.Package()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyvk%3D","line":106,"updated":"2013-12-31 13:53:27.000000000","message":"unneeded braces","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"37be0009c3799d18f9e055ddd26727a96846a8f4","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        LOG.debug("},{"line_number":106,"context_line":"            \"%s: Beginning PgSql package installation.\" % (CONF.guest_id,)"},{"line_number":107,"context_line":"        )"},{"line_number":108,"context_line":"        self.status.begin_install()"},{"line_number":109,"context_line":"        packager \u003d pkg.Package()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FySU%3D","line":106,"in_reply_to":"AAAAT3%2F%2Fyao%3D","updated":"2013-12-31 17:27:54.000000000","message":"I misread the string format documentation. It only must be a tuple if there is more than one value. I thought it said \"must be a tuple\".\n\nI agree that creating a tuple takes time, but it does not take much time. Compared to everything that happens around it, creating a tuple takes, proportionally, no time. To disagree with it because of performance issues is invalid.\n\nHowever, I do agree with your argument for compatibility (comments below). *Adding format updates to the work queue.*","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        LOG.debug("},{"line_number":106,"context_line":"            \"%s: Beginning PgSql package installation.\" % (CONF.guest_id,)"},{"line_number":107,"context_line":"        )"},{"line_number":108,"context_line":"        self.status.begin_install()"},{"line_number":109,"context_line":"        packager \u003d pkg.Package()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyao%3D","line":106,"in_reply_to":"AAAAT3%2F%2FyiA%3D","updated":"2013-12-31 16:17:05.000000000","message":"no need to convert single element into tuple, it take time","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        LOG.debug("},{"line_number":106,"context_line":"            \"%s: Beginning PgSql package installation.\" % (CONF.guest_id,)"},{"line_number":107,"context_line":"        )"},{"line_number":108,"context_line":"        self.status.begin_install()"},{"line_number":109,"context_line":"        packager \u003d pkg.Package()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyiA%3D","line":106,"in_reply_to":"AAAAT3%2F%2Fyvk%3D","updated":"2013-12-31 15:52:08.000000000","message":"It is a tuple with one element.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        if not packager.pkg_is_installed(packages):"},{"line_number":111,"context_line":"            try:"},{"line_number":112,"context_line":"                LOG.info("},{"line_number":113,"context_line":"                    \"%s: Installing (%s).\" % (CONF.guest_id, packages,)"},{"line_number":114,"context_line":"                )"},{"line_number":115,"context_line":"                packager.pkg_install(packages, {}, 1000)"},{"line_number":116,"context_line":"            except (pkg.PkgAdminLockError, pkg.PkgPermissionError,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyvg%3D","line":113,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        if not packager.pkg_is_installed(packages):"},{"line_number":111,"context_line":"            try:"},{"line_number":112,"context_line":"                LOG.info("},{"line_number":113,"context_line":"                    \"%s: Installing (%s).\" % (CONF.guest_id, packages,)"},{"line_number":114,"context_line":"                )"},{"line_number":115,"context_line":"                packager.pkg_install(packages, {}, 1000)"},{"line_number":116,"context_line":"            except (pkg.PkgAdminLockError, pkg.PkgPermissionError,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyac%3D","line":113,"in_reply_to":"AAAAT3%2F%2Fyhk%3D","updated":"2013-12-31 16:17:05.000000000","message":"\"%(id)s: Installing %(packages)s.\" % {\u0027id\u0027: CONF.guest_id, \u0027packages\u0027: \" \".join(packages)}\n\nPS: it should be in every multiple substitution. Take a look at H703","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        if not packager.pkg_is_installed(packages):"},{"line_number":111,"context_line":"            try:"},{"line_number":112,"context_line":"                LOG.info("},{"line_number":113,"context_line":"                    \"%s: Installing (%s).\" % (CONF.guest_id, packages,)"},{"line_number":114,"context_line":"                )"},{"line_number":115,"context_line":"                packager.pkg_install(packages, {}, 1000)"},{"line_number":116,"context_line":"            except (pkg.PkgAdminLockError, pkg.PkgPermissionError,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyhk%3D","line":113,"in_reply_to":"AAAAT3%2F%2Fyvg%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                    pkg.PkgBrokenError):"},{"line_number":121,"context_line":"                LOG.exception("},{"line_number":122,"context_line":"                    \"%s: There was a package manager error while \""},{"line_number":123,"context_line":"                    \"trying to install (%s)\" % (CONF.guest_id, packages,)"},{"line_number":124,"context_line":"                )"},{"line_number":125,"context_line":"                self.status.end_install_or_restart()"},{"line_number":126,"context_line":"                self.status.set_status(instance.ServiceStatuses.FAILED)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyvY%3D","line":123,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                    pkg.PkgBrokenError):"},{"line_number":121,"context_line":"                LOG.exception("},{"line_number":122,"context_line":"                    \"%s: There was a package manager error while \""},{"line_number":123,"context_line":"                    \"trying to install (%s)\" % (CONF.guest_id, packages,)"},{"line_number":124,"context_line":"                )"},{"line_number":125,"context_line":"                self.status.end_install_or_restart()"},{"line_number":126,"context_line":"                self.status.set_status(instance.ServiceStatuses.FAILED)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyhc%3D","line":123,"in_reply_to":"AAAAT3%2F%2FyvY%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            except Exception:"},{"line_number":128,"context_line":"                LOG.exception("},{"line_number":129,"context_line":"                    \"%s: The package manager encountered an unknown error \""},{"line_number":130,"context_line":"                    \"while trying to install (%s)\" % (CONF.guest_id, packages,)"},{"line_number":131,"context_line":"                )"},{"line_number":132,"context_line":"                self.status.end_install_or_restart()"},{"line_number":133,"context_line":"                self.status.set_status(instance.ServiceStatuses.FAILED)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyvU%3D","line":130,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            except Exception:"},{"line_number":128,"context_line":"                LOG.exception("},{"line_number":129,"context_line":"                    \"%s: The package manager encountered an unknown error \""},{"line_number":130,"context_line":"                    \"while trying to install (%s)\" % (CONF.guest_id, packages,)"},{"line_number":131,"context_line":"                )"},{"line_number":132,"context_line":"                self.status.end_install_or_restart()"},{"line_number":133,"context_line":"                self.status.set_status(instance.ServiceStatuses.FAILED)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyhY%3D","line":130,"in_reply_to":"AAAAT3%2F%2FyvU%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                self.start_db()"},{"line_number":136,"context_line":"                self.status.end_install_or_restart()"},{"line_number":137,"context_line":"                LOG.debug("},{"line_number":138,"context_line":"                    \"%s: Completed package installation.\" % (CONF.guest_id,)"},{"line_number":139,"context_line":"                )"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def change_passwords(self, users):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyvQ%3D","line":138,"updated":"2013-12-31 13:53:27.000000000","message":"unneeded braces","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                self.start_db()"},{"line_number":136,"context_line":"                self.status.end_install_or_restart()"},{"line_number":137,"context_line":"                LOG.debug("},{"line_number":138,"context_line":"                    \"%s: Completed package installation.\" % (CONF.guest_id,)"},{"line_number":139,"context_line":"                )"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def change_passwords(self, users):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyh8%3D","line":138,"in_reply_to":"AAAAT3%2F%2FyvQ%3D","updated":"2013-12-31 15:52:08.000000000","message":"It is a tuple with one element.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        for user in users:"},{"line_number":150,"context_line":"            LOG.debug("},{"line_number":151,"context_line":"                \"%s: Changing password for %s to %s\" %"},{"line_number":152,"context_line":"                (CONF.guest_id, user[\u0027name\u0027], user[\u0027password\u0027],)"},{"line_number":153,"context_line":"            )"},{"line_number":154,"context_line":"            LOG.info("},{"line_number":155,"context_line":"                \"%s: Changing password for %s to %s\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyvM%3D","line":152,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        for user in users:"},{"line_number":150,"context_line":"            LOG.debug("},{"line_number":151,"context_line":"                \"%s: Changing password for %s to %s\" %"},{"line_number":152,"context_line":"                (CONF.guest_id, user[\u0027name\u0027], user[\u0027password\u0027],)"},{"line_number":153,"context_line":"            )"},{"line_number":154,"context_line":"            LOG.info("},{"line_number":155,"context_line":"                \"%s: Changing password for %s to %s\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyhU%3D","line":152,"in_reply_to":"AAAAT3%2F%2FyvM%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            )"},{"line_number":154,"context_line":"            LOG.info("},{"line_number":155,"context_line":"                \"%s: Changing password for %s to %s\" %"},{"line_number":156,"context_line":"                (CONF.guest_id, user[\u0027name\u0027], \"\u003cSANITIZED\u003e\",)"},{"line_number":157,"context_line":"            )"},{"line_number":158,"context_line":"            utils.execute_with_timeout("},{"line_number":159,"context_line":"                \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyvI%3D","line":156,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            )"},{"line_number":154,"context_line":"            LOG.info("},{"line_number":155,"context_line":"                \"%s: Changing password for %s to %s\" %"},{"line_number":156,"context_line":"                (CONF.guest_id, user[\u0027name\u0027], \"\u003cSANITIZED\u003e\",)"},{"line_number":157,"context_line":"            )"},{"line_number":158,"context_line":"            utils.execute_with_timeout("},{"line_number":159,"context_line":"                \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyhQ%3D","line":156,"in_reply_to":"AAAAT3%2F%2FyvI%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        Each key/value pair in user_attrs is optional."},{"line_number":173,"context_line":"        \"\"\""},{"line_number":174,"context_line":"        if user_attrs.get(\u0027password\u0027) is not None:"},{"line_number":175,"context_line":"            self.change_passwords("},{"line_number":176,"context_line":"                ["},{"line_number":177,"context_line":"                    {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyvE%3D","line":174,"updated":"2013-12-31 13:53:27.000000000","message":"if \u0027password\u0027 in user_attrs.keys() and user_attrs.get(\u0027password\u0027) is not None:","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"37be0009c3799d18f9e055ddd26727a96846a8f4","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        Each key/value pair in user_attrs is optional."},{"line_number":173,"context_line":"        \"\"\""},{"line_number":174,"context_line":"        if user_attrs.get(\u0027password\u0027) is not None:"},{"line_number":175,"context_line":"            self.change_passwords("},{"line_number":176,"context_line":"                ["},{"line_number":177,"context_line":"                    {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FySM%3D","line":174,"in_reply_to":"AAAAT3%2F%2FyaU%3D","updated":"2013-12-31 17:27:54.000000000","message":"The \u0027.get()\u0027 method defaults to None if the key is not found.\n\nIn this case, \u0027password\u0027 in user_attrs and user_attrs.get(\u0027password\u0027) is not None are equivalent. Also, you usually don\u0027t want to use \u0027.keys()\u0027 when checking. Just do \u0027key\u0027 in dict. The \u0027.keys()\u0027 method in py2 generates a list.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        Each key/value pair in user_attrs is optional."},{"line_number":173,"context_line":"        \"\"\""},{"line_number":174,"context_line":"        if user_attrs.get(\u0027password\u0027) is not None:"},{"line_number":175,"context_line":"            self.change_passwords("},{"line_number":176,"context_line":"                ["},{"line_number":177,"context_line":"                    {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyaU%3D","line":174,"in_reply_to":"AAAAT3%2F%2FygM%3D","updated":"2013-12-31 16:17:05.000000000","message":"what if password is missing, it would raise KeyError","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        Each key/value pair in user_attrs is optional."},{"line_number":173,"context_line":"        \"\"\""},{"line_number":174,"context_line":"        if user_attrs.get(\u0027password\u0027) is not None:"},{"line_number":175,"context_line":"            self.change_passwords("},{"line_number":176,"context_line":"                ["},{"line_number":177,"context_line":"                    {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FygM%3D","line":174,"in_reply_to":"AAAAT3%2F%2FyvE%3D","updated":"2013-12-31 15:52:08.000000000","message":"Why? It is the same.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                ]"},{"line_number":182,"context_line":"            )"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if user_attrs.get(\u0027name\u0027) is not None:"},{"line_number":185,"context_line":"            statement \u003d \"ALTER USER %s RENAME TO %s\""},{"line_number":186,"context_line":"            access \u003d self.list_access(username, None)"},{"line_number":187,"context_line":"            LOG.info("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyu8%3D","line":184,"updated":"2013-12-31 13:53:27.000000000","message":"if \u0027name\u0027 in user_attrs.keys() and user_attrs.get(\u0027name\u0027) is not None:","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                ]"},{"line_number":182,"context_line":"            )"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if user_attrs.get(\u0027name\u0027) is not None:"},{"line_number":185,"context_line":"            statement \u003d \"ALTER USER %s RENAME TO %s\""},{"line_number":186,"context_line":"            access \u003d self.list_access(username, None)"},{"line_number":187,"context_line":"            LOG.info("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FygI%3D","line":184,"in_reply_to":"AAAAT3%2F%2Fyu8%3D","updated":"2013-12-31 15:52:08.000000000","message":"Why? it is the same.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        Return value is a string representing the version number."},{"line_number":211,"context_line":"        \"\"\""},{"line_number":212,"context_line":"        LOG.debug("},{"line_number":213,"context_line":"            \"%s: Polling for postgresql version.\" % (CONF.guest_id,)"},{"line_number":214,"context_line":"        )"},{"line_number":215,"context_line":"        out, err \u003d utils.execute_with_timeout("},{"line_number":216,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027, \u0027psql\u0027, \u0027--version\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyu4%3D","line":213,"updated":"2013-12-31 13:53:27.000000000","message":"uneeded braces","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        Return value is a string representing the version number."},{"line_number":211,"context_line":"        \"\"\""},{"line_number":212,"context_line":"        LOG.debug("},{"line_number":213,"context_line":"            \"%s: Polling for postgresql version.\" % (CONF.guest_id,)"},{"line_number":214,"context_line":"        )"},{"line_number":215,"context_line":"        out, err \u003d utils.execute_with_timeout("},{"line_number":216,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027, \u0027psql\u0027, \u0027--version\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyaQ%3D","line":213,"in_reply_to":"AAAAT3%2F%2Fyh4%3D","updated":"2013-12-31 16:17:05.000000000","message":"takes time to convert and reverse convertion","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        Return value is a string representing the version number."},{"line_number":211,"context_line":"        \"\"\""},{"line_number":212,"context_line":"        LOG.debug("},{"line_number":213,"context_line":"            \"%s: Polling for postgresql version.\" % (CONF.guest_id,)"},{"line_number":214,"context_line":"        )"},{"line_number":215,"context_line":"        out, err \u003d utils.execute_with_timeout("},{"line_number":216,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027, \u0027psql\u0027, \u0027--version\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyh4%3D","line":213,"in_reply_to":"AAAAT3%2F%2Fyu4%3D","updated":"2013-12-31 15:52:08.000000000","message":"It is a tuple with one element.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            timeout\u003d30,"},{"line_number":218,"context_line":"        )"},{"line_number":219,"context_line":"        pattern \u003d re.compile(\u0027\\d\\.\\d\u0027)"},{"line_number":220,"context_line":"        return pattern.search(out).group(0)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def reset_configuration(self, configuration):"},{"line_number":223,"context_line":"        \"\"\"Reset the PgSql configuration file to the one given."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyu0%3D","line":220,"updated":"2013-12-31 13:53:27.000000000","message":"if you are suppose to have more that one value would be better  to check if there are more that one group.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            timeout\u003d30,"},{"line_number":218,"context_line":"        )"},{"line_number":219,"context_line":"        pattern \u003d re.compile(\u0027\\d\\.\\d\u0027)"},{"line_number":220,"context_line":"        return pattern.search(out).group(0)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def reset_configuration(self, configuration):"},{"line_number":223,"context_line":"        \"\"\"Reset the PgSql configuration file to the one given."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyf8%3D","line":220,"in_reply_to":"AAAAT3%2F%2Fyu0%3D","updated":"2013-12-31 15:52:08.000000000","message":"It is only one value. \u0027.group(0)\u0027 means the entire match. Groups above number 0 are grouped matches when you use parentheses.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        The configuration parameter is a string containing the full"},{"line_number":226,"context_line":"        configuration file that should be used."},{"line_number":227,"context_line":"        \"\"\""},{"line_number":228,"context_line":"        config_location \u003d PGSQL_CONFIG % (self._get_psql_version(),)"},{"line_number":229,"context_line":"        LOG.debug("},{"line_number":230,"context_line":"            \"%s: Writing configuration file to /tmp/pgsql_config.\" %"},{"line_number":231,"context_line":"            (CONF.guest_id,)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyuw%3D","line":228,"updated":"2013-12-31 13:53:27.000000000","message":"uneeded braces","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        The configuration parameter is a string containing the full"},{"line_number":226,"context_line":"        configuration file that should be used."},{"line_number":227,"context_line":"        \"\"\""},{"line_number":228,"context_line":"        config_location \u003d PGSQL_CONFIG % (self._get_psql_version(),)"},{"line_number":229,"context_line":"        LOG.debug("},{"line_number":230,"context_line":"            \"%s: Writing configuration file to /tmp/pgsql_config.\" %"},{"line_number":231,"context_line":"            (CONF.guest_id,)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyaM%3D","line":228,"in_reply_to":"AAAAT3%2F%2Fyh0%3D","updated":"2013-12-31 16:17:05.000000000","message":"takes time to convert and reverse convertion","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        The configuration parameter is a string containing the full"},{"line_number":226,"context_line":"        configuration file that should be used."},{"line_number":227,"context_line":"        \"\"\""},{"line_number":228,"context_line":"        config_location \u003d PGSQL_CONFIG % (self._get_psql_version(),)"},{"line_number":229,"context_line":"        LOG.debug("},{"line_number":230,"context_line":"            \"%s: Writing configuration file to /tmp/pgsql_config.\" %"},{"line_number":231,"context_line":"            (CONF.guest_id,)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyh0%3D","line":228,"in_reply_to":"AAAAT3%2F%2Fyuw%3D","updated":"2013-12-31 15:52:08.000000000","message":"It is a tuple with one element.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        config_location \u003d PGSQL_CONFIG % (self._get_psql_version(),)"},{"line_number":229,"context_line":"        LOG.debug("},{"line_number":230,"context_line":"            \"%s: Writing configuration file to /tmp/pgsql_config.\" %"},{"line_number":231,"context_line":"            (CONF.guest_id,)"},{"line_number":232,"context_line":"        )"},{"line_number":233,"context_line":"        with open(\u0027/tmp/pgsql_config\u0027, \u0027w+\u0027) as config_file:"},{"line_number":234,"context_line":"            config_file.write(configuration)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyus%3D","line":231,"updated":"2013-12-31 13:53:27.000000000","message":"uneeded braces","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        config_location \u003d PGSQL_CONFIG % (self._get_psql_version(),)"},{"line_number":229,"context_line":"        LOG.debug("},{"line_number":230,"context_line":"            \"%s: Writing configuration file to /tmp/pgsql_config.\" %"},{"line_number":231,"context_line":"            (CONF.guest_id,)"},{"line_number":232,"context_line":"        )"},{"line_number":233,"context_line":"        with open(\u0027/tmp/pgsql_config\u0027, \u0027w+\u0027) as config_file:"},{"line_number":234,"context_line":"            config_file.write(configuration)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyaI%3D","line":231,"in_reply_to":"AAAAT3%2F%2Fyhw%3D","updated":"2013-12-31 16:17:05.000000000","message":"takes time to convert and reverse convertion","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        config_location \u003d PGSQL_CONFIG % (self._get_psql_version(),)"},{"line_number":229,"context_line":"        LOG.debug("},{"line_number":230,"context_line":"            \"%s: Writing configuration file to /tmp/pgsql_config.\" %"},{"line_number":231,"context_line":"            (CONF.guest_id,)"},{"line_number":232,"context_line":"        )"},{"line_number":233,"context_line":"        with open(\u0027/tmp/pgsql_config\u0027, \u0027w+\u0027) as config_file:"},{"line_number":234,"context_line":"            config_file.write(configuration)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyhw%3D","line":231,"in_reply_to":"AAAAT3%2F%2Fyus%3D","updated":"2013-12-31 15:52:08.000000000","message":"It is a tuple with one element.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            \"%s: Writing configuration file to /tmp/pgsql_config.\" %"},{"line_number":231,"context_line":"            (CONF.guest_id,)"},{"line_number":232,"context_line":"        )"},{"line_number":233,"context_line":"        with open(\u0027/tmp/pgsql_config\u0027, \u0027w+\u0027) as config_file:"},{"line_number":234,"context_line":"            config_file.write(configuration)"},{"line_number":235,"context_line":"        utils.execute_with_timeout("},{"line_number":236,"context_line":"            \u0027sudo\u0027, \u0027chown\u0027, \u0027postgres\u0027, \u0027/tmp/pgsql_config\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyuo%3D","line":233,"updated":"2013-12-31 13:53:27.000000000","message":"w is enough","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"37be0009c3799d18f9e055ddd26727a96846a8f4","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            \"%s: Writing configuration file to /tmp/pgsql_config.\" %"},{"line_number":231,"context_line":"            (CONF.guest_id,)"},{"line_number":232,"context_line":"        )"},{"line_number":233,"context_line":"        with open(\u0027/tmp/pgsql_config\u0027, \u0027w+\u0027) as config_file:"},{"line_number":234,"context_line":"            config_file.write(configuration)"},{"line_number":235,"context_line":"        utils.execute_with_timeout("},{"line_number":236,"context_line":"            \u0027sudo\u0027, \u0027chown\u0027, \u0027postgres\u0027, \u0027/tmp/pgsql_config\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FySA%3D","line":233,"in_reply_to":"AAAAT3%2F%2FyZs%3D","updated":"2013-12-31 17:27:54.000000000","message":"No. \u0027a\u0027 and \u0027a+\u0027 are used for appends. The \u0027+\u0027 simply opens the file with a read/write descriptor.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            \"%s: Writing configuration file to /tmp/pgsql_config.\" %"},{"line_number":231,"context_line":"            (CONF.guest_id,)"},{"line_number":232,"context_line":"        )"},{"line_number":233,"context_line":"        with open(\u0027/tmp/pgsql_config\u0027, \u0027w+\u0027) as config_file:"},{"line_number":234,"context_line":"            config_file.write(configuration)"},{"line_number":235,"context_line":"        utils.execute_with_timeout("},{"line_number":236,"context_line":"            \u0027sudo\u0027, \u0027chown\u0027, \u0027postgres\u0027, \u0027/tmp/pgsql_config\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyZs%3D","line":233,"in_reply_to":"AAAAT3%2F%2Fyf0%3D","updated":"2013-12-31 16:17:05.000000000","message":"+ is used to perform append operations, why do you need append here ?","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            \"%s: Writing configuration file to /tmp/pgsql_config.\" %"},{"line_number":231,"context_line":"            (CONF.guest_id,)"},{"line_number":232,"context_line":"        )"},{"line_number":233,"context_line":"        with open(\u0027/tmp/pgsql_config\u0027, \u0027w+\u0027) as config_file:"},{"line_number":234,"context_line":"            config_file.write(configuration)"},{"line_number":235,"context_line":"        utils.execute_with_timeout("},{"line_number":236,"context_line":"            \u0027sudo\u0027, \u0027chown\u0027, \u0027postgres\u0027, \u0027/tmp/pgsql_config\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyf0%3D","line":233,"in_reply_to":"AAAAT3%2F%2Fyuo%3D","updated":"2013-12-31 15:52:08.000000000","message":"w+ is also enough.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        )"},{"line_number":263,"context_line":"        utils.execute_with_timeout("},{"line_number":264,"context_line":"            \u0027sudo\u0027, \u0027mv\u0027, \u0027/tmp/pgsql_hba_config\u0027,"},{"line_number":265,"context_line":"            PGSQL_HBA_CONFIG % (self._get_psql_version(),),"},{"line_number":266,"context_line":"            timeout\u003d30,"},{"line_number":267,"context_line":"        )"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyZo%3D","line":265,"updated":"2013-12-31 16:17:05.000000000","message":"formatting string to tuple and reverse convertion takes time, guest should report asap and do not waste time on logging.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        \"\"\"Restarts the PgSql instance with a new configuration.\"\"\""},{"line_number":271,"context_line":"        LOG.info("},{"line_number":272,"context_line":"            \"%s: Going into restart mode for config file changes.\" %"},{"line_number":273,"context_line":"            (CONF.guest_id,)"},{"line_number":274,"context_line":"        )"},{"line_number":275,"context_line":"        self.status.begin_restart()"},{"line_number":276,"context_line":"        self.stop_db()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyZk%3D","line":273,"updated":"2013-12-31 16:17:05.000000000","message":"formatting string to tuple and reverse convertion takes time, guest should report asap and do not waste time on logging.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        self.start_db()"},{"line_number":279,"context_line":"        LOG.info("},{"line_number":280,"context_line":"            \"%s: Ending restart mode for config file changes.\" %"},{"line_number":281,"context_line":"            (CONF.guest_id,)"},{"line_number":282,"context_line":"        )"},{"line_number":283,"context_line":"        self.status.end_install_or_restart()"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyZg%3D","line":281,"updated":"2013-12-31 16:17:05.000000000","message":"formatting string to tuple and reverse convertion takes time, guest should report asap and do not waste time on logging.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":303,"context_line":"                statement +\u003d \" LC_COLLATE \u003d %s\" % (collate,)"},{"line_number":304,"context_line":"            LOG.debug("},{"line_number":305,"context_line":"                \"%s: Creating database with statement (%s).\" %"},{"line_number":306,"context_line":"                (CONF.guest_id, statement,)"},{"line_number":307,"context_line":"            )"},{"line_number":308,"context_line":"            LOG.info("},{"line_number":309,"context_line":"                \"%s: Creating database %s.\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyug%3D","line":306,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":303,"context_line":"                statement +\u003d \" LC_COLLATE \u003d %s\" % (collate,)"},{"line_number":304,"context_line":"            LOG.debug("},{"line_number":305,"context_line":"                \"%s: Creating database with statement (%s).\" %"},{"line_number":306,"context_line":"                (CONF.guest_id, statement,)"},{"line_number":307,"context_line":"            )"},{"line_number":308,"context_line":"            LOG.info("},{"line_number":309,"context_line":"                \"%s: Creating database %s.\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyhM%3D","line":306,"in_reply_to":"AAAAT3%2F%2Fyug%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            )"},{"line_number":308,"context_line":"            LOG.info("},{"line_number":309,"context_line":"                \"%s: Creating database %s.\" %"},{"line_number":310,"context_line":"                (CONF.guest_id, database[\u0027_name\u0027],)"},{"line_number":311,"context_line":"            )"},{"line_number":312,"context_line":"            utils.execute_with_timeout("},{"line_number":313,"context_line":"                \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyuk%3D","line":310,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            )"},{"line_number":308,"context_line":"            LOG.info("},{"line_number":309,"context_line":"                \"%s: Creating database %s.\" %"},{"line_number":310,"context_line":"                (CONF.guest_id, database[\u0027_name\u0027],)"},{"line_number":311,"context_line":"            )"},{"line_number":312,"context_line":"            utils.execute_with_timeout("},{"line_number":313,"context_line":"                \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyhI%3D","line":310,"in_reply_to":"AAAAT3%2F%2Fyuk%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        for user in users:"},{"line_number":327,"context_line":"            LOG.debug("},{"line_number":328,"context_line":"                \"%s: Creating user %s with password %s.\" %"},{"line_number":329,"context_line":"                (CONF.guest_id, user[\u0027_name\u0027], user[\u0027_password\u0027],)"},{"line_number":330,"context_line":"            )"},{"line_number":331,"context_line":"            LOG.info("},{"line_number":332,"context_line":"                \"%s: Creating user %s with password %s.\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyuc%3D","line":329,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        for user in users:"},{"line_number":327,"context_line":"            LOG.debug("},{"line_number":328,"context_line":"                \"%s: Creating user %s with password %s.\" %"},{"line_number":329,"context_line":"                (CONF.guest_id, user[\u0027_name\u0027], user[\u0027_password\u0027],)"},{"line_number":330,"context_line":"            )"},{"line_number":331,"context_line":"            LOG.info("},{"line_number":332,"context_line":"                \"%s: Creating user %s with password %s.\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyhE%3D","line":329,"in_reply_to":"AAAAT3%2F%2Fyuc%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":330,"context_line":"            )"},{"line_number":331,"context_line":"            LOG.info("},{"line_number":332,"context_line":"                \"%s: Creating user %s with password %s.\" %"},{"line_number":333,"context_line":"                (CONF.guest_id, user[\u0027_name\u0027], \"\u003cSANITIZED\u003e\",)"},{"line_number":334,"context_line":"            )"},{"line_number":335,"context_line":"            utils.execute_with_timeout("},{"line_number":336,"context_line":"                \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyuY%3D","line":333,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":330,"context_line":"            )"},{"line_number":331,"context_line":"            LOG.info("},{"line_number":332,"context_line":"                \"%s: Creating user %s with password %s.\" %"},{"line_number":333,"context_line":"                (CONF.guest_id, user[\u0027_name\u0027], \"\u003cSANITIZED\u003e\",)"},{"line_number":334,"context_line":"            )"},{"line_number":335,"context_line":"            utils.execute_with_timeout("},{"line_number":336,"context_line":"                \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyhA%3D","line":333,"in_reply_to":"AAAAT3%2F%2FyuY%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":335,"context_line":"            utils.execute_with_timeout("},{"line_number":336,"context_line":"                \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":337,"context_line":"                \u0027psql\u0027, \u0027-c\u0027, statement % (user[\u0027_name\u0027], user[\u0027_password\u0027],),"},{"line_number":338,"context_line":"                timeout\u003d30,"},{"line_number":339,"context_line":"            )"},{"line_number":340,"context_line":"            self.grant_access("},{"line_number":341,"context_line":"                user[\u0027_name\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyuU%3D","line":338,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":335,"context_line":"            utils.execute_with_timeout("},{"line_number":336,"context_line":"                \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":337,"context_line":"                \u0027psql\u0027, \u0027-c\u0027, statement % (user[\u0027_name\u0027], user[\u0027_password\u0027],),"},{"line_number":338,"context_line":"                timeout\u003d30,"},{"line_number":339,"context_line":"            )"},{"line_number":340,"context_line":"            self.grant_access("},{"line_number":341,"context_line":"                user[\u0027_name\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyg8%3D","line":338,"in_reply_to":"AAAAT3%2F%2FyuU%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":351,"context_line":"            {\"_name\": \"\"}"},{"line_number":352,"context_line":"        \"\"\""},{"line_number":353,"context_line":"        LOG.info("},{"line_number":354,"context_line":"            \"%s: Dropping database %s.\" % (CONF.guest_id, database[\u0027_name\u0027],)"},{"line_number":355,"context_line":"        )"},{"line_number":356,"context_line":"        statement \u003d \"DROP DATABASE IF EXISTS %s\""},{"line_number":357,"context_line":"        utils.execute_with_timeout("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyuM%3D","line":354,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":351,"context_line":"            {\"_name\": \"\"}"},{"line_number":352,"context_line":"        \"\"\""},{"line_number":353,"context_line":"        LOG.info("},{"line_number":354,"context_line":"            \"%s: Dropping database %s.\" % (CONF.guest_id, database[\u0027_name\u0027],)"},{"line_number":355,"context_line":"        )"},{"line_number":356,"context_line":"        statement \u003d \"DROP DATABASE IF EXISTS %s\""},{"line_number":357,"context_line":"        utils.execute_with_timeout("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyg4%3D","line":354,"in_reply_to":"AAAAT3%2F%2FyuM%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        statement \u003d \"DROP DATABASE IF EXISTS %s\""},{"line_number":357,"context_line":"        utils.execute_with_timeout("},{"line_number":358,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":359,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement % (database[\u0027_name\u0027],),"},{"line_number":360,"context_line":"            timeout\u003d30,"},{"line_number":361,"context_line":"        )"},{"line_number":362,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyuI%3D","line":359,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        statement \u003d \"DROP DATABASE IF EXISTS %s\""},{"line_number":357,"context_line":"        utils.execute_with_timeout("},{"line_number":358,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":359,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement % (database[\u0027_name\u0027],),"},{"line_number":360,"context_line":"            timeout\u003d30,"},{"line_number":361,"context_line":"        )"},{"line_number":362,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyg0%3D","line":359,"in_reply_to":"AAAAT3%2F%2FyuI%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":368,"context_line":"            {\"_name\": \"\"}"},{"line_number":369,"context_line":"        \"\"\""},{"line_number":370,"context_line":"        LOG.info("},{"line_number":371,"context_line":"            \"%s: Dropping user %s.\" % (CONF.guest_id, user[\u0027_name\u0027],)"},{"line_number":372,"context_line":"        )"},{"line_number":373,"context_line":"        statement \u003d \"DROP USER %s\""},{"line_number":374,"context_line":"        utils.execute_with_timeout("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyuE%3D","line":371,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":368,"context_line":"            {\"_name\": \"\"}"},{"line_number":369,"context_line":"        \"\"\""},{"line_number":370,"context_line":"        LOG.info("},{"line_number":371,"context_line":"            \"%s: Dropping user %s.\" % (CONF.guest_id, user[\u0027_name\u0027],)"},{"line_number":372,"context_line":"        )"},{"line_number":373,"context_line":"        statement \u003d \"DROP USER %s\""},{"line_number":374,"context_line":"        utils.execute_with_timeout("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fygw%3D","line":371,"in_reply_to":"AAAAT3%2F%2FyuE%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        statement \u003d \"DROP USER %s\""},{"line_number":374,"context_line":"        utils.execute_with_timeout("},{"line_number":375,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":376,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement % (user[\u0027_name\u0027]),"},{"line_number":377,"context_line":"            timeout\u003d30,"},{"line_number":378,"context_line":"        )"},{"line_number":379,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyuA%3D","line":376,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        statement \u003d \"DROP USER %s\""},{"line_number":374,"context_line":"        utils.execute_with_timeout("},{"line_number":375,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":376,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement % (user[\u0027_name\u0027]),"},{"line_number":377,"context_line":"            timeout\u003d30,"},{"line_number":378,"context_line":"        )"},{"line_number":379,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fygs%3D","line":376,"in_reply_to":"AAAAT3%2F%2FyuA%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":393,"context_line":"                     \" WHERE usename \u003d \u0027%s\u0027\")"},{"line_number":394,"context_line":"        out, err \u003d utils.execute_with_timeout("},{"line_number":395,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":396,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement % (username,),"},{"line_number":397,"context_line":"            timeout\u003d30,"},{"line_number":398,"context_line":"        )"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyt8%3D","line":396,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":393,"context_line":"                     \" WHERE usename \u003d \u0027%s\u0027\")"},{"line_number":394,"context_line":"        out, err \u003d utils.execute_with_timeout("},{"line_number":395,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":396,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement % (username,),"},{"line_number":397,"context_line":"            timeout\u003d30,"},{"line_number":398,"context_line":"        )"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fygo%3D","line":396,"in_reply_to":"AAAAT3%2F%2Fyt8%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        )"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        pattern \u003d re.compile(\u0027\\((\\d) row[s]?\\)\u0027)"},{"line_number":401,"context_line":"        rows \u003d int(pattern.search(out).groups(0)[0])"},{"line_number":402,"context_line":"        if rows \u003c 1:"},{"line_number":403,"context_line":"            return None"},{"line_number":404,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fy10%3D","line":401,"updated":"2013-12-31 13:53:27.000000000","message":"it would be better to avoid explicit unpacking","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        )"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        pattern \u003d re.compile(\u0027\\((\\d) row[s]?\\)\u0027)"},{"line_number":401,"context_line":"        rows \u003d int(pattern.search(out).groups(0)[0])"},{"line_number":402,"context_line":"        if rows \u003c 1:"},{"line_number":403,"context_line":"            return None"},{"line_number":404,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyfg%3D","line":401,"in_reply_to":"AAAAT3%2F%2Fy10%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        pattern \u003d re.compile(\u0027\\((\\d) row[s]?\\)\u0027)"},{"line_number":401,"context_line":"        rows \u003d int(pattern.search(out).groups(0)[0])"},{"line_number":402,"context_line":"        if rows \u003c 1:"},{"line_number":403,"context_line":"            return None"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        return {"},{"line_number":406,"context_line":"            \"_name\": username,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fy1o%3D","line":403,"updated":"2013-12-31 13:53:27.000000000","message":"it could be deleted, if method did have return statement it could be deleted","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        pattern \u003d re.compile(\u0027\\((\\d) row[s]?\\)\u0027)"},{"line_number":401,"context_line":"        rows \u003d int(pattern.search(out).groups(0)[0])"},{"line_number":402,"context_line":"        if rows \u003c 1:"},{"line_number":403,"context_line":"            return None"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        return {"},{"line_number":406,"context_line":"            \"_name\": username,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyfM%3D","line":403,"in_reply_to":"AAAAT3%2F%2Fy1o%3D","updated":"2013-12-31 15:52:08.000000000","message":"I prefer to explicitly return values so that it is clear that I actually *want* to return None and it is not an accident.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"a035f718802d19771dbdf43be8daae7a31c184cd","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        pattern \u003d re.compile(\u0027\\((\\d) row[s]?\\)\u0027)"},{"line_number":401,"context_line":"        rows \u003d int(pattern.search(out).groups(0)[0])"},{"line_number":402,"context_line":"        if rows \u003c 1:"},{"line_number":403,"context_line":"            return None"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        return {"},{"line_number":406,"context_line":"            \"_name\": username,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyHo%3D","line":403,"in_reply_to":"AAAAT3%2F%2FyRM%3D","updated":"2013-12-31 20:04:00.000000000","message":"ok, as you wish, but it\u0027s really cool to use all pythonic tricks to make less code, less code - less to test","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"37be0009c3799d18f9e055ddd26727a96846a8f4","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        pattern \u003d re.compile(\u0027\\((\\d) row[s]?\\)\u0027)"},{"line_number":401,"context_line":"        rows \u003d int(pattern.search(out).groups(0)[0])"},{"line_number":402,"context_line":"        if rows \u003c 1:"},{"line_number":403,"context_line":"            return None"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        return {"},{"line_number":406,"context_line":"            \"_name\": username,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyRM%3D","line":403,"in_reply_to":"AAAAT3%2F%2FyZQ%3D","updated":"2013-12-31 17:27:54.000000000","message":"I\u0027m aware that I don\u0027t *have* to do this. I did it intentionally to make the return value more explicit. Other methods might return None because they have no return value. This one returns None, on purpose, as an actual value.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        pattern \u003d re.compile(\u0027\\((\\d) row[s]?\\)\u0027)"},{"line_number":401,"context_line":"        rows \u003d int(pattern.search(out).groups(0)[0])"},{"line_number":402,"context_line":"        if rows \u003c 1:"},{"line_number":403,"context_line":"            return None"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        return {"},{"line_number":406,"context_line":"            \"_name\": username,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyZQ%3D","line":403,"in_reply_to":"AAAAT3%2F%2FyfM%3D","updated":"2013-12-31 16:17:05.000000000","message":"python is ducktyping language, you don\u0027t have to do this, my suggestion would be smaller and it will stay understandable for python developers.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":406,"context_line":"            \"_name\": username,"},{"line_number":407,"context_line":"            \"_host\": None,"},{"line_number":408,"context_line":"            \"_password\": None,"},{"line_number":409,"context_line":"            \"_databases\": self.list_access(username, None),"},{"line_number":410,"context_line":"        }"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    def grant_access(self, username, hostname, databases):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fy1s%3D","line":409,"updated":"2013-12-31 13:53:27.000000000","message":"return ... if rows \u003e\u003d 1","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":406,"context_line":"            \"_name\": username,"},{"line_number":407,"context_line":"            \"_host\": None,"},{"line_number":408,"context_line":"            \"_password\": None,"},{"line_number":409,"context_line":"            \"_databases\": self.list_access(username, None),"},{"line_number":410,"context_line":"        }"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    def grant_access(self, username, hostname, databases):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyfI%3D","line":409,"in_reply_to":"AAAAT3%2F%2Fy1s%3D","updated":"2013-12-31 15:52:08.000000000","message":"See above.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":406,"context_line":"            \"_name\": username,"},{"line_number":407,"context_line":"            \"_host\": None,"},{"line_number":408,"context_line":"            \"_password\": None,"},{"line_number":409,"context_line":"            \"_databases\": self.list_access(username, None),"},{"line_number":410,"context_line":"        }"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"    def grant_access(self, username, hostname, databases):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyZI%3D","line":409,"in_reply_to":"AAAAT3%2F%2FyfI%3D","updated":"2013-12-31 16:17:05.000000000","message":"See above","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            )"},{"line_number":425,"context_line":"            utils.execute_with_timeout("},{"line_number":426,"context_line":"                \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":427,"context_line":"                \u0027psql\u0027, \u0027-c\u0027, statement % (database, username,),"},{"line_number":428,"context_line":"                timeout\u003d30,"},{"line_number":429,"context_line":"            )"},{"line_number":430,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyt4%3D","line":427,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            )"},{"line_number":425,"context_line":"            utils.execute_with_timeout("},{"line_number":426,"context_line":"                \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":427,"context_line":"                \u0027psql\u0027, \u0027-c\u0027, statement % (database, username,),"},{"line_number":428,"context_line":"                timeout\u003d30,"},{"line_number":429,"context_line":"            )"},{"line_number":430,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fygk%3D","line":427,"in_reply_to":"AAAAT3%2F%2Fyt4%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        \"\"\""},{"line_number":465,"context_line":"        user \u003d {"},{"line_number":466,"context_line":"            \"_name\": \"root\","},{"line_number":467,"context_line":"            \"_password\": root_password or str(uuid.uuid4()),"},{"line_number":468,"context_line":"        }"},{"line_number":469,"context_line":"        LOG.debug("},{"line_number":470,"context_line":"            \"%s: Creating root user with password %s.\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyv4%3D","line":467,"updated":"2013-12-31 13:53:27.000000000","message":"as discussed earliear, password should be generated with help of  passlib","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"37be0009c3799d18f9e055ddd26727a96846a8f4","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        \"\"\""},{"line_number":465,"context_line":"        user \u003d {"},{"line_number":466,"context_line":"            \"_name\": \"root\","},{"line_number":467,"context_line":"            \"_password\": root_password or str(uuid.uuid4()),"},{"line_number":468,"context_line":"        }"},{"line_number":469,"context_line":"        LOG.debug("},{"line_number":470,"context_line":"            \"%s: Creating root user with password %s.\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyRI%3D","line":467,"in_reply_to":"AAAAT3%2F%2FyY4%3D","updated":"2013-12-31 17:27:54.000000000","message":"I see it.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        \"\"\""},{"line_number":465,"context_line":"        user \u003d {"},{"line_number":466,"context_line":"            \"_name\": \"root\","},{"line_number":467,"context_line":"            \"_password\": root_password or str(uuid.uuid4()),"},{"line_number":468,"context_line":"        }"},{"line_number":469,"context_line":"        LOG.debug("},{"line_number":470,"context_line":"            \"%s: Creating root user with password %s.\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyY4%3D","line":467,"in_reply_to":"AAAAT3%2F%2FyfE%3D","updated":"2013-12-31 16:17:05.000000000","message":"there\u0027s already patchset with passlib","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        \"\"\""},{"line_number":465,"context_line":"        user \u003d {"},{"line_number":466,"context_line":"            \"_name\": \"root\","},{"line_number":467,"context_line":"            \"_password\": root_password or str(uuid.uuid4()),"},{"line_number":468,"context_line":"        }"},{"line_number":469,"context_line":"        LOG.debug("},{"line_number":470,"context_line":"            \"%s: Creating root user with password %s.\" %"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyfE%3D","line":467,"in_reply_to":"AAAAT3%2F%2Fyv4%3D","updated":"2013-12-31 15:52:08.000000000","message":"I will look at passlib.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        }"},{"line_number":469,"context_line":"        LOG.debug("},{"line_number":470,"context_line":"            \"%s: Creating root user with password %s.\" %"},{"line_number":471,"context_line":"            (CONF.guest_id, user[\u0027_password\u0027],)"},{"line_number":472,"context_line":"        )"},{"line_number":473,"context_line":"        statement \u003d \"CREATE USER %s WITH PASSWORD \u0027%s\u0027\""},{"line_number":474,"context_line":"        if self.is_root_enabled():"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyv0%3D","line":471,"updated":"2013-12-31 13:53:27.000000000","message":"please use formatting style \"%(key)s\" % {\u0027key\u0027: \"\"}","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"a035f718802d19771dbdf43be8daae7a31c184cd","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        }"},{"line_number":469,"context_line":"        LOG.debug("},{"line_number":470,"context_line":"            \"%s: Creating root user with password %s.\" %"},{"line_number":471,"context_line":"            (CONF.guest_id, user[\u0027_password\u0027],)"},{"line_number":472,"context_line":"        )"},{"line_number":473,"context_line":"        statement \u003d \"CREATE USER %s WITH PASSWORD \u0027%s\u0027\""},{"line_number":474,"context_line":"        if self.is_root_enabled():"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyHU%3D","line":471,"in_reply_to":"AAAAT3%2F%2FyQU%3D","updated":"2013-12-31 20:04:00.000000000","message":"Py3 branch still supports %()s formatting, and i do agree about \"\".format()","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"37be0009c3799d18f9e055ddd26727a96846a8f4","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        }"},{"line_number":469,"context_line":"        LOG.debug("},{"line_number":470,"context_line":"            \"%s: Creating root user with password %s.\" %"},{"line_number":471,"context_line":"            (CONF.guest_id, user[\u0027_password\u0027],)"},{"line_number":472,"context_line":"        )"},{"line_number":473,"context_line":"        statement \u003d \"CREATE USER %s WITH PASSWORD \u0027%s\u0027\""},{"line_number":474,"context_line":"        if self.is_root_enabled():"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyQU%3D","line":471,"in_reply_to":"AAAAT3%2F%2FyYs%3D","updated":"2013-12-31 17:27:54.000000000","message":"If compatibility is the argument then we should not use either. The \"%\" is deprecated and all formatting should use the \".format()\" method for strings.\n\nI chose to use \"%\" with tuples because it is used in other parts of Trove.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        }"},{"line_number":469,"context_line":"        LOG.debug("},{"line_number":470,"context_line":"            \"%s: Creating root user with password %s.\" %"},{"line_number":471,"context_line":"            (CONF.guest_id, user[\u0027_password\u0027],)"},{"line_number":472,"context_line":"        )"},{"line_number":473,"context_line":"        statement \u003d \"CREATE USER %s WITH PASSWORD \u0027%s\u0027\""},{"line_number":474,"context_line":"        if self.is_root_enabled():"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyYs%3D","line":471,"in_reply_to":"AAAAT3%2F%2FyfA%3D","updated":"2013-12-31 16:17:05.000000000","message":"it works with Py26, 27, 3, 33, PyPy.\ntuple substitutions are not working in everyting above 27.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        }"},{"line_number":469,"context_line":"        LOG.debug("},{"line_number":470,"context_line":"            \"%s: Creating root user with password %s.\" %"},{"line_number":471,"context_line":"            (CONF.guest_id, user[\u0027_password\u0027],)"},{"line_number":472,"context_line":"        )"},{"line_number":473,"context_line":"        statement \u003d \"CREATE USER %s WITH PASSWORD \u0027%s\u0027\""},{"line_number":474,"context_line":"        if self.is_root_enabled():"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyfA%3D","line":471,"in_reply_to":"AAAAT3%2F%2Fyv0%3D","updated":"2013-12-31 15:52:08.000000000","message":"Why?","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            statement \u003d \"ALTER USER %s WITH PASSWORD \u0027%s\u0027\""},{"line_number":476,"context_line":"        LOG.debug("},{"line_number":477,"context_line":"            \"%s: Modifying root user with statement (%s)\" %"},{"line_number":478,"context_line":"            (CONF.guest_id, statement,)"},{"line_number":479,"context_line":"        )"},{"line_number":480,"context_line":"        utils.execute_with_timeout("},{"line_number":481,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyvw%3D","line":478,"updated":"2013-12-31 13:53:27.000000000","message":"same here","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            statement \u003d \"ALTER USER %s WITH PASSWORD \u0027%s\u0027\""},{"line_number":476,"context_line":"        LOG.debug("},{"line_number":477,"context_line":"            \"%s: Modifying root user with statement (%s)\" %"},{"line_number":478,"context_line":"            (CONF.guest_id, statement,)"},{"line_number":479,"context_line":"        )"},{"line_number":480,"context_line":"        utils.execute_with_timeout("},{"line_number":481,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fye4%3D","line":478,"in_reply_to":"AAAAT3%2F%2Fyvw%3D","updated":"2013-12-31 15:52:08.000000000","message":"See above?","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        )"},{"line_number":480,"context_line":"        utils.execute_with_timeout("},{"line_number":481,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":482,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement % (user[\u0027_name\u0027], user[\u0027_password\u0027],),"},{"line_number":483,"context_line":"            timeout\u003d30"},{"line_number":484,"context_line":"        )"},{"line_number":485,"context_line":"        return user"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyt0%3D","line":482,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        )"},{"line_number":480,"context_line":"        utils.execute_with_timeout("},{"line_number":481,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":482,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement % (user[\u0027_name\u0027], user[\u0027_password\u0027],),"},{"line_number":483,"context_line":"            timeout\u003d30"},{"line_number":484,"context_line":"        )"},{"line_number":485,"context_line":"        return user"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fygg%3D","line":482,"in_reply_to":"AAAAT3%2F%2Fyt0%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":567,"context_line":"        \"\"\""},{"line_number":568,"context_line":"        LOG.info("},{"line_number":569,"context_line":"            \"%s: Revoking user (%s) access to database (%s).\" %"},{"line_number":570,"context_line":"            (CONF.guest_id, username, database,)"},{"line_number":571,"context_line":"        )"},{"line_number":572,"context_line":"        statement \u003d \"REVOKE ALL ON DATABASE %s FROM %s\""},{"line_number":573,"context_line":"        utils.execute_with_timeout("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fytw%3D","line":570,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":567,"context_line":"        \"\"\""},{"line_number":568,"context_line":"        LOG.info("},{"line_number":569,"context_line":"            \"%s: Revoking user (%s) access to database (%s).\" %"},{"line_number":570,"context_line":"            (CONF.guest_id, username, database,)"},{"line_number":571,"context_line":"        )"},{"line_number":572,"context_line":"        statement \u003d \"REVOKE ALL ON DATABASE %s FROM %s\""},{"line_number":573,"context_line":"        utils.execute_with_timeout("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fygc%3D","line":570,"in_reply_to":"AAAAT3%2F%2Fytw%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":572,"context_line":"        statement \u003d \"REVOKE ALL ON DATABASE %s FROM %s\""},{"line_number":573,"context_line":"        utils.execute_with_timeout("},{"line_number":574,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":575,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement % (database, username,),"},{"line_number":576,"context_line":"            timeout\u003d30,"},{"line_number":577,"context_line":"        )"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyts%3D","line":575,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":572,"context_line":"        statement \u003d \"REVOKE ALL ON DATABASE %s FROM %s\""},{"line_number":573,"context_line":"        utils.execute_with_timeout("},{"line_number":574,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":575,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement % (database, username,),"},{"line_number":576,"context_line":"            timeout\u003d30,"},{"line_number":577,"context_line":"        )"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FygY%3D","line":575,"in_reply_to":"AAAAT3%2F%2Fyts%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        statement \u003d (\"SELECT datname, datacl \""},{"line_number":589,"context_line":"                     \"FROM pg_database \""},{"line_number":590,"context_line":"                     \"WHERE datistemplate \u003d false\")"},{"line_number":591,"context_line":"        out, err \u003d utils.execute_with_timeout("},{"line_number":592,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":593,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement,"},{"line_number":594,"context_line":"            timeout\u003d30,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fy04%3D","line":591,"updated":"2013-12-31 13:53:27.000000000","message":"if you are not examining err variable, then ignore it, but i sugget to check if it\u0027s empty or not","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        statement \u003d (\"SELECT datname, datacl \""},{"line_number":589,"context_line":"                     \"FROM pg_database \""},{"line_number":590,"context_line":"                     \"WHERE datistemplate \u003d false\")"},{"line_number":591,"context_line":"        out, err \u003d utils.execute_with_timeout("},{"line_number":592,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":593,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement,"},{"line_number":594,"context_line":"            timeout\u003d30,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyes%3D","line":591,"in_reply_to":"AAAAT3%2F%2Fy04%3D","updated":"2013-12-31 15:52:08.000000000","message":"Maybe \u0027err\u0027 is a bad choice of name. These are stdout and stderr. It is not a Python exception.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"a035f718802d19771dbdf43be8daae7a31c184cd","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        statement \u003d (\"SELECT datname, datacl \""},{"line_number":589,"context_line":"                     \"FROM pg_database \""},{"line_number":590,"context_line":"                     \"WHERE datistemplate \u003d false\")"},{"line_number":591,"context_line":"        out, err \u003d utils.execute_with_timeout("},{"line_number":592,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":593,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement,"},{"line_number":594,"context_line":"            timeout\u003d30,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyG8%3D","line":591,"in_reply_to":"AAAAT3%2F%2Fyes%3D","updated":"2013-12-31 20:04:00.000000000","message":"it\u0027s ok for naming, but sometimes even with successful execution stderr contains significant information, but in this case i woul suggest to:\nout, _ \u003d \nbut it seems like server could goes down while querry exection, so, it would be better to examin err and cover with try except (to make less code, it would be better to cover exec with try except in querry method.\n\nAnd i wonder if sqlAlchemy could speak to postgres ?\nIf it\u0027s true, it would be better to avoid of using too much execs.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"e2c5bffc38954823a4fea03ce095e9f08531efe0","unresolved":false,"context_lines":[{"line_number":591,"context_line":"        out, err \u003d utils.execute_with_timeout("},{"line_number":592,"context_line":"            \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":593,"context_line":"            \u0027psql\u0027, \u0027-c\u0027, statement,"},{"line_number":594,"context_line":"            timeout\u003d30,"},{"line_number":595,"context_line":"        )"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"        # Split output fields that are seperated by the \u0027|\u0027."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fu2Q%3D","line":594,"updated":"2014-01-02 18:37:38.000000000","message":"could this really take up to 30 seconds? \nThis seems long or something that might be configured per setup?","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":611,"context_line":"        cmd \u003d operating_system.service_discovery(PGSQL_SERVICE_CANDIDATES)"},{"line_number":612,"context_line":"        LOG.info("},{"line_number":613,"context_line":"            \"%s: Starting database engine with command (%s).\" %"},{"line_number":614,"context_line":"            (CONF.guest_id, cmd[\u0027cmd_start\u0027],)"},{"line_number":615,"context_line":"        )"},{"line_number":616,"context_line":"        utils.execute_with_timeout("},{"line_number":617,"context_line":"            *cmd[\u0027cmd_start\u0027].split(),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fytg%3D","line":614,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":611,"context_line":"        cmd \u003d operating_system.service_discovery(PGSQL_SERVICE_CANDIDATES)"},{"line_number":612,"context_line":"        LOG.info("},{"line_number":613,"context_line":"            \"%s: Starting database engine with command (%s).\" %"},{"line_number":614,"context_line":"            (CONF.guest_id, cmd[\u0027cmd_start\u0027],)"},{"line_number":615,"context_line":"        )"},{"line_number":616,"context_line":"        utils.execute_with_timeout("},{"line_number":617,"context_line":"            *cmd[\u0027cmd_start\u0027].split(),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FygU%3D","line":614,"in_reply_to":"AAAAT3%2F%2Fytg%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":623,"context_line":"        cmd \u003d operating_system.service_discovery(PGSQL_SERVICE_CANDIDATES)"},{"line_number":624,"context_line":"        LOG.info("},{"line_number":625,"context_line":"            \"%s: Stopping database engine with command (%s).\" %"},{"line_number":626,"context_line":"            (CONF.guest_id, cmd[\u0027cmd_stop\u0027],)"},{"line_number":627,"context_line":"        )"},{"line_number":628,"context_line":"        utils.execute_with_timeout("},{"line_number":629,"context_line":"            *cmd[\u0027cmd_stop\u0027].split(),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FytY%3D","line":626,"updated":"2013-12-31 13:53:27.000000000","message":"formatting style","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":623,"context_line":"        cmd \u003d operating_system.service_discovery(PGSQL_SERVICE_CANDIDATES)"},{"line_number":624,"context_line":"        LOG.info("},{"line_number":625,"context_line":"            \"%s: Stopping database engine with command (%s).\" %"},{"line_number":626,"context_line":"            (CONF.guest_id, cmd[\u0027cmd_stop\u0027],)"},{"line_number":627,"context_line":"        )"},{"line_number":628,"context_line":"        utils.execute_with_timeout("},{"line_number":629,"context_line":"            *cmd[\u0027cmd_stop\u0027].split(),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FygQ%3D","line":626,"in_reply_to":"AAAAT3%2F%2FytY%3D","updated":"2013-12-31 15:52:08.000000000","message":"Explain.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":633,"context_line":"    def restart(self):"},{"line_number":634,"context_line":"        \"\"\"Restart the PgSql service.\"\"\""},{"line_number":635,"context_line":"        LOG.info("},{"line_number":636,"context_line":"            \"%s: Restarting database engine.\" % (CONF.guest_id,)"},{"line_number":637,"context_line":"        )"},{"line_number":638,"context_line":"        try:"},{"line_number":639,"context_line":"            self.status.begin_restart()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fy1I%3D","line":636,"updated":"2013-12-31 13:53:27.000000000","message":"unneeded braces","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":633,"context_line":"    def restart(self):"},{"line_number":634,"context_line":"        \"\"\"Restart the PgSql service.\"\"\""},{"line_number":635,"context_line":"        LOG.info("},{"line_number":636,"context_line":"            \"%s: Restarting database engine.\" % (CONF.guest_id,)"},{"line_number":637,"context_line":"        )"},{"line_number":638,"context_line":"        try:"},{"line_number":639,"context_line":"            self.status.begin_restart()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyhs%3D","line":636,"in_reply_to":"AAAAT3%2F%2Fy1I%3D","updated":"2013-12-31 15:52:08.000000000","message":"It is a tuple with one element.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Run a simple scalar query to make sure the process is responsive."},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            utils.execute_with_timeout("},{"line_number":71,"context_line":"                \"sudo\", \"-u\", \"postgres\", \"psql\", \"-c\", \"SELECT 1\","},{"line_number":72,"context_line":"                timeout\u003d30,"},{"line_number":73,"context_line":"            )"},{"line_number":74,"context_line":"        except utils.Timeout:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeYw%3D","line":71,"updated":"2014-01-13 14:38:29.000000000","message":"Nothing changed from previous patchset.\n\npostgresql status could be retrieved through \n\n/usr/lib/postgresql/bin/pg_ctl status -D /var/lib/postgres/data \u003e/dev/null 2\u003e\u00261","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"f1d4288bad7fd6f8d1572c34a25d71d060ba19fb","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Run a simple scalar query to make sure the process is responsive."},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            utils.execute_with_timeout("},{"line_number":71,"context_line":"                \"sudo\", \"-u\", \"postgres\", \"psql\", \"-c\", \"SELECT 1\","},{"line_number":72,"context_line":"                timeout\u003d30,"},{"line_number":73,"context_line":"            )"},{"line_number":74,"context_line":"        except utils.Timeout:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FJ9U%3D","line":71,"in_reply_to":"AAAAUH%2F%2FKLA%3D","updated":"2014-01-16 21:58:41.000000000","message":"A BLOCKED instance would be one that is running, but for some reason cannot respond to queries.\n\nBasic logic is:\n\n- do psql_ping (SELECT 1)\n- if timeout \u003d\u003d\u003e BLOCKED (running but can\u0027t respond)\n- if fail\n   - if process running \u003d\u003d\u003e BLOCKED (running but can\u0027t respond)\n    - if process *not* running\n        - if pid still exists \u003d\u003d\u003e CRASHED (should be running but is not)\n        - if pid not exists \u003d\u003d\u003e SHUTDOWN (should not be running)\n- if pass \u003d\u003d\u003e RUNNING (should be running)\n\nThis is identical to the way we check for MySQL status.\n\nI disagree that we should use pg_ctl at all. pg_ctl status will simply open the pid file and tell you if the process is running. This function replaces pg_ctl and adds the BLOCKED status. pg_ctl can only handle RUNNING and SHUTDOWN. Using it here would be redundant as we have recreated the same exact function plus some added features.","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b47c52259c72c89d64eee73b168132b1bc831b5b","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Run a simple scalar query to make sure the process is responsive."},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            utils.execute_with_timeout("},{"line_number":71,"context_line":"                \"sudo\", \"-u\", \"postgres\", \"psql\", \"-c\", \"SELECT 1\","},{"line_number":72,"context_line":"                timeout\u003d30,"},{"line_number":73,"context_line":"            )"},{"line_number":74,"context_line":"        except utils.Timeout:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FKLA%3D","line":71,"in_reply_to":"AAAAUH%2F%2FLq4%3D","updated":"2014-01-16 21:11:00.000000000","message":"In which cases postgres is BLOCED ?\n\nThen you should use complex method: check by pg_ctl and query to check if instance is RUNNING and SHUTDOWN/CRASHED and if its BLOCKED for queries.","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"f5b7ef9b5470c31ce2717d3991a08fd12248fecb","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Run a simple scalar query to make sure the process is responsive."},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            utils.execute_with_timeout("},{"line_number":71,"context_line":"                \"sudo\", \"-u\", \"postgres\", \"psql\", \"-c\", \"SELECT 1\","},{"line_number":72,"context_line":"                timeout\u003d30,"},{"line_number":73,"context_line":"            )"},{"line_number":74,"context_line":"        except utils.Timeout:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FLq4%3D","line":71,"in_reply_to":"AAAAUH%2F%2FeYw%3D","updated":"2014-01-16 19:52:43.000000000","message":"Again, you mistake the point.\n\nPossible statuses are RUNNING, SHUTDOWN, CRASHED, and BLOCKED. pg_ctl status will tell you RUNNING and SHUTDOWN/CRASHED. It will *not* tell you if the service is running but cannot respond to queries (BLOCKED). In order to determine that you need to do a small scalar query. The scalar query also has the ability to tell us RUNNING and SHUTDOWN/CRASHED.\n\nThis makes a scalar query a better solution that pg_ctl status.","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        LOG.debug("},{"line_number":106,"context_line":"            \"{guest_id}: Beginning PgSql package installation.\".format("},{"line_number":107,"context_line":"                guest_id\u003dCONF.guest_id"},{"line_number":108,"context_line":"            )"},{"line_number":109,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeYs%3D","line":106,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        if not packager.pkg_is_installed(packages):"},{"line_number":113,"context_line":"            try:"},{"line_number":114,"context_line":"                LOG.info("},{"line_number":115,"context_line":"                    \"{guest_id}: Installing ({packages}).\".format("},{"line_number":116,"context_line":"                        guest_id\u003dCONF.guest_id,"},{"line_number":117,"context_line":"                        packages\u003dpackages,"},{"line_number":118,"context_line":"                    )"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeYo%3D","line":115,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                    pkg.PkgBrokenError):"},{"line_number":126,"context_line":"                LOG.exception("},{"line_number":127,"context_line":"                    \"{guest_id}: There was a package manager error while \""},{"line_number":128,"context_line":"                    \"trying to install ({packages}).\".format("},{"line_number":129,"context_line":"                        guest_id\u003dCONF.guest_id,"},{"line_number":130,"context_line":"                        packages\u003dpackages,"},{"line_number":131,"context_line":"                    )"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeYk%3D","line":128,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            except Exception:"},{"line_number":136,"context_line":"                LOG.exception("},{"line_number":137,"context_line":"                    \"{guest_id}: The package manager encountered an unknown \""},{"line_number":138,"context_line":"                    \"error while trying to install ({packages}).\".format("},{"line_number":139,"context_line":"                        guest_id\u003dCONF.guest_id,"},{"line_number":140,"context_line":"                        packages\u003dpackages,"},{"line_number":141,"context_line":"                    )"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeYg%3D","line":138,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                self.start_db()"},{"line_number":147,"context_line":"                self.status.end_install_or_restart()"},{"line_number":148,"context_line":"                LOG.debug("},{"line_number":149,"context_line":"                    \"{guest_id}: Completed package installation.\".format("},{"line_number":150,"context_line":"                        guest_id\u003dCONF.guest_id,"},{"line_number":151,"context_line":"                    )"},{"line_number":152,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeYc%3D","line":149,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        statement \u003d \"ALTER USER {name} WITH PASSWORD \u0027{password}\u0027\""},{"line_number":162,"context_line":"        for user in users:"},{"line_number":163,"context_line":"            LOG.debug("},{"line_number":164,"context_line":"                \"{guest_id}: Changing password for {user} to {password}.\""},{"line_number":165,"context_line":"                .format("},{"line_number":166,"context_line":"                    guest_id\u003dCONF.guest_id,"},{"line_number":167,"context_line":"                    user\u003duser[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeYU%3D","line":164,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                )"},{"line_number":170,"context_line":"            )"},{"line_number":171,"context_line":"            LOG.info("},{"line_number":172,"context_line":"                \"{guest_id}: Changing password for {user} to {password}.\""},{"line_number":173,"context_line":"                .format("},{"line_number":174,"context_line":"                    guest_id\u003dCONF.guest_id,"},{"line_number":175,"context_line":"                    user\u003duser[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeYQ%3D","line":172,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                    password\u003d\"\u003cSANITIZED\u003e\","},{"line_number":177,"context_line":"                )"},{"line_number":178,"context_line":"            )"},{"line_number":179,"context_line":"            utils.execute_with_timeout("},{"line_number":180,"context_line":"                \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":181,"context_line":"                \u0027psql\u0027, \u0027-c\u0027, statement.format("},{"line_number":182,"context_line":"                    user\u003duser[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeVo%3D","line":179,"updated":"2014-01-13 14:38:29.000000000","message":"I\u0027d suggest you to examine stdout and stderr.\nPlease define method which will take care of execution queries.\nAlso, i do believe that we could add https://pypi.python.org/pypi/py-postgresql to the deps and use it instead of execs\nAlso, as i said, would be better to build query class (same as for mysql).","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"f5b7ef9b5470c31ce2717d3991a08fd12248fecb","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                    password\u003d\"\u003cSANITIZED\u003e\","},{"line_number":177,"context_line":"                )"},{"line_number":178,"context_line":"            )"},{"line_number":179,"context_line":"            utils.execute_with_timeout("},{"line_number":180,"context_line":"                \u0027sudo\u0027, \u0027-u\u0027, \u0027postgres\u0027,"},{"line_number":181,"context_line":"                \u0027psql\u0027, \u0027-c\u0027, statement.format("},{"line_number":182,"context_line":"                    user\u003duser[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FLlA%3D","line":179,"in_reply_to":"AAAAUH%2F%2FeVo%3D","updated":"2014-01-16 19:52:43.000000000","message":"No need to examine. The psql binary has clearly defined exit codes for success and failure.\n\nI do not agree on adding py-postgresql or psycopg2+psycogreen. It would mean adding a new dependency  and requiring the agent to manage another database connection. With exec we get the database connection almost for free and we don\u0027t have to manage long lasting connections to the db. That means we also don\u0027t have to refresh connections after database restarts and the like.\n\nI also disagree with a query class. The only reason you would ever need a query class is to abstract for changes in the way the database handles DDL statements. I say we keep it simple until we *actually* have a need for an abstraction.","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            statement \u003d \"ALTER USER {old} RENAME TO {new}\""},{"line_number":210,"context_line":"            access \u003d self.list_access(username, None)"},{"line_number":211,"context_line":"            LOG.info("},{"line_number":212,"context_line":"                \"{guest_id}: Changing username for {old} to {new}.\".format("},{"line_number":213,"context_line":"                    guest_id\u003dCONF.guest_id,"},{"line_number":214,"context_line":"                    old\u003dusername,"},{"line_number":215,"context_line":"                    new\u003duser_attrs[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeYM%3D","line":212,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    def start_db_with_conf_changes(self, config_contents):"},{"line_number":315,"context_line":"        \"\"\"Restarts the PgSql instance with a new configuration.\"\"\""},{"line_number":316,"context_line":"        LOG.info("},{"line_number":317,"context_line":"            \"{guest_id}: Going into restart mode for config file changes.\""},{"line_number":318,"context_line":"            .format("},{"line_number":319,"context_line":"                guest_id\u003dCONF.guest_id,"},{"line_number":320,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeYI%3D","line":317,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self.reset_configuration(config_contents)"},{"line_number":325,"context_line":"        self.start_db()"},{"line_number":326,"context_line":"        LOG.info("},{"line_number":327,"context_line":"            \"{guest_id}: Ending restart mode for config file changes.\".format("},{"line_number":328,"context_line":"                guest_id\u003dCONF.guest_id,"},{"line_number":329,"context_line":"            )"},{"line_number":330,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeYA%3D","line":327,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                    collate\u003dcollate,"},{"line_number":355,"context_line":"                )"},{"line_number":356,"context_line":"            LOG.debug("},{"line_number":357,"context_line":"                \"{guest_id}: Creating database with statement ({statement}).\""},{"line_number":358,"context_line":"                .format("},{"line_number":359,"context_line":"                    guest_id\u003dCONF.guest_id,"},{"line_number":360,"context_line":"                    statement\u003dstatement,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeX0%3D","line":357,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                )"},{"line_number":362,"context_line":"            )"},{"line_number":363,"context_line":"            LOG.info("},{"line_number":364,"context_line":"                \"{guest_id}: Creating database {name}.\".format("},{"line_number":365,"context_line":"                    guest_id\u003dCONF.guest_id,"},{"line_number":366,"context_line":"                    name\u003ddatabase[\u0027_name\u0027],"},{"line_number":367,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeXw%3D","line":364,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        statement \u003d \"CREATE USER {name} WITH PASSWORD \u0027{password}\u0027\""},{"line_number":385,"context_line":"        for user in users:"},{"line_number":386,"context_line":"            LOG.debug("},{"line_number":387,"context_line":"                \"{guest_id}: Creating user {name} with password {password}.\""},{"line_number":388,"context_line":"                .format("},{"line_number":389,"context_line":"                    guest_id\u003dCONF.guest_id,"},{"line_number":390,"context_line":"                    name\u003duser[\u0027_name\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeXs%3D","line":387,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":392,"context_line":"                )"},{"line_number":393,"context_line":"            )"},{"line_number":394,"context_line":"            LOG.info("},{"line_number":395,"context_line":"                \"{guest_id}: Creating user {name} with password {password}.\""},{"line_number":396,"context_line":"                .format("},{"line_number":397,"context_line":"                    guest_id\u003dCONF.guest_id,"},{"line_number":398,"context_line":"                    name\u003duser[\u0027_name\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeXk%3D","line":395,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":421,"context_line":"            {\"_name\": \"\"}"},{"line_number":422,"context_line":"        \"\"\""},{"line_number":423,"context_line":"        LOG.info("},{"line_number":424,"context_line":"            \"{guest_id}: Dropping database {name}.\".format("},{"line_number":425,"context_line":"                guest_id\u003dCONF.guest_id,"},{"line_number":426,"context_line":"                name\u003ddatabase[\u0027_name\u0027],"},{"line_number":427,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeXg%3D","line":424,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":443,"context_line":"            {\"_name\": \"\"}"},{"line_number":444,"context_line":"        \"\"\""},{"line_number":445,"context_line":"        LOG.info("},{"line_number":446,"context_line":"            \"{guest_id}: Dropping user {name}.\".format("},{"line_number":447,"context_line":"                guest_id\u003dCONF.guest_id,"},{"line_number":448,"context_line":"                name\u003duser[\u0027_name\u0027],"},{"line_number":449,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeXc%3D","line":446,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":501,"context_line":"        statement \u003d \"GRANT ALL ON DATABASE {database} TO {user}\""},{"line_number":502,"context_line":"        for database in databases:"},{"line_number":503,"context_line":"            LOG.info("},{"line_number":504,"context_line":"                \"{guest_id}: Granting user ({user}) access to database \""},{"line_number":505,"context_line":"                \"({database}).\".format("},{"line_number":506,"context_line":"                    guest_id\u003dCONF.guest_id,"},{"line_number":507,"context_line":"                    user\u003dusername,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeXU%3D","line":504,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":556,"context_line":"            \"_password\": root_password or str(uuid.uuid4()),"},{"line_number":557,"context_line":"        }"},{"line_number":558,"context_line":"        LOG.debug("},{"line_number":559,"context_line":"            \"{guest_id}: Creating root user with password {password}.\".format("},{"line_number":560,"context_line":"                guest_id\u003dCONF.guest_id,"},{"line_number":561,"context_line":"                password\u003duser[\u0027_password\u0027],"},{"line_number":562,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeXM%3D","line":559,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":565,"context_line":"        if self.is_root_enabled():"},{"line_number":566,"context_line":"            statement \u003d \"ALTER USER {name} WITH PASSWORD \u0027{password}\u0027\""},{"line_number":567,"context_line":"        LOG.debug("},{"line_number":568,"context_line":"            \"{guest_id}: Modifying root user with statement ({statement})\""},{"line_number":569,"context_line":"            .format("},{"line_number":570,"context_line":"                guest_id\u003dCONF.guest_id,"},{"line_number":571,"context_line":"                statement\u003dstatement,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeXA%3D","line":568,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":663,"context_line":"        database."},{"line_number":664,"context_line":"        \"\"\""},{"line_number":665,"context_line":"        LOG.info("},{"line_number":666,"context_line":"            \"{guest_id}: Revoking user ({user}) access to database\""},{"line_number":667,"context_line":"            \"({database}).\".format("},{"line_number":668,"context_line":"                guest_id\u003dCONF.guest_id,"},{"line_number":669,"context_line":"                user\u003dusername,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeW4%3D","line":666,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":714,"context_line":"        \"\"\"Start the PgSql service.\"\"\""},{"line_number":715,"context_line":"        cmd \u003d operating_system.service_discovery(PGSQL_SERVICE_CANDIDATES)"},{"line_number":716,"context_line":"        LOG.info("},{"line_number":717,"context_line":"            \"{guest_id}: Starting database engine with command ({command}).\""},{"line_number":718,"context_line":"            .format("},{"line_number":719,"context_line":"                guest_id\u003dCONF.guest_id,"},{"line_number":720,"context_line":"                command\u003dcmd[\u0027cmd_start\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeWs%3D","line":717,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b81def5a7364fa2d5fd105a47e1f62ec0eb06540","unresolved":false,"context_lines":[{"line_number":729,"context_line":"        \"\"\"Stop the PgSql service.\"\"\""},{"line_number":730,"context_line":"        cmd \u003d operating_system.service_discovery(PGSQL_SERVICE_CANDIDATES)"},{"line_number":731,"context_line":"        LOG.info("},{"line_number":732,"context_line":"            \"{guest_id}: Stopping database engine with command ({command}).\""},{"line_number":733,"context_line":"            .format("},{"line_number":734,"context_line":"                guest_id\u003dCONF.guest_id,"},{"line_number":735,"context_line":"                command\u003dcmd[\u0027cmd_stop\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FeWo%3D","line":732,"updated":"2014-01-13 14:38:29.000000000","message":"_()","commit_id":"90d723bef13d39572014f88d79022dd57ba52237"}],"trove/guestagent/datastore/postgresql/service/access.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6f2007d7ced3bf80fbb37c449d13bb21bc7df3f6","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def grant_access(self, context, username, hostname, databases):"},{"line_number":29,"context_line":"        \"\"\"Give a user permission to use a given database."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        The username and hostname parameters are strings."},{"line_number":32,"context_line":"        The databases parameter is a list of strings representing the names of"},{"line_number":33,"context_line":"        the databases to grant permission on."},{"line_number":34,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_daa88422","line":31,"updated":"2014-09-03 13:43:57.000000000","message":"this should be written with:\n\n    :param \u003cname\u003e\n    :type \u003cname\u003e \u003ctype\u003e","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6f2007d7ced3bf80fbb37c449d13bb21bc7df3f6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def revoke_access(self, context, username, hostname, database):"},{"line_number":53,"context_line":"        \"\"\"Revoke a user\u0027s permission to use a given database."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        The username and hostname parameters are strings."},{"line_number":56,"context_line":"        The database parameter is a string representing the name of the"},{"line_number":57,"context_line":"        database."},{"line_number":58,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_9ab27c92","line":55,"updated":"2014-09-03 13:43:57.000000000","message":"this should be written with:\n\n    :param \u003cname\u003e\n    :type \u003cname\u003e \u003ctype\u003e","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6f2007d7ced3bf80fbb37c449d13bb21bc7df3f6","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    def list_access(self, context, username, hostname):"},{"line_number":76,"context_line":"        \"\"\"List database for which the given user as access."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        The username and hostname parameters are strings."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        Return value is a list of dictionaries in the following form:"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_5ab5747c","line":78,"updated":"2014-09-03 13:43:57.000000000","message":"this should be written with:\n\n    :param \u003cname\u003e\n    :type \u003cname\u003e \u003ctype\u003e","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"}],"trove/guestagent/datastore/postgresql/service/config.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0ad402fbacc24ba5f55cb691bd183aa6a558f3","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        )"},{"line_number":92,"context_line":"        with open(\u0027/tmp/pgsql_hba_config\u0027, \u0027w+\u0027) as config_file:"},{"line_number":93,"context_line":"            config_file.write(out)"},{"line_number":94,"context_line":"            config_file.write(\"host    all     all     0.0.0.0/0   md5\\n\")"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        utils.execute_with_timeout("},{"line_number":97,"context_line":"            \u0027sudo\u0027, \u0027chown\u0027, \u0027postgres\u0027, \u0027/tmp/pgsql_hba_config\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_685c2a4c","line":94,"range":{"start_line":94,"start_character":35,"end_line":94,"end_character":39},"updated":"2014-06-11 11:26:09.000000000","message":"\\t instead of multiple spaces","commit_id":"5e72733c1a87b5891920fad785eee7f9a75fc3a8"}],"trove/guestagent/datastore/postgresql/service/database.py":[{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"6bac5756601c8c30f785d6f747ea70d848372c19","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            [{\"_name\": \"\", \"_character_set\": \"\", \"_collate\": \"\"}, ...]"},{"line_number":87,"context_line":"        \"\"\""},{"line_number":88,"context_line":"        results \u003d pgutil.query("},{"line_number":89,"context_line":"            pgutil.DatabaseQuery.list(ignore\u003d(\u0027postgres\u0027,)),"},{"line_number":90,"context_line":"            timeout\u003d30,"},{"line_number":91,"context_line":"        )"},{"line_number":92,"context_line":"        # Convert results to dictionaries."}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_0a29cf9a","line":89,"updated":"2014-08-28 13:15:37.000000000","message":"Please make the ignore list a config setting.","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b16336e973a22b505a229fac7a2dfa1357a05e5","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            [{\"_name\": \"\", \"_character_set\": \"\", \"_collate\": \"\"}, ...]"},{"line_number":87,"context_line":"        \"\"\""},{"line_number":88,"context_line":"        results \u003d pgutil.query("},{"line_number":89,"context_line":"            pgutil.DatabaseQuery.list(ignore\u003d(\u0027postgres\u0027,)),"},{"line_number":90,"context_line":"            timeout\u003d30,"},{"line_number":91,"context_line":"        )"},{"line_number":92,"context_line":"        # Convert results to dictionaries."}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_d3adbe9c","line":89,"in_reply_to":"1abeadc6_0a29cf9a","updated":"2014-08-28 22:00:37.000000000","message":"Good call.","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6f2007d7ced3bf80fbb37c449d13bb21bc7df3f6","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":"CONF \u003d cfg.CONF"},{"line_number":24,"context_line":"IGNORE_DBS_LIST \u003d CONF.get(CONF.datastore_manager).ignore_dbs"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class PgSqlDatabase(object):"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_7a3f98d6","line":24,"updated":"2014-09-03 13:43:57.000000000","message":"since this file is used only by postgresql so no need to do this in such way:\n\nIGNORE_DBS_LIST \u003d CONF.get(\u0027postgesql\u0027).ignore_dbs","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"}],"trove/guestagent/datastore/postgresql/service/install.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0ad402fbacc24ba5f55cb691bd183aa6a558f3","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        packager \u003d pkg.Package()"},{"line_number":47,"context_line":"        if not packager.pkg_is_installed(packages):"},{"line_number":48,"context_line":"            try:"},{"line_number":49,"context_line":"                LOG.info("},{"line_number":50,"context_line":"                    \"{guest_id}: Installing ({packages}).\".format("},{"line_number":51,"context_line":"                        guest_id\u003dCONF.guest_id,"},{"line_number":52,"context_line":"                        packages\u003dpackages,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_48268ecf","line":49,"updated":"2014-06-11 11:26:09.000000000","message":"translation is required","commit_id":"5e72733c1a87b5891920fad785eee7f9a75fc3a8"}],"trove/guestagent/datastore/postgresql/service/process.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0ad402fbacc24ba5f55cb691bd183aa6a558f3","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def start_db(self, context):"},{"line_number":32,"context_line":"        \"\"\"Start the PgSql service.\"\"\""},{"line_number":33,"context_line":"        cmd \u003d operating_system.service_discovery(PGSQL_SERVICE_CANDIDATES)"},{"line_number":34,"context_line":"        LOG.info("},{"line_number":35,"context_line":"            \"{guest_id}: Starting database engine with command ({command}).\""},{"line_number":36,"context_line":"            .format("}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_235a452a","line":33,"updated":"2014-06-11 11:26:09.000000000","message":"why cmd cannot be global? Seems that it gets resolved each time you need to know how to manage DB.","commit_id":"5e72733c1a87b5891920fad785eee7f9a75fc3a8"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"08c519be2204e0ff1e6ddd9ae2e29b339eb973cb","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            timeout\u003d30"},{"line_number":45,"context_line":"        )"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def stop_db(self, context):"},{"line_number":48,"context_line":"        \"\"\"Stop the PgSql service.\"\"\""},{"line_number":49,"context_line":"        cmd \u003d operating_system.service_discovery(PGSQL_SERVICE_CANDIDATES)"},{"line_number":50,"context_line":"        LOG.info("}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_f6dbb84c","line":47,"updated":"2014-09-03 00:58:35.000000000","message":"signature should be:\n\n    def stop_db(self, context, do_not_start_on_reboot\u003dFalse):\n\notherwise resizes (and other things) fail.\n\nas to whether you should be using the do_not_start_on_reboot value to pivot on logic: i\u0027ll leave that up to you (i\u0027m not that familiar with psql).\n\n    [req-790fe2b8-b24d-4aa0-bfee-30eb946e8d11 d217b937e7664f878584cd79f663dbfe fe5ae9fe3c7f467e8859d687ee4db5b6] Error calling stop_db\n    Traceback (most recent call last):\n      File \"/opt/stack/trove/trove/guestagent/api.py\", line 53, in _call\n        timeout\u003dtimeout_sec)\n      File \"/opt/stack/trove/trove/openstack/common/rpc/proxy.py\", line 126, in call\n        result \u003d rpc.call(context, real_topic, msg, timeout)\n      File \"/opt/stack/trove/trove/openstack/common/rpc/__init__.py\", line 139, in call\n        return _get_impl().call(CONF, context, topic, msg, timeout)\n      File \"/opt/stack/trove/trove/openstack/common/rpc/impl_kombu.py\", line 815, in call\n        rpc_amqp.get_connection_pool(conf, Connection))\n      File \"/opt/stack/trove/trove/openstack/common/rpc/amqp.py\", line 553, in call\n        rv \u003d list(rv)\n      File \"/opt/stack/trove/trove/openstack/common/rpc/amqp.py\", line 518, in __iter__\n        raise result\n    TypeError: stop_db() got an unexpected keyword argument \u0027do_not_start_on_reboot\u0027\n    Traceback (most recent call last):\n    \n      File \"/home/stack/trove/trove/openstack/common/rpc/amqp.py\", line 440, in _process_data\n        **args)\n    \n      File \"/home/stack/trove/trove/openstack/common/rpc/dispatcher.py\", line 172, in dispatch\n        result \u003d getattr(proxyobj, method)(ctxt, **kwargs)\n    \n    TypeError: stop_db() got an unexpected keyword argument \u0027do_not_start_on_reboot\u0027","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"}],"trove/guestagent/datastore/postgresql/service/root.py":[{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"6bac5756601c8c30f785d6f747ea70d848372c19","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        system administration superuser of os_admin."},{"line_number":33,"context_line":"        \"\"\""},{"line_number":34,"context_line":"        results \u003d pgutil.query("},{"line_number":35,"context_line":"            pgutil.UserQuery.list_root(ignore\u003d(\u0027postgres\u0027, \u0027os_admin\u0027,)),"},{"line_number":36,"context_line":"            timeout\u003d30,"},{"line_number":37,"context_line":"        )"},{"line_number":38,"context_line":"        # Reduce iter of iters to iter of single values."}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_0aa46f49","line":35,"updated":"2014-08-28 13:15:37.000000000","message":"Seems like the ignore list should come from a config value, there may already be one.","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b16336e973a22b505a229fac7a2dfa1357a05e5","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        system administration superuser of os_admin."},{"line_number":33,"context_line":"        \"\"\""},{"line_number":34,"context_line":"        results \u003d pgutil.query("},{"line_number":35,"context_line":"            pgutil.UserQuery.list_root(ignore\u003d(\u0027postgres\u0027, \u0027os_admin\u0027,)),"},{"line_number":36,"context_line":"            timeout\u003d30,"},{"line_number":37,"context_line":"        )"},{"line_number":38,"context_line":"        # Reduce iter of iters to iter of single values."}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_53ec4ebb","line":35,"in_reply_to":"1abeadc6_0aa46f49","updated":"2014-08-28 22:00:37.000000000","message":"It does exist. I\u0027ll also add it to the pgsql section so you don\u0027t have to put all of them in common.","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"}],"trove/guestagent/datastore/postgresql/service/status.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0ad402fbacc24ba5f55cb691bd183aa6a558f3","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def get(cls):"},{"line_number":32,"context_line":"        if not cls._instance:"},{"line_number":33,"context_line":"            cls._instance \u003d PgSqlAppStatus()"},{"line_number":34,"context_line":"        return cls._instance"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _get_actual_db_status(self):"},{"line_number":37,"context_line":"        \"\"\"Checks the acutal PgSql process to determine status."}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_c300c103","line":34,"updated":"2014-06-11 11:26:09.000000000","message":"no need to define get, it\u0027s enough to have _get_actual_db_status","commit_id":"5e72733c1a87b5891920fad785eee7f9a75fc3a8"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f2a8682b4a95d6d9bc6d6a2c8e48c55e9bf3848e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        return cls._instance"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _get_actual_db_status(self):"},{"line_number":37,"context_line":"        \"\"\"Checks the acutal PgSql process to determine status."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        Status will be one of the following:"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_253d0bbc","line":37,"updated":"2014-09-02 21:55:19.000000000","message":"acutal \u003d\u003e actual.","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"}],"trove/guestagent/datastore/postgresql/service/users.py":[{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"6bac5756601c8c30f785d6f747ea70d848372c19","unresolved":false,"context_lines":[{"line_number":83,"context_line":"              \"_databases\": [{\"_name\": \"\"}, ...]}, ...]"},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        results \u003d pgutil.query("},{"line_number":86,"context_line":"            pgutil.UserQuery.list(ignore\u003d(\u0027postgres\u0027, \u0027os_admin\u0027,)),"},{"line_number":87,"context_line":"            timeout\u003d30,"},{"line_number":88,"context_line":"        )"},{"line_number":89,"context_line":"        # Convert results into dictionaries."}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_8a46bf79","line":86,"updated":"2014-08-28 13:15:37.000000000","message":"The ignore list should come from the config setting.","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"08c519be2204e0ff1e6ddd9ae2e29b339eb973cb","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            timeout\u003d30,"},{"line_number":142,"context_line":"        )"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def get_user(self, context, username, hostname):"},{"line_number":145,"context_line":"        \"\"\"Return a single user matching the criteria."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        The username and hostname parameter are strings."}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_b6285087","line":144,"updated":"2014-09-03 00:58:35.000000000","message":"it looks like the LOW_TIMEOUT is slightly too low for Postgresql:\n\n    $ trove user-show 140f2c0e-eb1c-45b6-a201-9338485d0b46 bob\n    ERROR: An error occurred communicating with the guest: Timeout while waiting on RPC response - topic: \"guestagent.140f2c0e-eb1c-45b6-a201-9338485d0b46\", RPC method: \"get_user\" info: \"\u003cunknown\u003e\". (HTTP 400)\n\n    2014-09-03 00:41:11.654 DEBUG trove.openstack.common.processutils  Running cmd (subprocess): sudo -u postgres psql -c Copy (SELECT datname FROM pg_database WHERE datistemplate \u003d false AND \u0027user bob\u003dCTc\u0027 \u003d ANY (datacl)) To \u0027/tmp/5f69e602-297b-405a-b872-9ea2f71339b2\u0027 With CSV from (pid\u003d905) execute /home/stack/trove/trove/openstack/common/processutils.py:158\n    2014-09-03 00:41:13.201 DEBUG trove.openstack.common.processutils  Result was 0 from (pid\u003d905) execute /home/stack/trove/trove/openstack/common/processutils.py:192\n    2014-09-03 00:41:13.259 DEBUG trove.openstack.common.processutils  Running cmd (subprocess): sudo chmod 777 /tmp/5f69e602-297b-405a-b872-9ea2f71339b2 from (pid\u003d905) execute /home/stack/trove/trove/openstack/common/processutils.py:158\n    2014-09-03 00:41:13.664 DEBUG trove.openstack.common.processutils  Result was 0 from (pid\u003d905) execute /home/stack/trove/trove/openstack/common/processutils.py:192\n    2014-09-03 00:41:13.718 DEBUG trove.guestagent.datastore.postgresql.pgutil  Running as postgres: (\u0027rm\u0027, \u0027/tmp/5f69e602-297b-405a-b872-9ea2f71339b2\u0027) from (pid\u003d905) execute /home/stack/trove/trove/guestagent/datastore/postgresql/pgutil.py:29\n    2014-09-03 00:41:13.727 DEBUG trove.openstack.common.processutils  Running cmd (subprocess): sudo -u postgres rm /tmp/5f69e602-297b-405a-b872-9ea2f71339b2 from (pid\u003d905) execute /home/stack/trove/trove/openstack/common/processutils.py:158\n    2014-09-03 00:41:14.137 DEBUG trove.openstack.common.processutils  Result was 0 from (pid\u003d905) execute /home/stack/trove/trove/openstack/common/processutils.py:192\n    2014-09-03 00:41:14.203 DEBUG trove.openstack.common.rpc.amqp  UNIQUE_ID is 91a3a3a6fac54f8daaaffbdb65750c28. from (pid\u003d905) _add_unique_id /home/stack/trove/trove/openstack/common/rpc/amqp.py:341\n    2014-09-03 00:41:14.263 DEBUG trove.openstack.common.rpc.amqp  UNIQUE_ID is 3ef60e9ffa4a464c8aca005b69a3e623. from (pid\u003d905) _add_unique_id /home/stack/trove/trove/openstack/common/rpc/amqp.py:341\n\n\n\nthis issue exists for other user-related calls (because they all use the same underlying methodology for getting the data). ex: user-show-access.\n\nfix is either to bump the default low_timeout a bit, or to switch it to high_timeout, or introduce a medium_timeout, or find a different more performant means of getting user-related data.","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"f67d693c60772e17fbd3493a40bb28ec8117e45a","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            timeout\u003d30,"},{"line_number":142,"context_line":"        )"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def get_user(self, context, username, hostname):"},{"line_number":145,"context_line":"        \"\"\"Return a single user matching the criteria."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        The username and hostname parameter are strings."}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_711b5273","line":144,"in_reply_to":"fa98f980_b6285087","updated":"2014-09-03 01:20:48.000000000","message":"I remember already bumping the low-timeout a bit to cater to the mysql user calls. The issue seems to be that the call time increases linearly with the number of users that exist in the db (at least that\u0027s true in the mysql case). If so it might serve us best to introduce a medium_timeout for the user related calls as you mention above.","commit_id":"4fdd1b5deafbd51faa19f88a275f9655aeabf777"}],"trove/guestagent/datastore/postgresql/system.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"32f023175149ca1c1cf1098e36b53ad5ff4c6888","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from trove.common import cfg"},{"line_number":19,"context_line":"from trove.guestagent.common.operating_system import get_os"},{"line_number":20,"context_line":"# from trove.guestagent.common.operating_system import REDHAT"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d cfg.CONF"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bs34%3D","line":20,"updated":"2013-11-21 11:24:11.000000000","message":"same","commit_id":"9b7676ec63e404c516432c2ffa7a863f0992b1e5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"32f023175149ca1c1cf1098e36b53ad5ff4c6888","unresolved":false,"context_lines":[{"line_number":29,"context_line":"PGSQL_CMD_STOP \u003d \"sudo service postgresql stop || /bin/true\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# if OS \u003d\u003d REDHAT:"},{"line_number":33,"context_line":"#     # FIND REDHAT POSTGRESQL STUFF"},{"line_number":34,"context_line":"#     PGSQL_CONFIG \u003d \"/etc/my.cnf\""},{"line_number":35,"context_line":"#     MYSQL_BIN \u003d \"/usr/libexec/mysqld\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bs4A%3D","line":32,"updated":"2013-11-21 11:24:11.000000000","message":"I suppose it could be removed.","commit_id":"9b7676ec63e404c516432c2ffa7a863f0992b1e5"}],"trove/guestagent/pkg.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import commands"},{"line_number":22,"context_line":"import re"},{"line_number":23,"context_line":"from tempfile import NamedTemporaryFile"},{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"import pexpect"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from trove.common import exception"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FytI%3D","line":24,"updated":"2013-12-31 13:53:27.000000000","message":"any need to add this ?","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import commands"},{"line_number":22,"context_line":"import re"},{"line_number":23,"context_line":"from tempfile import NamedTemporaryFile"},{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"import pexpect"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from trove.common import exception"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyk4%3D","line":24,"in_reply_to":"AAAAT3%2F%2FytI%3D","updated":"2013-12-31 15:52:08.000000000","message":"Yes. There is a call to \u0027os.remove\u0027 on line 262. I will mark it with a comment so you can see.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                f.write(selections)"},{"line_number":259,"context_line":"            utils.execute(\"debconf-set-selections %s \u0026\u0026 dpkg --configure -a\""},{"line_number":260,"context_line":"                          % fname, run_as_root\u003dTrue, root_helper\u003d\"sudo\","},{"line_number":261,"context_line":"                          shell\u003dTrue)"},{"line_number":262,"context_line":"            os.remove(fname)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def _install(self, packages, time_out):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FylA%3D","line":261,"updated":"2013-12-31 15:52:08.000000000","message":"Here is the call that needs \u0027import os\u0027.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"}],"trove/guestagent/strategies/backup/mysql_impl.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"18d580affde7798fcdb8c5ab18db434ef8a9f480","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def __init__(self, filename, **kwargs):"},{"line_number":32,"context_line":"        kwargs[\u0027user\u0027] \u003d ADMIN_USER_NAME"},{"line_number":33,"context_line":"        kwargs[\u0027password\u0027] \u003d get_auth_password()"},{"line_number":34,"context_line":"        super(MySQLDump, self).__init__(filename, **kwargs)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @property"},{"line_number":37,"context_line":"    def cmd(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FytE%3D","line":34,"updated":"2013-12-31 13:53:27.000000000","message":"this changes deserves it\u0027s own bp or bug-report","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"13574dd026b6435d3cbe41a1942e0d98c8bfd639","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def __init__(self, filename, **kwargs):"},{"line_number":32,"context_line":"        kwargs[\u0027user\u0027] \u003d ADMIN_USER_NAME"},{"line_number":33,"context_line":"        kwargs[\u0027password\u0027] \u003d get_auth_password()"},{"line_number":34,"context_line":"        super(MySQLDump, self).__init__(filename, **kwargs)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @property"},{"line_number":37,"context_line":"    def cmd(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FvKE%3D","line":34,"in_reply_to":"AAAAT3%2F%2FyYY%3D","updated":"2014-01-02 16:53:55.000000000","message":"Kevin, I believe this has been fixed. Probably you just need to rebase to see my changes.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"21ffc860c1743dbb6640b80334ec2396329507ba","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def __init__(self, filename, **kwargs):"},{"line_number":32,"context_line":"        kwargs[\u0027user\u0027] \u003d ADMIN_USER_NAME"},{"line_number":33,"context_line":"        kwargs[\u0027password\u0027] \u003d get_auth_password()"},{"line_number":34,"context_line":"        super(MySQLDump, self).__init__(filename, **kwargs)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @property"},{"line_number":37,"context_line":"    def cmd(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FyYY%3D","line":34,"in_reply_to":"AAAAT3%2F%2Fyj8%3D","updated":"2013-12-31 16:17:05.000000000","message":"Make another patchset, instead of mixing posgress and other stuff.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"},{"author":{"_account_id":7850,"name":"Kevin Conway","email":"kevinjacobconway@gmail.com","username":"kevinconway"},"change_message_id":"4b71dc672c690b728fa758fb3e90cff342a86f31","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def __init__(self, filename, **kwargs):"},{"line_number":32,"context_line":"        kwargs[\u0027user\u0027] \u003d ADMIN_USER_NAME"},{"line_number":33,"context_line":"        kwargs[\u0027password\u0027] \u003d get_auth_password()"},{"line_number":34,"context_line":"        super(MySQLDump, self).__init__(filename, **kwargs)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @property"},{"line_number":37,"context_line":"    def cmd(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fyj8%3D","line":34,"in_reply_to":"AAAAT3%2F%2FytE%3D","updated":"2013-12-31 15:52:08.000000000","message":"I disagree. This change is related to the change made to \u0027trove/guestagent/backup/backupagent.py\u0027. The original code works. I only changed it to make postgresql work.","commit_id":"f6d1b8d0936cabe3471cb3d0b7508e8ab06f8854"}],"trove/guestagent/strategies/restore/postgresql_impl.py":[{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"6bac5756601c8c30f785d6f747ea70d848372c19","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    __strategy_name__ \u003d \u0027pg_dump\u0027"},{"line_number":25,"context_line":"    base_restore_cmd \u003d \u0027sudo -u postgres psql \u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _pre_restore(self):"},{"line_number":28,"context_line":"        pass"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def _post_restore(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_0d456942","line":27,"updated":"2014-08-28 13:15:37.000000000","message":"If you don\u0027t need these then don\u0027t define them.","commit_id":"b3202a55c0c035e7478fef32e298e0a699f32f49"}],"trove/templates/postgresql/config.template":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"32f023175149ca1c1cf1098e36b53ad5ff4c6888","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -----------------------------"},{"line_number":2,"context_line":"# PostgreSQL configuration file"},{"line_number":3,"context_line":"# -----------------------------"},{"line_number":4,"context_line":"#"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAATn%2F%2Bs5Q%3D","line":1,"updated":"2013-11-21 11:24:11.000000000","message":"It would be nice to  remove comments, because postgres /deployeruser already knew what each parameter mean.","commit_id":"9b7676ec63e404c516432c2ffa7a863f0992b1e5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0ad402fbacc24ba5f55cb691bd183aa6a558f3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"data_directory \u003d \u0027/var/lib/postgresql/9.1/main\u0027"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"hba_file \u003d \u0027/etc/postgresql/9.1/main/pg_hba.conf\u0027"},{"line_number":4,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":10,"id":"1ae5cdf2_c39c41c3","line":1,"updated":"2014-06-11 11:26:09.000000000","message":"is it all config file?","commit_id":"5e72733c1a87b5891920fad785eee7f9a75fc3a8"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"254928981a76682319d8f6ad3149fa01d9074864","unresolved":false,"context_lines":[{"line_number":1,"context_line":"data_directory \u003d \u0027/var/lib/postgresql/9.1/main\u0027"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"hba_file \u003d \u0027/etc/postgresql/9.1/main/pg_hba.conf\u0027"},{"line_number":4,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":13,"id":"1abeadc6_1cd4f045","line":1,"updated":"2014-08-27 09:16:34.000000000","message":"since this configuration file strictly pinned to version 9.1 it should be placed at:\n     \n    postgresql/9.1/config.template","commit_id":"987e415df4ea784eabb8924de898108e0679020a"}]}
