)]}'
{"tox.ini":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"39c368efbe28ccf0603a962017e5b35fb5b8f5bc","unresolved":false,"context_lines":[{"line_number":9,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":10,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":11,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":12,"context_line":"commands \u003d find . -type f -name \"*.pyc\" -delete"},{"line_number":13,"context_line":"           pip install pymongo\u003d\u003d\u003d3.0.3"},{"line_number":14,"context_line":"           {envpython} run_tests.py"},{"line_number":15,"context_line":"           python setup.py testr --slowest"}],"source_content_type":"text/x-properties","patch_set":6,"id":"9a68dd71_0b029d3d","side":"PARENT","line":12,"updated":"2016-01-22 13:21:51.000000000","message":"just general housekeeping, I assume?","commit_id":"5cb2a740cf4378e91d3e3b5b430a7f60f17f33b5"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2a331fd95561810a2d440139bfa865467796f6fe","unresolved":false,"context_lines":[{"line_number":9,"context_line":"install_command \u003d pip install -U {opts} {packages}"},{"line_number":10,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":11,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":12,"context_line":"commands \u003d find . -type f -name \"*.pyc\" -delete"},{"line_number":13,"context_line":"           pip install pymongo\u003d\u003d\u003d3.0.3"},{"line_number":14,"context_line":"           {envpython} run_tests.py"},{"line_number":15,"context_line":"           python setup.py testr --slowest"}],"source_content_type":"text/x-properties","patch_set":6,"id":"9a68dd71_f89a6b6d","side":"PARENT","line":12,"in_reply_to":"9a68dd71_0b029d3d","updated":"2016-01-22 18:07:16.000000000","message":"yeah after this was merged i was running tox tests and this would take a long time because it was deleting all the .tox/*.pyc files in the virutalenv. This should only be done on the ./trove/*.pyc files.","commit_id":"5cb2a740cf4378e91d3e3b5b430a7f60f17f33b5"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"39c368efbe28ccf0603a962017e5b35fb5b8f5bc","unresolved":false,"context_lines":[{"line_number":31,"context_line":"[testenv:cover]"},{"line_number":32,"context_line":"basepython \u003d python2.7"},{"line_number":33,"context_line":"commands \u003d"},{"line_number":34,"context_line":"     {envpython} run_tests.py --group\u003ddoes_not_exist"},{"line_number":35,"context_line":"     coverage erase"},{"line_number":36,"context_line":"     python setup.py testr --coverage"},{"line_number":37,"context_line":"     coverage run -a run_tests.py"}],"source_content_type":"text/x-properties","patch_set":6,"id":"9a68dd71_abfa7141","side":"PARENT","line":34,"updated":"2016-01-22 13:21:51.000000000","message":"what was this?","commit_id":"5cb2a740cf4378e91d3e3b5b430a7f60f17f33b5"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2a331fd95561810a2d440139bfa865467796f6fe","unresolved":false,"context_lines":[{"line_number":31,"context_line":"[testenv:cover]"},{"line_number":32,"context_line":"basepython \u003d python2.7"},{"line_number":33,"context_line":"commands \u003d"},{"line_number":34,"context_line":"     {envpython} run_tests.py --group\u003ddoes_not_exist"},{"line_number":35,"context_line":"     coverage erase"},{"line_number":36,"context_line":"     python setup.py testr --coverage"},{"line_number":37,"context_line":"     coverage run -a run_tests.py"}],"source_content_type":"text/x-properties","patch_set":6,"id":"9a68dd71_58cff728","side":"PARENT","line":34,"in_reply_to":"9a68dd71_abfa7141","updated":"2016-01-22 18:07:16.000000000","message":"this is for the coverage tests but at this time i do not remember the reason i removed this line. Maybe because it seemed useless that we were calling the tests for no reason.","commit_id":"5cb2a740cf4378e91d3e3b5b430a7f60f17f33b5"}],"trove/common/cfg.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"a95ed294b1198d9381c3150df7a769c0180bc861","unresolved":false,"context_lines":[{"line_number":55,"context_line":"               help\u003d\u0027Service type to use when searching catalog.\u0027),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027nova_compute_endpoint_type\u0027, default\u003d\u0027publicURL\u0027,"},{"line_number":57,"context_line":"               help\u003d\u0027Service endpoint type to use when searching catalog.\u0027),"},{"line_number":58,"context_line":"    cfg.FloatOpt(\u0027nova_client_version\u0027, default\u003d2.12,"},{"line_number":59,"context_line":"               help\u003d\"The version of of the compute service client.\"),"},{"line_number":60,"context_line":"    cfg.StrOpt(\u0027neutron_url\u0027, help\u003d\u0027URL without the tenant segment.\u0027),"},{"line_number":61,"context_line":"    cfg.StrOpt(\u0027neutron_service_type\u0027, default\u003d\u0027network\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_35b27e95","line":58,"updated":"2016-01-28 20:48:22.000000000","message":"This is a change that was necessary to make sure we get the network ids of the existing cluster instances. i\u0027ll point it out in another comment.","commit_id":"9c3f1c3d54a8ef7aab4a20029ed20d05df405ef8"}],"trove/common/exception.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"39c368efbe28ccf0603a962017e5b35fb5b8f5bc","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                \"be at least %(num_instances)s.\")"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"class ClusterShrinkMustNotLeaveClusterEmpty(TroveError):"},{"line_number":522,"context_line":"    message \u003d _(\"Must leave at least one instance in the cluster when \""},{"line_number":523,"context_line":"                \"shrinking.\")"},{"line_number":524,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_e63c20ca","line":521,"updated":"2016-01-22 13:21:51.000000000","message":"So this (and the spec is consistent with this) implies that you can create a pxc cluster with 3 instances (minimum) but you can shrink it to 1 instance?","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2a331fd95561810a2d440139bfa865467796f6fe","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                \"be at least %(num_instances)s.\")"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"class ClusterShrinkMustNotLeaveClusterEmpty(TroveError):"},{"line_number":522,"context_line":"    message \u003d _(\"Must leave at least one instance in the cluster when \""},{"line_number":523,"context_line":"                \"shrinking.\")"},{"line_number":524,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_6307b018","line":521,"in_reply_to":"9a68dd71_e63c20ca","updated":"2016-01-22 18:07:16.000000000","message":"the minimum number of instances you must create a cluster with is based on the configuration variable. (Defaulted to 3 instances) After the cluster is created the user may need to do some maintenance on the cluster and can remove instances from the cluster. But may not remove all the instances or the last instance from the cluster. This would cause the cluster to be a dangling reference if all the instances were gone.\n\nIf your question is based on if we require the create to be 3 then why can the cluster have less than 3 instance? This is a case where say you have hardware failure and then the cluster is in a state where 2 good and 1 bad. The first thing you should do is get rid of the bad instance from the cluster before bringing a new instance online to replace it.","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"}],"trove/common/strategies/cluster/experimental/pxc/api.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"39c368efbe28ccf0603a962017e5b35fb5b8f5bc","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def _action_grow_cluster(self, cluster, body):"},{"line_number":51,"context_line":"        nodes \u003d body[\u0027grow\u0027]"},{"line_number":52,"context_line":"        instances \u003d []"},{"line_number":53,"context_line":"        for node in nodes:"},{"line_number":54,"context_line":"            instance \u003d {"},{"line_number":55,"context_line":"                \u0027flavor_id\u0027: utils.get_id_from_href(node[\u0027flavorRef\u0027])"},{"line_number":56,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_a64708bb","line":53,"updated":"2016-01-22 13:21:51.000000000","message":"Are you also taking the nics which can be specified in grow message?","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"3d6140079f3e745f50e3e9928a6c1c1a6e46fb83","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def _action_grow_cluster(self, cluster, body):"},{"line_number":51,"context_line":"        nodes \u003d body[\u0027grow\u0027]"},{"line_number":52,"context_line":"        instances \u003d []"},{"line_number":53,"context_line":"        for node in nodes:"},{"line_number":54,"context_line":"            instance \u003d {"},{"line_number":55,"context_line":"                \u0027flavor_id\u0027: utils.get_id_from_href(node[\u0027flavorRef\u0027])"},{"line_number":56,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_93af8829","line":53,"in_reply_to":"9a68dd71_178f05cd","updated":"2016-01-28 20:32:30.000000000","message":"the client cli doesnt support nic or az currently. but if there is a logical case where you want each instance on a different network then we should keep this functionality otherwise we could restrict it. I\u0027m not sure if giving different networks to each instance of the cluster will break clustering or not though right now.\n\nGood point Sushil.","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"47464d4d66b5d497c19063570be9b51e91cc1f6b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def _action_grow_cluster(self, cluster, body):"},{"line_number":51,"context_line":"        nodes \u003d body[\u0027grow\u0027]"},{"line_number":52,"context_line":"        instances \u003d []"},{"line_number":53,"context_line":"        for node in nodes:"},{"line_number":54,"context_line":"            instance \u003d {"},{"line_number":55,"context_line":"                \u0027flavor_id\u0027: utils.get_id_from_href(node[\u0027flavorRef\u0027])"},{"line_number":56,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_178f05cd","line":53,"in_reply_to":"9a68dd71_3c8c6ed9","updated":"2016-01-22 22:10:09.000000000","message":"i can think of is let user add a nic, if it is possible though client right now, \n\nand in case u want to restrict them to using same nic then all ur clustered instances should be having same nic which could be restricted in the way we are restricting the flavor/volume size","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"7a75532e26b61d4f6b745aa0e238ca2ca0f0af7d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def _action_grow_cluster(self, cluster, body):"},{"line_number":51,"context_line":"        nodes \u003d body[\u0027grow\u0027]"},{"line_number":52,"context_line":"        instances \u003d []"},{"line_number":53,"context_line":"        for node in nodes:"},{"line_number":54,"context_line":"            instance \u003d {"},{"line_number":55,"context_line":"                \u0027flavor_id\u0027: utils.get_id_from_href(node[\u0027flavorRef\u0027])"},{"line_number":56,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_3c8c6ed9","line":53,"in_reply_to":"9a68dd71_7e7183a7","updated":"2016-01-22 21:18:07.000000000","message":"I looked this over and come to find out the cluster-grow you cant put a nic or az on the call. This looks like a larger issue and i\u0027d propose that it be address later. \n\nFWIW i dont think you should be able to give a nic to the grow cluster because it should already have a network its using. But you should be able to optionally pass an AZ where the instance should land to keep an HA setup. But this will require an update to the client and support across all clustering datastores for the grow call.","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2a331fd95561810a2d440139bfa865467796f6fe","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def _action_grow_cluster(self, cluster, body):"},{"line_number":51,"context_line":"        nodes \u003d body[\u0027grow\u0027]"},{"line_number":52,"context_line":"        instances \u003d []"},{"line_number":53,"context_line":"        for node in nodes:"},{"line_number":54,"context_line":"            instance \u003d {"},{"line_number":55,"context_line":"                \u0027flavor_id\u0027: utils.get_id_from_href(node[\u0027flavorRef\u0027])"},{"line_number":56,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_7e7183a7","line":53,"in_reply_to":"9a68dd71_a64708bb","updated":"2016-01-22 18:07:16.000000000","message":"hmm this raises another question to me. Do any other clusters work like that? (i.e. mongo, redis and vertica) I looked to them for reference so i\u0027d think they may have the same issues.\n\nBut to answer your question right now, i do not know. I dont see anything other than flavor, volume, and name parsed on grow. And this was not something i directly tested. This is a very good point and needs to be assessed here with regard to NIC and AZ and possibly other cluster datastores.\n\nI\u0027ll run a test to check the NIC and AZ and get back to you on that for pxc. We may need to add bugs for this on the other datastores. We can address that after M-3 cut tho.","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"47464d4d66b5d497c19063570be9b51e91cc1f6b","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            if ephemeral_support and flavor.ephemeral \u003d\u003d 0:"},{"line_number":121,"context_line":"                raise exception.LocalStorageNotSpecified(flavor\u003dflavor_id)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # quota check"},{"line_number":124,"context_line":"        check_quotas(context.tenant, deltas)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_b3064c1a","line":123,"range":{"start_line":123,"start_character":16,"end_line":123,"end_character":21},"updated":"2016-01-22 22:10:09.000000000","message":"we should start validating nics here if we want to restrict all instances in a cluster to use a single one.","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"6c1b88dba3d475c2e15681b4c488b2f291f73506","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            return"},{"line_number":133,"context_line":"        nova_client \u003d remote.create_nova_client(context)"},{"line_number":134,"context_line":"        try:"},{"line_number":135,"context_line":"            flavor \u003d nova_client.networks.get(instance_nic)"},{"line_number":136,"context_line":"        except nova_exceptions.NotFound:"},{"line_number":137,"context_line":"            raise exception.NetworkNotFound(uuid\u003dinstance_nic)"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_58d891ef","line":135,"range":{"start_line":135,"start_character":19,"end_line":135,"end_character":20},"updated":"2016-01-28 21:01:30.000000000","message":"flavor with network?","commit_id":"9c3f1c3d54a8ef7aab4a20029ed20d05df405ef8"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"9d44c86be453d9ba0f740404ac33891a9993bdd6","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            return"},{"line_number":133,"context_line":"        nova_client \u003d remote.create_nova_client(context)"},{"line_number":134,"context_line":"        try:"},{"line_number":135,"context_line":"            flavor \u003d nova_client.networks.get(instance_nic)"},{"line_number":136,"context_line":"        except nova_exceptions.NotFound:"},{"line_number":137,"context_line":"            raise exception.NetworkNotFound(uuid\u003dinstance_nic)"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_fbae1784","line":135,"range":{"start_line":135,"start_character":19,"end_line":135,"end_character":20},"in_reply_to":"7a5de9d1_58d891ef","updated":"2016-01-28 21:12:31.000000000","message":"i dunno what i was thinking... it was probably late. i\u0027ll update this as well when i remove the debug statement as well.","commit_id":"9c3f1c3d54a8ef7aab4a20029ed20d05df405ef8"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"906fc76475083b3064dd67d3a9e426fa615d2032","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        nova_client \u003d remote.create_nova_client(self.context)"},{"line_number":191,"context_line":"        nova_instance_id \u003d self.db_instances[0].compute_instance_id"},{"line_number":192,"context_line":"        interfaces \u003d nova_client.virtual_interfaces.list(nova_instance_id)"},{"line_number":193,"context_line":"        LOG.debug(\"interface __dict__: %s\" % interfaces[0].__dict__)"},{"line_number":194,"context_line":"        ret \u003d [{\"net-id\": getattr(interface,\u0027net_id\u0027)}"},{"line_number":195,"context_line":"                for interface in interfaces]"},{"line_number":196,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_78ff8d67","line":193,"updated":"2016-01-28 20:49:20.000000000","message":"i\u0027ll remove this debug line...","commit_id":"9c3f1c3d54a8ef7aab4a20029ed20d05df405ef8"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"a95ed294b1198d9381c3150df7a769c0180bc861","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        nova_instance_id \u003d self.db_instances[0].compute_instance_id"},{"line_number":192,"context_line":"        interfaces \u003d nova_client.virtual_interfaces.list(nova_instance_id)"},{"line_number":193,"context_line":"        LOG.debug(\"interface __dict__: %s\" % interfaces[0].__dict__)"},{"line_number":194,"context_line":"        ret \u003d [{\"net-id\": getattr(interface,\u0027net_id\u0027)}"},{"line_number":195,"context_line":"                for interface in interfaces]"},{"line_number":196,"context_line":"        return ret"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_78ac6da0","line":194,"updated":"2016-01-28 20:48:22.000000000","message":"needed to use a newer version of the compute api here. v2.12 of compute api resolves getting the net_id here.","commit_id":"9c3f1c3d54a8ef7aab4a20029ed20d05df405ef8"}],"trove/common/strategies/cluster/experimental/pxc/taskmanager.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"47464d4d66b5d497c19063570be9b51e91cc1f6b","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"            # Wait for cluster members to get to cluster-ready status."},{"line_number":176,"context_line":"            if not self._all_instances_ready(new_instance_ids, cluster_id):"},{"line_number":177,"context_line":"                return"},{"line_number":178,"context_line":"            LOG.debug(\"All members ready, proceeding for cluster setup.\")"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"            # Get the new instances to join the cluster"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_33efbcea","line":177,"range":{"start_line":177,"start_character":16,"end_line":177,"end_character":22},"updated":"2016-01-22 22:10:09.000000000","message":"lets use the same exception strategy here too as you have updated on line number 77 for create cluster.","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"3d6140079f3e745f50e3e9928a6c1c1a6e46fb83","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"            # Wait for cluster members to get to cluster-ready status."},{"line_number":176,"context_line":"            if not self._all_instances_ready(new_instance_ids, cluster_id):"},{"line_number":177,"context_line":"                return"},{"line_number":178,"context_line":"            LOG.debug(\"All members ready, proceeding for cluster setup.\")"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"            # Get the new instances to join the cluster"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_a998d078","line":177,"range":{"start_line":177,"start_character":16,"end_line":177,"end_character":22},"in_reply_to":"9a68dd71_33efbcea","updated":"2016-01-28 20:32:30.000000000","message":"Done","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"47464d4d66b5d497c19063570be9b51e91cc1f6b","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            self.update_statuses_on_failure(cluster_id)"},{"line_number":230,"context_line":"        except Exception:"},{"line_number":231,"context_line":"            LOG.exception(_(\"Error growing cluster %s.\") % cluster_id)"},{"line_number":232,"context_line":"            self.update_statuses_on_failure(cluster_id)"},{"line_number":233,"context_line":"        finally:"},{"line_number":234,"context_line":"            timeout.cancel()"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_33757cf9","line":232,"range":{"start_line":232,"start_character":54,"end_line":232,"end_character":55},"updated":"2016-01-22 22:10:09.000000000","message":"this puts instances in a status BUILDING_ERROR_SERVER but we were growing","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"3d6140079f3e745f50e3e9928a6c1c1a6e46fb83","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            self.update_statuses_on_failure(cluster_id)"},{"line_number":230,"context_line":"        except Exception:"},{"line_number":231,"context_line":"            LOG.exception(_(\"Error growing cluster %s.\") % cluster_id)"},{"line_number":232,"context_line":"            self.update_statuses_on_failure(cluster_id)"},{"line_number":233,"context_line":"        finally:"},{"line_number":234,"context_line":"            timeout.cancel()"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_0946bc7a","line":232,"range":{"start_line":232,"start_character":54,"end_line":232,"end_character":55},"in_reply_to":"9a68dd71_33757cf9","updated":"2016-01-28 20:32:30.000000000","message":"added a new task GROWING_ERROR","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"47464d4d66b5d497c19063570be9b51e91cc1f6b","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                                 for instance_id in removal_instance_ids]"},{"line_number":244,"context_line":"            for instance in removal_instances:"},{"line_number":245,"context_line":"                Instance.delete(instance)"},{"line_number":246,"context_line":"                # instance.update_db(cluster_id\u003dNone)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"            # wait for instances to be deleted"},{"line_number":249,"context_line":"            def all_instances_marked_deleted():"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_53711043","line":246,"range":{"start_line":246,"start_character":52,"end_line":246,"end_character":53},"updated":"2016-01-22 22:10:09.000000000","message":"what is this commented code.","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"3d6140079f3e745f50e3e9928a6c1c1a6e46fb83","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                                 for instance_id in removal_instance_ids]"},{"line_number":244,"context_line":"            for instance in removal_instances:"},{"line_number":245,"context_line":"                Instance.delete(instance)"},{"line_number":246,"context_line":"                # instance.update_db(cluster_id\u003dNone)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"            # wait for instances to be deleted"},{"line_number":249,"context_line":"            def all_instances_marked_deleted():"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_16a2a6fd","line":246,"range":{"start_line":246,"start_character":52,"end_line":246,"end_character":53},"in_reply_to":"9a68dd71_53711043","updated":"2016-01-28 20:32:30.000000000","message":"i was considering if we should remove the link between the instance and the cluster here but decided against it for history. I\u0027ll remove this commented code.","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"47464d4d66b5d497c19063570be9b51e91cc1f6b","unresolved":false,"context_lines":[{"line_number":296,"context_line":"            if t is not timeout:"},{"line_number":297,"context_line":"                raise  # not my timeout"},{"line_number":298,"context_line":"            LOG.exception(_(\"Timeout for shrinking cluster.\"))"},{"line_number":299,"context_line":"            self.update_statuses_on_failure(cluster_id)"},{"line_number":300,"context_line":"        except Exception:"},{"line_number":301,"context_line":"            LOG.exception(_(\"Error shrinking cluster %s.\") % cluster_id)"},{"line_number":302,"context_line":"            self.update_statuses_on_failure(cluster_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_f37a84f0","line":299,"range":{"start_line":299,"start_character":54,"end_line":299,"end_character":55},"updated":"2016-01-22 22:10:09.000000000","message":"this puts instances in a status BUILDING_ERROR_SERVER but we were not building","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"3d6140079f3e745f50e3e9928a6c1c1a6e46fb83","unresolved":false,"context_lines":[{"line_number":296,"context_line":"            if t is not timeout:"},{"line_number":297,"context_line":"                raise  # not my timeout"},{"line_number":298,"context_line":"            LOG.exception(_(\"Timeout for shrinking cluster.\"))"},{"line_number":299,"context_line":"            self.update_statuses_on_failure(cluster_id)"},{"line_number":300,"context_line":"        except Exception:"},{"line_number":301,"context_line":"            LOG.exception(_(\"Error shrinking cluster %s.\") % cluster_id)"},{"line_number":302,"context_line":"            self.update_statuses_on_failure(cluster_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_a961b006","line":299,"range":{"start_line":299,"start_character":54,"end_line":299,"end_character":55},"in_reply_to":"9a68dd71_f37a84f0","updated":"2016-01-28 20:32:30.000000000","message":"added a new task SHRINKING_ERROR","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"}],"trove/common/strategies/cluster/experimental/redis/api.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"39c368efbe28ccf0603a962017e5b35fb5b8f5bc","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from trove.common import cfg"},{"line_number":22,"context_line":"from trove.common import exception"},{"line_number":23,"context_line":"from trove.common.exception import TroveError"},{"line_number":24,"context_line":"from trove.common.i18n import _"},{"line_number":25,"context_line":"from trove.common import remote"},{"line_number":26,"context_line":"from trove.common.strategies.cluster import base"},{"line_number":27,"context_line":"from trove.common import utils"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_c6e0fc98","line":24,"updated":"2016-01-22 13:21:51.000000000","message":"nice catch!","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2a331fd95561810a2d440139bfa865467796f6fe","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from trove.common import cfg"},{"line_number":22,"context_line":"from trove.common import exception"},{"line_number":23,"context_line":"from trove.common.exception import TroveError"},{"line_number":24,"context_line":"from trove.common.i18n import _"},{"line_number":25,"context_line":"from trove.common import remote"},{"line_number":26,"context_line":"from trove.common.strategies.cluster import base"},{"line_number":27,"context_line":"from trove.common import utils"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_bea29bfb","line":24,"in_reply_to":"9a68dd71_c6e0fc98","updated":"2016-01-22 18:07:16.000000000","message":"my editor caught it when i was rummaging through redis cluster. :)","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"}],"trove/guestagent/datastore/experimental/pxc/service.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"1c042fd6f6d40a5051f0370f843903b9f3d22a40","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def _wait_for_mysql_to_be_really_alive(self, max_time):"},{"line_number":64,"context_line":"        utils.poll_until(self._test_mysql, sleep_time\u003d3, time_out\u003dmax_time)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def secure(self, config_contents, overrides):"},{"line_number":67,"context_line":"        LOG.info(_(\"Generating admin password.\"))"},{"line_number":68,"context_line":"        admin_password \u003d utils.generate_random_password()"},{"line_number":69,"context_line":"        service.clear_expired_password()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a5de9d1_8aa90427","line":66,"range":{"start_line":66,"start_character":0,"end_line":66,"end_character":49},"updated":"2016-02-02 23:18:13.000000000","message":"With the rebase, this signature now takes only two arguments (self._apply_user_overrides(overrides) was moved to the base class, so overrides isn\u0027t passed in anymore).  This caused an error during testing:\n\n  TypeError: secure() takes exactly 3 arguments (2 given)","commit_id":"4ddef86a99aa28ed5faf1826e71f58d029cfbd46"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"b9802368c66f4873533275087a327dd23f358e9e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def _wait_for_mysql_to_be_really_alive(self, max_time):"},{"line_number":64,"context_line":"        utils.poll_until(self._test_mysql, sleep_time\u003d3, time_out\u003dmax_time)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def secure(self, config_contents, overrides):"},{"line_number":67,"context_line":"        LOG.info(_(\"Generating admin password.\"))"},{"line_number":68,"context_line":"        admin_password \u003d utils.generate_random_password()"},{"line_number":69,"context_line":"        service.clear_expired_password()"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a5ae5dd_c413930c","line":66,"range":{"start_line":66,"start_character":0,"end_line":66,"end_character":49},"in_reply_to":"7a5de9d1_8aa90427","updated":"2016-02-03 05:16:31.000000000","message":"Done","commit_id":"4ddef86a99aa28ed5faf1826e71f58d029cfbd46"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"329deeac2711e3a79da6a1cc765b001be773dee8","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self._reset_configuration(config_contents, admin_password)"},{"line_number":77,"context_line":"        self.start_mysql()"},{"line_number":78,"context_line":"        # TODO(cp16net) figure out reason for PXC not updating the password"},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            with LocalSqlClient(engine) as client:"},{"line_number":81,"context_line":"                query \u003d text(\"select Host, User from mysql.user;\")"},{"line_number":82,"context_line":"                client.execute(query)"},{"line_number":83,"context_line":"        except Exception:"},{"line_number":84,"context_line":"            LOG.debug(\u0027failed to query mysql\u0027)"},{"line_number":85,"context_line":"        # creating the admin user after the config files are written because"},{"line_number":86,"context_line":"        # percona pxc was not commiting the grant for the admin user after"},{"line_number":87,"context_line":"        # removing the annon users."}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_59bac16f","line":84,"range":{"start_line":79,"start_character":0,"end_line":84,"end_character":46},"updated":"2016-02-04 20:38:09.000000000","message":"This looks like some debug code. Is it material?","commit_id":"4d570dbb64dffb8b066aff6bf81612b3160d88ff"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"d0b45672e8911031cb089d4c8f48a7adbb8ee6d8","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":90,"context_line":"        with LocalSqlClient(engine) as client:"},{"line_number":91,"context_line":"            self._create_admin_user(client, admin_password)"},{"line_number":92,"context_line":"        self.stop_db()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self._reset_configuration(config_contents, admin_password)"},{"line_number":95,"context_line":"        self.start_mysql()"},{"line_number":96,"context_line":"        self._wait_for_mysql_to_be_really_alive("},{"line_number":97,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":98,"context_line":"        LOG.debug(\"MySQL secure complete.\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _grant_cluster_replication_privilege(self, replication_user):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_17353b45","line":97,"range":{"start_line":92,"start_character":0,"end_line":97,"end_character":42},"updated":"2016-02-03 17:45:22.000000000","message":"This is duplicated from above (see MySQL). I don\u0027t think most of this overriding is actually necessary.\nJust do something like:\n\ndef secure(self, config_contents):\n    super(PXCApp, self).secure(config_contents)\n    \u003cyour PXC specific bit goes here\u003e\n\nThat way we won\u0027t have to maintain the same code in two datastores...","commit_id":"4d570dbb64dffb8b066aff6bf81612b3160d88ff"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"65cf710aadb44e8347bbae350e8ae487b88bf0fe","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":90,"context_line":"        with LocalSqlClient(engine) as client:"},{"line_number":91,"context_line":"            self._create_admin_user(client, admin_password)"},{"line_number":92,"context_line":"        self.stop_db()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self._reset_configuration(config_contents, admin_password)"},{"line_number":95,"context_line":"        self.start_mysql()"},{"line_number":96,"context_line":"        self._wait_for_mysql_to_be_really_alive("},{"line_number":97,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":98,"context_line":"        LOG.debug(\"MySQL secure complete.\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _grant_cluster_replication_privilege(self, replication_user):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_317dde1c","line":97,"range":{"start_line":92,"start_character":0,"end_line":97,"end_character":42},"in_reply_to":"5a5ae5dd_17353b45","updated":"2016-02-03 20:28:08.000000000","message":"The problem here was that the admin user would not get created correctly unless this was done. L78 mentions this is weird and needed to be looked into more. I dont want to remove this until we can figure out and resolve the admin password reset. (PXC does this really strangely)","commit_id":"4d570dbb64dffb8b066aff6bf81612b3160d88ff"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"3f9289ccfe8ae02cfda05eb4139a0ad82becb7a1","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":90,"context_line":"        with LocalSqlClient(engine) as client:"},{"line_number":91,"context_line":"            self._create_admin_user(client, admin_password)"},{"line_number":92,"context_line":"        self.stop_db()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self._reset_configuration(config_contents, admin_password)"},{"line_number":95,"context_line":"        self.start_mysql()"},{"line_number":96,"context_line":"        self._wait_for_mysql_to_be_really_alive("},{"line_number":97,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":98,"context_line":"        LOG.debug(\"MySQL secure complete.\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _grant_cluster_replication_privilege(self, replication_user):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_e3f2179a","line":97,"range":{"start_line":92,"start_character":0,"end_line":97,"end_character":42},"in_reply_to":"5a5ae5dd_317dde1c","updated":"2016-02-03 21:36:36.000000000","message":"Well, still I don\u0027t think the block from the second stop call is material as it just re-saves already saved configuration from lines 75-77 and starts the database again.\n\nThe PXC specific bit is between lines 78-91. So you can call the super-implementation and append just the PXC code.","commit_id":"4d570dbb64dffb8b066aff6bf81612b3160d88ff"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"797efbb59b78c5d811522a578ae6ac323fa931ef","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":90,"context_line":"        with LocalSqlClient(engine) as client:"},{"line_number":91,"context_line":"            self._create_admin_user(client, admin_password)"},{"line_number":92,"context_line":"        self.stop_db()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self._reset_configuration(config_contents, admin_password)"},{"line_number":95,"context_line":"        self.start_mysql()"},{"line_number":96,"context_line":"        self._wait_for_mysql_to_be_really_alive("},{"line_number":97,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":98,"context_line":"        LOG.debug(\"MySQL secure complete.\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _grant_cluster_replication_privilege(self, replication_user):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_c81b3d1a","line":97,"range":{"start_line":92,"start_character":0,"end_line":97,"end_character":42},"in_reply_to":"5a5ae5dd_bfa07da0","updated":"2016-02-04 19:15:42.000000000","message":"Can we agree to look at this in a bug fix outside of this patch set because it is not related to the grow/shrink feature?\n\nThis specific code i talked about at the liberty midcycle where it was funky and i had issues trying to get it to work for a while. This was a hacky solution but it worked.","commit_id":"4d570dbb64dffb8b066aff6bf81612b3160d88ff"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"64dabc00c23c182903600f47bf1fe957ab2f31b6","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":90,"context_line":"        with LocalSqlClient(engine) as client:"},{"line_number":91,"context_line":"            self._create_admin_user(client, admin_password)"},{"line_number":92,"context_line":"        self.stop_db()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self._reset_configuration(config_contents, admin_password)"},{"line_number":95,"context_line":"        self.start_mysql()"},{"line_number":96,"context_line":"        self._wait_for_mysql_to_be_really_alive("},{"line_number":97,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":98,"context_line":"        LOG.debug(\"MySQL secure complete.\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _grant_cluster_replication_privilege(self, replication_user):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_e854f921","line":97,"range":{"start_line":92,"start_character":0,"end_line":97,"end_character":42},"in_reply_to":"5a5ae5dd_c81b3d1a","updated":"2016-02-04 19:26:21.000000000","message":"I am ok with dealing this bug separately outside of grow/shrink","commit_id":"4d570dbb64dffb8b066aff6bf81612b3160d88ff"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"329deeac2711e3a79da6a1cc765b001be773dee8","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":90,"context_line":"        with LocalSqlClient(engine) as client:"},{"line_number":91,"context_line":"            self._create_admin_user(client, admin_password)"},{"line_number":92,"context_line":"        self.stop_db()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self._reset_configuration(config_contents, admin_password)"},{"line_number":95,"context_line":"        self.start_mysql()"},{"line_number":96,"context_line":"        self._wait_for_mysql_to_be_really_alive("},{"line_number":97,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":98,"context_line":"        LOG.debug(\"MySQL secure complete.\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _grant_cluster_replication_privilege(self, replication_user):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_f98a8dbe","line":97,"range":{"start_line":92,"start_character":0,"end_line":97,"end_character":42},"in_reply_to":"5a5ae5dd_c81b3d1a","updated":"2016-02-04 20:38:09.000000000","message":"I guess it\u0027s fine if we file a bug for it. I will remove my -1.","commit_id":"4d570dbb64dffb8b066aff6bf81612b3160d88ff"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ba3aaff4bdfcb946008e7e0446e0c2ecb44d2d7a","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":90,"context_line":"        with LocalSqlClient(engine) as client:"},{"line_number":91,"context_line":"            self._create_admin_user(client, admin_password)"},{"line_number":92,"context_line":"        self.stop_db()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self._reset_configuration(config_contents, admin_password)"},{"line_number":95,"context_line":"        self.start_mysql()"},{"line_number":96,"context_line":"        self._wait_for_mysql_to_be_really_alive("},{"line_number":97,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":98,"context_line":"        LOG.debug(\"MySQL secure complete.\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _grant_cluster_replication_privilege(self, replication_user):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_bfa07da0","line":97,"range":{"start_line":92,"start_character":0,"end_line":97,"end_character":42},"in_reply_to":"5a5ae5dd_e3f2179a","updated":"2016-02-04 18:09:56.000000000","message":"I don\u0027t see how but, maybe it\u0027s the additional restart of the database that\u0027s making the difference. I\u0027ll run a quick test...","commit_id":"4d570dbb64dffb8b066aff6bf81612b3160d88ff"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"c7f5befce3644b981dbe98f49a413c611b9abf6a","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":90,"context_line":"        with LocalSqlClient(engine) as client:"},{"line_number":91,"context_line":"            self._create_admin_user(client, admin_password)"},{"line_number":92,"context_line":"        self.stop_db()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self._reset_configuration(config_contents, admin_password)"},{"line_number":95,"context_line":"        self.start_mysql()"},{"line_number":96,"context_line":"        self._wait_for_mysql_to_be_really_alive("},{"line_number":97,"context_line":"            CONF.timeout_wait_for_service)"},{"line_number":98,"context_line":"        LOG.debug(\"MySQL secure complete.\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def _grant_cluster_replication_privilege(self, replication_user):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_cf24280e","line":97,"range":{"start_line":92,"start_character":0,"end_line":97,"end_character":42},"in_reply_to":"5a5ae5dd_f98a8dbe","updated":"2016-02-08 16:57:02.000000000","message":"opened a bug: https://bugs.launchpad.net/trove/+bug/1543211","commit_id":"4d570dbb64dffb8b066aff6bf81612b3160d88ff"}],"trove/tests/scenario/runners/cluster_actions_runners.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"3a6d05682ec75392262bb98a186ee1453580e2eb","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        self._assert_cluster_action(cluster_id, expected_task_name,"},{"line_number":192,"context_line":"                                    expected_http_code)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        self._assert_cluster_states(cluster_id, [\u0027NONE\u0027])"},{"line_number":195,"context_line":"        cluster \u003d self.auth_client.clusters.get(cluster_id)"},{"line_number":196,"context_line":"        self.assert_equal("},{"line_number":197,"context_line":"            len(removed_instance_names),"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_6c45e1b1","line":194,"updated":"2016-01-07 17:24:39.000000000","message":"Just wondering, why did we have to move this? It seems to me like it should not make any difference.","commit_id":"c1342c8ffbd8c5eefecff541e61b8fe868199ffb"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"1596eee70bfbee1de0811aa143bbf57ffff9d656","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        self._assert_cluster_action(cluster_id, expected_task_name,"},{"line_number":192,"context_line":"                                    expected_http_code)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        self._assert_cluster_states(cluster_id, [\u0027NONE\u0027])"},{"line_number":195,"context_line":"        cluster \u003d self.auth_client.clusters.get(cluster_id)"},{"line_number":196,"context_line":"        self.assert_equal("},{"line_number":197,"context_line":"            len(removed_instance_names),"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_c9f8714c","line":194,"in_reply_to":"fa69d971_6c45e1b1","updated":"2016-01-07 22:33:27.000000000","message":"So the cluster shrink call is asynchronous where the instance is not immediately removed from the cluster. \n\nThe issue is that the shrink cluster returns the list of instances of the cluster. The delete of the instance is in progress and still exists in the cluster instances list. The instance is not expected to be out of the cluster show call until the task of the SHRINKING_CLUSTER is completed.\n\nBelow the test to verify that the instance is not in the cluster object fails.","commit_id":"c1342c8ffbd8c5eefecff541e61b8fe868199ffb"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"beade6100fcecf873245f842d98d536664ec9f6c","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        self._assert_cluster_action(cluster_id, expected_task_name,"},{"line_number":192,"context_line":"                                    expected_http_code)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        self._assert_cluster_states(cluster_id, [\u0027NONE\u0027])"},{"line_number":195,"context_line":"        cluster \u003d self.auth_client.clusters.get(cluster_id)"},{"line_number":196,"context_line":"        self.assert_equal("},{"line_number":197,"context_line":"            len(removed_instance_names),"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_3a5a51f3","line":194,"updated":"2016-01-09 01:21:43.000000000","message":"Hmm, I guess it makes sense. Just wondering if we should do the same thing in assert_cluster_grow.","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"2202bd68f385eede749f0a170964aa5b1282d4eb","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        self._assert_cluster_action(cluster_id, expected_task_name,"},{"line_number":192,"context_line":"                                    expected_http_code)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        self._assert_cluster_states(cluster_id, [\u0027NONE\u0027])"},{"line_number":195,"context_line":"        cluster \u003d self.auth_client.clusters.get(cluster_id)"},{"line_number":196,"context_line":"        self.assert_equal("},{"line_number":197,"context_line":"            len(removed_instance_names),"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_d7aad870","line":194,"in_reply_to":"fa69d971_3a5a51f3","updated":"2016-01-11 05:02:28.000000000","message":"No, its not needed because the cluster has the instance added to the list at time of create. (its added to the database synchronously but not removed synchronously.) We are testing there that the number of instances grown is correct after the grow call. I dont see this as an issue.","commit_id":"8198e368e8f6a9b517a7fe4adc8570f9be82471f"}],"trove/tests/unittests/cluster/test_pxc_cluster.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"47464d4d66b5d497c19063570be9b51e91cc1f6b","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            mock_db_create.return_value.id)"},{"line_number":216,"context_line":"        self.assertEqual(3, mock_ins_create.call_count)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    @patch.object(inst_models.Instance, \u0027create\u0027)"},{"line_number":219,"context_line":"    @patch.object(DBCluster, \u0027create\u0027)"},{"line_number":220,"context_line":"    @patch.object(task_api, \u0027load\u0027)"},{"line_number":221,"context_line":"    @patch.object(QUOTAS, \u0027check_quotas\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_f305a479","side":"PARENT","line":218,"range":{"start_line":218,"start_character":47,"end_line":218,"end_character":49},"updated":"2016-01-22 22:10:09.000000000","message":"why are we getting rid of this test","commit_id":"5cb2a740cf4378e91d3e3b5b430a7f60f17f33b5"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"3d6140079f3e745f50e3e9928a6c1c1a6e46fb83","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            mock_db_create.return_value.id)"},{"line_number":216,"context_line":"        self.assertEqual(3, mock_ins_create.call_count)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    @patch.object(inst_models.Instance, \u0027create\u0027)"},{"line_number":219,"context_line":"    @patch.object(DBCluster, \u0027create\u0027)"},{"line_number":220,"context_line":"    @patch.object(task_api, \u0027load\u0027)"},{"line_number":221,"context_line":"    @patch.object(QUOTAS, \u0027check_quotas\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_b513ceb7","side":"PARENT","line":218,"range":{"start_line":218,"start_character":47,"end_line":218,"end_character":49},"in_reply_to":"9a68dd71_f305a479","updated":"2016-01-28 20:32:30.000000000","message":"Because there is no upper limit of how many instances you can create. If we test that you can create 3 instances there is no difference that 4 instances were created. After looking at this unit test it wasnt doing anything useful.","commit_id":"5cb2a740cf4378e91d3e3b5b430a7f60f17f33b5"}]}
