)]}'
{"tempest/config.py":[{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"b92871ad37c33acb4cc916bd0fc94804a32090fd","unresolved":false,"context_lines":[{"line_number":917,"context_line":"               help\u003d\"Timeout for unprovisioning an Ironic node.\"),"},{"line_number":918,"context_line":"    cfg.IntOpt(\u0027resources_timeout\u0027,"},{"line_number":919,"context_line":"               default\u003d60,"},{"line_number":920,"context_line":"               help\u003d\"Timeout for waiting for hypervisor resources.\"),"},{"line_number":921,"context_line":"    cfg.IntOpt(\u0027resources_sleep\u0027,"},{"line_number":922,"context_line":"               default\u003d5,"},{"line_number":923,"context_line":"               help\u003d\"Sleep period between checks for hypervisor resources.\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_c8d3e25d","line":920,"updated":"2014-06-16 18:46:56.000000000","message":"Maybe s/hypervisor/baremetal?","commit_id":"c725f8fc11abf10b5c55e56ae1a060d03f86bb69"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"6133a89c2ad474ad8ba39132b7fd83293912030e","unresolved":false,"context_lines":[{"line_number":917,"context_line":"               help\u003d\"Timeout for unprovisioning an Ironic node.\"),"},{"line_number":918,"context_line":"    cfg.IntOpt(\u0027resources_timeout\u0027,"},{"line_number":919,"context_line":"               default\u003d60,"},{"line_number":920,"context_line":"               help\u003d\"Timeout for waiting for hypervisor resources.\"),"},{"line_number":921,"context_line":"    cfg.IntOpt(\u0027resources_sleep\u0027,"},{"line_number":922,"context_line":"               default\u003d5,"},{"line_number":923,"context_line":"               help\u003d\"Sleep period between checks for hypervisor resources.\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_3e91dc9a","line":920,"in_reply_to":"1ae5cdf2_c8d3e25d","updated":"2014-06-16 20:02:08.000000000","message":"Done","commit_id":"c725f8fc11abf10b5c55e56ae1a060d03f86bb69"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"b92871ad37c33acb4cc916bd0fc94804a32090fd","unresolved":false,"context_lines":[{"line_number":920,"context_line":"               help\u003d\"Timeout for waiting for hypervisor resources.\"),"},{"line_number":921,"context_line":"    cfg.IntOpt(\u0027resources_sleep\u0027,"},{"line_number":922,"context_line":"               default\u003d5,"},{"line_number":923,"context_line":"               help\u003d\"Sleep period between checks for hypervisor resources.\")"},{"line_number":924,"context_line":"]"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"cli_group \u003d cfg.OptGroup(name\u003d\u0027cli\u0027, title\u003d\"cli Configuration Options\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_28c28686","line":923,"updated":"2014-06-16 18:46:56.000000000","message":"ditto.","commit_id":"c725f8fc11abf10b5c55e56ae1a060d03f86bb69"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"6133a89c2ad474ad8ba39132b7fd83293912030e","unresolved":false,"context_lines":[{"line_number":920,"context_line":"               help\u003d\"Timeout for waiting for hypervisor resources.\"),"},{"line_number":921,"context_line":"    cfg.IntOpt(\u0027resources_sleep\u0027,"},{"line_number":922,"context_line":"               default\u003d5,"},{"line_number":923,"context_line":"               help\u003d\"Sleep period between checks for hypervisor resources.\")"},{"line_number":924,"context_line":"]"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"cli_group \u003d cfg.OptGroup(name\u003d\u0027cli\u0027, title\u003d\"cli Configuration Options\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_7e8b6468","line":923,"in_reply_to":"1ae5cdf2_28c28686","updated":"2014-06-16 20:02:08.000000000","message":"Done","commit_id":"c725f8fc11abf10b5c55e56ae1a060d03f86bb69"}],"tempest/scenario/manager.py":[{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"b92871ad37c33acb4cc916bd0fc94804a32090fd","unresolved":false,"context_lines":[{"line_number":571,"context_line":"            LOG.debug(\"Resources unavailable. Needed: %d VCPUs, %d MB. \""},{"line_number":572,"context_line":"                      \"Found %d VCPUs, %d MB\""},{"line_number":573,"context_line":"                      % (flavor.vcpus, flavor.ram,"},{"line_number":574,"context_line":"                         stats.vcpus, stats.free_ram_mb))"},{"line_number":575,"context_line":"            return False"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"        if not tempest.test.call_until_true(_check_resources,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_08722aad","line":574,"updated":"2014-06-16 18:46:56.000000000","message":"We can probably not log here and instead use a more descriptive exception message in the case that it times out?","commit_id":"c725f8fc11abf10b5c55e56ae1a060d03f86bb69"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"6133a89c2ad474ad8ba39132b7fd83293912030e","unresolved":false,"context_lines":[{"line_number":571,"context_line":"            LOG.debug(\"Resources unavailable. Needed: %d VCPUs, %d MB. \""},{"line_number":572,"context_line":"                      \"Found %d VCPUs, %d MB\""},{"line_number":573,"context_line":"                      % (flavor.vcpus, flavor.ram,"},{"line_number":574,"context_line":"                         stats.vcpus, stats.free_ram_mb))"},{"line_number":575,"context_line":"            return False"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"        if not tempest.test.call_until_true(_check_resources,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_7e50c4d4","line":574,"in_reply_to":"1ae5cdf2_08722aad","updated":"2014-06-16 20:02:08.000000000","message":"Actually, I wanted to see the resources change *as* we were waiting. This helped me see that vcpus and free_ram_mb are not always updated together. I actually think this can be removed now, anyway.","commit_id":"c725f8fc11abf10b5c55e56ae1a060d03f86bb69"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"66c1f313dc531a6e2418367eae24d06ea62de87c","unresolved":false,"context_lines":[{"line_number":642,"context_line":"        create_kwargs \u003d {"},{"line_number":643,"context_line":"            \u0027key_name\u0027: self.keypair.id"},{"line_number":644,"context_line":"        }"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        self.instance \u003d self.create_server("},{"line_number":647,"context_line":"            wait_on_boot\u003dFalse, create_kwargs\u003dcreate_kwargs)"},{"line_number":648,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_7c702673","line":645,"updated":"2014-08-12 00:14:55.000000000","message":"Un-related whitespace change...","commit_id":"7f921b453b26c0616fe7f38a625da8ccc456c175"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"09dea6e65fc07e5e7f8241f5918e1011326648f4","unresolved":false,"context_lines":[{"line_number":642,"context_line":"        create_kwargs \u003d {"},{"line_number":643,"context_line":"            \u0027key_name\u0027: self.keypair.id"},{"line_number":644,"context_line":"        }"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        self.instance \u003d self.create_server("},{"line_number":647,"context_line":"            wait_on_boot\u003dFalse, create_kwargs\u003dcreate_kwargs)"},{"line_number":648,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_3bde8a10","line":645,"in_reply_to":"baada198_7c702673","updated":"2014-08-12 15:39:16.000000000","message":"Done","commit_id":"7f921b453b26c0616fe7f38a625da8ccc456c175"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"e42c0a397b7624118e1b359b300174255b83175b","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    def rebuild_server(self, server, client\u003dNone, image\u003dNone,"},{"line_number":359,"context_line":"                       preserve_ephemeral\u003dFalse, wait\u003dTrue,"},{"line_number":360,"context_line":"                       rebuild_kwargs\u003d{}):"},{"line_number":361,"context_line":"        if client is None:"},{"line_number":362,"context_line":"            client \u003d self.compute_client"},{"line_number":363,"context_line":"        if image is None:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7ac7a964_f5c4c441","line":360,"updated":"2014-08-15 15:12:29.000000000","message":"parameter default should not be mutable","commit_id":"8598db373c129b8d75dc804d45a2cbb4ad2ebaf6"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"b5421b72c5d33d27f5f867f433cc54334dbbe15b","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    def rebuild_server(self, server, client\u003dNone, image\u003dNone,"},{"line_number":359,"context_line":"                       preserve_ephemeral\u003dFalse, wait\u003dTrue,"},{"line_number":360,"context_line":"                       rebuild_kwargs\u003d{}):"},{"line_number":361,"context_line":"        if client is None:"},{"line_number":362,"context_line":"            client \u003d self.compute_client"},{"line_number":363,"context_line":"        if image is None:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7ac7a964_fbe2f52d","line":360,"in_reply_to":"7ac7a964_f5c4c441","updated":"2014-08-15 15:43:06.000000000","message":"Done","commit_id":"8598db373c129b8d75dc804d45a2cbb4ad2ebaf6"}],"tempest/scenario/test_baremetal_advanced_ops.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"6b53b54aaaec0629ccde64290c85a29f709302df","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class BaremetalAdvancedOpsPXESSH(manager.BaremetalScenarioTest):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def _rebuild_instance(self, preserve_ephemeral\u003dFalse):"},{"line_number":29,"context_line":"        self.rebuild_server(self.instance,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_88ab3674","line":26,"updated":"2014-06-03 18:18:13.000000000","message":"Is this really dependent on the PXESSH driver in any way?\n\nIf not, perhaps we can use a more descriptive name :)","commit_id":"11fc6de4e1b9dea608a7af54bc2623d4666aa614"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"a91ea317740250cabd75f701b82ac5675a8e1287","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class BaremetalAdvancedOpsPXESSH(manager.BaremetalScenarioTest):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def _rebuild_instance(self, preserve_ephemeral\u003dFalse):"},{"line_number":29,"context_line":"        self.rebuild_server(self.instance,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_fde31aa2","line":26,"in_reply_to":"1ae5cdf2_88ab3674","updated":"2014-06-06 19:28:43.000000000","message":"Done.\n\nI had copied the name from the basic test class, but I have changed that class name as well in this review.","commit_id":"11fc6de4e1b9dea608a7af54bc2623d4666aa614"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"6b53b54aaaec0629ccde64290c85a29f709302df","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @test.services(\u0027baremetal\u0027, \u0027compute\u0027, \u0027image\u0027, \u0027network\u0027)"},{"line_number":63,"context_line":"    def test_server_rebuild_preserve_ephemeral(self):"},{"line_number":64,"context_line":"        # DiB images will mount the ephemeral partition on /mnt"},{"line_number":65,"context_line":"        test_filename \u003d \u0027/mnt/rebuild_test.txt\u0027"},{"line_number":66,"context_line":"        self.add_keypair()"},{"line_number":67,"context_line":"        self.boot_instance()"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_88d97624","line":64,"updated":"2014-06-03 18:18:13.000000000","message":"This is a precondition (not just an assumption) of the test, so it might be worth adding a check to ensure that /mnt really is what we think it should be, eg. a mounted volume of the same size as flavor:ephemeral_gb, not just a local directory.","commit_id":"11fc6de4e1b9dea608a7af54bc2623d4666aa614"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"a91ea317740250cabd75f701b82ac5675a8e1287","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @test.services(\u0027baremetal\u0027, \u0027compute\u0027, \u0027image\u0027, \u0027network\u0027)"},{"line_number":63,"context_line":"    def test_server_rebuild_preserve_ephemeral(self):"},{"line_number":64,"context_line":"        # DiB images will mount the ephemeral partition on /mnt"},{"line_number":65,"context_line":"        test_filename \u003d \u0027/mnt/rebuild_test.txt\u0027"},{"line_number":66,"context_line":"        self.add_keypair()"},{"line_number":67,"context_line":"        self.boot_instance()"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_1de1a69a","line":64,"in_reply_to":"1ae5cdf2_88d97624","updated":"2014-06-06 19:28:43.000000000","message":"Done","commit_id":"11fc6de4e1b9dea608a7af54bc2623d4666aa614"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"b92871ad37c33acb4cc916bd0fc94804a32090fd","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        # some time to complete it. Otherwise, if we issue a rebuild too"},{"line_number":58,"context_line":"        # quickly, the file may not exist."},{"line_number":59,"context_line":"        dest.exec_command(\u0027sync\u0027)"},{"line_number":60,"context_line":"        time.sleep(5)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _verify_remote_file_exists(self, filename, ip\u003dNone):"},{"line_number":63,"context_line":"        \"\"\"Throw an exception if the file does not exist.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_48919299","line":60,"updated":"2014-06-16 18:46:56.000000000","message":"Does exec_command() block until command returns?  If so, is this sleep required? \u0027sync\u0027 should be, well.. synchronous. :)","commit_id":"c725f8fc11abf10b5c55e56ae1a060d03f86bb69"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"6133a89c2ad474ad8ba39132b7fd83293912030e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        # some time to complete it. Otherwise, if we issue a rebuild too"},{"line_number":58,"context_line":"        # quickly, the file may not exist."},{"line_number":59,"context_line":"        dest.exec_command(\u0027sync\u0027)"},{"line_number":60,"context_line":"        time.sleep(5)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _verify_remote_file_exists(self, filename, ip\u003dNone):"},{"line_number":63,"context_line":"        \"\"\"Throw an exception if the file does not exist.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_3ef47cce","line":60,"in_reply_to":"1ae5cdf2_48919299","updated":"2014-06-16 20:02:08.000000000","message":"It *does* block, but in my testing, it did not always guarantee the file was created. I added the sleep after it and that alleviated (or maybe hid?) the issue. If \u0027sync\u0027 is supposed to guarantee the fs buffers are flushed, then this may be an issue at a higher layer rather than in the Cirros test instance itself. Totally open to suggestions here.","commit_id":"c725f8fc11abf10b5c55e56ae1a060d03f86bb69"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"d6870b7b81189a29d48a98d5a469c516c1c8a403","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        if ip:"},{"line_number":51,"context_line":"            dest \u003d self.get_remote_client(ip)"},{"line_number":52,"context_line":"        else:"},{"line_number":53,"context_line":"            dest \u003d self.get_remote_client(self.instance)"},{"line_number":54,"context_line":"        dest.exec_command(\u0027sudo touch \u0027 + filename)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Make sure the filesystem buffers are flushed and give the kernel"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_2e251c5c","line":53,"updated":"2014-06-17 07:38:34.000000000","message":"line 50~53 is also used in other two methods. It would be better to create a helper function and use an instance variable to save remote client. In this way, you don\u0027t need get a new remote client everytime.","commit_id":"51cfefac83b66953a3a7dc99dba172ee7de1859f"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"f6eaea25acf81e78f40cbb900c768891ac7f52aa","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        if ip:"},{"line_number":51,"context_line":"            dest \u003d self.get_remote_client(ip)"},{"line_number":52,"context_line":"        else:"},{"line_number":53,"context_line":"            dest \u003d self.get_remote_client(self.instance)"},{"line_number":54,"context_line":"        dest.exec_command(\u0027sudo touch \u0027 + filename)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # Make sure the filesystem buffers are flushed and give the kernel"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_4b123163","line":53,"in_reply_to":"1ae5cdf2_2e251c5c","updated":"2014-06-17 21:14:58.000000000","message":"Done. Since the test never uses the IP, it was simpler to just use the one call using the instance object.","commit_id":"51cfefac83b66953a3a7dc99dba172ee7de1859f"}],"tempest/scenario/test_baremetal_basic_ops.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"9d85ebc97cee9ed59e357f52a8e679a49cc3a20d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        self.assertEqual(actual_mount, mount)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # Validate the partition size matches what we expect"},{"line_number":93,"context_line":"        numbers \u003d \u00270123456789\u0027"},{"line_number":94,"context_line":"        devnum \u003d device.replace(\u0027/dev/\u0027, \u0027\u0027)"},{"line_number":95,"context_line":"        cmd \u003d \"cat /sys/block/%s/%s/size\" % (devnum.rstrip(numbers), devnum)"},{"line_number":96,"context_line":"        num_bytes \u003d client.exec_command(cmd).rstrip(\u0027\\n\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_697cceeb","line":93,"updated":"2014-07-28 15:52:15.000000000","message":"Maybe I\u0027m missing something, but where this is coming from? Are all ephemeral disks device names 0123456789?","commit_id":"4db426e1b2b364e7f845cf395ec5a02fae711c6a"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"102100e518ed3a20a83ce82fda85e7a657f674d9","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        self.assertEqual(actual_mount, mount)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # Validate the partition size matches what we expect"},{"line_number":93,"context_line":"        numbers \u003d \u00270123456789\u0027"},{"line_number":94,"context_line":"        devnum \u003d device.replace(\u0027/dev/\u0027, \u0027\u0027)"},{"line_number":95,"context_line":"        cmd \u003d \"cat /sys/block/%s/%s/size\" % (devnum.rstrip(numbers), devnum)"},{"line_number":96,"context_line":"        num_bytes \u003d client.exec_command(cmd).rstrip(\u0027\\n\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_6cd69c28","line":93,"in_reply_to":"baada198_697cceeb","updated":"2014-07-28 16:02:11.000000000","message":"No. I use it in the code below to strip the numbers off of the device name (ex: get the \u0027vda\u0027 portion of \u0027vda0\u0027, or similar). I can get rid of this and just use the string instead of the variable, if you prefer.","commit_id":"4db426e1b2b364e7f845cf395ec5a02fae711c6a"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"9d85ebc97cee9ed59e357f52a8e679a49cc3a20d","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        # Create the test file and make sure it exists"},{"line_number":140,"context_line":"        self.touch_remote_file(vm_client, test_filename)"},{"line_number":141,"context_line":"        vm_client.exec_command(\u0027ls \u0027 + test_filename)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        # Rebuild and preserve the ephemeral partition"},{"line_number":144,"context_line":"        self.rebuild_instance(True)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_c9da3ae8","line":141,"updated":"2014-07-28 15:52:15.000000000","message":"Do you really need the second step? Shouldn\u0027t the touch cmd above fail if it\u0027s not created? Not a deal breaker to keep it though.","commit_id":"4db426e1b2b364e7f845cf395ec5a02fae711c6a"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"102100e518ed3a20a83ce82fda85e7a657f674d9","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        # Create the test file and make sure it exists"},{"line_number":140,"context_line":"        self.touch_remote_file(vm_client, test_filename)"},{"line_number":141,"context_line":"        vm_client.exec_command(\u0027ls \u0027 + test_filename)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        # Rebuild and preserve the ephemeral partition"},{"line_number":144,"context_line":"        self.rebuild_instance(True)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_4cdd5813","line":141,"in_reply_to":"baada198_c9da3ae8","updated":"2014-07-28 16:02:11.000000000","message":"That\u0027s a valid point. I guess I was being overly cautious since I was having issues making sure the file was indeed created and persisted before the rebuild was issued. I can remove this.","commit_id":"4db426e1b2b364e7f845cf395ec5a02fae711c6a"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"66c1f313dc531a6e2418367eae24d06ea62de87c","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        # some time to complete it. Otherwise, if we issue a rebuild too"},{"line_number":72,"context_line":"        # quickly, the file may not exist."},{"line_number":73,"context_line":"        client.exec_command(\u0027sync\u0027)"},{"line_number":74,"context_line":"        time.sleep(5)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def verify_partition(self, client, label, mount, gib_size, ip\u003dNone):"},{"line_number":77,"context_line":"        \"\"\"Verify a labeled partition\u0027s mount point and size.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_5cae0281","line":74,"updated":"2014-08-12 00:14:55.000000000","message":"Why 5? This seems arbitrary to me, I get that an FS sync will take some time, it\u0027s just everytime I see a hardcoded wait I get concerned. Because in the gate that will most likely cause some non-deterministic behavior eventually.\n\nI\u0027d hate todo this, but if it\u0027s between an arbitrary sleep and ensuring that the file was created with an additional ssh call (like it was before which I think I gave a -1 for) I think the additional ssh may be the lesser of 2 evils, because it feels more explicit. That being said we probably should have a note/comment on why we do that.","commit_id":"7f921b453b26c0616fe7f38a625da8ccc456c175"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"4cd5bd1904b8d2950bcb625a4f047817498aeaee","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        # some time to complete it. Otherwise, if we issue a rebuild too"},{"line_number":72,"context_line":"        # quickly, the file may not exist."},{"line_number":73,"context_line":"        client.exec_command(\u0027sync\u0027)"},{"line_number":74,"context_line":"        time.sleep(5)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def verify_partition(self, client, label, mount, gib_size, ip\u003dNone):"},{"line_number":77,"context_line":"        \"\"\"Verify a labeled partition\u0027s mount point and size.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_3b968aef","line":74,"in_reply_to":"baada198_3b7a0af0","updated":"2014-08-12 15:41:56.000000000","message":"Oops, meant that I *am* removing it!","commit_id":"7f921b453b26c0616fe7f38a625da8ccc456c175"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"09dea6e65fc07e5e7f8241f5918e1011326648f4","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        # some time to complete it. Otherwise, if we issue a rebuild too"},{"line_number":72,"context_line":"        # quickly, the file may not exist."},{"line_number":73,"context_line":"        client.exec_command(\u0027sync\u0027)"},{"line_number":74,"context_line":"        time.sleep(5)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def verify_partition(self, client, label, mount, gib_size, ip\u003dNone):"},{"line_number":77,"context_line":"        \"\"\"Verify a labeled partition\u0027s mount point and size.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_3b7a0af0","line":74,"in_reply_to":"baada198_5cae0281","updated":"2014-08-12 15:39:16.000000000","message":"As discussed on IRC, the test would randomly fail (under precise) unless this was added. The sync call *should* have been enough, but it wasn\u0027t.\n\nHowever, after repeating this test on trusty with the latest versions of nova/libs etc, I cannot reproduce the random fail w/o the sleep(). Therefore, I am not removing it.","commit_id":"7f921b453b26c0616fe7f38a625da8ccc456c175"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"e42c0a397b7624118e1b359b300174255b83175b","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        ephemeral \u003d self.compute_client.flavors.get(f_id).ephemeral"},{"line_number":104,"context_line":"        if ephemeral !\u003d \u0027N/A\u0027:"},{"line_number":105,"context_line":"            return int(ephemeral)"},{"line_number":106,"context_line":"        return None"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def add_floating_ip(self):"},{"line_number":109,"context_line":"        floating_ip \u003d self.compute_client.floating_ips.create()"}],"source_content_type":"text/x-python","patch_set":17,"id":"7ac7a964_95af1094","line":106,"updated":"2014-08-15 15:12:29.000000000","message":"The fact that \u0027N/A\u0027 does not raise an exception here indicates it is an expected possibility. But it looks like the value of this call is passed into verify_partition which will fail if gib_size is None.","commit_id":"8598db373c129b8d75dc804d45a2cbb4ad2ebaf6"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"b5421b72c5d33d27f5f867f433cc54334dbbe15b","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        ephemeral \u003d self.compute_client.flavors.get(f_id).ephemeral"},{"line_number":104,"context_line":"        if ephemeral !\u003d \u0027N/A\u0027:"},{"line_number":105,"context_line":"            return int(ephemeral)"},{"line_number":106,"context_line":"        return None"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def add_floating_ip(self):"},{"line_number":109,"context_line":"        floating_ip \u003d self.compute_client.floating_ips.create()"}],"source_content_type":"text/x-python","patch_set":17,"id":"7ac7a964_7bcee5b5","line":106,"in_reply_to":"7ac7a964_95af1094","updated":"2014-08-15 15:43:06.000000000","message":"Done","commit_id":"8598db373c129b8d75dc804d45a2cbb4ad2ebaf6"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"23641fa17ab520a0e31ca59dc1b6ba7cdebf4d97","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        # We expect the ephemeral partition to be mounted on /mnt and to have"},{"line_number":133,"context_line":"        # the same size as our flavor definition."},{"line_number":134,"context_line":"        eph_size \u003d self.get_flavor_ephemeral_size()"},{"line_number":135,"context_line":"        self.verify_partition(vm_client, \u0027ephemeral0\u0027, \u0027/mnt\u0027, eph_size)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        # Create the test file"},{"line_number":138,"context_line":"        self.create_remote_file(vm_client, test_filename)"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_b81619f2","line":135,"updated":"2014-08-12 18:05:19.000000000","message":"I\u0027m assuming this label is always the same.","commit_id":"8598db373c129b8d75dc804d45a2cbb4ad2ebaf6"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"faf09177df11b219392a598ff17797176f953231","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        # We expect the ephemeral partition to be mounted on /mnt and to have"},{"line_number":133,"context_line":"        # the same size as our flavor definition."},{"line_number":134,"context_line":"        eph_size \u003d self.get_flavor_ephemeral_size()"},{"line_number":135,"context_line":"        self.verify_partition(vm_client, \u0027ephemeral0\u0027, \u0027/mnt\u0027, eph_size)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        # Create the test file"},{"line_number":138,"context_line":"        self.create_remote_file(vm_client, test_filename)"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_f84ed18f","line":135,"in_reply_to":"baada198_b81619f2","updated":"2014-08-12 18:12:30.000000000","message":"Yes, it is.","commit_id":"8598db373c129b8d75dc804d45a2cbb4ad2ebaf6"}]}
