)]}'
{"cinder/tests/test_nfs.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"9bef63b74c798aa7ba5b0844154022552474683f","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def test_get_capacity_info(self):"},{"line_number":260,"context_line":"        \"\"\"_get_capacity_info should calculate correct value.\"\"\""},{"line_number":261,"context_line":"        from collections import namedtuple"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        mox \u003d self._mox"},{"line_number":264,"context_line":"        drv \u003d self._driver"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fpds%3D","line":261,"updated":"2013-05-28 16:35:12.000000000","message":"I would prefer to see this import on the top of this file","commit_id":"a29f2f1afbb2779098bf0ce6aee61c3d6205274b"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"459dc741f0e302eb97f6c823499d9afa2f46329f","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def test_get_capacity_info(self):"},{"line_number":260,"context_line":"        \"\"\"_get_capacity_info should calculate correct value.\"\"\""},{"line_number":261,"context_line":"        from collections import namedtuple"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        mox \u003d self._mox"},{"line_number":264,"context_line":"        drv \u003d self._driver"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FpSQ%3D","line":261,"in_reply_to":"AAAAPH%2F%2Fpds%3D","updated":"2013-05-28 17:57:58.000000000","message":"Agreed, should be at top of file.","commit_id":"a29f2f1afbb2779098bf0ce6aee61c3d6205274b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"8a99da94c7bb1e7c9b1a10fcf0dd901182e17bb5","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    TEST_LOCAL_PATH \u003d \u0027/mnt/nfs/volume-123\u0027"},{"line_number":116,"context_line":"    TEST_FILE_NAME \u003d \u0027test.txt\u0027"},{"line_number":117,"context_line":"    TEST_SHARES_CONFIG_FILE \u003d \u0027/etc/cinder/test-shares.conf\u0027"},{"line_number":118,"context_line":"    TEST_NFS_EXPORT_FREAKY \u003d \u0027nfs-host3:/export this\u0027"},{"line_number":119,"context_line":"    TEST_MNT_POINT_FREAKY \u003d \u0027/ 0 0 0 /foo\u0027"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FoLo%3D","line":118,"updated":"2013-05-28 23:43:40.000000000","message":"I think it would be better to call this TEST_NFS_EXPORT_SPACES and TEST_MNT_POINT_SPACES to make it clearer what the point of the test case is?","commit_id":"f83be31bc7a202f59755b1aaeac9d75d90a491fe"},{"author":{"_account_id":7706,"name":"Anton Frolov","email":"frolov.anton@gmail.com","username":"anton"},"change_message_id":"11a0d8db0edf951762489dd38d21d0beb9b18ae7","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    TEST_LOCAL_PATH \u003d \u0027/mnt/nfs/volume-123\u0027"},{"line_number":116,"context_line":"    TEST_FILE_NAME \u003d \u0027test.txt\u0027"},{"line_number":117,"context_line":"    TEST_SHARES_CONFIG_FILE \u003d \u0027/etc/cinder/test-shares.conf\u0027"},{"line_number":118,"context_line":"    TEST_NFS_EXPORT_FREAKY \u003d \u0027nfs-host3:/export this\u0027"},{"line_number":119,"context_line":"    TEST_MNT_POINT_FREAKY \u003d \u0027/ 0 0 0 /foo\u0027"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FngE%3D","line":118,"in_reply_to":"AAAAPH%2F%2FoLo%3D","updated":"2013-05-29 08:16:52.000000000","message":"Done","commit_id":"f83be31bc7a202f59755b1aaeac9d75d90a491fe"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"387785b62fc56f8c3dbfb26afc15a8f053e8c1ea","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        df_avail \u003d 2129984"},{"line_number":268,"context_line":"        df_head \u003d \u0027Filesystem 1K-blocks Used Available Use% Mounted on\\n\u0027"},{"line_number":269,"context_line":"        df_data \u003d \u0027%s %d 996864 %d 41%% %s\u0027 % ("},{"line_number":270,"context_line":"            self.TEST_NFS_EXPORT_SPACES, df_total_size, df_avail,"},{"line_number":271,"context_line":"            self.TEST_MNT_POINT_SPACES)"},{"line_number":272,"context_line":"        df_output \u003d df_head + df_data"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FmbA%3D","line":270,"updated":"2013-05-29 15:48:03.000000000","message":"Really should test the old case as well, not just the case with spaces...","commit_id":"8e723de2fba049d4eabcb050686b1d023a242e52"},{"author":{"_account_id":7706,"name":"Anton Frolov","email":"frolov.anton@gmail.com","username":"anton"},"change_message_id":"3e6d450cbadc02fe4f4cc50d84ce594f6243b895","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        df_avail \u003d 2129984"},{"line_number":268,"context_line":"        df_head \u003d \u0027Filesystem 1K-blocks Used Available Use% Mounted on\\n\u0027"},{"line_number":269,"context_line":"        df_data \u003d \u0027%s %d 996864 %d 41%% %s\u0027 % ("},{"line_number":270,"context_line":"            self.TEST_NFS_EXPORT_SPACES, df_total_size, df_avail,"},{"line_number":271,"context_line":"            self.TEST_MNT_POINT_SPACES)"},{"line_number":272,"context_line":"        df_output \u003d df_head + df_data"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FmN4%3D","line":270,"in_reply_to":"AAAAPH%2F%2FmbA%3D","updated":"2013-05-29 16:43:01.000000000","message":"Done","commit_id":"8e723de2fba049d4eabcb050686b1d023a242e52"}],"cinder/volume/drivers/nfs.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"459dc741f0e302eb97f6c823499d9afa2f46329f","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        \"\"\""},{"line_number":385,"context_line":"        mount_point \u003d self._get_mount_point_for_share(nfs_share)"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        st \u003d os.statvfs(mount_point)"},{"line_number":388,"context_line":"        total_available \u003d float(st.f_bavail * st.f_frsize)"},{"line_number":389,"context_line":"        total_size \u003d float(st.f_blocks * st.f_frsize)"},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FpS8%3D","line":387,"updated":"2013-05-28 17:57:58.000000000","message":"I\u0027m not convinced this will always work.  Previously the df command was run as root, here it isn\u0027t.","commit_id":"a29f2f1afbb2779098bf0ce6aee61c3d6205274b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"6b57214fb828b1dbb78cdfe000c3d0a9825b9317","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        \"\"\""},{"line_number":385,"context_line":"        mount_point \u003d self._get_mount_point_for_share(nfs_share)"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        st \u003d os.statvfs(mount_point)"},{"line_number":388,"context_line":"        total_available \u003d float(st.f_bavail * st.f_frsize)"},{"line_number":389,"context_line":"        total_size \u003d float(st.f_blocks * st.f_frsize)"},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FpAg%3D","line":387,"in_reply_to":"AAAAPH%2F%2FpS8%3D","updated":"2013-05-28 18:54:27.000000000","message":"It looks like statvfs is now deprecated and will be removed in Python3.  Unfortunately note finding a recommended replacement.","commit_id":"a29f2f1afbb2779098bf0ce6aee61c3d6205274b"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"6114c274ebbc1393833d68f5616c5463f7f1c9a6","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        # Need to remove mount point path from df output to parse it reliably"},{"line_number":392,"context_line":"        # since it is possible to set it to something like \u0027/ 1 0 0 0% /b\u0027."},{"line_number":393,"context_line":"        df \u003d df.splitlines()[1].replace(mount_point, \u0027\u0027)"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        total_available \u003d float(df.rsplit(None, 4)[3])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fmbc%3D","line":392,"updated":"2013-05-29 15:46:58.000000000","message":"Would using \"stat --filesystem --format ...\" be better than trying to parse df?","commit_id":"8e723de2fba049d4eabcb050686b1d023a242e52"},{"author":{"_account_id":7706,"name":"Anton Frolov","email":"frolov.anton@gmail.com","username":"anton"},"change_message_id":"3e6d450cbadc02fe4f4cc50d84ce594f6243b895","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        # Need to remove mount point path from df output to parse it reliably"},{"line_number":392,"context_line":"        # since it is possible to set it to something like \u0027/ 1 0 0 0% /b\u0027."},{"line_number":393,"context_line":"        df \u003d df.splitlines()[1].replace(mount_point, \u0027\u0027)"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        total_available \u003d float(df.rsplit(None, 4)[3])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FmOI%3D","line":392,"in_reply_to":"AAAAPH%2F%2Fmbc%3D","updated":"2013-05-29 16:43:01.000000000","message":"Thanks for the tip. Done.","commit_id":"8e723de2fba049d4eabcb050686b1d023a242e52"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2dfc51a0d670816ebc5be36adb88dfbac03193af","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        # Need to remove mount point path from df output to parse it reliably"},{"line_number":392,"context_line":"        # since it is possible to set it to something like \u0027/ 1 0 0 0% /b\u0027."},{"line_number":393,"context_line":"        df \u003d df.splitlines()[1].replace(mount_point, \u0027\u0027)"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        total_available \u003d float(df.rsplit(None, 4)[3])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FmaU%3D","line":392,"in_reply_to":"AAAAPH%2F%2Fmbc%3D","updated":"2013-05-29 15:51:37.000000000","message":"This seems like a brilliant idea to me, I\u0027d much prefer going that route.\n\nShould fix most of the parsing trickiness and still allow us to do it as root.","commit_id":"8e723de2fba049d4eabcb050686b1d023a242e52"}]}
