)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"80733efd8224cb85cf6df3cc9c8f674b6e4bfef8","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mariam John \u003cmariamj@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-01-23 04:39:22 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support for CouchDB datastore in Trove."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The following features have been implemented in this patchset:"},{"line_number":10,"context_line":"- Launch/Reboot/Terminate"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da86d52c_083051e7","line":7,"updated":"2015-02-03 02:15:08.000000000","message":"Title must not end with \u0027.\u0027","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"85ee29b78d36b45821ba786a218203823f0b4664","unresolved":false,"context_lines":[{"line_number":10,"context_line":"- Launch/Reboot/Terminate"},{"line_number":11,"context_line":"- Included unit tests for the different methods"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The remaining features will be implemented in a seperate patch."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I4e49a9c8f08a97a4622e6a1cce58aa7d9002cd06"},{"line_number":16,"context_line":"Implements: blueprint couchdb-plugin-trove"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da86d52c_f131f35a","line":13,"updated":"2015-02-11 04:10:14.000000000","message":"typo *separate*","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c9232fb2f22316ed5554eaf7bc950dbec779e92f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"- Launch/Reboot/Terminate"},{"line_number":11,"context_line":"- Included unit tests for the different methods"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The remaining features will be implemented in a seperate patch."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I4e49a9c8f08a97a4622e6a1cce58aa7d9002cd06"},{"line_number":16,"context_line":"Implements: blueprint couchdb-plugin-trove"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da86d52c_df352ca9","line":13,"in_reply_to":"da86d52c_f131f35a","updated":"2015-02-16 04:25:51.000000000","message":"It would add more sense to list the remaining features","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"}],"trove/common/cfg.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[{"line_number":781,"context_line":"                help\u003d\u0027Whether to provision a Cinder volume for datadir.\u0027),"},{"line_number":782,"context_line":"    cfg.StrOpt(\u0027device_path\u0027, default\u003d\u0027/dev/vdb\u0027,"},{"line_number":783,"context_line":"               help\u003d\u0027Device path for volume if volume support is enabled.\u0027),"},{"line_number":784,"context_line":"    cfg.StrOpt(\u0027backup_strategy\u0027, default\u003dNone,"},{"line_number":785,"context_line":"               help\u003d\u0027Default strategy to perform backups.\u0027,"},{"line_number":786,"context_line":"               deprecated_name\u003d\u0027backup_strategy\u0027,"},{"line_number":787,"context_line":"               deprecated_group\u003d\u0027DEFAULT\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_f6af3b92","line":784,"updated":"2015-01-23 17:25:40.000000000","message":"missing options: backup_namespace, restore_namespace, device_path, backup_incremental_strategy","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"31387d885456385cd4036aa235a71470231e6c1d","unresolved":false,"context_lines":[{"line_number":781,"context_line":"                help\u003d\u0027Whether to provision a Cinder volume for datadir.\u0027),"},{"line_number":782,"context_line":"    cfg.StrOpt(\u0027device_path\u0027, default\u003d\u0027/dev/vdb\u0027,"},{"line_number":783,"context_line":"               help\u003d\u0027Device path for volume if volume support is enabled.\u0027),"},{"line_number":784,"context_line":"    cfg.StrOpt(\u0027backup_strategy\u0027, default\u003dNone,"},{"line_number":785,"context_line":"               help\u003d\u0027Default strategy to perform backups.\u0027,"},{"line_number":786,"context_line":"               deprecated_name\u003d\u0027backup_strategy\u0027,"},{"line_number":787,"context_line":"               deprecated_group\u003d\u0027DEFAULT\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_9b6616ba","line":784,"in_reply_to":"1a930d6b_f6af3b92","updated":"2015-02-11 02:28:56.000000000","message":"added it. Thanks","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[{"line_number":787,"context_line":"               deprecated_group\u003d\u0027DEFAULT\u0027),"},{"line_number":788,"context_line":"    cfg.StrOpt(\u0027replication_strategy\u0027, default\u003dNone,"},{"line_number":789,"context_line":"               help\u003d\u0027Default strategy for replication.\u0027),"},{"line_number":790,"context_line":"    cfg.BoolOpt(\u0027root_on_create\u0027, default\u003dTrue,"},{"line_number":791,"context_line":"                help\u003d\u0027Enable the automatic creation of the root user for the \u0027"},{"line_number":792,"context_line":"                \u0027service during instance-create. The generated password for \u0027"},{"line_number":793,"context_line":"                \u0027the root user is immediately returned in the response of \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_764a6bad","line":790,"updated":"2015-01-23 17:25:40.000000000","message":"there\u0027s an inconsistency between defualt value of this option and what guest actually does.","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"31387d885456385cd4036aa235a71470231e6c1d","unresolved":false,"context_lines":[{"line_number":787,"context_line":"               deprecated_group\u003d\u0027DEFAULT\u0027),"},{"line_number":788,"context_line":"    cfg.StrOpt(\u0027replication_strategy\u0027, default\u003dNone,"},{"line_number":789,"context_line":"               help\u003d\u0027Default strategy for replication.\u0027),"},{"line_number":790,"context_line":"    cfg.BoolOpt(\u0027root_on_create\u0027, default\u003dTrue,"},{"line_number":791,"context_line":"                help\u003d\u0027Enable the automatic creation of the root user for the \u0027"},{"line_number":792,"context_line":"                \u0027service during instance-create. The generated password for \u0027"},{"line_number":793,"context_line":"                \u0027the root user is immediately returned in the response of \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_fb0c72ee","line":790,"in_reply_to":"1a930d6b_764a6bad","updated":"2015-02-11 02:28:56.000000000","message":"Set it to False.","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"85ee29b78d36b45821ba786a218203823f0b4664","unresolved":false,"context_lines":[{"line_number":760,"context_line":"        help\u003d\u0027Set a version cap for messages sent to conductor services\u0027),"},{"line_number":761,"context_line":"]"},{"line_number":762,"context_line":""},{"line_number":763,"context_line":"# Apache CouchDB"},{"line_number":764,"context_line":"couchdb_group \u003d cfg.OptGroup("},{"line_number":765,"context_line":"    \u0027couchdb\u0027, title\u003d\u0027CouchDB options\u0027,"},{"line_number":766,"context_line":"    help\u003d\"Oslo option group designed for CouchDB datastore\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_71526368","line":763,"updated":"2015-02-11 04:10:14.000000000","message":"This would probably make more sense coming before the \u0027RPC version groups\u0027 - i.e. in the database version option group section.  Not a big deal though.","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"3c2932f5b6e13d26e0b881cad80f1a0300693dbb","unresolved":false,"context_lines":[{"line_number":760,"context_line":"        help\u003d\u0027Set a version cap for messages sent to conductor services\u0027),"},{"line_number":761,"context_line":"]"},{"line_number":762,"context_line":""},{"line_number":763,"context_line":"# Apache CouchDB"},{"line_number":764,"context_line":"couchdb_group \u003d cfg.OptGroup("},{"line_number":765,"context_line":"    \u0027couchdb\u0027, title\u003d\u0027CouchDB options\u0027,"},{"line_number":766,"context_line":"    help\u003d\"Oslo option group designed for CouchDB datastore\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_b2f91dca","line":763,"in_reply_to":"da86d52c_71526368","updated":"2015-02-13 23:40:24.000000000","message":"I agree Peter. I saw that while making the changes in this patchset but forgot to actually change it. I will make this change. Thanks for reviewing.","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c6f14ed449aaa0fbc63e91ea39e8e492d661201d","unresolved":false,"context_lines":[{"line_number":784,"context_line":"    cfg.StrOpt(\u0027backup_strategy\u0027, default\u003dNone,"},{"line_number":785,"context_line":"               help\u003d\u0027Default strategy to perform backups.\u0027,"},{"line_number":786,"context_line":"               deprecated_name\u003d\u0027backup_strategy\u0027,"},{"line_number":787,"context_line":"               deprecated_group\u003d\u0027DEFAULT\u0027),"},{"line_number":788,"context_line":"    cfg.StrOpt(\u0027replication_strategy\u0027, default\u003dNone,"},{"line_number":789,"context_line":"               help\u003d\u0027Default strategy for replication.\u0027),"},{"line_number":790,"context_line":"    cfg.StrOpt(\u0027backup_namespace\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_24072b1f","line":787,"updated":"2015-02-14 12:29:02.000000000","message":"Why do you have a deprecated_group here? Since couchdb is new, it should never have been the case that someone ever intended to have backup_strategy defined in default for it.","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"ce2ffc5c212577a63ac467362975fc384b6d9e09","unresolved":false,"context_lines":[{"line_number":779,"context_line":"                help\u003d\u0027Enable the automatic creation of the root user for the \u0027"},{"line_number":780,"context_line":"                \u0027service during instance-create. The generated password for \u0027"},{"line_number":781,"context_line":"                \u0027the root user is immediately returned in the response of \u0027"},{"line_number":782,"context_line":"                \"instance-create as the \u0027password\u0027 field.\"),"},{"line_number":783,"context_line":"]"},{"line_number":784,"context_line":""},{"line_number":785,"context_line":"# RPC version groups"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_d278d691","line":782,"updated":"2015-03-11 06:32:20.000000000","message":"not in sync the double quotes in respect to all other single quotes","commit_id":"2a5afd783bd86106307c5e42dec862b0ef980b7d"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"6cdb6d103a65eaf7b39571fae1f00202e52c4607","unresolved":false,"context_lines":[{"line_number":779,"context_line":"                help\u003d\u0027Enable the automatic creation of the root user for the \u0027"},{"line_number":780,"context_line":"                \u0027service during instance-create. The generated password for \u0027"},{"line_number":781,"context_line":"                \u0027the root user is immediately returned in the response of \u0027"},{"line_number":782,"context_line":"                \"instance-create as the \u0027password\u0027 field.\"),"},{"line_number":783,"context_line":"]"},{"line_number":784,"context_line":""},{"line_number":785,"context_line":"# RPC version groups"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_a57542fb","line":782,"in_reply_to":"9a80dd14_d278d691","updated":"2015-03-13 21:34:21.000000000","message":"Done, Thanks Sushil. Appreciate it.","commit_id":"2a5afd783bd86106307c5e42dec862b0ef980b7d"}],"trove/guestagent/datastore/couchdb/manager.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"069f000a8b01472f5c1d1f274d784647e07ff511","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":2,"id":"1a930d6b_b9c85123","line":1,"updated":"2015-01-23 13:21:28.000000000","message":"it\u0027s 2015","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"31387d885456385cd4036aa235a71470231e6c1d","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":2,"id":"da86d52c_5bf73ed3","line":1,"in_reply_to":"1a930d6b_b9c85123","updated":"2015-02-11 02:28:56.000000000","message":"Done. Thanks","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":"CONF \u003d cfg.CONF"},{"line_number":27,"context_line":"MANAGER \u003d CONF.datastore_manager"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class Manager(periodic_task.PeriodicTasks):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_d69a3f62","line":27,"updated":"2015-01-23 17:25:40.000000000","message":"Manager is \"couchdb\", so you might define global variable that is responsible for datastore option group:\n\n          CONF.couchdb","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def prepare(self, context, packages, databases, memory_mb, users,"},{"line_number":41,"context_line":"                device_path\u003dNone, mount_point\u003dNone, backup_info\u003dNone,"},{"line_number":42,"context_line":"                config_contents\u003dNone, root_password\u003dNone, overrides\u003dNone,"},{"line_number":43,"context_line":"                cluster_config\u003dNone):"},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        This is called when the Trove instance first comes online."}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_3669c325","line":42,"range":{"start_line":42,"start_character":38,"end_line":42,"end_character":56},"updated":"2015-01-23 17:25:40.000000000","message":"Given configuration options at common/cfg.py are stating about need of root on create, but as i can see, you don\u0027t deal with enabling root.","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"31387d885456385cd4036aa235a71470231e6c1d","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def prepare(self, context, packages, databases, memory_mb, users,"},{"line_number":41,"context_line":"                device_path\u003dNone, mount_point\u003dNone, backup_info\u003dNone,"},{"line_number":42,"context_line":"                config_contents\u003dNone, root_password\u003dNone, overrides\u003dNone,"},{"line_number":43,"context_line":"                cluster_config\u003dNone):"},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        This is called when the Trove instance first comes online."}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_1b294637","line":42,"in_reply_to":"1a930d6b_3669c325","updated":"2015-02-11 02:28:56.000000000","message":"Should be fixed in cfg.py","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"069f000a8b01472f5c1d1f274d784647e07ff511","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":168,"context_line":"            operation\u003d\u0027is_root_enabled\u0027, datastore\u003dMANAGER)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def _perform_restore(self, backup_info, context, restore_location, app):"},{"line_number":171,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":172,"context_line":"            operation\u003d\u0027_perform_restore\u0027, datastore\u003dMANAGER)"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_997d55b4","line":170,"updated":"2015-01-23 13:21:28.000000000","message":"is this required? I ask because it is called _perform_restore()","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":168,"context_line":"            operation\u003d\u0027is_root_enabled\u0027, datastore\u003dMANAGER)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def _perform_restore(self, backup_info, context, restore_location, app):"},{"line_number":171,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":172,"context_line":"            operation\u003d\u0027_perform_restore\u0027, datastore\u003dMANAGER)"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_f6ebbbad","line":170,"in_reply_to":"1a930d6b_997d55b4","updated":"2015-01-23 17:25:40.000000000","message":"this method is not required, since it is being called by prepare call in case backup_info is not None, but given code doesn\u0027t do any restoring, so, it might be removed.","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":177,"context_line":"            operation\u003d\u0027create_backup\u0027, datastore\u003dMANAGER)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def get_config_changes(self, cluster_config, mount_point\u003dNone):"},{"line_number":180,"context_line":"        LOG.debug(\"Get configuration changes\")"},{"line_number":181,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":182,"context_line":"            operation\u003d\u0027get_configuration_changes\u0027, datastore\u003dMANAGER)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_d60ddf91","line":179,"range":{"start_line":179,"start_character":8,"end_line":179,"end_character":26},"updated":"2015-01-23 17:25:40.000000000","message":"this is a clustering thing, so you don\u0027t need it here,\n\nsee https://github.com/openstack/trove/blob/3e56c2177b30527475b04d0c0c099a55854942dc/trove/guestagent/datastore/mongodb/manager.py#L73","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":182,"context_line":"            operation\u003d\u0027get_configuration_changes\u0027, datastore\u003dMANAGER)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def start_db_with_conf_changes(self, context, config_contents):"},{"line_number":185,"context_line":"        LOG.debug(\"Starting CouchDB with configuration changes.\")"},{"line_number":186,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":187,"context_line":"            operation\u003d\u0027start_db_with_conf_changes\u0027, datastore\u003dMANAGER)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_b62f73f5","line":184,"updated":"2015-01-23 17:25:40.000000000","message":"IIRC, this method must be implemented, because it is responsible for volume resizing at guests side.\n\nsee https://github.com/openstack/trove/blob/109ba586802ee605ac837254c89d821e859a720d/trove/taskmanager/models.py#L1652","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c6f14ed449aaa0fbc63e91ea39e8e492d661201d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from trove.guestagent import dbaas"},{"line_number":21,"context_line":"from trove.guestagent import volume"},{"line_number":22,"context_line":"from trove.guestagent.datastore.couchdb import service"},{"line_number":23,"context_line":"from trove.openstack.common.gettextutils import _"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_a7023d07","line":23,"updated":"2015-02-14 12:29:02.000000000","message":"import ?","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c9232fb2f22316ed5554eaf7bc950dbec779e92f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class Manager(periodic_task.PeriodicTasks):"},{"line_number":31,"context_line":"    \"\"\""},{"line_number":32,"context_line":"    This is CouchDB Manager class. It is dynamically loaded"},{"line_number":33,"context_line":"    based off of the datastore of the Trove instance"},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_df10ccad","line":33,"updated":"2015-02-16 04:25:51.000000000","message":"\u0027.\u0027","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c6f14ed449aaa0fbc63e91ea39e8e492d661201d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        prepare handles all the base configuration of the CouchDB instance."},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        self.appStatus.begin_install()"},{"line_number":50,"context_line":"        self.app.install_if_needed(packages)"},{"line_number":51,"context_line":"        if device_path:"},{"line_number":52,"context_line":"            device \u003d volume.VolumeDevice(device_path)"},{"line_number":53,"context_line":"            # unmount if device is already mounted"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_c7073117","line":50,"updated":"2015-02-14 12:29:02.000000000","message":"Will this leave couchdb running? if so, you should stop it before you unmount the device and attempt to remount it, yes?","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c9232fb2f22316ed5554eaf7bc950dbec779e92f","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            # unmount if device is already mounted"},{"line_number":54,"context_line":"            device.unmount_device(device_path)"},{"line_number":55,"context_line":"            device.format()"},{"line_number":56,"context_line":"            device.mount(mount_point)"},{"line_number":57,"context_line":"            LOG.debug(\u0027Mounted the volume (%s).\u0027 % device_path)"},{"line_number":58,"context_line":"        self.app.change_permissions()"},{"line_number":59,"context_line":"        self.app.make_host_reachable()"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_bf15d8e6","line":56,"updated":"2015-02-16 04:25:51.000000000","message":"how about the data that existed prior to this activity on the data_dir\n\nWe need to copy that data to the new device, before mounting that up.","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"}],"trove/guestagent/datastore/couchdb/service.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"069f000a8b01472f5c1d1f274d784647e07ff511","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":2,"id":"1a930d6b_794fc9bd","line":1,"updated":"2015-01-23 13:21:28.000000000","message":"it\u0027s 2015","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        if state_change_wait_time:"},{"line_number":45,"context_line":"            self.state_change_wait_time \u003d state_change_wait_time"},{"line_number":46,"context_line":"        else:"},{"line_number":47,"context_line":"            self.state_change_wait_time \u003d CONF.state_change_wait_time"},{"line_number":48,"context_line":"        self.status \u003d status"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def install_if_needed(self, packages):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_76e18b99","line":47,"updated":"2015-01-23 17:25:40.000000000","message":"could be shorted:\n\n  self.state_change_wait_time \u003d (state_change_wait_time if not None else CONF.state_change_wait_time)\n\ntwo lines against four \u003d)","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"069f000a8b01472f5c1d1f274d784647e07ff511","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            operating_system.update_owner(\u0027couchdb\u0027, \u0027couchdb\u0027, \u0027/var/log/couchdb\u0027)"},{"line_number":77,"context_line":"            operating_system.update_owner(\u0027couchdb\u0027, \u0027couchdb\u0027, \u0027/var/run/couchdb\u0027)"},{"line_number":78,"context_line":"            operating_system.update_owner(\u0027couchdb\u0027, \u0027couchdb\u0027, \u0027/etc/couchdb\u0027)"},{"line_number":79,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /var/lib/couchdb\", shell\u003dTrue)"},{"line_number":80,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /var/log/couchdb\", shell\u003dTrue)"},{"line_number":81,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /var/run/couchdb\", shell\u003dTrue)"},{"line_number":82,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /etc/couchdb/\", shell\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_396e2130","line":79,"updated":"2015-01-23 13:21:28.000000000","message":"if you aren\u0027t going to do anything with out and err, why bother getting them?","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            operating_system.update_owner(\u0027couchdb\u0027, \u0027couchdb\u0027, \u0027/var/log/couchdb\u0027)"},{"line_number":77,"context_line":"            operating_system.update_owner(\u0027couchdb\u0027, \u0027couchdb\u0027, \u0027/var/run/couchdb\u0027)"},{"line_number":78,"context_line":"            operating_system.update_owner(\u0027couchdb\u0027, \u0027couchdb\u0027, \u0027/etc/couchdb\u0027)"},{"line_number":79,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /var/lib/couchdb\", shell\u003dTrue)"},{"line_number":80,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /var/log/couchdb\", shell\u003dTrue)"},{"line_number":81,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /var/run/couchdb\", shell\u003dTrue)"},{"line_number":82,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /etc/couchdb/\", shell\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_168a07bf","line":79,"in_reply_to":"1a930d6b_396e2130","updated":"2015-01-23 17:25:40.000000000","message":"+1","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"069f000a8b01472f5c1d1f274d784647e07ff511","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            operating_system.update_owner(\u0027couchdb\u0027, \u0027couchdb\u0027, \u0027/var/run/couchdb\u0027)"},{"line_number":78,"context_line":"            operating_system.update_owner(\u0027couchdb\u0027, \u0027couchdb\u0027, \u0027/etc/couchdb\u0027)"},{"line_number":79,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /var/lib/couchdb\", shell\u003dTrue)"},{"line_number":80,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /var/log/couchdb\", shell\u003dTrue)"},{"line_number":81,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /var/run/couchdb\", shell\u003dTrue)"},{"line_number":82,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /etc/couchdb/\", shell\u003dTrue)"},{"line_number":83,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo usermod -a -G couchdb ubuntu\", shell\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_39b1c18f","line":80,"updated":"2015-01-23 13:21:28.000000000","message":"why not bury these commands in system.py as well?","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            operating_system.update_owner(\u0027couchdb\u0027, \u0027couchdb\u0027, \u0027/var/run/couchdb\u0027)"},{"line_number":78,"context_line":"            operating_system.update_owner(\u0027couchdb\u0027, \u0027couchdb\u0027, \u0027/etc/couchdb\u0027)"},{"line_number":79,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /var/lib/couchdb\", shell\u003dTrue)"},{"line_number":80,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /var/log/couchdb\", shell\u003dTrue)"},{"line_number":81,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /var/run/couchdb\", shell\u003dTrue)"},{"line_number":82,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo chmod -R g+rw /etc/couchdb/\", shell\u003dTrue)"},{"line_number":83,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo usermod -a -G couchdb ubuntu\", shell\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_b6677324","line":80,"in_reply_to":"1a930d6b_39b1c18f","updated":"2015-01-23 17:25:40.000000000","message":"+1, it also can be turned into rendering string that expects specific options","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                self.state_change_wait_time, update_db):"},{"line_number":126,"context_line":"            LOG.error(_(\"Could not stop CouchDB.\"))"},{"line_number":127,"context_line":"            self.status.end_install_or_restart()"},{"line_number":128,"context_line":"            raise RuntimeError(_(\"Could not stop CouchDB\"))"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def start_db(self, update_db\u003dFalse):"},{"line_number":131,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_b64e9394","line":128,"updated":"2015-01-23 17:25:40.000000000","message":"missing period","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"069f000a8b01472f5c1d1f274d784647e07ff511","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class CouchDBAppStatus(service.BaseDbStatus):"},{"line_number":173,"context_line":"    \"\"\""},{"line_number":174,"context_line":"        Handles all of the status updating for the couchbase guest agent."},{"line_number":175,"context_line":"    \"\"\""},{"line_number":176,"context_line":"    def _get_actual_db_status(self):"},{"line_number":177,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_59084d2d","line":174,"updated":"2015-01-23 13:21:28.000000000","message":"couchbase eh?","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class CouchDBAppStatus(service.BaseDbStatus):"},{"line_number":173,"context_line":"    \"\"\""},{"line_number":174,"context_line":"        Handles all of the status updating for the couchbase guest agent."},{"line_number":175,"context_line":"    \"\"\""},{"line_number":176,"context_line":"    def _get_actual_db_status(self):"},{"line_number":177,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_9632770e","line":174,"in_reply_to":"1a930d6b_59084d2d","updated":"2015-01-23 17:25:40.000000000","message":"+1","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"069f000a8b01472f5c1d1f274d784647e07ff511","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    \"\"\""},{"line_number":176,"context_line":"    def _get_actual_db_status(self):"},{"line_number":177,"context_line":"        try:"},{"line_number":178,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo status couchdb\", shell\u003dTrue)"},{"line_number":179,"context_line":"            LOG.debug(\"output of status \u003d %r\" %out)"},{"line_number":180,"context_line":"            if \"start\" in out:"},{"line_number":181,"context_line":"                return rd_instance.ServiceStatuses.RUNNING"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_f9a01945","line":178,"updated":"2015-01-23 13:21:28.000000000","message":"would you please confirm that this command is correct.","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"31387d885456385cd4036aa235a71470231e6c1d","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    \"\"\""},{"line_number":176,"context_line":"    def _get_actual_db_status(self):"},{"line_number":177,"context_line":"        try:"},{"line_number":178,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo status couchdb\", shell\u003dTrue)"},{"line_number":179,"context_line":"            LOG.debug(\"output of status \u003d %r\" %out)"},{"line_number":180,"context_line":"            if \"start\" in out:"},{"line_number":181,"context_line":"                return rd_instance.ServiceStatuses.RUNNING"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_1bb786f6","line":178,"in_reply_to":"1a930d6b_56072f1c","updated":"2015-02-11 02:28:56.000000000","message":"When the following command is run: sudo status couchdb,\n         - if service is active, output will be: couchdb start/running\n         - if service has stopped, output will be: \n              couchdb stop/waiting\n \nThe better way would be to use the REST API to see if its up and running, so changing it to that.","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    \"\"\""},{"line_number":176,"context_line":"    def _get_actual_db_status(self):"},{"line_number":177,"context_line":"        try:"},{"line_number":178,"context_line":"            out, err \u003d utils.execute_with_timeout(\"sudo status couchdb\", shell\u003dTrue)"},{"line_number":179,"context_line":"            LOG.debug(\"output of status \u003d %r\" %out)"},{"line_number":180,"context_line":"            if \"start\" in out:"},{"line_number":181,"context_line":"                return rd_instance.ServiceStatuses.RUNNING"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_56072f1c","line":178,"in_reply_to":"1a930d6b_f9a01945","updated":"2015-01-23 17:25:40.000000000","message":"Even if it works, i feel like this is not the best option, take a look at http://guide.couchdb.org/draft/tour.html\n\nI guess, it works, status tool uses initctl(init daemon control tool), so it might work, but it doesn\u0027t actually check if database native API is available.","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c6f14ed449aaa0fbc63e91ea39e8e492d661201d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":"packager \u003d pkg.Package()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"COUCHDB_LIB_DIR \u003d \"/var/lib/couchdb\""},{"line_number":34,"context_line":"COUCHDB_LOG_DIR \u003d \"/var/log/couchdb\""},{"line_number":35,"context_line":"COUCHDB_CONFIG_DIR \u003d \"/etc/couchdb\""},{"line_number":36,"context_line":"COUCHDB_BIN_DIR \u003d \"/var/run/couchdb\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_872459b3","line":33,"updated":"2015-02-14 12:29:02.000000000","message":"Are these paths OS specific?","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c9232fb2f22316ed5554eaf7bc950dbec779e92f","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    def change_permissions(self):"},{"line_number":72,"context_line":"        \"\"\""},{"line_number":73,"context_line":"        When CouchDB is installed, a default user couchdb is created."},{"line_number":74,"context_line":"        Inorder to start/stop/restart couchdb service as ubuntu user,we"},{"line_number":75,"context_line":"        need to add ubuntu user to the couchdb group and provide read/"},{"line_number":76,"context_line":"        write access to the couchdb group."},{"line_number":77,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_5fe5bc08","line":74,"updated":"2015-02-16 04:25:51.000000000","message":"user, we (grammar)","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c9232fb2f22316ed5554eaf7bc950dbec779e92f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        write access to the couchdb group."},{"line_number":77,"context_line":"        \"\"\""},{"line_number":78,"context_line":"        try:"},{"line_number":79,"context_line":"            LOG.debug(\"Changing permissions\")"},{"line_number":80,"context_line":"            operating_system.update_owner("},{"line_number":81,"context_line":"                \u0027couchdb\u0027, \u0027couchdb\u0027, COUCHDB_LIB_DIR"},{"line_number":82,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_1fdc2446","line":79,"updated":"2015-02-16 04:25:51.000000000","message":"Grammar \u0027.\u0027 at end","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c9232fb2f22316ed5554eaf7bc950dbec779e92f","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            couchdb_service \u003d operating_system.service_discovery("},{"line_number":151,"context_line":"                system.SERVICE_CANDIDATES)"},{"line_number":152,"context_line":"            utils.execute_with_timeout(couchdb_service[\u0027cmd_stop\u0027],"},{"line_number":153,"context_line":"                                       shell\u003dTrue, timeout\u003d100)"},{"line_number":154,"context_line":"        except KeyError:"},{"line_number":155,"context_line":"            raise RuntimeError(_(\"CouchDB service is not discovered.\"))"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_3f02c86f","line":153,"updated":"2015-02-16 04:25:51.000000000","message":"hardcoded timeout values","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c9232fb2f22316ed5554eaf7bc950dbec779e92f","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            self.start_db()"},{"line_number":205,"context_line":"        except exception.ProcessExecutionError:"},{"line_number":206,"context_line":"            LOG.exception(_(\"Error while trying to update bind address of\""},{"line_number":207,"context_line":"                          \" CouchDB server\"))"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def start_db_with_conf_changes(self, config_contents):"},{"line_number":210,"context_line":"        LOG.info(_(\"Starting CouchDB with configuration changes.\"))"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_df028c71","line":207,"updated":"2015-02-16 04:25:51.000000000","message":"please end with a \u0027.\u0027","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c9232fb2f22316ed5554eaf7bc950dbec779e92f","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                return rd_instance.ServiceStatuses.SHUTDOWN"},{"line_number":240,"context_line":"        except exception.ProcessExecutionError:"},{"line_number":241,"context_line":"            LOG.exception(_(\"Error getting CouchDB status.\"))"},{"line_number":242,"context_line":"            return rd_instance.ServiceStatuses.SHUTDOWN"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_7fcc4062","line":242,"updated":"2015-02-16 04:25:51.000000000","message":"There are many debug message sentences which are not ending \u0027.\u0027","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"ce2ffc5c212577a63ac467362975fc384b6d9e09","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def complete_install_or_restart(self):"},{"line_number":66,"context_line":"        \"\"\""},{"line_number":67,"context_line":"        finalize status updates for install or restart."},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        self.status.end_install_or_restart()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_d230d6a0","line":67,"updated":"2015-03-11 06:32:20.000000000","message":"Finalize, better to be in sync, capitalize (f)","commit_id":"2a5afd783bd86106307c5e42dec862b0ef980b7d"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"6cdb6d103a65eaf7b39571fae1f00202e52c4607","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def complete_install_or_restart(self):"},{"line_number":66,"context_line":"        \"\"\""},{"line_number":67,"context_line":"        finalize status updates for install or restart."},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        self.status.end_install_or_restart()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_05660e51","line":67,"in_reply_to":"9a80dd14_d230d6a0","updated":"2015-03-13 21:34:21.000000000","message":"Done","commit_id":"2a5afd783bd86106307c5e42dec862b0ef980b7d"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"eedeb898191cc3af355116528e8a296c3769b196","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def start_db_with_conf_changes(self, config_contents):"},{"line_number":210,"context_line":"        LOG.info(_(\"Starting CouchDB with configuration changes.\"))"},{"line_number":211,"context_line":"        self._write_config(config_contents)"},{"line_number":212,"context_line":"        self.start_db(True)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def _write_config(self, config_contents):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_dd66abec","line":211,"updated":"2015-02-25 01:00:39.000000000","message":"what\u0027s the point of calling this method if it simply returns?","commit_id":"2a5afd783bd86106307c5e42dec862b0ef980b7d"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"6cdb6d103a65eaf7b39571fae1f00202e52c4607","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def start_db_with_conf_changes(self, config_contents):"},{"line_number":210,"context_line":"        LOG.info(_(\"Starting CouchDB with configuration changes.\"))"},{"line_number":211,"context_line":"        self._write_config(config_contents)"},{"line_number":212,"context_line":"        self.start_db(True)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def _write_config(self, config_contents):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_45a1e644","line":211,"in_reply_to":"ba7be1f8_dd66abec","updated":"2015-03-13 21:34:21.000000000","message":"Looks like this method needs to be implemented to enable volume resize capability. I am not planning to implement the configuration change API for CouchDB in this release which is why _write_config was just left there as a placeholder. I have included this as a note in the latest patch and removed the _write_config method to avoid any confusion. Thanks Auston. Appreciate it.","commit_id":"2a5afd783bd86106307c5e42dec862b0ef980b7d"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"ce2ffc5c212577a63ac467362975fc384b6d9e09","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        self.start_db(True)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def _write_config(self, config_contents):"},{"line_number":215,"context_line":"        return"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"class CouchDBAppStatus(service.BaseDbStatus):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_d2d7f621","line":215,"updated":"2015-03-11 06:32:20.000000000","message":"method with just a return .... any special needs?","commit_id":"2a5afd783bd86106307c5e42dec862b0ef980b7d"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"6cdb6d103a65eaf7b39571fae1f00202e52c4607","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        self.start_db(True)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def _write_config(self, config_contents):"},{"line_number":215,"context_line":"        return"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"class CouchDBAppStatus(service.BaseDbStatus):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_658b4ac3","line":215,"in_reply_to":"9a80dd14_77d9c582","updated":"2015-03-13 21:34:21.000000000","message":"You are right Petr. Was just meant to be a placeholder. I have included this as a comment in the lastest patch and removed this method to avoid any confusion. Thanks Sushil \u0026 Petr.","commit_id":"2a5afd783bd86106307c5e42dec862b0ef980b7d"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"0a4d150e01d87ad14d35860d2bdebc1d25c18d1b","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        self.start_db(True)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def _write_config(self, config_contents):"},{"line_number":215,"context_line":"        return"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"class CouchDBAppStatus(service.BaseDbStatus):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_77d9c582","line":215,"in_reply_to":"9a80dd14_d2d7f621","updated":"2015-03-11 14:49:03.000000000","message":"I guess it\u0027s just a hook for future extensions?","commit_id":"2a5afd783bd86106307c5e42dec862b0ef980b7d"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"eedeb898191cc3af355116528e8a296c3769b196","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            server_status \u003d json.loads(out)"},{"line_number":233,"context_line":"            status \u003d server_status[\"couchdb\"]"},{"line_number":234,"context_line":"            if status \u003d\u003d \u0027Welcome\u0027:"},{"line_number":235,"context_line":"                LOG.debug(\"Status of Couchdb is active.\")"},{"line_number":236,"context_line":"                return rd_instance.ServiceStatuses.RUNNING"},{"line_number":237,"context_line":"            else:"},{"line_number":238,"context_line":"                LOG.debug(\"Status of Couchdb is not active.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_bdb01744","line":235,"updated":"2015-02-25 01:00:39.000000000","message":"i\u0027ve noticed some inconsistent casing of couchdb. in some places you have Couchdb, others it\u0027s CouchDB. can you please make it consistent?","commit_id":"2a5afd783bd86106307c5e42dec862b0ef980b7d"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"6cdb6d103a65eaf7b39571fae1f00202e52c4607","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            server_status \u003d json.loads(out)"},{"line_number":233,"context_line":"            status \u003d server_status[\"couchdb\"]"},{"line_number":234,"context_line":"            if status \u003d\u003d \u0027Welcome\u0027:"},{"line_number":235,"context_line":"                LOG.debug(\"Status of Couchdb is active.\")"},{"line_number":236,"context_line":"                return rd_instance.ServiceStatuses.RUNNING"},{"line_number":237,"context_line":"            else:"},{"line_number":238,"context_line":"                LOG.debug(\"Status of Couchdb is not active.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_0569aef8","line":235,"in_reply_to":"9a80dd14_1757a903","updated":"2015-03-13 21:34:21.000000000","message":"Done. Thank you.","commit_id":"2a5afd783bd86106307c5e42dec862b0ef980b7d"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"0a4d150e01d87ad14d35860d2bdebc1d25c18d1b","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            server_status \u003d json.loads(out)"},{"line_number":233,"context_line":"            status \u003d server_status[\"couchdb\"]"},{"line_number":234,"context_line":"            if status \u003d\u003d \u0027Welcome\u0027:"},{"line_number":235,"context_line":"                LOG.debug(\"Status of Couchdb is active.\")"},{"line_number":236,"context_line":"                return rd_instance.ServiceStatuses.RUNNING"},{"line_number":237,"context_line":"            else:"},{"line_number":238,"context_line":"                LOG.debug(\"Status of Couchdb is not active.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_1757a903","line":235,"in_reply_to":"ba7be1f8_bdb01744","updated":"2015-03-11 14:49:03.000000000","message":"+1 a minor point, but worth fixing. I believe the \"correct\" casing is \"CouchDB\".","commit_id":"2a5afd783bd86106307c5e42dec862b0ef980b7d"}],"trove/guestagent/datastore/couchdb/system.py":[{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"49f1deb417092f90aae6796af00f23c204562508","unresolved":false,"context_lines":[{"line_number":22,"context_line":"UPDATE_LOG_DIR_PERMISSIONS \u003d \"sudo chmod -R g+rw %(logdir)s\""},{"line_number":23,"context_line":"UPDATE_BIN_DIR_PERMISSIONS \u003d \"sudo chmod -R g+rw %(bindir)s\""},{"line_number":24,"context_line":"UPDATE_CONF_DIR_PERMISSIONS \u003d \"sudo chmod -R g+rw %(confdir)s\""},{"line_number":25,"context_line":"UPDATE_GROUP_MEMBERSHIP \u003d \"sudo usermod -a -G couchdb ubuntu\""},{"line_number":26,"context_line":"COUCHDB_HTTPD_PORT \u003d \"5984\""},{"line_number":27,"context_line":"COUCHDB_SERVER_STATUS \u003d \"curl http://127.0.0.1:\" + COUCHDB_HTTPD_PORT"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_b40aa41d","line":25,"updated":"2015-02-13 00:15:29.000000000","message":"needs to pivot off of the os (vs. hardcode to \u0027ubuntu\u0027).","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"3c2932f5b6e13d26e0b881cad80f1a0300693dbb","unresolved":false,"context_lines":[{"line_number":22,"context_line":"UPDATE_LOG_DIR_PERMISSIONS \u003d \"sudo chmod -R g+rw %(logdir)s\""},{"line_number":23,"context_line":"UPDATE_BIN_DIR_PERMISSIONS \u003d \"sudo chmod -R g+rw %(bindir)s\""},{"line_number":24,"context_line":"UPDATE_CONF_DIR_PERMISSIONS \u003d \"sudo chmod -R g+rw %(confdir)s\""},{"line_number":25,"context_line":"UPDATE_GROUP_MEMBERSHIP \u003d \"sudo usermod -a -G couchdb ubuntu\""},{"line_number":26,"context_line":"COUCHDB_HTTPD_PORT \u003d \"5984\""},{"line_number":27,"context_line":"COUCHDB_SERVER_STATUS \u003d \"curl http://127.0.0.1:\" + COUCHDB_HTTPD_PORT"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_aeb85fe9","line":25,"in_reply_to":"da86d52c_b40aa41d","updated":"2015-02-13 23:40:24.000000000","message":"Will fix this Auston. Thank you.","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"}],"trove/guestagent/datastore/experimental/couchdb/service.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"8458c30aa9c9e69f0b077a734995a0450195f674","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":"packager \u003d pkg.Package()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"COUCHDB_LIB_DIR \u003d \"/var/lib/couchdb\""},{"line_number":34,"context_line":"COUCHDB_LOG_DIR \u003d \"/var/log/couchdb\""},{"line_number":35,"context_line":"COUCHDB_CONFIG_DIR \u003d \"/etc/couchdb\""},{"line_number":36,"context_line":"COUCHDB_BIN_DIR \u003d \"/var/run/couchdb\""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_5438163d","line":33,"updated":"2015-03-18 11:57:57.000000000","message":"Would be good to make these CONF settings.","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"22c998ec998ad047c81958ad7ea1dbc6e28ee1fe","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":"packager \u003d pkg.Package()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"COUCHDB_LIB_DIR \u003d \"/var/lib/couchdb\""},{"line_number":34,"context_line":"COUCHDB_LOG_DIR \u003d \"/var/log/couchdb\""},{"line_number":35,"context_line":"COUCHDB_CONFIG_DIR \u003d \"/etc/couchdb\""},{"line_number":36,"context_line":"COUCHDB_BIN_DIR \u003d \"/var/run/couchdb\""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_fab571d0","line":33,"in_reply_to":"9a80dd14_5438163d","updated":"2015-03-18 12:44:46.000000000","message":"If we make this CONF settings, wouldnt it mean that this is configurable? These settings are not configurable. Thanks Amrith.","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        \"\"\""},{"line_number":78,"context_line":"        try:"},{"line_number":79,"context_line":"            LOG.debug(\"Changing permissions.\")"},{"line_number":80,"context_line":"            operating_system.update_owner("},{"line_number":81,"context_line":"                \u0027couchdb\u0027, \u0027couchdb\u0027, COUCHDB_LIB_DIR"},{"line_number":82,"context_line":"            )"},{"line_number":83,"context_line":"            operating_system.update_owner("},{"line_number":84,"context_line":"                \u0027couchdb\u0027, \u0027couchdb\u0027, COUCHDB_LOG_DIR"},{"line_number":85,"context_line":"            )"},{"line_number":86,"context_line":"            operating_system.update_owner("},{"line_number":87,"context_line":"                \u0027couchdb\u0027, \u0027couchdb\u0027, COUCHDB_BIN_DIR"},{"line_number":88,"context_line":"            )"},{"line_number":89,"context_line":"            operating_system.update_owner("},{"line_number":90,"context_line":"                \u0027couchdb\u0027, \u0027couchdb\u0027, COUCHDB_CONFIG_DIR"},{"line_number":91,"context_line":"            )"},{"line_number":92,"context_line":"            self.execute_change_permission_commands("},{"line_number":93,"context_line":"                system.UPDATE_LIB_DIR_PERMISSIONS %"},{"line_number":94,"context_line":"                {\u0027libdir\u0027: COUCHDB_LIB_DIR}"},{"line_number":95,"context_line":"            )"},{"line_number":96,"context_line":"            self.execute_change_permission_commands("},{"line_number":97,"context_line":"                system.UPDATE_LOG_DIR_PERMISSIONS %"},{"line_number":98,"context_line":"                {\u0027logdir\u0027: COUCHDB_LOG_DIR}"},{"line_number":99,"context_line":"            )"},{"line_number":100,"context_line":"            self.execute_change_permission_commands("},{"line_number":101,"context_line":"                system.UPDATE_BIN_DIR_PERMISSIONS %"},{"line_number":102,"context_line":"                {\u0027bindir\u0027: COUCHDB_BIN_DIR}"},{"line_number":103,"context_line":"            )"},{"line_number":104,"context_line":"            self.execute_change_permission_commands("},{"line_number":105,"context_line":"                system.UPDATE_CONF_DIR_PERMISSIONS %"},{"line_number":106,"context_line":"                {\u0027confdir\u0027: COUCHDB_CONFIG_DIR}"},{"line_number":107,"context_line":"            )"},{"line_number":108,"context_line":"            self.execute_change_permission_commands("},{"line_number":109,"context_line":"                system.UPDATE_GROUP_MEMBERSHIP"},{"line_number":110,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_574abcad","line":107,"range":{"start_line":80,"start_character":0,"end_line":107,"end_character":13},"updated":"2015-03-18 22:00:36.000000000","message":"if you change the constants in system.py, all this could be reduced to something like:\n\n  for dir in [COUCHDB_LIB_DIR, COUCHDB_LOG_DIR,\n              COUCHDB_BIN_DIR, COUCHDB_CONFIG_DIR]:\n      operating_system.update_owner(\u0027couchdb\u0027, \u0027couchdb\u0027, dir)\n      self.execute_change_permission_commands(\n          system.UPDATE_DIR_PERMISSIONS % {\u0027dir\u0027: dir})","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"8458c30aa9c9e69f0b077a734995a0450195f674","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        except exception.ProcessExecutionError:"},{"line_number":113,"context_line":"            LOG.exception(_(\"Error changing permissions.\"))"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def execute_change_permission_commands(self, chng_perm_cmd):"},{"line_number":116,"context_line":"        out, err \u003d utils.execute_with_timeout(chng_perm_cmd, shell\u003dTrue)"},{"line_number":117,"context_line":"        if err:"},{"line_number":118,"context_line":"            raise exception.ProcessExecutionError(cmd\u003dchng_perm_cmd,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_9467ee50","line":115,"updated":"2015-03-18 11:57:57.000000000","message":"execute_with_timeout can also throw, right? I assume that the intent is that the caller (above) handles this?","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            LOG.exception(_(\"Error changing permissions.\"))"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def execute_change_permission_commands(self, chng_perm_cmd):"},{"line_number":116,"context_line":"        out, err \u003d utils.execute_with_timeout(chng_perm_cmd, shell\u003dTrue)"},{"line_number":117,"context_line":"        if err:"},{"line_number":118,"context_line":"            raise exception.ProcessExecutionError(cmd\u003dchng_perm_cmd,"},{"line_number":119,"context_line":"                                                  stderr\u003derr,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_f783b000","line":116,"updated":"2015-03-18 22:00:36.000000000","message":"None of the commands being passed in appear to require shell\u003dTrue, so it should be removed:\n\n  import shlex\n  args \u003d shlex.split(chng_perm_cmd)\n  out, err \u003d utils.execute_with_timeout(args)","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            LOG.debug(\"Changing bind address to 0.0.0.0 .\")"},{"line_number":200,"context_line":"            self.stop_db()"},{"line_number":201,"context_line":"            out, err \u003d utils.execute_with_timeout("},{"line_number":202,"context_line":"                system.UPDATE_BIND_ADDRESS, shell\u003dTrue"},{"line_number":203,"context_line":"            )"},{"line_number":204,"context_line":"            self.start_db()"},{"line_number":205,"context_line":"        except exception.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_9718b485","line":202,"updated":"2015-03-18 22:00:36.000000000","message":"I don\u0027t believe shell\u003dTrue is needed here.  See above comment.","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    def _get_actual_db_status(self):"},{"line_number":230,"context_line":"        try:"},{"line_number":231,"context_line":"            out, err \u003d utils.execute_with_timeout("},{"line_number":232,"context_line":"                system.COUCHDB_SERVER_STATUS, shell\u003dTrue"},{"line_number":233,"context_line":"            )"},{"line_number":234,"context_line":"            LOG.debug(\"CouchDB status \u003d %r\" % out)"},{"line_number":235,"context_line":"            server_status \u003d json.loads(out)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_f76e50ff","line":232,"updated":"2015-03-18 22:00:36.000000000","message":"ditto","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"}],"trove/guestagent/datastore/experimental/couchdb/system.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    \"sudo sed -i -r \u0027s/;bind_address \u003d 127.0.0.1/bind_address \u003d 0.0.0.0/\u0027 \""},{"line_number":19,"context_line":"    \"/etc/couchdb/local.ini\")"},{"line_number":20,"context_line":"TIME_OUT \u003d 1200"},{"line_number":21,"context_line":"UPDATE_LIB_DIR_PERMISSIONS \u003d \"sudo chmod -R g+rw %(libdir)s\""},{"line_number":22,"context_line":"UPDATE_LOG_DIR_PERMISSIONS \u003d \"sudo chmod -R g+rw %(logdir)s\""},{"line_number":23,"context_line":"UPDATE_BIN_DIR_PERMISSIONS \u003d \"sudo chmod -R g+rw %(bindir)s\""},{"line_number":24,"context_line":"UPDATE_CONF_DIR_PERMISSIONS \u003d \"sudo chmod -R g+rw %(confdir)s\""},{"line_number":25,"context_line":"UPDATE_GROUP_MEMBERSHIP \u003d \"sudo usermod -a -G couchdb $(whoami)\""},{"line_number":26,"context_line":"COUCHDB_HTTPD_PORT \u003d \"5984\""},{"line_number":27,"context_line":"COUCHDB_SERVER_STATUS \u003d \"curl http://127.0.0.1:\" + COUCHDB_HTTPD_PORT"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_b73cd894","line":24,"range":{"start_line":21,"start_character":0,"end_line":24,"end_character":62},"updated":"2015-03-18 22:00:36.000000000","message":"All these lines are the same.  Couldn\u0027t they be replaced by one:\n\n  UPDATE_DIR_PERMISSIONS \u003d \"sudo chmod -R g+rw %(dir)s\"\n\nThat would make some of the other code easier to maintain as well.","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"}],"trove/templates/couchdb/config.template":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9036afd60025ca89000481854e4bc9a8722ec36b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1a930d6b_718c3580","line":1,"updated":"2015-01-23 17:25:40.000000000","message":"As i can see, Couchbase have lots of config files, so you have to concider about the way to ship them into VM, see\n\nhttp://docs.couchdb.org/en/latest/config/intro.html","commit_id":"c018a80deb1120688c73f133080208328cf58a0c"}],"trove/tests/unittests/guestagent/test_couchdb_manager.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c9232fb2f22316ed5554eaf7bc950dbec779e92f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_9f91f4f3","line":1,"updated":"2015-02-16 04:25:51.000000000","message":"This is a different copyright message than rest of files, is that intended","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c9232fb2f22316ed5554eaf7bc950dbec779e92f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.manager \u003d couchdb_manager.Manager()"},{"line_number":44,"context_line":"        self.pkg \u003d couchdb_service.packager"},{"line_number":45,"context_line":"        self.real_db_app_status \u003d couchdb_service.CouchDBAppStatus"},{"line_number":46,"context_line":"        self.origin_os_path_exists \u003d os.path.exists"},{"line_number":47,"context_line":"        self.origin_format \u003d volume.VolumeDevice.format"},{"line_number":48,"context_line":"        self.origin_migrate_data \u003d volume.VolumeDevice.migrate_data"},{"line_number":49,"context_line":"        self.origin_mount \u003d volume.VolumeDevice.mount"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_fff1106b","line":46,"updated":"2015-02-16 04:25:51.000000000","message":"I cannot see if there is a usage of this method in couchdb.manager\nwhy do still need to mock this.","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c9232fb2f22316ed5554eaf7bc950dbec779e92f","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.real_db_app_status \u003d couchdb_service.CouchDBAppStatus"},{"line_number":46,"context_line":"        self.origin_os_path_exists \u003d os.path.exists"},{"line_number":47,"context_line":"        self.origin_format \u003d volume.VolumeDevice.format"},{"line_number":48,"context_line":"        self.origin_migrate_data \u003d volume.VolumeDevice.migrate_data"},{"line_number":49,"context_line":"        self.origin_mount \u003d volume.VolumeDevice.mount"},{"line_number":50,"context_line":"        self.origin_mount_points \u003d volume.VolumeDevice.mount_points"},{"line_number":51,"context_line":"        self.origin_stop_db \u003d couchdb_service.CouchDBApp.stop_db"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_ff98301d","line":48,"updated":"2015-02-16 04:25:51.000000000","message":"Same applies to this","commit_id":"7e9e1b309e515037d78524687d6208e564624b8d"}],"trove/tests/unittests/guestagent/test_dbaas.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":1775,"context_line":"    def setUp(self):"},{"line_number":1776,"context_line":"        super(CouchDBAppTest, self).setUp()"},{"line_number":1777,"context_line":"        self.orig_utils_execute_with_timeout \u003d ("},{"line_number":1778,"context_line":"            couchdb_service.utils.execute_with_timeout)"},{"line_number":1779,"context_line":"        self.orig_time_sleep \u003d time.sleep"},{"line_number":1780,"context_line":"        time.sleep \u003d Mock()"},{"line_number":1781,"context_line":"        self.orig_service_discovery \u003d operating_system.service_discovery"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_50764707","line":1778,"updated":"2015-03-18 22:00:36.000000000","message":"Should use patch.object only where needed in each test","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":1776,"context_line":"        super(CouchDBAppTest, self).setUp()"},{"line_number":1777,"context_line":"        self.orig_utils_execute_with_timeout \u003d ("},{"line_number":1778,"context_line":"            couchdb_service.utils.execute_with_timeout)"},{"line_number":1779,"context_line":"        self.orig_time_sleep \u003d time.sleep"},{"line_number":1780,"context_line":"        time.sleep \u003d Mock()"},{"line_number":1781,"context_line":"        self.orig_service_discovery \u003d operating_system.service_discovery"},{"line_number":1782,"context_line":"        operating_system.service_discovery \u003d ("},{"line_number":1783,"context_line":"            self.fake_couchdb_service_discovery)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_2b06c621","line":1780,"range":{"start_line":1779,"start_character":0,"end_line":1780,"end_character":27},"updated":"2015-03-18 22:00:36.000000000","message":"ditto","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":1778,"context_line":"            couchdb_service.utils.execute_with_timeout)"},{"line_number":1779,"context_line":"        self.orig_time_sleep \u003d time.sleep"},{"line_number":1780,"context_line":"        time.sleep \u003d Mock()"},{"line_number":1781,"context_line":"        self.orig_service_discovery \u003d operating_system.service_discovery"},{"line_number":1782,"context_line":"        operating_system.service_discovery \u003d ("},{"line_number":1783,"context_line":"            self.fake_couchdb_service_discovery)"},{"line_number":1784,"context_line":"        operating_system.get_ip_address \u003d Mock()"},{"line_number":1785,"context_line":"        util.init_db()"},{"line_number":1786,"context_line":"        self.FAKE_ID \u003d str(uuid4())"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_6b00be02","line":1783,"range":{"start_line":1781,"start_character":0,"end_line":1783,"end_character":48},"updated":"2015-03-18 22:00:36.000000000","message":"ditto","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":1781,"context_line":"        self.orig_service_discovery \u003d operating_system.service_discovery"},{"line_number":1782,"context_line":"        operating_system.service_discovery \u003d ("},{"line_number":1783,"context_line":"            self.fake_couchdb_service_discovery)"},{"line_number":1784,"context_line":"        operating_system.get_ip_address \u003d Mock()"},{"line_number":1785,"context_line":"        util.init_db()"},{"line_number":1786,"context_line":"        self.FAKE_ID \u003d str(uuid4())"},{"line_number":1787,"context_line":"        InstanceServiceStatus.create(instance_id\u003dself.FAKE_ID,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_f721f09e","line":1784,"updated":"2015-03-18 22:00:36.000000000","message":"ditto (this was never set back to the original - a prime example of why patch.object is safer)","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":1793,"context_line":""},{"line_number":1794,"context_line":"    def tearDown(self):"},{"line_number":1795,"context_line":"        super(CouchDBAppTest, self).tearDown()"},{"line_number":1796,"context_line":"        couchdb_service.utils.execute_with_timeout \u003d ("},{"line_number":1797,"context_line":"            self.orig_utils_execute_with_timeout)"},{"line_number":1798,"context_line":"        operating_system.service_discovery \u003d self.orig_service_discovery"},{"line_number":1799,"context_line":"        time.sleep \u003d self.orig_time_sleep"},{"line_number":1800,"context_line":"        InstanceServiceStatus.find_by(instance_id\u003dself.FAKE_ID).delete()"},{"line_number":1801,"context_line":"        dbaas.CONF.guest_id \u003d None"},{"line_number":1802,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_772d008f","line":1799,"range":{"start_line":1796,"start_character":0,"end_line":1799,"end_character":41},"updated":"2015-03-18 22:00:36.000000000","message":"These can then be removed","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":1806,"context_line":"        self.assertEqual(expected_status, service_status.status)"},{"line_number":1807,"context_line":""},{"line_number":1808,"context_line":"    def test_stop_db(self):"},{"line_number":1809,"context_line":"        couchdb_service.utils.execute_with_timeout \u003d Mock()"},{"line_number":1810,"context_line":"        self.appStatus.set_next_status(rd_instance.ServiceStatuses.SHUTDOWN)"},{"line_number":1811,"context_line":""},{"line_number":1812,"context_line":"        self.couchdbApp.stop_db()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_176844b9","line":1809,"updated":"2015-03-18 22:00:36.000000000","message":"This would be safer done as is in TestRedisApp - i.e. using\n\n  with patch.object(utils, \u0027execute_with_timeout\u0027):\n\nWe should probably go back and fix CouchbaseAppTest too, but out of scope for here","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":1813,"context_line":"        self.assert_reported_status(rd_instance.ServiceStatuses.NEW)"},{"line_number":1814,"context_line":""},{"line_number":1815,"context_line":"    def test_stop_db_error(self):"},{"line_number":1816,"context_line":"        couchdb_service.utils.execute_with_timeout \u003d Mock()"},{"line_number":1817,"context_line":"        self.appStatus.set_next_status(rd_instance.ServiceStatuses.RUNNING)"},{"line_number":1818,"context_line":"        self.couchdbApp.state_change_wait_time \u003d 1"},{"line_number":1819,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_376548e1","line":1816,"updated":"2015-03-18 22:00:36.000000000","message":"ditto","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":1831,"context_line":"        self.assertTrue(conductor_api.API.heartbeat.called)"},{"line_number":1832,"context_line":""},{"line_number":1833,"context_line":"    def test_start_db(self):"},{"line_number":1834,"context_line":"        couchdb_service.utils.execute_with_timeout \u003d Mock()"},{"line_number":1835,"context_line":"        self.appStatus.set_next_status(rd_instance.ServiceStatuses.RUNNING)"},{"line_number":1836,"context_line":"        self.couchdbApp._enable_db_on_boot \u003d Mock()"},{"line_number":1837,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_b7a058f5","line":1834,"updated":"2015-03-18 22:00:36.000000000","message":"ditto","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":1841,"context_line":"    def test_start_db_error(self):"},{"line_number":1842,"context_line":"        from trove.common.exception import ProcessExecutionError"},{"line_number":1843,"context_line":"        couchdb_service.utils.execute_with_timeout \u003d Mock("},{"line_number":1844,"context_line":"            side_effect\u003dProcessExecutionError(\u0027Error\u0027))"},{"line_number":1845,"context_line":"        self.couchdbApp._enable_db_on_boot \u003d Mock()"},{"line_number":1846,"context_line":""},{"line_number":1847,"context_line":"        self.assertRaises(RuntimeError, self.couchdbApp.start_db)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_f7a6500e","line":1844,"updated":"2015-03-18 22:00:36.000000000","message":"ditto","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"03685a0cb5c4b8d303d45dbe2072fa6ac1defddc","unresolved":false,"context_lines":[{"line_number":1848,"context_line":""},{"line_number":1849,"context_line":"    def test_install_when_couchdb_installed(self):"},{"line_number":1850,"context_line":"        couchdb_service.packager.pkg_is_installed \u003d Mock(return_value\u003dTrue)"},{"line_number":1851,"context_line":"        couchdb_service.utils.execute_with_timeout \u003d Mock()"},{"line_number":1852,"context_line":""},{"line_number":1853,"context_line":"        self.couchdbApp.install_if_needed([\"package\"])"},{"line_number":1854,"context_line":"        self.assertTrue(couchdb_service.packager.pkg_is_installed.called)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_97827450","line":1851,"updated":"2015-03-18 22:00:36.000000000","message":"ditto","commit_id":"5a4562de1d53cd3e225076c960637adf96d1f601"}]}
