)]}'
{"cinder/tests/unit/volume/drivers/test_datera.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"546a2a8801480ec557b8703d5687db6ee012cfca","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                          connector)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def test_detach_volume_success(self):"},{"line_number":250,"context_line":"        if self._apiv \u003d\u003d \u00272\u0027:"},{"line_number":251,"context_line":"            self.mock_api.side_effect \u003d ["},{"line_number":252,"context_line":"                {},"},{"line_number":253,"context_line":"                self._generate_fake_api_request()("}],"source_content_type":"text/x-python","patch_set":10,"id":"7a3c09a3_d442cd3d","line":250,"updated":"2017-01-16 12:23:59.000000000","message":"Such if-else blocks in tests looks bad. Could you please refactor these tests to avoid if-else statements?","commit_id":"9a8dc08346964a58023992eb1d7b00cb0e4e7679"}],"cinder/volume/drivers/datera/datera_api2.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"546a2a8801480ec557b8703d5687db6ee012cfca","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        # TODO(_alastor_): Make acl cleaning multi-attach aware"},{"line_number":348,"context_line":"        self._clean_acl_2(volume)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def _check_for_acl_2(self, initiator_path):"},{"line_number":351,"context_line":"        \"\"\"Returns True if an acl is found for initiator_path \"\"\""},{"line_number":352,"context_line":"        # TODO(_alastor_) when we get a /initiators/:initiator/acl_policies"},{"line_number":353,"context_line":"        # endpoint use that instead of this monstrosity"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a3c09a3_14bb7528","line":350,"updated":"2017-01-16 12:23:59.000000000","message":"What do suffixes _2 mean?","commit_id":"9a8dc08346964a58023992eb1d7b00cb0e4e7679"}],"cinder/volume/drivers/datera/datera_api21.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"dda0db12c685445fd1ce552ef342c71221a4fa43","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        if reonline:"},{"line_number":136,"context_line":"            self._create_export_2_1(None, volume, None)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        # store_name, vol_name \u003d self._scrape_template(policies)"},{"line_number":139,"context_line":"        # url \u003d datc.URL_TEMPLATES[\u0027vol_inst\u0027]("},{"line_number":140,"context_line":"        #         store_name, vol_name).format(datc._get_name(volume[\u0027id\u0027]))"},{"line_number":141,"context_line":"        # metadata \u003d {}"},{"line_number":142,"context_line":"        # self._store_metadata(url, metadata, \"extend_volume_2_1\", tenant)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":145,"context_line":"    # \u003d Cloned Volume \u003d"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_9b22baa1","line":142,"range":{"start_line":138,"start_character":32,"end_line":142,"end_character":48},"updated":"2017-01-06 21:21:31.000000000","message":"Remove commented out code.","commit_id":"3980ff62611969b5402db0b4336b2405ce3a7622"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"dda0db12c685445fd1ce552ef342c71221a4fa43","unresolved":false,"context_lines":[{"line_number":329,"context_line":"                                                       tenant\u003dtenant)[\u0027data\u0027]"},{"line_number":330,"context_line":"                data \u003d {}"},{"line_number":331,"context_line":"                data[\u0027initiators\u0027] \u003d existing_acl[\u0027initiators\u0027]"},{"line_number":332,"context_line":"                # data.pop(\u0027tenant\u0027)"},{"line_number":333,"context_line":"                # for group in existing_acl[\u0027initiator_groups\u0027]:"},{"line_number":334,"context_line":"                #     group.pop(\u0027tenant\u0027)"},{"line_number":335,"context_line":"                data[\u0027initiator_groups\u0027] \u003d existing_acl[\u0027initiator_groups\u0027]"},{"line_number":336,"context_line":"                data[\u0027initiator_groups\u0027].append({\"path\": initiator_group_path})"},{"line_number":337,"context_line":"                self._issue_api_request(acl_url,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_db38c2d5","line":334,"range":{"start_line":332,"start_character":25,"end_line":334,"end_character":30},"updated":"2017-01-06 21:21:31.000000000","message":"Same","commit_id":"3980ff62611969b5402db0b4336b2405ce3a7622"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"dda0db12c685445fd1ce552ef342c71221a4fa43","unresolved":false,"context_lines":[{"line_number":457,"context_line":"                                       api_version\u003d\u00272.1\u0027, tenant\u003dtenant)"},{"line_number":458,"context_line":"        snapu \u003d \"/\".join((url, snap[\u0027data\u0027][\u0027timestamp\u0027]))"},{"line_number":459,"context_line":"        self._snap_poll_2_1(snapu, tenant)"},{"line_number":460,"context_line":"    #     store_name, vol_name \u003d self._scrape_template(policies)"},{"line_number":461,"context_line":"    #     url \u003d datc.URL_TEMPLATES[\u0027vol_inst\u0027](store_name, vol_name).format("},{"line_number":462,"context_line":"    #             datc._get_name(snapshot[\u0027volume_id\u0027]))"},{"line_number":463,"context_line":"    #     metadata \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_5b53f216","line":460,"updated":"2017-01-06 21:21:31.000000000","message":"+","commit_id":"3980ff62611969b5402db0b4336b2405ce3a7622"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"dda0db12c685445fd1ce552ef342c71221a4fa43","unresolved":false,"context_lines":[{"line_number":498,"context_line":"            msg \u003d _LI(\"Tried to delete snapshot %s, but was not found in \""},{"line_number":499,"context_line":"                      \"Datera cluster. Continuing with delete.\")"},{"line_number":500,"context_line":"            LOG.info(msg, datc._get_name(snapshot[\u0027id\u0027]))"},{"line_number":501,"context_line":"    #     store_name, vol_name \u003d self._scrape_template(policies)"},{"line_number":502,"context_line":"    #     url \u003d datc.URL_TEMPLATES[\u0027vol_inst\u0027](store_name, vol_name).format("},{"line_number":503,"context_line":"    #         datc._get_name(snapshot[\u0027volume_id\u0027]))"},{"line_number":504,"context_line":"    #     metadata \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_7b56f606","line":501,"updated":"2017-01-06 21:21:31.000000000","message":"+","commit_id":"3980ff62611969b5402db0b4336b2405ce3a7622"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"dda0db12c685445fd1ce552ef342c71221a4fa43","unresolved":false,"context_lines":[{"line_number":548,"context_line":"            api_version\u003d\u00272.1\u0027,"},{"line_number":549,"context_line":"            tenant\u003dtenant)"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"        # url \u003d datc.URL_TEMPLATES[\u0027vol_inst\u0027](store_name, vol_name).format("},{"line_number":552,"context_line":"        #     datc._get_name(snapshot[\u0027volume_id\u0027]))"},{"line_number":553,"context_line":"        # metadata \u003d {}"},{"line_number":554,"context_line":"        # self._store_metadata("}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_9b59da37","line":551,"updated":"2017-01-06 21:21:31.000000000","message":"+","commit_id":"3980ff62611969b5402db0b4336b2405ce3a7622"}],"cinder/volume/drivers/datera/datera_iscsi.py":[{"author":{"_account_id":23602,"name":"Michael Dovgal","email":"dovgalmichael@gmail.com","username":"mdovgal"},"change_message_id":"17aa0fc286c07840a460a2bdfcbcc1d32141a1b9","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"@interface.volumedriver"},{"line_number":80,"context_line":"@six.add_metaclass(utils.TraceWrapperWithABCMetaclass)"},{"line_number":81,"context_line":"class DateraDriver(san.SanISCSIDriver, api2.DateraApi, api21.DateraApi):"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    \"\"\"The OpenStack Datera Driver"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5201f7_ec1caf6c","line":81,"range":{"start_line":81,"start_character":0,"end_line":81,"end_character":72},"updated":"2017-01-09 20:52:35.000000000","message":"AFAIU, we will have driver object, that will support both api versions at the same time? And we can dynamically change it?","commit_id":"9a8dc08346964a58023992eb1d7b00cb0e4e7679"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"628031f1c7358b190d67d3f754982037e98c84c6","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    # \u003d Create Volume \u003d"},{"line_number":141,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    @datc._api_lookup"},{"line_number":144,"context_line":"    def create_volume(self, volume):"},{"line_number":145,"context_line":"        \"\"\"Create a logical volume.\"\"\""},{"line_number":146,"context_line":"        pass"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":149,"context_line":"    # \u003d Extend Volume \u003d"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a3905b3_b4aa4183","line":146,"range":{"start_line":143,"start_character":4,"end_line":146,"end_character":12},"updated":"2017-01-23 20:03:18.000000000","message":"I\u0027m ok with this as long as you like it this way, my only concern is that at a glance the driver is doing some cool magic here with the api lookup. Maybe even just like a comment explaining whats going on with these to help some poor soul trying to troubleshoot an issue that doesn\u0027t know how the driver works.","commit_id":"9a8dc08346964a58023992eb1d7b00cb0e4e7679"}],"releasenotes/notes/datera-2.3-driver-update-12d0221fd4bb9fb0.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"dda0db12c685445fd1ce552ef342c71221a4fa43","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added Datera EDF API 2.1 support"},{"line_number":4,"context_line":"  - Added Datera Multi-Tenancy Support"},{"line_number":5,"context_line":"  - Added Datera Template Support"},{"line_number":6,"context_line":"  - Broke Datera driver up into modules"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"ba5201f7_5b7a1289","line":3,"updated":"2017-01-06 21:21:31.000000000","message":"Since you have to do one more update - can you end all of these with a period to be consistent with out other release notes?","commit_id":"3980ff62611969b5402db0b4336b2405ce3a7622"}]}
