)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"d6e95865e8d7e45b8102b1b575b354f655728adc","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add update queue function in v2"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This pathc add three command:\"add/update/remove metadata\" in v2."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Closes-bug: #1554326"},{"line_number":12,"context_line":"Change-Id: I01b523ece09e87689516ecccf0c2c7795db46bb7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"fa0719c6_9549818e","line":9,"range":{"start_line":9,"start_character":61,"end_line":9,"end_character":63},"updated":"2016-03-22 01:22:45.000000000","message":"In API v2 Queue.metadata method.","commit_id":"693d7b5b6be773bdba376019cd0b136199f79406"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"d6e95865e8d7e45b8102b1b575b354f655728adc","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add update queue function in v2"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This pathc add three command:\"add/update/remove metadata\" in v2."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Closes-bug: #1554326"},{"line_number":12,"context_line":"Change-Id: I01b523ece09e87689516ecccf0c2c7795db46bb7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"fa0719c6_75602d36","line":9,"range":{"start_line":9,"start_character":5,"end_line":9,"end_character":14},"updated":"2016-03-22 01:22:45.000000000","message":"s/pathc add three command/patch adds three commands.","commit_id":"693d7b5b6be773bdba376019cd0b136199f79406"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"a5b2bd94b2789298b44fc559b3b9287bdc8e85ac","unresolved":false,"context_lines":[{"line_number":11,"context_line":"2. As v1.1 and v2 don\u0027t contain the queue.exist() function,"},{"line_number":12,"context_line":"and the queue exist check has been done in server side. We"},{"line_number":13,"context_line":"should only use it in v1.0."},{"line_number":14,"context_line":"3. As v1.1 donesn\u0027t support PATCH in zaqar server side,"},{"line_number":15,"context_line":"we should not allow set metadta in v1.1."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"9abb7d3a_b0d0fbca","line":14,"range":{"start_line":14,"start_character":11,"end_line":14,"end_character":19},"updated":"2016-06-03 04:58:06.000000000","message":"NIT: s/donesn\u0027t/doesn\u0027t","commit_id":"589a75a73d3ea71eb5633498bb37a7a8fc6d7d02"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"a5b2bd94b2789298b44fc559b3b9287bdc8e85ac","unresolved":false,"context_lines":[{"line_number":12,"context_line":"and the queue exist check has been done in server side. We"},{"line_number":13,"context_line":"should only use it in v1.0."},{"line_number":14,"context_line":"3. As v1.1 donesn\u0027t support PATCH in zaqar server side,"},{"line_number":15,"context_line":"we should not allow set metadta in v1.1."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"DocImpact"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"9abb7d3a_90d5f7ba","line":15,"range":{"start_line":15,"start_character":24,"end_line":15,"end_character":31},"updated":"2016-06-03 04:58:06.000000000","message":"NIT: s/metadta/metadata","commit_id":"589a75a73d3ea71eb5633498bb37a7a8fc6d7d02"}],"setup.cfg":[{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"fa89ed851d69414ffaabdc02a087b6380efee2c0","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    queue_stats \u003d zaqarclient.queues.v2.cli:GetQueueStats"},{"line_number":76,"context_line":"    queue_add_metadata \u003d zaqarclient.queues.v2.cli:AddQueueMetadata"},{"line_number":77,"context_line":"    queue_update_metadata \u003d zaqarclient.queues.v2.cli:UpdateQueueMetadata"},{"line_number":78,"context_line":"    queue_remove_metadata \u003d zaqarclient.queues.v2.cli:RemoveQueueMetadata"},{"line_number":79,"context_line":"    queue_get_metadata \u003d zaqarclient.queues.v2.cli:GetQueueMetadata"},{"line_number":80,"context_line":"    pool_create \u003d zaqarclient.queues.v2.cli:CreatePool"},{"line_number":81,"context_line":"    pool_show \u003d zaqarclient.queues.v2.cli:ShowPool"}],"source_content_type":"text/x-ttcn-cfg","patch_set":11,"id":"fa0719c6_1d355af6","line":78,"updated":"2016-03-23 04:07:26.000000000","message":"Should we add these three new commands, or still use set_queue_metadata like in v1? In v1, we use json like input, so it\u0027s hard to remove metadata. If we use the format like \"nova aggregate-set-meta\": https://github.com/openstack/python-novaclient/blob/master/novaclient/v2/shell.py#L3744-L3751 ,the medadata will not be json like anymore. is that ok?\n\nNeed more review suggestion. Thanks!","commit_id":"6c77633d54bd8a138382ed8c7428242c1b21ccc9"}],"zaqarclient/queues/v1/cli.py":[{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"a49a25f16568941420973ab9c0d2f0d3a9b36880","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def take_action(self, parsed_args):"},{"line_number":144,"context_line":"        client \u003d _get_client(self, parsed_args)"},{"line_number":145,"context_line":"        if client.api_version \u003d\u003d 1.1:"},{"line_number":146,"context_line":"            print(\"V1.1 doesn\u0027t support to set the queue\u0027s metadata. \""},{"line_number":147,"context_line":"                  \"Please use V1.0 or V2.\")"},{"line_number":148,"context_line":"            return"},{"line_number":149,"context_line":"        queue_name \u003d parsed_args.queue_name"},{"line_number":150,"context_line":"        queue_metadata \u003d parsed_args.queue_metadata"},{"line_number":151,"context_line":"        if (client.api_version \u003d\u003d 1 and"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_87fd4470","line":148,"range":{"start_line":145,"start_character":8,"end_line":148,"end_character":18},"updated":"2016-04-07 15:02:07.000000000","message":"Maybe move this error to lower level - from CLI to library?\nI mean move this error here: https://review.openstack.org/#/c/294368/15/zaqarclient/queues/v1/queues.py and raise runtime error when setting new_meta while using API v1.1.\nWhat do you think?","commit_id":"808aafb2b3ec2bf536eb1db154720beb246fb917"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"742802ce7b6884e5d223a67f3eb98b2806e636b3","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def take_action(self, parsed_args):"},{"line_number":144,"context_line":"        client \u003d _get_client(self, parsed_args)"},{"line_number":145,"context_line":"        if client.api_version \u003d\u003d 1.1:"},{"line_number":146,"context_line":"            print(\"V1.1 doesn\u0027t support to set the queue\u0027s metadata. \""},{"line_number":147,"context_line":"                  \"Please use V1.0 or V2.\")"},{"line_number":148,"context_line":"            return"},{"line_number":149,"context_line":"        queue_name \u003d parsed_args.queue_name"},{"line_number":150,"context_line":"        queue_metadata \u003d parsed_args.queue_metadata"},{"line_number":151,"context_line":"        if (client.api_version \u003d\u003d 1 and"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a1b2928_21d05753","line":148,"range":{"start_line":145,"start_character":8,"end_line":148,"end_character":18},"in_reply_to":"9a061dce_87fd4470","updated":"2016-04-11 12:28:37.000000000","message":"Done","commit_id":"808aafb2b3ec2bf536eb1db154720beb246fb917"}],"zaqarclient/queues/v1/queues.py":[{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"08b843c24255da34c0c71b55722698a583d5ebc3","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":"        req, trans \u003d self.client._request_and_transport()"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        if self.client.api_version \u003d\u003d 1.1:"},{"line_number":96,"context_line":"            raise RuntimeError(\"V1.1 doesn\u0027t support to set the queue\u0027s \""},{"line_number":97,"context_line":"                               \"metadata. Please use V1.0 or V2.\")"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        # NOTE(jeffrey4l): Ensure that metadata is cleared when the new_meta"},{"line_number":100,"context_line":"        # is a empty dict."}],"source_content_type":"text/x-python","patch_set":17,"id":"5a18252c_02f38f9f","line":97,"range":{"start_line":95,"start_character":0,"end_line":97,"end_character":66},"updated":"2016-04-12 15:23:32.000000000","message":"Please move this block inside \"if new_meta is not None:\" condition, because now this message shows even if the user wants just to get metadata and not set in API v1.1.","commit_id":"cfcc541235132dc0ba8751f7c370f5314b1c35fc"}],"zaqarclient/queues/v2/cli.py":[{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"bbc646661d7906347c5d2482a76666820fb0813f","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        queue_metadata \u003d parsed_args.queue_metadata"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        try:"},{"line_number":75,"context_line":"            client.queue(queue_name, auto_create\u003dFalse).stats"},{"line_number":76,"context_line":"        except errors.ResourceNotFound:"},{"line_number":77,"context_line":"            raise RuntimeError(\"Queue(%s) does not exist.\" % queue_name)"},{"line_number":78,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_8f1a4516","line":75,"updated":"2016-03-20 23:57:57.000000000","message":"(nit): can we use metadata instead of stats?","commit_id":"8fad90ee3dab4e9041f64bea1144f8410a707701"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"17f1387e4fddfda5bdc8f6c18f144b751356f086","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        queue_metadata \u003d parsed_args.queue_metadata"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        try:"},{"line_number":75,"context_line":"            client.queue(queue_name, auto_create\u003dFalse).stats"},{"line_number":76,"context_line":"        except errors.ResourceNotFound:"},{"line_number":77,"context_line":"            raise RuntimeError(\"Queue(%s) does not exist.\" % queue_name)"},{"line_number":78,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_6441d339","line":75,"in_reply_to":"fa0719c6_8f1a4516","updated":"2016-03-21 02:41:35.000000000","message":"Yes, Server side can return 404 now.","commit_id":"8fad90ee3dab4e9041f64bea1144f8410a707701"}],"zaqarclient/queues/v2/queues.py":[{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"bbc646661d7906347c5d2482a76666820fb0813f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        req, trans \u003d self.client._request_and_transport()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        # add or update metadata"},{"line_number":40,"context_line":"        if isinstance(new_meta, dict):"},{"line_number":41,"context_line":"            patches \u003d [{\u0027op\u0027: action,"},{"line_number":42,"context_line":"                        \u0027path\u0027: \u0027/metadata/%s\u0027 % k,"},{"line_number":43,"context_line":"                        \u0027value\u0027: v} for (k, v) in new_meta.items()]"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_afd74922","line":40,"updated":"2016-03-20 23:57:57.000000000","message":"Why don\u0027t just use \u0027action\u0027 as the check condition instead of change the type of \u0027new_meta\u0027?","commit_id":"8fad90ee3dab4e9041f64bea1144f8410a707701"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"17f1387e4fddfda5bdc8f6c18f144b751356f086","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        req, trans \u003d self.client._request_and_transport()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        # add or update metadata"},{"line_number":40,"context_line":"        if isinstance(new_meta, dict):"},{"line_number":41,"context_line":"            patches \u003d [{\u0027op\u0027: action,"},{"line_number":42,"context_line":"                        \u0027path\u0027: \u0027/metadata/%s\u0027 % k,"},{"line_number":43,"context_line":"                        \u0027value\u0027: v} for (k, v) in new_meta.items()]"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_4465afdf","line":40,"in_reply_to":"fa0719c6_afd74922","updated":"2016-03-21 02:41:35.000000000","message":"Done","commit_id":"8fad90ee3dab4e9041f64bea1144f8410a707701"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"bbc646661d7906347c5d2482a76666820fb0813f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        else:"},{"line_number":49,"context_line":"            print(\"Invalid metadata.\")"},{"line_number":50,"context_line":"            return"},{"line_number":51,"context_line":"        if new_meta is not None:"},{"line_number":52,"context_line":"            core.queue_update(trans, req, self._name, metadata\u003dpatches)"},{"line_number":53,"context_line":"            self._metadata \u003d new_meta"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_4fe78d12","line":51,"updated":"2016-03-20 23:57:57.000000000","message":"(nit): It would be nice to check \u0027patches\u0027 instead of \u0027new_meta\u0027","commit_id":"8fad90ee3dab4e9041f64bea1144f8410a707701"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"17f1387e4fddfda5bdc8f6c18f144b751356f086","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        else:"},{"line_number":49,"context_line":"            print(\"Invalid metadata.\")"},{"line_number":50,"context_line":"            return"},{"line_number":51,"context_line":"        if new_meta is not None:"},{"line_number":52,"context_line":"            core.queue_update(trans, req, self._name, metadata\u003dpatches)"},{"line_number":53,"context_line":"            self._metadata \u003d new_meta"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_64af13e4","line":51,"in_reply_to":"fa0719c6_4fe78d12","updated":"2016-03-21 02:41:35.000000000","message":"Done","commit_id":"8fad90ee3dab4e9041f64bea1144f8410a707701"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"d6e95865e8d7e45b8102b1b575b354f655728adc","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                         marker\u003dmarker,"},{"line_number":34,"context_line":"                                         limit\u003dlimit)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def metadata(self, new_meta\u003dNone, force_reload\u003dFalse, action\u003dNone):"},{"line_number":37,"context_line":"        req, trans \u003d self.client._request_and_transport()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        # add or update metadata"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_709b1bca","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":71},"updated":"2016-03-22 01:22:45.000000000","message":"I don\u0027t like it for these reasons:\n1. Such big and breaking change is not needed for solving the bug this patch wants to fix. Reminder: the bug just raises the problem that there\u0027s no \"get metadata\" and \"set metadata\" commands in CLI. And this problem can be simply fixed without modifying \u0027metadata\u0027 method in API v2 Queue.\n2. If we decide to make python-zaqarclient able to act more like Zaqar\u0027s queue PATCH method, it\u0027s better to keep current \u0027metadata()\u0027 behavior and add new \u0027metadata_update()\u0027 method. 3. I see many problems with your \u0027metadata()\u0027 method definition. For example, \u0027new_meta\u0027 variable seriously changed it\u0027s meaning from API v1 and API v1.1. It no longer represents whole metadata to be set to a queue and may be confusing to the user. Also \u0027new_meta\u0027 variable sounds very strange together with action \u0027remove\u0027. Also I don\u0027t like that new_meta can be a dict or list. And so on. If we decide to create \u0027metadata_update()\u0027 method we should probably make it almost similar to the perfect PATCH HTTP method to avoid problems.","commit_id":"693d7b5b6be773bdba376019cd0b136199f79406"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"ab4c035e10c03e9e20f87403b736b3d7095c5d10","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                         marker\u003dmarker,"},{"line_number":34,"context_line":"                                         limit\u003dlimit)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def metadata(self, new_meta\u003dNone, force_reload\u003dFalse, action\u003dNone):"},{"line_number":37,"context_line":"        req, trans \u003d self.client._request_and_transport()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        # add or update metadata"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_82cb0253","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":71},"in_reply_to":"fa0719c6_024ed26e","updated":"2016-03-22 01:49:29.000000000","message":"I know the \u0027new_meta\u0027 is terrible here and I agree to create a new method \"metadata_update()\" for v2. I don\u0027t like to simply fix it in v1 \"metadata()\". It will make the code more muddled IMO. If we create a new method \"metadata_update()\", I think the problem you point in step 2 can be solved.","commit_id":"693d7b5b6be773bdba376019cd0b136199f79406"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"1e34d2b3278e5589e6bed0a962150b6ac9539b01","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                         marker\u003dmarker,"},{"line_number":34,"context_line":"                                         limit\u003dlimit)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def metadata(self, new_meta\u003dNone, force_reload\u003dFalse, action\u003dNone):"},{"line_number":37,"context_line":"        req, trans \u003d self.client._request_and_transport()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        # add or update metadata"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_024ed26e","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":71},"in_reply_to":"fa0719c6_709b1bca","updated":"2016-03-22 01:29:19.000000000","message":"Let me clarify my reason 1:\n... And this problem can be simply fixed without *breakingly* modifying \u0027metadata\u0027 method in API v2 Queue.","commit_id":"693d7b5b6be773bdba376019cd0b136199f79406"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"fa89ed851d69414ffaabdc02a087b6380efee2c0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                                         limit\u003dlimit)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def update_metadata(self, new_meta\u003dNone, removed_keys\u003dNone,"},{"line_number":37,"context_line":"                        force_reload\u003dFalse, action\u003dNone):"},{"line_number":38,"context_line":"        req, trans \u003d self.client._request_and_transport()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        # add or update metadata"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_fd94e6e2","line":37,"updated":"2016-03-23 04:07:26.000000000","message":"Should we add a new method like this, or rewrite the metadata() method in v1 like Eva said: http://paste.openstack.org/show/K3KB7gIrmwJPRer0yVUC/ ?\n\nNeed more suggestion. Thanks.","commit_id":"6c77633d54bd8a138382ed8c7428242c1b21ccc9"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"2f17153b06b754210e64ee9bbbddb06c2d134c0a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                                         limit\u003dlimit)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def update_metadata(self, new_meta\u003dNone, removed_keys\u003dNone,"},{"line_number":37,"context_line":"                        force_reload\u003dFalse, action\u003dNone):"},{"line_number":38,"context_line":"        req, trans \u003d self.client._request_and_transport()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        # add or update metadata"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_94077917","line":37,"in_reply_to":"fa0719c6_fd94e6e2","updated":"2016-03-23 09:19:37.000000000","message":"Thanks. In the paste I provided metadata() method for v2 only. It\u0027s intended to be put to Queue v2 class to override v1\u0027s metadata().\n\nYes. These questions should be asked:\n1. Should we just fix metadata() behavior in v2 so setting metadata will start to work? (without changing method\u0027s signature, see my paste). And add \u0027set metadata\u0027 and \u0027get metadata\u0027 commands to CLI? So everything will be similar to v1 from the user\u0027s point of view.\n2. Should we add this additional update_metadata() method to v2 Queue at L36? And should we add \u0027add/update/delete\u0027 CLI commands for metadata in v2 instead of \u0027set metadata\u0027 and \u0027get metadata\u0027?","commit_id":"6c77633d54bd8a138382ed8c7428242c1b21ccc9"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"a49a25f16568941420973ab9c0d2f0d3a9b36880","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                         marker\u003dmarker,"},{"line_number":34,"context_line":"                                         limit\u003dlimit)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def metadata(self, new_meta\u003dNone, force_reload\u003dFalse):"},{"line_number":37,"context_line":"        \"\"\"Get metadata and return it"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        :param new_meta: A dictionary containing"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_0ab49432","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":58},"updated":"2016-04-07 15:02:07.000000000","message":"The code in this method is nicer than in my paste. Good job! \u003d)","commit_id":"808aafb2b3ec2bf536eb1db154720beb246fb917"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"742802ce7b6884e5d223a67f3eb98b2806e636b3","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                         marker\u003dmarker,"},{"line_number":34,"context_line":"                                         limit\u003dlimit)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def metadata(self, new_meta\u003dNone, force_reload\u003dFalse):"},{"line_number":37,"context_line":"        \"\"\"Get metadata and return it"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        :param new_meta: A dictionary containing"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a1b2928_c1bb630d","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":58},"in_reply_to":"9a061dce_0ab49432","updated":"2016-04-11 12:28:37.000000000","message":":)","commit_id":"808aafb2b3ec2bf536eb1db154720beb246fb917"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"a49a25f16568941420973ab9c0d2f0d3a9b36880","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            temp_metadata \u003d self._metadata.copy()"},{"line_number":62,"context_line":"            changes \u003d []"},{"line_number":63,"context_line":"            for key, value in new_meta.items():"},{"line_number":64,"context_line":"                # if the key is exist, repalce the value."},{"line_number":65,"context_line":"                if self._metadata.get(key, None):"},{"line_number":66,"context_line":"                    changes.append({\u0027op\u0027: \u0027replace\u0027,"},{"line_number":67,"context_line":"                                    \u0027path\u0027: \u0027/metadata/%s\u0027 % key,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_8a5a64f0","line":64,"range":{"start_line":64,"start_character":18,"end_line":64,"end_character":57},"updated":"2016-04-07 15:02:07.000000000","message":"NIT:\ns/if the key is exist, repalce the value./If key exists, replace it\u0027s value.","commit_id":"808aafb2b3ec2bf536eb1db154720beb246fb917"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"742802ce7b6884e5d223a67f3eb98b2806e636b3","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            temp_metadata \u003d self._metadata.copy()"},{"line_number":62,"context_line":"            changes \u003d []"},{"line_number":63,"context_line":"            for key, value in new_meta.items():"},{"line_number":64,"context_line":"                # if the key is exist, repalce the value."},{"line_number":65,"context_line":"                if self._metadata.get(key, None):"},{"line_number":66,"context_line":"                    changes.append({\u0027op\u0027: \u0027replace\u0027,"},{"line_number":67,"context_line":"                                    \u0027path\u0027: \u0027/metadata/%s\u0027 % key,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a1b2928_81da0b77","line":64,"range":{"start_line":64,"start_character":18,"end_line":64,"end_character":57},"in_reply_to":"9a061dce_8a5a64f0","updated":"2016-04-11 12:28:37.000000000","message":"Done","commit_id":"808aafb2b3ec2bf536eb1db154720beb246fb917"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"1d8fa58ffff74436e512f23507d849f6f4dbab62","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            temp_metadata \u003d self._metadata.copy()"},{"line_number":64,"context_line":"            # we should not allow modify the base metadata"},{"line_number":65,"context_line":"            temp_metadata \u003d {k: v for (k, v) in temp_metadata.items()"},{"line_number":66,"context_line":"                             if k not in _BASE_METADATA}"},{"line_number":67,"context_line":"            changes \u003d []"},{"line_number":68,"context_line":"            for key, value in new_meta.items():"},{"line_number":69,"context_line":"                # If key exists, replace it\u0027s value."}],"source_content_type":"text/x-python","patch_set":19,"id":"5a18252c_a6ed74f1","line":66,"updated":"2016-04-13 03:25:08.000000000","message":"we get a new trouble now.\nafter this patch: https://review.openstack.org/#/c/286433/ \nget metadata will always return BASE_METADATA(see L20) whatever they in the queue\u0027s metadata or not. We\u0027ll meet two problem:\n1. when users try to update them, they don\u0027t know to use which op, add or replace.\n2. zaqar client can\u0027t handle these metadatas. If users didn\u0027t provide BASE_METADATA, should we request zaqar server to remove them(if yes, maybe they are not in the server\u0027s backend, then will return a non-exist error)? If users provide them, like the problem #1, we should use add or replace?\n\nSo perhaps we shoud not allow users to update the value of BASE_METADATA after they create a queue. My patch did in this way. and a server patch should be created to forbid users update the BASE_METADATA.\n\nOr any ideas?","commit_id":"013ed7a8bcbbc37419fd11f834fc755972b37a27"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"292d1527c89dcfb9d146c063acefd2d0749ba796","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            temp_metadata \u003d self._metadata.copy()"},{"line_number":64,"context_line":"            # we should not allow modify the base metadata"},{"line_number":65,"context_line":"            temp_metadata \u003d {k: v for (k, v) in temp_metadata.items()"},{"line_number":66,"context_line":"                             if k not in _BASE_METADATA}"},{"line_number":67,"context_line":"            changes \u003d []"},{"line_number":68,"context_line":"            for key, value in new_meta.items():"},{"line_number":69,"context_line":"                # If key exists, replace it\u0027s value."}],"source_content_type":"text/x-python","patch_set":19,"id":"5a18252c_bf4572b4","line":66,"in_reply_to":"5a18252c_a6ed74f1","updated":"2016-04-13 08:20:43.000000000","message":"Feilong suggess that we could check the exist of BASE_METADATA in server side.\n\nThis is a better way IMO. maybe we should fix it in server side, then this patch could allow update BASE_METADATA again.","commit_id":"013ed7a8bcbbc37419fd11f834fc755972b37a27"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"dc8a95198cf29a3ad106a7e655284732d1da0010","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        else:"},{"line_number":58,"context_line":"            self._metadata \u003d core.queue_get(trans, req, self._name)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        if new_meta is not None:"},{"line_number":61,"context_line":"            temp_metadata \u003d self._metadata.copy()"},{"line_number":62,"context_line":"            changes \u003d []"},{"line_number":63,"context_line":"            for key, value in new_meta.items():"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_f0b703f3","line":60,"updated":"2016-05-19 12:30:58.000000000","message":"When the new_meta is {}, that will cause deleting all the existing metadata, is that a expected behaviour?","commit_id":"c3ae0d5068ba8180fe219e328a0681c5b26f24fd"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"345be428e12797081c153a24d49de80bb5808164","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        else:"},{"line_number":58,"context_line":"            self._metadata \u003d core.queue_get(trans, req, self._name)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        if new_meta is not None:"},{"line_number":61,"context_line":"            temp_metadata \u003d self._metadata.copy()"},{"line_number":62,"context_line":"            changes \u003d []"},{"line_number":63,"context_line":"            for key, value in new_meta.items():"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_2b82de94","line":60,"in_reply_to":"bab6814e_d4044c4b","updated":"2016-05-29 22:17:48.000000000","message":"ok, fair enough.","commit_id":"c3ae0d5068ba8180fe219e328a0681c5b26f24fd"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"dd597138d7c89fba7142efe1676c3f0681ebe85e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        else:"},{"line_number":58,"context_line":"            self._metadata \u003d core.queue_get(trans, req, self._name)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        if new_meta is not None:"},{"line_number":61,"context_line":"            temp_metadata \u003d self._metadata.copy()"},{"line_number":62,"context_line":"            changes \u003d []"},{"line_number":63,"context_line":"            for key, value in new_meta.items():"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_d4044c4b","line":60,"in_reply_to":"bab6814e_f0b703f3","updated":"2016-05-20 01:37:17.000000000","message":"Yes, it\u0027s a full coverage. V1 update metadata in this way. I just keep the same.","commit_id":"c3ae0d5068ba8180fe219e328a0681c5b26f24fd"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"dc8a95198cf29a3ad106a7e655284732d1da0010","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            self._metadata \u003d core.queue_update(trans, req, self._name,"},{"line_number":82,"context_line":"                                               metadata\u003dchanges)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        return self._metadata"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def create_object(parent):"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_b07c5bec","line":84,"updated":"2016-05-19 12:30:58.000000000","message":"At line 102 of https://review.openstack.org/#/c/294368/21/zaqarclient/queues/v1/queues.py the new_metadata will be set to self._metadata, but we didn\u0027t change new_metadata in this method, so if user consume the metadata of the queue later, it\u0027s out of sync, right?","commit_id":"c3ae0d5068ba8180fe219e328a0681c5b26f24fd"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"345be428e12797081c153a24d49de80bb5808164","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            self._metadata \u003d core.queue_update(trans, req, self._name,"},{"line_number":82,"context_line":"                                               metadata\u003dchanges)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        return self._metadata"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def create_object(parent):"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_eb5e1644","line":84,"in_reply_to":"bab6814e_6f0cad3b","updated":"2016-05-29 22:17:48.000000000","message":"Yep, but it\u0027s a blocker for this for now i think.","commit_id":"c3ae0d5068ba8180fe219e328a0681c5b26f24fd"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"dd597138d7c89fba7142efe1676c3f0681ebe85e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            self._metadata \u003d core.queue_update(trans, req, self._name,"},{"line_number":82,"context_line":"                                               metadata\u003dchanges)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        return self._metadata"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def create_object(parent):"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_6f0cad3b","line":84,"in_reply_to":"bab6814e_b07c5bec","updated":"2016-05-20 01:37:17.000000000","message":"You mean that users use v1 to set metadata and v2 to get metadata? If so, the problem will happen for lib layer indeed due to the \"_metadata\" belongs to diffrent Class.\n\nBut the cli works fine because that a new Class will be created everytime and the \"_metadata\"\u0027s default value is None and will always call zaqar to get metadata.\n\nSo for the first situation. I think we should avoid uers mixing the version.","commit_id":"c3ae0d5068ba8180fe219e328a0681c5b26f24fd"}],"zaqarclient/tests/queues/queues.py":[{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"a5b2bd94b2789298b44fc559b3b9287bdc8e85ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"9abb7d3a_b0111b60","updated":"2016-06-03 04:58:06.000000000","message":"NIT: maybe in test cases also do checks after trying:\n1. Delete all metadata (by using argument \"new_meta\u003d{}\").\n2. Assign empty value to some key. (for example, by using argument \"\"new_meta\u003d{\"a\": {}}\".\n\n\nJust to ensure there cases will not be broken ever.","commit_id":"589a75a73d3ea71eb5633498bb37a7a8fc6d7d02"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"a5b2bd94b2789298b44fc559b3b9287bdc8e85ac","unresolved":false,"context_lines":[{"line_number":637,"context_line":"                           \u0027_default_message_ttl\u0027: 1000}"},{"line_number":638,"context_line":"        self.assertEqual(expect_metadata, metadata)"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"        # replace \u0027name\u0027, remove \u0027type\u0027 and add a new on \u0027fake\u0027"},{"line_number":641,"context_line":"        replace_remove_add_metadata \u003d {\u0027name\u0027: \u0027test2\u0027,"},{"line_number":642,"context_line":"                                       \u0027age\u0027: 13,"},{"line_number":643,"context_line":"                                       \u0027fake\u0027: \u0027test_fake\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9abb7d3a_d0cdbf5e","line":640,"range":{"start_line":640,"start_character":8,"end_line":640,"end_character":63},"updated":"2016-06-03 04:58:06.000000000","message":"NIT: I think it also removes \u0027_default_message_ttl\u0027 value. And we can specify it.","commit_id":"589a75a73d3ea71eb5633498bb37a7a8fc6d7d02"}],"zaqarclient/transport/http.py":[{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"bbc646661d7906347c5d2482a76666820fb0813f","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        # NOTE(flape87): Do not modify"},{"line_number":89,"context_line":"        # request\u0027s headers directly."},{"line_number":90,"context_line":"        headers \u003d request.headers.copy()"},{"line_number":91,"context_line":"        if request.operation \u003d\u003d \u0027queue_update\u0027 and \u0027v2\u0027 in request._api_mod:"},{"line_number":92,"context_line":"            headers[\u0027content-type\u0027] \u003d \\"},{"line_number":93,"context_line":"                \u0027application/openstack-messaging-v2.0-json-patch\u0027"},{"line_number":94,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_af30e99f","line":91,"updated":"2016-03-20 23:57:57.000000000","message":"I prefer to get the version from self.client instead of this way.","commit_id":"8fad90ee3dab4e9041f64bea1144f8410a707701"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"b5234c0e39748d45a465f152a44a61dac331d60d","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        # NOTE(flape87): Do not modify"},{"line_number":89,"context_line":"        # request\u0027s headers directly."},{"line_number":90,"context_line":"        headers \u003d request.headers.copy()"},{"line_number":91,"context_line":"        if request.operation \u003d\u003d \u0027queue_update\u0027 and \u0027v2\u0027 in request._api_mod:"},{"line_number":92,"context_line":"            headers[\u0027content-type\u0027] \u003d \\"},{"line_number":93,"context_line":"                \u0027application/openstack-messaging-v2.0-json-patch\u0027"},{"line_number":94,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_17ddab42","line":91,"in_reply_to":"fa0719c6_647713d5","updated":"2016-03-21 03:16:02.000000000","message":"I found that we can\u0027t use \"self.client.api_version\" here. because \"self.client\" is not the one openstackclient use.\nSee L42","commit_id":"8fad90ee3dab4e9041f64bea1144f8410a707701"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"17f1387e4fddfda5bdc8f6c18f144b751356f086","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        # NOTE(flape87): Do not modify"},{"line_number":89,"context_line":"        # request\u0027s headers directly."},{"line_number":90,"context_line":"        headers \u003d request.headers.copy()"},{"line_number":91,"context_line":"        if request.operation \u003d\u003d \u0027queue_update\u0027 and \u0027v2\u0027 in request._api_mod:"},{"line_number":92,"context_line":"            headers[\u0027content-type\u0027] \u003d \\"},{"line_number":93,"context_line":"                \u0027application/openstack-messaging-v2.0-json-patch\u0027"},{"line_number":94,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_647713d5","line":91,"in_reply_to":"fa0719c6_af30e99f","updated":"2016-03-21 02:41:35.000000000","message":"Done","commit_id":"8fad90ee3dab4e9041f64bea1144f8410a707701"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"dc8a95198cf29a3ad106a7e655284732d1da0010","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        # NOTE(flape87): Do not modify"},{"line_number":89,"context_line":"        # request\u0027s headers directly."},{"line_number":90,"context_line":"        headers \u003d request.headers.copy()"},{"line_number":91,"context_line":"        if request.operation \u003d\u003d \u0027queue_update\u0027 and request.api.label \u003d\u003d \u0027v2\u0027:"},{"line_number":92,"context_line":"            headers[\u0027content-type\u0027] \u003d \\"},{"line_number":93,"context_line":"                \u0027application/openstack-messaging-v2.0-json-patch\u0027"},{"line_number":94,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_baf1dc6c","line":91,"updated":"2016-05-19 12:30:58.000000000","message":"What happened if we have a higher version in the future?","commit_id":"c3ae0d5068ba8180fe219e328a0681c5b26f24fd"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"dd597138d7c89fba7142efe1676c3f0681ebe85e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        # NOTE(flape87): Do not modify"},{"line_number":89,"context_line":"        # request\u0027s headers directly."},{"line_number":90,"context_line":"        headers \u003d request.headers.copy()"},{"line_number":91,"context_line":"        if request.operation \u003d\u003d \u0027queue_update\u0027 and request.api.label \u003d\u003d \u0027v2\u0027:"},{"line_number":92,"context_line":"            headers[\u0027content-type\u0027] \u003d \\"},{"line_number":93,"context_line":"                \u0027application/openstack-messaging-v2.0-json-patch\u0027"},{"line_number":94,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_cfa5d9a2","line":91,"in_reply_to":"bab6814e_baf1dc6c","updated":"2016-05-20 01:37:17.000000000","message":"Good question. For that I\u0027m not sure what the queue_update will be like in the future. Will it still be a PATCH method?\nWe certainly could use \"\u003e\u003d\" here if the answer is probably yes. What\u0027s your idea?","commit_id":"c3ae0d5068ba8180fe219e328a0681c5b26f24fd"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"345be428e12797081c153a24d49de80bb5808164","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        # NOTE(flape87): Do not modify"},{"line_number":89,"context_line":"        # request\u0027s headers directly."},{"line_number":90,"context_line":"        headers \u003d request.headers.copy()"},{"line_number":91,"context_line":"        if request.operation \u003d\u003d \u0027queue_update\u0027 and request.api.label \u003d\u003d \u0027v2\u0027:"},{"line_number":92,"context_line":"            headers[\u0027content-type\u0027] \u003d \\"},{"line_number":93,"context_line":"                \u0027application/openstack-messaging-v2.0-json-patch\u0027"},{"line_number":94,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":21,"id":"9abb7d3a_6b31860b","line":91,"in_reply_to":"bab6814e_cfa5d9a2","updated":"2016-05-29 22:17:48.000000000","message":"Can we do a check like this https://github.com/openstack/zaqar/blob/master/zaqar/transport/wsgi/driver.py#L124 ?","commit_id":"c3ae0d5068ba8180fe219e328a0681c5b26f24fd"}]}
