Title: Potential for data corruption as writes are not followed by fsync? · Issue #4123 · libgit2/libgit2 · GitHub
Open Graph Title: Potential for data corruption as writes are not followed by fsync? · Issue #4123 · libgit2/libgit2
X Title: Potential for data corruption as writes are not followed by fsync? · Issue #4123 · libgit2/libgit2
Description: I am interested in the durability of libgit2 and found the following note: do_fsync whether to do an fsync() after writing (currently ignored) libgit2/include/git2/odb_backend.h Line 42 in 89c332e * @param do_fsync whether to do an fsync...
Open Graph Description: I am interested in the durability of libgit2 and found the following note: do_fsync whether to do an fsync() after writing (currently ignored) libgit2/include/git2/odb_backend.h Line 42 in 89c332e ...
X Description: I am interested in the durability of libgit2 and found the following note: do_fsync whether to do an fsync() after writing (currently ignored) libgit2/include/git2/odb_backend.h Line 42 in 89c332e ...
Opengraph URL: https://github.com/libgit2/libgit2/issues/4123
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Potential for data corruption as writes are not followed by fsync?","articleBody":"I am interested in the durability of `libgit2` and found the following note:\r\n\r\n do_fsync whether to do an fsync() after writing (currently ignored)\r\n\r\nhttps://github.com/libgit2/libgit2/blob/89c332e41b12a72d89de40d63bc568c56a2c336a/include/git2/odb_backend.h#L42\r\n\r\n### Reproduction steps\r\n\r\nWrite an object to the odb, update a ref, and suffer a power failure.\r\n\r\n### Expected behavior\r\n\r\nThe ref should point to a valid set of objects.\r\n\r\n### Actual behavior\r\n\r\nThe ref points to missing or partially written objects.\r\n\r\n### Version of libgit2 (release number or SHA1)\r\n\r\nCurrent.\r\n\r\nIt seems like fsync should be the default for reliable and durable behaviour. But, perhaps I'm wrong.\r\n\r\nIt's not enough to call close, you should call fsync before calling close.\r\n\r\n\u003e A successful close does not guarantee that the data has been successfully saved to disk, as the kernel defers writes. It is not common for a file system to flush the buffers when the stream is closed. If you need to be sure that the data is physically stored use fsync(2).\r\n\r\nI may be wrong, but it would be good to understand whether the git repository could be in an inconsistent state after a power loss and if this is by design or not.","author":{"url":"https://github.com/ioquatix","@type":"Person","name":"ioquatix"},"datePublished":"2017-02-13T14:03:53.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":20},"url":"https://github.com/4123/libgit2/issues/4123"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:b9ad2792-9f99-6279-da4d-e2f5fd17d5e5 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 979A:1B9505:5F0C444:7CB1841:6A5DBBF7 |
| html-safe-nonce | 0fde5c7ded5ae61018e0d731045b1afffb1e942957df688350d91c02bc087bdd |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5NzlBOjFCOTUwNTo1RjBDNDQ0OjdDQjE4NDE6NkE1REJCRjciLCJ2aXNpdG9yX2lkIjoiNzAxOTEwMTEyMzMyNTU3NDEzNSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 5896b4364d1e9524291b5c3cd069c6ad43434146470f5ec7edcd5b809f32d5f1 |
| hovercard-subject-tag | issue:207227136 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/libgit2/libgit2/4123/issue_layout |
| twitter:image | https://opengraph.githubassets.com/c9b794f2c1d67f8adddc59653129f9609ed7cbebe0aab0f579bc116e32083255/libgit2/libgit2/issues/4123 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/c9b794f2c1d67f8adddc59653129f9609ed7cbebe0aab0f579bc116e32083255/libgit2/libgit2/issues/4123 |
| og:image:alt | I am interested in the durability of libgit2 and found the following note: do_fsync whether to do an fsync() after writing (currently ignored) libgit2/include/git2/odb_backend.h Line 42 in 89c332e ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | ioquatix |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5290d7e14309ad1e76106a9c4237bd1041517e83ea182c8ab756752cb0c6940b |
| turbo-cache-control | no-preview |
| go-import | github.com/libgit2/libgit2 git https://github.com/libgit2/libgit2.git |
| octolytics-dimension-user_id | 394745 |
| octolytics-dimension-user_login | libgit2 |
| octolytics-dimension-repository_id | 901662 |
| octolytics-dimension-repository_nwo | libgit2/libgit2 |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 901662 |
| octolytics-dimension-repository_network_root_nwo | libgit2/libgit2 |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 9c975978430e9ad293956f2bbdaf153b1bd84a99 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width