)]}'
{"manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee66b93690c028d34ba5dfe0d75ed9bd7deae03e","unresolved":false,"context_lines":[{"line_number":551,"context_line":"                      \u0027for volume clone dependency to clear.\u0027,"},{"line_number":552,"context_line":"                      {\u0027snap\u0027: snapshot_name, \u0027share\u0027: share_name})"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"            time.sleep(retry_interval)"},{"line_number":555,"context_line":"            snapshot \u003d vserver_client.get_snapshot(share_name, snapshot_name)"},{"line_number":556,"context_line":"            if not snapshot[\u0027busy\u0027]:"},{"line_number":557,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9b358b_f28504ad","line":554,"updated":"2015-04-01 03:42:36.000000000","message":"I suggest using loopingcall instead of time.sleep here.","commit_id":"cfbadf43908d5f5353ca0c120fe5428050cff310"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"5406084edf54ed8adc70427c6385b2798ddd8457","unresolved":false,"context_lines":[{"line_number":551,"context_line":"                      \u0027for volume clone dependency to clear.\u0027,"},{"line_number":552,"context_line":"                      {\u0027snap\u0027: snapshot_name, \u0027share\u0027: share_name})"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"            time.sleep(retry_interval)"},{"line_number":555,"context_line":"            snapshot \u003d vserver_client.get_snapshot(share_name, snapshot_name)"},{"line_number":556,"context_line":"            if not snapshot[\u0027busy\u0027]:"},{"line_number":557,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa041b7_954ba459","line":554,"in_reply_to":"da9b358b_f28504ad","updated":"2015-04-01 20:13:45.000000000","message":"Hi, Xing.  Loopingcall is for callbacks from a separate thread context.  But we definitely want to block the current thread for a short time (up to a minute).\n\nPlease note that in almost all cases, we won\u0027t get into this sleeping loop because a snapshot will not be busy.  Only in rare cases would we get here, and this brief wait increases resiliency of the snapshot-delete workflow by preventing an exception during the few seconds while a clone is being split from its snapshot parent.","commit_id":"cfbadf43908d5f5353ca0c120fe5428050cff310"}],"manila/tests/share/drivers/netapp/dataontap/cluster_mode/test_lib_base.py":[{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"15857299fbbe18fe2ca30a0c64f12ecf6364a2d0","unresolved":false,"context_lines":[{"line_number":924,"context_line":"    def test_handle_busy_snapshot_clone_finishes(self):"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"        side_effect \u003d [fake.CDOT_SNAPSHOT_BUSY_VOLUME_CLONE] * 10"},{"line_number":927,"context_line":"        side_effect.append(fake.CDOT_SNAPSHOT)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"        vserver_client \u003d mock.Mock()"},{"line_number":930,"context_line":"        vserver_client.get_snapshot.side_effect \u003d side_effect"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa041b7_3163acde","line":927,"updated":"2015-04-02 17:17:42.000000000","message":"Please note the effect of this line with respect to my next comment.","commit_id":"cfbadf43908d5f5353ca0c120fe5428050cff310"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"5afb9808eebbde3f5c4462b1d8398f99979123ff","unresolved":false,"context_lines":[{"line_number":927,"context_line":"        side_effect.append(fake.CDOT_SNAPSHOT)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"        vserver_client \u003d mock.Mock()"},{"line_number":930,"context_line":"        vserver_client.get_snapshot.side_effect \u003d side_effect"},{"line_number":931,"context_line":"        self.mock_object(time, \u0027sleep\u0027)"},{"line_number":932,"context_line":""},{"line_number":933,"context_line":"        result \u003d self.library._handle_busy_snapshot(vserver_client,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa041b7_4b17ad51","line":930,"updated":"2015-04-02 10:13:08.000000000","message":"Lines 926 and 930 could be simplified to following:\n\n\"\"\"\n\nvserver_client.get_snapshot.return_value \u003d fake.CDOT_SNAPSHOT_BUSY_VOLUME_CLONE\n\n\"\"\"\n\nresult will be the same.","commit_id":"cfbadf43908d5f5353ca0c120fe5428050cff310"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"15857299fbbe18fe2ca30a0c64f12ecf6364a2d0","unresolved":false,"context_lines":[{"line_number":927,"context_line":"        side_effect.append(fake.CDOT_SNAPSHOT)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"        vserver_client \u003d mock.Mock()"},{"line_number":930,"context_line":"        vserver_client.get_snapshot.side_effect \u003d side_effect"},{"line_number":931,"context_line":"        self.mock_object(time, \u0027sleep\u0027)"},{"line_number":932,"context_line":""},{"line_number":933,"context_line":"        result \u003d self.library._handle_busy_snapshot(vserver_client,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa041b7_6e0dd53d","line":930,"in_reply_to":"baa041b7_4b17ad51","updated":"2015-04-02 17:17:42.000000000","message":"The point of this test is to simulate a snapshot that starts busy and then becomes non-busy during the wait loop.  That\u0027s why the side effect is designed to return busy 10 times and then non-busy once, and the asserts check that we looped the expected number of times.  The suggested change wouldn\u0027t do that.  I renamed the side effect to better highlight what it is for.","commit_id":"cfbadf43908d5f5353ca0c120fe5428050cff310"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"5afb9808eebbde3f5c4462b1d8398f99979123ff","unresolved":false,"context_lines":[{"line_number":928,"context_line":""},{"line_number":929,"context_line":"        vserver_client \u003d mock.Mock()"},{"line_number":930,"context_line":"        vserver_client.get_snapshot.side_effect \u003d side_effect"},{"line_number":931,"context_line":"        self.mock_object(time, \u0027sleep\u0027)"},{"line_number":932,"context_line":""},{"line_number":933,"context_line":"        result \u003d self.library._handle_busy_snapshot(vserver_client,"},{"line_number":934,"context_line":"                                                    fake.SHARE_NAME,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa041b7_b6269cb8","line":931,"updated":"2015-04-02 10:13:08.000000000","message":"Would be really useful to verify integer value that was used for sleep. For the moment you verify amount of calls, but not summary time that is important too.","commit_id":"cfbadf43908d5f5353ca0c120fe5428050cff310"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"15857299fbbe18fe2ca30a0c64f12ecf6364a2d0","unresolved":false,"context_lines":[{"line_number":928,"context_line":""},{"line_number":929,"context_line":"        vserver_client \u003d mock.Mock()"},{"line_number":930,"context_line":"        vserver_client.get_snapshot.side_effect \u003d side_effect"},{"line_number":931,"context_line":"        self.mock_object(time, \u0027sleep\u0027)"},{"line_number":932,"context_line":""},{"line_number":933,"context_line":"        result \u003d self.library._handle_busy_snapshot(vserver_client,"},{"line_number":934,"context_line":"                                                    fake.SHARE_NAME,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa041b7_d4522e13","line":931,"in_reply_to":"baa041b7_b6269cb8","updated":"2015-04-02 17:17:42.000000000","message":"Done","commit_id":"cfbadf43908d5f5353ca0c120fe5428050cff310"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"5afb9808eebbde3f5c4462b1d8398f99979123ff","unresolved":false,"context_lines":[{"line_number":943,"context_line":"        side_effect \u003d [fake.CDOT_SNAPSHOT_BUSY_VOLUME_CLONE] * 30"},{"line_number":944,"context_line":""},{"line_number":945,"context_line":"        vserver_client \u003d mock.Mock()"},{"line_number":946,"context_line":"        vserver_client.get_snapshot.side_effect \u003d side_effect"},{"line_number":947,"context_line":"        self.mock_object(time, \u0027sleep\u0027)"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"        self.assertRaises(exception.ShareSnapshotIsBusy,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa041b7_eb4b2158","line":946,"updated":"2015-04-02 10:13:08.000000000","message":"Same here.","commit_id":"cfbadf43908d5f5353ca0c120fe5428050cff310"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"15857299fbbe18fe2ca30a0c64f12ecf6364a2d0","unresolved":false,"context_lines":[{"line_number":943,"context_line":"        side_effect \u003d [fake.CDOT_SNAPSHOT_BUSY_VOLUME_CLONE] * 30"},{"line_number":944,"context_line":""},{"line_number":945,"context_line":"        vserver_client \u003d mock.Mock()"},{"line_number":946,"context_line":"        vserver_client.get_snapshot.side_effect \u003d side_effect"},{"line_number":947,"context_line":"        self.mock_object(time, \u0027sleep\u0027)"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"        self.assertRaises(exception.ShareSnapshotIsBusy,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa041b7_743b62d2","line":946,"in_reply_to":"baa041b7_eb4b2158","updated":"2015-04-02 17:17:42.000000000","message":"I did combine the two lines here as requested, but I still need the \u0027* 30\u0027 on the list.  The point of this test is to simulate a snapshot that remains busy, so we can verify that the code loops 20 times and then gives up.","commit_id":"cfbadf43908d5f5353ca0c120fe5428050cff310"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"5afb9808eebbde3f5c4462b1d8398f99979123ff","unresolved":false,"context_lines":[{"line_number":944,"context_line":""},{"line_number":945,"context_line":"        vserver_client \u003d mock.Mock()"},{"line_number":946,"context_line":"        vserver_client.get_snapshot.side_effect \u003d side_effect"},{"line_number":947,"context_line":"        self.mock_object(time, \u0027sleep\u0027)"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"        self.assertRaises(exception.ShareSnapshotIsBusy,"},{"line_number":950,"context_line":"                          self.library._handle_busy_snapshot,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa041b7_363bacd3","line":947,"updated":"2015-04-02 10:13:08.000000000","message":"and here about time.","commit_id":"cfbadf43908d5f5353ca0c120fe5428050cff310"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"15857299fbbe18fe2ca30a0c64f12ecf6364a2d0","unresolved":false,"context_lines":[{"line_number":944,"context_line":""},{"line_number":945,"context_line":"        vserver_client \u003d mock.Mock()"},{"line_number":946,"context_line":"        vserver_client.get_snapshot.side_effect \u003d side_effect"},{"line_number":947,"context_line":"        self.mock_object(time, \u0027sleep\u0027)"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"        self.assertRaises(exception.ShareSnapshotIsBusy,"},{"line_number":950,"context_line":"                          self.library._handle_busy_snapshot,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa041b7_74424240","line":947,"in_reply_to":"baa041b7_363bacd3","updated":"2015-04-02 17:17:42.000000000","message":"Done","commit_id":"cfbadf43908d5f5353ca0c120fe5428050cff310"}]}
