)]}'
{"cinder/volume/drivers/rbd.py":[{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"b221bde52880b488d726d94caa6f83e8dea8fd90","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        calls this. If used for an fsync() make sure to call flush() which"},{"line_number":128,"context_line":"        should be sufficient in the case of rbd images."},{"line_number":129,"context_line":"        \"\"\""},{"line_number":130,"context_line":"        return self._tmpfile.fileno()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def close(self):"},{"line_number":133,"context_line":"        self.log.debug(\"closing\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FqNU%3D","line":130,"updated":"2013-06-25 19:54:51.000000000","message":"Instead of using a temporary file, we could raise IOError (like RawIOBase specifies) and change the existing swift backup service to ignore that error when it calls fileno()","commit_id":"11929381dbe57508fb60b5477fb864c966778cd5"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"b221bde52880b488d726d94caa6f83e8dea8fd90","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def close(self):"},{"line_number":133,"context_line":"        self.log.debug(\"closing\")"},{"line_number":134,"context_line":"        self.rbd_image.close()"},{"line_number":135,"context_line":"        self._tmpfile.close()"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FqJk%3D","line":134,"updated":"2013-06-25 19:54:51.000000000","message":"If we keep the close() method, this probably shouldn\u0027t call rbd_image.close(), since this object didn\u0027t open rbd_image","commit_id":"11929381dbe57508fb60b5477fb864c966778cd5"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"b221bde52880b488d726d94caa6f83e8dea8fd90","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        pool \u003d self.configuration.rbd_pool"},{"line_number":505,"context_line":"        volname \u003d volume[\u0027name\u0027]"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        with RBDVolumeProxy(self, volname, pool) as rbd_image:"},{"line_number":508,"context_line":"            rbd_fd \u003d RBDImageIOWrapper(rbd_image)"},{"line_number":509,"context_line":"            backup_service.backup(backup, rbd_fd)"},{"line_number":510,"context_line":"            rbd_fd.close()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FqLA%3D","line":507,"updated":"2013-06-25 19:54:51.000000000","message":"could open in read-only mode here for extra safety, not really necessary though","commit_id":"11929381dbe57508fb60b5477fb864c966778cd5"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"b221bde52880b488d726d94caa6f83e8dea8fd90","unresolved":false,"context_lines":[{"line_number":507,"context_line":"        with RBDVolumeProxy(self, volname, pool) as rbd_image:"},{"line_number":508,"context_line":"            rbd_fd \u003d RBDImageIOWrapper(rbd_image)"},{"line_number":509,"context_line":"            backup_service.backup(backup, rbd_fd)"},{"line_number":510,"context_line":"            rbd_fd.close()"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        LOG.debug(\"volume backup complete.\")"},{"line_number":513,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FqNQ%3D","line":510,"updated":"2013-06-25 19:54:51.000000000","message":"this will do a (harmless) double-close of rbd_image - we don\u0027t really need the close() method at all right now if the tmp file isn\u0027t needed","commit_id":"11929381dbe57508fb60b5477fb864c966778cd5"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"b221bde52880b488d726d94caa6f83e8dea8fd90","unresolved":false,"context_lines":[{"line_number":519,"context_line":"        with RBDVolumeProxy(self, volume[\u0027name\u0027], pool) as rbd_image:"},{"line_number":520,"context_line":"            rbd_fd \u003d RBDImageIOWrapper(rbd_image)"},{"line_number":521,"context_line":"            backup_service.restore(backup, volume[\u0027id\u0027], rbd_fd)"},{"line_number":522,"context_line":"            rbd_fd.close()"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        LOG.debug(\"volume restore complete.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FqLU%3D","line":522,"updated":"2013-06-25 19:54:51.000000000","message":"same here","commit_id":"11929381dbe57508fb60b5477fb864c966778cd5"},{"author":{"_account_id":6743,"name":"Seif Lotfy","email":"s.lotfy@telekom.de","username":"seif"},"change_message_id":"368aa08b09fc956e8e55bca7a99ae4b5ce149f5e","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            return \u0027\u0027"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if length is None:"},{"line_number":112,"context_line":"            length \u003d total"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        if (offset + length) \u003e total:"},{"line_number":115,"context_line":"            length \u003d total - offset"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2FoJ0%3D","line":112,"updated":"2013-06-26 13:30:30.000000000","message":"Does it make sense to assign the total to length. I tried reading 1 GB image and got a MemoryError. Maybe a default length would make sense here... Just my 2 cents","commit_id":"756a8d75f1d8696f0796e4730877298be00d2b5f"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"edc8fefa805d93519e80eaad406d35fc01fa1559","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            return \u0027\u0027"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if length is None:"},{"line_number":112,"context_line":"            length \u003d total"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        if (offset + length) \u003e total:"},{"line_number":115,"context_line":"            length \u003d total - offset"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fnmo%3D","line":112,"in_reply_to":"AAAAPn%2F%2FoJ0%3D","updated":"2013-06-26 16:50:43.000000000","message":"that\u0027s part of the IoBase api - nothing should end up calling it that way though","commit_id":"756a8d75f1d8696f0796e4730877298be00d2b5f"}]}
