)]}'
{"glance/api/v1/images.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a6ceb9823b3cc324c683ff9c841b920b12f9a39c","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        If the above constraint is violated, we reject with 400 \"Bad Request\"."},{"line_number":278,"context_line":"        \"\"\""},{"line_number":279,"context_line":"        if source:"},{"line_number":280,"context_line":"            for scheme in [\u0027s3\u0027, \u0027swift\u0027, \u0027http\u0027, \u0027rbd\u0027, \u0027sheepdog\u0027]:"},{"line_number":281,"context_line":"                if source.lower().startswith(scheme):"},{"line_number":282,"context_line":"                    return source"},{"line_number":283,"context_line":"            msg \u003d _(\"External sourcing not supported for store %s\") % source"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAP3%2F%2F9t4%3D","line":280,"updated":"2013-07-08 13:46:31.000000000","message":"I think we should move this list somewhere else. Will file a bug for it","commit_id":"1757e7e0ae92772cde3114500261b8432266f8d1"}],"glance/store/sheepdog.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"sheepdog_opts \u003d ["},{"line_number":42,"context_line":"    cfg.IntOpt(\u0027sheepdog_store_chunk_size\u0027, default\u003dDEFAULT_CHUNKSIZE),"},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027sheepdog_store_port\u0027, default\u003dDEFAULT_PORT),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027sheepdog_store_address\u0027, default\u003dDEFAULT_ADDR),"},{"line_number":45,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FxtU%3D","line":42,"updated":"2013-05-23 09:44:31.000000000","message":"pls, add help text to the options","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":7598,"name":"Liu Yuan","email":"namei.unix@gmail.com","username":"yliu"},"change_message_id":"3a43beb7089937f63d97325aaf0693ae451ca997","unresolved":false,"context_lines":[{"line_number":39,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"sheepdog_opts \u003d ["},{"line_number":42,"context_line":"    cfg.IntOpt(\u0027sheepdog_store_chunk_size\u0027, default\u003dDEFAULT_CHUNKSIZE),"},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027sheepdog_store_port\u0027, default\u003dDEFAULT_PORT),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027sheepdog_store_address\u0027, default\u003dDEFAULT_ADDR),"},{"line_number":45,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fxp8%3D","line":42,"in_reply_to":"AAAAPH%2F%2FxtU%3D","updated":"2013-05-23 10:08:26.000000000","message":"Will do it","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":48,"context_line":"CONF.register_opts(sheepdog_opts)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def execute(cmd, data\u003dNone):"},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    Executes a command in a subprocess. Returns a tuple"},{"line_number":54,"context_line":"    of (exitcode, out, err), where out is the string output"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FxvA%3D","line":51,"updated":"2013-05-23 09:44:31.000000000","message":"Is this something other areas can benefit from? tests? Perhaps it should be moved to utils.py?\n\nAlso, Is there something like this in Oslo? I\u0027ve seen similar functions in other projects, is this something we can move to Oslo?","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":7598,"name":"Liu Yuan","email":"namei.unix@gmail.com","username":"yliu"},"change_message_id":"e2a61c0ddd99dd0445f99c6ea8aba1bf78dd74cb","unresolved":false,"context_lines":[{"line_number":48,"context_line":"CONF.register_opts(sheepdog_opts)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def execute(cmd, data\u003dNone):"},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    Executes a command in a subprocess. Returns a tuple"},{"line_number":54,"context_line":"    of (exitcode, out, err), where out is the string output"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FvSo%3D","line":51,"in_reply_to":"AAAAPH%2F%2FwWQ%3D","updated":"2013-05-24 02:13:21.000000000","message":"Hmm, if so, I\u0027d rather keep execute as is to keep this patch self-containing and simple. And later patch that import processutil from oslo-incubator can make a better decision to replace it or not and maybe a more generic helper with more functionality.","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"6a26ae40b2d0322584c6d7e01ef74eb446fa3090","unresolved":false,"context_lines":[{"line_number":48,"context_line":"CONF.register_opts(sheepdog_opts)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def execute(cmd, data\u003dNone):"},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    Executes a command in a subprocess. Returns a tuple"},{"line_number":54,"context_line":"    of (exitcode, out, err), where out is the string output"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FwWQ%3D","line":51,"in_reply_to":"AAAAPH%2F%2Fxpo%3D","updated":"2013-05-23 19:47:10.000000000","message":"oslo incubator has a processutil module that would probably work well for this. But glance currently does not carry processutil. However, I can think of no reason why we wouldn\u0027t want a patch that adds processutil from oslo-incubator","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":7598,"name":"Liu Yuan","email":"namei.unix@gmail.com","username":"yliu"},"change_message_id":"3a43beb7089937f63d97325aaf0693ae451ca997","unresolved":false,"context_lines":[{"line_number":48,"context_line":"CONF.register_opts(sheepdog_opts)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def execute(cmd, data\u003dNone):"},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    Executes a command in a subprocess. Returns a tuple"},{"line_number":54,"context_line":"    of (exitcode, out, err), where out is the string output"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fxpo%3D","line":51,"in_reply_to":"AAAAPH%2F%2FxvA%3D","updated":"2013-05-23 10:08:26.000000000","message":"Maybe, to be honest,  I am unfamiliar with python and its lib, so would be nice if you can point to me what helper method I can use from Oslo to do the similar thing","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    executing the command."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    :param cmd: Command string to execute"},{"line_number":59,"context_line":"    :param cmd: Data passed to the command"},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    LOG.debug(cmd)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fxu8%3D","line":59,"updated":"2013-05-23 09:44:31.000000000","message":"data*","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":7598,"name":"Liu Yuan","email":"namei.unix@gmail.com","username":"yliu"},"change_message_id":"3a43beb7089937f63d97325aaf0693ae451ca997","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    executing the command."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    :param cmd: Command string to execute"},{"line_number":59,"context_line":"    :param cmd: Data passed to the command"},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    LOG.debug(cmd)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fxpg%3D","line":59,"in_reply_to":"AAAAPH%2F%2Fxu8%3D","updated":"2013-05-23 10:08:26.000000000","message":"what did you mean by \u0027data*\u0027?  Did you mean Data should be \u0027data\u0027 in the comment?","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def get_size(self):"},{"line_number":87,"context_line":"        #Usage: collie vdi list -r -a address -p port image"},{"line_number":88,"context_line":"        cmd \u003d \"collie vdi list -r -a %s -p %s %s\" % \\"},{"line_number":89,"context_line":"                (self.addr, self.port, self.name)"},{"line_number":90,"context_line":"        exitcode, out, err \u003d execute(cmd)"},{"line_number":91,"context_line":"        if exitcode !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fxsk%3D","line":88,"updated":"2013-05-23 09:44:31.000000000","message":"what about having a _run_command method that wraps the common code of all SheepdogImage methods?\n\nNot tested: http://paste.openstack.org/show/37659/","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":7598,"name":"Liu Yuan","email":"namei.unix@gmail.com","username":"yliu"},"change_message_id":"3a43beb7089937f63d97325aaf0693ae451ca997","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def get_size(self):"},{"line_number":87,"context_line":"        #Usage: collie vdi list -r -a address -p port image"},{"line_number":88,"context_line":"        cmd \u003d \"collie vdi list -r -a %s -p %s %s\" % \\"},{"line_number":89,"context_line":"                (self.addr, self.port, self.name)"},{"line_number":90,"context_line":"        exitcode, out, err \u003d execute(cmd)"},{"line_number":91,"context_line":"        if exitcode !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fxpc%3D","line":88,"in_reply_to":"AAAAPH%2F%2Fxsk%3D","updated":"2013-05-23 10:08:26.000000000","message":"Looks cleaner  to me,  will take this.","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            raise glance.store.BackendException(err)"},{"line_number":94,"context_line":"        return long(out.split(\u0027 \u0027)[3])"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def read(self, offset, count):"},{"line_number":97,"context_line":"        #Usage: collie vdi read -a address -p port image offset len"},{"line_number":98,"context_line":"        cmd \u003d \"collie vdi read -a %s -p %s %s %s %s\" % \\"},{"line_number":99,"context_line":"                (self.addr, self.port, self.name, str(offset), str(count))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fxu0%3D","line":96,"updated":"2013-05-23 09:44:31.000000000","message":"pls, docstring","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def read(self, offset, count):"},{"line_number":97,"context_line":"        #Usage: collie vdi read -a address -p port image offset len"},{"line_number":98,"context_line":"        cmd \u003d \"collie vdi read -a %s -p %s %s %s %s\" % \\"},{"line_number":99,"context_line":"                (self.addr, self.port, self.name, str(offset), str(count))"},{"line_number":100,"context_line":"        exitcode, out, err \u003d execute(cmd)"},{"line_number":101,"context_line":"        if exitcode !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fxuc%3D","line":98,"updated":"2013-05-23 09:44:31.000000000","message":"pls, use named arguments when there\u0027re more than one replacement","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            raise glance.store.BackendException(err)"},{"line_number":104,"context_line":"        return out"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def write(self, data, offset, count):"},{"line_number":107,"context_line":"        #Usage: collie vdi write -a address -p port image offset len"},{"line_number":108,"context_line":"        cmd \u003d \"collie vdi write -a %s -p %s %s %s %s\" % \\"},{"line_number":109,"context_line":"                (self.addr, self.port, self.name, offset, count)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FxuY%3D","line":106,"updated":"2013-05-23 09:44:31.000000000","message":"pls, docstring","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def write(self, data, offset, count):"},{"line_number":107,"context_line":"        #Usage: collie vdi write -a address -p port image offset len"},{"line_number":108,"context_line":"        cmd \u003d \"collie vdi write -a %s -p %s %s %s %s\" % \\"},{"line_number":109,"context_line":"                (self.addr, self.port, self.name, offset, count)"},{"line_number":110,"context_line":"        exitcode, out, err \u003d execute(cmd, data)"},{"line_number":111,"context_line":"        if exitcode !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FxuE%3D","line":108,"updated":"2013-05-23 09:44:31.000000000","message":"pls, use named arguments when there\u0027re more than one replacement","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            LOG.error(err)"},{"line_number":113,"context_line":"            raise glance.store.BackendException(err)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def create(self, size):"},{"line_number":116,"context_line":"        #Usage: collie vdi create -a address -p port image size"},{"line_number":117,"context_line":"        cmd \u003d \"collie vdi create -a %s -p %s %s %s\" % \\"},{"line_number":118,"context_line":"                (self.addr, self.port, self.name, str(size))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FxuU%3D","line":115,"updated":"2013-05-23 09:44:31.000000000","message":"pls, docstring","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def create(self, size):"},{"line_number":116,"context_line":"        #Usage: collie vdi create -a address -p port image size"},{"line_number":117,"context_line":"        cmd \u003d \"collie vdi create -a %s -p %s %s %s\" % \\"},{"line_number":118,"context_line":"                (self.addr, self.port, self.name, str(size))"},{"line_number":119,"context_line":"        exitcode, out, err \u003d execute(cmd)"},{"line_number":120,"context_line":"        if exitcode !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FxuA%3D","line":117,"updated":"2013-05-23 09:44:31.000000000","message":"pls, use named arguments when there\u0027re more than one replacement","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            LOG.error(err)"},{"line_number":122,"context_line":"            raise glance.store.BackendException(err)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def delete(self):"},{"line_number":125,"context_line":"        #Usage: collie vdi delete -a address -p port image"},{"line_number":126,"context_line":"        cmd \u003d \"collie vdi delete -a %s -p %s %s\" % \\"},{"line_number":127,"context_line":"                (self.addr, self.port, self.name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FxuM%3D","line":124,"updated":"2013-05-23 09:44:31.000000000","message":"pls, docstring","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def delete(self):"},{"line_number":125,"context_line":"        #Usage: collie vdi delete -a address -p port image"},{"line_number":126,"context_line":"        cmd \u003d \"collie vdi delete -a %s -p %s %s\" % \\"},{"line_number":127,"context_line":"                (self.addr, self.port, self.name)"},{"line_number":128,"context_line":"        exitcode, out, err \u003d execute(cmd)"},{"line_number":129,"context_line":"        if exitcode !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fxt8%3D","line":126,"updated":"2013-05-23 09:44:31.000000000","message":"pls, use named arguments when there\u0027re more than one replacement","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            LOG.error(err)"},{"line_number":131,"context_line":"            raise glance.store.BackendException(err)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def exist(self):"},{"line_number":134,"context_line":"        cmd \u003d \"collie vdi list -r -a %s -p %s %s\" % \\"},{"line_number":135,"context_line":"                (self.addr, self.port, self.name)"},{"line_number":136,"context_line":"        exitcode, out, err \u003d execute(cmd)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FxuQ%3D","line":133,"updated":"2013-05-23 09:44:31.000000000","message":"pls, docstring","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            raise glance.store.BackendException(err)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def exist(self):"},{"line_number":134,"context_line":"        cmd \u003d \"collie vdi list -r -a %s -p %s %s\" % \\"},{"line_number":135,"context_line":"                (self.addr, self.port, self.name)"},{"line_number":136,"context_line":"        exitcode, out, err \u003d execute(cmd)"},{"line_number":137,"context_line":"        if exitcode !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fxt4%3D","line":134,"updated":"2013-05-23 09:44:31.000000000","message":"pls, use named arguments when there\u0027re more than one replacement","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        try:"},{"line_number":203,"context_line":"            self.chunk_size \u003d CONF.sheepdog_store_chunk_size * 1024 * 1024"},{"line_number":204,"context_line":"            self.addr \u003d CONF.sheepdog_store_address"},{"line_number":205,"context_line":"            self.port \u003d CONF.sheepdog_store_port"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        except cfg.ConfigFileValueError as e:"},{"line_number":208,"context_line":"            reason \u003d _(\"Error in store configuration: %s\") % e"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fxtw%3D","line":205,"updated":"2013-05-23 09:44:31.000000000","message":"I think we should also verify whether the \u0027collie\u0027 command is available and raise BadStoreConfiguration if it isn\u0027t","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":7598,"name":"Liu Yuan","email":"namei.unix@gmail.com","username":"yliu"},"change_message_id":"3a43beb7089937f63d97325aaf0693ae451ca997","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        try:"},{"line_number":203,"context_line":"            self.chunk_size \u003d CONF.sheepdog_store_chunk_size * 1024 * 1024"},{"line_number":204,"context_line":"            self.addr \u003d CONF.sheepdog_store_address"},{"line_number":205,"context_line":"            self.port \u003d CONF.sheepdog_store_port"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        except cfg.ConfigFileValueError as e:"},{"line_number":208,"context_line":"            reason \u003d _(\"Error in store configuration: %s\") % e"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fxo0%3D","line":205,"in_reply_to":"AAAAPH%2F%2Fxtw%3D","updated":"2013-05-23 10:08:26.000000000","message":"Hmm, yeah.  Will do.","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"6c1ba3ac735714e4dd3c9d12326f038b42523a50","unresolved":false,"context_lines":[{"line_number":53,"context_line":"CONF.register_opts(sheepdog_opts)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def execute(cmd, data\u003dNone):"},{"line_number":57,"context_line":"    \"\"\""},{"line_number":58,"context_line":"    Executes a command in a subprocess. Returns a tuple"},{"line_number":59,"context_line":"    of (exitcode, out, err), where out is the string output"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FgW0%3D","line":56,"updated":"2013-05-31 17:09:17.000000000","message":"I do think it would make sense to use oslo.common.processutils for this. I can help make a dependent patch for this branch if you are unfamiliar/uncomfortable with bringing oslo common libraries into the glance code base.","commit_id":"a888245c6688a6ffdc5bc3df3b11ab682274f42e"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"469e110a1fa343d092971d194b8b5ad21bdbd7f4","unresolved":false,"context_lines":[{"line_number":53,"context_line":"CONF.register_opts(sheepdog_opts)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def execute(cmd, data\u003dNone):"},{"line_number":57,"context_line":"    \"\"\""},{"line_number":58,"context_line":"    Executes a command in a subprocess. Returns a tuple"},{"line_number":59,"context_line":"    of (exitcode, out, err), where out is the string output"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F%2BjM%3D","line":56,"in_reply_to":"AAAAPH%2F%2FgUM%3D","updated":"2013-06-04 18:31:11.000000000","message":"I\u0027ll put together a patch and a change to this one, and let you know.","commit_id":"a888245c6688a6ffdc5bc3df3b11ab682274f42e"},{"author":{"_account_id":7598,"name":"Liu Yuan","email":"namei.unix@gmail.com","username":"yliu"},"change_message_id":"743354ee1be5fe1164aea34d0cbd9c34085193b0","unresolved":false,"context_lines":[{"line_number":53,"context_line":"CONF.register_opts(sheepdog_opts)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def execute(cmd, data\u003dNone):"},{"line_number":57,"context_line":"    \"\"\""},{"line_number":58,"context_line":"    Executes a command in a subprocess. Returns a tuple"},{"line_number":59,"context_line":"    of (exitcode, out, err), where out is the string output"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FgUM%3D","line":56,"in_reply_to":"AAAAPH%2F%2FgW0%3D","updated":"2013-05-31 17:47:10.000000000","message":"Yeah, the problem is that I have no idea how to bring olso common into glance. Since this can be done on a separate patch and not technically related to add sheepdog store, so maybe it also works if\n\n1 merge this patch first\n2 add a patch to bring oslo and teach sheepdog.py to replace execute() and possible other potential users to use the new helpers.\n\nThat said, it looks okay to me to wait for your patch and rebase on it.","commit_id":"a888245c6688a6ffdc5bc3df3b11ab682274f42e"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"6ca30da03b2c8f294b86277f7bfcbccd3f502efa","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    executing the command."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    :param cmd: Command string to execute"},{"line_number":64,"context_line":"    :param cmd: Data passed to the command"},{"line_number":65,"context_line":"    \"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    LOG.debug(cmd)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FnCE%3D","line":64,"updated":"2013-06-07 08:17:48.000000000","message":"Hey,\n\nyou mean:\n\n:param data: right?\n\nThere\u0027s already a :param cmd:","commit_id":"a888245c6688a6ffdc5bc3df3b11ab682274f42e"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"6c1ba3ac735714e4dd3c9d12326f038b42523a50","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    \"\"\""},{"line_number":164,"context_line":"    Class describing a Sheepdog URI. This is of the form:"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        sheepdog://image"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    \"\"\""},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FgWQ%3D","line":166,"updated":"2013-05-31 17:09:17.000000000","message":"Maybe this is unlikely, but what if a deployer wanted to run with multiple sheepdog backends. One of them has to be the default, to be sure, but it could be useful for backend migrations or when the first sheepdog backend you use fills up so it can\u0027t receive new images.\n\nIt might be useful in that case to encode more detail in the uri, such as the sheepdog host, optional port, and maybe even the chunk size matters there too.","commit_id":"a888245c6688a6ffdc5bc3df3b11ab682274f42e"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"469e110a1fa343d092971d194b8b5ad21bdbd7f4","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    \"\"\""},{"line_number":164,"context_line":"    Class describing a Sheepdog URI. This is of the form:"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        sheepdog://image"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    \"\"\""},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2F%2BjY%3D","line":166,"in_reply_to":"AAAAPH%2F%2FgS4%3D","updated":"2013-06-04 18:31:11.000000000","message":"Fair points. Let\u0027s defer.","commit_id":"a888245c6688a6ffdc5bc3df3b11ab682274f42e"},{"author":{"_account_id":7598,"name":"Liu Yuan","email":"namei.unix@gmail.com","username":"yliu"},"change_message_id":"743354ee1be5fe1164aea34d0cbd9c34085193b0","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    \"\"\""},{"line_number":164,"context_line":"    Class describing a Sheepdog URI. This is of the form:"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        sheepdog://image"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    \"\"\""},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FgS4%3D","line":166,"in_reply_to":"AAAAPH%2F%2FgWQ%3D","updated":"2013-05-31 17:47:10.000000000","message":"Sheepdog cluster supports hundreds of nodes and each node can have strictly unlimited disks,  so that to support PB level images and can be lively scaled out or in by add/delete nodes on the fly, so I think most users will be fine with a single cluster.\n\nWell, for the possible user case that needs multiple sheepdog clusters, I\u0027d like see a more on-demand approach, that design URI to support access to different Sheepdog clusters as real users ask us for it. The rationale is:\n\n1 Current Sheepdog cluster doesn\u0027t have a concept of cluster_id\n2 it is simpler to access images as \u0027sheepdog://image\u0027 when we only support a single cluster. \u0027sheepdog://address:port//image\u0027 looks redundant in this case and would be very hard to extend to be multiple cluster pattern in the future.\n3 In the future when demand comes, we are in a better position to design URI and possible we have more resources like cluster_id ready to support more complex pattern.","commit_id":"a888245c6688a6ffdc5bc3df3b11ab682274f42e"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"875b6ac21d28ca57d9dac10ed76ba7f270376fa3","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\"Storage backend for Sheepdog storage system\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import hashlib"},{"line_number":21,"context_line":"import os"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPX%2F%2Fuo4%3D","line":21,"updated":"2013-06-11 19:50:26.000000000","message":"Looks like this import is no longer needed.","commit_id":"e150c647810472063ca917c56dc4349d2ef295f6"}],"glance/tests/functional/store/test_sheepdog.py":[{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"875b6ac21d28ca57d9dac10ed76ba7f270376fa3","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                                       sheepdog.DEFAULT_CHUNKSIZE)"},{"line_number":45,"context_line":"        try:"},{"line_number":46,"context_line":"            image.create(512)"},{"line_number":47,"context_line":"        except BackendException as e:"},{"line_number":48,"context_line":"            msg \u003d \"Sheepdog cluster isn\u0027t set up\""},{"line_number":49,"context_line":"            self.skipTest(msg)"},{"line_number":50,"context_line":"        image.delete()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPX%2F%2FupI%3D","line":47,"updated":"2013-06-11 19:50:26.000000000","message":"Maybe this exception should be more general? Just Exception?","commit_id":"e150c647810472063ca917c56dc4349d2ef295f6"}],"glance/tests/unit/test_store_location.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"a430eb8f1f2c16621c3879309f89a3173306fee1","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        bad_uri \u003d \u0027rbd://\u0027 + unichr(300)"},{"line_number":363,"context_line":"        self.assertRaises(exception.BadStoreUri, loc.parse_uri, bad_uri)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    def test_sheepdog_store_location(self):"},{"line_number":366,"context_line":"        \"\"\""},{"line_number":367,"context_line":"        Test the specific StoreLocation for the Sheepdog store"},{"line_number":368,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FxsY%3D","line":365,"updated":"2013-05-23 09:44:31.000000000","message":"pls, move this test to sheepdog\u0027s test file.\n\nI know there are other stores being tested here but that\u0027s something we should change in the, hopefully near, future.","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"},{"author":{"_account_id":7598,"name":"Liu Yuan","email":"namei.unix@gmail.com","username":"yliu"},"change_message_id":"3a43beb7089937f63d97325aaf0693ae451ca997","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        bad_uri \u003d \u0027rbd://\u0027 + unichr(300)"},{"line_number":363,"context_line":"        self.assertRaises(exception.BadStoreUri, loc.parse_uri, bad_uri)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    def test_sheepdog_store_location(self):"},{"line_number":366,"context_line":"        \"\"\""},{"line_number":367,"context_line":"        Test the specific StoreLocation for the Sheepdog store"},{"line_number":368,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FxqA%3D","line":365,"in_reply_to":"AAAAPH%2F%2FxsY%3D","updated":"2013-05-23 10:08:26.000000000","message":"Okay, will do it in next version","commit_id":"071cc2139711e6bfbc1c8b6c9b81c65ceafa74e9"}]}
