)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b5c6fb9d68a29c9e9375eef5d89b66a6865fe16a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"This patch changes o_tmpfile is deteced by actually attempting to"},{"line_number":15,"context_line":"open a file with the O_TMPFILE flag and keeps the information cached"},{"line_number":16,"context_line":"in the object server so that the check only happens once while process"},{"line_number":17,"context_line":"is running."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I3599e2ab257bcd99467aee83b747939afac639d8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9fdfeff1_d0d7b6ed","line":17,"updated":"2019-01-29 14:15:26.000000000","message":"Can we change the commit message (or the code) so they both say the same thing?  I think it\u0027d be great if only had to check once...","commit_id":"a4d4b01aebc0b2bc5d34ebc19b312bf560487688"}],"swift/obj/diskfile.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b5c6fb9d68a29c9e9375eef5d89b66a6865fe16a","unresolved":false,"context_lines":[{"line_number":1268,"context_line":"        \"\"\""},{"line_number":1269,"context_line":"        if self.o_tmpfile_check.get(dev_path) is None:"},{"line_number":1270,"context_line":"            self.o_tmpfile_check[dev_path] \u003d o_tmpfile_in_path_supported("},{"line_number":1271,"context_line":"                dev_path)"},{"line_number":1272,"context_line":"        return self.o_tmpfile_check[dev_path]"},{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"    def get_dev_path(self, device, mount_check\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_d018161f","line":1271,"updated":"2019-01-29 14:15:26.000000000","message":"well, but so - this is one-per-process-**per-disk**\n\nCan you really have linkat support in your kernel and it only work on *some* disks?  Was the old check broken then?","commit_id":"a4d4b01aebc0b2bc5d34ebc19b312bf560487688"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"7729afcca5f4904e5f2ae4bd7875c8d46517aad6","unresolved":false,"context_lines":[{"line_number":1268,"context_line":"        \"\"\""},{"line_number":1269,"context_line":"        if self.o_tmpfile_check.get(dev_path) is None:"},{"line_number":1270,"context_line":"            self.o_tmpfile_check[dev_path] \u003d o_tmpfile_in_path_supported("},{"line_number":1271,"context_line":"                dev_path)"},{"line_number":1272,"context_line":"        return self.o_tmpfile_check[dev_path]"},{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"    def get_dev_path(self, device, mount_check\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_048743b7","line":1271,"in_reply_to":"9fdfeff1_d018161f","updated":"2019-01-29 15:11:50.000000000","message":"My understanding is that O_TMPFILE support is for a specific filesystem[1], so I was thinking about checking each device. I think 99.9% of the cases, people will use the same filesystem for all their swift devices, but was just trying cover the scenario where it doesn\u0027t. Thoughts?\n\n[1] - https://github.com/openstack/swift/blob/master/swift/common/utils.py#L5209","commit_id":"a4d4b01aebc0b2bc5d34ebc19b312bf560487688"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b5c6fb9d68a29c9e9375eef5d89b66a6865fe16a","unresolved":false,"context_lines":[{"line_number":1371,"context_line":"                                 partition, account, container, obj,"},{"line_number":1372,"context_line":"                                 policy\u003dpolicy, use_splice\u003dself.use_splice,"},{"line_number":1373,"context_line":"                                 pipe_size\u003dself.pipe_size,"},{"line_number":1374,"context_line":"                                 use_linkat\u003dself._use_linkat(dev_path),"},{"line_number":1375,"context_line":"                                 **kwargs)"},{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"    def clear_auditor_status(self, policy, auditor_type\u003d\"ALL\"):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_f0eafad5","line":1374,"updated":"2019-01-29 14:15:26.000000000","message":"I *hate* passing around all this state, and I have very methodically and opportunistically over time been removing this plumbing and consolidating things on the manager...\n\nthis is a step backwards","commit_id":"a4d4b01aebc0b2bc5d34ebc19b312bf560487688"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b5c6fb9d68a29c9e9375eef5d89b66a6865fe16a","unresolved":false,"context_lines":[{"line_number":2288,"context_line":"        self._fp \u003d None"},{"line_number":2289,"context_line":"        self._quarantined_dir \u003d None"},{"line_number":2290,"context_line":"        self._content_length \u003d None"},{"line_number":2291,"context_line":"        self.use_linkat \u003d use_linkat"},{"line_number":2292,"context_line":"        if _datadir:"},{"line_number":2293,"context_line":"            self._datadir \u003d _datadir"},{"line_number":2294,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_902fee3d","line":2291,"updated":"2019-01-29 14:15:26.000000000","message":"GAAAAHHH all these classes1!!\n\nI\u0027d rather change the signature to accept device instead of device path and use the manager in the diskfile class...","commit_id":"a4d4b01aebc0b2bc5d34ebc19b312bf560487688"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"41513f061611962cc0d8f041f7ff6d2550aea05a","unresolved":false,"context_lines":[{"line_number":1674,"context_line":"                    msg \u003d \u0027open(%s, O_TMPFILE | O_WRONLY) failed: %s \\"},{"line_number":1675,"context_line":"                           Falling back to using mkstemp()\u0027 \\"},{"line_number":1676,"context_line":"                           % (self._datadir, os.strerror(err.errno))"},{"line_number":1677,"context_line":"                    self.logger.warning(msg)"},{"line_number":1678,"context_line":"                    self.manager.use_linkat \u003d False"},{"line_number":1679,"context_line":"                else:"},{"line_number":1680,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_c5d92357","line":1677,"updated":"2019-01-30 15:16:23.000000000","message":"oh nice, and we only get the warning once on process start up!  sexy.","commit_id":"17e406adffec2939a207f9d2e292d025fd20f1bf"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"08194a6f3b17a0a22137a7e707df0802f56b516a","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"                           Falling back to using mkstemp()\u0027 \\"},{"line_number":1676,"context_line":"                           % (self._datadir, os.strerror(err.errno))"},{"line_number":1677,"context_line":"                    self.logger.warning(msg)"},{"line_number":1678,"context_line":"                    self.manager.use_linkat \u003d False"},{"line_number":1679,"context_line":"                else:"},{"line_number":1680,"context_line":"                    raise"},{"line_number":1681,"context_line":"        if not self.manager.use_linkat:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_23d9f020","line":1678,"range":{"start_line":1678,"start_character":20,"end_line":1678,"end_character":51},"updated":"2019-01-31 16:11:07.000000000","message":"Perhaps, this statement should happen only when \"err.errno\u003d\u003derrno.EOPNOTSUPP\" ?\n\nBecause once this suppress the use_linkat here, that will never turn into True in the future, if the wrong dir removed, maybe?\n\nI need double-check  when the EISDIR and EINVAL case happens, tho.","commit_id":"2bd3c5da5f8124f63744ef7994d43eb1dc0a9ea2"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6963809d8bee56aea855b3d8b14bf318aa98833d","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"                           Falling back to using mkstemp()\u0027 \\"},{"line_number":1676,"context_line":"                           % (self._datadir, os.strerror(err.errno))"},{"line_number":1677,"context_line":"                    self.logger.warning(msg)"},{"line_number":1678,"context_line":"                    self.manager.use_linkat \u003d False"},{"line_number":1679,"context_line":"                else:"},{"line_number":1680,"context_line":"                    raise"},{"line_number":1681,"context_line":"        if not self.manager.use_linkat:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_d2b6ab8a","line":1678,"range":{"start_line":1678,"start_character":20,"end_line":1678,"end_character":51},"in_reply_to":"9fdfeff1_23d9f020","updated":"2019-01-31 17:54:15.000000000","message":"I mean... *maybe* - but those error codes have been like that for always, so if it\u0027s wrong it\u0027s always been wrong :shrug:\n\nI\u0027m not going to research that.  Ain\u0027t broke.","commit_id":"2bd3c5da5f8124f63744ef7994d43eb1dc0a9ea2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"994c33ae30778f9ad6ec3f9d47ee2866e247a226","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"                           Falling back to using mkstemp()\u0027 \\"},{"line_number":1676,"context_line":"                           % (self._datadir, os.strerror(err.errno))"},{"line_number":1677,"context_line":"                    self.logger.warning(msg)"},{"line_number":1678,"context_line":"                    self.manager.use_linkat \u003d False"},{"line_number":1679,"context_line":"                else:"},{"line_number":1680,"context_line":"                    raise"},{"line_number":1681,"context_line":"        if not self.manager.use_linkat:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_55c4e53f","line":1678,"range":{"start_line":1678,"start_character":20,"end_line":1678,"end_character":51},"in_reply_to":"9fdfeff1_d2b6ab8a","updated":"2019-01-31 18:34:33.000000000","message":"http://man7.org/linux/man-pages/man2/open.2.html has this to say regarding O_TMPFILE and errors:\n\n\u003e EINVAL: O_TMPFILE was specified in flags, but neither O_WRONLY nor O_RDWR was specified.\n\n\u003e EISDIR: pathname refers to an existing directory, O_TMPFILE and one of O_WRONLY or O_RDWR were specified in flags, but this kernel version does not provide the O_TMPFILE functionality.\n\n\u003e ENOENT: pathname refers to a nonexistent directory, O_TMPFILE and one of O_WRONLY or O_RDWR were specified in flags, but this kernel version does not provide the O_TMPFILE functionality.\n\n\u003e EOPNOTSUPP: The filesystem containing pathname does not support O_TMPFILE.\n\nSo, EINVAL is a little out of place, but the other three are definitely getting handled appropriately. I\u0027m with Clay; leave it.","commit_id":"2bd3c5da5f8124f63744ef7994d43eb1dc0a9ea2"}],"test/unit/obj/test_diskfile.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"41513f061611962cc0d8f041f7ff6d2550aea05a","unresolved":false,"context_lines":[{"line_number":5167,"context_line":"            self.assertTrue(_m_mkstemp.called)"},{"line_number":5168,"context_line":"            self.assertEqual(tmppath, \"blah\")"},{"line_number":5169,"context_line":"            # Once opening file with O_TMPFILE has failed,"},{"line_number":5170,"context_line":"            # failure is cached to not try again"},{"line_number":5171,"context_line":"            self.assertFalse(df.manager.use_linkat)"},{"line_number":5172,"context_line":"            log \u003d df.manager.logger.get_lines_for_level(\u0027warning\u0027)"},{"line_number":5173,"context_line":"            self.assertGreater(len(log), 0)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_05ebabdb","line":5170,"updated":"2019-01-30 15:16:23.000000000","message":"noice","commit_id":"17e406adffec2939a207f9d2e292d025fd20f1bf"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6963809d8bee56aea855b3d8b14bf318aa98833d","unresolved":false,"context_lines":[{"line_number":3229,"context_line":""},{"line_number":3230,"context_line":"        # avoid getting O_TMPFILE warning in logs"},{"line_number":3231,"context_line":"        if not utils.o_tmpfile_in_tmpdir_supported():"},{"line_number":3232,"context_line":"            df.manager.use_linkat \u003d False"},{"line_number":3233,"context_line":""},{"line_number":3234,"context_line":"        if df.policy.policy_type \u003d\u003d EC_POLICY:"},{"line_number":3235,"context_line":"            data \u003d encode_frag_archive_bodies(df.policy, data)[df._frag_index]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_d26b0bee","line":3232,"updated":"2019-01-31 17:54:15.000000000","message":"Doing this ad-hoc doesn\u0027t seem particularly robust to maintain :\\","commit_id":"2bd3c5da5f8124f63744ef7994d43eb1dc0a9ea2"}]}
