)]}'
{"etc/trove/trove-guestagent.conf.sample":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eeebbaeaeb6adcd35895fb1b4e782a390eca94f3","unresolved":false,"context_lines":[{"line_number":97,"context_line":"backup_chunk_size \u003d 65536"},{"line_number":98,"context_line":"backup_segment_max_size \u003d 2147483648"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"# Configuration for Replication"},{"line_number":101,"context_line":"#replication_strategy \u003d MysqlBinlogReplication"},{"line_number":102,"context_line":"#replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":103,"context_line":"#replication_user \u003d slave_user"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"1ae5cdf2_06c7bb64","line":100,"updated":"2014-06-05 22:46:35.000000000","message":"Options should live in [mysql] group","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"443ec4975e48ef9d2a99b0beb4d5ebd5a0efd14a","unresolved":false,"context_lines":[{"line_number":97,"context_line":"backup_chunk_size \u003d 65536"},{"line_number":98,"context_line":"backup_segment_max_size \u003d 2147483648"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"# Configuration for Replication"},{"line_number":101,"context_line":"#replication_strategy \u003d MysqlBinlogReplication"},{"line_number":102,"context_line":"#replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":103,"context_line":"#replication_user \u003d slave_user"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"1ae5cdf2_0c191f88","line":100,"in_reply_to":"1ae5cdf2_06c7bb64","updated":"2014-06-11 21:44:18.000000000","message":"Agreed, fixing this.","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"7aacd976ff4c6e8d3677c48ab731fb0054cc58f9","unresolved":false,"context_lines":[{"line_number":97,"context_line":"backup_chunk_size \u003d 65536"},{"line_number":98,"context_line":"backup_segment_max_size \u003d 2147483648"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"# Configuration for Replication"},{"line_number":101,"context_line":"#replication_strategy \u003d MysqlBinlogReplication"},{"line_number":102,"context_line":"#replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":103,"context_line":"#replication_user \u003d slave_user"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"1ae5cdf2_1708ec26","line":100,"in_reply_to":"1ae5cdf2_0c191f88","updated":"2014-06-12 19:49:19.000000000","message":"Done","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d68459b7751756d4fc673d04b0f807bede717820","unresolved":false,"context_lines":[{"line_number":103,"context_line":"#replication_strategy \u003d MysqlBinlogReplication"},{"line_number":104,"context_line":"#replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":105,"context_line":"#replication_user \u003d slave_user"},{"line_number":106,"context_line":"#replication_password \u003d CHANGE_ME"},{"line_number":107,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1ae5cdf2_b24746a2","line":106,"updated":"2014-06-12 20:17:17.000000000","message":"password in conf file is a bit tricky thing, to be honest it\u0027s a security issue, and i actually don\u0027t want to hear from OSSG that Trove has lots of sec. issues. I\u0027d suggest to find another way to deal with it.","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"b0b0b2f682bc03bbe550824f273a8793611b66e9","unresolved":false,"context_lines":[{"line_number":103,"context_line":"#replication_strategy \u003d MysqlBinlogReplication"},{"line_number":104,"context_line":"#replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":105,"context_line":"#replication_user \u003d slave_user"},{"line_number":106,"context_line":"#replication_password \u003d CHANGE_ME"},{"line_number":107,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1ae5cdf2_bc0a9976","line":106,"in_reply_to":"1ae5cdf2_b24746a2","updated":"2014-06-13 19:14:44.000000000","message":"Not yet addressed - need to discuss what our other options might be.","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"3552d8e36e93f1b2aa60a99e0b9ebf4a6b1a3e2e","unresolved":false,"context_lines":[{"line_number":103,"context_line":"#replication_strategy \u003d MysqlBinlogReplication"},{"line_number":104,"context_line":"#replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":105,"context_line":"#replication_user \u003d slave_user"},{"line_number":106,"context_line":"#replication_password \u003d CHANGE_ME"},{"line_number":107,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":4,"id":"1ae5cdf2_c7581634","line":106,"updated":"2014-06-24 15:08:39.000000000","message":"re-iterating, we should avoid mentioning password in config.","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"34d2c6a340350a5645c0e6f6c59ec48bff40ca06","unresolved":false,"context_lines":[{"line_number":103,"context_line":"#replication_strategy \u003d MysqlBinlogReplication"},{"line_number":104,"context_line":"#replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":105,"context_line":"#replication_user \u003d slave_user"},{"line_number":106,"context_line":"#replication_password \u003d CHANGE_ME"},{"line_number":107,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":4,"id":"1ae5cdf2_121eb574","line":106,"in_reply_to":"1ae5cdf2_c7581634","updated":"2014-06-24 18:15:57.000000000","message":"As per discussion with SlickNik, we have agreed to push initial implementation with the password as it and deal with it later.  I have put in a blueprint to track this: https://blueprints.launchpad.net/trove/+spec/replication-slave-password","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"[mysql]"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"# Configuration for Replication"},{"line_number":103,"context_line":"#replication_strategy \u003d MysqlBinlogReplication"},{"line_number":104,"context_line":"#replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":105,"context_line":"#replication_user \u003d slave_user"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"baada198_76ee6923","line":102,"updated":"2014-07-15 07:29:24.000000000","message":"i wonder why this options are commented?","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"aca4aacfcab476a7a8505cb9c30b319205a409f4","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"[mysql]"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"# Configuration for Replication"},{"line_number":103,"context_line":"#replication_strategy \u003d MysqlBinlogReplication"},{"line_number":104,"context_line":"#replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":105,"context_line":"#replication_user \u003d slave_user"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"baada198_aa78822b","line":102,"in_reply_to":"baada198_76ee6923","updated":"2014-07-15 16:44:12.000000000","message":"Done","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"12e11a48fa896a493e6a76c7083f0f91c70f2ecb","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"# Configuration for Replication"},{"line_number":103,"context_line":"replication_strategy \u003d MysqlBinlogReplication"},{"line_number":104,"context_line":"replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":105,"context_line":"replication_user \u003d slave_user"},{"line_number":106,"context_line":"replication_password \u003d slave_password"},{"line_number":107,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"baada198_c446df4f","line":104,"updated":"2014-07-19 19:18:02.000000000","message":"just throwing this out there:\ndo you think replication strategy and namespace is something which might differ based on version of a datastore? should it reside in datastore_version db instead?","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"63c5b183368ac1277835158b1821d6c0ad184c40","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"# Configuration for Replication"},{"line_number":103,"context_line":"replication_strategy \u003d MysqlBinlogReplication"},{"line_number":104,"context_line":"replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":105,"context_line":"replication_user \u003d slave_user"},{"line_number":106,"context_line":"replication_password \u003d slave_password"},{"line_number":107,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"baada198_55b3d0e8","line":104,"in_reply_to":"baada198_1f74a09a","updated":"2014-07-23 02:53:07.000000000","message":"In the future, I can imagine this being a useful thing to have; esp if a new version of the datastore has a better way of handing B\u0026R","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"0815d22e99777877a675be35f2e2af2fa7115b88","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"# Configuration for Replication"},{"line_number":103,"context_line":"replication_strategy \u003d MysqlBinlogReplication"},{"line_number":104,"context_line":"replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":105,"context_line":"replication_user \u003d slave_user"},{"line_number":106,"context_line":"replication_password \u003d slave_password"},{"line_number":107,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"baada198_1f74a09a","line":104,"in_reply_to":"baada198_c446df4f","updated":"2014-07-19 21:12:41.000000000","message":"The current approach is consistent with how backup and restore strategies work. If we want to consider per-version strategies I\u0027d suggest a new blueprint that accounts for the other guest agent strategies as well. \n\nThat said: do you have a case in mind?","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"7398bc6979e813991f5437563649e5d5f54ca1d5","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"# Configuration for Replication"},{"line_number":101,"context_line":"replication_strategy \u003d MysqlBinlogReplication"},{"line_number":102,"context_line":"replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":103,"context_line":"replication_user \u003d slave_user"},{"line_number":104,"context_line":"replication_password \u003d slave_password"}],"source_content_type":"application/octet-stream","patch_set":24,"id":"baada198_1240bca1","line":102,"updated":"2014-08-12 20:31:58.000000000","message":"just something for us to think about. I spoke to some of our MYSQL DBAs and they recommended not using the same password for all master-slaves. They recommended that we generate a random password which is throw away for replication.","commit_id":"7ceb6824b358ce40ca30a4ec37506dc173dfa158"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b5375fc63225172e7f8417df4b54a6d8ed4c0cdc","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"# Configuration for Replication"},{"line_number":101,"context_line":"replication_strategy \u003d MysqlBinlogReplication"},{"line_number":102,"context_line":"replication_namespace \u003d trove.guestagent.strategies.replication.mysql_binlog"},{"line_number":103,"context_line":"replication_user \u003d slave_user"},{"line_number":104,"context_line":"replication_password \u003d slave_password"}],"source_content_type":"application/octet-stream","patch_set":24,"id":"baada198_60be5bb1","line":102,"in_reply_to":"baada198_1240bca1","updated":"2014-08-13 14:16:13.000000000","message":"We\u0027ve talked about that, and was made certain decision to delegate this tasks to Barbican.","commit_id":"7ceb6824b358ce40ca30a4ec37506dc173dfa158"}],"trove/common/cfg.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eeebbaeaeb6adcd35895fb1b4e782a390eca94f3","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                     \u0027if trove_security_groups_support is True).\u0027),"},{"line_number":319,"context_line":"    cfg.StrOpt(\u0027backup_strategy\u0027, default\u003d\u0027InnoBackupEx\u0027,"},{"line_number":320,"context_line":"               help\u003d\u0027Default strategy to perform backups.\u0027),"},{"line_number":321,"context_line":"    cfg.StrOpt(\u0027replication_strategy\u0027, default\u003d\u0027MysqlBinlogReplication\u0027,"},{"line_number":322,"context_line":"               help\u003d\u0027Default strategy for replication.\u0027),"},{"line_number":323,"context_line":"    cfg.StrOpt(\u0027replication_namespace\u0027,"},{"line_number":324,"context_line":"               default\u003d\u0027trove.guestagent.strategies.replication.mysql_binlog\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_26a757a8","line":321,"updated":"2014-06-05 22:46:35.000000000","message":"I like the idea of options per datastore, but I don\u0027t like the idea of putting options to datastore groups where replication can\u0027t be built.\nI\u0027d suggest to at least ignore that datastores (Cassandra etc)","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"344d963a1ab015de555c41937beb0eb39fcc1764","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                     \u0027 in the security group (only applicable \u0027"},{"line_number":282,"context_line":"                     \u0027if trove_security_groups_support is True).\u0027),"},{"line_number":283,"context_line":"    cfg.StrOpt(\u0027backup_strategy\u0027, default\u003d\u0027InnoBackupEx\u0027,"},{"line_number":284,"context_line":"               help\u003d\u0027Default strategy to perform backups.\u0027),"},{"line_number":285,"context_line":"    cfg.StrOpt(\u0027replication_strategy\u0027, default\u003d\u0027MysqlBinlogReplication\u0027,"},{"line_number":286,"context_line":"               help\u003d\u0027Default strategy for replication.\u0027),"},{"line_number":287,"context_line":"    cfg.StrOpt(\u0027replication_namespace\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_8f92cefa","line":284,"updated":"2014-06-23 20:30:34.000000000","message":"I know this is consistent with what we have been doing with regard to duplicating config properties but we might want to consider creating a separate group outside each datastore.\n\nFor example you could have a config group named \u0027replication\u0027","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"2d2235ac265854fc7ed263d89d2c3ddcf09ad477","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                     \u0027 in the security group (only applicable \u0027"},{"line_number":282,"context_line":"                     \u0027if trove_security_groups_support is True).\u0027),"},{"line_number":283,"context_line":"    cfg.StrOpt(\u0027backup_strategy\u0027, default\u003d\u0027InnoBackupEx\u0027,"},{"line_number":284,"context_line":"               help\u003d\u0027Default strategy to perform backups.\u0027),"},{"line_number":285,"context_line":"    cfg.StrOpt(\u0027replication_strategy\u0027, default\u003d\u0027MysqlBinlogReplication\u0027,"},{"line_number":286,"context_line":"               help\u003d\u0027Default strategy for replication.\u0027),"},{"line_number":287,"context_line":"    cfg.StrOpt(\u0027replication_namespace\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_162dd2a8","line":284,"in_reply_to":"1ae5cdf2_3ff56384","updated":"2014-06-24 14:43:54.000000000","message":"Yep, each datastore would likely require different configs for replication (if they even support it)  but I was thinking you could check one config group outside of each datastore to get these values.\n\nNot a huge deal but something I thought we should think about.","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"f5bb90c4f8eda40e05bb4c2821f9039ac2347869","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                     \u0027 in the security group (only applicable \u0027"},{"line_number":282,"context_line":"                     \u0027if trove_security_groups_support is True).\u0027),"},{"line_number":283,"context_line":"    cfg.StrOpt(\u0027backup_strategy\u0027, default\u003d\u0027InnoBackupEx\u0027,"},{"line_number":284,"context_line":"               help\u003d\u0027Default strategy to perform backups.\u0027),"},{"line_number":285,"context_line":"    cfg.StrOpt(\u0027replication_strategy\u0027, default\u003d\u0027MysqlBinlogReplication\u0027,"},{"line_number":286,"context_line":"               help\u003d\u0027Default strategy for replication.\u0027),"},{"line_number":287,"context_line":"    cfg.StrOpt(\u0027replication_namespace\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_3ff56384","line":284,"in_reply_to":"1ae5cdf2_8f92cefa","updated":"2014-06-23 20:46:08.000000000","message":"Don\u0027t we need this per datastore? The strategy (and related details like user/password) would be different for different datastores in a single deployment.","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"06b8571f912b09a338fd5af680e9efed1a441ba9","unresolved":false,"context_lines":[{"line_number":289,"context_line":"               help\u003d\u0027Namespace to load replication strategies from.\u0027),"},{"line_number":290,"context_line":"    cfg.StrOpt(\u0027replication_user\u0027, default\u003d\u0027slave_user\u0027,"},{"line_number":291,"context_line":"               help\u003d\u0027Userid for replication slave.\u0027),"},{"line_number":292,"context_line":"    cfg.StrOpt(\u0027replication_password\u0027, default\u003d\u0027NETOU7897NNLOU\u0027,"},{"line_number":293,"context_line":"               help\u003d\u0027Password for replication slave user.\u0027),"},{"line_number":294,"context_line":"    cfg.StrOpt(\u0027mount_point\u0027, default\u003d\u0027/var/lib/mysql\u0027,"},{"line_number":295,"context_line":"               help\u003d\"Filesystem path for mounting \""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_eb285d99","line":292,"updated":"2014-06-25 10:32:43.000000000","message":"should be secured by oslo\n\nis_secret\u003dTrue","commit_id":"3650abdef3535ad7c6a15ad6b9d516a31fa1ce59"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"f85d35b42c441b44fd4955dd4d2bcce9552b49a8","unresolved":false,"context_lines":[{"line_number":289,"context_line":"               help\u003d\u0027Namespace to load replication strategies from.\u0027),"},{"line_number":290,"context_line":"    cfg.StrOpt(\u0027replication_user\u0027, default\u003d\u0027slave_user\u0027,"},{"line_number":291,"context_line":"               help\u003d\u0027Userid for replication slave.\u0027),"},{"line_number":292,"context_line":"    cfg.StrOpt(\u0027replication_password\u0027, default\u003d\u0027NETOU7897NNLOU\u0027,"},{"line_number":293,"context_line":"               help\u003d\u0027Password for replication slave user.\u0027),"},{"line_number":294,"context_line":"    cfg.StrOpt(\u0027mount_point\u0027, default\u003d\u0027/var/lib/mysql\u0027,"},{"line_number":295,"context_line":"               help\u003d\"Filesystem path for mounting \""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_cafc72b8","line":292,"in_reply_to":"1ae5cdf2_eb285d99","updated":"2014-06-25 14:40:30.000000000","message":"Agreed on this one.","commit_id":"3650abdef3535ad7c6a15ad6b9d516a31fa1ce59"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":359,"context_line":"                     \u0027if trove_security_groups_support is True).\u0027),"},{"line_number":360,"context_line":"    cfg.StrOpt(\u0027backup_strategy\u0027, default\u003dNone,"},{"line_number":361,"context_line":"               help\u003d\u0027Default strategy to perform backups.\u0027),"},{"line_number":362,"context_line":"    cfg.StrOpt(\u0027replication_namespace\u0027, default\u003dNone,"},{"line_number":363,"context_line":"               help\u003d\u0027Namespace to load replication strategies from.\u0027),"},{"line_number":364,"context_line":"    cfg.StrOpt(\u0027replication_strategy\u0027, default\u003dNone,"},{"line_number":365,"context_line":"               help\u003d\u0027Default strategy for replication.\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_963f7d86","line":362,"updated":"2014-07-15 07:29:24.000000000","message":"I\u0027d suggest to re-think the way replication API will work, for those datastores that doesn\u0027t support replication at all, we need to find a valid way to block attempts to provision replication set.\nIn this case i\u0027d suggest to not to add options to datastore groups that would never support replication. And validation code at API level (something like we did with backup/restore process).","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                     \u0027if trove_security_groups_support is True).\u0027),"},{"line_number":390,"context_line":"    cfg.StrOpt(\u0027backup_strategy\u0027, default\u003dNone,"},{"line_number":391,"context_line":"               help\u003d\u0027Default strategy to perform backups.\u0027),"},{"line_number":392,"context_line":"    cfg.StrOpt(\u0027replication_namespace\u0027, default\u003dNone,"},{"line_number":393,"context_line":"               help\u003d\u0027Namespace to load replication strategies from.\u0027),"},{"line_number":394,"context_line":"    cfg.StrOpt(\u0027replication_strategy\u0027, default\u003dNone,"},{"line_number":395,"context_line":"               help\u003d\u0027Default strategy for replication.\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_16536de2","line":392,"updated":"2014-07-15 07:29:24.000000000","message":"same","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":421,"context_line":"                     \u0027if trove_security_groups_support is True).\u0027),"},{"line_number":422,"context_line":"    cfg.StrOpt(\u0027backup_strategy\u0027, default\u003dNone,"},{"line_number":423,"context_line":"               help\u003d\u0027Default strategy to perform backups.\u0027),"},{"line_number":424,"context_line":"    cfg.StrOpt(\u0027replication_namespace\u0027, default\u003dNone,"},{"line_number":425,"context_line":"               help\u003d\u0027Namespace to load replication strategies from.\u0027),"},{"line_number":426,"context_line":"    cfg.StrOpt(\u0027replication_strategy\u0027, default\u003dNone,"},{"line_number":427,"context_line":"               help\u003d\u0027Default strategy for replication.\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_364eb138","line":424,"updated":"2014-07-15 07:29:24.000000000","message":"same","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"63c5b183368ac1277835158b1821d6c0ad184c40","unresolved":false,"context_lines":[{"line_number":297,"context_line":"               help\u003d\u0027Namespace to load replication strategies from.\u0027),"},{"line_number":298,"context_line":"    cfg.StrOpt(\u0027replication_user\u0027, default\u003d\u0027slave_user\u0027,"},{"line_number":299,"context_line":"               help\u003d\u0027Userid for replication slave.\u0027, secret\u003dTrue),"},{"line_number":300,"context_line":"    cfg.StrOpt(\u0027replication_password\u0027, default\u003d\u0027NETOU7897NNLOU\u0027,"},{"line_number":301,"context_line":"               help\u003d\u0027Password for replication slave user.\u0027, secret\u003dTrue),"},{"line_number":302,"context_line":"    cfg.StrOpt(\u0027mount_point\u0027, default\u003d\u0027/var/lib/mysql\u0027,"},{"line_number":303,"context_line":"               help\u003d\"Filesystem path for mounting \""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_75ce145d","line":300,"updated":"2014-07-23 02:53:07.000000000","message":"no way to randomize this when a server first sets up the repl user? hard coded passwords are always such fun ;)","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"7df92c7f9cd5e3a5420892e7e5e7fc34c61ed4ee","unresolved":false,"context_lines":[{"line_number":297,"context_line":"               help\u003d\u0027Namespace to load replication strategies from.\u0027),"},{"line_number":298,"context_line":"    cfg.StrOpt(\u0027replication_user\u0027, default\u003d\u0027slave_user\u0027,"},{"line_number":299,"context_line":"               help\u003d\u0027Userid for replication slave.\u0027, secret\u003dTrue),"},{"line_number":300,"context_line":"    cfg.StrOpt(\u0027replication_password\u0027, default\u003d\u0027NETOU7897NNLOU\u0027,"},{"line_number":301,"context_line":"               help\u003d\u0027Password for replication slave user.\u0027, secret\u003dTrue),"},{"line_number":302,"context_line":"    cfg.StrOpt(\u0027mount_point\u0027, default\u003d\u0027/var/lib/mysql\u0027,"},{"line_number":303,"context_line":"               help\u003d\"Filesystem path for mounting \""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_40dea6db","line":300,"in_reply_to":"baada198_75ce145d","updated":"2014-07-23 07:02:01.000000000","message":"As i can forsee, there are two valid was to fix it:\n1. Allow user to pass replication password through the API.\n2. Integrate(somehow) Barbican secret delivery.","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"63c5b183368ac1277835158b1821d6c0ad184c40","unresolved":false,"context_lines":[{"line_number":398,"context_line":"               help\u003d\u0027Default strategy for replication.\u0027),"},{"line_number":399,"context_line":"    cfg.StrOpt(\u0027replication_user\u0027, default\u003d\u0027slave_user\u0027,"},{"line_number":400,"context_line":"               help\u003d\u0027Userid for replication slave.\u0027),"},{"line_number":401,"context_line":"    cfg.StrOpt(\u0027replication_password\u0027, default\u003d\u0027NETOU7897NNLOU\u0027,"},{"line_number":402,"context_line":"               help\u003d\u0027Password for replication slave user.\u0027),"},{"line_number":403,"context_line":"    cfg.StrOpt(\u0027mount_point\u0027, default\u003d\u0027/var/lib/cassandra\u0027,"},{"line_number":404,"context_line":"               help\u003d\"Filesystem path for mounting \""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_f501446e","line":401,"updated":"2014-07-23 02:53:07.000000000","message":"esp when there\u0027s no replication strategy, why not initialize these to None?","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"}],"trove/common/exception.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eeebbaeaeb6adcd35895fb1b4e782a390eca94f3","unresolved":false,"context_lines":[{"line_number":432,"context_line":"    message \u003d \u0027Empty catalog\u0027"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"class IncompatibleReplicationStrateg(TroveError):"},{"line_number":436,"context_line":"    message \u003d _(\"The trove instance is configured for replication strategy \""},{"line_number":437,"context_line":"                \"%(guest_strategy), so cannot replicate from a master \""},{"line_number":438,"context_line":"                \"configured with %(replication_strategy) replication\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_c6ccf36c","line":435,"updated":"2014-06-05 22:46:35.000000000","message":"Strategy","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"7aacd976ff4c6e8d3677c48ab731fb0054cc58f9","unresolved":false,"context_lines":[{"line_number":432,"context_line":"    message \u003d \u0027Empty catalog\u0027"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"class IncompatibleReplicationStrateg(TroveError):"},{"line_number":436,"context_line":"    message \u003d _(\"The trove instance is configured for replication strategy \""},{"line_number":437,"context_line":"                \"%(guest_strategy), so cannot replicate from a master \""},{"line_number":438,"context_line":"                \"configured with %(replication_strategy) replication\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_663ee8b9","line":435,"in_reply_to":"1ae5cdf2_c6ccf36c","updated":"2014-06-12 19:49:19.000000000","message":"Done","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"class IncompatibleReplicationStrategy(TroveError):"},{"line_number":451,"context_line":"    message \u003d _(\"The trove instance is configured for replication strategy \""},{"line_number":452,"context_line":"                \"%(guest_strategy), so cannot replicate from a master \""},{"line_number":453,"context_line":"                \"configured with %(replication_strategy) replication\")"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_760ae9d2","line":451,"updated":"2014-07-15 07:29:24.000000000","message":"I\u0027d suggest to avoid use of project names in exception messages, just leave \"Instance is ...\"","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"aca4aacfcab476a7a8505cb9c30b319205a409f4","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"class IncompatibleReplicationStrategy(TroveError):"},{"line_number":451,"context_line":"    message \u003d _(\"The trove instance is configured for replication strategy \""},{"line_number":452,"context_line":"                \"%(guest_strategy), so cannot replicate from a master \""},{"line_number":453,"context_line":"                \"configured with %(replication_strategy) replication\")"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_0a916e46","line":451,"in_reply_to":"baada198_760ae9d2","updated":"2014-07-15 16:44:12.000000000","message":"Done","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cf986f250660a3df0e703632e58413fb5a1f4963","unresolved":false,"context_lines":[{"line_number":450,"context_line":"class IncompatibleReplicationStrategy(TroveError):"},{"line_number":451,"context_line":"    message \u003d _(\"Instance with replication strategy %(guest_strategy) \""},{"line_number":452,"context_line":"                \"cannot replicate from instance with replication strategy \""},{"line_number":453,"context_line":"                \"%(replication_strategy).\")"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"class InsufficientSpaceForSlave(TroveError):"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_01ea30a0","line":453,"updated":"2014-08-05 10:33:33.000000000","message":"%(guest_strategy)s\n\n%(replication_strategy)s","commit_id":"429577ef8255d411ccd71e2d390de77e9846a847"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"fee0ae3852c28374ad40fa5765ce2c148532e86e","unresolved":false,"context_lines":[{"line_number":450,"context_line":"class IncompatibleReplicationStrategy(TroveError):"},{"line_number":451,"context_line":"    message \u003d _(\"Instance with replication strategy %(guest_strategy) \""},{"line_number":452,"context_line":"                \"cannot replicate from instance with replication strategy \""},{"line_number":453,"context_line":"                \"%(replication_strategy).\")"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"class InsufficientSpaceForSlave(TroveError):"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_8ad00d54","line":453,"in_reply_to":"baada198_01ea30a0","updated":"2014-08-06 06:23:17.000000000","message":"Done","commit_id":"429577ef8255d411ccd71e2d390de77e9846a847"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"af10674864fdb4a505d4d5fc706724e47819d469","unresolved":false,"context_lines":[{"line_number":462,"context_line":"class InsufficientSpaceForSlave(TroveError):"},{"line_number":463,"context_line":"    message \u003d _(\"The target instance has only %(slave_volume_size)sG free, \""},{"line_number":464,"context_line":"                \"but the replication snapshot contains %(dataset_size)sG \""},{"line_number":465,"context_line":"                \"of data\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"baada198_478cf580","line":465,"updated":"2014-08-06 21:10:00.000000000","message":"missing period","commit_id":"b68aa8da618e60a0c72732e9851a516c16dc09b5"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"9cd4625b335b48889d79817584c87fb2aaffca08","unresolved":false,"context_lines":[{"line_number":462,"context_line":"class InsufficientSpaceForSlave(TroveError):"},{"line_number":463,"context_line":"    message \u003d _(\"The target instance has only %(slave_volume_size)sG free, \""},{"line_number":464,"context_line":"                \"but the replication snapshot contains %(dataset_size)sG \""},{"line_number":465,"context_line":"                \"of data\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"baada198_dccc36c1","line":465,"in_reply_to":"baada198_478cf580","updated":"2014-08-07 20:09:18.000000000","message":"Done","commit_id":"b68aa8da618e60a0c72732e9851a516c16dc09b5"}],"trove/guestagent/api.py":[{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"344d963a1ab015de555c41937beb0eb39fcc1764","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        self._cast(\"apply_overrides\", overrides\u003doverrides)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def get_replication_snapshot(self, master_config\u003dNone):"},{"line_number":326,"context_line":"        LOG.debug(\"Retrieving replication snapshot from instance %s\", self.id)"},{"line_number":327,"context_line":"        return self._call(\"get_replication_snapshot\", AGENT_HIGH_TIMEOUT,"},{"line_number":328,"context_line":"                          master_config\u003dmaster_config)"},{"line_number":329,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_ca54c400","line":326,"updated":"2014-06-23 20:30:34.000000000","message":"Is this blocking?","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"2d2235ac265854fc7ed263d89d2c3ddcf09ad477","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        self._cast(\"apply_overrides\", overrides\u003doverrides)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def get_replication_snapshot(self, master_config\u003dNone):"},{"line_number":326,"context_line":"        LOG.debug(\"Retrieving replication snapshot from instance %s\", self.id)"},{"line_number":327,"context_line":"        return self._call(\"get_replication_snapshot\", AGENT_HIGH_TIMEOUT,"},{"line_number":328,"context_line":"                          master_config\u003dmaster_config)"},{"line_number":329,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_b9b16fe2","line":326,"in_reply_to":"1ae5cdf2_ca54c400","updated":"2014-06-24 14:43:54.000000000","message":"Morgan says \u0027yes\u0027 this is blocking","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"}],"trove/guestagent/datastore/mysql/manager.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eeebbaeaeb6adcd35895fb1b4e782a390eca94f3","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from trove.guestagent import dbaas"},{"line_number":24,"context_line":"from trove.guestagent import backup"},{"line_number":25,"context_line":"from trove.guestagent import volume"},{"line_number":26,"context_line":"from trove.guestagent.dbaas import get_filesystem_volume_stats"},{"line_number":27,"context_line":"from trove.guestagent.datastore.mysql.service import MySqlAppStatus"},{"line_number":28,"context_line":"from trove.guestagent.datastore.mysql.service import MySqlAdmin"},{"line_number":29,"context_line":"from trove.guestagent.datastore.mysql.service import MySqlApp"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_46e0e3cc","line":26,"updated":"2014-06-05 22:46:35.000000000","message":"No need to add another import, just use dbaas.get_...","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"7aacd976ff4c6e8d3677c48ab731fb0054cc58f9","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from trove.guestagent import dbaas"},{"line_number":24,"context_line":"from trove.guestagent import backup"},{"line_number":25,"context_line":"from trove.guestagent import volume"},{"line_number":26,"context_line":"from trove.guestagent.dbaas import get_filesystem_volume_stats"},{"line_number":27,"context_line":"from trove.guestagent.datastore.mysql.service import MySqlAppStatus"},{"line_number":28,"context_line":"from trove.guestagent.datastore.mysql.service import MySqlAdmin"},{"line_number":29,"context_line":"from trove.guestagent.datastore.mysql.service import MySqlApp"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_49749d67","line":26,"in_reply_to":"1ae5cdf2_46e0e3cc","updated":"2014-06-12 19:49:19.000000000","message":"Done","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eeebbaeaeb6adcd35895fb1b4e782a390eca94f3","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        replication.enable_as_master(app, master_config)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        snapshot_id, log_position \u003d \\"},{"line_number":219,"context_line":"            replication.snapshot_for_replication(app, None, master_config)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        mount_point \u003d CONF.get(MANAGER).mount_point"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_46070382","line":218,"updated":"2014-06-05 22:46:35.000000000","message":"Please don\u0027t use \\ in lines formatting, use ()","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"7aacd976ff4c6e8d3677c48ab731fb0054cc58f9","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        replication.enable_as_master(app, master_config)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        snapshot_id, log_position \u003d \\"},{"line_number":219,"context_line":"            replication.snapshot_for_replication(app, None, master_config)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        mount_point \u003d CONF.get(MANAGER).mount_point"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_e6c118e5","line":218,"in_reply_to":"1ae5cdf2_46070382","updated":"2014-06-12 19:49:19.000000000","message":"Done","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eeebbaeaeb6adcd35895fb1b4e782a390eca94f3","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        mount_point \u003d CONF.get(MANAGER).mount_point"},{"line_number":222,"context_line":"        volume_stats \u003d get_filesystem_volume_stats(mount_point)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        replcation_snapshot \u003d {"},{"line_number":225,"context_line":"            \u0027dataset\u0027: {"},{"line_number":226,"context_line":"                \u0027datastore\u0027: MANAGER,"},{"line_number":227,"context_line":"                \u0027dataset_size\u0027: volume_stats.get(\u0027used\u0027, 0.0),"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_66315f59","line":224,"updated":"2014-06-05 22:46:35.000000000","message":"It looks like replication info, not a snapshot","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eeebbaeaeb6adcd35895fb1b4e782a390eca94f3","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        replcation_snapshot \u003d {"},{"line_number":225,"context_line":"            \u0027dataset\u0027: {"},{"line_number":226,"context_line":"                \u0027datastore\u0027: MANAGER,"},{"line_number":227,"context_line":"                \u0027dataset_size\u0027: volume_stats.get(\u0027used\u0027, 0.0),"},{"line_number":228,"context_line":"                \u0027volume_size\u0027: volume_stats.get(\u0027total\u0027, 0.0),"},{"line_number":229,"context_line":"                \u0027snapshot_id\u0027: snapshot_id"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_c6fa3374","line":226,"updated":"2014-06-05 22:46:35.000000000","message":"\u0027datastore_manager\u0027: ...","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"7aacd976ff4c6e8d3677c48ab731fb0054cc58f9","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        replcation_snapshot \u003d {"},{"line_number":225,"context_line":"            \u0027dataset\u0027: {"},{"line_number":226,"context_line":"                \u0027datastore\u0027: MANAGER,"},{"line_number":227,"context_line":"                \u0027dataset_size\u0027: volume_stats.get(\u0027used\u0027, 0.0),"},{"line_number":228,"context_line":"                \u0027volume_size\u0027: volume_stats.get(\u0027total\u0027, 0.0),"},{"line_number":229,"context_line":"                \u0027snapshot_id\u0027: snapshot_id"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_86d93424","line":226,"in_reply_to":"1ae5cdf2_c6fa3374","updated":"2014-06-12 19:49:19.000000000","message":"Done","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eeebbaeaeb6adcd35895fb1b4e782a390eca94f3","unresolved":false,"context_lines":[{"line_number":267,"context_line":"    def detach_replication_slave(self, context):"},{"line_number":268,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        replication \u003d get_replication_strategy("},{"line_number":271,"context_line":"            CONF.replication_strategy,"},{"line_number":272,"context_line":"            CONF.replication_namespace)(context)"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_c62873e4","line":270,"updated":"2014-06-05 22:46:35.000000000","message":"I\u0027d suggest to make replication object global, since it\u0027s not changing in ranges of one deployment. Or at least re-write is as singleton with lazy initializing","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d68459b7751756d4fc673d04b0f807bede717820","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"MANAGER \u003d \u0027mysql\u0027 if not CONF.datastore_manager else CONF.datastore_manager"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class Manager(periodic_task.PeriodicTasks):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_d2f05269","line":37,"updated":"2014-06-12 20:17:17.000000000","message":"i guess this line is too long, please use () for multiple lines formatting.","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"b0b0b2f682bc03bbe550824f273a8793611b66e9","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"MANAGER \u003d \u0027mysql\u0027 if not CONF.datastore_manager else CONF.datastore_manager"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class Manager(periodic_task.PeriodicTasks):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_5c5b5521","line":37,"in_reply_to":"1ae5cdf2_d2f05269","updated":"2014-06-13 19:14:44.000000000","message":"Seems fine, \u003c 79? \nI did flip it around, which seems marginally clearer.","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"344d963a1ab015de555c41937beb0eb39fcc1764","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"MANAGER \u003d CONF.datastore_manager if CONF.datastore_manager else \u0027mysql\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class Manager(periodic_task.PeriodicTasks):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_6a8ad065","line":37,"updated":"2014-06-23 20:30:34.000000000","message":"Since we are already using the mysql manager can we assume this value to be mysql?\n\nMANGER \u003d \u0027mysql\u0027","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"f5bb90c4f8eda40e05bb4c2821f9039ac2347869","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"MANAGER \u003d CONF.datastore_manager if CONF.datastore_manager else \u0027mysql\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class Manager(periodic_task.PeriodicTasks):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_7f7e0bb1","line":37,"in_reply_to":"1ae5cdf2_6a8ad065","updated":"2014-06-23 20:46:08.000000000","message":"I think this could be e.g. \u0027percona\u0027 as well.","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"2d2235ac265854fc7ed263d89d2c3ddcf09ad477","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"MANAGER \u003d CONF.datastore_manager if CONF.datastore_manager else \u0027mysql\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class Manager(periodic_task.PeriodicTasks):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_99dbd34e","line":37,"in_reply_to":"1ae5cdf2_7f7e0bb1","updated":"2014-06-24 14:43:54.000000000","message":"Gotcha","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"3552d8e36e93f1b2aa60a99e0b9ebf4a6b1a3e2e","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"MANAGER \u003d CONF.datastore_manager if CONF.datastore_manager else \u0027mysql\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class Manager(periodic_task.PeriodicTasks):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_6724a2b2","line":37,"in_reply_to":"1ae5cdf2_99dbd34e","updated":"2014-06-24 15:08:39.000000000","message":"You could use mysql directly since percona points to mysql manager as well","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"#"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"from trove.common import cfg"},{"line_number":21,"context_line":"from trove.common import exception"},{"line_number":22,"context_line":"from trove.common import instance as rd_instance"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_56b885c7","line":19,"updated":"2014-07-15 07:29:24.000000000","message":"Please reduce code duplication.","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"aca4aacfcab476a7a8505cb9c30b319205a409f4","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"#"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"from trove.common import cfg"},{"line_number":21,"context_line":"from trove.common import exception"},{"line_number":22,"context_line":"from trove.common import instance as rd_instance"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_2a947235","line":19,"in_reply_to":"baada198_56b885c7","updated":"2014-07-15 16:44:12.000000000","message":"Done","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        snapshot_id, log_position \u003d ("},{"line_number":218,"context_line":"            replication.snapshot_for_replication(app, None, master_config))"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        mount_point \u003d CONF.get(MANAGER).mount_point"},{"line_number":221,"context_line":"        volume_stats \u003d dbaas.get_filesystem_volume_stats(mount_point)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        replication_snapshot \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_f6ca796c","line":220,"updated":"2014-07-15 07:29:24.000000000","message":"you can directly call CONF.mysql.mount_point, no need to use .get","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"aca4aacfcab476a7a8505cb9c30b319205a409f4","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        snapshot_id, log_position \u003d ("},{"line_number":218,"context_line":"            replication.snapshot_for_replication(app, None, master_config))"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        mount_point \u003d CONF.get(MANAGER).mount_point"},{"line_number":221,"context_line":"        volume_stats \u003d dbaas.get_filesystem_volume_stats(mount_point)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        replication_snapshot \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_cf7ea8ae","line":220,"in_reply_to":"baada198_f6ca796c","updated":"2014-07-15 16:44:12.000000000","message":"The manager could be something like \u0027percona\u0027, right? We don\u0027t assume \u0027mysql\u0027 above where MANAGER is set.","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                \u0027volume_size\u0027: volume_stats.get(\u0027total\u0027, 0.0),"},{"line_number":228,"context_line":"                \u0027snapshot_id\u0027: snapshot_id"},{"line_number":229,"context_line":"            },"},{"line_number":230,"context_line":"            \u0027replication_strategy\u0027: CONF.get(MANAGER).replication_strategy,"},{"line_number":231,"context_line":"            \u0027master\u0027: replication.get_master_ref(master_config),"},{"line_number":232,"context_line":"            \u0027log_position\u0027: log_position"},{"line_number":233,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_b6ac81a0","line":230,"updated":"2014-07-15 07:29:24.000000000","message":"same here, you\u0027re working inside mysql manager, so it would never be something else","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def _validate_slave_for_replication(self, context, snapshot):"},{"line_number":238,"context_line":"        if (snapshot[\u0027replication_strategy\u0027] !\u003d"},{"line_number":239,"context_line":"                CONF.get(MANAGER).replication_strategy):"},{"line_number":240,"context_line":"            raise exception.IncompatibleReplicationStrategy("},{"line_number":241,"context_line":"                snapshot.update({"},{"line_number":242,"context_line":"                    \u0027guest_strategy\u0027: CONF.get(MANAGER).replication_strategy"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_d696554b","line":239,"updated":"2014-07-15 07:29:24.000000000","message":"same","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                CONF.get(MANAGER).replication_strategy):"},{"line_number":240,"context_line":"            raise exception.IncompatibleReplicationStrategy("},{"line_number":241,"context_line":"                snapshot.update({"},{"line_number":242,"context_line":"                    \u0027guest_strategy\u0027: CONF.get(MANAGER).replication_strategy"},{"line_number":243,"context_line":"                }))"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        mount_point \u003d CONF.get(MANAGER).mount_point"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_f6919952","line":242,"updated":"2014-07-15 07:29:24.000000000","message":"same\n\nand even more, you can define replication strategy as global variable to reduce __getattr__ calls","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                    \u0027guest_strategy\u0027: CONF.get(MANAGER).replication_strategy"},{"line_number":243,"context_line":"                }))"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        mount_point \u003d CONF.get(MANAGER).mount_point"},{"line_number":246,"context_line":"        volume_stats \u003d dbaas.get_filesystem_volume_stats(mount_point)"},{"line_number":247,"context_line":"        if (volume_stats.get(\u0027total\u0027, 0.0) \u003c"},{"line_number":248,"context_line":"                snapshot[\u0027dataset\u0027][\u0027dataset_size\u0027]):"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_f678b92c","line":245,"updated":"2014-07-15 07:29:24.000000000","message":"same","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        self._validate_slave_for_replication(context, snapshot)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        replication \u003d get_replication_strategy("},{"line_number":260,"context_line":"            CONF.get(MANAGER).replication_strategy,"},{"line_number":261,"context_line":"            CONF.get(MANAGER).replication_namespace)(context)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_96977d39","line":258,"updated":"2014-07-15 07:29:24.000000000","message":"strategy should be defined as global variable","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"aca4aacfcab476a7a8505cb9c30b319205a409f4","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        self._validate_slave_for_replication(context, snapshot)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        replication \u003d get_replication_strategy("},{"line_number":260,"context_line":"            CONF.get(MANAGER).replication_strategy,"},{"line_number":261,"context_line":"            CONF.get(MANAGER).replication_namespace)(context)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_0a8a4e1a","line":258,"in_reply_to":"baada198_96977d39","updated":"2014-07-15 16:44:12.000000000","message":"Done","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    def detach_replication_slave(self, context):"},{"line_number":266,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        replication \u003d get_replication_strategy("},{"line_number":269,"context_line":"            CONF.get(MANAGER).replication_strategy,"},{"line_number":270,"context_line":"            CONF.get(MANAGER).replication_namespace)(context)"},{"line_number":271,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_b69ac15f","line":268,"updated":"2014-07-15 07:29:24.000000000","message":"same","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    def demote_replication_master(self, context):"},{"line_number":275,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        replication \u003d get_replication_strategy("},{"line_number":278,"context_line":"            CONF.get(MANAGER).replication_strategy,"},{"line_number":279,"context_line":"            CONF.get(MANAGER).replication_namespace)(context)"},{"line_number":280,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_d6a495a7","line":277,"updated":"2014-07-15 07:29:24.000000000","message":"same","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"12e11a48fa896a493e6a76c7083f0f91c70f2ecb","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"MANAGER \u003d CONF.datastore_manager if CONF.datastore_manager else \u0027mysql\u0027"},{"line_number":38,"context_line":"REPLICATION_STRATEGY \u003d CONF.get(MANAGER).replication_strategy"},{"line_number":39,"context_line":"REPLICATION_NAMESPACE \u003d CONF.get(MANAGER).replication_namespace"},{"line_number":40,"context_line":"REPLICATION_STRATEGY_CLASS \u003d get_replication_strategy(REPLICATION_STRATEGY,"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_e45a031d","line":37,"updated":"2014-07-19 19:18:02.000000000","message":"since we have multiple data stores, should we be extracting the datastore manager from the datastore_version table?","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"0815d22e99777877a675be35f2e2af2fa7115b88","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":"MANAGER \u003d CONF.datastore_manager if CONF.datastore_manager else \u0027mysql\u0027"},{"line_number":38,"context_line":"REPLICATION_STRATEGY \u003d CONF.get(MANAGER).replication_strategy"},{"line_number":39,"context_line":"REPLICATION_NAMESPACE \u003d CONF.get(MANAGER).replication_namespace"},{"line_number":40,"context_line":"REPLICATION_STRATEGY_CLASS \u003d get_replication_strategy(REPLICATION_STRATEGY,"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_dfb4e837","line":37,"in_reply_to":"baada198_e45a031d","updated":"2014-07-19 21:12:41.000000000","message":"A guest instance will have one datastore_manager, passed to the instance via the guest_info conf file that gets injected at boot by the taskmanager. \n\nThat mechanism was in place already, so changing it is probably beyond the scope of this patch set.","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"b6f93e58432c9764a501faa4af46d1fbf5223375","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":211,"context_line":"        app.apply_overrides(overrides)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def get_replication_snapshot(self, context, master_config):"},{"line_number":214,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        replication \u003d REPLICATION_STRATEGY_CLASS(context)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_95cecf59","line":213,"updated":"2014-08-01 21:47:16.000000000","message":"I dont see us passing in context anywhere to this function. Where might that be?","commit_id":"0dcf2f4984a0a07dabacac0d38991d1696b744c5"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"09761e5d236887d39dcef0340f260312b017307b","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":211,"context_line":"        app.apply_overrides(overrides)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def get_replication_snapshot(self, context, master_config):"},{"line_number":214,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        replication \u003d REPLICATION_STRATEGY_CLASS(context)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_52db38e9","line":213,"in_reply_to":"baada198_4e063a22","updated":"2014-08-04 15:45:45.000000000","message":"so i think this has to do with sending master_config as a dict and hence this fn expects it to be kwargs","commit_id":"0dcf2f4984a0a07dabacac0d38991d1696b744c5"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"8869b1cbd81e95a2fa69232be7ade915d4b99d70","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":211,"context_line":"        app.apply_overrides(overrides)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def get_replication_snapshot(self, context, master_config):"},{"line_number":214,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        replication \u003d REPLICATION_STRATEGY_CLASS(context)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_75a026a5","line":213,"in_reply_to":"baada198_52db38e9","updated":"2014-08-04 16:01:31.000000000","message":"Iccha - How did you get this trace? \n\nThe actual replication snapshot support is implemented and tested in the dependent patch set https://review.openstack.org/#/c/109687/  (although this particular method is the same I think). I\u0027m re-testing on that patch set to see if I get this.\n\nIn terms of passing a dict (and the handling of context), are we doing anything here that is different then the apply_overrides method above?","commit_id":"0dcf2f4984a0a07dabacac0d38991d1696b744c5"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"b5f570c4f53c674b56dcd43cad562398b02f4240","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":211,"context_line":"        app.apply_overrides(overrides)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def get_replication_snapshot(self, context, master_config):"},{"line_number":214,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        replication \u003d REPLICATION_STRATEGY_CLASS(context)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_9b288b86","line":213,"in_reply_to":"baada198_75a026a5","updated":"2014-08-04 16:42:19.000000000","message":"I got it from guest agent log.","commit_id":"0dcf2f4984a0a07dabacac0d38991d1696b744c5"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"b525bcdc1aa825eb409fdc7eb208c87acc52fcfa","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":211,"context_line":"        app.apply_overrides(overrides)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def get_replication_snapshot(self, context, master_config):"},{"line_number":214,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        replication \u003d REPLICATION_STRATEGY_CLASS(context)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_4e063a22","line":213,"in_reply_to":"baada198_95cecf59","updated":"2014-08-04 14:43:49.000000000","message":"Logs: 2014-08-01 21:42:09.772 3111 TRACE trove.openstack.common.rpc.amqp Traceback (most recent call last):\n2014-08-01 21:42:09.772 3111 TRACE trove.openstack.common.rpc.amqp   File \"/usr/share/python/trove/lib/python2.7/site-packages/trove/openstack/common/rpc/amqp.py\", line 440, in _process_data\n2014-08-01 21:42:09.772 3111 TRACE trove.openstack.common.rpc.amqp     **args)\n2014-08-01 21:42:09.772 3111 TRACE trove.openstack.common.rpc.amqp   File \"/usr/share/python/trove/lib/python2.7/site-packages/trove/openstack/common/rpc/dispatcher.py\", line 172, in dispatch\n2014-08-01 21:42:09.772 3111 TRACE trove.openstack.common.rpc.amqp     result \u003d getattr(proxyobj, method)(ctxt, **kwargs)\n2014-08-01 21:42:09.772 3111 TRACE trove.openstack.common.rpc.amqp TypeError: get_replication_snapshot() got multiple values for keyword argument \u0027master_config\u0027","commit_id":"0dcf2f4984a0a07dabacac0d38991d1696b744c5"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"8fe66a7e96363193de29c7240f203eca1c9bb47a","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        app.apply_overrides(overrides)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def get_replication_snapshot(self, context, master_config):"},{"line_number":217,"context_line":"        LOG.debug(\"Getting replication snapshot.\")"},{"line_number":218,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        replication \u003d REPLICATION_STRATEGY_CLASS(context)"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_1a020009","line":217,"updated":"2014-08-08 21:15:13.000000000","message":"add in more details which instance is the snapshot for?","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"76b5737b32441b88fb9ef85a7d43f5ee12cce224","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        app.apply_overrides(overrides)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def get_replication_snapshot(self, context, master_config):"},{"line_number":217,"context_line":"        LOG.debug(\"Getting replication snapshot.\")"},{"line_number":218,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        replication \u003d REPLICATION_STRATEGY_CLASS(context)"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_a529cc9d","line":217,"in_reply_to":"baada198_1a020009","updated":"2014-08-11 14:30:07.000000000","message":"This executes in the guestagent and so can only be for one instance.  I believe this message will appear in the guestagent log (i.e., /tmp/logfile.txt on the guest instance)","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"ced0929547ca295eef3fcf43a5fcb62a995cf974","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        app.apply_overrides(overrides)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def get_replication_snapshot(self, context, master_config):"},{"line_number":217,"context_line":"        LOG.debug(\"Getting replication snapshot.\")"},{"line_number":218,"context_line":"        app \u003d MySqlApp(MySqlAppStatus.get())"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        replication \u003d REPLICATION_STRATEGY_CLASS(context)"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_6d231abe","line":217,"in_reply_to":"baada198_a529cc9d","updated":"2014-08-11 15:37:24.000000000","message":"good point.","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"ca2dfccedc37f55b1f2255c0aadea922b376bedd","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        mount_point \u003d CONF.get(MANAGER).mount_point"},{"line_number":251,"context_line":"        volume_stats \u003d dbaas.get_filesystem_volume_stats(mount_point)"},{"line_number":252,"context_line":"        if (volume_stats.get(\u0027total\u0027, 0.0) \u003c"},{"line_number":253,"context_line":"                snapshot[\u0027dataset\u0027][\u0027dataset_size\u0027]):"},{"line_number":254,"context_line":"            raise exception.InsufficientSpaceForSlave("},{"line_number":255,"context_line":"                snapshot.update({"},{"line_number":256,"context_line":"                    \u0027slave_volume_size\u0027: volume_stats.get(\u0027total\u0027, 0.0)"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_2614df9d","line":253,"updated":"2014-08-11 16:29:36.000000000","message":"instead of the datasize of do we just want to use the volume size? because the user excepts the data to grow on the master atleast to that volume size?\n\nAlso we would want to do this check before we snapshot the master so we can detect early failures.","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"}],"trove/guestagent/datastore/mysql/service.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d68459b7751756d4fc673d04b0f807bede717820","unresolved":false,"context_lines":[{"line_number":48,"context_line":"MYSQL_BASE_DIR \u003d \"/var/lib/mysql\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"},{"line_number":51,"context_line":"MANAGER \u003d \u0027mysql\u0027 if not CONF.datastore_manager else CONF.datastore_manager"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"INCLUDE_MARKER_OPERATORS \u003d {"},{"line_number":54,"context_line":"    True: \"\u003e\u003d\","}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_32b89674","line":51,"updated":"2014-06-12 20:17:17.000000000","message":"i\u0027d suggest to ask for this attribute directly from manager.py","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d68459b7751756d4fc673d04b0f807bede717820","unresolved":false,"context_lines":[{"line_number":873,"context_line":"    def change_master_for_binlog(self, host, log_position):"},{"line_number":874,"context_line":"        LOG.info(_(\"Configuring replication from %(host)s\") % host)"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"        change_master_cmd \u003d \"CHANGE MASTER TO MASTER_HOST\u003d\u0027%(host)s\u0027, \" \\"},{"line_number":877,"context_line":"                            \"MASTER_USER\u003d\u0027%(user)s\u0027, \" \\"},{"line_number":878,"context_line":"                            \"MASTER_PASSWORD\u003d\u0027%(password)s\u0027, \" \\"},{"line_number":879,"context_line":"                            \"MASTER_LOG_FILE\u003d\u0027%(log_file)s\u0027, \" \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_b27ae6b7","line":876,"updated":"2014-06-12 20:17:17.000000000","message":"please do not use \\ fro stings formatting, use ()","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"b0b0b2f682bc03bbe550824f273a8793611b66e9","unresolved":false,"context_lines":[{"line_number":873,"context_line":"    def change_master_for_binlog(self, host, log_position):"},{"line_number":874,"context_line":"        LOG.info(_(\"Configuring replication from %(host)s\") % host)"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"        change_master_cmd \u003d \"CHANGE MASTER TO MASTER_HOST\u003d\u0027%(host)s\u0027, \" \\"},{"line_number":877,"context_line":"                            \"MASTER_USER\u003d\u0027%(user)s\u0027, \" \\"},{"line_number":878,"context_line":"                            \"MASTER_PASSWORD\u003d\u0027%(password)s\u0027, \" \\"},{"line_number":879,"context_line":"                            \"MASTER_LOG_FILE\u003d\u0027%(log_file)s\u0027, \" \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_7c7bb1f4","line":876,"in_reply_to":"1ae5cdf2_b27ae6b7","updated":"2014-06-13 19:14:44.000000000","message":"Done","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d68459b7751756d4fc673d04b0f807bede717820","unresolved":false,"context_lines":[{"line_number":889,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":890,"context_line":"            client.execute(change_master_cmd)"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    def start_slave(self):"},{"line_number":893,"context_line":"        LOG.info(_(\"Starting slave replication\"))"},{"line_number":894,"context_line":""},{"line_number":895,"context_line":"        with LocalSqlClient(get_engine()) as client:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_5d4d333d","line":892,"updated":"2014-06-12 20:17:17.000000000","message":"i wonder if we can have *SQL connection object as a singleton to avoid use of multiple connection threads within one runnin guestagent","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"344d963a1ab015de555c41937beb0eb39fcc1764","unresolved":false,"context_lines":[{"line_number":49,"context_line":"MYSQL_BASE_DIR \u003d \"/var/lib/mysql\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"CONF \u003d cfg.CONF"},{"line_number":52,"context_line":"MANAGER \u003d CONF.datastore_manager if CONF.datastore_manager else \u0027mysql\u0027"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"INCLUDE_MARKER_OPERATORS \u003d {"},{"line_number":55,"context_line":"    True: \"\u003e\u003d\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_2ac8c874","line":52,"updated":"2014-06-23 20:30:34.000000000","message":"I\u0027m wondering if we can assume MANAGER \u003d \u0027mysql\u0027 here as well","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":6162,"name":"Dan Nguyen","email":"dan.nguyens.mail@gmail.com","username":"daniel-a-nguyen"},"change_message_id":"2d2235ac265854fc7ed263d89d2c3ddcf09ad477","unresolved":false,"context_lines":[{"line_number":49,"context_line":"MYSQL_BASE_DIR \u003d \"/var/lib/mysql\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"CONF \u003d cfg.CONF"},{"line_number":52,"context_line":"MANAGER \u003d CONF.datastore_manager if CONF.datastore_manager else \u0027mysql\u0027"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"INCLUDE_MARKER_OPERATORS \u003d {"},{"line_number":55,"context_line":"    True: \"\u003e\u003d\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_b9832f02","line":52,"in_reply_to":"1ae5cdf2_2ac8c874","updated":"2014-06-24 14:43:54.000000000","message":"Greg pointed out we could have a mysql variant (percona, etc)","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"3552d8e36e93f1b2aa60a99e0b9ebf4a6b1a3e2e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"MYSQL_BASE_DIR \u003d \"/var/lib/mysql\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"CONF \u003d cfg.CONF"},{"line_number":52,"context_line":"MANAGER \u003d CONF.datastore_manager if CONF.datastore_manager else \u0027mysql\u0027"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"INCLUDE_MARKER_OPERATORS \u003d {"},{"line_number":55,"context_line":"    True: \"\u003e\u003d\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_dc22a9b9","line":52,"in_reply_to":"1ae5cdf2_b9832f02","updated":"2014-06-24 15:08:39.000000000","message":"Percona points to mysql manager as well, so here we can use mysql","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"3552d8e36e93f1b2aa60a99e0b9ebf4a6b1a3e2e","unresolved":false,"context_lines":[{"line_number":891,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":892,"context_line":"            client.execute(change_master_cmd)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"    def start_slave(self):"},{"line_number":895,"context_line":"        LOG.info(_(\"Starting slave replication\"))"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"        with LocalSqlClient(get_engine()) as client:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_dc09c933","line":894,"updated":"2014-06-24 15:08:39.000000000","message":"re-iterating from previous patchsets, please address concerns from patchset 2","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"34d2c6a340350a5645c0e6f6c59ec48bff40ca06","unresolved":false,"context_lines":[{"line_number":891,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":892,"context_line":"            client.execute(change_master_cmd)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"    def start_slave(self):"},{"line_number":895,"context_line":"        LOG.info(_(\"Starting slave replication\"))"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"        with LocalSqlClient(get_engine()) as client:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_c813c363","line":894,"in_reply_to":"1ae5cdf2_dc09c933","updated":"2014-06-24 18:15:57.000000000","message":"Uhh, yeah, wouldn\u0027t that be rather out of scope for this patch?","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":37,"context_line":"from trove.openstack.common import log as logging"},{"line_number":38,"context_line":"from trove.openstack.common.gettextutils import _"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"ADMIN_USER_NAME \u003d \"os_admin\""},{"line_number":42,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":43,"context_line":"FLUSH \u003d text(sql_query.FLUSH)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_96ae9d7f","line":40,"updated":"2014-07-15 07:29:24.000000000","message":"please remove it","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"aca4aacfcab476a7a8505cb9c30b319205a409f4","unresolved":false,"context_lines":[{"line_number":37,"context_line":"from trove.openstack.common import log as logging"},{"line_number":38,"context_line":"from trove.openstack.common.gettextutils import _"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"ADMIN_USER_NAME \u003d \"os_admin\""},{"line_number":42,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":43,"context_line":"FLUSH \u003d text(sql_query.FLUSH)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_6ad2ead1","line":40,"in_reply_to":"baada198_96ae9d7f","updated":"2014-07-15 16:44:12.000000000","message":"What, the blank line? Done.","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":844,"context_line":""},{"line_number":845,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":846,"context_line":"            g \u003d sql_query.Grant(permissions\u003d[\u0027REPLICATION SLAVE\u0027],"},{"line_number":847,"context_line":"                                user\u003dCONF.get(MANAGER).replication_user,"},{"line_number":848,"context_line":"                                clear\u003dCONF.get(MANAGER).replication_password)"},{"line_number":849,"context_line":""},{"line_number":850,"context_line":"            t \u003d text(str(g))"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_16c28d33","line":847,"updated":"2014-07-15 07:29:24.000000000","message":"same, no need to call .get, since you\u0027re working inside mysql impl.","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"aca4aacfcab476a7a8505cb9c30b319205a409f4","unresolved":false,"context_lines":[{"line_number":844,"context_line":""},{"line_number":845,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":846,"context_line":"            g \u003d sql_query.Grant(permissions\u003d[\u0027REPLICATION SLAVE\u0027],"},{"line_number":847,"context_line":"                                user\u003dCONF.get(MANAGER).replication_user,"},{"line_number":848,"context_line":"                                clear\u003dCONF.get(MANAGER).replication_password)"},{"line_number":849,"context_line":""},{"line_number":850,"context_line":"            t \u003d text(str(g))"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_dbee67ed","line":847,"in_reply_to":"baada198_16c28d33","updated":"2014-07-15 16:44:12.000000000","message":"As elsewhere: MANAGER is not necessarily \u0027mysql\u0027.","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":855,"context_line":""},{"line_number":856,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":857,"context_line":"            g \u003d sql_query.Revoke(permissions\u003d[\u0027REPLICATION SLAVE\u0027],"},{"line_number":858,"context_line":"                                 user\u003dCONF.get(MANAGER).replication_user,"},{"line_number":859,"context_line":"                                 clear\u003dCONF.get(MANAGER).replication_password)"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"            t \u003d text(str(g))"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_36bdd1b1","line":858,"updated":"2014-07-15 07:29:24.000000000","message":"same","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":863,"context_line":""},{"line_number":864,"context_line":"    def get_binlog_position(self):"},{"line_number":865,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":866,"context_line":"            result \u003d client.execute(\u0027SHOW MASTER STATUS\u0027).fetchall()"},{"line_number":867,"context_line":"            status \u003d result[0]"},{"line_number":868,"context_line":"            binlog_position \u003d {"},{"line_number":869,"context_line":"                \u0027log_file\u0027: status[\u0027File\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_d6d2d5fe","line":866,"updated":"2014-07-15 07:29:24.000000000","message":"you can simplify it.\n\nstatus, _something_else \u003d client.execute(\u0027SHOW MASTER STATUS\u0027).fetchall()\n\nand then you don\u0027t have to do explicit unpacking.","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":881,"context_line":"                             \"MASTER_LOG_POS\u003d%(log_pos)s\" %"},{"line_number":882,"context_line":"                             {"},{"line_number":883,"context_line":"                                 \u0027host\u0027: host,"},{"line_number":884,"context_line":"                                 \u0027user\u0027: CONF.get(MANAGER).replication_user,"},{"line_number":885,"context_line":"                                 \u0027password\u0027: CONF.get("},{"line_number":886,"context_line":"                                     MANAGER).replication_password,"},{"line_number":887,"context_line":"                                 \u0027log_file\u0027: log_position[\u0027log_file\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_16f0cd8f","line":884,"updated":"2014-07-15 07:29:24.000000000","message":"same","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":883,"context_line":"                                 \u0027host\u0027: host,"},{"line_number":884,"context_line":"                                 \u0027user\u0027: CONF.get(MANAGER).replication_user,"},{"line_number":885,"context_line":"                                 \u0027password\u0027: CONF.get("},{"line_number":886,"context_line":"                                     MANAGER).replication_password,"},{"line_number":887,"context_line":"                                 \u0027log_file\u0027: log_position[\u0027log_file\u0027],"},{"line_number":888,"context_line":"                                 \u0027log_pos\u0027: log_position[\u0027position\u0027]"},{"line_number":889,"context_line":"                             })"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_36eb11a5","line":886,"updated":"2014-07-15 07:29:24.000000000","message":"same","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":893,"context_line":""},{"line_number":894,"context_line":"    def start_slave(self):"},{"line_number":895,"context_line":"        LOG.info(_(\"Starting slave replication\"))"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":898,"context_line":"            client.execute(\u0027START SLAVE\u0027)"},{"line_number":899,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_f63b5935","line":896,"updated":"2014-07-15 07:29:24.000000000","message":"shouldn\u0027t we check if slave started successfuly?","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":898,"context_line":"            client.execute(\u0027START SLAVE\u0027)"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"    def stop_slave(self):"},{"line_number":901,"context_line":"        LOG.info(_(\"Stopping slave replication\"))"},{"line_number":902,"context_line":""},{"line_number":903,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":904,"context_line":"            client.execute(\u0027STOP SLAVE\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_1647edbc","line":901,"updated":"2014-07-15 07:29:24.000000000","message":"shouldn\u0027t we check if slave stoped successfuly?","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"7a9c9f02a5ad81815ed89a17ea55037ea3e36318","unresolved":false,"context_lines":[{"line_number":864,"context_line":""},{"line_number":865,"context_line":"    def get_binlog_position(self):"},{"line_number":866,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":867,"context_line":"            result \u003d client.execute(\u0027SHOW MASTER STATUS\u0027).fetchall()"},{"line_number":868,"context_line":"            status \u003d result[0]"},{"line_number":869,"context_line":"            binlog_position \u003d {"},{"line_number":870,"context_line":"                \u0027log_file\u0027: status[\u0027File\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_12a51c47","line":867,"updated":"2014-07-15 18:37:04.000000000","message":"please reduce amount of LOC by unpacking status and querry result at this line.\n\nstatus, result \u003d client.execute(\u0027SHOW MASTER STATUS\u0027).fetchall()","commit_id":"0e26eda53794ff09a84c306371dd6e11d19e1052"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"70c3980b91bf4b598ebca9cf86c2531465790691","unresolved":false,"context_lines":[{"line_number":864,"context_line":""},{"line_number":865,"context_line":"    def get_binlog_position(self):"},{"line_number":866,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":867,"context_line":"            result \u003d client.execute(\u0027SHOW MASTER STATUS\u0027).fetchall()"},{"line_number":868,"context_line":"            status \u003d result[0]"},{"line_number":869,"context_line":"            binlog_position \u003d {"},{"line_number":870,"context_line":"                \u0027log_file\u0027: status[\u0027File\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_49e7e646","line":867,"in_reply_to":"baada198_12a51c47","updated":"2014-07-15 23:17:09.000000000","message":"This isn\u0027t related to unpacking. client.execute returns an iterable corresponding to the number of rows returned by the SQL query. \n\nIn this case, SHOW MASTER STATUS is guaranteed to return only one row as the query result.","commit_id":"0e26eda53794ff09a84c306371dd6e11d19e1052"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"7a9c9f02a5ad81815ed89a17ea55037ea3e36318","unresolved":false,"context_lines":[{"line_number":894,"context_line":"    def start_slave(self):"},{"line_number":895,"context_line":"        LOG.info(_(\"Starting slave replication\"))"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":898,"context_line":"            client.execute(\u0027START SLAVE\u0027)"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"    def stop_slave(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_d283a4a7","line":897,"updated":"2014-07-15 18:37:04.000000000","message":"i\u0027d like to see verifications that slave was started successfuly.","commit_id":"0e26eda53794ff09a84c306371dd6e11d19e1052"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"7a9c9f02a5ad81815ed89a17ea55037ea3e36318","unresolved":false,"context_lines":[{"line_number":900,"context_line":"    def stop_slave(self):"},{"line_number":901,"context_line":"        LOG.info(_(\"Stopping slave replication\"))"},{"line_number":902,"context_line":""},{"line_number":903,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":904,"context_line":"            client.execute(\u0027STOP SLAVE\u0027)"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"    def start_mysql(self, update_db\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_128efcd0","line":903,"updated":"2014-07-15 18:37:04.000000000","message":"same here","commit_id":"0e26eda53794ff09a84c306371dd6e11d19e1052"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"12e11a48fa896a493e6a76c7083f0f91c70f2ecb","unresolved":false,"context_lines":[{"line_number":48,"context_line":"MYSQL_BASE_DIR \u003d \"/var/lib/mysql\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"},{"line_number":51,"context_line":"MANAGER \u003d CONF.datastore_manager if CONF.datastore_manager else \u0027mysql\u0027"},{"line_number":52,"context_line":"REPLICATION_USER \u003d CONF.get(MANAGER).replication_user"},{"line_number":53,"context_line":"REPLICATION_PASSWORD \u003d CONF.get(MANAGER).replication_password"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_24a07bf3","line":51,"updated":"2014-07-19 19:18:02.000000000","message":"same question here","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"c0431fbcc8b50d411de3b8d3b883df7b07301d6c","unresolved":false,"context_lines":[{"line_number":895,"context_line":"        LOG.info(_(\"Starting slave replication\"))"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":898,"context_line":"            client.execute(\u0027START SLAVE\u0027)"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"    def stop_slave(self):"},{"line_number":901,"context_line":"        LOG.info(_(\"Stopping slave replication\"))"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_b9605036","line":898,"updated":"2014-07-18 14:32:01.000000000","message":"I would not suggest to leave it as is.\n\nWe _have_ (!!) to verify that slave was started.\nAccording to MySQL docs \nhttp://dev.mysql.com/doc/refman/5.7/en/show-slave-status.html\n\n we hould use \n\n\"SHOW SLAVE STATUS\\G\"\n\nand verify that slave was started\n\n             Slave_IO_Running: Yes\n            Slave_SQL_Running: Yes\n\n\nWithout it we actualy don\u0027t know for sure if slave started or not.\n\nSo, please address given points because this code hides potential bug.","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"c0431fbcc8b50d411de3b8d3b883df7b07301d6c","unresolved":false,"context_lines":[{"line_number":897,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":898,"context_line":"            client.execute(\u0027START SLAVE\u0027)"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"    def stop_slave(self):"},{"line_number":901,"context_line":"        LOG.info(_(\"Stopping slave replication\"))"},{"line_number":902,"context_line":""},{"line_number":903,"context_line":"        with LocalSqlClient(get_engine()) as client:"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_99a38c42","line":900,"updated":"2014-07-18 14:32:01.000000000","message":"Same here, you _have_ to verify that slave was stopped.","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"35b00f55130a694553f75f97e4f361b8f9d98568","unresolved":false,"context_lines":[{"line_number":895,"context_line":"        LOG.info(_(\"Starting slave replication\"))"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":898,"context_line":"            client.execute(\u0027START SLAVE\u0027)"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"    def stop_slave(self):"},{"line_number":901,"context_line":"        LOG.info(_(\"Stopping slave replication\"))"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_ce9aa712","line":898,"updated":"2014-07-24 15:03:43.000000000","message":"Missing slave deployment verification. We must verify that slave started properly. See comments to patchset #11.","commit_id":"beee7c4118d7f1bada1e47279992f44bf5ceb0c9"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"46a532431886c8024286980e1fddd109dcab1f70","unresolved":false,"context_lines":[{"line_number":895,"context_line":"        LOG.info(_(\"Starting slave replication\"))"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":898,"context_line":"            client.execute(\u0027START SLAVE\u0027)"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"    def stop_slave(self):"},{"line_number":901,"context_line":"        LOG.info(_(\"Stopping slave replication\"))"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_9b9cc872","line":898,"in_reply_to":"baada198_ce9aa712","updated":"2014-08-06 06:25:27.000000000","message":"Done","commit_id":"beee7c4118d7f1bada1e47279992f44bf5ceb0c9"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"35b00f55130a694553f75f97e4f361b8f9d98568","unresolved":false,"context_lines":[{"line_number":900,"context_line":"    def stop_slave(self):"},{"line_number":901,"context_line":"        LOG.info(_(\"Stopping slave replication\"))"},{"line_number":902,"context_line":""},{"line_number":903,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":904,"context_line":"            client.execute(\u0027STOP SLAVE\u0027)"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"    def start_mysql(self, update_db\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_ceb1c792","line":903,"updated":"2014-07-24 15:03:43.000000000","message":"Same here, we have to verify that slave was stopped.","commit_id":"beee7c4118d7f1bada1e47279992f44bf5ceb0c9"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"46a532431886c8024286980e1fddd109dcab1f70","unresolved":false,"context_lines":[{"line_number":900,"context_line":"    def stop_slave(self):"},{"line_number":901,"context_line":"        LOG.info(_(\"Stopping slave replication\"))"},{"line_number":902,"context_line":""},{"line_number":903,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":904,"context_line":"            client.execute(\u0027STOP SLAVE\u0027)"},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"    def start_mysql(self, update_db\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_bba18caa","line":903,"in_reply_to":"baada198_ceb1c792","updated":"2014-08-06 06:25:27.000000000","message":"Done","commit_id":"beee7c4118d7f1bada1e47279992f44bf5ceb0c9"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cf986f250660a3df0e703632e58413fb5a1f4963","unresolved":false,"context_lines":[{"line_number":830,"context_line":"        utils.execute_with_timeout(\"sudo\", \"mv\", MYCNF_REPLMASTER_TMP,"},{"line_number":831,"context_line":"                                   MYCNF_REPLMASTER)"},{"line_number":832,"context_line":""},{"line_number":833,"context_line":"        LOG.info(_(\"Setting permissions on replication.cnf\"))"},{"line_number":834,"context_line":"        utils.execute_with_timeout(\"sudo\", \"chmod\", \"0711\","},{"line_number":835,"context_line":"                                   MYCNF_REPLMASTER)"},{"line_number":836,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_219014f3","line":833,"updated":"2014-08-05 10:33:33.000000000","message":"looks like debug level, not info","commit_id":"429577ef8255d411ccd71e2d390de77e9846a847"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"fee0ae3852c28374ad40fa5765ce2c148532e86e","unresolved":false,"context_lines":[{"line_number":830,"context_line":"        utils.execute_with_timeout(\"sudo\", \"mv\", MYCNF_REPLMASTER_TMP,"},{"line_number":831,"context_line":"                                   MYCNF_REPLMASTER)"},{"line_number":832,"context_line":""},{"line_number":833,"context_line":"        LOG.info(_(\"Setting permissions on replication.cnf\"))"},{"line_number":834,"context_line":"        utils.execute_with_timeout(\"sudo\", \"chmod\", \"0711\","},{"line_number":835,"context_line":"                                   MYCNF_REPLMASTER)"},{"line_number":836,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_9ed84b54","line":833,"in_reply_to":"baada198_219014f3","updated":"2014-08-06 06:23:17.000000000","message":"Done","commit_id":"429577ef8255d411ccd71e2d390de77e9846a847"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cf986f250660a3df0e703632e58413fb5a1f4963","unresolved":false,"context_lines":[{"line_number":868,"context_line":""},{"line_number":869,"context_line":"    def get_binlog_position(self):"},{"line_number":870,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":871,"context_line":"            result \u003d client.execute(\u0027SHOW MASTER STATUS\u0027).fetchall()"},{"line_number":872,"context_line":"            status \u003d result[0]"},{"line_number":873,"context_line":"            binlog_position \u003d {"},{"line_number":874,"context_line":"                \u0027log_file\u0027: status[\u0027File\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_c1a75850","line":871,"updated":"2014-08-05 10:33:33.000000000","message":"status, result \u003d client.execute(\u0027SHOW MASTER STATUS\u0027).fetchall()\n\nand you don\u0027t have to manually unpack values right after executing query","commit_id":"429577ef8255d411ccd71e2d390de77e9846a847"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"fee0ae3852c28374ad40fa5765ce2c148532e86e","unresolved":false,"context_lines":[{"line_number":868,"context_line":""},{"line_number":869,"context_line":"    def get_binlog_position(self):"},{"line_number":870,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":871,"context_line":"            result \u003d client.execute(\u0027SHOW MASTER STATUS\u0027).fetchall()"},{"line_number":872,"context_line":"            status \u003d result[0]"},{"line_number":873,"context_line":"            binlog_position \u003d {"},{"line_number":874,"context_line":"                \u0027log_file\u0027: status[\u0027File\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_f39d005a","line":871,"in_reply_to":"baada198_c1a75850","updated":"2014-08-06 06:23:17.000000000","message":"Fixed using first(), there is only one result row here.","commit_id":"429577ef8255d411ccd71e2d390de77e9846a847"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cf986f250660a3df0e703632e58413fb5a1f4963","unresolved":false,"context_lines":[{"line_number":899,"context_line":"        LOG.info(_(\"Starting slave replication\"))"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":902,"context_line":"            client.execute(\u0027START SLAVE\u0027)"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"    def stop_slave(self):"},{"line_number":905,"context_line":"        LOG.info(_(\"Stopping slave replication\"))"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_41eee88b","line":902,"updated":"2014-08-05 10:33:33.000000000","message":"still not addressed","commit_id":"429577ef8255d411ccd71e2d390de77e9846a847"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"fee0ae3852c28374ad40fa5765ce2c148532e86e","unresolved":false,"context_lines":[{"line_number":899,"context_line":"        LOG.info(_(\"Starting slave replication\"))"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":902,"context_line":"            client.execute(\u0027START SLAVE\u0027)"},{"line_number":903,"context_line":""},{"line_number":904,"context_line":"    def stop_slave(self):"},{"line_number":905,"context_line":"        LOG.info(_(\"Stopping slave replication\"))"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_fe64e74e","line":902,"in_reply_to":"baada198_41eee88b","updated":"2014-08-06 06:23:17.000000000","message":"I\u0027ve added a polling check for SLAVE_RUNNING. This status variable reflects the state of the SQL and I/O threads. \n\nThis is not a great solution, however. We may want to revisit this as part of implementing the slave status monitoring in the guest heartbeat.","commit_id":"429577ef8255d411ccd71e2d390de77e9846a847"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cf986f250660a3df0e703632e58413fb5a1f4963","unresolved":false,"context_lines":[{"line_number":905,"context_line":"        LOG.info(_(\"Stopping slave replication\"))"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":908,"context_line":"            client.execute(\u0027STOP SLAVE\u0027)"},{"line_number":909,"context_line":""},{"line_number":910,"context_line":"    def start_mysql(self, update_db\u003dFalse):"},{"line_number":911,"context_line":"        LOG.info(_(\"Starting mysql...\"))"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_a1fc2442","line":908,"updated":"2014-08-05 10:33:33.000000000","message":"still not addressed","commit_id":"429577ef8255d411ccd71e2d390de77e9846a847"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"fee0ae3852c28374ad40fa5765ce2c148532e86e","unresolved":false,"context_lines":[{"line_number":905,"context_line":"        LOG.info(_(\"Stopping slave replication\"))"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":908,"context_line":"            client.execute(\u0027STOP SLAVE\u0027)"},{"line_number":909,"context_line":""},{"line_number":910,"context_line":"    def start_mysql(self, update_db\u003dFalse):"},{"line_number":911,"context_line":"        LOG.info(_(\"Starting mysql...\"))"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_caf91a84","line":908,"in_reply_to":"baada198_a1fc2442","updated":"2014-08-06 06:23:17.000000000","message":"same","commit_id":"429577ef8255d411ccd71e2d390de77e9846a847"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"146869fc230ed3af21efbd5792b7d7851e7d238f","unresolved":false,"context_lines":[{"line_number":918,"context_line":"            if not (self._wait_for_slave_running(\"OFF\", client, 30)):"},{"line_number":919,"context_line":"                raise RuntimeError(_(\"Slave replication not stopped.\"))"},{"line_number":920,"context_line":""},{"line_number":921,"context_line":"    def _wait_for_slave_running(self, status, client, max_time):"},{"line_number":922,"context_line":"        WAIT_TIME \u003d 3"},{"line_number":923,"context_line":"        waited_time \u003d 0"},{"line_number":924,"context_line":"        while waited_time \u003c max_time:"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_baec1bf6","line":921,"updated":"2014-08-06 12:24:23.000000000","message":"this method is used to verify status: On and Off,\nit should be named with more generic name, such as\n\n\n_verify_slave_status(....)","commit_id":"c9fc2a42f297e2346c5f8cddd9306b66afa1e1df"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"680fba9f78bd315d9363508739bfd84a87720b30","unresolved":false,"context_lines":[{"line_number":918,"context_line":"            if not (self._wait_for_slave_running(\"OFF\", client, 30)):"},{"line_number":919,"context_line":"                raise RuntimeError(_(\"Slave replication not stopped.\"))"},{"line_number":920,"context_line":""},{"line_number":921,"context_line":"    def _wait_for_slave_running(self, status, client, max_time):"},{"line_number":922,"context_line":"        WAIT_TIME \u003d 3"},{"line_number":923,"context_line":"        waited_time \u003d 0"},{"line_number":924,"context_line":"        while waited_time \u003c max_time:"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_b72c2995","line":921,"in_reply_to":"baada198_81a8c722","updated":"2014-08-06 18:05:17.000000000","message":"Done.","commit_id":"c9fc2a42f297e2346c5f8cddd9306b66afa1e1df"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"21280f32d14ba7bc7cbd3ac6c843539a7b1d6b43","unresolved":false,"context_lines":[{"line_number":918,"context_line":"            if not (self._wait_for_slave_running(\"OFF\", client, 30)):"},{"line_number":919,"context_line":"                raise RuntimeError(_(\"Slave replication not stopped.\"))"},{"line_number":920,"context_line":""},{"line_number":921,"context_line":"    def _wait_for_slave_running(self, status, client, max_time):"},{"line_number":922,"context_line":"        WAIT_TIME \u003d 3"},{"line_number":923,"context_line":"        waited_time \u003d 0"},{"line_number":924,"context_line":"        while waited_time \u003c max_time:"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_81a8c722","line":921,"in_reply_to":"baada198_baec1bf6","updated":"2014-08-06 16:03:47.000000000","message":"I\u0027d suggest _wait_for_slave_status","commit_id":"c9fc2a42f297e2346c5f8cddd9306b66afa1e1df"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"146869fc230ed3af21efbd5792b7d7851e7d238f","unresolved":false,"context_lines":[{"line_number":921,"context_line":"    def _wait_for_slave_running(self, status, client, max_time):"},{"line_number":922,"context_line":"        WAIT_TIME \u003d 3"},{"line_number":923,"context_line":"        waited_time \u003d 0"},{"line_number":924,"context_line":"        while waited_time \u003c max_time:"},{"line_number":925,"context_line":"            LOG.debug(\"Waiting for SLAVE_RUNNING to change to %s.\","},{"line_number":926,"context_line":"                      status)"},{"line_number":927,"context_line":"            time.sleep(WAIT_TIME)"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_ba15fbe7","line":924,"updated":"2014-08-06 12:24:23.000000000","message":"i\u0027d suggest to use poll_until mechanis, it would take less code to perfom verification","commit_id":"c9fc2a42f297e2346c5f8cddd9306b66afa1e1df"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"680fba9f78bd315d9363508739bfd84a87720b30","unresolved":false,"context_lines":[{"line_number":921,"context_line":"    def _wait_for_slave_running(self, status, client, max_time):"},{"line_number":922,"context_line":"        WAIT_TIME \u003d 3"},{"line_number":923,"context_line":"        waited_time \u003d 0"},{"line_number":924,"context_line":"        while waited_time \u003c max_time:"},{"line_number":925,"context_line":"            LOG.debug(\"Waiting for SLAVE_RUNNING to change to %s.\","},{"line_number":926,"context_line":"                      status)"},{"line_number":927,"context_line":"            time.sleep(WAIT_TIME)"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_f74dc172","line":924,"in_reply_to":"baada198_ba15fbe7","updated":"2014-08-06 18:05:17.000000000","message":"Done","commit_id":"c9fc2a42f297e2346c5f8cddd9306b66afa1e1df"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bca56f1994c0b28bbae05ca48243b4aaa7da7e59","unresolved":false,"context_lines":[{"line_number":906,"context_line":"        LOG.info(_(\"Starting slave replication.\"))"},{"line_number":907,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":908,"context_line":"            client.execute(\u0027START SLAVE\u0027)"},{"line_number":909,"context_line":"            self._wait_for_slave_status(\"ON\", client, 60)"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"    def stop_slave(self):"},{"line_number":912,"context_line":"        LOG.info(_(\"Stopping slave replication.\"))"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_b42e95a9","line":909,"updated":"2014-08-08 15:40:10.000000000","message":"I feel concerned about given timeout, but i would not hold it, at least for now.\n\nTimeout should be dependent on amount of data being stored at master and network latency.","commit_id":"20f325a623e14ad958038740b9e2149e8a9ea15d"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"d53b85bcf84d3e53f40f82228d0fb6e6fd44626a","unresolved":false,"context_lines":[{"line_number":906,"context_line":"        LOG.info(_(\"Starting slave replication.\"))"},{"line_number":907,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":908,"context_line":"            client.execute(\u0027START SLAVE\u0027)"},{"line_number":909,"context_line":"            self._wait_for_slave_status(\"ON\", client, 60)"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"    def stop_slave(self):"},{"line_number":912,"context_line":"        LOG.info(_(\"Stopping slave replication.\"))"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_e35db27d","line":909,"in_reply_to":"baada198_b42e95a9","updated":"2014-08-08 17:13:03.000000000","message":"I will double check the details, but this status does NOT indicate that the slave is now fully caught up with the master so it should not depend on the data set. (In fact, if the master is receiving heavy write traffic the slave may never catch up.)\n\nNetwork latency is indeed a variable. We can\u0027t compensate for that automatically, but we could make this timeout configurable? \n\nYour point here is essentially what Morgan raised when you first asked about waiting for the slave to be active -- we don\u0027t know how long it will take to get in to an active state. It\u0027s also possible the replication fails immediately after we see it go active, so the heartbeat reporting of replication status is more important than what we can do here.","commit_id":"20f325a623e14ad958038740b9e2149e8a9ea15d"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bca56f1994c0b28bbae05ca48243b4aaa7da7e59","unresolved":false,"context_lines":[{"line_number":919,"context_line":"        def verify_slave_status():"},{"line_number":920,"context_line":"            actual_status \u003d client.execute("},{"line_number":921,"context_line":"                \"SHOW GLOBAL STATUS like \u0027slave_running\u0027\").first()[1]"},{"line_number":922,"context_line":"            return actual_status.upper() \u003d\u003d status.upper()"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":"        LOG.debug(\"Waiting for SLAVE_RUNNING to change to %s.\", status)"},{"line_number":925,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_7a0dc734","line":922,"updated":"2014-08-08 15:40:10.000000000","message":"better to use re.match with re.IGNORECASE","commit_id":"20f325a623e14ad958038740b9e2149e8a9ea15d"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"d53b85bcf84d3e53f40f82228d0fb6e6fd44626a","unresolved":false,"context_lines":[{"line_number":919,"context_line":"        def verify_slave_status():"},{"line_number":920,"context_line":"            actual_status \u003d client.execute("},{"line_number":921,"context_line":"                \"SHOW GLOBAL STATUS like \u0027slave_running\u0027\").first()[1]"},{"line_number":922,"context_line":"            return actual_status.upper() \u003d\u003d status.upper()"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":"        LOG.debug(\"Waiting for SLAVE_RUNNING to change to %s.\", status)"},{"line_number":925,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_23996a1e","line":922,"in_reply_to":"baada198_7a0dc734","updated":"2014-08-08 17:13:03.000000000","message":"I believe str.upper is more efficient and don\u0027t see the need for a regexp to match a literal.","commit_id":"20f325a623e14ad958038740b9e2149e8a9ea15d"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"7f0abbb8bc666adc70f4fc50d50a0478219ce367","unresolved":false,"context_lines":[{"line_number":837,"context_line":"                                   MYCNF_REPLMASTER)"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"        LOG.debug(\"Setting permissions on replication.cnf.\")"},{"line_number":840,"context_line":"        utils.execute_with_timeout(\"sudo\", \"chmod\", \"0711\","},{"line_number":841,"context_line":"                                   MYCNF_REPLMASTER)"},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"    def remove_replication_overrides(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_5cb35b4d","line":840,"updated":"2014-08-11 20:31:50.000000000","message":"711 gives it execution power, the mysql process is not able to read the cnf file. it should be 744","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"dde9a7086eda5508c5d5846a81d3c58fef3ee345","unresolved":false,"context_lines":[{"line_number":912,"context_line":"        LOG.info(_(\"Stopping slave replication.\"))"},{"line_number":913,"context_line":"        with LocalSqlClient(get_engine()) as client:"},{"line_number":914,"context_line":"            client.execute(\u0027STOP SLAVE\u0027)"},{"line_number":915,"context_line":"            client.execute(\u0027RESET SLAVE ALL\u0027)"},{"line_number":916,"context_line":"            self._wait_for_slave_status(\"OFF\", client, 30)"},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"    def _wait_for_slave_status(self, status, client, max_time):"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac7a964_67355ff6","line":915,"updated":"2014-08-15 19:11:35.000000000","message":"Agreed!","commit_id":"86eacbeabc35cd870d55faad70c4549efb19a152"}],"trove/guestagent/strategies/replication/__init__.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"49bb992e0e3e938945978a5de661ef984b74b41b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2014 Tesora, Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_cda09944","line":1,"updated":"2014-06-13 15:30:54.000000000","message":"Please remove the OpenStack Foundation copyright","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"b0b0b2f682bc03bbe550824f273a8793611b66e9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2014 Tesora, Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_1ccb8d72","line":1,"in_reply_to":"1ae5cdf2_cda09944","updated":"2014-06-13 19:14:44.000000000","message":"Done","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"63c5b183368ac1277835158b1821d6c0ad184c40","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def get_replication_strategy(replication_driver, ns\u003d__name__):"},{"line_number":24,"context_line":"    LOG.debug(\"Getting replication strategy: %s\" % replication_driver)"},{"line_number":25,"context_line":"    return Strategy.get_strategy(replication_driver, ns)"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_3533bc63","line":24,"updated":"2014-07-23 02:53:07.000000000","message":"a period at the end of the msg","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"35b00f55130a694553f75f97e4f361b8f9d98568","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def get_replication_strategy(replication_driver, ns\u003d__name__):"},{"line_number":24,"context_line":"    LOG.debug(\"Getting replication strategy: %s\" % replication_driver)"},{"line_number":25,"context_line":"    return Strategy.get_strategy(replication_driver, ns)"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_ee6dab04","line":24,"updated":"2014-07-24 15:03:43.000000000","message":"Please address comment from patchset #11","commit_id":"beee7c4118d7f1bada1e47279992f44bf5ceb0c9"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"46a532431886c8024286980e1fddd109dcab1f70","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def get_replication_strategy(replication_driver, ns\u003d__name__):"},{"line_number":24,"context_line":"    LOG.debug(\"Getting replication strategy: %s\" % replication_driver)"},{"line_number":25,"context_line":"    return Strategy.get_strategy(replication_driver, ns)"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_937924fe","line":24,"in_reply_to":"baada198_ee6dab04","updated":"2014-08-06 06:25:27.000000000","message":"Done","commit_id":"beee7c4118d7f1bada1e47279992f44bf5ceb0c9"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bca56f1994c0b28bbae05ca48243b4aaa7da7e59","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def get_replication_strategy(replication_driver, ns\u003d__name__):"},{"line_number":24,"context_line":"    LOG.debug(\"Getting replication strategy: %s.\", replication_driver)"},{"line_number":25,"context_line":"    return Strategy.get_strategy(replication_driver, ns)"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_5a6563e0","line":24,"updated":"2014-08-08 15:40:10.000000000","message":"shouldn\u0027t be a % instead of ,","commit_id":"20f325a623e14ad958038740b9e2149e8a9ea15d"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"d53b85bcf84d3e53f40f82228d0fb6e6fd44626a","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def get_replication_strategy(replication_driver, ns\u003d__name__):"},{"line_number":24,"context_line":"    LOG.debug(\"Getting replication strategy: %s.\", replication_driver)"},{"line_number":25,"context_line":"    return Strategy.get_strategy(replication_driver, ns)"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_837156e0","line":24,"in_reply_to":"baada198_5a6563e0","updated":"2014-08-08 17:13:03.000000000","message":"With debug log messages It will be more efficient to pass the args to LOG.debug. That way you are not performing the string interpolation at all if debug logging is not enabled.","commit_id":"20f325a623e14ad958038740b9e2149e8a9ea15d"}],"trove/guestagent/strategies/replication/base.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eeebbaeaeb6adcd35895fb1b4e782a390eca94f3","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.guestagent.strategy import Strategy"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Replication(Strategy):"},{"line_number":23,"context_line":"    \"\"\"Base class for Replication Strategy implementation \"\"\""},{"line_number":24,"context_line":"    __strategy_type__ \u003d \u0027replication\u0027"},{"line_number":25,"context_line":"    __strategy_ns__ \u003d \u0027trove.guestagent.strategies.replication\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_46caa31b","line":22,"updated":"2014-06-05 22:46:35.000000000","message":"This class should be inherited from Strategy with ABC metaclass","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"7aacd976ff4c6e8d3677c48ab731fb0054cc58f9","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.guestagent.strategy import Strategy"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Replication(Strategy):"},{"line_number":23,"context_line":"    \"\"\"Base class for Replication Strategy implementation \"\"\""},{"line_number":24,"context_line":"    __strategy_type__ \u003d \u0027replication\u0027"},{"line_number":25,"context_line":"    __strategy_ns__ \u003d \u0027trove.guestagent.strategies.replication\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_0c43836c","line":22,"in_reply_to":"1ae5cdf2_46caa31b","updated":"2014-06-12 19:49:19.000000000","message":"Done","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eeebbaeaeb6adcd35895fb1b4e782a390eca94f3","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    __strategy_type__ \u003d \u0027replication\u0027"},{"line_number":25,"context_line":"    __strategy_ns__ \u003d \u0027trove.guestagent.strategies.replication\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def __init__(self, context):"},{"line_number":28,"context_line":"        self.context \u003d context"},{"line_number":29,"context_line":"        super(Replication, self).__init__()"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_06e41baa","line":27,"updated":"2014-06-05 22:46:35.000000000","message":"Each do string should end with period","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"7aacd976ff4c6e8d3677c48ab731fb0054cc58f9","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    __strategy_type__ \u003d \u0027replication\u0027"},{"line_number":25,"context_line":"    __strategy_ns__ \u003d \u0027trove.guestagent.strategies.replication\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def __init__(self, context):"},{"line_number":28,"context_line":"        self.context \u003d context"},{"line_number":29,"context_line":"        super(Replication, self).__init__()"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_e6791894","line":27,"in_reply_to":"1ae5cdf2_06e41baa","updated":"2014-06-12 19:49:19.000000000","message":"Done","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"49bb992e0e3e938945978a5de661ef984b74b41b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2014 Tesora, Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_4da3a942","line":1,"updated":"2014-06-13 15:30:54.000000000","message":"Please remove the OpenStack Foundation copyright","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"b0b0b2f682bc03bbe550824f273a8793611b66e9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2014 Tesora, Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_fc96e14a","line":1,"in_reply_to":"1ae5cdf2_4da3a942","updated":"2014-06-13 19:14:44.000000000","message":"Done","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d68459b7751756d4fc673d04b0f807bede717820","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Replication(Strategy):"},{"line_number":23,"context_line":"    \"\"\"Base class for Replication Strategy implementation.\"\"\""},{"line_number":24,"context_line":"    __metaclass__ \u003d abc.ABCMeta"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    __strategy_type__ \u003d \u0027replication\u0027"},{"line_number":27,"context_line":"    __strategy_ns__ \u003d \u0027trove.guestagent.strategies.replication\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_3d5a27f2","line":24,"updated":"2014-06-12 20:17:17.000000000","message":"nice!","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import abc"},{"line_number":18,"context_line":"from trove.guestagent.strategy import Strategy"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class Replication(Strategy):"},{"line_number":22,"context_line":"    \"\"\"Base class for Replication Strategy implementation.\"\"\""},{"line_number":23,"context_line":"    __metaclass__ \u003d abc.ABCMeta"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_4901ca03","line":20,"updated":"2014-07-15 07:29:24.000000000","message":"@six.add_metaclass(abc.ABCMeta)","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class Replication(Strategy):"},{"line_number":22,"context_line":"    \"\"\"Base class for Replication Strategy implementation.\"\"\""},{"line_number":23,"context_line":"    __metaclass__ \u003d abc.ABCMeta"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    __strategy_type__ \u003d \u0027replication\u0027"},{"line_number":26,"context_line":"    __strategy_ns__ \u003d \u0027trove.guestagent.strategies.replication\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_692bee81","line":23,"updated":"2014-07-15 07:29:24.000000000","message":"we need to thing about Py3 compatibility, see comment above","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"}],"trove/guestagent/strategies/replication/mysql_binlog.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d68459b7751756d4fc673d04b0f807bede717820","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"MASTER_CONFIG \u003d \"\"\""},{"line_number":23,"context_line":"[mysqld]"},{"line_number":24,"context_line":"log_bin \u003d /var/log/mysql/mysql-bin.log"},{"line_number":25,"context_line":"\"\"\""},{"line_number":26,"context_line":"SLAVE_CONFIG \u003d \"\"\""},{"line_number":27,"context_line":"[mysqld]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_fd0a7fd0","line":24,"updated":"2014-06-12 20:17:17.000000000","message":"since we are able to modify server configuration parameters i\u0027d suggest to read log_bin from my.cnf or overrides.cnf, and if it\u0027s not there, use default.","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d68459b7751756d4fc673d04b0f807bede717820","unresolved":false,"context_lines":[{"line_number":27,"context_line":"[mysqld]"},{"line_number":28,"context_line":"log_bin \u003d /var/log/mysql/mysql-bin.log"},{"line_number":29,"context_line":"relay_log \u003d /var/log/mysql/mysql-relay-bin.log"},{"line_number":30,"context_line":"\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# The MySQL port is hard coded in the config.template, so just"},{"line_number":33,"context_line":"# make a constant here and assume it doesn\u0027t change"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_5dfb73c0","line":30,"updated":"2014-06-12 20:17:17.000000000","message":"same here","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"3552d8e36e93f1b2aa60a99e0b9ebf4a6b1a3e2e","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"MASTER_CONFIG \u003d \"\"\""},{"line_number":22,"context_line":"[mysqld]"},{"line_number":23,"context_line":"log_bin \u003d /var/log/mysql/mysql-bin.log"},{"line_number":24,"context_line":"\"\"\""},{"line_number":25,"context_line":"SLAVE_CONFIG \u003d \"\"\""},{"line_number":26,"context_line":"[mysqld]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_bce95d81","line":23,"updated":"2014-06-24 15:08:39.000000000","message":"Please address previous comments from patchset 2","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"9369b39b9c4e27f98eda9fc4986d4e267a222f37","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"MASTER_CONFIG \u003d \"\"\""},{"line_number":22,"context_line":"[mysqld]"},{"line_number":23,"context_line":"log_bin \u003d /var/log/mysql/mysql-bin.log"},{"line_number":24,"context_line":"\"\"\""},{"line_number":25,"context_line":"SLAVE_CONFIG \u003d \"\"\""},{"line_number":26,"context_line":"[mysqld]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_95eaaf0c","line":23,"in_reply_to":"1ae5cdf2_bce95d81","updated":"2014-06-24 18:20:51.000000000","message":"While your suggestion is a good one, I implemented it this way because I saw that the location of mysql files are hardcoded elsewhere, and did the same to be consistent.  All of the mysql files should be accessed as you suggest, but to do so here would be out of scope of this patch.","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from trove.guestagent.strategies.replication import base"},{"line_number":18,"context_line":"from trove.openstack.common import log as logging"},{"line_number":19,"context_line":"from trove.guestagent.common import operating_system"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"MASTER_CONFIG \u003d \"\"\""},{"line_number":22,"context_line":"[mysqld]"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_292d768f","line":19,"updated":"2014-07-15 07:29:24.000000000","message":"please sort imports in alphabetic order","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"aca4aacfcab476a7a8505cb9c30b319205a409f4","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from trove.guestagent.strategies.replication import base"},{"line_number":18,"context_line":"from trove.openstack.common import log as logging"},{"line_number":19,"context_line":"from trove.guestagent.common import operating_system"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"MASTER_CONFIG \u003d \"\"\""},{"line_number":22,"context_line":"[mysqld]"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_f8c25152","line":19,"in_reply_to":"baada198_292d768f","updated":"2014-07-15 16:44:12.000000000","message":"Done","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"12e11a48fa896a493e6a76c7083f0f91c70f2ecb","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"MASTER_CONFIG \u003d \"\"\""},{"line_number":22,"context_line":"[mysqld]"},{"line_number":23,"context_line":"log_bin \u003d /var/lib/mysql/mysql-bin.log"},{"line_number":24,"context_line":"\"\"\""},{"line_number":25,"context_line":"SLAVE_CONFIG \u003d \"\"\""},{"line_number":26,"context_line":"[mysqld]"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_44780f7e","line":23,"updated":"2014-07-19 19:18:02.000000000","message":"maybe i missed this, where do we add server-id?\nhttp://dev.mysql.com/doc/refman/5.6/en/replication-howto-masterbaseconfig.html","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"0815d22e99777877a675be35f2e2af2fa7115b88","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"MASTER_CONFIG \u003d \"\"\""},{"line_number":22,"context_line":"[mysqld]"},{"line_number":23,"context_line":"log_bin \u003d /var/lib/mysql/mysql-bin.log"},{"line_number":24,"context_line":"\"\"\""},{"line_number":25,"context_line":"SLAVE_CONFIG \u003d \"\"\""},{"line_number":26,"context_line":"[mysqld]"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_2465db44","line":23,"in_reply_to":"baada198_44780f7e","updated":"2014-07-19 21:12:41.000000000","message":"A unique server_id is assigned for every instance already, in trove/common/template.py.","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ad8dc096f2b907f3e52d1e0abe30a963058a5c7c","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"MASTER_CONFIG \u003d \"\"\""},{"line_number":22,"context_line":"[mysqld]"},{"line_number":23,"context_line":"log_bin \u003d /var/lib/mysql/mysql-bin.log"},{"line_number":24,"context_line":"\"\"\""},{"line_number":25,"context_line":"SLAVE_CONFIG \u003d \"\"\""},{"line_number":26,"context_line":"[mysqld]"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_70ddc213","line":23,"in_reply_to":"baada198_44780f7e","updated":"2014-07-20 21:53:10.000000000","message":"Icca, take a look at configuration template for MySQL","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"63c5b183368ac1277835158b1821d6c0ad184c40","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The MySQL port is hard coded in the config.template, so just"},{"line_number":32,"context_line":"# make a constant here and assume it doesn\u0027t change"},{"line_number":33,"context_line":"MYSQL_PORT \u003d 3306"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_9539e841","line":33,"updated":"2014-07-23 02:53:07.000000000","message":"seems like a problem waiting to happen, no?","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"7df92c7f9cd5e3a5420892e7e5e7fc34c61ed4ee","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The MySQL port is hard coded in the config.template, so just"},{"line_number":32,"context_line":"# make a constant here and assume it doesn\u0027t change"},{"line_number":33,"context_line":"MYSQL_PORT \u003d 3306"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_a0422266","line":33,"in_reply_to":"baada198_9539e841","updated":"2014-07-23 07:02:01.000000000","message":"agreed, i\u0027d suggest to do next thing:\n1. grep my.cnf for default port.\n2. if not #1 ask conf object for tcp port","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"35b00f55130a694553f75f97e4f361b8f9d98568","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The MySQL port is hard coded in the config.template, so just"},{"line_number":32,"context_line":"# make a constant here and assume it doesn\u0027t change"},{"line_number":33,"context_line":"MYSQL_PORT \u003d 3306"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_0e5d7f48","line":33,"updated":"2014-07-24 15:03:43.000000000","message":"questions from patchset #11 weren\u0027t addressed","commit_id":"beee7c4118d7f1bada1e47279992f44bf5ceb0c9"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"46a532431886c8024286980e1fddd109dcab1f70","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The MySQL port is hard coded in the config.template, so just"},{"line_number":32,"context_line":"# make a constant here and assume it doesn\u0027t change"},{"line_number":33,"context_line":"MYSQL_PORT \u003d 3306"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_13651449","line":33,"in_reply_to":"baada198_0e5d7f48","updated":"2014-08-06 06:25:27.000000000","message":"Done","commit_id":"beee7c4118d7f1bada1e47279992f44bf5ceb0c9"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"33998c2f374076e1fba90f5864ae4b7cbd04e82d","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"MASTER_CONFIG \u003d \"\"\""},{"line_number":22,"context_line":"[mysqld]"},{"line_number":23,"context_line":"log_bin \u003d /var/lib/mysql/mysql-bin.log"},{"line_number":24,"context_line":"\"\"\""},{"line_number":25,"context_line":"SLAVE_CONFIG \u003d \"\"\""},{"line_number":26,"context_line":"[mysqld]"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_eb91e753","line":23,"updated":"2014-08-11 06:38:46.000000000","message":"this is actually can lead to failures, you have to ask existing configuration file for bin log position.","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"f8522618283cb88d6f807caf9c4403a2f6aede15","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def get_master_ref(self, mysql_service, master_config):"},{"line_number":38,"context_line":"        master_ref \u003d {"},{"line_number":39,"context_line":"            \u0027host\u0027: operating_system.get_ip_address(),"},{"line_number":40,"context_line":"            \u0027port\u0027: mysql_service.get_port()"},{"line_number":41,"context_line":"        }"},{"line_number":42,"context_line":"        return master_ref"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_dc15b295","line":39,"updated":"2014-08-11 17:19:59.000000000","message":"I would recommend we use the hostname from the instance table here.\nBecause: \n(1) If some ppl have dns enabled it can use the hostname instead of the ip.","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"b0bc027d341e18054658583b510de51885390468","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # it is suitable for restoring the slave, just use it"},{"line_number":48,"context_line":"        # Otherwise, create a new backup of the master site."},{"line_number":49,"context_line":"        snapshot_id \u003d None"},{"line_number":50,"context_line":"        log_position \u003d mysql_service.get_binlog_position()"},{"line_number":51,"context_line":"        return snapshot_id, log_position"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def enable_as_master(self, mysql_service, master_config):"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_06043bc4","line":50,"updated":"2014-08-11 16:22:06.000000000","message":"maybe have some sort of excpetion handling around if log position is not returned which means something went wrong and service didnt sucessfully restart with correct config?","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"8fe66a7e96363193de29c7240f203eca1c9bb47a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # it is suitable for restoring the slave, just use it"},{"line_number":48,"context_line":"        # Otherwise, create a new backup of the master site."},{"line_number":49,"context_line":"        snapshot_id \u003d None"},{"line_number":50,"context_line":"        log_position \u003d mysql_service.get_binlog_position()"},{"line_number":51,"context_line":"        return snapshot_id, log_position"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def enable_as_master(self, mysql_service, master_config):"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_5ab39808","line":50,"updated":"2014-08-08 21:15:13.000000000","message":"what if bin log does not exist on master? we are introducing the config only in enable_as_master","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"ced0929547ca295eef3fcf43a5fcb62a995cf974","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # it is suitable for restoring the slave, just use it"},{"line_number":48,"context_line":"        # Otherwise, create a new backup of the master site."},{"line_number":49,"context_line":"        snapshot_id \u003d None"},{"line_number":50,"context_line":"        log_position \u003d mysql_service.get_binlog_position()"},{"line_number":51,"context_line":"        return snapshot_id, log_position"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def enable_as_master(self, mysql_service, master_config):"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_b0174545","line":50,"in_reply_to":"baada198_36fc2ab6","updated":"2014-08-11 15:37:24.000000000","message":"iccha ? glucas: yeah so it looked liek the replication.cnf changes were not applied. when i moved the config to\n                        ? my.cnf and restarted manuyally it worked. so checking out which inspite\n[15:11]           iccha ? includedirs why its not including the replication.cnf\n\n\nWill try it out again.","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"33998c2f374076e1fba90f5864ae4b7cbd04e82d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # it is suitable for restoring the slave, just use it"},{"line_number":48,"context_line":"        # Otherwise, create a new backup of the master site."},{"line_number":49,"context_line":"        snapshot_id \u003d None"},{"line_number":50,"context_line":"        log_position \u003d mysql_service.get_binlog_position()"},{"line_number":51,"context_line":"        return snapshot_id, log_position"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def enable_as_master(self, mysql_service, master_config):"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_4bbe53cf","line":50,"in_reply_to":"baada198_5ab39808","updated":"2014-08-11 06:38:46.000000000","message":"+1","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"76b5737b32441b88fb9ef85a7d43f5ee12cce224","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # it is suitable for restoring the slave, just use it"},{"line_number":48,"context_line":"        # Otherwise, create a new backup of the master site."},{"line_number":49,"context_line":"        snapshot_id \u003d None"},{"line_number":50,"context_line":"        log_position \u003d mysql_service.get_binlog_position()"},{"line_number":51,"context_line":"        return snapshot_id, log_position"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def enable_as_master(self, mysql_service, master_config):"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_e55e6478","line":50,"in_reply_to":"baada198_5ab39808","updated":"2014-08-11 14:30:07.000000000","message":"In the current implementation, the taskmanager configures a site as \"master\" before asking for the snapshot.  The comment is misleading and is removed in a subsequent patch.","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"58689020615fe998b166bfbf84c1eeab3bb07aa8","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # it is suitable for restoring the slave, just use it"},{"line_number":48,"context_line":"        # Otherwise, create a new backup of the master site."},{"line_number":49,"context_line":"        snapshot_id \u003d None"},{"line_number":50,"context_line":"        log_position \u003d mysql_service.get_binlog_position()"},{"line_number":51,"context_line":"        return snapshot_id, log_position"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def enable_as_master(self, mysql_service, master_config):"}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_36fc2ab6","line":50,"in_reply_to":"baada198_5ab39808","updated":"2014-08-11 14:46:30.000000000","message":"Right, the bin log exists by the time we get here. It gets created in enable_as_master (called prior to this) when mysql is restarted with the new config.\n\nI\u0027ve tested this with the standard mysql and percona kick-start images, are other folks seeing an issue here?","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"6e97ca5d2b5cd9420436bd6edae7ce0802e31f44","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def get_master_ref(self, mysql_service, master_config):"},{"line_number":38,"context_line":"        master_ref \u003d {"},{"line_number":39,"context_line":"            \u0027host\u0027: operating_system.get_ip_address(),"},{"line_number":40,"context_line":"            \u0027port\u0027: mysql_service.get_port()"},{"line_number":41,"context_line":"        }"},{"line_number":42,"context_line":"        return master_ref"}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_85c73796","line":39,"updated":"2014-08-12 14:55:23.000000000","message":"hey can we use hostname because:\nips are more likely to change than hostname .\nthis host is used for logs in slave and if ip changes it can no longer use the logs for replication.","commit_id":"7ceb6824b358ce40ca30a4ec37506dc173dfa158"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"249d420863c009da74ebf44f5e5c9f52bacbc558","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def get_master_ref(self, mysql_service, master_config):"},{"line_number":38,"context_line":"        master_ref \u003d {"},{"line_number":39,"context_line":"            \u0027host\u0027: operating_system.get_ip_address(),"},{"line_number":40,"context_line":"            \u0027port\u0027: mysql_service.get_port()"},{"line_number":41,"context_line":"        }"},{"line_number":42,"context_line":"        return master_ref"}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_c86a2681","line":39,"in_reply_to":"baada198_85c73796","updated":"2014-08-12 15:11:25.000000000","message":"for example http://dba.stackexchange.com/questions/30782/update-mysql-slave-when-changing-the-hostname-ip-of-master","commit_id":"7ceb6824b358ce40ca30a4ec37506dc173dfa158"}],"trove/instance/models.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"146869fc230ed3af21efbd5792b7d7851e7d238f","unresolved":false,"context_lines":[{"line_number":658,"context_line":"            replication_support \u003d datastore_cfg.replication_strategy"},{"line_number":659,"context_line":"            if not replication_support:"},{"line_number":660,"context_line":"                raise exception.ReplicationNotSupported("},{"line_number":661,"context_line":"                    datastore\u003ddatastore.name)"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        if not nics:"},{"line_number":664,"context_line":"            nics \u003d []"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_1aa267ad","line":661,"updated":"2014-08-06 12:24:23.000000000","message":"Nice!","commit_id":"c9fc2a42f297e2346c5f8cddd9306b66afa1e1df"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cda962f6b0833843ef1d909d03efdac152cf3ba3","unresolved":false,"context_lines":[{"line_number":654,"context_line":"                    datastore1\u003dbackup_info.datastore.name,"},{"line_number":655,"context_line":"                    datastore2\u003ddatastore.name)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        if slave_of_id:"},{"line_number":658,"context_line":"            replication_support \u003d datastore_cfg.replication_strategy"},{"line_number":659,"context_line":"            if not replication_support:"},{"line_number":660,"context_line":"                raise exception.ReplicationNotSupported("}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_a2c8e9a7","line":657,"updated":"2014-08-11 10:38:26.000000000","message":"There are several cases that are not covered(potential bugs):\n\n1. Master doesn\u0027t exist.\n\n2. Master instance is not ACTIVE. In this case we need to check if master is ACTIVE and raise HTTP 403 Forbidden in cases when status is something else than ACTIVE (BUILD, ERROR, BACKUP, FAILED, RESIZE, etc.).\n\n3. Slave-of-slave-of-slave. In this case we need to create slave from initial master node but not from previous node(initial slave to initial master) to accomplish read scale out. We need to raise HTTP Bad Request 400 if given master node is a slave to another or recursively find initial master and build new slave from it.\n\n4. Slave parameters (flavor, volume) are different than masters parameters.\n\n5. Datastore mismatch (master mysql-5.5, slave mongodb-2.0.9)\n\n6. \"Slave of ID\" was used with \"Backup ID\" - who\u0027s more powerful?","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"dca3129d4c4c261274230f457bff888d77d2819d","unresolved":false,"context_lines":[{"line_number":654,"context_line":"                    datastore1\u003dbackup_info.datastore.name,"},{"line_number":655,"context_line":"                    datastore2\u003ddatastore.name)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        if slave_of_id:"},{"line_number":658,"context_line":"            replication_support \u003d datastore_cfg.replication_strategy"},{"line_number":659,"context_line":"            if not replication_support:"},{"line_number":660,"context_line":"                raise exception.ReplicationNotSupported("}],"source_content_type":"text/x-python","patch_set":23,"id":"7ac7a964_9dce4eb3","line":657,"in_reply_to":"baada198_a2c8e9a7","updated":"2014-08-15 21:05:33.000000000","message":"I agree that some of these sanity checks really should happen (esp. around validating that the master is healthy, and can be used as a replication source.) \n\nI think iccha has opened a couple of these as bugs (Thanks!) and I\u0027m fine following this up with a couple of patchsets with quick bugfixes to address these issues.","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"ced0929547ca295eef3fcf43a5fcb62a995cf974","unresolved":false,"context_lines":[{"line_number":654,"context_line":"                    datastore1\u003dbackup_info.datastore.name,"},{"line_number":655,"context_line":"                    datastore2\u003ddatastore.name)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        if slave_of_id:"},{"line_number":658,"context_line":"            replication_support \u003d datastore_cfg.replication_strategy"},{"line_number":659,"context_line":"            if not replication_support:"},{"line_number":660,"context_line":"                raise exception.ReplicationNotSupported("}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_f0353da8","line":657,"in_reply_to":"baada198_a2c8e9a7","updated":"2014-08-11 15:37:24.000000000","message":"I agree there must be checks for slave.\natleast the same or great volume.\ni dont think flavor matters because the slaves we are configuring right now are read only so dont need as much memory.","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"e2d251c0c18c514977821ef7ee5d63186c705d42","unresolved":false,"context_lines":[{"line_number":654,"context_line":"                    datastore1\u003dbackup_info.datastore.name,"},{"line_number":655,"context_line":"                    datastore2\u003ddatastore.name)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        if slave_of_id:"},{"line_number":658,"context_line":"            replication_support \u003d datastore_cfg.replication_strategy"},{"line_number":659,"context_line":"            if not replication_support:"},{"line_number":660,"context_line":"                raise exception.ReplicationNotSupported("}],"source_content_type":"text/x-python","patch_set":23,"id":"baada198_3666c655","line":657,"in_reply_to":"baada198_f0353da8","updated":"2014-08-11 19:48:53.000000000","message":"Flavors and volumes are pretty interesting things. I think flavors also should be taken into account since instance can be provisioned without any volume(cinder resource).","commit_id":"34ab35e01f2b7966658a90bbb2d7ee1d3c50d970"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b5375fc63225172e7f8417df4b54a6d8ed4c0cdc","unresolved":false,"context_lines":[{"line_number":654,"context_line":"                    datastore1\u003dbackup_info.datastore.name,"},{"line_number":655,"context_line":"                    datastore2\u003ddatastore.name)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        if slave_of_id:"},{"line_number":658,"context_line":"            replication_support \u003d datastore_cfg.replication_strategy"},{"line_number":659,"context_line":"            if not replication_support:"},{"line_number":660,"context_line":"                raise exception.ReplicationNotSupported("}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_e0998b1f","line":657,"updated":"2014-08-13 14:16:13.000000000","message":"None of given concerns were addressed, see comments at patchset #23","commit_id":"7ceb6824b358ce40ca30a4ec37506dc173dfa158"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"dde9a7086eda5508c5d5846a81d3c58fef3ee345","unresolved":false,"context_lines":[{"line_number":653,"context_line":"                raise exception.BackupDatastoreMismatchError("},{"line_number":654,"context_line":"                    datastore1\u003dbackup_info.datastore.name,"},{"line_number":655,"context_line":"                    datastore2\u003ddatastore.name)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        if slave_of_id:"},{"line_number":658,"context_line":"            replication_support \u003d datastore_cfg.replication_strategy"},{"line_number":659,"context_line":"            if not replication_support:"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac7a964_a77137e2","line":656,"updated":"2014-08-15 19:11:35.000000000","message":"Nothing weren\u0027t addressed since patchset #23. Please address given concerns.","commit_id":"86eacbeabc35cd870d55faad70c4549efb19a152"}],"trove/instance/service.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d68459b7751756d4fc673d04b0f807bede717820","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            nics \u003d None"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        if \u0027slave_of\u0027 in body[\u0027instance\u0027]:"},{"line_number":225,"context_line":"            slave_of_id \u003d body[\u0027instance\u0027][\u0027slave_of\u0027]"},{"line_number":226,"context_line":"        else:"},{"line_number":227,"context_line":"            slave_of_id \u003d None"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_dda303b0","line":225,"updated":"2014-06-12 20:17:17.000000000","message":"we can simplify this part of code.\n\nwhy can\u0027t just:\nslave_of_id \u003d body[\u0027instance\u0027].get(\u0027slave_of\u0027)\n\n?\none line against four","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"b0b0b2f682bc03bbe550824f273a8793611b66e9","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            nics \u003d None"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        if \u0027slave_of\u0027 in body[\u0027instance\u0027]:"},{"line_number":225,"context_line":"            slave_of_id \u003d body[\u0027instance\u0027][\u0027slave_of\u0027]"},{"line_number":226,"context_line":"        else:"},{"line_number":227,"context_line":"            slave_of_id \u003d None"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_812e5a41","line":225,"in_reply_to":"1ae5cdf2_30e5d237","updated":"2014-06-13 19:14:44.000000000","message":"True... Just followed what was already being done for nics and availability_zone, but they can all be simplified.","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"49bb992e0e3e938945978a5de661ef984b74b41b","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            nics \u003d None"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        if \u0027slave_of\u0027 in body[\u0027instance\u0027]:"},{"line_number":225,"context_line":"            slave_of_id \u003d body[\u0027instance\u0027][\u0027slave_of\u0027]"},{"line_number":226,"context_line":"        else:"},{"line_number":227,"context_line":"            slave_of_id \u003d None"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_30e5d237","line":225,"in_reply_to":"1ae5cdf2_dda303b0","updated":"2014-06-13 15:30:54.000000000","message":"That\u0027ll work","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"12e11a48fa896a493e6a76c7083f0f91c70f2ecb","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        availability_zone \u003d body[\u0027instance\u0027].get(\u0027availability_zone\u0027)"},{"line_number":215,"context_line":"        nics \u003d body[\u0027instance\u0027].get(\u0027nics\u0027)"},{"line_number":216,"context_line":"        slave_of_id \u003d body[\u0027instance\u0027].get(\u0027slave_of\u0027)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        if \u0027slave_of\u0027 in body[\u0027instance\u0027]:"},{"line_number":219,"context_line":"            slave_of_id \u003d body[\u0027instance\u0027][\u0027slave_of\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_640a7321","line":216,"updated":"2014-07-19 19:18:02.000000000","message":"could we add slave_id to apischema.py?","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"f48c63511e11aae5e1863f0104bfb498a30e78ff","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        availability_zone \u003d body[\u0027instance\u0027].get(\u0027availability_zone\u0027)"},{"line_number":215,"context_line":"        nics \u003d body[\u0027instance\u0027].get(\u0027nics\u0027)"},{"line_number":216,"context_line":"        slave_of_id \u003d body[\u0027instance\u0027].get(\u0027slave_of\u0027)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        if \u0027slave_of\u0027 in body[\u0027instance\u0027]:"},{"line_number":219,"context_line":"            slave_of_id \u003d body[\u0027instance\u0027][\u0027slave_of\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_9f4a7025","line":216,"in_reply_to":"baada198_3f87a462","updated":"2014-07-19 21:21:49.000000000","message":"Actually - I\u0027ll update apischema.py as part of https://review.openstack.org/#/c/105758.","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"0815d22e99777877a675be35f2e2af2fa7115b88","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        availability_zone \u003d body[\u0027instance\u0027].get(\u0027availability_zone\u0027)"},{"line_number":215,"context_line":"        nics \u003d body[\u0027instance\u0027].get(\u0027nics\u0027)"},{"line_number":216,"context_line":"        slave_of_id \u003d body[\u0027instance\u0027].get(\u0027slave_of\u0027)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        if \u0027slave_of\u0027 in body[\u0027instance\u0027]:"},{"line_number":219,"context_line":"            slave_of_id \u003d body[\u0027instance\u0027][\u0027slave_of\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_3f87a462","line":216,"in_reply_to":"baada198_640a7321","updated":"2014-07-19 21:12:41.000000000","message":"Agreed, will do.","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"35b00f55130a694553f75f97e4f361b8f9d98568","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        availability_zone \u003d body[\u0027instance\u0027].get(\u0027availability_zone\u0027)"},{"line_number":215,"context_line":"        nics \u003d body[\u0027instance\u0027].get(\u0027nics\u0027)"},{"line_number":216,"context_line":"        slave_of_id \u003d body[\u0027instance\u0027].get(\u0027slave_of\u0027)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        if \u0027slave_of\u0027 in body[\u0027instance\u0027]:"},{"line_number":219,"context_line":"            slave_of_id \u003d body[\u0027instance\u0027][\u0027slave_of\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_ee120b60","line":216,"updated":"2014-07-24 15:03:43.000000000","message":"please address comments from previous patchset (#11)","commit_id":"beee7c4118d7f1bada1e47279992f44bf5ceb0c9"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"46a532431886c8024286980e1fddd109dcab1f70","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        availability_zone \u003d body[\u0027instance\u0027].get(\u0027availability_zone\u0027)"},{"line_number":215,"context_line":"        nics \u003d body[\u0027instance\u0027].get(\u0027nics\u0027)"},{"line_number":216,"context_line":"        slave_of_id \u003d body[\u0027instance\u0027].get(\u0027slave_of\u0027)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        if \u0027slave_of\u0027 in body[\u0027instance\u0027]:"},{"line_number":219,"context_line":"            slave_of_id \u003d body[\u0027instance\u0027][\u0027slave_of\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_d3d1dccd","line":216,"in_reply_to":"baada198_ee120b60","updated":"2014-08-06 06:25:27.000000000","message":"The apischema will be updated as part of https://review.openstack.org/#/c/105758 since that is further modifying the api.","commit_id":"beee7c4118d7f1bada1e47279992f44bf5ceb0c9"}],"trove/taskmanager/manager.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eeebbaeaeb6adcd35895fb1b4e782a390eca94f3","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                        root_password, nics, overrides, slave_of\u003dNone):"},{"line_number":86,"context_line":"        instance_tasks \u003d FreshInstanceTasks.load(context, instance_id)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if slave_of:"},{"line_number":89,"context_line":"            # We are creating a new instance which is a slave of another"},{"line_number":90,"context_line":"            # First, get the snapshot of the master site, use"},{"line_number":91,"context_line":"            # it to restore the data to the slave, then enable"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_e6748fd0","line":88,"updated":"2014-06-05 22:46:35.000000000","message":"I think all this logic should migrate into models.py","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"443ec4975e48ef9d2a99b0beb4d5ebd5a0efd14a","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                        root_password, nics, overrides, slave_of\u003dNone):"},{"line_number":86,"context_line":"        instance_tasks \u003d FreshInstanceTasks.load(context, instance_id)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if slave_of:"},{"line_number":89,"context_line":"            # We are creating a new instance which is a slave of another"},{"line_number":90,"context_line":"            # First, get the snapshot of the master site, use"},{"line_number":91,"context_line":"            # it to restore the data to the slave, then enable"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_3538a49f","line":88,"in_reply_to":"1ae5cdf2_e6748fd0","updated":"2014-06-11 21:44:18.000000000","message":"I believe the reason this is here is because the calls are across two different instances: the existing master and the to-be-created slave. We\u0027ve got the context required to get the master instance here...","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eeebbaeaeb6adcd35895fb1b4e782a390eca94f3","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            # it to restore the data to the slave, then enable"},{"line_number":92,"context_line":"            # replication"},{"line_number":93,"context_line":"            master \u003d models.BuiltInstanceTasks.load(context, slave_of)"},{"line_number":94,"context_line":"            master_config \u003d {\u0027snapshot_id\u0027: image_id or utils.generate_uuid()}"},{"line_number":95,"context_line":"            snapshot \u003d master.get_replication_snapshot(master_config)"},{"line_number":96,"context_line":"            snapshot_id \u003d snapshot[\u0027dataset\u0027][\u0027snapshot_id\u0027]"},{"line_number":97,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_86b58b7f","line":94,"updated":"2014-06-05 22:46:35.000000000","message":"I\u0027m confused why image ID is a snapshot ID?","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"7aacd976ff4c6e8d3677c48ab731fb0054cc58f9","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            # it to restore the data to the slave, then enable"},{"line_number":92,"context_line":"            # replication"},{"line_number":93,"context_line":"            master \u003d models.BuiltInstanceTasks.load(context, slave_of)"},{"line_number":94,"context_line":"            master_config \u003d {\u0027snapshot_id\u0027: image_id or utils.generate_uuid()}"},{"line_number":95,"context_line":"            snapshot \u003d master.get_replication_snapshot(master_config)"},{"line_number":96,"context_line":"            snapshot_id \u003d snapshot[\u0027dataset\u0027][\u0027snapshot_id\u0027]"},{"line_number":97,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_a6a630a9","line":94,"in_reply_to":"1ae5cdf2_55eff01d","updated":"2014-06-12 19:49:19.000000000","message":"Done","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"443ec4975e48ef9d2a99b0beb4d5ebd5a0efd14a","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            # it to restore the data to the slave, then enable"},{"line_number":92,"context_line":"            # replication"},{"line_number":93,"context_line":"            master \u003d models.BuiltInstanceTasks.load(context, slave_of)"},{"line_number":94,"context_line":"            master_config \u003d {\u0027snapshot_id\u0027: image_id or utils.generate_uuid()}"},{"line_number":95,"context_line":"            snapshot \u003d master.get_replication_snapshot(master_config)"},{"line_number":96,"context_line":"            snapshot_id \u003d snapshot[\u0027dataset\u0027][\u0027snapshot_id\u0027]"},{"line_number":97,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_55eff01d","line":94,"in_reply_to":"1ae5cdf2_86b58b7f","updated":"2014-06-11 21:44:18.000000000","message":"The code is incorrect here (working on a second patch set). It should be backup_id. The intent is that if a suitable backup image is specified we could build the slave from that rather than creating a new snapshot. The current patch set doesn\u0027t implement this and will always create a new snapshot.","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eeebbaeaeb6adcd35895fb1b4e782a390eca94f3","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                try:"},{"line_number":106,"context_line":"                    instance_tasks.attach_replication_slave(snapshot)"},{"line_number":107,"context_line":"                except Exception:"},{"line_number":108,"context_line":"                    instance_tasks.delete_async()"},{"line_number":109,"context_line":"            finally:"},{"line_number":110,"context_line":"                if image_id !\u003d snapshot_id:"},{"line_number":111,"context_line":"                    self.delete_backup(context, snapshot_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_e65baf51","line":108,"updated":"2014-06-05 22:46:35.000000000","message":"I don\u0027t like the idea of hidden deletion, quotas must increased. We should make instance FAILED, that\u0027s all.","commit_id":"bff466390f21a87fece26aff1403306efe9e5a12"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d68459b7751756d4fc673d04b0f807bede717820","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                try:"},{"line_number":106,"context_line":"                    instance_tasks.attach_replication_slave(snapshot)"},{"line_number":107,"context_line":"                except Exception:"},{"line_number":108,"context_line":"                    instance_tasks.delete_async()"},{"line_number":109,"context_line":"            finally:"},{"line_number":110,"context_line":"                if backup_id !\u003d snapshot_id:"},{"line_number":111,"context_line":"                    self.delete_backup(context, snapshot_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_dd06a385","line":108,"updated":"2014-06-12 20:17:17.000000000","message":"hidden delete seems very tricky, shouldn\u0027t we just mark new slave as FAILED/ERROR if it gets corrupted?","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"b0b0b2f682bc03bbe550824f273a8793611b66e9","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                try:"},{"line_number":106,"context_line":"                    instance_tasks.attach_replication_slave(snapshot)"},{"line_number":107,"context_line":"                except Exception:"},{"line_number":108,"context_line":"                    instance_tasks.delete_async()"},{"line_number":109,"context_line":"            finally:"},{"line_number":110,"context_line":"                if backup_id !\u003d snapshot_id:"},{"line_number":111,"context_line":"                    self.delete_backup(context, snapshot_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_bc97f938","line":108,"in_reply_to":"1ae5cdf2_dd06a385","updated":"2014-06-13 19:14:44.000000000","message":"Yes, I think you\u0027re right (but I haven\u0027t addressed this one yet).","commit_id":"4d343f5fe03fb5f4371d1eec95e18e736ff0fbd7"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"3552d8e36e93f1b2aa60a99e0b9ebf4a6b1a3e2e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                try:"},{"line_number":106,"context_line":"                    instance_tasks.attach_replication_slave(snapshot)"},{"line_number":107,"context_line":"                except Exception:"},{"line_number":108,"context_line":"                    instance_tasks.delete_async()"},{"line_number":109,"context_line":"            finally:"},{"line_number":110,"context_line":"                if backup_id !\u003d snapshot_id:"},{"line_number":111,"context_line":"                    self.delete_backup(context, snapshot_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_5c48598a","line":108,"updated":"2014-06-24 15:08:39.000000000","message":"re-iterating from previous patchsets, we should avoid use of hidden delete","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"34d2c6a340350a5645c0e6f6c59ec48bff40ca06","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                try:"},{"line_number":106,"context_line":"                    instance_tasks.attach_replication_slave(snapshot)"},{"line_number":107,"context_line":"                except Exception:"},{"line_number":108,"context_line":"                    instance_tasks.delete_async()"},{"line_number":109,"context_line":"            finally:"},{"line_number":110,"context_line":"                if backup_id !\u003d snapshot_id:"},{"line_number":111,"context_line":"                    self.delete_backup(context, snapshot_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_68b46fd4","line":108,"in_reply_to":"1ae5cdf2_5c48598a","updated":"2014-06-24 18:15:57.000000000","message":"I disagree.  In this instance it is an instance that we have partially created, and that the user has no knowledge of its existence.  We should not leave half created turds lying around.  However, you have drawn attention to that fact that we are eating an exception, which we should not be doing.","commit_id":"50d255604f6fc885f58c472f1c1771a9252e228a"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"06b8571f912b09a338fd5af680e9efed1a441ba9","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                                               nics, overrides)"},{"line_number":105,"context_line":"                try:"},{"line_number":106,"context_line":"                    instance_tasks.attach_replication_slave(snapshot)"},{"line_number":107,"context_line":"                except Exception:"},{"line_number":108,"context_line":"                    instance_tasks.delete_async()"},{"line_number":109,"context_line":"                    raise"},{"line_number":110,"context_line":"            finally:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_e6897470","line":107,"updated":"2014-06-25 10:32:43.000000000","message":"Good point about exception. But here comes another thing. We should not expect too broad exception (Exception class). Called task expect guest communications, etc. So here we must expect a dozen of specific exceptions. Please fix it according to given implementation","commit_id":"3650abdef3535ad7c6a15ad6b9d516a31fa1ce59"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"f85d35b42c441b44fd4955dd4d2bcce9552b49a8","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                                               nics, overrides)"},{"line_number":105,"context_line":"                try:"},{"line_number":106,"context_line":"                    instance_tasks.attach_replication_slave(snapshot)"},{"line_number":107,"context_line":"                except Exception:"},{"line_number":108,"context_line":"                    instance_tasks.delete_async()"},{"line_number":109,"context_line":"                    raise"},{"line_number":110,"context_line":"            finally:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_2a0eb6e5","line":107,"in_reply_to":"1ae5cdf2_e6897470","updated":"2014-06-25 14:40:30.000000000","message":"What\u0027s the value of handling a dozen different exceptions here if the end result is an instance that failed to build? Do you think there are specific exceptions that should be handled in different ways? If so, could you provide some examples?\n\nI do agree that we should mark the instance failed rather than delete it, however. We\u0027re looking in to that -- setting to ERROR here is not a good idea because the user will have already seen the instance go ACTIVE. Things need to be refactored a bit so we can determine the resulting state while it is still in BUILD.","commit_id":"3650abdef3535ad7c6a15ad6b9d516a31fa1ce59"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"8a3560ae9f6299230d7d4d918f1f955c1543db9a","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                                               nics, overrides)"},{"line_number":105,"context_line":"                try:"},{"line_number":106,"context_line":"                    instance_tasks.attach_replication_slave(snapshot)"},{"line_number":107,"context_line":"                except Exception:"},{"line_number":108,"context_line":"                    instance_tasks.delete_async()"},{"line_number":109,"context_line":"                    raise"},{"line_number":110,"context_line":"            finally:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_96096cdf","line":107,"updated":"2014-06-27 06:21:48.000000000","message":"Greg, yes, there are different exceptions that should be handled in different ways. Suppose, you want to make replication snapshot and master instance guest service somehow is unreachable - we should handle it. Another case, slave compute instance is up but guest wasn\u0027t able to start - this also should be handled (and the way it\u0027ll be handled differs from first case). So, i think that catching too broad exception masks root cause of the error.","commit_id":"59db71a01c1fc22063e9a1b04310a085ca37120f"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                                               root_password,"},{"line_number":104,"context_line":"                                               nics, overrides)"},{"line_number":105,"context_line":"                try:"},{"line_number":106,"context_line":"                    instance_tasks.attach_replication_slave(snapshot)"},{"line_number":107,"context_line":"                except Exception:"},{"line_number":108,"context_line":"                    instance_tasks.delete_async()"},{"line_number":109,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_161e0dbb","line":106,"updated":"2014-07-15 07:29:24.000000000","message":"i still feel bad about too broad exceptions, we shouldn\u0027t ever did this if we know certain list of exceptions that can occur","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"7a9c9f02a5ad81815ed89a17ea55037ea3e36318","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                                               root_password,"},{"line_number":104,"context_line":"                                               nics, overrides)"},{"line_number":105,"context_line":"                try:"},{"line_number":106,"context_line":"                    instance_tasks.attach_replication_slave(snapshot)"},{"line_number":107,"context_line":"                except Exception:"},{"line_number":108,"context_line":"                    instance_tasks.delete_async()"},{"line_number":109,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_f22c28af","line":106,"updated":"2014-07-15 18:37:04.000000000","message":"please add comments here about revisiting code and fixing issue related to catching too broad exception.","commit_id":"0e26eda53794ff09a84c306371dd6e11d19e1052"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"70c3980b91bf4b598ebca9cf86c2531465790691","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                                               root_password,"},{"line_number":104,"context_line":"                                               nics, overrides)"},{"line_number":105,"context_line":"                try:"},{"line_number":106,"context_line":"                    instance_tasks.attach_replication_slave(snapshot)"},{"line_number":107,"context_line":"                except Exception:"},{"line_number":108,"context_line":"                    instance_tasks.delete_async()"},{"line_number":109,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_041eb3bb","line":106,"in_reply_to":"baada198_f22c28af","updated":"2014-07-15 23:17:09.000000000","message":"This is just a cast, so it\u0027s not likely that any exception will be raised (i.e. it\u0027s just a cast to the RPC messaging layer).","commit_id":"0e26eda53794ff09a84c306371dd6e11d19e1052"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"70c3980b91bf4b598ebca9cf86c2531465790691","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                    raise"},{"line_number":110,"context_line":"            finally:"},{"line_number":111,"context_line":"                if backup_id !\u003d snapshot_id:"},{"line_number":112,"context_line":"                    self.delete_backup(context, snapshot_id)"},{"line_number":113,"context_line":"        else:"},{"line_number":114,"context_line":"            instance_tasks.create_instance(flavor, image_id, databases, users,"},{"line_number":115,"context_line":"                                           datastore_manager, packages,"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_64076f82","line":112,"updated":"2014-07-15 23:17:09.000000000","message":"You can\u0027t delete the backup here, since the create_instance, and attach_replication_slave calls are async, and the slave has likely not come up before the delete happens.\n\nFor replication-v1 from an existing instance, I\u0027d recommend always creating a backup and restoring the instance from this backup. The cleanup of this backup could then happen on a call from the guest instance once it has come up successfully.","commit_id":"0e26eda53794ff09a84c306371dd6e11d19e1052"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"76e6d21f460afb6b761b684f22f4fe899b3e12f1","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                       nics, overrides)"},{"line_number":103,"context_line":"        if slave_of_id:"},{"line_number":104,"context_line":"            # Enable replication on the newly created slave instance"},{"line_number":105,"context_line":"            instance_tasks.attach_replication_slave(snapshot)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def update_overrides(self, context, instance_id, overrides):"},{"line_number":108,"context_line":"        instance_tasks \u003d models.BuiltInstanceTasks.load(context, instance_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_94bd11b4","line":105,"updated":"2014-07-18 14:43:27.000000000","message":"As i can forsee right after this call you have to verify that slave was connected successfuly, see  [1]\n\n\n[1] http://dev.mysql.com/doc/refman/5.7/en/replication-administration-status.html","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"7df92c7f9cd5e3a5420892e7e5e7fc34c61ed4ee","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                       nics, overrides)"},{"line_number":103,"context_line":"        if slave_of_id:"},{"line_number":104,"context_line":"            # Enable replication on the newly created slave instance"},{"line_number":105,"context_line":"            instance_tasks.attach_replication_slave(snapshot)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def update_overrides(self, context, instance_id, overrides):"},{"line_number":108,"context_line":"        instance_tasks \u003d models.BuiltInstanceTasks.load(context, instance_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_432dd08e","line":105,"in_reply_to":"baada198_94bd11b4","updated":"2014-07-23 07:02:01.000000000","message":"Deployment verification is too important, because you don\u0027t know what have you delivered, since you don\u0027t know if it\u0027s acting like a replication set. Without verification you have only certain number of mysql instances that are running somehow.","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"35b00f55130a694553f75f97e4f361b8f9d98568","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                       nics, overrides)"},{"line_number":103,"context_line":"        if slave_of_id:"},{"line_number":104,"context_line":"            # Enable replication on the newly created slave instance"},{"line_number":105,"context_line":"            instance_tasks.attach_replication_slave(snapshot)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def update_overrides(self, context, instance_id, overrides):"},{"line_number":108,"context_line":"        instance_tasks \u003d models.BuiltInstanceTasks.load(context, instance_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_d1040616","line":105,"updated":"2014-07-24 15:03:43.000000000","message":"None of comments from previous patchset (#11) weren\u0027t addressed","commit_id":"beee7c4118d7f1bada1e47279992f44bf5ceb0c9"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cf986f250660a3df0e703632e58413fb5a1f4963","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                                       volume_size, backup_id,"},{"line_number":101,"context_line":"                                       availability_zone, root_password,"},{"line_number":102,"context_line":"                                       nics, overrides)"},{"line_number":103,"context_line":"        if slave_of_id:"},{"line_number":104,"context_line":"            # Enable replication on the newly created slave instance"},{"line_number":105,"context_line":"            instance_tasks.attach_replication_slave(snapshot)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_e148dcb6","line":103,"updated":"2014-08-05 10:33:33.000000000","message":"why this step can\u0027t be placed right before creating an instance?\n\nas for me, there\u0027s no value-add in adding another one if statement.","commit_id":"429577ef8255d411ccd71e2d390de77e9846a847"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"fee0ae3852c28374ad40fa5765ce2c148532e86e","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                                       volume_size, backup_id,"},{"line_number":101,"context_line":"                                       availability_zone, root_password,"},{"line_number":102,"context_line":"                                       nics, overrides)"},{"line_number":103,"context_line":"        if slave_of_id:"},{"line_number":104,"context_line":"            # Enable replication on the newly created slave instance"},{"line_number":105,"context_line":"            instance_tasks.attach_replication_slave(snapshot)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_2ded5bb9","line":103,"in_reply_to":"baada198_e148dcb6","updated":"2014-08-06 06:23:17.000000000","message":"This step operates on an instance after it is created and the backup (master snapshot) has been applied. It is not something we can do /before/ creating the instance.\n\nThis code has also been rearranged a bit in the dependent patch set (https://review.openstack.org/#/c/109687) that adds support for master snapshots.","commit_id":"429577ef8255d411ccd71e2d390de77e9846a847"}],"trove/taskmanager/models.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def attach_replication_slave(self, snapshot, slave_config\u003dNone):"},{"line_number":271,"context_line":"        LOG.debug(\"Calling attach_replication_slave for %s\" % self.id)"},{"line_number":272,"context_line":"        self.guest.attach_replication_slave(snapshot, slave_config)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def report_root_enabled(self):"},{"line_number":275,"context_line":"        mysql_models.RootHistory.create(self.context, self.id, \u0027root\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_d66e552e","line":272,"updated":"2014-07-15 07:29:24.000000000","message":"should be wrapped with try:except with GuestError, GuestTimeout exception.","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":788,"context_line":""},{"line_number":789,"context_line":"    def get_replication_snapshot(self, master_config):"},{"line_number":790,"context_line":"        LOG.debug(\"Calling get_replication_snapshot on %s\" % self.id)"},{"line_number":791,"context_line":"        return self.guest.get_replication_snapshot(master_config)"},{"line_number":792,"context_line":""},{"line_number":793,"context_line":"    def reboot(self):"},{"line_number":794,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_36707107","line":791,"updated":"2014-07-15 07:29:24.000000000","message":"same","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"7a9c9f02a5ad81815ed89a17ea55037ea3e36318","unresolved":false,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def attach_replication_slave(self, snapshot, slave_config\u003dNone):"},{"line_number":271,"context_line":"        LOG.debug(\"Calling attach_replication_slave for %s\" % self.id)"},{"line_number":272,"context_line":"        self.guest.attach_replication_slave(snapshot, slave_config)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def report_root_enabled(self):"},{"line_number":275,"context_line":"        mysql_models.RootHistory.create(self.context, self.id, \u0027root\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_3216a059","line":272,"updated":"2014-07-15 18:37:04.000000000","message":"Comment wasn\u0027t addressed.\nshould be wrapped with try:except with GuestError, GuestTimeout exception.","commit_id":"0e26eda53794ff09a84c306371dd6e11d19e1052"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"70c3980b91bf4b598ebca9cf86c2531465790691","unresolved":false,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def attach_replication_slave(self, snapshot, slave_config\u003dNone):"},{"line_number":271,"context_line":"        LOG.debug(\"Calling attach_replication_slave for %s\" % self.id)"},{"line_number":272,"context_line":"        self.guest.attach_replication_slave(snapshot, slave_config)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def report_root_enabled(self):"},{"line_number":275,"context_line":"        mysql_models.RootHistory.create(self.context, self.id, \u0027root\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_6a2499b2","line":272,"in_reply_to":"baada198_3216a059","updated":"2014-07-15 23:17:09.000000000","message":"This is an RPC cast, not an RPC call -- so the call to the method returns without actually waiting on the guest. Ergo this cannot result in a GuestError, or GuestTimeout exception.","commit_id":"0e26eda53794ff09a84c306371dd6e11d19e1052"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"7a9c9f02a5ad81815ed89a17ea55037ea3e36318","unresolved":false,"context_lines":[{"line_number":791,"context_line":""},{"line_number":792,"context_line":"    def get_replication_snapshot(self, master_config):"},{"line_number":793,"context_line":"        LOG.debug(\"Calling get_replication_snapshot on %s\" % self.id)"},{"line_number":794,"context_line":"        return self.guest.get_replication_snapshot(master_config)"},{"line_number":795,"context_line":""},{"line_number":796,"context_line":"    def reboot(self):"},{"line_number":797,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_f203480e","line":794,"updated":"2014-07-15 18:37:04.000000000","message":"Comment wasn\u0027t addressed.\nshould be wrapped with try:except with GuestError, GuestTimeout exception.","commit_id":"0e26eda53794ff09a84c306371dd6e11d19e1052"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"7df92c7f9cd5e3a5420892e7e5e7fc34c61ed4ee","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        LOG.debug(\"end create_instance for id: %s\" % self.id)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def attach_replication_slave(self, snapshot, slave_config\u003dNone):"},{"line_number":271,"context_line":"        LOG.debug(\"Calling attach_replication_slave for %s\" % self.id)"},{"line_number":272,"context_line":"        self.guest.attach_replication_slave(snapshot, slave_config)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def report_root_enabled(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_435b1022","line":271,"updated":"2014-07-23 07:02:01.000000000","message":"missing period at the end","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"12e11a48fa896a493e6a76c7083f0f91c70f2ecb","unresolved":false,"context_lines":[{"line_number":793,"context_line":"        LOG.debug(\"Calling get_replication_snapshot on %s\" % self.id)"},{"line_number":794,"context_line":"        try:"},{"line_number":795,"context_line":"            result \u003d self.guest.get_replication_snapshot(master_config)"},{"line_number":796,"context_line":"            LOG.debug(\"Got replication snapshot from guest successfully.\")"},{"line_number":797,"context_line":"            return result"},{"line_number":798,"context_line":"        except (GuestError, GuestTimeout):"},{"line_number":799,"context_line":"            LOG.exception(_(\"Failed to get replication snapshot from %s\") %"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_e12755c5","line":796,"updated":"2014-07-19 19:18:02.000000000","message":"maybe include the id here too? might be helpful while tracing through logs when multiple simultaneously replication calls might have been made.","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"35b00f55130a694553f75f97e4f361b8f9d98568","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        LOG.debug(\"end create_instance for id: %s\" % self.id)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def attach_replication_slave(self, snapshot, slave_config\u003dNone):"},{"line_number":273,"context_line":"        LOG.debug(\"Calling attach_replication_slave for %s\" % self.id)"},{"line_number":274,"context_line":"        self.guest.attach_replication_slave(snapshot, slave_config)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def report_root_enabled(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_313d42bc","line":273,"updated":"2014-07-24 15:03:43.000000000","message":"missing period at the end","commit_id":"beee7c4118d7f1bada1e47279992f44bf5ceb0c9"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"46a532431886c8024286980e1fddd109dcab1f70","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        LOG.debug(\"end create_instance for id: %s\" % self.id)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def attach_replication_slave(self, snapshot, slave_config\u003dNone):"},{"line_number":273,"context_line":"        LOG.debug(\"Calling attach_replication_slave for %s\" % self.id)"},{"line_number":274,"context_line":"        self.guest.attach_replication_slave(snapshot, slave_config)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def report_root_enabled(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_93dda416","line":273,"in_reply_to":"baada198_313d42bc","updated":"2014-08-06 06:25:27.000000000","message":"Done","commit_id":"beee7c4118d7f1bada1e47279992f44bf5ceb0c9"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"af10674864fdb4a505d4d5fc706724e47819d469","unresolved":false,"context_lines":[{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def attach_replication_slave(self, snapshot, slave_config\u003dNone):"},{"line_number":273,"context_line":"        LOG.debug(\"Calling attach_replication_slave for %s.\", self.id)"},{"line_number":274,"context_line":"        self.guest.attach_replication_slave(snapshot, slave_config)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def report_root_enabled(self):"},{"line_number":277,"context_line":"        mysql_models.RootHistory.create(self.context, self.id, \u0027root\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"baada198_2742a10d","line":274,"updated":"2014-08-06 21:10:00.000000000","message":"i\u0027d suggest to cover this call with try/except block to prevent unhandled failing due to guest communication problems.","commit_id":"b68aa8da618e60a0c72732e9851a516c16dc09b5"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"9cd4625b335b48889d79817584c87fb2aaffca08","unresolved":false,"context_lines":[{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def attach_replication_slave(self, snapshot, slave_config\u003dNone):"},{"line_number":273,"context_line":"        LOG.debug(\"Calling attach_replication_slave for %s.\", self.id)"},{"line_number":274,"context_line":"        self.guest.attach_replication_slave(snapshot, slave_config)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def report_root_enabled(self):"},{"line_number":277,"context_line":"        mysql_models.RootHistory.create(self.context, self.id, \u0027root\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"baada198_9cf9e951","line":274,"in_reply_to":"baada198_2742a10d","updated":"2014-08-07 20:09:18.000000000","message":"Done.","commit_id":"b68aa8da618e60a0c72732e9851a516c16dc09b5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bca56f1994c0b28bbae05ca48243b4aaa7da7e59","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        LOG.debug(\"end create_instance for id: %s\" % self.id)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def attach_replication_slave(self, snapshot, slave_config\u003dNone):"},{"line_number":273,"context_line":"        LOG.debug(\"Calling attach_replication_slave for %s.\", self.id)"},{"line_number":274,"context_line":"        try:"},{"line_number":275,"context_line":"            self.guest.attach_replication_slave(snapshot, slave_config)"},{"line_number":276,"context_line":"        except GuestError as e:"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_fa84775e","line":273,"updated":"2014-08-08 15:40:10.000000000","message":"same question","commit_id":"20f325a623e14ad958038740b9e2149e8a9ea15d"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bca56f1994c0b28bbae05ca48243b4aaa7da7e59","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            master_tasks \u003d BuiltInstanceTasks.load(context, slave_of_id)"},{"line_number":285,"context_line":"            snapshot \u003d master_tasks.get_replication_snapshot(backup_id)"},{"line_number":286,"context_line":"            return snapshot"},{"line_number":287,"context_line":"        except TroveError as e:"},{"line_number":288,"context_line":"            msg \u003d (_(\"Error getting snapshot from \""},{"line_number":289,"context_line":"                     \"replication master %s.\") % slave_of_id)"},{"line_number":290,"context_line":"            err \u003d inst_models.InstanceTasks.BUILDING_ERROR_SLAVE"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_5ac1e37f","line":287,"updated":"2014-08-08 15:40:10.000000000","message":"shouldn\u0027t we expect certain exception instead of generic TroveError?","commit_id":"20f325a623e14ad958038740b9e2149e8a9ea15d"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"d53b85bcf84d3e53f40f82228d0fb6e6fd44626a","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            master_tasks \u003d BuiltInstanceTasks.load(context, slave_of_id)"},{"line_number":285,"context_line":"            snapshot \u003d master_tasks.get_replication_snapshot(backup_id)"},{"line_number":286,"context_line":"            return snapshot"},{"line_number":287,"context_line":"        except TroveError as e:"},{"line_number":288,"context_line":"            msg \u003d (_(\"Error getting snapshot from \""},{"line_number":289,"context_line":"                     \"replication master %s.\") % slave_of_id)"},{"line_number":290,"context_line":"            err \u003d inst_models.InstanceTasks.BUILDING_ERROR_SLAVE"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_4e10454f","line":287,"in_reply_to":"baada198_5ac1e37f","updated":"2014-08-08 17:13:03.000000000","message":"We could just handle GuestError and GuestTimeout here, I suppose. Or are you suggesting that get_replication_snapshot should convert to some specific thing like ReplicationSnapshotError?","commit_id":"20f325a623e14ad958038740b9e2149e8a9ea15d"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b5375fc63225172e7f8417df4b54a6d8ed4c0cdc","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            master_tasks \u003d BuiltInstanceTasks.load(context, slave_of_id)"},{"line_number":285,"context_line":"            snapshot \u003d master_tasks.get_replication_snapshot(backup_id)"},{"line_number":286,"context_line":"            return snapshot"},{"line_number":287,"context_line":"        except TroveError as e:"},{"line_number":288,"context_line":"            msg \u003d (_(\"Error getting snapshot from \""},{"line_number":289,"context_line":"                     \"replication master %s.\") % slave_of_id)"},{"line_number":290,"context_line":"            err \u003d inst_models.InstanceTasks.BUILDING_ERROR_SLAVE"}],"source_content_type":"text/x-python","patch_set":24,"id":"baada198_c05f2773","line":287,"updated":"2014-08-13 14:16:13.000000000","message":"not addressed, we shouldn\u0027t expect generic exception type. See comments for patchset #22","commit_id":"7ceb6824b358ce40ca30a4ec37506dc173dfa158"}],"trove/tests/api/replication.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 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":7,"id":"baada198_761d8972","line":1,"updated":"2014-07-15 07:29:24.000000000","message":"There\u0027s a difference between run_after and depends_on:\n\nif previous test got failed, next tests will be launched, if next test has runs_after attribute inside decorator opts - it will be executed independently from previous (runs_after describes the order, not the dependency),\nbut if next test has depends_on attribute inside decorator opts, test would never execute.","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from proboscis.asserts import assert_equal"},{"line_number":16,"context_line":"from proboscis.asserts import assert_raises"},{"line_number":17,"context_line":"from proboscis.asserts import fail"},{"line_number":18,"context_line":"from proboscis import test"},{"line_number":19,"context_line":"from trove.common.utils import poll_until"},{"line_number":20,"context_line":"from trove.common.utils import generate_uuid"},{"line_number":21,"context_line":"from trove.common import exception"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_164c4dc7","line":18,"updated":"2014-07-15 07:29:24.000000000","message":"this import should come first","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from trove.common.utils import generate_uuid"},{"line_number":21,"context_line":"from trove.common import exception"},{"line_number":22,"context_line":"from trove.tests.config import CONFIG"},{"line_number":23,"context_line":"from troveclient.compat import exceptions"},{"line_number":24,"context_line":"from trove.tests.api.instances import WaitForGuestInstallationToFinish"},{"line_number":25,"context_line":"from trove.tests.api.instances import instance_info"},{"line_number":26,"context_line":"from trove.tests.api.instances import TIMEOUT_INSTANCE_CREATE"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_364791a4","line":23,"updated":"2014-07-15 07:29:24.000000000","message":"this import should be the last one","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from trove.tests.api.instances import TIMEOUT_INSTANCE_CREATE"},{"line_number":27,"context_line":"from trove.tests.api.instances import TIMEOUT_INSTANCE_DELETE"},{"line_number":28,"context_line":"from trove.tests.util.server_connection import create_server_connection"},{"line_number":29,"context_line":"from trove import tests"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"GROUP \u003d \"dbaas.api.replication\""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_d603b53f","line":29,"updated":"2014-07-15 07:29:24.000000000","message":"is it used somewhere ?","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @test(depends_on\u003d[WaitForGuestInstallationToFinish])"},{"line_number":53,"context_line":"    def test_replication(self):"},{"line_number":54,"context_line":"        global slave_instance_id"},{"line_number":55,"context_line":"        slave_instance_id \u003d self._create_replication_slave()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_368cf1d6","line":54,"updated":"2014-07-15 07:29:24.000000000","message":"please do not use global in tests, find another way to accomplish what you actually wanted","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    \"\"\""},{"line_number":81,"context_line":"        Wait until the instance is created and set up as slave"},{"line_number":82,"context_line":"    \"\"\""},{"line_number":83,"context_line":"    @test(depends_on\u003d[CreateReplicationSlave.test_replication])"},{"line_number":84,"context_line":"    def test_slave_created(self):"},{"line_number":85,"context_line":"        try:"},{"line_number":86,"context_line":"            self._poll(slave_instance_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_d6b1f58f","line":83,"updated":"2014-07-15 07:29:24.000000000","message":"you need to add @time_out and don\u0027t need to wrapp _poll with try:except","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            fail(\u0027Timed out\u0027)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"@test(enabled\u003d(not CONFIG.fake_mode),"},{"line_number":92,"context_line":"      depends_on\u003d[WaitForCreateSlaveToFinish],"},{"line_number":93,"context_line":"      groups\u003d[GROUP, tests.INSTANCES])"},{"line_number":94,"context_line":"class VerifySlave(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_5665e51b","line":91,"updated":"2014-07-15 07:29:24.000000000","message":"do not use this enabled, just raise SkipTests wherever you need it.","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def slave_is_running(self):"},{"line_number":101,"context_line":"        server \u003d create_server_connection(slave_instance_id)"},{"line_number":102,"context_line":"        cmd \u003d \"mysqladmin extended-status | awk \u0027/Slave_running/{print $4}\u0027\""},{"line_number":103,"context_line":"        stdout, stderr \u003d server.execute(cmd)"},{"line_number":104,"context_line":"        return stdout \u003d\u003d \"ON\\n\""},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_f67359e4","line":102,"updated":"2014-07-15 07:29:24.000000000","message":"actually, this check can be applied when you trying to start slave inside guest code.","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    @test"},{"line_number":107,"context_line":"    def test_correctly_started_replication(self):"},{"line_number":108,"context_line":"        try:"},{"line_number":109,"context_line":"            poll_until(self.slave_is_running, time_out\u003d60 * 5, sleep_time\u003d30)"},{"line_number":110,"context_line":"        except exception.PollTimeOut:"},{"line_number":111,"context_line":"            fail(\u0027Timed out waiting for slave to start\u0027)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_564c059e","line":109,"updated":"2014-07-15 07:29:24.000000000","message":"same here, @time_out(...) and unneeded try:except","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    @test(runs_after\u003d[\u0027test_create_db_on_master\u0027])"},{"line_number":120,"context_line":"    def test_database_replicated_on_slave(self):"},{"line_number":121,"context_line":"        try:"},{"line_number":122,"context_line":"            poll_until(self.db_is_found, time_out\u003d60 * 5, sleep_time\u003d30)"},{"line_number":123,"context_line":"        except exception.PollTimeOut:"},{"line_number":124,"context_line":"            fail(\u0027Timed out waiting for DB to replicate to slave\u0027)"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_96421d66","line":122,"updated":"2014-07-15 07:29:24.000000000","message":"same here","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9e0ac7fe144a6b149b26ba28ff04b282a4d99056","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    @test(runs_after\u003d[VerifySlave.test_database_replicated_on_slave])"},{"line_number":148,"context_line":"    def test_delete_slave_instance(self):"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            self._delete(slave_instance_id)"},{"line_number":151,"context_line":"        except exception.PollTimeOut:"},{"line_number":152,"context_line":"            fail(\u0027Timed out\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_f65a794e","line":150,"updated":"2014-07-15 07:29:24.000000000","message":"same here","commit_id":"8f18b6528f1083c5dbe289ff2d2571a295ca579c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"7a9c9f02a5ad81815ed89a17ea55037ea3e36318","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 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":9,"id":"baada198_4d02990a","line":1,"updated":"2014-07-15 18:37:04.000000000","message":"None of given comments were addressed.\nPlease simplify tests according to given suggestions.","commit_id":"0e26eda53794ff09a84c306371dd6e11d19e1052"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"9c09a798d48c2d85ddb04af900ec80f7b842d480","unresolved":false,"context_lines":[{"line_number":80,"context_line":"      depends_on\u003d[WaitForCreateSlaveToFinish],"},{"line_number":81,"context_line":"      groups\u003d[GROUP])"},{"line_number":82,"context_line":"class VerifySlave(object):"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @test"},{"line_number":85,"context_line":"    @time_out(5 * 60)"},{"line_number":86,"context_line":"    def test_correctly_started_replication(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_6ac57909","line":83,"updated":"2014-07-15 23:58:28.000000000","message":"This is pretty good.\nOne test i would like to see if that previous databases are replicated.\nSo the test would just list the databases in the master, create the slave, and verify that the existing databases in the master were replicated to the slave.","commit_id":"be23b63d3b675249e01dd9febfeef6382ff44843"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"2fde65c94eb82d00bab4e84bc87b363f02eb06b2","unresolved":false,"context_lines":[{"line_number":80,"context_line":"      depends_on\u003d[WaitForCreateSlaveToFinish],"},{"line_number":81,"context_line":"      groups\u003d[GROUP])"},{"line_number":82,"context_line":"class VerifySlave(object):"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @test"},{"line_number":85,"context_line":"    @time_out(5 * 60)"},{"line_number":86,"context_line":"    def test_correctly_started_replication(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_ad7a4b75","line":83,"in_reply_to":"baada198_6ac57909","updated":"2014-07-16 01:35:43.000000000","message":"So, Morgan is still working on replicating from existing instance (i.e. the scenario where we take a snapshot, and restore from that before we turn on replication). \n\nAny tests that check for existence of databases that were previously created will fail until that patch merges. I suggest we add these tests in as part of that subsequent patch.","commit_id":"be23b63d3b675249e01dd9febfeef6382ff44843"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"9c09a798d48c2d85ddb04af900ec80f7b842d480","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    def test_delete_slave_instance(self):"},{"line_number":123,"context_line":"        instance_info.dbaas.instances.delete(slave_instance.id)"},{"line_number":124,"context_line":"        assert_equal(202, instance_info.dbaas.last_http_code)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        def instance_is_gone():"},{"line_number":127,"context_line":"            try:"},{"line_number":128,"context_line":"                instance_info.dbaas.instances.get(slave_instance.id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_ea7429d2","line":125,"updated":"2014-07-15 23:58:28.000000000","message":"Should you also check mysql to make sure that the slave_running is OFF? Similarly how you are checking the the slave is running","commit_id":"be23b63d3b675249e01dd9febfeef6382ff44843"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"2fde65c94eb82d00bab4e84bc87b363f02eb06b2","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    def test_delete_slave_instance(self):"},{"line_number":123,"context_line":"        instance_info.dbaas.instances.delete(slave_instance.id)"},{"line_number":124,"context_line":"        assert_equal(202, instance_info.dbaas.last_http_code)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        def instance_is_gone():"},{"line_number":127,"context_line":"            try:"},{"line_number":128,"context_line":"                instance_info.dbaas.instances.get(slave_instance.id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_8d0827db","line":125,"in_reply_to":"baada198_ea7429d2","updated":"2014-07-16 01:35:43.000000000","message":"The default for mysql is a slave_running value of OFF. Checking for OFF and then ON is subject to a timing issue, since we can\u0027t really tell when the switch happens (it happens as soon as the instance is created, and might be OFF for a split second before turning to ON).  \n\nHowever, there\u0027s a separate patch that glucas has to enable the detach_slave call, and we should probably add the check for slave_running to OFF as part of the tests for that patch.","commit_id":"be23b63d3b675249e01dd9febfeef6382ff44843"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"9e8aa8cafebc78a7b6941bcd06af0e6d5a17df72","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2013 Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_6e88bb6b","line":1,"updated":"2014-07-24 14:45:01.000000000","message":"This line should be removed entirely (unless someone contributing actually works for the foundation)","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"12e11a48fa896a493e6a76c7083f0f91c70f2ecb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2013 Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_a108fd2d","line":2,"updated":"2014-07-19 19:18:02.000000000","message":"copy right? 2014?","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"b1e50f4c5c9503e49840fa9e9dda3e33d67e10d4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2013 Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_ecf9614f","line":2,"in_reply_to":"baada198_a108fd2d","updated":"2014-07-23 15:04:57.000000000","message":"I work for neither the OpenStack Foundation nor HP, and as such cannot update their copyright notices.","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"63c5b183368ac1277835158b1821d6c0ad184c40","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2013 Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_b51d0cc1","line":2,"in_reply_to":"baada198_a108fd2d","updated":"2014-07-23 02:53:07.000000000","message":"we\u0027ve been writing this a long time ... ;)","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"16b4335c6a6dfa7aa92fe165590c002053f0af33","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2013 Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_201e12bc","line":2,"in_reply_to":"baada198_b51d0cc1","updated":"2014-07-23 06:57:25.000000000","message":"Lol, way too long! :)","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"3b3bdd3976a9482732e71faef4c58cb3f45c4d0a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2013 Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_e8068dcc","line":2,"in_reply_to":"baada198_ecf9614f","updated":"2014-07-24 09:50:59.000000000","message":"No worries, I work for HP and will take care of updating it. :)","commit_id":"d54a83e0948e09cd9942e38097fb6743abedf29b"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"d6b337891a2f377a632034e053fb5d2d8d8b1217","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2013 Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":19,"id":"baada198_870e0d8e","line":1,"updated":"2014-08-06 21:22:24.000000000","message":"This line should be removed","commit_id":"b68aa8da618e60a0c72732e9851a516c16dc09b5"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"9cd4625b335b48889d79817584c87fb2aaffca08","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2013 Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":19,"id":"baada198_3cca92a0","line":1,"in_reply_to":"baada198_870e0d8e","updated":"2014-08-07 20:09:18.000000000","message":"Done","commit_id":"b68aa8da618e60a0c72732e9851a516c16dc09b5"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"af10674864fdb4a505d4d5fc706724e47819d469","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"from proboscis.asserts import assert_equal"},{"line_number":17,"context_line":"from proboscis.asserts import assert_raises"},{"line_number":18,"context_line":"from proboscis.decorators import time_out"},{"line_number":19,"context_line":"from proboscis import test"}],"source_content_type":"text/x-python","patch_set":19,"id":"baada198_47687588","line":16,"updated":"2014-08-06 21:10:00.000000000","message":"please sort import in an appropriate way(taking into account alphabetic order), such as:\n\nfrom proboscis import ...\nfrom proboscis.asserts import ...\n\nand etc...","commit_id":"b68aa8da618e60a0c72732e9851a516c16dc09b5"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"9cd4625b335b48889d79817584c87fb2aaffca08","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"from proboscis.asserts import assert_equal"},{"line_number":17,"context_line":"from proboscis.asserts import assert_raises"},{"line_number":18,"context_line":"from proboscis.decorators import time_out"},{"line_number":19,"context_line":"from proboscis import test"}],"source_content_type":"text/x-python","patch_set":19,"id":"baada198_1cc78e99","line":16,"in_reply_to":"baada198_47687588","updated":"2014-08-07 20:09:18.000000000","message":"Done","commit_id":"b68aa8da618e60a0c72732e9851a516c16dc09b5"},{"author":{"_account_id":694,"name":"Tim Simpson","email":"tim.simpson@rackspace.com","username":"tim-simpson"},"change_message_id":"c92ec628a9bbe0835092094da51a9bde7e05ea64","unresolved":false,"context_lines":[{"line_number":38,"context_line":"slave_instance \u003d SlaveInstanceTestInfo()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"@test(depends_on_classes\u003d[WaitForGuestInstallationToFinish],"},{"line_number":42,"context_line":"      groups\u003d[GROUP])"},{"line_number":43,"context_line":"class CreateReplicationSlave(object):"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_d8d25f5b","line":41,"updated":"2014-08-20 20:03:03.000000000","message":"This depends on isn\u0027t necessary since its not using the test created by this instance.","commit_id":"86eacbeabc35cd870d55faad70c4549efb19a152"}]}
