)]}'
{"cinder/context.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d93937382d48816fe074e680f3179ccaff37d3e8","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        return context"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def deepcopy(self):"},{"line_number":139,"context_line":"        return copy.deepcopy(self)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    # NOTE(sirp): the openstack/common version of RequestContext uses"},{"line_number":142,"context_line":"    # tenant/user whereas the Cinder version uses project_id/user_id. We need"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FTzc%3D","line":139,"updated":"2013-07-04 11:12:31.000000000","message":"Can we avoid this by doing deepcopy in volume manager directly?","commit_id":"f70023856a11d6ee3e4912921c4fe996ed6f19d5"},{"author":{"_account_id":7731,"name":"XueChendi","email":"xuechendi@gmail.com","username":"XueChendi"},"change_message_id":"2b50378d5dc07d715fe0b554485e73b518367da1","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        return context"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def deepcopy(self):"},{"line_number":139,"context_line":"        return copy.deepcopy(self)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    # NOTE(sirp): the openstack/common version of RequestContext uses"},{"line_number":142,"context_line":"    # tenant/user whereas the Cinder version uses project_id/user_id. We need"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FTq8%3D","line":139,"in_reply_to":"AAAAPn%2F%2FTzc%3D","updated":"2013-07-04 12:49:02.000000000","message":"It requires importing copy if I deepcopy directly in volume manager. Just wondering which way is better?","commit_id":"f70023856a11d6ee3e4912921c4fe996ed6f19d5"}],"cinder/tests/test_volume.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d93937382d48816fe074e680f3179ccaff37d3e8","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"            raise exception.CinderException(\u0027fake exception\u0027)"},{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"        def fake_reschedule_or_reraise(context, volume_id, exc_info,"},{"line_number":1273,"context_line":"                                       snapshot_id, image_id, request_spec,"},{"line_number":1274,"context_line":"                                       filter_properties, allow_reschedule):"},{"line_number":1275,"context_line":"            if self.context_before_creation is not context:"},{"line_number":1276,"context_line":"                self.assertDictMatch(self.context_before_creation.__dict__,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FTwU%3D","line":1273,"updated":"2013-07-04 11:12:31.000000000","message":"we just need to make sure context argument is non-elevated, so it\u0027s like:\n\n\n    self.assertFalse(\u0027admin\u0027 in context.roles)\n    self.asserFalse(context.is_admin)","commit_id":"f70023856a11d6ee3e4912921c4fe996ed6f19d5"},{"author":{"_account_id":7731,"name":"XueChendi","email":"xuechendi@gmail.com","username":"XueChendi"},"change_message_id":"2b50378d5dc07d715fe0b554485e73b518367da1","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"            raise exception.CinderException(\u0027fake exception\u0027)"},{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"        def fake_reschedule_or_reraise(context, volume_id, exc_info,"},{"line_number":1273,"context_line":"                                       snapshot_id, image_id, request_spec,"},{"line_number":1274,"context_line":"                                       filter_properties, allow_reschedule):"},{"line_number":1275,"context_line":"            if self.context_before_creation is not context:"},{"line_number":1276,"context_line":"                self.assertDictMatch(self.context_before_creation.__dict__,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FTkI%3D","line":1273,"in_reply_to":"AAAAPn%2F%2FTwU%3D","updated":"2013-07-04 12:49:02.000000000","message":"Done","commit_id":"f70023856a11d6ee3e4912921c4fe996ed6f19d5"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d93937382d48816fe074e680f3179ccaff37d3e8","unresolved":false,"context_lines":[{"line_number":1278,"context_line":"            else:"},{"line_number":1279,"context_line":"                assert False, \"Test Code logic error\""},{"line_number":1280,"context_line":""},{"line_number":1281,"context_line":"        self.context.roles.remove(\u0027admin\u0027)"},{"line_number":1282,"context_line":"        setattr(self.__class__, \u0027context_before_creation\u0027,"},{"line_number":1283,"context_line":"                self.context.deepcopy())"},{"line_number":1284,"context_line":"        self.stubs.Set(self.volume, \u0027_reschedule_or_reraise\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FTxw%3D","line":1281,"updated":"2013-07-04 11:12:31.000000000","message":"since all this test needs is just a unelevated context, we can create a new one instead of modifying self.context or at least we should modify self.context\u0027s copy or we should restore self.context to original state after finished test.  i prefer to create a copy.","commit_id":"f70023856a11d6ee3e4912921c4fe996ed6f19d5"},{"author":{"_account_id":7731,"name":"XueChendi","email":"xuechendi@gmail.com","username":"XueChendi"},"change_message_id":"2b50378d5dc07d715fe0b554485e73b518367da1","unresolved":false,"context_lines":[{"line_number":1278,"context_line":"            else:"},{"line_number":1279,"context_line":"                assert False, \"Test Code logic error\""},{"line_number":1280,"context_line":""},{"line_number":1281,"context_line":"        self.context.roles.remove(\u0027admin\u0027)"},{"line_number":1282,"context_line":"        setattr(self.__class__, \u0027context_before_creation\u0027,"},{"line_number":1283,"context_line":"                self.context.deepcopy())"},{"line_number":1284,"context_line":"        self.stubs.Set(self.volume, \u0027_reschedule_or_reraise\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FTkE%3D","line":1281,"in_reply_to":"AAAAPn%2F%2FTxw%3D","updated":"2013-07-04 12:49:02.000000000","message":"Done","commit_id":"f70023856a11d6ee3e4912921c4fe996ed6f19d5"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"f76241fc82eeeef1e7a85b075831f05d0b3cb431","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"        self.volume.delete_volume(self.context, volume[\u0027id\u0027])"},{"line_number":1262,"context_line":""},{"line_number":1263,"context_line":"    def test_create_volume_from_unelevated_context(self):"},{"line_number":1264,"context_line":"        \"\"\"Test unelevated context remains the same after"},{"line_number":1265,"context_line":"        volume creation failure."},{"line_number":1266,"context_line":"        \"\"\""},{"line_number":1267,"context_line":"        def fake_create_volume(context, volume_ref, snapshot_ref,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2F%2B4Y%3D","line":1264,"updated":"2013-07-08 04:08:43.000000000","message":"fix multi-line doc string https://github.com/openstack/cinder/blob/master/HACKING.rst#docstrings","commit_id":"e47a7c7e693bb695de51aa76832c73c4bbe767b8"}],"cinder/volume/manager.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d93937382d48816fe074e680f3179ccaff37d3e8","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                      filter_properties\u003dNone, allow_reschedule\u003dTrue,"},{"line_number":210,"context_line":"                      snapshot_id\u003dNone, image_id\u003dNone, source_volid\u003dNone):"},{"line_number":211,"context_line":"        \"\"\"Creates and exports the volume.\"\"\""},{"line_number":212,"context_line":"        context_before_elevated \u003d context.deepcopy()"},{"line_number":213,"context_line":"        context \u003d context.elevated()"},{"line_number":214,"context_line":"        if filter_properties is None:"},{"line_number":215,"context_line":"            filter_properties \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FTzQ%3D","line":212,"updated":"2013-07-04 11:12:31.000000000","message":"how about:\n\n    context_save \u003d copy.deepcopy(context)\n\nor more directly we just remove \u0027admin\u0027 role from context when exception happened?","commit_id":"f70023856a11d6ee3e4912921c4fe996ed6f19d5"},{"author":{"_account_id":7731,"name":"XueChendi","email":"xuechendi@gmail.com","username":"XueChendi"},"change_message_id":"2b50378d5dc07d715fe0b554485e73b518367da1","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                      filter_properties\u003dNone, allow_reschedule\u003dTrue,"},{"line_number":210,"context_line":"                      snapshot_id\u003dNone, image_id\u003dNone, source_volid\u003dNone):"},{"line_number":211,"context_line":"        \"\"\"Creates and exports the volume.\"\"\""},{"line_number":212,"context_line":"        context_before_elevated \u003d context.deepcopy()"},{"line_number":213,"context_line":"        context \u003d context.elevated()"},{"line_number":214,"context_line":"        if filter_properties is None:"},{"line_number":215,"context_line":"            filter_properties \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FTps%3D","line":212,"in_reply_to":"AAAAPn%2F%2FTzQ%3D","updated":"2013-07-04 12:49:02.000000000","message":"Call deepcopy requires importing copy , I still wanna have a double check on this issue","commit_id":"f70023856a11d6ee3e4912921c4fe996ed6f19d5"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d93937382d48816fe074e680f3179ccaff37d3e8","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                if sourcevol_ref is not None:"},{"line_number":277,"context_line":"                    self.db.volume_update(context, sourcevol_ref[\u0027id\u0027],"},{"line_number":278,"context_line":"                                          {\u0027status\u0027: sourcevol_ref[\u0027status\u0027]})"},{"line_number":279,"context_line":"                exc_info \u003d sys.exc_info()"},{"line_number":280,"context_line":"                # try to re-schedule volume:"},{"line_number":281,"context_line":"                self._reschedule_or_reraise(context_before_elevated,"},{"line_number":282,"context_line":"                                            volume_id, exc_info,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FTwM%3D","line":279,"updated":"2013-07-04 11:12:31.000000000","message":"something like:\n\n    context.roles.remove(\u0027admin\u0027)\n    context.is_admin \u003d False","commit_id":"f70023856a11d6ee3e4912921c4fe996ed6f19d5"},{"author":{"_account_id":7731,"name":"XueChendi","email":"xuechendi@gmail.com","username":"XueChendi"},"change_message_id":"2b50378d5dc07d715fe0b554485e73b518367da1","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                if sourcevol_ref is not None:"},{"line_number":277,"context_line":"                    self.db.volume_update(context, sourcevol_ref[\u0027id\u0027],"},{"line_number":278,"context_line":"                                          {\u0027status\u0027: sourcevol_ref[\u0027status\u0027]})"},{"line_number":279,"context_line":"                exc_info \u003d sys.exc_info()"},{"line_number":280,"context_line":"                # try to re-schedule volume:"},{"line_number":281,"context_line":"                self._reschedule_or_reraise(context_before_elevated,"},{"line_number":282,"context_line":"                                            volume_id, exc_info,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FTp8%3D","line":279,"in_reply_to":"AAAAPn%2F%2FTwM%3D","updated":"2013-07-04 12:49:02.000000000","message":"Some context do have roles as admin before volume creation,so remove admin here seems not so right","commit_id":"f70023856a11d6ee3e4912921c4fe996ed6f19d5"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"55b7900ef2fd8027e21c89792f0ca372c3e9c662","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                      filter_properties\u003dNone, allow_reschedule\u003dTrue,"},{"line_number":210,"context_line":"                      snapshot_id\u003dNone, image_id\u003dNone, source_volid\u003dNone):"},{"line_number":211,"context_line":"        \"\"\"Creates and exports the volume.\"\"\""},{"line_number":212,"context_line":"        context_before_elevated \u003d context.deepcopy()"},{"line_number":213,"context_line":"        context \u003d context.elevated()"},{"line_number":214,"context_line":"        if filter_properties is None:"},{"line_number":215,"context_line":"            filter_properties \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FTg8%3D","line":212,"updated":"2013-07-04 12:56:36.000000000","message":"what about:\n\n    ctxt_save \u003d context.to_dict()","commit_id":"606dd70b2eb7bbc6d12612199133ef915a89a6b0"},{"author":{"_account_id":7731,"name":"XueChendi","email":"xuechendi@gmail.com","username":"XueChendi"},"change_message_id":"db2302a0e45f4254b4da529cf8f5f4a31782729c","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                      filter_properties\u003dNone, allow_reschedule\u003dTrue,"},{"line_number":210,"context_line":"                      snapshot_id\u003dNone, image_id\u003dNone, source_volid\u003dNone):"},{"line_number":211,"context_line":"        \"\"\"Creates and exports the volume.\"\"\""},{"line_number":212,"context_line":"        context_before_elevated \u003d context.deepcopy()"},{"line_number":213,"context_line":"        context \u003d context.elevated()"},{"line_number":214,"context_line":"        if filter_properties is None:"},{"line_number":215,"context_line":"            filter_properties \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FTaw%3D","line":212,"in_reply_to":"AAAAPn%2F%2FTg8%3D","updated":"2013-07-04 13:40:32.000000000","message":"to_dict() seems can not work here, object context contains array inside. Which is to say , string inside ctxt_save will not change when context changes, but array inside ctxt_save will( to_dict not perform a deepcopy for array inside context )","commit_id":"606dd70b2eb7bbc6d12612199133ef915a89a6b0"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"55b7900ef2fd8027e21c89792f0ca372c3e9c662","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                    self.db.volume_update(context, sourcevol_ref[\u0027id\u0027],"},{"line_number":278,"context_line":"                                          {\u0027status\u0027: sourcevol_ref[\u0027status\u0027]})"},{"line_number":279,"context_line":"                exc_info \u003d sys.exc_info()"},{"line_number":280,"context_line":"                # try to re-schedule volume:"},{"line_number":281,"context_line":"                self._reschedule_or_reraise(context_before_elevated,"},{"line_number":282,"context_line":"                                            volume_id, exc_info,"},{"line_number":283,"context_line":"                                            snapshot_id, image_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FTgY%3D","line":280,"updated":"2013-07-04 12:56:36.000000000","message":"and here use from_dict() to restore original context?\n\n   context \u003d context.from_dict(ctxt_save)","commit_id":"606dd70b2eb7bbc6d12612199133ef915a89a6b0"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"57c59f9319236f581f0982d0e77288381920ee7f","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                    self.db.volume_update(context, sourcevol_ref[\u0027id\u0027],"},{"line_number":278,"context_line":"                                          {\u0027status\u0027: sourcevol_ref[\u0027status\u0027]})"},{"line_number":279,"context_line":"                exc_info \u003d sys.exc_info()"},{"line_number":280,"context_line":"                # try to re-schedule volume:"},{"line_number":281,"context_line":"                self._reschedule_or_reraise(context_before_elevated,"},{"line_number":282,"context_line":"                                            volume_id, exc_info,"},{"line_number":283,"context_line":"                                            snapshot_id, image_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FTeo%3D","line":280,"in_reply_to":"AAAAPn%2F%2FTgY%3D","updated":"2013-07-04 13:05:34.000000000","message":"It should be:\n\n   restored_ctxt \u003d context.RequestContext.from_dict(ctxt_save)","commit_id":"606dd70b2eb7bbc6d12612199133ef915a89a6b0"}]}
