)]}'
{"senlin/drivers/os/nova_v2.py":[{"author":{"_account_id":22998,"name":"XueFengLiu","email":"liu.xuefeng1@zte.com.cn","username":"sgfeng"},"change_message_id":"bd36327aac7f786fae26d407db72344a84cc74f9","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        # Clean all existing metadata first"},{"line_number":202,"context_line":"        res \u003d self.conn.compute.get_server_metadata(server)"},{"line_number":203,"context_line":"        if res.metadata:"},{"line_number":204,"context_line":"            for key in res.metadata:"},{"line_number":205,"context_line":"                try:"},{"line_number":206,"context_line":"                    self.conn.compute.delete_server_metadata("},{"line_number":207,"context_line":"                        server, [key])"},{"line_number":208,"context_line":"                except sdk_exc.HttpException as exc:"},{"line_number":209,"context_line":"                    # Skip trying to delete immutable metadata"},{"line_number":210,"context_line":"                    if exc.status_code !\u003d 403:"},{"line_number":211,"context_line":"                        raise"},{"line_number":212,"context_line":"        if metadata:"},{"line_number":213,"context_line":"            for key, value in metadata.items():"},{"line_number":214,"context_line":"                try:"},{"line_number":215,"context_line":"                    self.conn.compute.set_server_metadata("},{"line_number":216,"context_line":"                        server, **{key: value})"},{"line_number":217,"context_line":"                except sdk_exc.HttpException as exc:"},{"line_number":218,"context_line":"                    # Skip trying to set immutable metadata"},{"line_number":219,"context_line":"                    if exc.status_code !\u003d 403:"},{"line_number":220,"context_line":"                        raise"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    @sdk.translate_exception"},{"line_number":223,"context_line":"    def server_metadata_delete(self, server, keys):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bfb3d3c7_2f344a4a","line":220,"range":{"start_line":204,"start_character":2,"end_line":220,"end_character":29},"updated":"2019-05-17 05:51:41.000000000","message":"Duplication is higher","commit_id":"fd778894909860ee9d3a00ffc8c0d02f5b5bfee9"},{"author":{"_account_id":25138,"name":"pheartheceal","email":"pheartheceal@gmail.com","username":"pheartheceal"},"change_message_id":"0110ef2efbbe3893dd1e3ab9c9e7ffd92732958d","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        # Clean all existing metadata first"},{"line_number":202,"context_line":"        res \u003d self.conn.compute.get_server_metadata(server)"},{"line_number":203,"context_line":"        if res.metadata:"},{"line_number":204,"context_line":"            for key in res.metadata:"},{"line_number":205,"context_line":"                try:"},{"line_number":206,"context_line":"                    self.conn.compute.delete_server_metadata("},{"line_number":207,"context_line":"                        server, [key])"},{"line_number":208,"context_line":"                except sdk_exc.HttpException as exc:"},{"line_number":209,"context_line":"                    # Skip trying to delete immutable metadata"},{"line_number":210,"context_line":"                    if exc.status_code !\u003d 403:"},{"line_number":211,"context_line":"                        raise"},{"line_number":212,"context_line":"        if metadata:"},{"line_number":213,"context_line":"            for key, value in metadata.items():"},{"line_number":214,"context_line":"                try:"},{"line_number":215,"context_line":"                    self.conn.compute.set_server_metadata("},{"line_number":216,"context_line":"                        server, **{key: value})"},{"line_number":217,"context_line":"                except sdk_exc.HttpException as exc:"},{"line_number":218,"context_line":"                    # Skip trying to set immutable metadata"},{"line_number":219,"context_line":"                    if exc.status_code !\u003d 403:"},{"line_number":220,"context_line":"                        raise"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    @sdk.translate_exception"},{"line_number":223,"context_line":"    def server_metadata_delete(self, server, keys):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bfb3d3c7_33145d4e","line":220,"range":{"start_line":204,"start_character":2,"end_line":220,"end_character":29},"in_reply_to":"bfb3d3c7_2f344a4a","updated":"2019-05-22 18:35:46.000000000","message":"Done","commit_id":"fd778894909860ee9d3a00ffc8c0d02f5b5bfee9"}],"senlin/profiles/os/nova/server.py":[{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"f1c6a791142f1588f784cefdea86049e9d26cf5e","unresolved":false,"context_lines":[{"line_number":993,"context_line":"            raise exc.EResourceUpdate(type\u003d\u0027server\u0027, id\u003dobj.physical_id,"},{"line_number":994,"context_line":"                                      message\u003dsix.text_type(ex))"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"    def _update_metadata(self, obj, new_profile):"},{"line_number":997,"context_line":"        \"\"\"Update the server metadata."},{"line_number":998,"context_line":""},{"line_number":999,"context_line":"        :param obj: The node object to operate on."}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_edb12be3","line":996,"range":{"start_line":996,"start_character":8,"end_line":996,"end_character":24},"updated":"2019-05-06 20:36:32.000000000","message":"This method is called by do_update which is triggered by a call to profile update API.  A profile update assumes that all the metadata from the old profile is blown away and replaced with the new profile\u0027s metadata.  So we need to clean the old metadata before we call server_metadata_update.","commit_id":"d4a8c2844d1d4874c54860e799a7458c1bdc22e6"},{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"745da2cb925328b134f5b39411e60e0429e1e448","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"            return"},{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":"        try:"},{"line_number":1012,"context_line":"            self.compute(obj).server_metadata_update(obj.physical_id, new_meta)"},{"line_number":1013,"context_line":"        except exc.InternalError as ex:"},{"line_number":1014,"context_line":"            raise exc.EResourceUpdate(type\u003d\u0027server\u0027, id\u003dobj.physical_id,"},{"line_number":1015,"context_line":"                                      message\u003dsix.text_type(ex))"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_067c90b3","line":1012,"range":{"start_line":1012,"start_character":11,"end_line":1012,"end_character":79},"updated":"2019-05-07 19:05:27.000000000","message":"I think your implementation is still fine.  Just add the steps to clean the metadata here before calling update:\n\n        res \u003d self.conn.compute.get_server_metadata(server)\n        if res.metadata:\n            self.conn.compute.delete_server_metadata(\n                server, list(res.metadata.keys()))","commit_id":"d4a8c2844d1d4874c54860e799a7458c1bdc22e6"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"379be413d2f5520a30db6677eac1f8df6b5f4064","unresolved":false,"context_lines":[{"line_number":1496,"context_line":""},{"line_number":1497,"context_line":"        driver \u003d self.compute(obj)"},{"line_number":1498,"context_line":"        try:"},{"line_number":1499,"context_line":"            metadata \u003d {}"},{"line_number":1500,"context_line":"            metadata[\u0027cluster_id\u0027] \u003d cluster_id"},{"line_number":1501,"context_line":"            metadata[\u0027cluster_node_index\u0027] \u003d six.text_type(obj.index)"},{"line_number":1502,"context_line":"            driver.server_metadata_update(obj.physical_id, metadata)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_eeeff784","line":1499,"updated":"2019-05-05 03:20:45.000000000","message":"Nit: At this point we should probably just write this as\n\u003e metadata \u003d {\n\u003e     \u0027cluster_id\u0027: cluster_id\n\u003e     ....\n\u003e }","commit_id":"d4a8c2844d1d4874c54860e799a7458c1bdc22e6"},{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"b042f2ffd5edd57d9746743ca6b86d4f608844a6","unresolved":false,"context_lines":[{"line_number":1496,"context_line":""},{"line_number":1497,"context_line":"        driver \u003d self.compute(obj)"},{"line_number":1498,"context_line":"        try:"},{"line_number":1499,"context_line":"            metadata \u003d driver.server_metadata_get(obj.physical_id) or {}"},{"line_number":1500,"context_line":"            metadata[\u0027cluster_id\u0027] \u003d cluster_id"},{"line_number":1501,"context_line":"            metadata[\u0027cluster_node_index\u0027] \u003d six.text_type(obj.index)"},{"line_number":1502,"context_line":"            driver.server_metadata_update(obj.physical_id, metadata)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_1e11d85d","side":"PARENT","line":1499,"range":{"start_line":1499,"start_character":23,"end_line":1499,"end_character":70},"updated":"2019-05-13 22:23:31.000000000","message":"Don\u0027t we have to keep this or otherwise the existing keys for the newly joined server will be deleted?","commit_id":"4764595ac7163cd6630d14ac1ff6612bd5ae7ffd"},{"author":{"_account_id":25138,"name":"pheartheceal","email":"pheartheceal@gmail.com","username":"pheartheceal"},"change_message_id":"cddd0cc4e0f2e1bc433f276fb1fe5c2ba0c73d75","unresolved":false,"context_lines":[{"line_number":1496,"context_line":""},{"line_number":1497,"context_line":"        driver \u003d self.compute(obj)"},{"line_number":1498,"context_line":"        try:"},{"line_number":1499,"context_line":"            metadata \u003d driver.server_metadata_get(obj.physical_id) or {}"},{"line_number":1500,"context_line":"            metadata[\u0027cluster_id\u0027] \u003d cluster_id"},{"line_number":1501,"context_line":"            metadata[\u0027cluster_node_index\u0027] \u003d six.text_type(obj.index)"},{"line_number":1502,"context_line":"            driver.server_metadata_update(obj.physical_id, metadata)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_1b147443","side":"PARENT","line":1499,"range":{"start_line":1499,"start_character":23,"end_line":1499,"end_character":70},"in_reply_to":"dfbec78f_1e11d85d","updated":"2019-05-14 21:31:56.000000000","message":"I ah I see, your concern was about the call from do_update. Pushing the code now","commit_id":"4764595ac7163cd6630d14ac1ff6612bd5ae7ffd"},{"author":{"_account_id":25138,"name":"pheartheceal","email":"pheartheceal@gmail.com","username":"pheartheceal"},"change_message_id":"98d98377c834b24f0193983d3db1b11de436ed3a","unresolved":false,"context_lines":[{"line_number":1496,"context_line":""},{"line_number":1497,"context_line":"        driver \u003d self.compute(obj)"},{"line_number":1498,"context_line":"        try:"},{"line_number":1499,"context_line":"            metadata \u003d driver.server_metadata_get(obj.physical_id) or {}"},{"line_number":1500,"context_line":"            metadata[\u0027cluster_id\u0027] \u003d cluster_id"},{"line_number":1501,"context_line":"            metadata[\u0027cluster_node_index\u0027] \u003d six.text_type(obj.index)"},{"line_number":1502,"context_line":"            driver.server_metadata_update(obj.physical_id, metadata)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_00a64154","side":"PARENT","line":1499,"range":{"start_line":1499,"start_character":23,"end_line":1499,"end_character":70},"in_reply_to":"dfbec78f_1e11d85d","updated":"2019-05-14 21:24:47.000000000","message":"Testing behavior of keeping this and updating each key one by one (skipping 403 errors...), it seems to have the same affect as my original patch which 1) doesn\u0027t nuke all the keys 2) only updates the keys specified, in this case cluster_id and cluster_node_index. So I can either add the the code that keeps this line or revert to an earlier patch set","commit_id":"4764595ac7163cd6630d14ac1ff6612bd5ae7ffd"},{"author":{"_account_id":25138,"name":"pheartheceal","email":"pheartheceal@gmail.com","username":"pheartheceal"},"change_message_id":"176f7f0a0cc6d2c9234f517ffb018571656fa030","unresolved":false,"context_lines":[{"line_number":1496,"context_line":""},{"line_number":1497,"context_line":"        driver \u003d self.compute(obj)"},{"line_number":1498,"context_line":"        try:"},{"line_number":1499,"context_line":"            metadata \u003d driver.server_metadata_get(obj.physical_id) or {}"},{"line_number":1500,"context_line":"            metadata[\u0027cluster_id\u0027] \u003d cluster_id"},{"line_number":1501,"context_line":"            metadata[\u0027cluster_node_index\u0027] \u003d six.text_type(obj.index)"},{"line_number":1502,"context_line":"            driver.server_metadata_update(obj.physical_id, metadata)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfbec78f_e1222552","side":"PARENT","line":1499,"range":{"start_line":1499,"start_character":23,"end_line":1499,"end_character":70},"in_reply_to":"dfbec78f_1e11d85d","updated":"2019-05-13 22:56:49.000000000","message":"You said in an earlier comment that \"A profile update assumes that all the metadata from the old profile is blown away\" so I assume that is fine. If you still feel it\u0027s necessary to call server_metadata_update with all of the contents of driver.server_metadata_get(obj.physical_id) then I will have to also modify its behavior to skip over immutable when setting these (similar to how I did with deleting them)","commit_id":"4764595ac7163cd6630d14ac1ff6612bd5ae7ffd"}],"senlin/tests/unit/drivers/test_nova_v2.py":[{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"f8c5762751cd536dfd27cea194d687461d8c952d","unresolved":false,"context_lines":[{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        d \u003d nova_v2.NovaClient(self.conn_params)"},{"line_number":443,"context_line":"        d.server_metadata_update(server, {\u0027k2\u0027: \u0027v2\u0027})"},{"line_number":444,"context_line":"        self.compute.delete_server_metadata.assert_called_once_with("},{"line_number":445,"context_line":"            server, [\u0027k1\u0027])"},{"line_number":446,"context_line":"        self.compute.set_server_metadata.assert_called_once_with("},{"line_number":447,"context_line":"            server, k2\u003d\u0027v2\u0027)"},{"line_number":448,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dfbec78f_0a2c6e45","side":"PARENT","line":445,"range":{"start_line":444,"start_character":0,"end_line":445,"end_character":27},"updated":"2019-05-09 16:50:33.000000000","message":"We should add this check back with the last argument \u0027k1\u0027.\n\nAlso, we probably want to test that delete_server_metadata is called multiple times if there are more than 1 metadata attributes.\n\nWe also need a test case to check that delete_server_metadata can handle the 403 exception and continue deleting the remaining keys.","commit_id":"4764595ac7163cd6630d14ac1ff6612bd5ae7ffd"}]}
