)]}'
{"releasenotes/notes/cinder-model-integration-baa394a72a0a33bf.yaml":[{"author":{"_account_id":24872,"name":"YumengBao","email":"yumeng_bao@yahoo.com","username":"Yumeng_Bao"},"change_message_id":"e7aeb8186aa1caed0b3516e82f25ec7d9982aefd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added cinder cluster data model "}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5f201791_6613175e","line":4,"range":{"start_line":4,"start_character":35,"end_line":4,"end_character":36},"updated":"2017-06-22 12:11:22.000000000","message":"one nit: extra space.","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f1f8225b2937044ee9094107333dbf8ffdbd854b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added cinder cluster data model "}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5f201791_a2032573","line":4,"range":{"start_line":4,"start_character":35,"end_line":4,"end_character":36},"in_reply_to":"5f201791_6613175e","updated":"2017-06-24 03:47:26.000000000","message":"Done","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"}],"watcher/common/cinder_helper.py":[{"author":{"_account_id":21361,"name":"Chris Spencer","email":"christopher.m.spencer@intel.com","username":"chrisspencer"},"change_message_id":"f7c6adb6555e28b899acca4a393f644d8dbfbb72","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        LOG.debug(\"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\")"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        volume_type \u003d filter(lambda volume_type:"},{"line_number":49,"context_line":"                      volume_type.extra_specs.get(\u0027volume_backend_name\u0027) \u003d\u003d backendname,"},{"line_number":50,"context_line":"                      volume_type_list)"},{"line_number":51,"context_line":"        if volume_type:"},{"line_number":52,"context_line":"            return volume_type[0].name"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_559bc716","line":49,"updated":"2017-03-28 15:00:51.000000000","message":"line too long and needs to be indented to be in line with lambda, not filter","commit_id":"9e7107f86603c405d07267babc6fe1928767f6e0"},{"author":{"_account_id":21361,"name":"Chris Spencer","email":"christopher.m.spencer@intel.com","username":"chrisspencer"},"change_message_id":"f7c6adb6555e28b899acca4a393f644d8dbfbb72","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        volume_type \u003d filter(lambda volume_type:"},{"line_number":49,"context_line":"                      volume_type.extra_specs.get(\u0027volume_backend_name\u0027) \u003d\u003d backendname,"},{"line_number":50,"context_line":"                      volume_type_list)"},{"line_number":51,"context_line":"        if volume_type:"},{"line_number":52,"context_line":"            return volume_type[0].name"},{"line_number":53,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_75324b12","line":50,"updated":"2017-03-28 15:00:51.000000000","message":"indented to be in line with lambda not filter","commit_id":"9e7107f86603c405d07267babc6fe1928767f6e0"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"b618d3a85ba7b4e55477cb938249c1e980999981","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        storages \u003d filter(lambda storage:"},{"line_number":37,"context_line":"                          storage.name \u003d\u003d name,"},{"line_number":38,"context_line":"                          self.get_storage_storage_list())"},{"line_number":39,"context_line":"        return storages[0]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_storage_pool_list(self):"},{"line_number":42,"context_line":"        return self.cinder.pools.list(detailed\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_b1283f34","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":26},"updated":"2017-04-18 07:48:28.000000000","message":"what if storages is empty? can you handle this possible error?","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"16421632627da541f3201dc36aa06dc18c712eeb","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        storages \u003d filter(lambda storage:"},{"line_number":37,"context_line":"                          storage.name \u003d\u003d name,"},{"line_number":38,"context_line":"                          self.get_storage_storage_list())"},{"line_number":39,"context_line":"        return storages[0]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_storage_pool_list(self):"},{"line_number":42,"context_line":"        return self.cinder.pools.list(detailed\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_b6d22aff","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":26},"in_reply_to":"7ffa3b31_b1283f34","updated":"2017-04-20 07:27:01.000000000","message":"Done","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"b618d3a85ba7b4e55477cb938249c1e980999981","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_volume_type_by_backendname(self, backendname):"},{"line_number":56,"context_line":"        volume_type_list \u003d self.get_volume_type_list()"},{"line_number":57,"context_line":"        LOG.debug(\"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\")"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        volume_type \u003d filter("},{"line_number":60,"context_line":"            lambda volume_type:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_d1d62b28","line":57,"range":{"start_line":57,"start_character":8,"end_line":57,"end_character":53},"updated":"2017-04-18 07:48:28.000000000","message":"do we need this?","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"16421632627da541f3201dc36aa06dc18c712eeb","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_volume_type_by_backendname(self, backendname):"},{"line_number":56,"context_line":"        volume_type_list \u003d self.get_volume_type_list()"},{"line_number":57,"context_line":"        LOG.debug(\"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\")"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        volume_type \u003d filter("},{"line_number":60,"context_line":"            lambda volume_type:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_96cf2e55","line":57,"range":{"start_line":57,"start_character":8,"end_line":57,"end_character":53},"in_reply_to":"7ffa3b31_d1d62b28","updated":"2017-04-20 07:27:01.000000000","message":"removed.","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"a7cc9fa160414e584e6bacbf219e5e4c2ab762f2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.cinder \u003d self.osc.cinder()"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_storage_node_list(self):"},{"line_number":32,"context_line":"        return list(filter(lambda service: service.binary \u003d\u003d \u0027cinder-volume\u0027,"},{"line_number":33,"context_line":"                    self.cinder.services.list()))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def get_storage_node_by_name(self, name):"},{"line_number":36,"context_line":"        \"\"\"Get storage node by name(host@backendname)\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"9f0e0f27_d70e5c31","line":33,"range":{"start_line":32,"start_character":20,"end_line":33,"end_character":47},"updated":"2017-06-09 07:59:07.000000000","message":"why not\nself.cinder.services.list(binary \u003d \u0027cinder-volume) ?","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"5621321b7d719ab65cb6abdef4de9aba3973a7b0","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.cinder \u003d self.osc.cinder()"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_storage_node_list(self):"},{"line_number":32,"context_line":"        return list(filter(lambda service: service.binary \u003d\u003d \u0027cinder-volume\u0027,"},{"line_number":33,"context_line":"                    self.cinder.services.list()))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def get_storage_node_by_name(self, name):"},{"line_number":36,"context_line":"        \"\"\"Get storage node by name(host@backendname)\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"7f231b9d_931785a4","line":33,"range":{"start_line":32,"start_character":20,"end_line":33,"end_character":47},"in_reply_to":"9f0e0f27_d70e5c31","updated":"2017-06-13 13:24:57.000000000","message":"Done","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"},{"author":{"_account_id":14107,"name":"zhurong","email":"aaronzhu1121@gmail.com","username":"zhurong"},"change_message_id":"5c8a300ee8c80b2e39dbbf4bc8a7953387db710b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \"\"\"Get storage node by name(host@backendname)\"\"\""},{"line_number":36,"context_line":"        try:"},{"line_number":37,"context_line":"            storages \u003d list(filter(lambda storage:"},{"line_number":38,"context_line":"                            storage.name \u003d\u003d name,"},{"line_number":39,"context_line":"                            self.get_storage_node_list()))"},{"line_number":40,"context_line":"            if len(storages) !\u003d 1:"},{"line_number":41,"context_line":"                raise exception.StorageNodeNotFound(name\u003dname)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_072c4645","line":38,"range":{"start_line":38,"start_character":28,"end_line":38,"end_character":40},"updated":"2017-06-23 05:49:57.000000000","message":"here should be storage.host not storage.name","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f1f8225b2937044ee9094107333dbf8ffdbd854b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \"\"\"Get storage node by name(host@backendname)\"\"\""},{"line_number":36,"context_line":"        try:"},{"line_number":37,"context_line":"            storages \u003d list(filter(lambda storage:"},{"line_number":38,"context_line":"                            storage.name \u003d\u003d name,"},{"line_number":39,"context_line":"                            self.get_storage_node_list()))"},{"line_number":40,"context_line":"            if len(storages) !\u003d 1:"},{"line_number":41,"context_line":"                raise exception.StorageNodeNotFound(name\u003dname)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_fd7660a4","line":38,"range":{"start_line":38,"start_character":28,"end_line":38,"end_character":40},"in_reply_to":"5f201791_072c4645","updated":"2017-06-24 03:47:26.000000000","message":"Done","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"},{"author":{"_account_id":14107,"name":"zhurong","email":"aaronzhu1121@gmail.com","username":"zhurong"},"change_message_id":"5c8a300ee8c80b2e39dbbf4bc8a7953387db710b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                raise exception.PoolNotFound(name\u003dname)"},{"line_number":58,"context_line":"            return pools[0]"},{"line_number":59,"context_line":"        except Exception as exc:"},{"line_number":60,"context_line":"            LOG.debug(exc)"},{"line_number":61,"context_line":"            raise exception.PoolNotFound(name\u003dname)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_volume_list(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_0704467a","line":60,"range":{"start_line":60,"start_character":16,"end_line":60,"end_character":21},"updated":"2017-06-23 05:49:57.000000000","message":"exception","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f1f8225b2937044ee9094107333dbf8ffdbd854b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                raise exception.PoolNotFound(name\u003dname)"},{"line_number":58,"context_line":"            return pools[0]"},{"line_number":59,"context_line":"        except Exception as exc:"},{"line_number":60,"context_line":"            LOG.debug(exc)"},{"line_number":61,"context_line":"            raise exception.PoolNotFound(name\u003dname)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_volume_list(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_1d46bc50","line":60,"range":{"start_line":60,"start_character":16,"end_line":60,"end_character":21},"in_reply_to":"5f201791_0704467a","updated":"2017-06-24 03:47:26.000000000","message":"Done","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"}],"watcher/common/exception.py":[{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"a7cc9fa160414e584e6bacbf219e5e4c2ab762f2","unresolved":false,"context_lines":[{"line_number":433,"context_line":""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"class StorageNodeNotFound(StorageResourceNotFound):"},{"line_number":436,"context_line":"    msg_fmt \u003d _(\"The Storage node %(name)s could not be found\")"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"class PoolNotFound(StorageResourceNotFound):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f0e0f27_3756b808","line":436,"range":{"start_line":436,"start_character":21,"end_line":436,"end_character":28},"updated":"2017-06-09 07:59:07.000000000","message":"storage?","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"5621321b7d719ab65cb6abdef4de9aba3973a7b0","unresolved":false,"context_lines":[{"line_number":433,"context_line":""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"class StorageNodeNotFound(StorageResourceNotFound):"},{"line_number":436,"context_line":"    msg_fmt \u003d _(\"The Storage node %(name)s could not be found\")"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"class PoolNotFound(StorageResourceNotFound):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f231b9d_3328b1e0","line":436,"range":{"start_line":436,"start_character":21,"end_line":436,"end_character":28},"in_reply_to":"9f0e0f27_3756b808","updated":"2017-06-13 13:24:57.000000000","message":"Done","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"}],"watcher/decision_engine/model/collector/cinder.py":[{"author":{"_account_id":21361,"name":"Chris Spencer","email":"christopher.m.spencer@intel.com","username":"chrisspencer"},"change_message_id":"f7c6adb6555e28b899acca4a393f644d8dbfbb72","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from watcher.decision_engine.model.collector import base"},{"line_number":21,"context_line":"from watcher.decision_engine.model import element"},{"line_number":22,"context_line":"from watcher.decision_engine.model import model_root"},{"line_number":23,"context_line":"# from watcher.decision_engine.model.notification import cinder"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_982f4687","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":63},"updated":"2017-03-28 15:00:51.000000000","message":"uncomment or remove","commit_id":"9e7107f86603c405d07267babc6fe1928767f6e0"},{"author":{"_account_id":21361,"name":"Chris Spencer","email":"christopher.m.spencer@intel.com","username":"chrisspencer"},"change_message_id":"f7c6adb6555e28b899acca4a393f644d8dbfbb72","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        :rtype: List of :py:class:`~.EventsNotificationEndpoint` instances"},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        return ["},{"line_number":46,"context_line":"            # nova.ServiceUpdated(self),"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"            # nova.InstanceCreated(self),"},{"line_number":49,"context_line":"            # nova.InstanceUpdated(self),"},{"line_number":50,"context_line":"            # nova.InstanceDeletedEnd(self),"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"            # nova.LegacyInstanceCreatedEnd(self),"},{"line_number":53,"context_line":"            # nova.LegacyInstanceUpdated(self),"},{"line_number":54,"context_line":"            # nova.LegacyInstanceDeletedEnd(self),"},{"line_number":55,"context_line":"            # nova.LegacyLiveMigratedEnd(self),"},{"line_number":56,"context_line":"        ]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def execute(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_f841b23a","line":55,"range":{"start_line":46,"start_character":12,"end_line":55,"end_character":47},"updated":"2017-03-28 15:00:51.000000000","message":"uncomment or remove","commit_id":"9e7107f86603c405d07267babc6fe1928767f6e0"},{"author":{"_account_id":21361,"name":"Chris Spencer","email":"christopher.m.spencer@intel.com","username":"chrisspencer"},"change_message_id":"f7c6adb6555e28b899acca4a393f644d8dbfbb72","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    def add_storage_pool(self, pool):"},{"line_number":105,"context_line":"        storage_pool \u003d self.build_storage_pool(pool)"},{"line_number":106,"context_line":"        self.model.add_pool(storage_pool)"},{"line_number":107,"context_line":"        # map_pool"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def build_storage_node(self, node):"},{"line_number":110,"context_line":"        \"\"\"Build a storage node from a Cinder storage node"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_f8af72e0","line":107,"range":{"start_line":107,"start_character":8,"end_line":107,"end_character":18},"updated":"2017-03-28 15:00:51.000000000","message":"is this needed?  remove","commit_id":"9e7107f86603c405d07267babc6fe1928767f6e0"},{"author":{"_account_id":21361,"name":"Chris Spencer","email":"christopher.m.spencer@intel.com","username":"chrisspencer"},"change_message_id":"2e464c0f0c8d459003909f5903ee837bf1978689","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        :rtype: List of :py:class:`~.EventsNotificationEndpoint` instances"},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        return ["},{"line_number":46,"context_line":"            # nova.ServiceUpdated(self),"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"            # nova.InstanceCreated(self),"},{"line_number":49,"context_line":"            # nova.InstanceUpdated(self),"},{"line_number":50,"context_line":"            # nova.InstanceDeletedEnd(self),"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"            # nova.LegacyInstanceCreatedEnd(self),"},{"line_number":53,"context_line":"            # nova.LegacyInstanceUpdated(self),"},{"line_number":54,"context_line":"            # nova.LegacyInstanceDeletedEnd(self),"},{"line_number":55,"context_line":"            # nova.LegacyLiveMigratedEnd(self),"},{"line_number":56,"context_line":"        ]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def execute(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_cc7c8cb7","line":55,"range":{"start_line":46,"start_character":12,"end_line":55,"end_character":47},"updated":"2017-04-05 18:08:21.000000000","message":"is there a reason this is commented out?    Should be uncommented or removed","commit_id":"826585bf2fba12a62449e08171d287831c95dc66"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"b618d3a85ba7b4e55477cb938249c1e980999981","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        LOG.debug(node.host)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        volume_type \u003d self.cinder_helper.get_volume_type_by_backendname("},{"line_number":116,"context_line":"            node.host.split(\u0027@\u0027)[1])"},{"line_number":117,"context_line":"        LOG.debug(\"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\")"},{"line_number":118,"context_line":"        LOG.debug(volume_type)"},{"line_number":119,"context_line":"        # build up the storage node."}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_71d07720","line":116,"range":{"start_line":116,"start_character":22,"end_line":116,"end_character":32},"updated":"2017-04-18 07:48:28.000000000","message":"can you add a comment explaining why you need to do a split on @ with a quick example please? I\u0027m not too well aware of the Cinder API so I reckon we need to be explicit here on why we need to split a field value with a @ delimiter.","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"16421632627da541f3201dc36aa06dc18c712eeb","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        LOG.debug(node.host)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        volume_type \u003d self.cinder_helper.get_volume_type_by_backendname("},{"line_number":116,"context_line":"            node.host.split(\u0027@\u0027)[1])"},{"line_number":117,"context_line":"        LOG.debug(\"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\")"},{"line_number":118,"context_line":"        LOG.debug(volume_type)"},{"line_number":119,"context_line":"        # build up the storage node."}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_76d8221d","line":116,"range":{"start_line":116,"start_character":22,"end_line":116,"end_character":32},"in_reply_to":"7ffa3b31_71d07720","updated":"2017-04-20 07:27:01.000000000","message":"Done","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"b618d3a85ba7b4e55477cb938249c1e980999981","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        volume_type \u003d self.cinder_helper.get_volume_type_by_backendname("},{"line_number":116,"context_line":"            node.host.split(\u0027@\u0027)[1])"},{"line_number":117,"context_line":"        LOG.debug(\"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\")"},{"line_number":118,"context_line":"        LOG.debug(volume_type)"},{"line_number":119,"context_line":"        # build up the storage node."},{"line_number":120,"context_line":"        node_attributes \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_d1bbcbc1","line":117,"range":{"start_line":117,"start_character":8,"end_line":117,"end_character":28},"updated":"2017-04-18 07:48:28.000000000","message":"ditto on the \u0027\u003d\u003d\u003d\u0027 debug logs: do we need it or was it for you to debug your code?","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"16421632627da541f3201dc36aa06dc18c712eeb","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        volume_type \u003d self.cinder_helper.get_volume_type_by_backendname("},{"line_number":116,"context_line":"            node.host.split(\u0027@\u0027)[1])"},{"line_number":117,"context_line":"        LOG.debug(\"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\")"},{"line_number":118,"context_line":"        LOG.debug(volume_type)"},{"line_number":119,"context_line":"        # build up the storage node."},{"line_number":120,"context_line":"        node_attributes \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_36085a90","line":117,"range":{"start_line":117,"start_character":8,"end_line":117,"end_character":28},"in_reply_to":"7ffa3b31_d1bbcbc1","updated":"2017-04-20 07:27:01.000000000","message":"removed.","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"b618d3a85ba7b4e55477cb938249c1e980999981","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            self.model.add_volume(volume)"},{"line_number":161,"context_line":"            pool_name \u003d getattr(vol, \u0027os-vol-host-attr:host\u0027)"},{"line_number":162,"context_line":"            if pool_name is None:"},{"line_number":163,"context_line":"                # The volume is not attached to any pool"},{"line_number":164,"context_line":"                continue"},{"line_number":165,"context_line":"            try:"},{"line_number":166,"context_line":"                pool \u003d self.model.get_pool_by_pool_name("}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_d12e2bf9","line":163,"range":{"start_line":163,"start_character":16,"end_line":163,"end_character":56},"updated":"2017-04-18 07:48:28.000000000","message":"If I compare it to the compute CDM, I still took into account the instance which were not attached to a compute node (usually because they are in ERROR state). So shouldn\u0027t we also represent this piece of information by creating a volume node but without linking it to a pool node?","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"a7cc9fa160414e584e6bacbf219e5e4c2ab762f2","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        :type node: :py:class:`~cinderclient.v2.services.Service`"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        volume_type \u003d self.cinder_helper.get_volume_type_by_backendname("},{"line_number":114,"context_line":"            # node.host is formatted as host@backendname"},{"line_number":115,"context_line":"            node.host.split(\u0027@\u0027)[1])"},{"line_number":116,"context_line":"        # build up the storage node."},{"line_number":117,"context_line":"        node_attributes \u003d {"},{"line_number":118,"context_line":"            \"host\": node.host,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f0e0f27_b7abe873","line":115,"range":{"start_line":114,"start_character":12,"end_line":115,"end_character":35},"updated":"2017-06-09 07:59:07.000000000","message":"host maybe no @backendname, I don\u0027t know in this case, the return of get_volume_type_by_backendname().\n\nthe return of \u0027cinder service-list\u0027 I tested\n\n+---------------+-------------------------+------+---------+-------+----------------------------+-----------------+\n|     Binary    |           Host          | Zone |  Status | State |         Updated_at         | Disabled Reason |\n+---------------+-------------------------+------+---------+-------+----------------------------+-----------------+\n| cinder-volume |          cinder         | nova | enabled |  down | 2017-05-25T05:47:27.000000 |        -        |\n| cinder-volume |    cinder@ceph_pool1    | nova | enabled |   up  | 2017-06-09T06:31:13.000000 |        -        |\n| cinder-volume |    cinder@ceph_pool2    | nova | enabled |  down | 2017-05-25T12:16:41.000000 |        -        |\n| cinder-volume |     cinder@cephiscsi    | nova | enabled |  down | 2017-05-25T12:16:40.000000 |        -        |\n| cinder-volume |        cinder@lvm       | nova | enabled |  down | 2017-05-25T12:16:41.000000 |        -        |\n| cinder-volume |       controller09      | nova | enabled |  down | 2017-04-21T02:46:40.000000 |        -        |\n| cinder-volume |    controller09@CEPH    | nova | enabled |  down | 2017-04-18T07:37:08.000000 |        -        |","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"5621321b7d719ab65cb6abdef4de9aba3973a7b0","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        :type node: :py:class:`~cinderclient.v2.services.Service`"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        volume_type \u003d self.cinder_helper.get_volume_type_by_backendname("},{"line_number":114,"context_line":"            # node.host is formatted as host@backendname"},{"line_number":115,"context_line":"            node.host.split(\u0027@\u0027)[1])"},{"line_number":116,"context_line":"        # build up the storage node."},{"line_number":117,"context_line":"        node_attributes \u003d {"},{"line_number":118,"context_line":"            \"host\": node.host,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f231b9d_93654548","line":115,"range":{"start_line":114,"start_character":12,"end_line":115,"end_character":35},"in_reply_to":"7f231b9d_9bdd6c44","updated":"2017-06-13 13:24:57.000000000","message":"Done","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"4f638b7d2d175e88dc5e849e84feaa9216baf2db","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        :type node: :py:class:`~cinderclient.v2.services.Service`"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        volume_type \u003d self.cinder_helper.get_volume_type_by_backendname("},{"line_number":114,"context_line":"            # node.host is formatted as host@backendname"},{"line_number":115,"context_line":"            node.host.split(\u0027@\u0027)[1])"},{"line_number":116,"context_line":"        # build up the storage node."},{"line_number":117,"context_line":"        node_attributes \u003d {"},{"line_number":118,"context_line":"            \"host\": node.host,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f231b9d_9bdd6c44","line":115,"range":{"start_line":114,"start_character":12,"end_line":115,"end_character":35},"in_reply_to":"9f0e0f27_b7abe873","updated":"2017-06-13 06:24:36.000000000","message":"You may do not use enabled_backends parameter.\nenabled_backends parameter is mandatory since ocata:\nhttps://github.com/openstack/cinder/blob/master/cinder/cmd/volume.py#L112-L114\n\nI will update for no @backendname as of ocata.","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"a7cc9fa160414e584e6bacbf219e5e4c2ab762f2","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\"Build a storage pool from a Cinder storage pool"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        :param pool: A storage pool"},{"line_number":131,"context_line":"        :type node: :py:class:`~cinderlient.v2.capabilities.Capabilities`"},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        # build up the storage pool."},{"line_number":134,"context_line":"        node_attributes \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f0e0f27_57180cd2","line":131,"range":{"start_line":131,"start_character":14,"end_line":131,"end_character":18},"updated":"2017-06-09 07:59:07.000000000","message":"pool?","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"5621321b7d719ab65cb6abdef4de9aba3973a7b0","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\"Build a storage pool from a Cinder storage pool"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        :param pool: A storage pool"},{"line_number":131,"context_line":"        :type node: :py:class:`~cinderlient.v2.capabilities.Capabilities`"},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        # build up the storage pool."},{"line_number":134,"context_line":"        node_attributes \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f231b9d_53868ddd","line":131,"range":{"start_line":131,"start_character":14,"end_line":131,"end_character":18},"in_reply_to":"9f0e0f27_57180cd2","updated":"2017-06-13 13:24:57.000000000","message":"Done","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"},{"author":{"_account_id":14107,"name":"zhurong","email":"aaronzhu1121@gmail.com","username":"zhurong"},"change_message_id":"5c8a300ee8c80b2e39dbbf4bc8a7953387db710b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        for snode in self.cinder_helper.get_storage_node_list():"},{"line_number":85,"context_line":"            self.add_storage_node(snode)"},{"line_number":86,"context_line":"        for pool in self.cinder_helper.get_storage_pool_list():"},{"line_number":87,"context_line":"            pool \u003d self._build_storage_pool(pool)"},{"line_number":88,"context_line":"            self.model.add_pool(pool)"},{"line_number":89,"context_line":"            storage_name \u003d getattr(pool, \u0027name\u0027)"},{"line_number":90,"context_line":"            try:"},{"line_number":91,"context_line":"                storage_node \u003d self.model.get_node_by_name("}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_07ee8687","line":88,"range":{"start_line":87,"start_character":0,"end_line":88,"end_character":37},"updated":"2017-06-23 05:49:57.000000000","message":"this code is duplicate with add_storage_pool, maybe we can just using self.add_storage_pool(pool)","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f1f8225b2937044ee9094107333dbf8ffdbd854b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        for snode in self.cinder_helper.get_storage_node_list():"},{"line_number":85,"context_line":"            self.add_storage_node(snode)"},{"line_number":86,"context_line":"        for pool in self.cinder_helper.get_storage_pool_list():"},{"line_number":87,"context_line":"            pool \u003d self._build_storage_pool(pool)"},{"line_number":88,"context_line":"            self.model.add_pool(pool)"},{"line_number":89,"context_line":"            storage_name \u003d getattr(pool, \u0027name\u0027)"},{"line_number":90,"context_line":"            try:"},{"line_number":91,"context_line":"                storage_node \u003d self.model.get_node_by_name("}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_9d73ecb1","line":88,"range":{"start_line":87,"start_character":0,"end_line":88,"end_character":37},"in_reply_to":"5f201791_07ee8687","updated":"2017-06-24 03:47:26.000000000","message":"Done","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"af73c634816ce253c91bba45707cedfa21c845dc","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        for snode in self.cinder_helper.get_storage_node_list():"},{"line_number":85,"context_line":"            self.add_storage_node(snode)"},{"line_number":86,"context_line":"        for pool in self.cinder_helper.get_storage_pool_list():"},{"line_number":87,"context_line":"            pool \u003d self._build_storage_pool(pool)"},{"line_number":88,"context_line":"            self.model.add_pool(pool)"},{"line_number":89,"context_line":"            storage_name \u003d getattr(pool, \u0027name\u0027)"},{"line_number":90,"context_line":"            try:"},{"line_number":91,"context_line":"                storage_node \u003d self.model.get_node_by_name("}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_7f6535b4","line":88,"range":{"start_line":87,"start_character":0,"end_line":88,"end_character":37},"in_reply_to":"5f201791_9d73ecb1","updated":"2017-06-28 13:18:07.000000000","message":"This was reverted at PS 17.\nWithout _build_storage_pool, IllegalArgumentException: \u0027obj\u0027 argument type is not valid: \u003cclass \u0027cinderclient.v2.pools.Pool\u0027\u003e occurred.\nBecause model.add_pool needs instance of element.Pool.","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"},{"author":{"_account_id":14107,"name":"zhurong","email":"aaronzhu1121@gmail.com","username":"zhurong"},"change_message_id":"5c8a300ee8c80b2e39dbbf4bc8a7953387db710b","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        self.model.add_node(storage_node)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def add_storage_pool(self, pool):"},{"line_number":104,"context_line":"        storage_pool \u003d self.build_storage_pool(pool)"},{"line_number":105,"context_line":"        self.model.add_pool(storage_pool)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def build_storage_node(self, node):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_a7e592aa","line":104,"range":{"start_line":104,"start_character":28,"end_line":104,"end_character":46},"updated":"2017-06-23 05:49:57.000000000","message":"self._build_storage_pool","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f1f8225b2937044ee9094107333dbf8ffdbd854b","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        self.model.add_node(storage_node)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def add_storage_pool(self, pool):"},{"line_number":104,"context_line":"        storage_pool \u003d self.build_storage_pool(pool)"},{"line_number":105,"context_line":"        self.model.add_pool(storage_pool)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def build_storage_node(self, node):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_dd796493","line":104,"range":{"start_line":104,"start_character":28,"end_line":104,"end_character":46},"in_reply_to":"5f201791_a7e592aa","updated":"2017-06-24 03:47:26.000000000","message":"instead, removed  _ from method name.","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"171c924edfc0166201d2b1814057e006e217d546","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        self.model.add_node(storage_node)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def add_storage_pool(self, pool):"},{"line_number":104,"context_line":"        storage_pool \u003d self.build_storage_pool(pool)"},{"line_number":105,"context_line":"        self.model.add_pool(storage_pool)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def build_storage_node(self, node):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_34050e15","line":104,"range":{"start_line":104,"start_character":28,"end_line":104,"end_character":46},"in_reply_to":"5f201791_dd796493","updated":"2017-06-24 23:52:09.000000000","message":"Rethinked and updated to _build_storage_pool by PS15.","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"}],"watcher/decision_engine/model/element/storage_resource.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"7cfe8abf48ef0fdca82c445f7c9a4a6c0bc67467","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright (c) 2015 b\u003c\u003ecom"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":5,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_d3dac1e7","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":27},"updated":"2017-05-22 06:26:06.000000000","message":"NEC Copyright with 2017 needed here :)","commit_id":"5ced850becc00eaa989354ab5ae8628cf7cb0e97"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"44f199cf1e4def4d262966a535de20062a8b324c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright (c) 2015 b\u003c\u003ecom"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":5,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_e7e2c02f","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":27},"in_reply_to":"1f013ff3_d3dac1e7","updated":"2017-05-29 07:38:23.000000000","message":"Done","commit_id":"5ced850becc00eaa989354ab5ae8628cf7cb0e97"}],"watcher/decision_engine/model/element/volume.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"7cfe8abf48ef0fdca82c445f7c9a4a6c0bc67467","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright (c) 2015 b\u003c\u003ecom"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":5,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_93e439ae","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":27},"updated":"2017-05-22 06:26:06.000000000","message":"ditto","commit_id":"5ced850becc00eaa989354ab5ae8628cf7cb0e97"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"44f199cf1e4def4d262966a535de20062a8b324c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright (c) 2015 b\u003c\u003ecom"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":5,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_87cb04a4","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":27},"in_reply_to":"1f013ff3_93e439ae","updated":"2017-05-29 07:38:23.000000000","message":"Done","commit_id":"5ced850becc00eaa989354ab5ae8628cf7cb0e97"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"a7cc9fa160414e584e6bacbf219e5e4c2ab762f2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"@base.WatcherObjectRegistry.register_if(False)"},{"line_number":41,"context_line":"class Volume(storage_resource.StorageResource):"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    fields \u003d {"},{"line_number":44,"context_line":"        \"size\": wfields.NonNegativeIntegerField(),"},{"line_number":45,"context_line":"        \"status\": wfields.StringField(default\u003dVolumeState.AVAILABLE.value),"},{"line_number":46,"context_line":"        \"attachments\": wfields.FlexibleListOfDictField(),"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f0e0f27_17bcd467","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":10},"updated":"2017-06-09 07:59:07.000000000","message":"suggest to add \u0027bootable\u0027 field, if bootable is true, the volume has a os system.","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"5621321b7d719ab65cb6abdef4de9aba3973a7b0","unresolved":false,"context_lines":[{"line_number":40,"context_line":"@base.WatcherObjectRegistry.register_if(False)"},{"line_number":41,"context_line":"class Volume(storage_resource.StorageResource):"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    fields \u003d {"},{"line_number":44,"context_line":"        \"size\": wfields.NonNegativeIntegerField(),"},{"line_number":45,"context_line":"        \"status\": wfields.StringField(default\u003dVolumeState.AVAILABLE.value),"},{"line_number":46,"context_line":"        \"attachments\": wfields.FlexibleListOfDictField(),"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f231b9d_93cae517","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":10},"in_reply_to":"7f231b9d_1bca7c6c","updated":"2017-06-13 13:24:57.000000000","message":"Done","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"4f638b7d2d175e88dc5e849e84feaa9216baf2db","unresolved":false,"context_lines":[{"line_number":40,"context_line":"@base.WatcherObjectRegistry.register_if(False)"},{"line_number":41,"context_line":"class Volume(storage_resource.StorageResource):"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    fields \u003d {"},{"line_number":44,"context_line":"        \"size\": wfields.NonNegativeIntegerField(),"},{"line_number":45,"context_line":"        \"status\": wfields.StringField(default\u003dVolumeState.AVAILABLE.value),"},{"line_number":46,"context_line":"        \"attachments\": wfields.FlexibleListOfDictField(),"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f231b9d_1bca7c6c","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":10},"in_reply_to":"9f0e0f27_17bcd467","updated":"2017-06-13 06:24:36.000000000","message":"Thanks, i will add it.","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"}],"watcher/decision_engine/model/model_root.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"9f1390d3fee3b2929a6792c419ed6ed64318721a","unresolved":false,"context_lines":[{"line_number":463,"context_line":""},{"line_number":464,"context_line":"            root.append(storage_node_el)"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        # Build unmapped instance tree (i.e. not assigned to any compute node)"},{"line_number":467,"context_line":"        for volume in sorted(self.get_all_volumes().values(),"},{"line_number":468,"context_line":"                             key\u003dlambda vol: vol.uuid):"},{"line_number":469,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_d98d0232","line":466,"range":{"start_line":466,"start_character":8,"end_line":466,"end_character":78},"updated":"2017-04-19 13:24:08.000000000","message":"# Build unmapped volume tree (i.e. not assigned to any pool)","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"16421632627da541f3201dc36aa06dc18c712eeb","unresolved":false,"context_lines":[{"line_number":463,"context_line":""},{"line_number":464,"context_line":"            root.append(storage_node_el)"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        # Build unmapped instance tree (i.e. not assigned to any compute node)"},{"line_number":467,"context_line":"        for volume in sorted(self.get_all_volumes().values(),"},{"line_number":468,"context_line":"                             key\u003dlambda vol: vol.uuid):"},{"line_number":469,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_96f84e7b","line":466,"range":{"start_line":466,"start_character":8,"end_line":466,"end_character":78},"in_reply_to":"7ffa3b31_d98d0232","updated":"2017-04-20 07:27:01.000000000","message":"Done","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"9f1390d3fee3b2929a6792c419ed6ed64318721a","unresolved":false,"context_lines":[{"line_number":468,"context_line":"                             key\u003dlambda vol: vol.uuid):"},{"line_number":469,"context_line":"            try:"},{"line_number":470,"context_line":"                self.get_pool_by_volume_uuid(volume.uuid)"},{"line_number":471,"context_line":"            except (exception.VolumeNotFound, exception.PoolNotFound):"},{"line_number":472,"context_line":"                root.append(volume.as_xml_element())"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        return etree.tostring(root, pretty_print\u003dTrue).decode(\u0027utf-8\u0027)"},{"line_number":475,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_59cc5260","line":472,"range":{"start_line":471,"start_character":12,"end_line":472,"end_character":52},"updated":"2017-04-19 13:24:08.000000000","message":"if you have a exception.VolumeNotFound, I understand you map it to the root element. However, souldn\u0027t you do the same for pools if they are not mapped?\n\nStorageNode1\n|_Pool1\n  |_Volume1\n  |_Volume2\n|_Pool2\n  |_Volume3\n  |_Volume4\n\nIn this case, if volume1 failed, they it will not be mapped to Pool1 nor to StorageNode1.\nHowever, if Pool1 failed when it was create (is it possible?), then shouldn\u0027t it also be represented in root element?","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"16421632627da541f3201dc36aa06dc18c712eeb","unresolved":false,"context_lines":[{"line_number":468,"context_line":"                             key\u003dlambda vol: vol.uuid):"},{"line_number":469,"context_line":"            try:"},{"line_number":470,"context_line":"                self.get_pool_by_volume_uuid(volume.uuid)"},{"line_number":471,"context_line":"            except (exception.VolumeNotFound, exception.PoolNotFound):"},{"line_number":472,"context_line":"                root.append(volume.as_xml_element())"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        return etree.tostring(root, pretty_print\u003dTrue).decode(\u0027utf-8\u0027)"},{"line_number":475,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_f159dc8d","line":472,"range":{"start_line":471,"start_character":12,"end_line":472,"end_character":52},"in_reply_to":"7ffa3b31_59cc5260","updated":"2017-04-20 07:27:01.000000000","message":"Pool is not dynamically created as volume is. \nPool name is defined in each driver code. For example, it equals backendname(e.g. LVM, written in driver code) or it is defined in configuration file as driver options(e.g. Dell EMC Unity driver, ).\nPool creating fail may happen when we wrote bad configuration. I think we do not need to take it into account.","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"b9aeb1e4fee40ded78cf8ecd64e23775804267ca","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            raise exception.IllegalArgumentException("},{"line_number":275,"context_line":"                message\u003d_(\"\u0027obj\u0027 argument type is not valid: %s\") % type(obj))"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    @lockutils.synchronized(\"model_root\")"},{"line_number":278,"context_line":"    def add_node(self, node):"},{"line_number":279,"context_line":"        self.assert_node(node)"},{"line_number":280,"context_line":"        super(StorageModelRoot, self).add_node(node.host, node)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df140735_87dc2447","line":277,"range":{"start_line":277,"start_character":29,"end_line":277,"end_character":39},"updated":"2017-05-29 08:35:29.000000000","message":"The synchronization lock doesn\u0027t have to be the same as the compute model since they are completely decoupled from one another. So IMHO, I would change this to something like \"storage_model\" and maybe also rename (in a separate patch) the \"model_root\" key to \"compute_model\" on the compute model side although this 2nd step is completely optional.","commit_id":"7eb1e40e624b890a73328281234cf35b4f1c5b4c"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f0c7c82a846b4013018571ebee8ccd6edbbfaa09","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            raise exception.IllegalArgumentException("},{"line_number":275,"context_line":"                message\u003d_(\"\u0027obj\u0027 argument type is not valid: %s\") % type(obj))"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    @lockutils.synchronized(\"model_root\")"},{"line_number":278,"context_line":"    def add_node(self, node):"},{"line_number":279,"context_line":"        self.assert_node(node)"},{"line_number":280,"context_line":"        super(StorageModelRoot, self).add_node(node.host, node)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df140735_0a4ff9bd","line":277,"range":{"start_line":277,"start_character":29,"end_line":277,"end_character":39},"in_reply_to":"df140735_87dc2447","updated":"2017-05-29 08:55:28.000000000","message":"Done","commit_id":"7eb1e40e624b890a73328281234cf35b4f1c5b4c"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"b9aeb1e4fee40ded78cf8ecd64e23775804267ca","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        self.assert_node(node)"},{"line_number":280,"context_line":"        super(StorageModelRoot, self).add_node(node.host, node)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    @lockutils.synchronized(\"model_root\")"},{"line_number":283,"context_line":"    def add_pool(self, pool):"},{"line_number":284,"context_line":"        self.assert_pool(pool)"},{"line_number":285,"context_line":"        super(StorageModelRoot, self).add_node(pool.name, pool)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df140735_67e110ff","line":282,"range":{"start_line":282,"start_character":29,"end_line":282,"end_character":39},"updated":"2017-05-29 08:35:29.000000000","message":"ditto","commit_id":"7eb1e40e624b890a73328281234cf35b4f1c5b4c"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f0c7c82a846b4013018571ebee8ccd6edbbfaa09","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        self.assert_node(node)"},{"line_number":280,"context_line":"        super(StorageModelRoot, self).add_node(node.host, node)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    @lockutils.synchronized(\"model_root\")"},{"line_number":283,"context_line":"    def add_pool(self, pool):"},{"line_number":284,"context_line":"        self.assert_pool(pool)"},{"line_number":285,"context_line":"        super(StorageModelRoot, self).add_node(pool.name, pool)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df140735_ea4ba5ad","line":282,"range":{"start_line":282,"start_character":29,"end_line":282,"end_character":39},"in_reply_to":"df140735_67e110ff","updated":"2017-05-29 08:55:28.000000000","message":"Done","commit_id":"7eb1e40e624b890a73328281234cf35b4f1c5b4c"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"b9aeb1e4fee40ded78cf8ecd64e23775804267ca","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        self.assert_pool(pool)"},{"line_number":285,"context_line":"        super(StorageModelRoot, self).add_node(pool.name, pool)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    @lockutils.synchronized(\"model_root\")"},{"line_number":288,"context_line":"    def remove_node(self, node):"},{"line_number":289,"context_line":"        self.assert_node(node)"},{"line_number":290,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"df140735_27e31808","line":287,"range":{"start_line":287,"start_character":29,"end_line":287,"end_character":39},"updated":"2017-05-29 08:35:29.000000000","message":"ditto (and so on)","commit_id":"7eb1e40e624b890a73328281234cf35b4f1c5b4c"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f0c7c82a846b4013018571ebee8ccd6edbbfaa09","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        self.assert_pool(pool)"},{"line_number":285,"context_line":"        super(StorageModelRoot, self).add_node(pool.name, pool)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    @lockutils.synchronized(\"model_root\")"},{"line_number":288,"context_line":"    def remove_node(self, node):"},{"line_number":289,"context_line":"        self.assert_node(node)"},{"line_number":290,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"df140735_cac6a117","line":287,"range":{"start_line":287,"start_character":29,"end_line":287,"end_character":39},"in_reply_to":"df140735_27e31808","updated":"2017-05-29 08:55:28.000000000","message":"Done","commit_id":"7eb1e40e624b890a73328281234cf35b4f1c5b4c"}],"watcher/decision_engine/model/notification/cinder.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"7cfe8abf48ef0fdca82c445f7c9a4a6c0bc67467","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def __init__(self, collector):"},{"line_number":33,"context_line":"        super(CinderNotification, self).__init__(collector)"},{"line_number":34,"context_line":"        self._nova \u003d cinder_helper.CinderHelper()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def update_storage_pool(self, pool, data):"},{"line_number":37,"context_line":"        \"\"\"Update the storage pool using the notification data.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_643205f4","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":49},"updated":"2017-05-22 06:26:06.000000000","message":"Where is this used?","commit_id":"5ced850becc00eaa989354ab5ae8628cf7cb0e97"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"44f199cf1e4def4d262966a535de20062a8b324c","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def __init__(self, collector):"},{"line_number":33,"context_line":"        super(CinderNotification, self).__init__(collector)"},{"line_number":34,"context_line":"        self._nova \u003d cinder_helper.CinderHelper()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def update_storage_pool(self, pool, data):"},{"line_number":37,"context_line":"        \"\"\"Update the storage pool using the notification data.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_e7bbe00b","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":49},"in_reply_to":"1f013ff3_643205f4","updated":"2017-05-29 07:38:23.000000000","message":"Done","commit_id":"5ced850becc00eaa989354ab5ae8628cf7cb0e97"},{"author":{"_account_id":21692,"name":"licanwei","email":"li.canwei2@zte.com.cn","username":"licanwei"},"change_message_id":"a7cc9fa160414e584e6bacbf219e5e4c2ab762f2","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_log import log"},{"line_number":20,"context_line":"from watcher._i18n import _LI"},{"line_number":21,"context_line":"from watcher.common import cinder_helper"},{"line_number":22,"context_line":"from watcher.common import exception"},{"line_number":23,"context_line":"from watcher.decision_engine.model import element"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f0e0f27_7abbf5e4","line":20,"range":{"start_line":20,"start_character":26,"end_line":20,"end_character":29},"updated":"2017-06-09 07:59:07.000000000","message":"not used any more","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"5621321b7d719ab65cb6abdef4de9aba3973a7b0","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_log import log"},{"line_number":20,"context_line":"from watcher._i18n import _LI"},{"line_number":21,"context_line":"from watcher.common import cinder_helper"},{"line_number":22,"context_line":"from watcher.common import exception"},{"line_number":23,"context_line":"from watcher.decision_engine.model import element"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f231b9d_b3f04169","line":20,"range":{"start_line":20,"start_character":26,"end_line":20,"end_character":29},"in_reply_to":"9f0e0f27_7abbf5e4","updated":"2017-06-13 13:24:57.000000000","message":"Done","commit_id":"22d9d24773f3aca1764022b3be387a3badffd8be"},{"author":{"_account_id":14107,"name":"zhurong","email":"aaronzhu1121@gmail.com","username":"zhurong"},"change_message_id":"d0488f534daa16490b8f42d2bf9c4a8e3d0fa206","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            pool \u003d self.create_pool(name)"},{"line_number":133,"context_line":"            LOG.debug(\"New storage pool created: %s\", name)"},{"line_number":134,"context_line":"            self.cluster_data_model.add_pool(pool)"},{"line_number":135,"context_line":"            LOG.debug(\"New storage node added: %s\", name)"},{"line_number":136,"context_line":"            return pool"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def get_or_create_volume(self, volume_id, pool_name\u003dNone):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_1938169e","line":135,"range":{"start_line":135,"start_character":35,"end_line":135,"end_character":39},"updated":"2017-07-04 11:57:38.000000000","message":"pool","commit_id":"815af1f539a81ac28aa366124c54edec703d5a20"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"fda0bfd26d6019f549261d55cd7c47eed519113b","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            pool \u003d self.create_pool(name)"},{"line_number":133,"context_line":"            LOG.debug(\"New storage pool created: %s\", name)"},{"line_number":134,"context_line":"            self.cluster_data_model.add_pool(pool)"},{"line_number":135,"context_line":"            LOG.debug(\"New storage node added: %s\", name)"},{"line_number":136,"context_line":"            return pool"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def get_or_create_volume(self, volume_id, pool_name\u003dNone):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_bf232956","line":135,"range":{"start_line":135,"start_character":35,"end_line":135,"end_character":39},"in_reply_to":"3f1d235d_1938169e","updated":"2017-07-04 23:59:08.000000000","message":"Done","commit_id":"815af1f539a81ac28aa366124c54edec703d5a20"},{"author":{"_account_id":14107,"name":"zhurong","email":"aaronzhu1121@gmail.com","username":"zhurong"},"change_message_id":"d0488f534daa16490b8f42d2bf9c4a8e3d0fa206","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            return self.cluster_data_model.get_volume_by_uuid(volume_id)"},{"line_number":148,"context_line":"        except exception.VolumeNotFound:"},{"line_number":149,"context_line":"            # The volume didn\u0027t exist yet so we create a new pool object"},{"line_number":150,"context_line":"            volume \u003d element.Volume(uuid\u003dvolume_id)"},{"line_number":151,"context_line":"            self.cluster_data_model.add_volume(volume)"},{"line_number":152,"context_line":"        return volume"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_59556ec5","line":149,"range":{"start_line":149,"start_character":61,"end_line":149,"end_character":65},"updated":"2017-07-04 11:57:38.000000000","message":"volume","commit_id":"815af1f539a81ac28aa366124c54edec703d5a20"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"fda0bfd26d6019f549261d55cd7c47eed519113b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            return self.cluster_data_model.get_volume_by_uuid(volume_id)"},{"line_number":148,"context_line":"        except exception.VolumeNotFound:"},{"line_number":149,"context_line":"            # The volume didn\u0027t exist yet so we create a new pool object"},{"line_number":150,"context_line":"            volume \u003d element.Volume(uuid\u003dvolume_id)"},{"line_number":151,"context_line":"            self.cluster_data_model.add_volume(volume)"},{"line_number":152,"context_line":"        return volume"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_df2a652a","line":149,"range":{"start_line":149,"start_character":61,"end_line":149,"end_character":65},"in_reply_to":"3f1d235d_59556ec5","updated":"2017-07-04 23:59:08.000000000","message":"Done","commit_id":"815af1f539a81ac28aa366124c54edec703d5a20"}],"watcher/decision_engine/strategy/strategies/base.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"f3b40545f39c57bee70d3a97591994dd6b3e68b8","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        return self._compute_model"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @property"},{"line_number":197,"context_line":"    def storage__model(self):"},{"line_number":198,"context_line":"        \"\"\"Cluster data model"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        :returns: Cluster data model the strategy is executed on"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_59d8d27d","line":197,"range":{"start_line":197,"start_character":15,"end_line":197,"end_character":17},"updated":"2017-04-19 13:11:33.000000000","message":"nit: is it normal you have 2 \u0027_\u0027 here?","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"16421632627da541f3201dc36aa06dc18c712eeb","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        return self._compute_model"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @property"},{"line_number":197,"context_line":"    def storage__model(self):"},{"line_number":198,"context_line":"        \"\"\"Cluster data model"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        :returns: Cluster data model the strategy is executed on"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ffa3b31_9154d854","line":197,"range":{"start_line":197,"start_character":15,"end_line":197,"end_character":17},"in_reply_to":"7ffa3b31_59d8d27d","updated":"2017-04-20 07:27:01.000000000","message":"Done","commit_id":"8a04f4cc015a075a15e7eed474559dc40ebd84a8"}],"watcher/tests/common/test_cinder_helper.py":[{"author":{"_account_id":14107,"name":"zhurong","email":"aaronzhu1121@gmail.com","username":"zhurong"},"change_message_id":"5c8a300ee8c80b2e39dbbf4bc8a7953387db710b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def fake_storage_node(**kwargs):"},{"line_number":36,"context_line":"        node \u003d mock.MagicMock()"},{"line_number":37,"context_line":"        node.binary \u003d kwargs.get(\u0027binary\u0027, \u0027cinder-volume\u0027)"},{"line_number":38,"context_line":"        node.name \u003d kwargs.get(\u0027name\u0027, \u0027host@backend\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        return node"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_2715024b","line":38,"range":{"start_line":38,"start_character":13,"end_line":38,"end_character":17},"updated":"2017-06-23 05:49:57.000000000","message":"should host not name","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"f1f8225b2937044ee9094107333dbf8ffdbd854b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def fake_storage_node(**kwargs):"},{"line_number":36,"context_line":"        node \u003d mock.MagicMock()"},{"line_number":37,"context_line":"        node.binary \u003d kwargs.get(\u0027binary\u0027, \u0027cinder-volume\u0027)"},{"line_number":38,"context_line":"        node.name \u003d kwargs.get(\u0027name\u0027, \u0027host@backend\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        return node"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_7d6a50b3","line":38,"range":{"start_line":38,"start_character":13,"end_line":38,"end_character":17},"in_reply_to":"5f201791_2715024b","updated":"2017-06-24 03:47:26.000000000","message":"Done","commit_id":"5ea6775a5befd5ecfcc4d4562617ca61b4f15428"}],"watcher/tests/decision_engine/model/data/storage_scenario_1.xml":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"7cfe8abf48ef0fdca82c445f7c9a4a6c0bc67467","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003cModelRoot\u003e"},{"line_number":2,"context_line":"  \u003cStorageNode status\u003d\"enabled\" zone\u003d\"zone_0\" state\u003d\"up\" volume_type\u003d\"type_0\" host\u003d\"host_0@backend_0\" human_id\u003d\"\"\u003e"},{"line_number":3,"context_line":"    \u003cPool total_capacity_gb\u003d\"500\" name\u003d\"host_0@backend_0#pool_0\" total_volumes\u003d\"2\" provisioned_capacity_gb\u003d\"80\" human_id\u003d\"\" allocated_capacity_gb\u003d\"80\" free_capacity_gb\u003d\"420\" virtual_free\u003d\"420\"\u003e"},{"line_number":4,"context_line":"      \u003cVolume status\u003d\"in-use\" uuid\u003d\"VOLUME_0\" attachments\u003d\u0027[{\"server_id\": \"server\", \"attachment_id\": \"attachment\"}]\u0027 multiattach\u003d\"True\" size\u003d\"40\" metadata\u003d\u0027{\"readonly\": false, \"attached_mode\": \"rw\"}\u0027 snapshot_id\u003d\"\" project_id\u003d\"project_0\" human_id\u003d\"\" name\u003d\"name_0\"/\u003e"},{"line_number":5,"context_line":"      \u003cVolume status\u003d\"in-use\" uuid\u003d\"VOLUME_1\" attachments\u003d\u0027[{\"server_id\": \"server\", \"attachment_id\": \"attachment\"}]\u0027 multiattach\u003d\"True\" size\u003d\"40\" metadata\u003d\u0027{\"readonly\": false, \"attached_mode\": \"rw\"}\u0027 snapshot_id\u003d\"\" project_id\u003d\"project_1\" human_id\u003d\"\" name\u003d\"name_1\"/\u003e"},{"line_number":6,"context_line":"    \u003c/Pool\u003e"},{"line_number":7,"context_line":"    \u003cPool total_capacity_gb\u003d\"500\" name\u003d\"host_0@backend_0#pool_1\" total_volumes\u003d\"2\" provisioned_capacity_gb\u003d\"80\" human_id\u003d\"\" allocated_capacity_gb\u003d\"80\" free_capacity_gb\u003d\"420\" virtual_free\u003d\"420\"\u003e"}],"source_content_type":"application/xml","patch_set":6,"id":"1f013ff3_a4cdad5e","line":4,"range":{"start_line":4,"start_character":130,"end_line":4,"end_character":134},"updated":"2017-05-22 06:26:06.000000000","message":"can you make it lowercase to be more JSON-like?","commit_id":"5ced850becc00eaa989354ab5ae8628cf7cb0e97"},{"author":{"_account_id":13111,"name":"Hidekazu Nakamura","email":"hidekazuna@gmail.com","username":"hid-nakamura"},"change_message_id":"44f199cf1e4def4d262966a535de20062a8b324c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003cModelRoot\u003e"},{"line_number":2,"context_line":"  \u003cStorageNode status\u003d\"enabled\" zone\u003d\"zone_0\" state\u003d\"up\" volume_type\u003d\"type_0\" host\u003d\"host_0@backend_0\" human_id\u003d\"\"\u003e"},{"line_number":3,"context_line":"    \u003cPool total_capacity_gb\u003d\"500\" name\u003d\"host_0@backend_0#pool_0\" total_volumes\u003d\"2\" provisioned_capacity_gb\u003d\"80\" human_id\u003d\"\" allocated_capacity_gb\u003d\"80\" free_capacity_gb\u003d\"420\" virtual_free\u003d\"420\"\u003e"},{"line_number":4,"context_line":"      \u003cVolume status\u003d\"in-use\" uuid\u003d\"VOLUME_0\" attachments\u003d\u0027[{\"server_id\": \"server\", \"attachment_id\": \"attachment\"}]\u0027 multiattach\u003d\"True\" size\u003d\"40\" metadata\u003d\u0027{\"readonly\": false, \"attached_mode\": \"rw\"}\u0027 snapshot_id\u003d\"\" project_id\u003d\"project_0\" human_id\u003d\"\" name\u003d\"name_0\"/\u003e"},{"line_number":5,"context_line":"      \u003cVolume status\u003d\"in-use\" uuid\u003d\"VOLUME_1\" attachments\u003d\u0027[{\"server_id\": \"server\", \"attachment_id\": \"attachment\"}]\u0027 multiattach\u003d\"True\" size\u003d\"40\" metadata\u003d\u0027{\"readonly\": false, \"attached_mode\": \"rw\"}\u0027 snapshot_id\u003d\"\" project_id\u003d\"project_1\" human_id\u003d\"\" name\u003d\"name_1\"/\u003e"},{"line_number":6,"context_line":"    \u003c/Pool\u003e"},{"line_number":7,"context_line":"    \u003cPool total_capacity_gb\u003d\"500\" name\u003d\"host_0@backend_0#pool_1\" total_volumes\u003d\"2\" provisioned_capacity_gb\u003d\"80\" human_id\u003d\"\" allocated_capacity_gb\u003d\"80\" free_capacity_gb\u003d\"420\" virtual_free\u003d\"420\"\u003e"}],"source_content_type":"application/xml","patch_set":6,"id":"df140735_67459017","line":4,"range":{"start_line":4,"start_character":130,"end_line":4,"end_character":134},"in_reply_to":"1f013ff3_a4cdad5e","updated":"2017-05-29 07:38:23.000000000","message":"Done","commit_id":"5ced850becc00eaa989354ab5ae8628cf7cb0e97"}]}
