)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"06feabfdeb5ea91056c43f13d8c5860c4d8ba581","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Co-Authored-By: rumale \u003crumale@ebaysf.com\u003e"},{"line_number":14,"context_line":"Co-Authored-By: Timothy He \u003cthe@ebaysf.com\u003e"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Partially implements: blueprint clustering"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Icab6fc3baab72e97f3231eaa4476b56b8dafb2a3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"fa98f980_85deb70f","line":16,"updated":"2014-09-02 23:28:28.000000000","message":"If you have to respin this for any reason, (or any one of the other three patches), please stick a DocImpact keyword on some one of them.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"}],"etc/trove/trove.conf.sample":[{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"5dcf23ff588f6bbcb95995a29576d02f49606e2e","unresolved":false,"context_lines":[{"line_number":216,"context_line":"tcp_ports \u003d 2500, 27017"},{"line_number":217,"context_line":"volume_support \u003d True"},{"line_number":218,"context_line":"device_path \u003d /dev/vdb"},{"line_number":219,"context_line":"num_config_servers_per_cluster \u003d 1"},{"line_number":220,"context_line":"num_query_routers_per_cluster \u003d 1"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"1abeadc6_35064821","line":219,"updated":"2014-08-26 20:48:09.000000000","message":"My understanding is that the user should never use less than 3 config servers, so should we default to 3 then override for tests?","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"2e51cf5a11625058456f262ea8f2813e1db87afa","unresolved":false,"context_lines":[{"line_number":209,"context_line":"device_path \u003d /dev/vdb"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"[mongodb]"},{"line_number":212,"context_line":"tcp_ports \u003d 2500, 27017"},{"line_number":213,"context_line":"volume_support \u003d True"},{"line_number":214,"context_line":"device_path \u003d /dev/vdb"},{"line_number":215,"context_line":"num_config_servers_per_cluster \u003d 1"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"fa98f980_3fcee5b4","line":212,"updated":"2014-09-03 11:26:04.000000000","message":"no one appears to use this value ;)","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"3a9cb033ab6ab35c49f8524a7d2b13d0057b428f","unresolved":false,"context_lines":[{"line_number":209,"context_line":"device_path \u003d /dev/vdb"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"[mongodb]"},{"line_number":212,"context_line":"tcp_ports \u003d 2500, 27017"},{"line_number":213,"context_line":"volume_support \u003d True"},{"line_number":214,"context_line":"device_path \u003d /dev/vdb"},{"line_number":215,"context_line":"num_config_servers_per_cluster \u003d 1"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"fa98f980_7c43dbae","line":212,"in_reply_to":"fa98f980_3fcee5b4","updated":"2014-09-04 22:50:02.000000000","message":"not sure i understand the comment?","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"}],"trove/backup/models.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bc24fdc61f6016ed19c0b620b297a54a794a69f6","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            cls.validate_can_perform_action("},{"line_number":81,"context_line":"                instance_model, \u0027backup_create\u0027)"},{"line_number":82,"context_line":"            cls.verify_swift_auth_token(context)"},{"line_number":83,"context_line":"            if instance_model.cluster_id is not None:"},{"line_number":84,"context_line":"                raise exception.ClusterInstanceOperationNotSupported()"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            ds \u003d instance_model.datastore"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_8c5e2d75","line":83,"updated":"2014-08-15 14:29:42.000000000","message":"i agree that this one is required, but, it seems like it partial fix for backup workflow, i\u0027d suggest to leave it as is because it\u0027s up to user to decide how he wants to take a backup. We shouldn\u0027t block them from it, for example, if we\u0027re talking about Cassandra cluster it\u0027s valid to take a backup from single node.\nAnd we should stop supporting backuping of a single node that is a part of cluster once we would provide a backup of a cluster.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a7ae4074c7b77ed34bbdb87820c512c84da5e8f1","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            cls.validate_can_perform_action("},{"line_number":81,"context_line":"                instance_model, \u0027backup_create\u0027)"},{"line_number":82,"context_line":"            cls.verify_swift_auth_token(context)"},{"line_number":83,"context_line":"            if instance_model.cluster_id is not None:"},{"line_number":84,"context_line":"                raise exception.ClusterInstanceOperationNotSupported()"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            ds \u003d instance_model.datastore"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_c5f3889c","line":83,"in_reply_to":"7ac7a964_8c5e2d75","updated":"2014-08-15 23:04:22.000000000","message":"agreed that, for some datastores, a per node backup is completely sensical. however, with this implementation and first pass, we do not explicitly want to support per node mongodb backups (because by permitting it, we\u0027re implicitly telling users that it works). once it\u0027s certified that it works, and accompanying tests are written, this logic can be amended. if you happen to push a cassandra cluster implementation, you are completely free to amend this to pass-thru for cassandra datastore versions.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ebdcaa0c01b577884da3606b7f4c9d33b15e868f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            cls.validate_can_perform_action("},{"line_number":81,"context_line":"                instance_model, \u0027backup_create\u0027)"},{"line_number":82,"context_line":"            cls.verify_swift_auth_token(context)"},{"line_number":83,"context_line":"            if instance_model.cluster_id is not None:"},{"line_number":84,"context_line":"                raise exception.ClusterInstanceOperationNotSupported()"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            ds \u003d instance_model.datastore"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_91c8e675","line":83,"updated":"2014-08-27 14:56:48.000000000","message":"According to previous comments (see #8), what if we would introduce config-deriven flag that would tell if backuping of a single node is allowed for this datastore?\n\nBenefits:\nwe would deal with single node backuping once and for all.","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f396529b0fb35a2bebe073086f89507307544b65","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            cls.validate_can_perform_action("},{"line_number":81,"context_line":"                instance_model, \u0027backup_create\u0027)"},{"line_number":82,"context_line":"            cls.verify_swift_auth_token(context)"},{"line_number":83,"context_line":"            if instance_model.cluster_id is not None:"},{"line_number":84,"context_line":"                raise exception.ClusterInstanceOperationNotSupported()"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            ds \u003d instance_model.datastore"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_4903f50f","line":83,"in_reply_to":"1abeadc6_91c8e675","updated":"2014-08-27 18:34:11.000000000","message":"as mentioned in my prior reply: i agree with your approach, but that code only needs to be introduced when the functionality is needed. within the context of this review, we very specifically do not want to support single node backups for mongodb clusters until the backup strategy is thought through holistically.","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"}],"trove/cluster/models.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            clazz \u003d strategy.load_api_strategy(manager).cluster_class"},{"line_number":112,"context_line":"        return clazz(context, db_info)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def update_db(self, **values):"},{"line_number":115,"context_line":"        self.db_info \u003d DBCluster.find_by(id\u003dself.id, deleted\u003dFalse)"},{"line_number":116,"context_line":"        for key in values:"},{"line_number":117,"context_line":"            setattr(self.db_info, key, values[key])"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_7a17f546","line":114,"updated":"2014-08-13 09:14:33.000000000","message":"seems like most of this methods are common with BaseInstance, SimpleInstance, etc. So, i\u0027d suggest to refactor this code and extract common code to base model class.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            clazz \u003d strategy.load_api_strategy(manager).cluster_class"},{"line_number":112,"context_line":"        return clazz(context, db_info)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def update_db(self, **values):"},{"line_number":115,"context_line":"        self.db_info \u003d DBCluster.find_by(id\u003dself.id, deleted\u003dFalse)"},{"line_number":116,"context_line":"        for key in values:"},{"line_number":117,"context_line":"            setattr(self.db_info, key, values[key])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_fa4a45ab","line":114,"in_reply_to":"baada198_7a17f546","updated":"2014-08-13 20:14:18.000000000","message":"in general, most models have some sort of update/save, as well as load(s), and it\u0027d be unadvisable to merge all of those into a common piece of code, so i\u0027d disagree here.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def delete(self):"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        if self.db_info.task_status not in (ClusterTasks.NONE,"},{"line_number":186,"context_line":"                                            ClusterTasks.DELETING):"},{"line_number":187,"context_line":"            current_task \u003d self.db_info.task_status.name"},{"line_number":188,"context_line":"            msg \u003d _(\"This action cannot be performed on the cluster while \""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_34aaf41b","line":185,"updated":"2014-08-13 09:14:33.000000000","message":"and BUILDING of course","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6a70872536c6bee2ca8aab439df8c92da353522c","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def delete(self):"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        if self.db_info.task_status not in (ClusterTasks.NONE,"},{"line_number":186,"context_line":"                                            ClusterTasks.DELETING):"},{"line_number":187,"context_line":"            current_task \u003d self.db_info.task_status.name"},{"line_number":188,"context_line":"            msg \u003d _(\"This action cannot be performed on the cluster while \""}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_66fea06d","line":185,"in_reply_to":"9ab29df4_7a49d58a","updated":"2014-08-13 21:07:15.000000000","message":"oh, sorry, true, missed \"not\"","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def delete(self):"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        if self.db_info.task_status not in (ClusterTasks.NONE,"},{"line_number":186,"context_line":"                                            ClusterTasks.DELETING):"},{"line_number":187,"context_line":"            current_task \u003d self.db_info.task_status.name"},{"line_number":188,"context_line":"            msg \u003d _(\"This action cannot be performed on the cluster while \""}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_7a49d58a","line":185,"in_reply_to":"baada198_34aaf41b","updated":"2014-08-13 20:14:18.000000000","message":"i think you missed the \"not\" here. this will only permit a cluster-delete if the status is none or deleting, meaning we will block if it\u0027s in building (as we should)","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0d57e2c11f086a5b138c0cda1a8d8a66d55244","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            msg \u003d _(\"This action cannot be performed on the cluster while \""},{"line_number":189,"context_line":"                    \"the current cluster task is \u0027%s\u0027.\") % current_task"},{"line_number":190,"context_line":"            LOG.error(msg)"},{"line_number":191,"context_line":"            raise exception.UnprocessableEntity(msg)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        db_insts \u003d inst_models.DBInstance.find_all(cluster_id\u003dself.id,"},{"line_number":194,"context_line":"                                                   deleted\u003dFalse).all()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_91266769","line":191,"updated":"2014-08-13 12:56:13.000000000","message":"After certain researches i came into next:\nHTTP 402 is not what we should raise here (HTTP 422. The request was well-formed but was unable to be followed due to semantic errors - taken from HTTP 1.1 RFC).\nThis looks more like HTTP 403 - request forbidden but can be repeated - this type of exception looks more meaningful here, since we doesn\u0027t allow to delete cluster until it\u0027s in one of described states, but we can try again once status is changed.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"6d9a3cbc53cec55f7f77dc4395031385918f14fb","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            msg \u003d _(\"This action cannot be performed on the cluster while \""},{"line_number":189,"context_line":"                    \"the current cluster task is \u0027%s\u0027.\") % current_task"},{"line_number":190,"context_line":"            LOG.error(msg)"},{"line_number":191,"context_line":"            raise exception.UnprocessableEntity(msg)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        db_insts \u003d inst_models.DBInstance.find_all(cluster_id\u003dself.id,"},{"line_number":194,"context_line":"                                                   deleted\u003dFalse).all()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac7a964_3fee6b23","line":191,"in_reply_to":"baada198_91266769","updated":"2014-08-13 23:04:48.000000000","message":"academically, i agree with you; but all across the trove code-base UnprocessableEntity is used for these kind of scenarios; so it makes more sense to be consistent than to be right.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            inst_models.DetailInstance, context, instance_id, cluster_id)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"def is_cluster_deleting(context, cluster_id):"},{"line_number":211,"context_line":"    cluster \u003d Cluster.load(context, cluster_id)"},{"line_number":212,"context_line":"    return cluster.db_info.task_status \u003d\u003d ClusterTasks.DELETING"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_1a57d902","line":210,"updated":"2014-08-13 09:14:33.000000000","message":"why can\u0027t this method be a part of Cluster class ?","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"6d9a3cbc53cec55f7f77dc4395031385918f14fb","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            inst_models.DetailInstance, context, instance_id, cluster_id)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"def is_cluster_deleting(context, cluster_id):"},{"line_number":211,"context_line":"    cluster \u003d Cluster.load(context, cluster_id)"},{"line_number":212,"context_line":"    return cluster.db_info.task_status \u003d\u003d ClusterTasks.DELETING"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac7a964_9fdcdf76","line":210,"in_reply_to":"9ab29df4_7d254faa","updated":"2014-08-13 23:04:48.000000000","message":"actually, this is imported dynamically by another class to avoid a circular dependency, so i can\u0027t.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            inst_models.DetailInstance, context, instance_id, cluster_id)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"def is_cluster_deleting(context, cluster_id):"},{"line_number":211,"context_line":"    cluster \u003d Cluster.load(context, cluster_id)"},{"line_number":212,"context_line":"    return cluster.db_info.task_status \u003d\u003d ClusterTasks.DELETING"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_7d254faa","line":210,"in_reply_to":"baada198_1a57d902","updated":"2014-08-13 20:14:18.000000000","message":"sure, will do.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        raise exception.VolumeQuotaExceeded(msg)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def manager_from_cluster_id(context, cluster_id):"},{"line_number":228,"context_line":"    db_info \u003d DBCluster.find_by(context\u003dcontext, id\u003dcluster_id, deleted\u003dFalse)"},{"line_number":229,"context_line":"    ds_version \u003d (datastore_models.DatastoreVersion."},{"line_number":230,"context_line":"                  load_by_uuid(db_info.datastore_version_id))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_da73a1b1","line":227,"updated":"2014-08-13 09:14:33.000000000","message":"same here, why can\u0027t be a part of Cluster class ?","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6a70872536c6bee2ca8aab439df8c92da353522c","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        raise exception.VolumeQuotaExceeded(msg)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def manager_from_cluster_id(context, cluster_id):"},{"line_number":228,"context_line":"    db_info \u003d DBCluster.find_by(context\u003dcontext, id\u003dcluster_id, deleted\u003dFalse)"},{"line_number":229,"context_line":"    ds_version \u003d (datastore_models.DatastoreVersion."},{"line_number":230,"context_line":"                  load_by_uuid(db_info.datastore_version_id))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_8603b472","line":227,"in_reply_to":"9ab29df4_fd307fea","updated":"2014-08-13 21:07:15.000000000","message":"i\u0027m ok with static method.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0d57e2c11f086a5b138c0cda1a8d8a66d55244","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        raise exception.VolumeQuotaExceeded(msg)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def manager_from_cluster_id(context, cluster_id):"},{"line_number":228,"context_line":"    db_info \u003d DBCluster.find_by(context\u003dcontext, id\u003dcluster_id, deleted\u003dFalse)"},{"line_number":229,"context_line":"    ds_version \u003d (datastore_models.DatastoreVersion."},{"line_number":230,"context_line":"                  load_by_uuid(db_info.datastore_version_id))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f1aa4383","line":227,"in_reply_to":"baada198_da73a1b1","updated":"2014-08-13 12:56:13.000000000","message":"It can be one of the properties of Cluster class","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        raise exception.VolumeQuotaExceeded(msg)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def manager_from_cluster_id(context, cluster_id):"},{"line_number":228,"context_line":"    db_info \u003d DBCluster.find_by(context\u003dcontext, id\u003dcluster_id, deleted\u003dFalse)"},{"line_number":229,"context_line":"    ds_version \u003d (datastore_models.DatastoreVersion."},{"line_number":230,"context_line":"                  load_by_uuid(db_info.datastore_version_id))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_fd307fea","line":227,"in_reply_to":"baada198_f1aa4383","updated":"2014-08-13 20:14:18.000000000","message":"could be a staticmethod, but see no need for it to be a property.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"05a28a5f3dc0f8672b56ff8df12a609267daa51e","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        return ret, next_marker"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @classmethod"},{"line_number":101,"context_line":"    def load(cls, context, cluster_id, clazz\u003dNone):"},{"line_number":102,"context_line":"        try:"},{"line_number":103,"context_line":"            db_info \u003d DBCluster.find_by(context\u003dcontext, id\u003dcluster_id,"},{"line_number":104,"context_line":"                                        deleted\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_56d2775c","line":101,"updated":"2014-08-21 20:35:30.000000000","message":"Just a nit, but typically the kwarg for a class is written \u0027klass\u0027 in most python libs.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"02d5ca4bb5f1263730666502e6318a6af3f12562","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        return ret, next_marker"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @classmethod"},{"line_number":101,"context_line":"    def load(cls, context, cluster_id, clazz\u003dNone):"},{"line_number":102,"context_line":"        try:"},{"line_number":103,"context_line":"            db_info \u003d DBCluster.find_by(context\u003dcontext, id\u003dcluster_id,"},{"line_number":104,"context_line":"                                        deleted\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_1549b030","line":101,"in_reply_to":"1abeadc6_56d2775c","updated":"2014-08-22 18:38:05.000000000","message":"I like this point. This should be changed not to a corrupted spelling or abbreviation or trailing underscore, but to cluster_class.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"5dcf23ff588f6bbcb95995a29576d02f49606e2e","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            db_info \u003d DBCluster.find_by(context\u003dcontext, id\u003dcluster_id,"},{"line_number":104,"context_line":"                                        deleted\u003dFalse)"},{"line_number":105,"context_line":"        except exception.ModelNotFoundError:"},{"line_number":106,"context_line":"            raise exception.ClusterNotFound(cluster\u003dcluster_id)"},{"line_number":107,"context_line":"        if not clazz:"},{"line_number":108,"context_line":"            ds_version \u003d (datastore_models.DatastoreVersion."},{"line_number":109,"context_line":"                          load_by_uuid(db_info.datastore_version_id))"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_733b6eeb","line":106,"updated":"2014-08-26 20:48:09.000000000","message":"Does ModelNotFoundError not tell the id?  Is it worth discarding the original exception just to rename the id?","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bc24fdc61f6016ed19c0b620b297a54a794a69f6","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        return ds_version.manager"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"def is_cluster_deleting(context, cluster_id):"},{"line_number":219,"context_line":"    cluster \u003d Cluster.load(context, cluster_id)"},{"line_number":220,"context_line":"    return cluster.db_info.task_status \u003d\u003d ClusterTasks.DELETING"},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_6c6e3103","line":218,"updated":"2014-08-15 14:29:42.000000000","message":"can be a class method of Cluster class.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a7ae4074c7b77ed34bbdb87820c512c84da5e8f1","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        return ds_version.manager"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"def is_cluster_deleting(context, cluster_id):"},{"line_number":219,"context_line":"    cluster \u003d Cluster.load(context, cluster_id)"},{"line_number":220,"context_line":"    return cluster.db_info.task_status \u003d\u003d ClusterTasks.DELETING"},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_a53bec36","line":218,"in_reply_to":"7ac7a964_6c6e3103","updated":"2014-08-15 23:04:22.000000000","message":"mentioned in the earlier reply why this isn\u0027t possible (dynamic import).","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"}],"trove/cluster/service.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            action_schema \u003d cls.get_action_schema(body, action_schema)"},{"line_number":57,"context_line":"        return action_schema"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def action(self, req, body, tenant_id, id):"},{"line_number":60,"context_line":"        LOG.debug(\"Committing Action Against Cluster for \""},{"line_number":61,"context_line":"                  \"Tenant \u0027%s\u0027\" % tenant_id)"},{"line_number":62,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_747b8cbf","line":59,"updated":"2014-08-13 09:14:33.000000000","message":"As i can recall, was made a certain dessicion(agains instance, of course) to use plain methods for each API request and do not use action at all. I think we should simplify this code and avoid use of actions.\n\nSame of mgmt API","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6a70872536c6bee2ca8aab439df8c92da353522c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            action_schema \u003d cls.get_action_schema(body, action_schema)"},{"line_number":57,"context_line":"        return action_schema"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def action(self, req, body, tenant_id, id):"},{"line_number":60,"context_line":"        LOG.debug(\"Committing Action Against Cluster for \""},{"line_number":61,"context_line":"                  \"Tenant \u0027%s\u0027\" % tenant_id)"},{"line_number":62,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_863ad434","line":59,"in_reply_to":"9ab29df4_3d875763","updated":"2014-08-13 21:07:15.000000000","message":"if that\u0027s the case, i\u0027m ok with that.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            action_schema \u003d cls.get_action_schema(body, action_schema)"},{"line_number":57,"context_line":"        return action_schema"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def action(self, req, body, tenant_id, id):"},{"line_number":60,"context_line":"        LOG.debug(\"Committing Action Against Cluster for \""},{"line_number":61,"context_line":"                  \"Tenant \u0027%s\u0027\" % tenant_id)"},{"line_number":62,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_3d875763","line":59,"in_reply_to":"baada198_747b8cbf","updated":"2014-08-13 20:14:18.000000000","message":"the mapper is mapping POST /clusters/:id to this action method, we\u0027re not doing POST /clusters/:id/action (as you mentioned, we all agreed not to do that). we still need to parse the action out of the payload however, hence this method.\n\nthe only other alternative would be to have /clusters/:id/add_shard, /clusters/:id/add_node, etc. this quickly explodes out of control, and introduces very datastore-centric uris.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        context \u003d req.environ[wsgi.CONTEXT_KEY]"},{"line_number":115,"context_line":"        cluster \u003d models.Cluster.load(context, id)"},{"line_number":116,"context_line":"        cluster.delete()"},{"line_number":117,"context_line":"        return wsgi.Result(None, 202)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def index(self, req, tenant_id):"},{"line_number":120,"context_line":"        \"\"\"Return a list of clusters.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f40cfc46","line":117,"updated":"2014-08-13 09:14:33.000000000","message":"should be 204 No Content.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        context \u003d req.environ[wsgi.CONTEXT_KEY]"},{"line_number":115,"context_line":"        cluster \u003d models.Cluster.load(context, id)"},{"line_number":116,"context_line":"        cluster.delete()"},{"line_number":117,"context_line":"        return wsgi.Result(None, 202)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def index(self, req, tenant_id):"},{"line_number":120,"context_line":"        \"\"\"Return a list of clusters.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_bdc0c77d","line":117,"in_reply_to":"baada198_f40cfc46","updated":"2014-08-13 20:14:18.000000000","message":"this triggers the deletion of the instances that are a part of the cluster, which isn\u0027t instantaneous (and the cluster only marks itself as deleted once the instances are successfully deleted), hence it should remain a 202.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0d57e2c11f086a5b138c0cda1a8d8a66d55244","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def create(self, req, body, tenant_id):"},{"line_number":136,"context_line":"        LOG.debug(\"Creating a Cluster for Tenant \u0027%s\u0027\" % tenant_id)"},{"line_number":137,"context_line":"        LOG.info(logging.mask_password(_(\"req : \u0027%s\u0027\\n\\n\") % req))"},{"line_number":138,"context_line":"        LOG.info(logging.mask_password(_(\"body : \u0027%s\u0027\\n\\n\") % body))"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        context \u003d req.environ[wsgi.CONTEXT_KEY]"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d1f8df80","line":137,"updated":"2014-08-13 12:56:13.000000000","message":"does body or request contain any passwords when create called?","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def create(self, req, body, tenant_id):"},{"line_number":136,"context_line":"        LOG.debug(\"Creating a Cluster for Tenant \u0027%s\u0027\" % tenant_id)"},{"line_number":137,"context_line":"        LOG.info(logging.mask_password(_(\"req : \u0027%s\u0027\\n\\n\") % req))"},{"line_number":138,"context_line":"        LOG.info(logging.mask_password(_(\"body : \u0027%s\u0027\\n\\n\") % body))"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        context \u003d req.environ[wsgi.CONTEXT_KEY]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_1d04537d","line":137,"in_reply_to":"baada198_d1f8df80","updated":"2014-08-13 20:14:18.000000000","message":"good catch, will remove.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0d57e2c11f086a5b138c0cda1a8d8a66d55244","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        if not clusters_enabled:"},{"line_number":153,"context_line":"            message \u003d _(\"Clusters not supported for %(ds)s-%(ds_v)s.\") % ("},{"line_number":154,"context_line":"                {\u0027ds\u0027: datastore.name, \u0027ds_v\u0027: datastore_version.name})"},{"line_number":155,"context_line":"            raise exception.TroveError(message)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        nodes \u003d body[\u0027cluster\u0027][\u0027instances\u0027]"},{"line_number":158,"context_line":"        instances \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_311d9bc0","line":155,"updated":"2014-08-13 12:56:13.000000000","message":"you\u0027ve added exception ClusterOperationNotSupported and you should use it here too, because at client side user will see HTTP 400 instead of 501.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6a70872536c6bee2ca8aab439df8c92da353522c","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        if not clusters_enabled:"},{"line_number":153,"context_line":"            message \u003d _(\"Clusters not supported for %(ds)s-%(ds_v)s.\") % ("},{"line_number":154,"context_line":"                {\u0027ds\u0027: datastore.name, \u0027ds_v\u0027: datastore_version.name})"},{"line_number":155,"context_line":"            raise exception.TroveError(message)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        nodes \u003d body[\u0027cluster\u0027][\u0027instances\u0027]"},{"line_number":158,"context_line":"        instances \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_868814e9","line":155,"in_reply_to":"9ab29df4_3d303756","updated":"2014-08-13 21:07:15.000000000","message":"I just pointed out that you\u0027ve already proposed one type of exceptions. So, glad that we agreed.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        if not clusters_enabled:"},{"line_number":153,"context_line":"            message \u003d _(\"Clusters not supported for %(ds)s-%(ds_v)s.\") % ("},{"line_number":154,"context_line":"                {\u0027ds\u0027: datastore.name, \u0027ds_v\u0027: datastore_version.name})"},{"line_number":155,"context_line":"            raise exception.TroveError(message)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        nodes \u003d body[\u0027cluster\u0027][\u0027instances\u0027]"},{"line_number":158,"context_line":"        instances \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_3d303756","line":155,"in_reply_to":"baada198_311d9bc0","updated":"2014-08-13 20:14:18.000000000","message":"agreed we should throw a specific exception, but not the one you mentioned (because the message is misleading/wrong).","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"05a28a5f3dc0f8672b56ff8df12a609267daa51e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from trove.datastore import models as datastore_models"},{"line_number":27,"context_line":"from trove.openstack.common import log as logging"},{"line_number":28,"context_line":"from trove.openstack.common.gettextutils import _"},{"line_number":29,"context_line":"import trove.common.apischema as apischema"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_166abf80","line":29,"updated":"2014-08-21 20:35:30.000000000","message":"Another nit, why isn\u0027t this just from trove.common import apischema","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"02d5ca4bb5f1263730666502e6318a6af3f12562","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from trove.datastore import models as datastore_models"},{"line_number":27,"context_line":"from trove.openstack.common import log as logging"},{"line_number":28,"context_line":"from trove.openstack.common.gettextutils import _"},{"line_number":29,"context_line":"import trove.common.apischema as apischema"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_f5cc346c","line":29,"in_reply_to":"1abeadc6_166abf80","updated":"2014-08-22 18:38:05.000000000","message":"+1","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bc24fdc61f6016ed19c0b620b297a54a794a69f6","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            instance, req\u003dreq).data(), 200)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def delete(self, req, tenant_id, id):"},{"line_number":103,"context_line":"        \"\"\"Delete a single cluster.\"\"\""},{"line_number":104,"context_line":"        LOG.info(_(\"Deleting a Cluster for Tenant \u0027%s\u0027\") % tenant_id)"},{"line_number":105,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":106,"context_line":"        LOG.info(_(\"id : \u0027%s\u0027\\n\\n\") % id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_8c3f0dd6","line":103,"updated":"2014-08-15 14:29:42.000000000","message":"would be better to delete word - single.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a7ae4074c7b77ed34bbdb87820c512c84da5e8f1","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            instance, req\u003dreq).data(), 200)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def delete(self, req, tenant_id, id):"},{"line_number":103,"context_line":"        \"\"\"Delete a single cluster.\"\"\""},{"line_number":104,"context_line":"        LOG.info(_(\"Deleting a Cluster for Tenant \u0027%s\u0027\") % tenant_id)"},{"line_number":105,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":106,"context_line":"        LOG.info(_(\"id : \u0027%s\u0027\\n\\n\") % id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_2517dca4","line":103,"in_reply_to":"7ac7a964_8c3f0dd6","updated":"2014-08-15 23:04:22.000000000","message":"i suppose (no harm no foul, don\u0027t feel strongly enough to rebuke this request).","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ebdcaa0c01b577884da3606b7f4c9d33b15e868f","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def delete(self, req, tenant_id, id):"},{"line_number":103,"context_line":"        \"\"\"Delete a cluster.\"\"\""},{"line_number":104,"context_line":"        LOG.info(_(\"Deleting a Cluster for Tenant \u0027%s\u0027\") % tenant_id)"},{"line_number":105,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":106,"context_line":"        LOG.info(_(\"id : \u0027%s\u0027\\n\\n\") % id)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_1184d6d2","line":104,"updated":"2014-08-27 14:56:48.000000000","message":"taking into account all previou comments methods, this logging call should come with DEBUG level, right?","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f396529b0fb35a2bebe073086f89507307544b65","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def delete(self, req, tenant_id, id):"},{"line_number":103,"context_line":"        \"\"\"Delete a cluster.\"\"\""},{"line_number":104,"context_line":"        LOG.info(_(\"Deleting a Cluster for Tenant \u0027%s\u0027\") % tenant_id)"},{"line_number":105,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":106,"context_line":"        LOG.info(_(\"id : \u0027%s\u0027\\n\\n\") % id)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_ac2c979a","line":104,"in_reply_to":"1abeadc6_1184d6d2","updated":"2014-08-27 18:34:11.000000000","message":"fair point. i\u0027ll fix that here and for show_instance.","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"06feabfdeb5ea91056c43f13d8c5860c4d8ba581","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def action(self, req, body, tenant_id, id):"},{"line_number":54,"context_line":"        LOG.debug(\"Committing Action Against Cluster for \""},{"line_number":55,"context_line":"                  \"Tenant \u0027%s\u0027\" % tenant_id)"},{"line_number":56,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":57,"context_line":"        LOG.info(_(\"id : \u0027%s\u0027\\n\\n\") % id)"},{"line_number":58,"context_line":"        if not body:"},{"line_number":59,"context_line":"            raise exception.BadRequest(_(\"Invalid request body.\"))"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_20ac1935","line":56,"updated":"2014-09-02 23:28:28.000000000","message":"I\u0027m not wild about these blank lines you are forcing here ...","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"3a9cb033ab6ab35c49f8524a7d2b13d0057b428f","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def action(self, req, body, tenant_id, id):"},{"line_number":54,"context_line":"        LOG.debug(\"Committing Action Against Cluster for \""},{"line_number":55,"context_line":"                  \"Tenant \u0027%s\u0027\" % tenant_id)"},{"line_number":56,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":57,"context_line":"        LOG.info(_(\"id : \u0027%s\u0027\\n\\n\") % id)"},{"line_number":58,"context_line":"        if not body:"},{"line_number":59,"context_line":"            raise exception.BadRequest(_(\"Invalid request body.\"))"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_bc31c35b","line":56,"in_reply_to":"fa98f980_20ac1935","updated":"2014-09-04 22:50:02.000000000","message":"if it ain\u0027t in pep8 or gated against, we\u0027re all good ;)","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"06feabfdeb5ea91056c43f13d8c5860c4d8ba581","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def create(self, req, body, tenant_id):"},{"line_number":130,"context_line":"        LOG.debug(\"Creating a Cluster for Tenant \u0027%s\u0027\" % tenant_id)"},{"line_number":131,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":132,"context_line":"        LOG.info(_(\"body : \u0027%s\u0027\\n\\n\") % body)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        context \u003d req.environ[wsgi.CONTEXT_KEY]"},{"line_number":135,"context_line":"        name \u003d body[\u0027cluster\u0027][\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_202179b4","line":132,"updated":"2014-09-02 23:28:28.000000000","message":"I\u0027m assuming there\u0027s nothing sensitive in here.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"3a9cb033ab6ab35c49f8524a7d2b13d0057b428f","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def create(self, req, body, tenant_id):"},{"line_number":130,"context_line":"        LOG.debug(\"Creating a Cluster for Tenant \u0027%s\u0027\" % tenant_id)"},{"line_number":131,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":132,"context_line":"        LOG.info(_(\"body : \u0027%s\u0027\\n\\n\") % body)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        context \u003d req.environ[wsgi.CONTEXT_KEY]"},{"line_number":135,"context_line":"        name \u003d body[\u0027cluster\u0027][\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_3cf6b38f","line":132,"in_reply_to":"fa98f980_202179b4","updated":"2014-09-04 22:50:02.000000000","message":"nothing sensitive.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"}],"trove/cluster/tasks.py":[{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"05a28a5f3dc0f8672b56ff8df12a609267daa51e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def __eq__(self, other):"},{"line_number":42,"context_line":"        if not isinstance(other, ClusterTask):"},{"line_number":43,"context_line":"            return False"},{"line_number":44,"context_line":"        return self._description \u003d\u003d other._description"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @classmethod"},{"line_number":47,"context_line":"    def from_code(cls, code):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_36717b44","line":44,"updated":"2014-08-21 20:35:30.000000000","message":"shouldn\u0027t the check be on self._code not description?","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"02d5ca4bb5f1263730666502e6318a6af3f12562","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def __eq__(self, other):"},{"line_number":42,"context_line":"        if not isinstance(other, ClusterTask):"},{"line_number":43,"context_line":"            return False"},{"line_number":44,"context_line":"        return self._description \u003d\u003d other._description"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @classmethod"},{"line_number":47,"context_line":"    def from_code(cls, code):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_953220a5","line":44,"in_reply_to":"1abeadc6_36717b44","updated":"2014-08-22 18:38:05.000000000","message":"+1","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"5dcf23ff588f6bbcb95995a29576d02f49606e2e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    ADDING_SHARD \u003d ClusterTask("},{"line_number":67,"context_line":"        0x04, \u0027ADDING_SHARD\u0027, \u0027Adding a shard to the cluster.\u0027)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"# Dissuade further additions at run-time."},{"line_number":70,"context_line":"ClusterTask.__init__ \u003d None"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_a1713079","line":69,"updated":"2014-08-26 20:48:09.000000000","message":"Why?  Presumably anyone who could add to ClusterTasks could also just redefine __init__, so what is being achieved here?","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"06feabfdeb5ea91056c43f13d8c5860c4d8ba581","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        0x02, \u0027BUILDING\u0027, \u0027Building the initial cluster.\u0027)"},{"line_number":65,"context_line":"    DELETING \u003d ClusterTask(0x03, \u0027DELETING\u0027, \u0027Deleting the cluster.\u0027)"},{"line_number":66,"context_line":"    ADDING_SHARD \u003d ClusterTask("},{"line_number":67,"context_line":"        0x04, \u0027ADDING_SHARD\u0027, \u0027Adding a shard to the cluster.\u0027)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"# Dissuade further additions at run-time."},{"line_number":70,"context_line":"ClusterTask.__init__ \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_e21e965e","line":67,"updated":"2014-09-02 23:28:28.000000000","message":"shard is a mongo specific term. would be nice to change this to some neutral term; cluster instance?","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"3a9cb033ab6ab35c49f8524a7d2b13d0057b428f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        0x02, \u0027BUILDING\u0027, \u0027Building the initial cluster.\u0027)"},{"line_number":65,"context_line":"    DELETING \u003d ClusterTask(0x03, \u0027DELETING\u0027, \u0027Deleting the cluster.\u0027)"},{"line_number":66,"context_line":"    ADDING_SHARD \u003d ClusterTask("},{"line_number":67,"context_line":"        0x04, \u0027ADDING_SHARD\u0027, \u0027Adding a shard to the cluster.\u0027)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"# Dissuade further additions at run-time."},{"line_number":70,"context_line":"ClusterTask.__init__ \u003d None"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_3c6b131f","line":67,"in_reply_to":"fa98f980_e21e965e","updated":"2014-09-04 22:50:02.000000000","message":"for the sake of completeness, re-iterating what we both chatted about on irc: since datastores have very unique operations (like Cassandra\u0027s \"drain\" operation) that can\u0027t be generalized, attempting to generalize other actions when not necessary isn\u0027t helpful, especially when explicitness will be more grok\u0027able by the user.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"}],"trove/cluster/views.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bc24fdc61f6016ed19c0b620b297a54a794a69f6","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from trove.openstack.common import log as logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":"CONF \u003d cfg.CONF"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ClusterView(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_af13db5a","line":23,"updated":"2014-08-15 14:29:42.000000000","message":"CONF is not used","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a7ae4074c7b77ed34bbdb87820c512c84da5e8f1","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from trove.openstack.common import log as logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":"CONF \u003d cfg.CONF"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ClusterView(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_450e988e","line":23,"in_reply_to":"7ac7a964_af13db5a","updated":"2014-08-15 23:04:22.000000000","message":"good catch, thanks.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"}],"trove/common/api.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ebdcaa0c01b577884da3606b7f4c9d33b15e868f","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.configuration.service import ParametersController"},{"line_number":20,"context_line":"from trove.flavor.service import FlavorController"},{"line_number":21,"context_line":"from trove.instance.service import InstanceController"},{"line_number":22,"context_line":"from trove.cluster.service import ClusterController"},{"line_number":23,"context_line":"from trove.limits.service import LimitsController"},{"line_number":24,"context_line":"from trove.backup.service import BackupController"},{"line_number":25,"context_line":"from trove.versions import VersionsController"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_776dfa98","line":22,"updated":"2014-08-27 14:56:48.000000000","message":"just a minor nit, import is not at its place, could be moved according to alphabetic order.","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f396529b0fb35a2bebe073086f89507307544b65","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.configuration.service import ParametersController"},{"line_number":20,"context_line":"from trove.flavor.service import FlavorController"},{"line_number":21,"context_line":"from trove.instance.service import InstanceController"},{"line_number":22,"context_line":"from trove.cluster.service import ClusterController"},{"line_number":23,"context_line":"from trove.limits.service import LimitsController"},{"line_number":24,"context_line":"from trove.backup.service import BackupController"},{"line_number":25,"context_line":"from trove.versions import VersionsController"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_ac53b715","line":22,"in_reply_to":"1abeadc6_776dfa98","updated":"2014-08-27 18:34:11.000000000","message":"since i\u0027m changing the debug to info thing already, i\u0027ll do this as well.","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"}],"trove/common/apischema.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                        \"items\": {"},{"line_number":207,"context_line":"                            \"type\": \"object\","},{"line_number":208,"context_line":"                            \"required\": [\"flavorRef\","},{"line_number":209,"context_line":"                                         \"volume\" if CONF.trove_volume_support"},{"line_number":210,"context_line":"                                         else None],"},{"line_number":211,"context_line":"                            \"additionalProperties\": True,"},{"line_number":212,"context_line":"                            \"properties\": {"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_373bd6ca","line":209,"updated":"2014-08-13 09:14:33.000000000","message":"There\u0027s no such option any more. Take a look at instance API schema.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                        \"items\": {"},{"line_number":207,"context_line":"                            \"type\": \"object\","},{"line_number":208,"context_line":"                            \"required\": [\"flavorRef\","},{"line_number":209,"context_line":"                                         \"volume\" if CONF.trove_volume_support"},{"line_number":210,"context_line":"                                         else None],"},{"line_number":211,"context_line":"                            \"additionalProperties\": True,"},{"line_number":212,"context_line":"                            \"properties\": {"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_5d0c0b95","line":209,"in_reply_to":"baada198_373bd6ca","updated":"2014-08-13 20:14:18.000000000","message":"good catch.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"}],"trove/common/cfg.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":476,"context_line":"    cfg.IntOpt(\u0027num_query_routers_per_cluster\u0027, default\u003d1,"},{"line_number":477,"context_line":"               help\u003d\u0027The number of query routers (mongos) to create \u0027"},{"line_number":478,"context_line":"                    \u0027per cluster.\u0027),"},{"line_number":479,"context_line":"    cfg.BoolOpt(\u0027enable_clusters\u0027, default\u003dTrue,"},{"line_number":480,"context_line":"                help\u003d\u0027Enable clusters to be created and managed.\u0027),"},{"line_number":481,"context_line":"    cfg.StrOpt(\u0027api_strategy\u0027,"},{"line_number":482,"context_line":"               default\u003d\u0027trove.common.strategies.mongodb.api.\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_baca6da1","line":479,"updated":"2014-08-13 09:14:33.000000000","message":"i\u0027d suggest cluster_support","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6a70872536c6bee2ca8aab439df8c92da353522c","unresolved":false,"context_lines":[{"line_number":476,"context_line":"    cfg.IntOpt(\u0027num_query_routers_per_cluster\u0027, default\u003d1,"},{"line_number":477,"context_line":"               help\u003d\u0027The number of query routers (mongos) to create \u0027"},{"line_number":478,"context_line":"                    \u0027per cluster.\u0027),"},{"line_number":479,"context_line":"    cfg.BoolOpt(\u0027enable_clusters\u0027, default\u003dTrue,"},{"line_number":480,"context_line":"                help\u003d\u0027Enable clusters to be created and managed.\u0027),"},{"line_number":481,"context_line":"    cfg.StrOpt(\u0027api_strategy\u0027,"},{"line_number":482,"context_line":"               default\u003d\u0027trove.common.strategies.mongodb.api.\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_e6fb9045","line":479,"in_reply_to":"9ab29df4_bd2287ff","updated":"2014-08-13 21:07:15.000000000","message":"Thanks.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":476,"context_line":"    cfg.IntOpt(\u0027num_query_routers_per_cluster\u0027, default\u003d1,"},{"line_number":477,"context_line":"               help\u003d\u0027The number of query routers (mongos) to create \u0027"},{"line_number":478,"context_line":"                    \u0027per cluster.\u0027),"},{"line_number":479,"context_line":"    cfg.BoolOpt(\u0027enable_clusters\u0027, default\u003dTrue,"},{"line_number":480,"context_line":"                help\u003d\u0027Enable clusters to be created and managed.\u0027),"},{"line_number":481,"context_line":"    cfg.StrOpt(\u0027api_strategy\u0027,"},{"line_number":482,"context_line":"               default\u003d\u0027trove.common.strategies.mongodb.api.\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_bd2287ff","line":479,"in_reply_to":"baada198_baca6da1","updated":"2014-08-13 20:14:18.000000000","message":"will do (to align with volume_support naming scheme)","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":6268,"name":"Robert Myers","email":"myer0052@gmail.com","username":"rmyers"},"change_message_id":"05a28a5f3dc0f8672b56ff8df12a609267daa51e","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                                       \u0027mysql\u0027,"},{"line_number":101,"context_line":"                                       \u0027information_schema\u0027]),"},{"line_number":102,"context_line":"    cfg.IntOpt(\u0027agent_call_low_timeout\u0027, default\u003d5),"},{"line_number":103,"context_line":"    cfg.IntOpt(\u0027agent_call_high_timeout\u0027, default\u003d1000),"},{"line_number":104,"context_line":"    cfg.StrOpt(\u0027guest_id\u0027, default\u003dNone),"},{"line_number":105,"context_line":"    cfg.IntOpt(\u0027state_change_wait_time\u0027, default\u003d3 * 60),"},{"line_number":106,"context_line":"    cfg.IntOpt(\u0027agent_heartbeat_time\u0027, default\u003d10),"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_11bc8905","line":103,"updated":"2014-08-21 20:35:30.000000000","message":"Thats quite a change :)","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"5dcf23ff588f6bbcb95995a29576d02f49606e2e","unresolved":false,"context_lines":[{"line_number":472,"context_line":"    cfg.IntOpt(\u0027cluster_usage_timeout\u0027, default\u003d675,"},{"line_number":473,"context_line":"               help\u003d\u0027Timeout to wait for a cluster to become active.\u0027),"},{"line_number":474,"context_line":"    cfg.IntOpt(\u0027num_config_servers_per_cluster\u0027, default\u003d1,"},{"line_number":475,"context_line":"               help\u003d\u0027The number of config servers to create per cluster.\u0027),"},{"line_number":476,"context_line":"    cfg.IntOpt(\u0027num_query_routers_per_cluster\u0027, default\u003d1,"},{"line_number":477,"context_line":"               help\u003d\u0027The number of query routers (mongos) to create \u0027"},{"line_number":478,"context_line":"                    \u0027per cluster.\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_613b98eb","line":475,"updated":"2014-08-26 20:48:09.000000000","message":"Isn\u0027t 3 the minimum viable number of config servers, other than for test?","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"06feabfdeb5ea91056c43f13d8c5860c4d8ba581","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                                       \u0027mysql\u0027,"},{"line_number":101,"context_line":"                                       \u0027information_schema\u0027]),"},{"line_number":102,"context_line":"    cfg.IntOpt(\u0027agent_call_low_timeout\u0027, default\u003d5),"},{"line_number":103,"context_line":"    cfg.IntOpt(\u0027agent_call_high_timeout\u0027, default\u003d1000),"},{"line_number":104,"context_line":"    cfg.StrOpt(\u0027guest_id\u0027, default\u003dNone),"},{"line_number":105,"context_line":"    cfg.IntOpt(\u0027state_change_wait_time\u0027, default\u003d3 * 60),"},{"line_number":106,"context_line":"    cfg.IntOpt(\u0027agent_heartbeat_time\u0027, default\u003d10),"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_c2a272fc","line":103,"updated":"2014-09-02 23:28:28.000000000","message":"whoa! what\u0027s 1000? 16 minutes and 40 seconds? Seems somewhat odd to pick such a high value.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"3a9cb033ab6ab35c49f8524a7d2b13d0057b428f","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                                       \u0027mysql\u0027,"},{"line_number":101,"context_line":"                                       \u0027information_schema\u0027]),"},{"line_number":102,"context_line":"    cfg.IntOpt(\u0027agent_call_low_timeout\u0027, default\u003d5),"},{"line_number":103,"context_line":"    cfg.IntOpt(\u0027agent_call_high_timeout\u0027, default\u003d1000),"},{"line_number":104,"context_line":"    cfg.StrOpt(\u0027guest_id\u0027, default\u003dNone),"},{"line_number":105,"context_line":"    cfg.IntOpt(\u0027state_change_wait_time\u0027, default\u003d3 * 60),"},{"line_number":106,"context_line":"    cfg.IntOpt(\u0027agent_heartbeat_time\u0027, default\u003d10),"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_dc59278f","line":103,"in_reply_to":"fa98f980_c2a272fc","updated":"2014-09-04 22:50:02.000000000","message":"we\u0027re working on a fix for this.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"06feabfdeb5ea91056c43f13d8c5860c4d8ba581","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                    \"(security groups, floating IPs, etc.)\"),"},{"line_number":285,"context_line":"    cfg.IntOpt(\u0027usage_timeout\u0027, default\u003d600,"},{"line_number":286,"context_line":"               help\u003d\u0027Timeout to wait for a guest to become active.\u0027),"},{"line_number":287,"context_line":"    cfg.IntOpt(\u0027cluster_usage_timeout\u0027, default\u003d675,"},{"line_number":288,"context_line":"               help\u003d\u0027Timeout to wait for a cluster to become active.\u0027),"},{"line_number":289,"context_line":"]"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_42ae82e7","line":287,"updated":"2014-09-02 23:28:28.000000000","message":"wow, 11m 15s. interesting choice.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"}],"trove/common/exception.py":[{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"6d9a3cbc53cec55f7f77dc4395031385918f14fb","unresolved":false,"context_lines":[{"line_number":470,"context_line":"                \"cluster.\")"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"class TroveOperationAuthError(TroveError):"},{"line_number":474,"context_line":"    message \u003d _(\"Operation not allowed for tenant %(tenant_id)s.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac7a964_bf9fdb4f","line":473,"updated":"2014-08-13 23:04:48.000000000","message":"sorry, it\u0027s used in index:\n\n        context \u003d req.environ[wsgi.CONTEXT_KEY]\n        if not context.is_admin and context.tenant !\u003d tenant_id:\n            raise exception.TroveOperationAuthError(tenant_id\u003dcontext.tenant)","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":470,"context_line":"                \"cluster.\")"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"class TroveOperationAuthError(TroveError):"},{"line_number":474,"context_line":"    message \u003d _(\"Operation not allowed for tenant %(tenant_id)s.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_fa3b0599","line":473,"updated":"2014-08-13 09:14:33.000000000","message":"where it was used ?","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6a70872536c6bee2ca8aab439df8c92da353522c","unresolved":false,"context_lines":[{"line_number":470,"context_line":"                \"cluster.\")"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"class TroveOperationAuthError(TroveError):"},{"line_number":474,"context_line":"    message \u003d _(\"Operation not allowed for tenant %(tenant_id)s.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_0655e41c","line":473,"in_reply_to":"9ab29df4_9d6ce338","updated":"2014-08-13 21:07:15.000000000","message":"Sorry, still can\u0027t see it in delete method of service.py\n\nhttps://review.openstack.org/#/c/113675/4/trove/cluster/service.py,cm","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":470,"context_line":"                \"cluster.\")"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"class TroveOperationAuthError(TroveError):"},{"line_number":474,"context_line":"    message \u003d _(\"Operation not allowed for tenant %(tenant_id)s.\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_9d6ce338","line":473,"in_reply_to":"baada198_fa3b0599","updated":"2014-08-13 20:14:18.000000000","message":"used in service.py for delete.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"06feabfdeb5ea91056c43f13d8c5860c4d8ba581","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"class ClusterFlavorsNotEqual(TroveError):"},{"line_number":473,"context_line":"    message \u003d _(\"The flavor for each instance in a cluster must be equal.\")"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"class ClusterVolumeSizesNotEqual(TroveError):"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_22989ebf","line":473,"updated":"2014-09-02 23:28:28.000000000","message":"... must be the same.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"3a9cb033ab6ab35c49f8524a7d2b13d0057b428f","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"class ClusterFlavorsNotEqual(TroveError):"},{"line_number":473,"context_line":"    message \u003d _(\"The flavor for each instance in a cluster must be equal.\")"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"class ClusterVolumeSizesNotEqual(TroveError):"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_1c056f45","line":473,"in_reply_to":"fa98f980_22989ebf","updated":"2014-09-04 22:50:02.000000000","message":"probably a better choice of wording. will club this into another bug fix.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"06feabfdeb5ea91056c43f13d8c5860c4d8ba581","unresolved":false,"context_lines":[{"line_number":474,"context_line":""},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"class ClusterVolumeSizesNotEqual(TroveError):"},{"line_number":477,"context_line":"    message \u003d _(\"The volume size for each instance in a cluster must be \""},{"line_number":478,"context_line":"                \"equal.\")"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_628e267b","line":477,"updated":"2014-09-02 23:28:28.000000000","message":"... must be equal.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"3a9cb033ab6ab35c49f8524a7d2b13d0057b428f","unresolved":false,"context_lines":[{"line_number":474,"context_line":""},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"class ClusterVolumeSizesNotEqual(TroveError):"},{"line_number":477,"context_line":"    message \u003d _(\"The volume size for each instance in a cluster must be \""},{"line_number":478,"context_line":"                \"equal.\")"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_5ce457ab","line":477,"in_reply_to":"fa98f980_628e267b","updated":"2014-09-04 22:50:02.000000000","message":"you mean \"must be the same\"?","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"}],"trove/common/strategies/base.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class BaseAPIStrategy(object):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    @property"},{"line_number":20,"context_line":"    def cluster_class(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d7cffab0","line":17,"updated":"2014-08-13 09:14:33.000000000","message":"should be defined as abstract class, see other strategies.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class BaseAPIStrategy(object):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    @property"},{"line_number":20,"context_line":"    def cluster_class(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_bd50c75f","line":17,"in_reply_to":"baada198_d7cffab0","updated":"2014-08-13 20:14:18.000000000","message":"using abc seems to always draw two distinct camps: one for and one violently against. can others who review this please add their 2c and we\u0027ll let majority rule.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        raise NotImplementedError()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class BaseTaskManagerStrategy(object):"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @property"},{"line_number":39,"context_line":"    def task_manager_api_class(self, context):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_17ca52a0","line":36,"updated":"2014-08-13 09:14:33.000000000","message":"same","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        raise NotImplementedError()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class BaseTaskManagerStrategy(object):"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @property"},{"line_number":39,"context_line":"    def task_manager_api_class(self, context):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_1dc7f313","line":36,"in_reply_to":"baada198_17ca52a0","updated":"2014-08-13 20:14:18.000000000","message":"using abc seems to always draw two distinct camps: one for and one violently against. can others who review this please add their 2c and we\u0027ll let majority rule.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        raise NotImplementedError()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class BaseGuestAgentStrategy(object):"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @property"},{"line_number":50,"context_line":"    def guest_client_class(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_97b5821b","line":47,"updated":"2014-08-13 09:14:33.000000000","message":"same","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        raise NotImplementedError()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class BaseGuestAgentStrategy(object):"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @property"},{"line_number":50,"context_line":"    def guest_client_class(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_9dda23e8","line":47,"in_reply_to":"baada198_97b5821b","updated":"2014-08-13 20:14:18.000000000","message":"using abc seems to always draw two distinct camps: one for and one violently against. can others who review this please add their 2c and we\u0027ll let majority rule.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bc24fdc61f6016ed19c0b620b297a54a794a69f6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class BaseAPIStrategy(object):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    @property"},{"line_number":20,"context_line":"    def cluster_class(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_afdd9b72","line":17,"updated":"2014-08-15 14:29:42.000000000","message":"I\u0027d still suggest to use abc for this classes","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a7ae4074c7b77ed34bbdb87820c512c84da5e8f1","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class BaseAPIStrategy(object):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    @property"},{"line_number":20,"context_line":"    def cluster_class(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_655f1473","line":17,"in_reply_to":"7ac7a964_afdd9b72","updated":"2014-08-15 23:04:22.000000000","message":"as mentioned in the prior patch-set: using abc seems to always draw two distinct camps: one for and one violently against. can others who review this please add their 2c and we\u0027ll let majority rule.\n\nwhile we await other\u0027s opinions, if you could avoid letting this one particular point result in a -1, that\u0027d be appreciated (otherwise it might discourage other reviewers)","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ebdcaa0c01b577884da3606b7f4c9d33b15e868f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class BaseAPIStrategy(object):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    @property"},{"line_number":20,"context_line":"    def cluster_class(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_da2c334d","line":17,"updated":"2014-08-27 14:56:48.000000000","message":"Due to previous comments (see #8) we need more eyes here to decide which option we should use here:\n\n1. Let it as is.\n2. Apply abc functionality.","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f396529b0fb35a2bebe073086f89507307544b65","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class BaseAPIStrategy(object):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    @property"},{"line_number":20,"context_line":"    def cluster_class(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_4c48635c","line":17,"in_reply_to":"1abeadc6_da2c334d","updated":"2014-08-27 18:34:11.000000000","message":"agreed.","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"}],"trove/common/strategies/mongodb/api.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0d57e2c11f086a5b138c0cda1a8d8a66d55244","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        volume_sizes \u003d [instance[\u0027volume_size\u0027] for instance in instances"},{"line_number":93,"context_line":"                        if instance.get(\u0027volume_size\u0027, None)]"},{"line_number":94,"context_line":"        volume_size \u003d None"},{"line_number":95,"context_line":"        if CONF.trove_volume_support:"},{"line_number":96,"context_line":"            if len(set(volume_sizes)) !\u003d 1:"},{"line_number":97,"context_line":"                raise exception.ClusterVolumeSizesNotEqual()"},{"line_number":98,"context_line":"            volume_size \u003d volume_sizes[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d1cb7f1b","line":95,"updated":"2014-08-13 12:56:13.000000000","message":"mongo_conf.volume_support","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        volume_sizes \u003d [instance[\u0027volume_size\u0027] for instance in instances"},{"line_number":93,"context_line":"                        if instance.get(\u0027volume_size\u0027, None)]"},{"line_number":94,"context_line":"        volume_size \u003d None"},{"line_number":95,"context_line":"        if CONF.trove_volume_support:"},{"line_number":96,"context_line":"            if len(set(volume_sizes)) !\u003d 1:"},{"line_number":97,"context_line":"                raise exception.ClusterVolumeSizesNotEqual()"},{"line_number":98,"context_line":"            volume_size \u003d volume_sizes[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_fde15f9b","line":95,"in_reply_to":"baada198_d1cb7f1b","updated":"2014-08-13 20:14:18.000000000","message":"good catch.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0d57e2c11f086a5b138c0cda1a8d8a66d55244","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                         \"instance_type\": \"member\","},{"line_number":122,"context_line":"                         \"replica_set_name\": replica_set_name}"},{"line_number":123,"context_line":"        for i in range(1, num_instances + 1):"},{"line_number":124,"context_line":"            instance_name \u003d \"%s-%s-%s\" % (name, replica_set_name, str(i))"},{"line_number":125,"context_line":"            inst_models.Instance.create(context, instance_name,"},{"line_number":126,"context_line":"                                        flavor_id,"},{"line_number":127,"context_line":"                                        datastore_version.image_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_918f47d3","line":124,"updated":"2014-08-13 12:56:13.000000000","message":"i\u0027d also suggest to add cluster name here","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                         \"instance_type\": \"member\","},{"line_number":122,"context_line":"                         \"replica_set_name\": replica_set_name}"},{"line_number":123,"context_line":"        for i in range(1, num_instances + 1):"},{"line_number":124,"context_line":"            instance_name \u003d \"%s-%s-%s\" % (name, replica_set_name, str(i))"},{"line_number":125,"context_line":"            inst_models.Instance.create(context, instance_name,"},{"line_number":126,"context_line":"                                        flavor_id,"},{"line_number":127,"context_line":"                                        datastore_version.image_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_7da46f57","line":124,"in_reply_to":"baada198_918f47d3","updated":"2014-08-13 20:14:18.000000000","message":"it is, it\u0027s the \"name\" field.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0d57e2c11f086a5b138c0cda1a8d8a66d55244","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                                        datastore_version.image_id,"},{"line_number":128,"context_line":"                                        [], [], datastore,"},{"line_number":129,"context_line":"                                        datastore_version,"},{"line_number":130,"context_line":"                                        volume_size, None,"},{"line_number":131,"context_line":"                                        availability_zone\u003dNone,"},{"line_number":132,"context_line":"                                        nics\u003dNone,"},{"line_number":133,"context_line":"                                        configuration_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b1bb6b73","line":130,"updated":"2014-08-13 12:56:13.000000000","message":"we should allow to pass NICs, AZ in initial implementation since most of OS deployments containing Neutron instead of nova-network.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6a70872536c6bee2ca8aab439df8c92da353522c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                                        datastore_version.image_id,"},{"line_number":128,"context_line":"                                        [], [], datastore,"},{"line_number":129,"context_line":"                                        datastore_version,"},{"line_number":130,"context_line":"                                        volume_size, None,"},{"line_number":131,"context_line":"                                        availability_zone\u003dNone,"},{"line_number":132,"context_line":"                                        nics\u003dNone,"},{"line_number":133,"context_line":"                                        configuration_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_319b00cb","line":130,"in_reply_to":"9ab29df4_7dbb8f72","updated":"2014-08-13 21:07:15.000000000","message":"We should allow passing at least NICs, AZ is not so significant, and can be ingored in favor of Regions API","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                                        datastore_version.image_id,"},{"line_number":128,"context_line":"                                        [], [], datastore,"},{"line_number":129,"context_line":"                                        datastore_version,"},{"line_number":130,"context_line":"                                        volume_size, None,"},{"line_number":131,"context_line":"                                        availability_zone\u003dNone,"},{"line_number":132,"context_line":"                                        nics\u003dNone,"},{"line_number":133,"context_line":"                                        configuration_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_7dbb8f72","line":130,"in_reply_to":"baada198_b1bb6b73","updated":"2014-08-13 20:14:18.000000000","message":"will take that into consideration, but it wasn\u0027t a part of the original specification that we\u0027d support this. could be a fast-follow-on.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def add_shard(self):"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        if self.db_info.task_status !\u003d ClusterTasks.NONE:"},{"line_number":174,"context_line":"            current_task \u003d self.db_info.task_status.name"},{"line_number":175,"context_line":"            msg \u003d _(\"This action cannot be performed on the cluster while \""},{"line_number":176,"context_line":"                    \"the current cluster task is \u0027%s\u0027.\") % current_task"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_1726d267","line":173,"updated":"2014-08-13 09:14:33.000000000","message":"only NONE ?\nwhat about deleting, building?","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def add_shard(self):"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        if self.db_info.task_status !\u003d ClusterTasks.NONE:"},{"line_number":174,"context_line":"            current_task \u003d self.db_info.task_status.name"},{"line_number":175,"context_line":"            msg \u003d _(\"This action cannot be performed on the cluster while \""},{"line_number":176,"context_line":"                    \"the current cluster task is \u0027%s\u0027.\") % current_task"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_bd7367e6","line":173,"in_reply_to":"baada198_1726d267","updated":"2014-08-13 20:14:18.000000000","message":"we only want to support adding a shard if the current task is none (not if it\u0027s building, deleting, etc.)","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                                                 members_in_shard[0].id)"},{"line_number":190,"context_line":"        deltas \u003d {\u0027instances\u0027: num_members_per_shard}"},{"line_number":191,"context_line":"        # TODO(amcreynolds): if the existing shard is using volumes, but"},{"line_number":192,"context_line":"        # TODO(amcreynolds): CONF.trove_volume_support is False, what\u0027s the"},{"line_number":193,"context_line":"        # TODO(amcreynolds): expectation of behavior?"},{"line_number":194,"context_line":"        volume_size \u003d a_member.volume_size"},{"line_number":195,"context_line":"        if volume_size:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b7cd2695","line":192,"updated":"2014-08-13 09:14:33.000000000","message":"volume support option is now per datastore thing","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                                                 members_in_shard[0].id)"},{"line_number":190,"context_line":"        deltas \u003d {\u0027instances\u0027: num_members_per_shard}"},{"line_number":191,"context_line":"        # TODO(amcreynolds): if the existing shard is using volumes, but"},{"line_number":192,"context_line":"        # TODO(amcreynolds): CONF.trove_volume_support is False, what\u0027s the"},{"line_number":193,"context_line":"        # TODO(amcreynolds): expectation of behavior?"},{"line_number":194,"context_line":"        volume_size \u003d a_member.volume_size"},{"line_number":195,"context_line":"        if volume_size:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_dd573b25","line":192,"in_reply_to":"baada198_b7cd2695","updated":"2014-08-13 20:14:18.000000000","message":"good catch.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        deltas \u003d {\u0027instances\u0027: num_members_per_shard}"},{"line_number":191,"context_line":"        # TODO(amcreynolds): if the existing shard is using volumes, but"},{"line_number":192,"context_line":"        # TODO(amcreynolds): CONF.trove_volume_support is False, what\u0027s the"},{"line_number":193,"context_line":"        # TODO(amcreynolds): expectation of behavior?"},{"line_number":194,"context_line":"        volume_size \u003d a_member.volume_size"},{"line_number":195,"context_line":"        if volume_size:"},{"line_number":196,"context_line":"            deltas[\u0027volumes\u0027] \u003d volume_size * num_members_per_shard"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b79b6678","line":193,"updated":"2014-08-13 09:14:33.000000000","message":"as i can forsee, we should add identical shards.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        deltas \u003d {\u0027instances\u0027: num_members_per_shard}"},{"line_number":191,"context_line":"        # TODO(amcreynolds): if the existing shard is using volumes, but"},{"line_number":192,"context_line":"        # TODO(amcreynolds): CONF.trove_volume_support is False, what\u0027s the"},{"line_number":193,"context_line":"        # TODO(amcreynolds): expectation of behavior?"},{"line_number":194,"context_line":"        volume_size \u003d a_member.volume_size"},{"line_number":195,"context_line":"        if volume_size:"},{"line_number":196,"context_line":"            deltas[\u0027volumes\u0027] \u003d volume_size * num_members_per_shard"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_fd54ff22","line":193,"in_reply_to":"baada198_b79b6678","updated":"2014-08-13 20:14:18.000000000","message":"seems reasonable.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0d57e2c11f086a5b138c0cda1a8d8a66d55244","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            if instance.type \u003d\u003d \u0027query_router\u0027:"},{"line_number":274,"context_line":"                ip \u003d instance.get_visible_ip_addresses()"},{"line_number":275,"context_line":"                # TODO(amcreynolds): need to understand why the regex would"},{"line_number":276,"context_line":"                # TODO(amcreynolds): return more than one public ip"},{"line_number":277,"context_line":"                # TODO(amcreynolds): also tbd if ip not present"},{"line_number":278,"context_line":"                if ip:"},{"line_number":279,"context_line":"                    ip_list.append(ip[0])"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_54e11d2a","line":276,"updated":"2014-08-13 12:56:13.000000000","message":"the answer is simple - instance can have floating IP association, in this case compute instance would have a list of IPs","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"6d9a3cbc53cec55f7f77dc4395031385918f14fb","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            if instance.type \u003d\u003d \u0027query_router\u0027:"},{"line_number":274,"context_line":"                ip \u003d instance.get_visible_ip_addresses()"},{"line_number":275,"context_line":"                # TODO(amcreynolds): need to understand why the regex would"},{"line_number":276,"context_line":"                # TODO(amcreynolds): return more than one public ip"},{"line_number":277,"context_line":"                # TODO(amcreynolds): also tbd if ip not present"},{"line_number":278,"context_line":"                if ip:"},{"line_number":279,"context_line":"                    ip_list.append(ip[0])"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac7a964_3f090b96","line":276,"in_reply_to":"baada198_54e11d2a","updated":"2014-08-13 23:04:48.000000000","message":"even if that were true, how can we deterministically know which one to return to the user? it\u0027d be odd on a sharded cluster to return multiple ips for a single router (user won\u0027t know which to connect to)","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bc24fdc61f6016ed19c0b620b297a54a794a69f6","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        volume_sizes \u003d [instance[\u0027volume_size\u0027] for instance in instances"},{"line_number":93,"context_line":"                        if instance.get(\u0027volume_size\u0027, None)]"},{"line_number":94,"context_line":"        volume_size \u003d None"},{"line_number":95,"context_line":"        if CONF.get(datastore_version.manager).volume_support:"},{"line_number":96,"context_line":"            if len(set(volume_sizes)) !\u003d 1:"},{"line_number":97,"context_line":"                raise exception.ClusterVolumeSizesNotEqual()"},{"line_number":98,"context_line":"            volume_size \u003d volume_sizes[0]"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_afc4bb92","line":95,"updated":"2014-08-15 14:29:42.000000000","message":"you already have mongo conf group, see #86, you need to use\nmongo_conf.volume_support,\n\n\neven more, you can make a global variable responsible for mongo conf group and use it wherever you need it (see #106, #248, #280)","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a7ae4074c7b77ed34bbdb87820c512c84da5e8f1","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        volume_sizes \u003d [instance[\u0027volume_size\u0027] for instance in instances"},{"line_number":93,"context_line":"                        if instance.get(\u0027volume_size\u0027, None)]"},{"line_number":94,"context_line":"        volume_size \u003d None"},{"line_number":95,"context_line":"        if CONF.get(datastore_version.manager).volume_support:"},{"line_number":96,"context_line":"            if len(set(volume_sizes)) !\u003d 1:"},{"line_number":97,"context_line":"                raise exception.ClusterVolumeSizesNotEqual()"},{"line_number":98,"context_line":"            volume_size \u003d volume_sizes[0]"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_76250caa","line":95,"in_reply_to":"7ac7a964_afc4bb92","updated":"2014-08-15 23:04:22.000000000","message":"i\u0027ll re-use the mongo_conf, thanks.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"bc24fdc61f6016ed19c0b620b297a54a794a69f6","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            # TODO(amcreynolds): is ephemeral possible for mongodb clusters?"},{"line_number":104,"context_line":"            if len(volume_sizes) \u003e 0:"},{"line_number":105,"context_line":"                raise exception.VolumeNotSupported()"},{"line_number":106,"context_line":"            ephemeral_support \u003d CONF.get("},{"line_number":107,"context_line":"                datastore_version.manager).device_path"},{"line_number":108,"context_line":"            if ephemeral_support and flavor.ephemeral \u003d\u003d 0:"},{"line_number":109,"context_line":"                raise exception.LocalStorageNotSpecified(flavor\u003dflavor_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_cfbf37fb","line":106,"updated":"2014-08-15 14:29:42.000000000","message":"you already have mongo conf group, see #86, you need to use\nmongo_conf.device_path","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"a7ae4074c7b77ed34bbdb87820c512c84da5e8f1","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            # TODO(amcreynolds): is ephemeral possible for mongodb clusters?"},{"line_number":104,"context_line":"            if len(volume_sizes) \u003e 0:"},{"line_number":105,"context_line":"                raise exception.VolumeNotSupported()"},{"line_number":106,"context_line":"            ephemeral_support \u003d CONF.get("},{"line_number":107,"context_line":"                datastore_version.manager).device_path"},{"line_number":108,"context_line":"            if ephemeral_support and flavor.ephemeral \u003d\u003d 0:"},{"line_number":109,"context_line":"                raise exception.LocalStorageNotSpecified(flavor\u003dflavor_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ac7a964_d63500db","line":106,"in_reply_to":"7ac7a964_cfbf37fb","updated":"2014-08-15 23:04:22.000000000","message":"i\u0027ll re-use the mongo_conf, thanks.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ebdcaa0c01b577884da3606b7f4c9d33b15e868f","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        volume_sizes \u003d [instance[\u0027volume_size\u0027] for instance in instances"},{"line_number":93,"context_line":"                        if instance.get(\u0027volume_size\u0027, None)]"},{"line_number":94,"context_line":"        volume_size \u003d None"},{"line_number":95,"context_line":"        if CONF.get(datastore_version.manager).volume_support:"},{"line_number":96,"context_line":"            if len(set(volume_sizes)) !\u003d 1:"},{"line_number":97,"context_line":"                raise exception.ClusterVolumeSizesNotEqual()"},{"line_number":98,"context_line":"            volume_size \u003d volume_sizes[0]"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_1ab5cbed","line":95,"updated":"2014-08-27 14:56:48.000000000","message":"it seems like nothing has changed from patchset #8.\n\nyou might need to use mongo_conf instead","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f396529b0fb35a2bebe073086f89507307544b65","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        volume_sizes \u003d [instance[\u0027volume_size\u0027] for instance in instances"},{"line_number":93,"context_line":"                        if instance.get(\u0027volume_size\u0027, None)]"},{"line_number":94,"context_line":"        volume_size \u003d None"},{"line_number":95,"context_line":"        if CONF.get(datastore_version.manager).volume_support:"},{"line_number":96,"context_line":"            if len(set(volume_sizes)) !\u003d 1:"},{"line_number":97,"context_line":"                raise exception.ClusterVolumeSizesNotEqual()"},{"line_number":98,"context_line":"            volume_size \u003d volume_sizes[0]"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_cca2b3fb","line":95,"in_reply_to":"1abeadc6_1ab5cbed","updated":"2014-08-27 18:34:11.000000000","message":"roger that.","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ebdcaa0c01b577884da3606b7f4c9d33b15e868f","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            # TODO(amcreynolds): is ephemeral possible for mongodb clusters?"},{"line_number":104,"context_line":"            if len(volume_sizes) \u003e 0:"},{"line_number":105,"context_line":"                raise exception.VolumeNotSupported()"},{"line_number":106,"context_line":"            ephemeral_support \u003d CONF.get("},{"line_number":107,"context_line":"                datastore_version.manager).device_path"},{"line_number":108,"context_line":"            if ephemeral_support and flavor.ephemeral \u003d\u003d 0:"},{"line_number":109,"context_line":"                raise exception.LocalStorageNotSpecified(flavor\u003dflavor_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_daa193aa","line":106,"updated":"2014-08-27 14:56:48.000000000","message":"same here","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f396529b0fb35a2bebe073086f89507307544b65","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            # TODO(amcreynolds): is ephemeral possible for mongodb clusters?"},{"line_number":104,"context_line":"            if len(volume_sizes) \u003e 0:"},{"line_number":105,"context_line":"                raise exception.VolumeNotSupported()"},{"line_number":106,"context_line":"            ephemeral_support \u003d CONF.get("},{"line_number":107,"context_line":"                datastore_version.manager).device_path"},{"line_number":108,"context_line":"            if ephemeral_support and flavor.ephemeral \u003d\u003d 0:"},{"line_number":109,"context_line":"                raise exception.LocalStorageNotSpecified(flavor\u003dflavor_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_2cade7e9","line":106,"in_reply_to":"1abeadc6_daa193aa","updated":"2014-08-27 18:34:11.000000000","message":"roger that.","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"}],"trove/common/strategy.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def load_api_strategy(manager):"},{"line_number":28,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":29,"context_line":"    clazz \u003d CONF.get(manager).get(\u0027api_strategy\u0027)"},{"line_number":30,"context_line":"    LOG.debug(\"Loading class %s\" % clazz)"},{"line_number":31,"context_line":"    api_strategy \u003d import_class(clazz)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_77a70ea9","line":28,"updated":"2014-08-13 09:14:33.000000000","message":"+1, this should be a singleton","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"6d9a3cbc53cec55f7f77dc4395031385918f14fb","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def load_api_strategy(manager):"},{"line_number":28,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":29,"context_line":"    clazz \u003d CONF.get(manager).get(\u0027api_strategy\u0027)"},{"line_number":30,"context_line":"    LOG.debug(\"Loading class %s\" % clazz)"},{"line_number":31,"context_line":"    api_strategy \u003d import_class(clazz)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac7a964_9f885fc8","line":28,"in_reply_to":"9ab29df4_a0afc02a","updated":"2014-08-13 23:04:48.000000000","message":"i redact my \"ok\" on this, reason being is it isn\u0027t truly a singleton; there needs to be an object per manager. i don\u0027t see the need to manage a dictionary of preloaded imports considering import_class handles this scenario just fine, and guestagent/strategy.py doesn\u0027t handle this either.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def load_api_strategy(manager):"},{"line_number":28,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":29,"context_line":"    clazz \u003d CONF.get(manager).get(\u0027api_strategy\u0027)"},{"line_number":30,"context_line":"    LOG.debug(\"Loading class %s\" % clazz)"},{"line_number":31,"context_line":"    api_strategy \u003d import_class(clazz)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_a0afc02a","line":28,"in_reply_to":"baada198_77a70ea9","updated":"2014-08-13 20:14:18.000000000","message":"ok","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def load_taskmanager_strategy(manager):"},{"line_number":36,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":37,"context_line":"    try:"},{"line_number":38,"context_line":"        clazz \u003d CONF.get(manager).get(\u0027taskmanager_strategy\u0027)"},{"line_number":39,"context_line":"        LOG.debug(\"Loading class %s\" % clazz)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_97a4a2a4","line":36,"updated":"2014-08-13 09:14:33.000000000","message":"same","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"6d9a3cbc53cec55f7f77dc4395031385918f14fb","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def load_taskmanager_strategy(manager):"},{"line_number":36,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":37,"context_line":"    try:"},{"line_number":38,"context_line":"        clazz \u003d CONF.get(manager).get(\u0027taskmanager_strategy\u0027)"},{"line_number":39,"context_line":"        LOG.debug(\"Loading class %s\" % clazz)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac7a964_bf851baf","line":36,"in_reply_to":"9ab29df4_e0a9b825","updated":"2014-08-13 23:04:48.000000000","message":"i redact my \"ok\" on this, reason being is it isn\u0027t truly a singleton; there needs to be an object per manager. i don\u0027t see the need to manage a dictionary of preloaded imports considering import_class handles this scenario just fine, and guestagent/strategy.py doesn\u0027t handle this either.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def load_taskmanager_strategy(manager):"},{"line_number":36,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":37,"context_line":"    try:"},{"line_number":38,"context_line":"        clazz \u003d CONF.get(manager).get(\u0027taskmanager_strategy\u0027)"},{"line_number":39,"context_line":"        LOG.debug(\"Loading class %s\" % clazz)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_e0a9b825","line":36,"in_reply_to":"baada198_97a4a2a4","updated":"2014-08-13 20:14:18.000000000","message":"ok","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def load_guestagent_strategy(manager):"},{"line_number":47,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":48,"context_line":"    try:"},{"line_number":49,"context_line":"        clazz \u003d CONF.get(manager).get(\u0027guestagent_strategy\u0027)"},{"line_number":50,"context_line":"        LOG.debug(\"Loading class %s\" % clazz)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b7b0c6e0","line":47,"updated":"2014-08-13 09:14:33.000000000","message":"same","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"6d9a3cbc53cec55f7f77dc4395031385918f14fb","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def load_guestagent_strategy(manager):"},{"line_number":47,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":48,"context_line":"    try:"},{"line_number":49,"context_line":"        clazz \u003d CONF.get(manager).get(\u0027guestagent_strategy\u0027)"},{"line_number":50,"context_line":"        LOG.debug(\"Loading class %s\" % clazz)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac7a964_df92d7f5","line":47,"in_reply_to":"9ab29df4_00a78c50","updated":"2014-08-13 23:04:48.000000000","message":"i redact my \"ok\" on this, reason being is it isn\u0027t truly a singleton; there needs to be an object per manager. i don\u0027t see the need to manage a dictionary of preloaded imports considering import_class handles this scenario just fine, and guestagent/strategy.py doesn\u0027t handle this either.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def load_guestagent_strategy(manager):"},{"line_number":47,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":48,"context_line":"    try:"},{"line_number":49,"context_line":"        clazz \u003d CONF.get(manager).get(\u0027guestagent_strategy\u0027)"},{"line_number":50,"context_line":"        LOG.debug(\"Loading class %s\" % clazz)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_00a78c50","line":47,"in_reply_to":"baada198_b7b0c6e0","updated":"2014-08-13 20:14:18.000000000","message":"ok","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"2965497ebb1a22e83e1807958bfb1e0dc8e7d64e","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def load_api_strategy(manager):"},{"line_number":28,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":29,"context_line":"    clazz \u003d CONF.get(manager).get(\u0027api_strategy\u0027)"},{"line_number":30,"context_line":"    LOG.debug(\"Loading class %s\" % clazz)"},{"line_number":31,"context_line":"    api_strategy \u003d import_class(clazz)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_957f80df","line":28,"updated":"2014-08-22 18:43:51.000000000","message":"Please remove TODO.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"96c99f08135d03f11eede8b009b3cacee67be5cf","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def load_api_strategy(manager):"},{"line_number":28,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":29,"context_line":"    clazz \u003d CONF.get(manager).get(\u0027api_strategy\u0027)"},{"line_number":30,"context_line":"    LOG.debug(\"Loading class %s\" % clazz)"},{"line_number":31,"context_line":"    api_strategy \u003d import_class(clazz)"},{"line_number":32,"context_line":"    return api_strategy()"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_55d5e8e2","line":29,"updated":"2014-08-22 18:42:03.000000000","message":"Please rename local var to api_strategy_class.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"2965497ebb1a22e83e1807958bfb1e0dc8e7d64e","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def load_taskmanager_strategy(manager):"},{"line_number":36,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":37,"context_line":"    try:"},{"line_number":38,"context_line":"        clazz \u003d CONF.get(manager).get(\u0027taskmanager_strategy\u0027)"},{"line_number":39,"context_line":"        LOG.debug(\"Loading class %s\" % clazz)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_d58578cf","line":36,"updated":"2014-08-22 18:43:51.000000000","message":"Please remove TODO.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"96c99f08135d03f11eede8b009b3cacee67be5cf","unresolved":false,"context_lines":[{"line_number":35,"context_line":"def load_taskmanager_strategy(manager):"},{"line_number":36,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":37,"context_line":"    try:"},{"line_number":38,"context_line":"        clazz \u003d CONF.get(manager).get(\u0027taskmanager_strategy\u0027)"},{"line_number":39,"context_line":"        LOG.debug(\"Loading class %s\" % clazz)"},{"line_number":40,"context_line":"        taskmanager_strategy \u003d import_class(clazz)"},{"line_number":41,"context_line":"        return taskmanager_strategy()"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_b5fd5c70","line":38,"updated":"2014-08-22 18:42:03.000000000","message":"Please rename local var to taskmanager_strategy_class.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"2965497ebb1a22e83e1807958bfb1e0dc8e7d64e","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def load_guestagent_strategy(manager):"},{"line_number":47,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":48,"context_line":"    try:"},{"line_number":49,"context_line":"        clazz \u003d CONF.get(manager).get(\u0027guestagent_strategy\u0027)"},{"line_number":50,"context_line":"        LOG.debug(\"Loading class %s\" % clazz)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_f56fd428","line":47,"updated":"2014-08-22 18:43:51.000000000","message":"Please remove TODO.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"96c99f08135d03f11eede8b009b3cacee67be5cf","unresolved":false,"context_lines":[{"line_number":46,"context_line":"def load_guestagent_strategy(manager):"},{"line_number":47,"context_line":"    # TODO(mat-lowery): enforce singleton?"},{"line_number":48,"context_line":"    try:"},{"line_number":49,"context_line":"        clazz \u003d CONF.get(manager).get(\u0027guestagent_strategy\u0027)"},{"line_number":50,"context_line":"        LOG.debug(\"Loading class %s\" % clazz)"},{"line_number":51,"context_line":"        guestagent_strategy \u003d import_class(clazz)"},{"line_number":52,"context_line":"        return guestagent_strategy()"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_f5fa7473","line":49,"updated":"2014-08-22 18:42:03.000000000","message":"Please rename local var to guestagent_strategy_class.","commit_id":"b535baf846cadfb5116c422e3e1ac3c3693fb001"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"36b140ef04b2871fbfac8d5252b96e112beb660e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1abeadc6_a70b002a","updated":"2014-08-26 21:21:00.000000000","message":"The idea of implementing per-datastore functionality in the API and Taskmanager seems a significant departure from the current situation of the API and Taskmanager being datastore agnostic.  Shouldn\u0027t a significant change such as this be covered in a separate blueprint?","commit_id":"f5f099c2adf0b249d506ffdeb1a4bfb356d7fc15"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"99bf46ba993aa023859d9900740ad2c275553b1e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1abeadc6_290a3926","in_reply_to":"1abeadc6_164943d0","updated":"2014-08-27 18:22:54.000000000","message":"I agree that you have the correct implementation, I was just stating that it is a change suitable for discussion by the community.   This is too big a change to just slip in.","commit_id":"f5f099c2adf0b249d506ffdeb1a4bfb356d7fc15"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"b55a58c93babccabae4d74b0fdd9efa57a640bfa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1abeadc6_164943d0","in_reply_to":"1abeadc6_a70b002a","updated":"2014-08-26 22:16:51.000000000","message":"disagree, the alternative is having tons of datastore-specific methods directly in the api/taskmanager. this is forward thinking vs. forcing a huge refactoring later.","commit_id":"f5f099c2adf0b249d506ffdeb1a4bfb356d7fc15"}],"trove/db/sqlalchemy/migrate_repo/versions/032_clusters.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from trove.db.sqlalchemy.migrate_repo.schema import Table"},{"line_number":28,"context_line":"from trove.openstack.common import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"logger \u003d logging.getLogger(\u0027trove.db.sqlalchemy.migrate_repo.schema\u0027)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"meta \u003d MetaData()"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d7dc5a1a","line":30,"updated":"2014-08-13 09:14:33.000000000","message":"why is it needed here?","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from trove.db.sqlalchemy.migrate_repo.schema import Table"},{"line_number":28,"context_line":"from trove.openstack.common import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"logger \u003d logging.getLogger(\u0027trove.db.sqlalchemy.migrate_repo.schema\u0027)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"meta \u003d MetaData()"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_40e264d6","line":30,"in_reply_to":"baada198_94ff35b1","updated":"2014-08-13 20:14:18.000000000","message":"i assumed that schema.py, 020_, 023_, 024_,  etc. all did it for a reason (which seems likely).","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0d57e2c11f086a5b138c0cda1a8d8a66d55244","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from trove.db.sqlalchemy.migrate_repo.schema import Table"},{"line_number":28,"context_line":"from trove.openstack.common import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"logger \u003d logging.getLogger(\u0027trove.db.sqlalchemy.migrate_repo.schema\u0027)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"meta \u003d MetaData()"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_94ff35b1","line":30,"in_reply_to":"baada198_d7dc5a1a","updated":"2014-08-13 12:56:13.000000000","message":"Oh, i see, line #71.\n\nAnother thing, shouldn\u0027t this logger be initialized with __name__ instead of hardcoded string?","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"36b140ef04b2871fbfac8d5252b96e112beb660e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    Column(\u0027task_id\u0027, Integer(), nullable\u003dFalse),"},{"line_number":42,"context_line":"    Column(\u0027tenant_id\u0027, String(36), nullable\u003dFalse),"},{"line_number":43,"context_line":"    Column(\"datastore_version_id\", String(36),"},{"line_number":44,"context_line":"           ForeignKey(\u0027datastore_versions.id\u0027), nullable\u003dFalse),"},{"line_number":45,"context_line":"    Column(\u0027deleted\u0027, Boolean()),"},{"line_number":46,"context_line":"    Column(\u0027deleted_at\u0027, DateTime()),"},{"line_number":47,"context_line":"    Index(\"clusters_tenant_id\", \"tenant_id\"),"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_42021a0a","line":44,"updated":"2014-08-26 21:21:00.000000000","message":"There is a blueprint in the works to explicitly name foreign keys.  We should explicitly name this one.","commit_id":"f5f099c2adf0b249d506ffdeb1a4bfb356d7fc15"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"b55a58c93babccabae4d74b0fdd9efa57a640bfa","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    Column(\u0027task_id\u0027, Integer(), nullable\u003dFalse),"},{"line_number":42,"context_line":"    Column(\u0027tenant_id\u0027, String(36), nullable\u003dFalse),"},{"line_number":43,"context_line":"    Column(\"datastore_version_id\", String(36),"},{"line_number":44,"context_line":"           ForeignKey(\u0027datastore_versions.id\u0027), nullable\u003dFalse),"},{"line_number":45,"context_line":"    Column(\u0027deleted\u0027, Boolean()),"},{"line_number":46,"context_line":"    Column(\u0027deleted_at\u0027, DateTime()),"},{"line_number":47,"context_line":"    Index(\"clusters_tenant_id\", \"tenant_id\"),"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_d6da6be8","line":44,"in_reply_to":"1abeadc6_42021a0a","updated":"2014-08-26 22:16:51.000000000","message":"what\u0027s the bp name? unless it\u0027s approved and slated for juno, it\u0027s not required to be done here.","commit_id":"f5f099c2adf0b249d506ffdeb1a4bfb356d7fc15"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"99bf46ba993aa023859d9900740ad2c275553b1e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    Column(\u0027task_id\u0027, Integer(), nullable\u003dFalse),"},{"line_number":42,"context_line":"    Column(\u0027tenant_id\u0027, String(36), nullable\u003dFalse),"},{"line_number":43,"context_line":"    Column(\"datastore_version_id\", String(36),"},{"line_number":44,"context_line":"           ForeignKey(\u0027datastore_versions.id\u0027), nullable\u003dFalse),"},{"line_number":45,"context_line":"    Column(\u0027deleted\u0027, Boolean()),"},{"line_number":46,"context_line":"    Column(\u0027deleted_at\u0027, DateTime()),"},{"line_number":47,"context_line":"    Index(\"clusters_tenant_id\", \"tenant_id\"),"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_ec592f36","line":44,"in_reply_to":"1abeadc6_d6da6be8","updated":"2014-08-27 18:22:54.000000000","message":"You\u0027re right, it\u0027s not required.  We could make your change dependent on the other, the other dependent on yours, or you could just add a foreign key name now (as Nova does).","commit_id":"f5f099c2adf0b249d506ffdeb1a4bfb356d7fc15"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"36b140ef04b2871fbfac8d5252b96e112beb660e","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        cluster_id_idx \u003d Index(\"instances_cluster_id\", instances.c.cluster_id)"},{"line_number":69,"context_line":"        cluster_id_idx.create()"},{"line_number":70,"context_line":"    except OperationalError as e:"},{"line_number":71,"context_line":"        logger.info(e)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_c20d4a37","line":70,"updated":"2014-08-26 21:21:00.000000000","message":"Catching such a generic error allows the upgrade to fail silently.  Either downgrade should delete the tables, or upgrade must explicitly check to see that the tables are exactly in the shape and form required, with no more and no less than created in the upgrade.  There is a bug in flight to fix this elsewhere.","commit_id":"f5f099c2adf0b249d506ffdeb1a4bfb356d7fc15"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"b55a58c93babccabae4d74b0fdd9efa57a640bfa","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        cluster_id_idx \u003d Index(\"instances_cluster_id\", instances.c.cluster_id)"},{"line_number":69,"context_line":"        cluster_id_idx.create()"},{"line_number":70,"context_line":"    except OperationalError as e:"},{"line_number":71,"context_line":"        logger.info(e)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_d6018b3a","line":70,"in_reply_to":"1abeadc6_c20d4a37","updated":"2014-08-26 22:16:51.000000000","message":"this doesn\u0027t seem pragmatic as it\u0027d require the catching of OperationalError for every single statement separately, and even then, how would we remediate? \"Fixing\" this elsewhere isn\u0027t a bug, it should be a blueprint, and until that blueprint is approved and slated, it shouldn\u0027t be addressed in this review.","commit_id":"f5f099c2adf0b249d506ffdeb1a4bfb356d7fc15"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"06feabfdeb5ea91056c43f13d8c5860c4d8ba581","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    meta,"},{"line_number":37,"context_line":"    Column(\u0027id\u0027, String(36), primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":38,"context_line":"    Column(\u0027created\u0027, DateTime(), nullable\u003dFalse),"},{"line_number":39,"context_line":"    Column(\u0027updated\u0027, DateTime(), nullable\u003dFalse),"},{"line_number":40,"context_line":"    Column(\u0027name\u0027, String(255), nullable\u003dFalse),"},{"line_number":41,"context_line":"    Column(\u0027task_id\u0027, Integer(), nullable\u003dFalse),"},{"line_number":42,"context_line":"    Column(\u0027tenant_id\u0027, String(36), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_c23ef28b","line":39,"updated":"2014-09-02 23:28:28.000000000","message":"nullable \u003d False on updated seems a bit stringent.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"3a9cb033ab6ab35c49f8524a7d2b13d0057b428f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    meta,"},{"line_number":37,"context_line":"    Column(\u0027id\u0027, String(36), primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":38,"context_line":"    Column(\u0027created\u0027, DateTime(), nullable\u003dFalse),"},{"line_number":39,"context_line":"    Column(\u0027updated\u0027, DateTime(), nullable\u003dFalse),"},{"line_number":40,"context_line":"    Column(\u0027name\u0027, String(255), nullable\u003dFalse),"},{"line_number":41,"context_line":"    Column(\u0027task_id\u0027, Integer(), nullable\u003dFalse),"},{"line_number":42,"context_line":"    Column(\u0027tenant_id\u0027, String(36), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_3c8793b6","line":39,"in_reply_to":"fa98f980_c23ef28b","updated":"2014-09-04 22:50:02.000000000","message":"as we chatted about on irc: updated is set on insert, and on each update it should be updated, therefore it should never be null, or clearly something is very wrong.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"06feabfdeb5ea91056c43f13d8c5860c4d8ba581","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        instances.create_column(Column(\u0027cluster_id\u0027, String(36),"},{"line_number":64,"context_line":"                                       ForeignKey(\"clusters.id\")))"},{"line_number":65,"context_line":"        instances.create_column(Column(\u0027shard_id\u0027, String(36)))"},{"line_number":66,"context_line":"        instances.create_column(Column(\u0027type\u0027, String(64)))"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        cluster_id_idx \u003d Index(\"instances_cluster_id\", instances.c.cluster_id)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_82678ab6","line":65,"updated":"2014-09-02 23:28:28.000000000","message":"again, shard is a mongo specific term. Casting this into the catalog could have long term implications that are not pleasant.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"3a9cb033ab6ab35c49f8524a7d2b13d0057b428f","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        instances.create_column(Column(\u0027cluster_id\u0027, String(36),"},{"line_number":64,"context_line":"                                       ForeignKey(\"clusters.id\")))"},{"line_number":65,"context_line":"        instances.create_column(Column(\u0027shard_id\u0027, String(36)))"},{"line_number":66,"context_line":"        instances.create_column(Column(\u0027type\u0027, String(64)))"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        cluster_id_idx \u003d Index(\"instances_cluster_id\", instances.c.cluster_id)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_5c80d78a","line":65,"in_reply_to":"fa98f980_82678ab6","updated":"2014-09-04 22:50:02.000000000","message":"slave_id is a datastore-specific term that isn\u0027t applicable to all either. the concept of a cluster within a cluster (which is really what a shard is in mongo), doesn\u0027t quite exist for any other datastore i could find, so we felt it was appropriate to keep it explicit to avoid someone else abusing the column for something else.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"}],"trove/extensions/mgmt/clusters/models.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from trove.cluster import models as cluster_models"},{"line_number":18,"context_line":"from trove.instance import models as instance_models"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_37f2f69c","line":17,"updated":"2014-08-13 09:14:33.000000000","message":"do we really need to add aliases here ?","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"6a70872536c6bee2ca8aab439df8c92da353522c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from trove.cluster import models as cluster_models"},{"line_number":18,"context_line":"from trove.instance import models as instance_models"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_d1c0047f","line":17,"in_reply_to":"9ab29df4_e0da9816","updated":"2014-08-13 21:07:15.000000000","message":"Ok, but seems a bit strange. As for me, aliases are required to avoid import collision, but we don\u0027t have them here.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from trove.cluster import models as cluster_models"},{"line_number":18,"context_line":"from trove.instance import models as instance_models"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_e0da9816","line":17,"in_reply_to":"baada198_37f2f69c","updated":"2014-08-13 20:14:18.000000000","message":"there\u0027s no hard-and-fast rule against this in hacking rules or other style guidelines that i\u0027m aware of, so i\u0027ll keep this as-is.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"}],"trove/extensions/mgmt/clusters/service.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ebdcaa0c01b577884da3606b7f4c9d33b15e868f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    @admin_context"},{"line_number":40,"context_line":"    def index(self, req, tenant_id):"},{"line_number":41,"context_line":"        \"\"\"Return a list of clusters.\"\"\""},{"line_number":42,"context_line":"        LOG.debug(\"Showing a list of clusters for Tenant \u0027%s\u0027\" % tenant_id)"},{"line_number":43,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":44,"context_line":"        context \u003d req.environ[wsgi.CONTEXT_KEY]"},{"line_number":45,"context_line":"        deleted \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_a5183c76","line":42,"updated":"2014-08-27 14:56:48.000000000","message":"missing period","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f396529b0fb35a2bebe073086f89507307544b65","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    @admin_context"},{"line_number":40,"context_line":"    def index(self, req, tenant_id):"},{"line_number":41,"context_line":"        \"\"\"Return a list of clusters.\"\"\""},{"line_number":42,"context_line":"        LOG.debug(\"Showing a list of clusters for Tenant \u0027%s\u0027\" % tenant_id)"},{"line_number":43,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":44,"context_line":"        context \u003d req.environ[wsgi.CONTEXT_KEY]"},{"line_number":45,"context_line":"        deleted \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_0c7d8b1c","line":42,"in_reply_to":"1abeadc6_a5183c76","updated":"2014-08-27 18:34:11.000000000","message":"Done","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ebdcaa0c01b577884da3606b7f4c9d33b15e868f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def show(self, req, tenant_id, id):"},{"line_number":57,"context_line":"        \"\"\"Return a single cluster.\"\"\""},{"line_number":58,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":59,"context_line":"        LOG.info(_(\"Showing cluster for tenant \u0027%s\u0027\") % tenant_id)"},{"line_number":60,"context_line":"        LOG.info(_(\"id : \u0027%s\u0027\\n\\n\") % id)"},{"line_number":61,"context_line":"        context \u003d req.environ[wsgi.CONTEXT_KEY]"},{"line_number":62,"context_line":"        cluster \u003d models.MgmtCluster.load(context, id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_9a58fb57","line":59,"updated":"2014-08-27 14:56:48.000000000","message":"same here, shouldn\u0027t it be a debug info level?","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f396529b0fb35a2bebe073086f89507307544b65","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def show(self, req, tenant_id, id):"},{"line_number":57,"context_line":"        \"\"\"Return a single cluster.\"\"\""},{"line_number":58,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":59,"context_line":"        LOG.info(_(\"Showing cluster for tenant \u0027%s\u0027\") % tenant_id)"},{"line_number":60,"context_line":"        LOG.info(_(\"id : \u0027%s\u0027\\n\\n\") % id)"},{"line_number":61,"context_line":"        context \u003d req.environ[wsgi.CONTEXT_KEY]"},{"line_number":62,"context_line":"        cluster \u003d models.MgmtCluster.load(context, id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_4c73034e","line":59,"in_reply_to":"1abeadc6_9a58fb57","updated":"2014-08-27 18:34:11.000000000","message":"Done","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ebdcaa0c01b577884da3606b7f4c9d33b15e868f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def action(self, req, body, tenant_id, id):"},{"line_number":69,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":70,"context_line":"        LOG.info(_(\"Committing an action against cluster %(cluster)s for \""},{"line_number":71,"context_line":"                   \"tenant \u0027%(tenant)s\u0027\") % {\u0027cluster\u0027: id,"},{"line_number":72,"context_line":"                                             \u0027tenant\u0027: tenant_id})"},{"line_number":73,"context_line":"        if not body:"},{"line_number":74,"context_line":"            raise exception.BadRequest(_(\"Invalid request body.\"))"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_4513e85b","line":71,"updated":"2014-08-27 14:56:48.000000000","message":"missing period","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f396529b0fb35a2bebe073086f89507307544b65","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def action(self, req, body, tenant_id, id):"},{"line_number":69,"context_line":"        LOG.info(_(\"req : \u0027%s\u0027\\n\\n\") % req)"},{"line_number":70,"context_line":"        LOG.info(_(\"Committing an action against cluster %(cluster)s for \""},{"line_number":71,"context_line":"                   \"tenant \u0027%(tenant)s\u0027\") % {\u0027cluster\u0027: id,"},{"line_number":72,"context_line":"                                             \u0027tenant\u0027: tenant_id})"},{"line_number":73,"context_line":"        if not body:"},{"line_number":74,"context_line":"            raise exception.BadRequest(_(\"Invalid request body.\"))"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_ac957734","line":71,"in_reply_to":"1abeadc6_4513e85b","updated":"2014-08-27 18:34:11.000000000","message":"Done","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ebdcaa0c01b577884da3606b7f4c9d33b15e868f","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                    raise exception.BadRequest(msg)"},{"line_number":86,"context_line":"                selected_action \u003d _actions[key]"},{"line_number":87,"context_line":"            else:"},{"line_number":88,"context_line":"                msg \u003d _(\"Invalid cluster action: %s\") % key"},{"line_number":89,"context_line":"                raise exception.BadRequest(msg)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        if selected_action:"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_453a08ce","line":88,"updated":"2014-08-27 14:56:48.000000000","message":"missing period","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"f396529b0fb35a2bebe073086f89507307544b65","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                    raise exception.BadRequest(msg)"},{"line_number":86,"context_line":"                selected_action \u003d _actions[key]"},{"line_number":87,"context_line":"            else:"},{"line_number":88,"context_line":"                msg \u003d _(\"Invalid cluster action: %s\") % key"},{"line_number":89,"context_line":"                raise exception.BadRequest(msg)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        if selected_action:"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_0ca4aba4","line":88,"in_reply_to":"1abeadc6_453a08ce","updated":"2014-08-27 18:34:11.000000000","message":"Done","commit_id":"22c4b8d83887ab2a0ccb87b93d89c4cbd230952c"}],"trove/extensions/mgmt/clusters/views.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ea0d57e2c11f086a5b138c0cda1a8d8a66d55244","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from trove.common import cfg"},{"line_number":18,"context_line":"from trove.common import strategy"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"CONF \u003d cfg.CONF"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class MgmtClusterView(ClusterView):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d4d7ed20","line":20,"updated":"2014-08-13 12:56:13.000000000","message":"as i can see it\u0027s not used.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from trove.common import cfg"},{"line_number":18,"context_line":"from trove.common import strategy"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"CONF \u003d cfg.CONF"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class MgmtClusterView(ClusterView):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_80d63cc4","line":20,"in_reply_to":"baada198_d4d7ed20","updated":"2014-08-13 20:14:18.000000000","message":"good catch.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"}],"trove/extensions/mgmt/instances/service.py":[{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"f2be1afa1dada410fbfa337b4cd4a67a34773899","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        elif deleted_q in [\u0027false\u0027]:"},{"line_number":58,"context_line":"            deleted \u003d False"},{"line_number":59,"context_line":"        clustered_q \u003d req.GET.get(\u0027include_clustered\u0027, \u0027\u0027).lower()"},{"line_number":60,"context_line":"        include_clustered \u003d True if clustered_q \u003d\u003d \u0027true\u0027 else False"},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            instances \u003d models.load_mgmt_instances("},{"line_number":63,"context_line":"                context, deleted\u003ddeleted, include_clustered\u003dinclude_clustered)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_620f16e2","line":60,"updated":"2014-08-26 21:37:33.000000000","message":"Could this not be:\n    include_clustered \u003d (clustered_q \u003d\u003d \u0027true\u0027)\n\nand be more clear?","commit_id":"f5f099c2adf0b249d506ffdeb1a4bfb356d7fc15"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"b55a58c93babccabae4d74b0fdd9efa57a640bfa","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        elif deleted_q in [\u0027false\u0027]:"},{"line_number":58,"context_line":"            deleted \u003d False"},{"line_number":59,"context_line":"        clustered_q \u003d req.GET.get(\u0027include_clustered\u0027, \u0027\u0027).lower()"},{"line_number":60,"context_line":"        include_clustered \u003d True if clustered_q \u003d\u003d \u0027true\u0027 else False"},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            instances \u003d models.load_mgmt_instances("},{"line_number":63,"context_line":"                context, deleted\u003ddeleted, include_clustered\u003dinclude_clustered)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_f6fcc741","line":60,"in_reply_to":"1abeadc6_620f16e2","updated":"2014-08-26 22:16:51.000000000","message":"sure.","commit_id":"f5f099c2adf0b249d506ffdeb1a4bfb356d7fc15"}],"trove/instance/models.py":[{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"7183141f2e1ed7159f2289599985acaca72890ae","unresolved":false,"context_lines":[{"line_number":787,"context_line":"                   \"%(flavor_id)s.\")"},{"line_number":788,"context_line":"                 % {\u0027instance_id\u0027: self.id, \u0027flavor_id\u0027: new_flavor_id})"},{"line_number":789,"context_line":"        if self.db_info.cluster_id is not None:"},{"line_number":790,"context_line":"            raise exception.ClusterInstanceOperationNotSupported()"},{"line_number":791,"context_line":"        # Validate that the flavor can be found and that it isn\u0027t the same size"},{"line_number":792,"context_line":"        # as the current one."},{"line_number":793,"context_line":"        client \u003d create_nova_client(self.context)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_eca5d947","line":790,"updated":"2014-09-02 05:17:34.000000000","message":"Can this be abstracted out to a decorator so it doesn\u0027t have to be repeated? Feel free to do it as part of a bugfix.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"3a9cb033ab6ab35c49f8524a7d2b13d0057b428f","unresolved":false,"context_lines":[{"line_number":787,"context_line":"                   \"%(flavor_id)s.\")"},{"line_number":788,"context_line":"                 % {\u0027instance_id\u0027: self.id, \u0027flavor_id\u0027: new_flavor_id})"},{"line_number":789,"context_line":"        if self.db_info.cluster_id is not None:"},{"line_number":790,"context_line":"            raise exception.ClusterInstanceOperationNotSupported()"},{"line_number":791,"context_line":"        # Validate that the flavor can be found and that it isn\u0027t the same size"},{"line_number":792,"context_line":"        # as the current one."},{"line_number":793,"context_line":"        client \u003d create_nova_client(self.context)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_1c61ef04","line":790,"in_reply_to":"fa98f980_eca5d947","updated":"2014-09-04 22:50:02.000000000","message":"sure, seems reasonable.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"}],"trove/instance/service.py":[{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"f2be1afa1dada410fbfa337b4cd4a67a34773899","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        LOG.info(_(\"Indexing a database instance for tenant \u0027%s\u0027\") % tenant_id)"},{"line_number":131,"context_line":"        context \u003d req.environ[wsgi.CONTEXT_KEY]"},{"line_number":132,"context_line":"        clustered_q \u003d req.GET.get(\u0027include_clustered\u0027, \u0027\u0027).lower()"},{"line_number":133,"context_line":"        include_clustered \u003d True if clustered_q \u003d\u003d \u0027true\u0027 else False"},{"line_number":134,"context_line":"        servers, marker \u003d models.Instances.load(context, include_clustered)"},{"line_number":135,"context_line":"        view \u003d views.InstancesView(servers, req\u003dreq)"},{"line_number":136,"context_line":"        paged \u003d pagination.SimplePaginatedDataView(req.url, \u0027instances\u0027, view,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_021582e4","line":133,"updated":"2014-08-26 21:37:33.000000000","message":"Could this be:\n    include_clustered \u003d (clustered_q \u003d\u003d \u0027true\u0027)","commit_id":"f5f099c2adf0b249d506ffdeb1a4bfb356d7fc15"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"b55a58c93babccabae4d74b0fdd9efa57a640bfa","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        LOG.info(_(\"Indexing a database instance for tenant \u0027%s\u0027\") % tenant_id)"},{"line_number":131,"context_line":"        context \u003d req.environ[wsgi.CONTEXT_KEY]"},{"line_number":132,"context_line":"        clustered_q \u003d req.GET.get(\u0027include_clustered\u0027, \u0027\u0027).lower()"},{"line_number":133,"context_line":"        include_clustered \u003d True if clustered_q \u003d\u003d \u0027true\u0027 else False"},{"line_number":134,"context_line":"        servers, marker \u003d models.Instances.load(context, include_clustered)"},{"line_number":135,"context_line":"        view \u003d views.InstancesView(servers, req\u003dreq)"},{"line_number":136,"context_line":"        paged \u003d pagination.SimplePaginatedDataView(req.url, \u0027instances\u0027, view,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abeadc6_36f71f5b","line":133,"in_reply_to":"1abeadc6_021582e4","updated":"2014-08-26 22:16:51.000000000","message":"sure.","commit_id":"f5f099c2adf0b249d506ffdeb1a4bfb356d7fc15"}],"trove/quota/quota.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"06feabfdeb5ea91056c43f13d8c5860c4d8ba581","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                                                           deltas.keys())"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        reservations \u003d []"},{"line_number":178,"context_line":"        for resource in sorted(deltas):"},{"line_number":179,"context_line":"            reserved \u003d deltas[resource]"},{"line_number":180,"context_line":"            usage \u003d quota_usages[resource]"},{"line_number":181,"context_line":"            usage.reserved +\u003d reserved"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_829a2a6c","line":178,"updated":"2014-09-02 23:28:28.000000000","message":"why sorted?","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"3a9cb033ab6ab35c49f8524a7d2b13d0057b428f","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                                                           deltas.keys())"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        reservations \u003d []"},{"line_number":178,"context_line":"        for resource in sorted(deltas):"},{"line_number":179,"context_line":"            reserved \u003d deltas[resource]"},{"line_number":180,"context_line":"            usage \u003d quota_usages[resource]"},{"line_number":181,"context_line":"            usage.reserved +\u003d reserved"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_3c0a3326","line":178,"in_reply_to":"fa98f980_829a2a6c","updated":"2014-09-04 22:50:02.000000000","message":"helps fix some unit tests to be more reliable.","commit_id":"bc6475699587a6c6fe01966950b30f0e8f97ffe4"}],"trove/tests/unittests/quota/test_quota.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"d801babfe09136a12b99c818837dc5ee25b6aff6","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import testtools"},{"line_number":16,"context_line":"from mock import Mock, MagicMock, patch"},{"line_number":17,"context_line":"from trove.quota.quota import DbQuotaDriver"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f7b07e8f","line":14,"updated":"2014-08-13 09:14:33.000000000","message":"please remove it.","commit_id":"079ff810ad78459f1023901d3ad2450625378478"},{"author":{"_account_id":8214,"name":"Auston McReynolds","email":"amcreynolds@ebaysf.com","username":"amcreynolds"},"change_message_id":"630ec15e3b8163b31edcc028fa10fca726a69062","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import testtools"},{"line_number":16,"context_line":"from mock import Mock, MagicMock, patch"},{"line_number":17,"context_line":"from trove.quota.quota import DbQuotaDriver"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab29df4_80a47c58","line":14,"in_reply_to":"baada198_f7b07e8f","updated":"2014-08-13 20:14:18.000000000","message":"sorry, remove what?","commit_id":"079ff810ad78459f1023901d3ad2450625378478"}]}
