)]}'
{"senlin/api/openstack/v1/actions.py":[{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"26d9744fdcd72fdec3088fb99d2d7708ee2a4357","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def index(self, req):"},{"line_number":59,"context_line":"        whitelist \u003d {"},{"line_number":60,"context_line":"            consts.ACTION_NAME: \u0027mixed\u0027,"},{"line_number":61,"context_line":"            consts.ACTION_CLUSTER_ID: \u0027mixed\u0027,"},{"line_number":62,"context_line":"            consts.ACTION_TARGET: \u0027mixed\u0027,"},{"line_number":63,"context_line":"            consts.ACTION_ACTION: \u0027mixed\u0027,"},{"line_number":64,"context_line":"            consts.ACTION_STATUS: \u0027mixed\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_7b7480fe","line":61,"updated":"2019-10-21 16:43:37.000000000","message":"I think we need to microversion this change since it is adding a new query parameter to an existing API.  I\u0027ll have to think about how to do this.","commit_id":"e5274ce14a4c036c52282bd7b85512191638dcfd"},{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"01a3e658fbbef1a2fba6427e860c4ab775d3ac21","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        obj \u003d util.parse_request(\u0027ActionListRequest\u0027, req, params)"},{"line_number":81,"context_line":"        actions \u003d self.rpc_client.call(req.context, \"action_list\", obj)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        return {\u0027actions\u0027: actions}"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @util.policy_enforce"},{"line_number":86,"context_line":"    def create(self, req, body):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_dcb066e0","line":83,"updated":"2019-10-24 17:00:18.000000000","message":"You need to remove the cluster id field from the results if microversion is less than 1.14.  See https://github.com/openstack/senlin/blob/ac493538991b5ea0a06bf7904efe9ebc4bf7333b/senlin/api/openstack/v1/nodes.py#L37","commit_id":"16ce848ad15b6289ba43e3f7ecc7405073255058"},{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"01a3e658fbbef1a2fba6427e860c4ab775d3ac21","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                                               data.action(),"},{"line_number":92,"context_line":"                                               data.params())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        return result"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @util.policy_enforce"},{"line_number":97,"context_line":"    def get(self, req, action_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_dce5c6dd","line":94,"updated":"2019-10-24 17:00:18.000000000","message":"Same thing.  Remove cluster id from result if microversion is less 1.14","commit_id":"16ce848ad15b6289ba43e3f7ecc7405073255058"},{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"01a3e658fbbef1a2fba6427e860c4ab775d3ac21","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        obj \u003d util.parse_request(\u0027ActionGetRequest\u0027, req, params)"},{"line_number":100,"context_line":"        action \u003d self.rpc_client.call(req.context, \u0027action_get\u0027, obj)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        return {\u0027action\u0027: action}"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @wsgi.Controller.api_version(\u00271.12\u0027)"},{"line_number":105,"context_line":"    @util.policy_enforce"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_1cdcbe16","line":102,"updated":"2019-10-24 17:00:18.000000000","message":"Same thing.  Remove cluster id from result if microversion is less 1.14","commit_id":"16ce848ad15b6289ba43e3f7ecc7405073255058"}],"senlin/db/sqlalchemy/migrate_repo/versions/001_first_version.py":[{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"e288275ae93ce19132b6424bc1baea1810abe6c1","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        \u0027action\u0027, meta,"},{"line_number":173,"context_line":"        Column(\u0027id\u0027, String(36), primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":174,"context_line":"        Column(\u0027name\u0027, String(63)),"},{"line_number":175,"context_line":"        Column(\u0027cluster_id\u0027, String(36)),"},{"line_number":176,"context_line":"        Column(\u0027context\u0027, types.Dict),"},{"line_number":177,"context_line":"        Column(\u0027target\u0027, String(36)),"},{"line_number":178,"context_line":"        Column(\u0027action\u0027, Text),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_4715889b","line":175,"range":{"start_line":175,"start_character":8,"end_line":175,"end_character":41},"updated":"2019-07-10 17:24:31.000000000","message":"We cannot simply add the new column here.  You need to create a new migration file called 014_action_clusterid.py that does something like this: https://github.com/openstack/senlin/blob/master/senlin/db/sqlalchemy/migrate_repo/versions/006_node_cluster_dependents_column.py","commit_id":"e2da59f58f2971f823ec4799af13e2007988a01c"}],"senlin/db/sqlalchemy/migrate_repo/versions/014_action_clusterid.py":[{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"7bb6dee24aa026540ba0a472c0892ea277d8c851","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    action \u003d Table(\u0027action\u0027, meta, autoload\u003dTrue)"},{"line_number":21,"context_line":"    action_cluster_id \u003d Column(\u0027cluster_id\u0027, String(36))"},{"line_number":22,"context_line":"    action_cluster_id.create(action)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_2547c579","line":21,"updated":"2019-08-02 19:03:30.000000000","message":"Add default:\n\naction_cluster_id \u003d Column(\u0027cluster_id\u0027, String(36), default\u003d\"\")","commit_id":"e5274ce14a4c036c52282bd7b85512191638dcfd"}],"senlin/engine/service.py":[{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"3e929ea764603c10bec0a924ce4733f73c1b973a","unresolved":false,"context_lines":[{"line_number":2269,"context_line":"                    cluster \u003d co.Cluster.find(ctx, cid)"},{"line_number":2270,"context_line":"                    cluster_ids.append(cluster.id)"},{"line_number":2271,"context_line":"                except exception.ResourceNotFound:"},{"line_number":2272,"context_line":"                    return []"},{"line_number":2273,"context_line":"            if len(cluster_ids) \u003e 0:"},{"line_number":2274,"context_line":"                filters[\u0027cluster_id\u0027] \u003d cluster_ids"},{"line_number":2275,"context_line":"        if req.obj_attr_is_set(\u0027action\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_3b084890","line":2272,"range":{"start_line":2272,"start_character":20,"end_line":2272,"end_character":29},"updated":"2019-08-02 21:19:51.000000000","message":"This is interesting.  You are checking for valid cluster id and returning empty response if the cluster id cannot be found.  Is there a reason we cannot just let the get_all function run and take care of this?  It should just return empty set if the cluster id does not exist","commit_id":"e5274ce14a4c036c52282bd7b85512191638dcfd"}],"senlin/objects/requests/actions.py":[{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"cd0d9f5c3100d76df472aa09cbdf329a3ed220a1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_88705774","line":3,"updated":"2019-10-25 16:39:53.000000000","message":"Sorry","commit_id":"16ce848ad15b6289ba43e3f7ecc7405073255058"},{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"01a3e658fbbef1a2fba6427e860c4ab775d3ac21","unresolved":false,"context_lines":[{"line_number":38,"context_line":"class ActionListRequest(base.SenlinObject):"},{"line_number":39,"context_line":"    action_name_list \u003d list(consts.CLUSTER_ACTION_NAMES)"},{"line_number":40,"context_line":"    action_name_list.extend(list(consts.NODE_ACTION_NAMES))"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    # add cluster_name to params requests"},{"line_number":43,"context_line":"    fields \u003d {"},{"line_number":44,"context_line":"        \u0027name\u0027: fields.ListOfStringsField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_1c611e3a","line":41,"updated":"2019-10-24 17:00:18.000000000","message":"You need to update the version of this object:\n    VERSION \u003d \u00271.1\u0027\n    VERSION_MAP \u003d {\n        \u00271.14\u0027: \u00271.1\u0027\n    }","commit_id":"16ce848ad15b6289ba43e3f7ecc7405073255058"},{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"01a3e658fbbef1a2fba6427e860c4ab775d3ac21","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    action_name_list \u003d list(consts.CLUSTER_ACTION_NAMES)"},{"line_number":40,"context_line":"    action_name_list.extend(list(consts.NODE_ACTION_NAMES))"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    # add cluster_name to params requests"},{"line_number":43,"context_line":"    fields \u003d {"},{"line_number":44,"context_line":"        \u0027name\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":45,"context_line":"        \u0027cluster_id\u0027: fields.ListOfStringsField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_9c266e16","line":42,"updated":"2019-10-24 17:00:18.000000000","message":"We don\u0027t need this comment","commit_id":"16ce848ad15b6289ba43e3f7ecc7405073255058"},{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"01a3e658fbbef1a2fba6427e860c4ab775d3ac21","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            valid_keys\u003dlist(consts.ACTION_SORT_KEYS), nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027project_safe\u0027: fields.FlexibleBooleanField(default\u003dTrue)"},{"line_number":56,"context_line":"    }"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"@base.SenlinObjectRegistry.register"},{"line_number":60,"context_line":"class ActionGetRequest(base.SenlinObject):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_5c4eb6c1","line":57,"updated":"2019-10-24 17:00:18.000000000","message":"Add obj_make_compatible method to only accept tainted for 1.14 or higher. See https://github.com/openstack/senlin/blob/ac493538991b5ea0a06bf7904efe9ebc4bf7333b/senlin/objects/requests/nodes.py#L83","commit_id":"16ce848ad15b6289ba43e3f7ecc7405073255058"},{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"cd0d9f5c3100d76df472aa09cbdf329a3ed220a1","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":68,"context_line":"        if target_version \u003c (1, 14):"},{"line_number":69,"context_line":"            if \u0027tainted\u0027 in primitive[\u0027senlin_object.data\u0027]:"},{"line_number":70,"context_line":"                del primitive[\u0027senlin_object.data\u0027][\u0027tainted\u0027]"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"@base.SenlinObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_68739b81","line":70,"range":{"start_line":70,"start_character":53,"end_line":70,"end_character":60},"updated":"2019-10-25 16:39:53.000000000","message":"Sorry, my bad.  This should be cluster_id because that\u0027s the field you added.  Tainted was the field I added for Node object in my last commit.","commit_id":"c25dfd597cd624a8dd537b051fb8398ef90671e1"}],"senlin/tests/unit/engine/actions/test_action_base.py":[{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"8ec8d951be9ccf9905edfe4cc96f51b10b54c7f1","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        obj \u003d ab.Action(OBJID, \u0027OBJECT_ACTION\u0027, self.ctx, **values)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        self.assertEqual(\u0027FAKE_ID\u0027, obj.id)"},{"line_number":127,"context_line":"        self.assertEqual(\u0027FAKE_NAME\u0027, obj.name)"},{"line_number":128,"context_line":"        self.assertEqual(OBJID, obj.target)"},{"line_number":129,"context_line":"        self.assertEqual(\u0027FAKE_CAUSE\u0027, obj.cause)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_fbdab048","line":126,"updated":"2019-08-02 21:01:47.000000000","message":"Add a check to verify that obj.cluster_id equals \"FAKE_CLUSTER_ID\"","commit_id":"e5274ce14a4c036c52282bd7b85512191638dcfd"},{"author":{"_account_id":27224,"name":"Duc Truong","email":"duc.openstack@gmail.com","username":"dtruong2"},"change_message_id":"8ec8d951be9ccf9905edfe4cc96f51b10b54c7f1","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        record \u003d ao.Action.get(self.ctx, obj.id)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        action_obj \u003d ab.Action._from_object(record)"},{"line_number":183,"context_line":"        self.assertIsInstance(action_obj, ab.Action)"},{"line_number":184,"context_line":"        self.assertEqual(obj.id, action_obj.id)"},{"line_number":185,"context_line":"        self.assertEqual(obj.action, action_obj.action)"},{"line_number":186,"context_line":"        self.assertEqual(obj.name, action_obj.name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_9be93ce4","line":183,"updated":"2019-08-02 21:01:47.000000000","message":"Add a check to verify that obj.cluster_id equals action_obj.cluster_id","commit_id":"e5274ce14a4c036c52282bd7b85512191638dcfd"}]}
