)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"016919fc4229d134d114e4d554eef96651ef4799","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Babu Shanmugam \u003canbu@enovance.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-12-05 17:49:30 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"With multi-backend feature, SWIFT diskfile can"},{"line_number":8,"context_line":"be backed by several object stores."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"This commit adds RADOS (the object store of CEPH)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAATn%2F91bI%3D","line":7,"updated":"2013-12-05 13:06:56.000000000","message":"Can you add a single line above this one to get a more accurate title for the commit? Like: \"RADOS (CEPH) DiskFile Backend\"","commit_id":"341e9d29544e46bea7e3331c286c62ab257afd9a"}],"swift/obj/rados_diskfile.py":[{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"0e7a76edd6a21920e5f9d70a0418d9fc31145ee1","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self._ioctx \u003d self._rados.open_ioctx(self._pool)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def close(self):"},{"line_number":53,"context_line":"        if (self._ioctx):"},{"line_number":54,"context_line":"            self._ioctx.close()"},{"line_number":55,"context_line":"        if (self._rados):"},{"line_number":56,"context_line":"            self._rados.shutdown()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F91ZI%3D","line":53,"updated":"2013-12-05 13:08:42.000000000","message":"you generally don\u0027t need those parenthesis in python.","commit_id":"341e9d29544e46bea7e3331c286c62ab257afd9a"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"unresolved":false,"context_lines":[{"line_number":347,"context_line":"                    self._metadata[\u0027X-Delete-At\u0027]))"},{"line_number":348,"context_line":"        else:"},{"line_number":349,"context_line":"            if x_delete_at \u003c\u003d time.time():"},{"line_number":350,"context_line":"                raise DiskFileNotExist(\u0027Expired\u0027)"},{"line_number":351,"context_line":"        try:"},{"line_number":352,"context_line":"            metadata_size \u003d int(self._metadata[\u0027Content-Length\u0027])"},{"line_number":353,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9n6A%3D","line":350,"updated":"2013-12-09 15:48:51.000000000","message":"So it turns out this should be a DiskFileExpired exc - see what\u0027s going on in https://review.openstack.org/#/c/60762/","commit_id":"6a2e4d7692299016c6c9d6d1494bcde4a6a7250f"},{"author":{"_account_id":8298,"name":"Babu Shanmugam","email":"bschanmu@redhat.com","username":"anbu"},"change_message_id":"e02c922c211955b448bf58b5d92b908becbb3e4d","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                    self._metadata[\u0027X-Delete-At\u0027]))"},{"line_number":348,"context_line":"        else:"},{"line_number":349,"context_line":"            if x_delete_at \u003c\u003d time.time():"},{"line_number":350,"context_line":"                raise DiskFileNotExist(\u0027Expired\u0027)"},{"line_number":351,"context_line":"        try:"},{"line_number":352,"context_line":"            metadata_size \u003d int(self._metadata[\u0027Content-Length\u0027])"},{"line_number":353,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9kyE%3D","line":350,"in_reply_to":"AAAATn%2F9n6A%3D","updated":"2013-12-10 02:54:09.000000000","message":"Done","commit_id":"6a2e4d7692299016c6c9d6d1494bcde4a6a7250f"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"c3c119dc777911f6c824ac866486d4240355324c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"# Copyright (C) 2013 eNovance SAS \u003clicensing@enovance.com\u003e"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Babu Shanmugam \u003canbu@enovance.com\u003e"},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FD5c%3D","line":4,"updated":"2014-03-10 09:50:12.000000000","message":"Author field is deprecated now. I think you can remove it.","commit_id":"03ec81fce6f96ffa3024a2e0c0d18d6874794afd"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"d4b6f9af8fda1fe03a3219da371fce0cb7cf2c99","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        def write(self, obj, offset, data):"},{"line_number":95,"context_line":"            try:"},{"line_number":96,"context_line":"                return self._ioctx.write(obj, data, offset)"},{"line_number":97,"context_line":"            except self._fs.RADOS.NoSpace:"},{"line_number":98,"context_line":"                raise DiskFileNoSpace()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        def read(self, obj, off):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FMrQ%3D","line":97,"updated":"2014-03-07 17:48:37.000000000","message":"I think it would be good to add a \n\n except Exception\n     raise DiskFileError()\n\nin case any other exception was raised here","commit_id":"03ec81fce6f96ffa3024a2e0c0d18d6874794afd"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"d4b6f9af8fda1fe03a3219da371fce0cb7cf2c99","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        def quarantine(self, obj):"},{"line_number":104,"context_line":"            # There is no way of swift recon monitor to get information"},{"line_number":105,"context_line":"            # of the quarantined file, so better clean it up"},{"line_number":106,"context_line":"            self.del_object(obj)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def open(self):"},{"line_number":109,"context_line":"        return self._radosfs(self)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FMqQ%3D","line":106,"updated":"2014-03-07 17:48:37.000000000","message":"Doesn\u0027t this delete all copies on the cluster? In Swift it would delete only one copy (out of number of replicas) and the object on a single storage node will then be replicated from another storage node. Of course this depends on how you use the backend, ie if you use 3 replicas in Swift and only a single in Ceph it makes sense. But if you use only a single replica in Swift and let Ceph handle replication this will remove the object at all?","commit_id":"03ec81fce6f96ffa3024a2e0c0d18d6874794afd"},{"author":{"_account_id":8298,"name":"Babu Shanmugam","email":"bschanmu@redhat.com","username":"anbu"},"change_message_id":"cf685d11c434c2869663b99bd80b2edf11851ebc","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        def quarantine(self, obj):"},{"line_number":104,"context_line":"            # There is no way of swift recon monitor to get information"},{"line_number":105,"context_line":"            # of the quarantined file, so better clean it up"},{"line_number":106,"context_line":"            self.del_object(obj)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def open(self):"},{"line_number":109,"context_line":"        return self._radosfs(self)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAVn%2F%2FG9s%3D","line":106,"in_reply_to":"AAAAVn%2F%2FMqQ%3D","updated":"2014-03-09 14:54:41.000000000","message":"Valid point Christian. If CEPH is managing replication, i don\u0027t think that we need to bother this scenario. If CEPH is not managing replication, and if SWIFT does, we can delete the object. I will revise and publish another patch set.","commit_id":"03ec81fce6f96ffa3024a2e0c0d18d6874794afd"}],"swift/obj/rados_server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"unresolved":false,"context_lines":[{"line_number":90,"context_line":"                self.logger.exception(_("},{"line_number":91,"context_line":"                    \u0027ERROR container update failed with \u0027"},{"line_number":92,"context_line":"                    \u0027%(ip)s:%(port)s/%(dev)s\u0027),"},{"line_number":93,"context_line":"                    {\u0027ip\u0027: ip, \u0027port\u0027: port, \u0027dev\u0027: contdevice})"},{"line_number":94,"context_line":"        # FIXME: For now don\u0027t handle async updates"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def REPLICATE(self, request):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9n5Y%3D","line":93,"updated":"2013-12-09 15:48:51.000000000","message":"https://review.openstack.org/#/c/60763/ may be useful","commit_id":"6a2e4d7692299016c6c9d6d1494bcde4a6a7250f"},{"author":{"_account_id":8298,"name":"Babu Shanmugam","email":"bschanmu@redhat.com","username":"anbu"},"change_message_id":"e02c922c211955b448bf58b5d92b908becbb3e4d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                self.logger.exception(_("},{"line_number":91,"context_line":"                    \u0027ERROR container update failed with \u0027"},{"line_number":92,"context_line":"                    \u0027%(ip)s:%(port)s/%(dev)s\u0027),"},{"line_number":93,"context_line":"                    {\u0027ip\u0027: ip, \u0027port\u0027: port, \u0027dev\u0027: contdevice})"},{"line_number":94,"context_line":"        # FIXME: For now don\u0027t handle async updates"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def REPLICATE(self, request):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9kyo%3D","line":93,"in_reply_to":"AAAATn%2F9n5Y%3D","updated":"2013-12-10 02:53:36.000000000","message":"Hi Clay,\nShould I wait for this patch (#/c/60763) to be merged, or shall I do the necessary changes myself?","commit_id":"6a2e4d7692299016c6c9d6d1494bcde4a6a7250f"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":8298,"name":"Babu Shanmugam","email":"bschanmu@redhat.com","username":"anbu"},"change_message_id":"6592823d192980364edfd2fc95a89e089b66dcf9","unresolved":false,"context_lines":[{"line_number":686,"context_line":"                                            account_ring\u003dFakeRing(),"},{"line_number":687,"context_line":"                                            container_ring\u003dFakeRing(),"},{"line_number":688,"context_line":"                                            object_ring\u003dFakeRing())"},{"line_number":689,"context_line":"        monkey_patch_mimetools()"},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"    def tearDown(self):"},{"line_number":692,"context_line":"        self.app.account_ring.set_replicas(3)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F8m0M%3D","side":"PARENT","line":689,"updated":"2013-12-24 12:17:01.000000000","message":"There is no need for monkey_patch_mimetools() here as the patching is done in setUp method in this same file. This was causing wsgi.parsetype to recurse endlessly.","commit_id":"55dafa2f07cc0406a747e2a4b970a276ff5f43f1"}]}
