)]}'
{"trove/common/instance.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"dce074b48c72950dc361b67cba6361bf54d869f3","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    DELETED \u003d ServiceStatus(0x05, \u0027deleted\u0027, \u0027DELETED\u0027)"},{"line_number":97,"context_line":"    FAILED_TIMEOUT_GUESTAGENT \u003d ServiceStatus(0x18, \u0027guestagent error\u0027,"},{"line_number":98,"context_line":"                                              \u0027ERROR\u0027)"},{"line_number":99,"context_line":"    DELAYED \u003d ServiceStatus(0x20, \u0027Replication slave lags master\u0027, \u0027DELAYED\u0027)"},{"line_number":100,"context_line":"    DETACHED \u003d ServiceStatus(0x21, \u0027Replication slave detached from master\u0027,"},{"line_number":101,"context_line":"                             \u0027DETACHED\u0027)"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d97b44f2","line":99,"updated":"2014-08-08 15:23:19.000000000","message":"Should we drop the work \u0027slave\u0027 here?  Not all replication products use that term (they probably don\u0027t all use \u0027master\u0027 either, but that\u0027s harder to leave out ;) )","commit_id":"ddff8909f94200fb6fccc791a8d3ec16df9e7748"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"2e016426e704e50de6e5740545367b76f9310456","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    DELETED \u003d ServiceStatus(0x05, \u0027deleted\u0027, \u0027DELETED\u0027)"},{"line_number":97,"context_line":"    FAILED_TIMEOUT_GUESTAGENT \u003d ServiceStatus(0x18, \u0027guestagent error\u0027,"},{"line_number":98,"context_line":"                                              \u0027ERROR\u0027)"},{"line_number":99,"context_line":"    DELAYED \u003d ServiceStatus(0x20, \u0027Replication slave lags master\u0027, \u0027DELAYED\u0027)"},{"line_number":100,"context_line":"    DETACHED \u003d ServiceStatus(0x21, \u0027Replication slave detached from master\u0027,"},{"line_number":101,"context_line":"                             \u0027DETACHED\u0027)"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_1017caf0","line":99,"in_reply_to":"baada198_1e47ed53","updated":"2014-08-13 00:14:19.000000000","message":"Seems like this should be something that can be applied consistently across datastores regardless of type. \n\nHow about \"replica lagged\"?","commit_id":"ddff8909f94200fb6fccc791a8d3ec16df9e7748"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"82f4fef97034b2a03848bcb72174e32f185e3183","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    DELETED \u003d ServiceStatus(0x05, \u0027deleted\u0027, \u0027DELETED\u0027)"},{"line_number":97,"context_line":"    FAILED_TIMEOUT_GUESTAGENT \u003d ServiceStatus(0x18, \u0027guestagent error\u0027,"},{"line_number":98,"context_line":"                                              \u0027ERROR\u0027)"},{"line_number":99,"context_line":"    DELAYED \u003d ServiceStatus(0x20, \u0027Replication slave lags master\u0027, \u0027DELAYED\u0027)"},{"line_number":100,"context_line":"    DETACHED \u003d ServiceStatus(0x21, \u0027Replication slave detached from master\u0027,"},{"line_number":101,"context_line":"                             \u0027DETACHED\u0027)"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_1e47ed53","line":99,"in_reply_to":"baada198_d97b44f2","updated":"2014-08-12 18:37:35.000000000","message":"We are already using slave_of in the API and CLI, so this is consistent.","commit_id":"ddff8909f94200fb6fccc791a8d3ec16df9e7748"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"dce074b48c72950dc361b67cba6361bf54d869f3","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                                              \u0027ERROR\u0027)"},{"line_number":99,"context_line":"    DELAYED \u003d ServiceStatus(0x20, \u0027Replication slave lags master\u0027, \u0027DELAYED\u0027)"},{"line_number":100,"context_line":"    DETACHED \u003d ServiceStatus(0x21, \u0027Replication slave detached from master\u0027,"},{"line_number":101,"context_line":"                             \u0027DETACHED\u0027)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"# Dissuade further additions at run-time."},{"line_number":104,"context_line":"ServiceStatus.__init__ \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_19821cc7","line":101,"updated":"2014-08-08 15:23:19.000000000","message":"ditto","commit_id":"ddff8909f94200fb6fccc791a8d3ec16df9e7748"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"2e016426e704e50de6e5740545367b76f9310456","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                                              \u0027ERROR\u0027)"},{"line_number":99,"context_line":"    DELAYED \u003d ServiceStatus(0x20, \u0027Replication slave lags master\u0027, \u0027DELAYED\u0027)"},{"line_number":100,"context_line":"    DETACHED \u003d ServiceStatus(0x21, \u0027Replication slave detached from master\u0027,"},{"line_number":101,"context_line":"                             \u0027DETACHED\u0027)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"# Dissuade further additions at run-time."},{"line_number":104,"context_line":"ServiceStatus.__init__ \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_70cd6692","line":101,"in_reply_to":"baada198_19821cc7","updated":"2014-08-13 00:14:19.000000000","message":"Seems like this should be something that can be applied consistently across datastores regardless of type. \n\nHow about \"replica detached\"?","commit_id":"ddff8909f94200fb6fccc791a8d3ec16df9e7748"}],"trove/guestagent/datastore/mysql/service.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bdb214fd4bd2fa97dd17542a2d6ac85cdd270ea9","unresolved":false,"context_lines":[{"line_number":66,"context_line":"MYCNF_REPLMASTER_TMP \u003d \"/tmp/replication.cnf.tmp\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"# SLAVE_STATUS_CHECK \u003d [ (re, expected value, failure_code)... ]"},{"line_number":69,"context_line":"SLAVE_STATUS_CHECK \u003d ["},{"line_number":70,"context_line":"    (re.compile(\"Slave_IO_Running: +(\\w+)\"), \"Yes\","},{"line_number":71,"context_line":"     rd_instance.ServiceStatuses.DETACHED),"},{"line_number":72,"context_line":"    (re.compile(\"Slave_SQL_Running: +(\\w+)\"), \"Yes\","}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_c817109c","line":69,"updated":"2014-08-07 21:14:23.000000000","message":"As i can forsee, we would need this in BaseDBStatus since not only MySQL can work with replication. So, i\u0027d suggest to extend base class(BaseDBStatus) with new attribute(SLAVE_STATUS_CHECK seems to be totally ok) and method that will define slave status. And let datastore services implement it in their own manner.","commit_id":"ddff8909f94200fb6fccc791a8d3ec16df9e7748"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"ff38ffa0e290d82da4c3f6049144524a97ebf46c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"MYCNF_REPLMASTER_TMP \u003d \"/tmp/replication.cnf.tmp\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"# SLAVE_STATUS_CHECK \u003d [ (re, expected value, failure_code)... ]"},{"line_number":69,"context_line":"SLAVE_STATUS_CHECK \u003d ["},{"line_number":70,"context_line":"    (re.compile(\"Slave_IO_Running: +(\\w+)\"), \"Yes\","},{"line_number":71,"context_line":"     rd_instance.ServiceStatuses.DETACHED),"},{"line_number":72,"context_line":"    (re.compile(\"Slave_SQL_Running: +(\\w+)\"), \"Yes\","}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_dbc10751","line":69,"in_reply_to":"baada198_99a0ec37","updated":"2014-08-12 18:27:18.000000000","message":"Agreed, these are all specific to MySQL. The DETACHED and DELAYED service status added to instance.py are intended to be \u0027generic\u0027 but each datastore would need to map their specific replication states to those.","commit_id":"ddff8909f94200fb6fccc791a8d3ec16df9e7748"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"dce074b48c72950dc361b67cba6361bf54d869f3","unresolved":false,"context_lines":[{"line_number":66,"context_line":"MYCNF_REPLMASTER_TMP \u003d \"/tmp/replication.cnf.tmp\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"# SLAVE_STATUS_CHECK \u003d [ (re, expected value, failure_code)... ]"},{"line_number":69,"context_line":"SLAVE_STATUS_CHECK \u003d ["},{"line_number":70,"context_line":"    (re.compile(\"Slave_IO_Running: +(\\w+)\"), \"Yes\","},{"line_number":71,"context_line":"     rd_instance.ServiceStatuses.DETACHED),"},{"line_number":72,"context_line":"    (re.compile(\"Slave_SQL_Running: +(\\w+)\"), \"Yes\","}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_99a0ec37","line":69,"in_reply_to":"baada198_c817109c","updated":"2014-08-08 15:23:19.000000000","message":"These are entirely MySQL specific.  Also, there are no status checks done in the base class at all, so moving even the attribute there serves no purpose at this point.","commit_id":"ddff8909f94200fb6fccc791a8d3ec16df9e7748"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bdb214fd4bd2fa97dd17542a2d6ac85cdd270ea9","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            cls._instance \u003d MySqlAppStatus()"},{"line_number":176,"context_line":"        return cls._instance"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def _get_actual_db_status(self):"},{"line_number":179,"context_line":"        try:"},{"line_number":180,"context_line":"            slave_status, err \u003d utils.execute_with_timeout("},{"line_number":181,"context_line":"                \"/usr/bin/mysql\", \"-e\", \"show slave status\\G\","}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_a873bc14","line":178,"updated":"2014-08-07 21:14:23.000000000","message":"actually this breaks provisioning of single instances, since they don\u0027t have slaves, so, i\u0027d suggest to write another method that will querry slave status.","commit_id":"ddff8909f94200fb6fccc791a8d3ec16df9e7748"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"ff38ffa0e290d82da4c3f6049144524a97ebf46c","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            cls._instance \u003d MySqlAppStatus()"},{"line_number":176,"context_line":"        return cls._instance"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def _get_actual_db_status(self):"},{"line_number":179,"context_line":"        try:"},{"line_number":180,"context_line":"            slave_status, err \u003d utils.execute_with_timeout("},{"line_number":181,"context_line":"                \"/usr/bin/mysql\", \"-e\", \"show slave status\\G\","}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_1bb0dfde","line":178,"in_reply_to":"baada198_149e6106","updated":"2014-08-12 18:27:18.000000000","message":"+1, this code handles single instances already.","commit_id":"ddff8909f94200fb6fccc791a8d3ec16df9e7748"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"0b9fcc39d14744ad996ee08dafc6584b6f875abd","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            cls._instance \u003d MySqlAppStatus()"},{"line_number":176,"context_line":"        return cls._instance"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def _get_actual_db_status(self):"},{"line_number":179,"context_line":"        try:"},{"line_number":180,"context_line":"            slave_status, err \u003d utils.execute_with_timeout("},{"line_number":181,"context_line":"                \"/usr/bin/mysql\", \"-e\", \"show slave status\\G\","}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_149e6106","line":178,"in_reply_to":"baada198_a873bc14","updated":"2014-08-08 15:30:39.000000000","message":"Actually, this is specifically written to not break single instances, as my comment indicates.  Additionally, it is designed to handle the additional requirement of slaves without adding overhead to non-slave sites.","commit_id":"ddff8909f94200fb6fccc791a8d3ec16df9e7748"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"dce074b48c72950dc361b67cba6361bf54d869f3","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            cls._instance \u003d MySqlAppStatus()"},{"line_number":176,"context_line":"        return cls._instance"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def _get_actual_db_status(self):"},{"line_number":179,"context_line":"        try:"},{"line_number":180,"context_line":"            slave_status, err \u003d utils.execute_with_timeout("},{"line_number":181,"context_line":"                \"/usr/bin/mysql\", \"-e\", \"show slave status\\G\","}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_392280ba","line":178,"in_reply_to":"baada198_a873bc14","updated":"2014-08-08 15:23:19.000000000","message":"Hmmm, your point is addressed in the comment 4 lines down...","commit_id":"ddff8909f94200fb6fccc791a8d3ec16df9e7748"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"2d649f58610778de8d0bb716968949ba01e4caea","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                \"/usr/bin/mysql\", \"-e\", \"show slave status\\G\","},{"line_number":183,"context_line":"                run_as_root\u003dTrue, root_helper\u003d\"sudo\")"},{"line_number":184,"context_line":"            # if there is no output from \"show slave status\","},{"line_number":185,"context_line":"            # the site is not a slave site, so default status to RUNNING"},{"line_number":186,"context_line":"            status \u003d rd_instance.ServiceStatuses.RUNNING"},{"line_number":187,"context_line":"            for re, expected, fail_code in SLAVE_STATUS_CHECK:"},{"line_number":188,"context_line":"                m \u003d re.search(str(slave_status))"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_d915e549","line":185,"updated":"2014-08-21 14:46:00.000000000","message":"what if slave is not set correctly and then the show slave status responds with empty set?","commit_id":"4e34d9cf886c7d97aac22f947363da26bad78087"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"7b2a1bcb5bc4cd1fc2b2b13fb37d3cca7a1b5645","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                \"/usr/bin/mysql\", \"-e\", \"show slave status\\G\","},{"line_number":183,"context_line":"                run_as_root\u003dTrue, root_helper\u003d\"sudo\")"},{"line_number":184,"context_line":"            # if there is no output from \"show slave status\","},{"line_number":185,"context_line":"            # the site is not a slave site, so default status to RUNNING"},{"line_number":186,"context_line":"            status \u003d rd_instance.ServiceStatuses.RUNNING"},{"line_number":187,"context_line":"            for re, expected, fail_code in SLAVE_STATUS_CHECK:"},{"line_number":188,"context_line":"                m \u003d re.search(str(slave_status))"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_bcc817a9","line":185,"in_reply_to":"1abeadc6_d915e549","updated":"2014-08-21 15:04:37.000000000","message":"If the site is not set as a slave, \"show slave status\" returns an empty result, so the call is equivalent to the \"mysqladmin ping\" call that was here before.","commit_id":"4e34d9cf886c7d97aac22f947363da26bad78087"}],"trove/tests/api/replication.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"89298f8a561fa5ba76eac044574a46818f0556bf","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    @time_out(5 * 60)"},{"line_number":135,"context_line":"    def test_slave_active_on_recovery(self):"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        def slave_is_active():"},{"line_number":138,"context_line":"            instance \u003d instance_info.dbaas.instances.get(slave_instance.id)"},{"line_number":139,"context_line":"            if instance.status \u003d\u003d \"ACTIVE\":"},{"line_number":140,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ac7a964_98780e2d","line":137,"updated":"2014-08-16 14:00:33.000000000","message":"methods slave_is_detached and slave_is_active should be refactored to common method that takes statuses as parameters do executes its logic.","commit_id":"4e34d9cf886c7d97aac22f947363da26bad78087"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"7b2a1bcb5bc4cd1fc2b2b13fb37d3cca7a1b5645","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    @time_out(5 * 60)"},{"line_number":135,"context_line":"    def test_slave_active_on_recovery(self):"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        def slave_is_active():"},{"line_number":138,"context_line":"            instance \u003d instance_info.dbaas.instances.get(slave_instance.id)"},{"line_number":139,"context_line":"            if instance.status \u003d\u003d \"ACTIVE\":"},{"line_number":140,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_dc7073de","line":137,"in_reply_to":"7ac7a964_98780e2d","updated":"2014-08-21 15:04:37.000000000","message":"I feel that would add significant complexity for little savings.  Would be a good idea if the functions were more complex.","commit_id":"4e34d9cf886c7d97aac22f947363da26bad78087"}]}
