)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"b6a57de23bde86c942573a5c9c11cc7dbcb59588","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Authored-By: Matt Van Dijk \u003cmvandijk@tesora.com\u003e"},{"line_number":29,"context_line":"Implements: blueprint cluster-scaling"},{"line_number":30,"context_line":"Change-Id: Icc2218a851ab6646fd442515fe7b067a47bc8884"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"da20952f_f4c9717a","line":30,"updated":"2015-09-02 20:34:05.000000000","message":"add this so we can get this through the check.\n\nDepends-On: I633273d438c22f98bef2fd1535730bcdb5e5cff0","commit_id":"479bfad4e6a9adbd7882bf15f797b068e8eaf0c1"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"ef242c271989f75d76513adfc9c379ed1509d0e2","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Authored-By: Matt Van Dijk \u003cmvandijk@tesora.com\u003e"},{"line_number":29,"context_line":"Implements: blueprint cluster-scaling"},{"line_number":30,"context_line":"Change-Id: Icc2218a851ab6646fd442515fe7b067a47bc8884"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"da20952f_8877889e","line":30,"in_reply_to":"da20952f_f4c9717a","updated":"2015-09-03 16:59:10.000000000","message":"Done.","commit_id":"479bfad4e6a9adbd7882bf15f797b068e8eaf0c1"}],"trove/cluster/service.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"b6a57de23bde86c942573a5c9c11cc7dbcb59588","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            wsgi_result \u003d wsgi.Result(view.data(), 202)"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            wsgi_result \u003d wsgi.Result(None, 202)"},{"line_number":81,"context_line":"        return wsgi_result"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def show(self, req, tenant_id, id):"},{"line_number":84,"context_line":"        \"\"\"Return a single cluster.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_f9cc0a63","line":81,"updated":"2015-09-02 20:34:05.000000000","message":"i like this fact that we keep the wsgi result in here in service but the draw back i see is that all actions will return 202. I suppose thats ok for now.","commit_id":"479bfad4e6a9adbd7882bf15f797b068e8eaf0c1"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"ef242c271989f75d76513adfc9c379ed1509d0e2","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            wsgi_result \u003d wsgi.Result(view.data(), 202)"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            wsgi_result \u003d wsgi.Result(None, 202)"},{"line_number":81,"context_line":"        return wsgi_result"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def show(self, req, tenant_id, id):"},{"line_number":84,"context_line":"        \"\"\"Return a single cluster.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_4823b0a7","line":81,"in_reply_to":"da20952f_f9cc0a63","updated":"2015-09-03 16:59:10.000000000","message":"This is what the other functions in here do.","commit_id":"479bfad4e6a9adbd7882bf15f797b068e8eaf0c1"}],"trove/common/cfg.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2ab2cfb3a6e0016fd87e09ed291cf1d1986313be","unresolved":false,"context_lines":[{"line_number":712,"context_line":"    cfg.IntOpt(\u0027num_query_routers_per_cluster\u0027, default\u003d1,"},{"line_number":713,"context_line":"               help\u003d\u0027The number of query routers (mongos) to create \u0027"},{"line_number":714,"context_line":"                    \u0027per cluster.\u0027),"},{"line_number":715,"context_line":"    cfg.ListOpt(\u0027num_members_per_replica_set\u0027, default\u003d[3],"},{"line_number":716,"context_line":"                help\u003d\u0027The number of members allowed in a replica set.\u0027),"},{"line_number":717,"context_line":"    cfg.BoolOpt(\u0027cluster_support\u0027, default\u003dTrue,"},{"line_number":718,"context_line":"                help\u003d\u0027Enable clusters to be created and managed.\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_bf8aeabd","line":715,"updated":"2015-08-04 16:24:17.000000000","message":"why should this be a list ?","commit_id":"9174f0998e5e475da3bdf3366fd9793248178362"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"beb5346dfe23b91285463a4180e86b4b5cee0e1e","unresolved":false,"context_lines":[{"line_number":712,"context_line":"    cfg.IntOpt(\u0027num_query_routers_per_cluster\u0027, default\u003d1,"},{"line_number":713,"context_line":"               help\u003d\u0027The number of query routers (mongos) to create \u0027"},{"line_number":714,"context_line":"                    \u0027per cluster.\u0027),"},{"line_number":715,"context_line":"    cfg.ListOpt(\u0027num_members_per_replica_set\u0027, default\u003d[3],"},{"line_number":716,"context_line":"                help\u003d\u0027The number of members allowed in a replica set.\u0027),"},{"line_number":717,"context_line":"    cfg.BoolOpt(\u0027cluster_support\u0027, default\u003dTrue,"},{"line_number":718,"context_line":"                help\u003d\u0027Enable clusters to be created and managed.\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_c8f619f9","line":715,"in_reply_to":"1a4dcd0f_bf8aeabd","updated":"2015-08-06 15:44:26.000000000","message":"Actually forgot to remove this. I had a thought to allow others but decided it was out of scope.","commit_id":"9174f0998e5e475da3bdf3366fd9793248178362"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2ab2cfb3a6e0016fd87e09ed291cf1d1986313be","unresolved":false,"context_lines":[{"line_number":746,"context_line":"               help\u003d\u0027Port for mongod and mongos instances.\u0027),"},{"line_number":747,"context_line":"    cfg.IntOpt(\u0027configsvr_port\u0027, default\u003d27019,"},{"line_number":748,"context_line":"               help\u003d\u0027Port for instances running as config servers.\u0027),"},{"line_number":749,"context_line":"    cfg.IntOpt(\u0027add_members_timeout\u0027, default\u003d300,"},{"line_number":750,"context_line":"               help\u003d\u0027Maximum time to wait (in seconds) for a replica set \u0027"},{"line_number":751,"context_line":"                    \u0027initialization process to complete.\u0027),"},{"line_number":752,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_ff6dd204","line":749,"updated":"2015-08-04 16:24:17.000000000","message":"can\u0027t usage_timeout be re-used ?","commit_id":"9174f0998e5e475da3bdf3366fd9793248178362"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"beb5346dfe23b91285463a4180e86b4b5cee0e1e","unresolved":false,"context_lines":[{"line_number":746,"context_line":"               help\u003d\u0027Port for mongod and mongos instances.\u0027),"},{"line_number":747,"context_line":"    cfg.IntOpt(\u0027configsvr_port\u0027, default\u003d27019,"},{"line_number":748,"context_line":"               help\u003d\u0027Port for instances running as config servers.\u0027),"},{"line_number":749,"context_line":"    cfg.IntOpt(\u0027add_members_timeout\u0027, default\u003d300,"},{"line_number":750,"context_line":"               help\u003d\u0027Maximum time to wait (in seconds) for a replica set \u0027"},{"line_number":751,"context_line":"                    \u0027initialization process to complete.\u0027),"},{"line_number":752,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_a8414d0d","line":749,"in_reply_to":"1a4dcd0f_ff6dd204","updated":"2015-08-06 15:44:26.000000000","message":"The description of \u0027usage_timeout\u0027 doesn\u0027t match what is needed.","commit_id":"9174f0998e5e475da3bdf3366fd9793248178362"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"e62b4df681d02c6dd0c6954356977708f55f9dbe","unresolved":false,"context_lines":[{"line_number":751,"context_line":"    cfg.ListOpt(\u0027ignore_users\u0027, default\u003d[\u0027admin.os_admin\u0027, \u0027admin.root\u0027],"},{"line_number":752,"context_line":"                help\u003d\u0027Users to exclude when listing users.\u0027),"},{"line_number":753,"context_line":"    cfg.IntOpt(\u0027add_members_timeout\u0027, default\u003d300,"},{"line_number":754,"context_line":"               help\u003d\u0027Maximum time to wait (in seconds) for a replica set \u0027"},{"line_number":755,"context_line":"                    \u0027initialization process to complete.\u0027),"},{"line_number":756,"context_line":"]"},{"line_number":757,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"da20952f_63380ea1","line":754,"range":{"start_line":754,"start_character":61,"end_line":754,"end_character":72},"updated":"2015-09-03 20:47:18.000000000","message":"Hmm, maybe we shouldn\u0027t interchange the replica/cluster terminology?","commit_id":"53fd27c719f6d9948550471619cbfaed7569d19d"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"008da74e78a6565ba8b9211a6bb5ab42b55b17f4","unresolved":false,"context_lines":[{"line_number":751,"context_line":"    cfg.ListOpt(\u0027ignore_users\u0027, default\u003d[\u0027admin.os_admin\u0027, \u0027admin.root\u0027],"},{"line_number":752,"context_line":"                help\u003d\u0027Users to exclude when listing users.\u0027),"},{"line_number":753,"context_line":"    cfg.IntOpt(\u0027add_members_timeout\u0027, default\u003d300,"},{"line_number":754,"context_line":"               help\u003d\u0027Maximum time to wait (in seconds) for a replica set \u0027"},{"line_number":755,"context_line":"                    \u0027initialization process to complete.\u0027),"},{"line_number":756,"context_line":"]"},{"line_number":757,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"da20952f_35e56ba3","line":754,"range":{"start_line":754,"start_character":61,"end_line":754,"end_character":72},"in_reply_to":"da20952f_63380ea1","updated":"2015-09-03 22:12:34.000000000","message":"This is the term for it, or we could say shard though that isn\u0027t quite accurate.","commit_id":"53fd27c719f6d9948550471619cbfaed7569d19d"}],"trove/common/strategies/cluster/experimental/mongodb/api.py":[{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"beb5346dfe23b91285463a4180e86b4b5cee0e1e","unresolved":false,"context_lines":[{"line_number":532,"context_line":"            flavor \u003d None"},{"line_number":533,"context_line":"            size \u003d None"},{"line_number":534,"context_line":"            for member in shard:"},{"line_number":535,"context_line":"                if (flavor and member[\u0027flavor_id\u0027] !\u003d flavor) or \\"},{"line_number":536,"context_line":"                        (size and member[\u0027volume_size\u0027] !\u003d size):"},{"line_number":537,"context_line":"                    raise exception.TroveError("},{"line_number":538,"context_line":"                        _(\u0027Members of the same shard have mismatching \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_6943d913","line":535,"updated":"2015-08-06 15:44:26.000000000","message":"fixing this \\ as well","commit_id":"9174f0998e5e475da3bdf3366fd9793248178362"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2ab2cfb3a6e0016fd87e09ed291cf1d1986313be","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        member \u003d inst_models.load_any_instance(self.context, member_id)"},{"line_number":567,"context_line":"        guest \u003d self.get_guest(member)"},{"line_number":568,"context_line":"        rs_name \u003d guest.get_replica_set_name()"},{"line_number":569,"context_line":"        if self.get_guest(self.arbitrary_query_router).\\"},{"line_number":570,"context_line":"                is_shard_active(rs_name):"},{"line_number":571,"context_line":"            raise exception.TroveError("},{"line_number":572,"context_line":"                _(\u0027Shard with instance %s is still active. Please remove the \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_72f3399f","line":569,"updated":"2015-08-04 16:24:17.000000000","message":"please use () instead of /","commit_id":"9174f0998e5e475da3bdf3366fd9793248178362"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"beb5346dfe23b91285463a4180e86b4b5cee0e1e","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        member \u003d inst_models.load_any_instance(self.context, member_id)"},{"line_number":567,"context_line":"        guest \u003d self.get_guest(member)"},{"line_number":568,"context_line":"        rs_name \u003d guest.get_replica_set_name()"},{"line_number":569,"context_line":"        if self.get_guest(self.arbitrary_query_router).\\"},{"line_number":570,"context_line":"                is_shard_active(rs_name):"},{"line_number":571,"context_line":"            raise exception.TroveError("},{"line_number":572,"context_line":"                _(\u0027Shard with instance %s is still active. Please remove the \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_69f519eb","line":569,"in_reply_to":"1a4dcd0f_72f3399f","updated":"2015-08-06 15:44:26.000000000","message":"done, also fixed other occurrance above","commit_id":"9174f0998e5e475da3bdf3366fd9793248178362"}],"trove/common/strategies/cluster/experimental/mongodb/taskmanager.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2ab2cfb3a6e0016fd87e09ed291cf1d1986313be","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                LOG.error(_(\"timeout for instances to be marked as deleted.\"))"},{"line_number":288,"context_line":"                return"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        cluster_usage_timeout \u003d CONF.cluster_usage_timeout"},{"line_number":291,"context_line":"        timeout \u003d Timeout(cluster_usage_timeout)"},{"line_number":292,"context_line":"        try:"},{"line_number":293,"context_line":"            _shrink_cluster()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_f212e961","line":290,"updated":"2015-08-04 16:24:17.000000000","message":"We\u0027re seeing this code copied accross multiple places, we need to make it as decorator ?","commit_id":"9174f0998e5e475da3bdf3366fd9793248178362"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"beb5346dfe23b91285463a4180e86b4b5cee0e1e","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                LOG.error(_(\"timeout for instances to be marked as deleted.\"))"},{"line_number":288,"context_line":"                return"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        cluster_usage_timeout \u003d CONF.cluster_usage_timeout"},{"line_number":291,"context_line":"        timeout \u003d Timeout(cluster_usage_timeout)"},{"line_number":292,"context_line":"        try:"},{"line_number":293,"context_line":"            _shrink_cluster()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_e9a7e9a4","line":290,"in_reply_to":"1a4dcd0f_f212e961","updated":"2015-08-06 15:44:26.000000000","message":"Good idea but I\u0027d say OOS for this as it would require modifying create and add_shard","commit_id":"9174f0998e5e475da3bdf3366fd9793248178362"}],"trove/guestagent/common/operating_system.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"b6a57de23bde86c942573a5c9c11cc7dbcb59588","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    raise exception.UnprocessableEntity(_(\"File does not exist: %s\") % path)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def _read_file_as_root(path, codec\u003dIdentityCodec):"},{"line_number":65,"context_line":"    \"\"\"Read a file as root."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    :param path                Path to the written file."}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_99b94e31","line":64,"range":{"start_line":64,"start_character":35,"end_line":64,"end_character":48},"updated":"2015-09-02 20:34:05.000000000","message":"this looks a bit different from the others around. IdentityCodec()? Since this is a helper class though i dont think it needs a default.","commit_id":"479bfad4e6a9adbd7882bf15f797b068e8eaf0c1"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"2f6c8675438851a0623ee951c8fdb62552f2edfc","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    raise exception.UnprocessableEntity(_(\"File does not exist: %s\") % path)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def _read_file_as_root(path, codec\u003dIdentityCodec):"},{"line_number":65,"context_line":"    \"\"\"Read a file as root."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    :param path                Path to the written file."}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_cff4865c","line":64,"range":{"start_line":64,"start_character":35,"end_line":64,"end_character":48},"in_reply_to":"da20952f_236bf6ba","updated":"2015-09-04 11:26:39.000000000","message":"Ok, this is a bug. It (and its write counterpart) should instantiate the object.\nI guess it has not shown up yet because all callers currently pass in their own codec objects.","commit_id":"479bfad4e6a9adbd7882bf15f797b068e8eaf0c1"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"0d9bc97dfbeec6b86bcec26056cd66064caa4200","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    raise exception.UnprocessableEntity(_(\"File does not exist: %s\") % path)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def _read_file_as_root(path, codec\u003dIdentityCodec):"},{"line_number":65,"context_line":"    \"\"\"Read a file as root."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    :param path                Path to the written file."}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_236bf6ba","line":64,"range":{"start_line":64,"start_character":35,"end_line":64,"end_character":48},"in_reply_to":"da20952f_689b14ca","updated":"2015-09-03 20:47:52.000000000","message":"Well, it\u0027s the same as _write_file_as_root - all the other methods instantiate the class; these two pass in the class definition.  Not sure how this code works, since deserialize isn\u0027t a classmethod ...","commit_id":"479bfad4e6a9adbd7882bf15f797b068e8eaf0c1"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"ef242c271989f75d76513adfc9c379ed1509d0e2","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    raise exception.UnprocessableEntity(_(\"File does not exist: %s\") % path)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def _read_file_as_root(path, codec\u003dIdentityCodec):"},{"line_number":65,"context_line":"    \"\"\"Read a file as root."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    :param path                Path to the written file."}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_689b14ca","line":64,"range":{"start_line":64,"start_character":35,"end_line":64,"end_character":48},"in_reply_to":"da20952f_99b94e31","updated":"2015-09-03 16:59:10.000000000","message":"This is the same as above.","commit_id":"479bfad4e6a9adbd7882bf15f797b068e8eaf0c1"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"eb77661608bb06ad6b16dcb91896797317fccdc7","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    raise exception.UnprocessableEntity(_(\"File does not exist: %s\") % path)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def _read_file_as_root(path, codec\u003dIdentityCodec):"},{"line_number":65,"context_line":"    \"\"\"Read a file as root."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    :param path                Path to the written file."}],"source_content_type":"text/x-python","patch_set":15,"id":"da20952f_0ab4ac32","line":64,"updated":"2015-09-04 11:48:40.000000000","message":"I suggest making the codec a required positional parameter. This is an internal function and the public interfaces that call it already define their own defaults.\nIn any case the current value should be an object, not a class. It would fail should it ever get called with the current default.","commit_id":"53fd27c719f6d9948550471619cbfaed7569d19d"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"eb77661608bb06ad6b16dcb91896797317fccdc7","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        raise exception.UnprocessableEntity(_(\"Invalid path: %s\") % path)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"def _write_file_as_root(path, data, codec\u003dIdentityCodec):"},{"line_number":110,"context_line":"    \"\"\"Write a file as root. Overwrite any existing contents."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    :param path                Path to the written file."}],"source_content_type":"text/x-python","patch_set":15,"id":"da20952f_4adce472","line":109,"updated":"2015-09-04 11:48:40.000000000","message":"ditto","commit_id":"53fd27c719f6d9948550471619cbfaed7569d19d"}]}
