)]}'
{"karbor/services/protection/protectable_plugins/eisoo/oracle.py":[{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"701c54eb39d9e5ab1f0317744352a00da292aca1","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from karbor.i18n import _LE"},{"line_number":20,"context_line":"from karbor import resource"},{"line_number":21,"context_line":"from karbor.services.protection.client_factory import ClientFactory"},{"line_number":22,"context_line":"from karbor.services.protection.clients import eisoo"},{"line_number":23,"context_line":"from karbor.services.protection import protectable_plugin"},{"line_number":24,"context_line":"from oslo_log import log as logging"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_2f428768","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":52},"updated":"2016-12-06 02:53:11.000000000","message":"About the eisoo client module, I think it belong to the vendors\u0027s code, it a part of vendor plugins implementation. It could be moved to the directory of vendor plugins. What\u0027s your opinion about it?","commit_id":"0629d6b08b995fd601c815cd34ef587dcacb90be"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"094814fa8c26350667fe279df7244351810da08f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        return self._SUPPORT_RESOURCE_TYPE"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_parent_resource_types(self):"},{"line_number":42,"context_line":"        return ()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def list_resources(self, context, parameters\u003dNone):"},{"line_number":45,"context_line":"        resources \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_e25c0f7f","line":42,"range":{"start_line":42,"start_character":15,"end_line":42,"end_character":17},"updated":"2016-12-06 13:09:13.000000000","message":"Everything should depend on at least PROJECT_RESOURCE_TYPE.\nOnly project can be a root entity.","commit_id":"0629d6b08b995fd601c815cd34ef587dcacb90be"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"cb1af58247d29ac109e60d2193c9f7f3d9a0add2","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        return self._SUPPORT_RESOURCE_TYPE"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_parent_resource_types(self):"},{"line_number":42,"context_line":"        return constants.PROJECT_RESOURCE_TYPE"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def list_resources(self, context, parameters\u003dNone):"},{"line_number":45,"context_line":"        resources \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_33bf41ab","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":46},"updated":"2017-03-12 12:15:33.000000000","message":"Does the oracle database actually depend on the project, or is it independent of it?","commit_id":"f7481f8d2c482b0f8692315d7b11cb39aa723ddf"},{"author":{"_account_id":23590,"name":"lichunyu","email":"li.chunyu@eisoo.com","username":"lichunyu"},"change_message_id":"d71a6f68352187101a0816e6e858288ef589e1b8","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        return self._SUPPORT_RESOURCE_TYPE"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_parent_resource_types(self):"},{"line_number":42,"context_line":"        return constants.PROJECT_RESOURCE_TYPE"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def list_resources(self, context, parameters\u003dNone):"},{"line_number":45,"context_line":"        resources \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_3b08f327","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":46},"in_reply_to":"9a30ddce_33bf41ab","updated":"2017-03-13 02:33:10.000000000","message":"I saw \"Project - A group of VMs and their shared resources\" on karbor\u0027s wiki. I\u0027m confused whether the database install on a VM is a shared resources. IMO, it is independent of the project, because the database that is installed on a VM is not shared with other VMs.","commit_id":"f7481f8d2c482b0f8692315d7b11cb39aa723ddf"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"f44f659b11e4f44084d55866ba8cea3255cfef6d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        return self._SUPPORT_RESOURCE_TYPE"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_parent_resource_types(self):"},{"line_number":42,"context_line":"        return constants.PROJECT_RESOURCE_TYPE"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def list_resources(self, context, parameters\u003dNone):"},{"line_number":45,"context_line":"        resources \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_bbda2315","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":46},"in_reply_to":"9a30ddce_3b08f327","updated":"2017-03-13 03:13:33.000000000","message":"hi lichunyu, if the parent resource type of resource oracle database is project. It doesn\u0027t mean that the database is a shared resource. It means that the oracle database depend on the project or it is a dependence resource of project.\n\nSo, IMO. In this protection plugin, the oracle database is independent of project.","commit_id":"f7481f8d2c482b0f8692315d7b11cb39aa723ddf"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"cb1af58247d29ac109e60d2193c9f7f3d9a0add2","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    def list_resources(self, context, parameters\u003dNone):"},{"line_number":45,"context_line":"        resources \u003d []"},{"line_number":46,"context_line":"        full_path \u003d \u0027\u0027"},{"line_number":47,"context_line":"        try:"},{"line_number":48,"context_line":"            clients \u003d self._client(context).backup_manager.get_clients()"},{"line_number":49,"context_line":"            for client in clients:"},{"line_number":50,"context_line":"                client_mac \u003d client[\u0027clientMac\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_93fd4d70","line":47,"range":{"start_line":47,"start_character":0,"end_line":47,"end_character":12},"updated":"2017-03-12 12:15:33.000000000","message":"What if only when client raises an error?\nAre you sure you want to fail the whole list operation, or do you want to skip it?","commit_id":"f7481f8d2c482b0f8692315d7b11cb39aa723ddf"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"289961744228aeb07cafb047db2b50483c84f632","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    def list_resources(self, context, parameters\u003dNone):"},{"line_number":45,"context_line":"        resources \u003d []"},{"line_number":46,"context_line":"        full_path \u003d \u0027\u0027"},{"line_number":47,"context_line":"        try:"},{"line_number":48,"context_line":"            clients \u003d self._client(context).backup_manager.get_clients()"},{"line_number":49,"context_line":"            for client in clients:"},{"line_number":50,"context_line":"                client_mac \u003d client[\u0027clientMac\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_939e2d05","line":47,"range":{"start_line":47,"start_character":0,"end_line":47,"end_character":12},"in_reply_to":"9a30ddce_93fd4d70","updated":"2017-03-12 12:16:07.000000000","message":"\u0027if only when\u0027 -\u003e \u0027if only one\u0027","commit_id":"f7481f8d2c482b0f8692315d7b11cb39aa723ddf"},{"author":{"_account_id":23590,"name":"lichunyu","email":"li.chunyu@eisoo.com","username":"lichunyu"},"change_message_id":"d71a6f68352187101a0816e6e858288ef589e1b8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    def list_resources(self, context, parameters\u003dNone):"},{"line_number":45,"context_line":"        resources \u003d []"},{"line_number":46,"context_line":"        full_path \u003d \u0027\u0027"},{"line_number":47,"context_line":"        try:"},{"line_number":48,"context_line":"            clients \u003d self._client(context).backup_manager.get_clients()"},{"line_number":49,"context_line":"            for client in clients:"},{"line_number":50,"context_line":"                client_mac \u003d client[\u0027clientMac\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_db17d742","line":47,"range":{"start_line":47,"start_character":0,"end_line":47,"end_character":12},"in_reply_to":"9a30ddce_93fd4d70","updated":"2017-03-13 02:33:10.000000000","message":"I should skip it when one client raises an error. I will fix it.","commit_id":"f7481f8d2c482b0f8692315d7b11cb39aa723ddf"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"cb1af58247d29ac109e60d2193c9f7f3d9a0add2","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                        id\u003dresource_id,"},{"line_number":63,"context_line":"                        name\u003ddisp_path))"},{"line_number":64,"context_line":"        except Exception as e:"},{"line_number":65,"context_line":"            LOG.exception(_LE(\"List all summary oracle databases failed.\"))"},{"line_number":66,"context_line":"            raise exception.ListProtectableResourceFailed("},{"line_number":67,"context_line":"                type\u003dself._SUPPORT_RESOURCE_TYPE,"},{"line_number":68,"context_line":"                reason\u003dsix.text_type(e))"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_b3b251e3","line":65,"range":{"start_line":65,"start_character":26,"end_line":65,"end_character":29},"updated":"2017-03-12 12:15:33.000000000","message":"should be _ instead of _LE, see:\nhttps://docs.openstack.org/developer/oslo.i18n/guidelines.html#choosing-a-marker-function","commit_id":"f7481f8d2c482b0f8692315d7b11cb39aa723ddf"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"cb1af58247d29ac109e60d2193c9f7f3d9a0add2","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            return resources"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def show_resource(self, context, resource_id, parameters\u003dNone):"},{"line_number":73,"context_line":"        resources \u003d self.list_resources(context)"},{"line_number":74,"context_line":"        for each in resources:"},{"line_number":75,"context_line":"            if each.id \u003d\u003d resource_id:"},{"line_number":76,"context_line":"                return each"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_33f7415a","line":73,"range":{"start_line":73,"start_character":0,"end_line":73,"end_character":48},"updated":"2017-03-12 12:15:33.000000000","message":"Just wondering: given the resource id, isn\u0027t there a more efficient way then listing and iterating through the resources?","commit_id":"f7481f8d2c482b0f8692315d7b11cb39aa723ddf"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"cb1af58247d29ac109e60d2193c9f7f3d9a0add2","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def show_resource(self, context, resource_id, parameters\u003dNone):"},{"line_number":73,"context_line":"        resources \u003d self.list_resources(context)"},{"line_number":74,"context_line":"        for each in resources:"},{"line_number":75,"context_line":"            if each.id \u003d\u003d resource_id:"},{"line_number":76,"context_line":"                return each"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_b3e971b9","line":74,"range":{"start_line":74,"start_character":12,"end_line":74,"end_character":16},"updated":"2017-03-12 12:15:33.000000000","message":"\u0027resource\u0027 is more appropriate than \u0027each\u0027","commit_id":"f7481f8d2c482b0f8692315d7b11cb39aa723ddf"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"cb1af58247d29ac109e60d2193c9f7f3d9a0add2","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            if each.id \u003d\u003d resource_id:"},{"line_number":76,"context_line":"                return each"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        LOG.exception(_LE(\"Show a summary oracle database failed.\"))"},{"line_number":79,"context_line":"        raise exception.ListProtectableResourceFailed("},{"line_number":80,"context_line":"            type\u003dself._SUPPORT_RESOURCE_TYPE,"},{"line_number":81,"context_line":"            reason\u003d_(\"The oracle database does not exist\"))"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_53e035cd","line":78,"range":{"start_line":78,"start_character":22,"end_line":78,"end_character":25},"updated":"2017-03-12 12:15:33.000000000","message":"ditto","commit_id":"f7481f8d2c482b0f8692315d7b11cb39aa723ddf"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"cb1af58247d29ac109e60d2193c9f7f3d9a0add2","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                return each"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        LOG.exception(_LE(\"Show a summary oracle database failed.\"))"},{"line_number":79,"context_line":"        raise exception.ListProtectableResourceFailed("},{"line_number":80,"context_line":"            type\u003dself._SUPPORT_RESOURCE_TYPE,"},{"line_number":81,"context_line":"            reason\u003d_(\"The oracle database does not exist\"))"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_13db1d1c","line":79,"range":{"start_line":79,"start_character":24,"end_line":79,"end_character":53},"updated":"2017-03-12 12:15:33.000000000","message":"ListProtectableResourceFailed -\u003e ProtectableResourceNotFound","commit_id":"f7481f8d2c482b0f8692315d7b11cb39aa723ddf"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"cb1af58247d29ac109e60d2193c9f7f3d9a0add2","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            reason\u003d_(\"The oracle database does not exist\"))"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def get_dependent_resources(self, context, parent_resource):"},{"line_number":84,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_33d661f1","line":84,"range":{"start_line":84,"start_character":0,"end_line":84,"end_character":12},"updated":"2017-03-12 12:15:33.000000000","message":"If \u0027project\u0027 is a parent resource (and as said above, I\u0027m not sure it should be), then this method should return the databases which depend on a project.","commit_id":"f7481f8d2c482b0f8692315d7b11cb39aa723ddf"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"b06fa24735644fbeae9ff77ea757b4ecd56bc491","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        return resources"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def show_resource(self, context, resource_id, parameters\u003dNone):"},{"line_number":77,"context_line":"        resources \u003d self.list_resources(context)"},{"line_number":78,"context_line":"        for resource in resources:"},{"line_number":79,"context_line":"            if resource.id \u003d\u003d resource_id:"},{"line_number":80,"context_line":"                return resource"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        LOG.exception(_(\"Show a summary oracle database failed.\"))"},{"line_number":83,"context_line":"        raise exception.ProtectableResourceNotFound("}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_eda693bf","line":80,"range":{"start_line":77,"start_character":0,"end_line":80,"end_character":31},"updated":"2017-03-13 12:42:44.000000000","message":"Isn\u0027t there a better way to get one resource?\nDo you have to list and iterate?","commit_id":"d808be142407b0836eb7ac5bef2234faf0683fdc"}],"karbor/tests/unit/plugins/test_oracle_protectable_plugin.py":[{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"b06fa24735644fbeae9ff77ea757b4ecd56bc491","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        data_sources \u003d ["},{"line_number":39,"context_line":"            {\u0027dispPath\u0027: \u0027fake_disp\u0027}"},{"line_number":40,"context_line":"        ]"},{"line_number":41,"context_line":"        self.plugin._client \u003d mock.MagicMock()"},{"line_number":42,"context_line":"        self.plugin._client.return_value \u003d self.eisoo_client"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        self.eisoo_client.backup_manager.get_clients \u003d mock.MagicMock()"},{"line_number":45,"context_line":"        self.eisoo_client.backup_manager.get_clients.return_value \u003d clients"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.eisoo_client.backup_manager. \\"},{"line_number":48,"context_line":"            get_data_source_list \u003d mock.MagicMock()"},{"line_number":49,"context_line":"        self.eisoo_client.backup_manager. \\"},{"line_number":50,"context_line":"            get_data_source_list.return_value \u003d data_sources"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        resources \u003d self.plugin.list_resources(self.cntxt)"},{"line_number":53,"context_line":"        self.assertEqual(resources[0].id, \u002712345_fake_disp\u0027)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def test_list_resources_with_exception(self):"},{"line_number":56,"context_line":"        clients \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_cd91cf48","line":53,"range":{"start_line":41,"start_character":0,"end_line":53,"end_character":60},"updated":"2017-03-13 12:42:44.000000000","message":"Please use decorator, or context manager for mocks\n(also on all following tests)","commit_id":"d808be142407b0836eb7ac5bef2234faf0683fdc"}]}
