summaryrefslogtreecommitdiff
path: root/src/libostree/ostree-repo.h
diff options
context:
space:
mode:
authorJason Wessel <jason.wessel@windriver.com>2019-07-10 14:47:27 -0400
committerAtomic Bot <atomic-devel@projectatomic.io>2019-09-09 13:40:36 +0000
commitb709c3c67bcaf3651ff2dd1d5a5f8680cf20d50c (patch)
tree0723c8d5fbf6635a08ab085b0f526151c2ab5174 /src/libostree/ostree-repo.h
parente49060c207fd201f71316bf174e1b467827abc7a (diff)
downloadostree-b709c3c67bcaf3651ff2dd1d5a5f8680cf20d50c.tar.gz
fsck: Implement a partial commit reason bitmask
After the corruption has been fixed with "ostree fsck -a --delete", a second run of the "ostree fsck" command will print X partial commits not verified and exit with a zero. The zero exit code makes it hard to detect if a repair operation needs to be run. When ever fsck creates a partial commit it should add a reason for the partial commit to the state file found in state/<hash>.commitpartial. This will allow a future execution of the fsck to still return an error indicating that the repository is still in the damaged state, awaiting repair. Additional reason codes could be added in the future for why a partial commit exists. Text from: https://github.com/ostreedev/ostree/pull/1880 ==== cgwalters commented: To restate, the core issue is that it's valid to have partial commits for reasons other than fsck pruned bad objects, and libostree doesn't have a way to distinguish. Another option perhaps is to write e.g. fsck-partial into the statefile state/<hash>.commitpartial which would mean "partial, and expected to exist but was pruned by fsck" and fsck would continue to error out until the commit was re-pulled. Right now the partial stamp file is empty, so it'd be fully compatible to write a rationale into it. ==== Signed-off-by: Jason Wessel <jason.wessel@windriver.com> Closes: #1910 Approved by: cgwalters
Diffstat (limited to 'src/libostree/ostree-repo.h')
-rw-r--r--src/libostree/ostree-repo.h44
1 files changed, 27 insertions, 17 deletions
diff --git a/src/libostree/ostree-repo.h b/src/libostree/ostree-repo.h
index 038bbd41..aaaaa622 100644
--- a/src/libostree/ostree-repo.h
+++ b/src/libostree/ostree-repo.h
@@ -249,6 +249,26 @@ gboolean ostree_repo_write_config (OstreeRepo *self,
GError **error);
/**
+ * OstreeRepoCommitState:
+ * @OSTREE_REPO_COMMIT_STATE_NORMAL: Commit is complete. This is the default.
+ * (Since: 2017.14.)
+ * @OSTREE_REPO_COMMIT_STATE_PARTIAL: One or more objects are missing from the
+ * local copy of the commit, but metadata is present. (Since: 2015.7.)
+ * @OSTREE_REPO_COMMIT_STATE_FSCK_PARTIAL: One or more objects are missing from the
+ * local copy of the commit, due to an fsck --delete. (Since: 2019.3.)
+ *
+ * Flags representing the state of a commit in the local repository, as returned
+ * by ostree_repo_load_commit().
+ *
+ * Since: 2015.7
+ */
+typedef enum {
+ OSTREE_REPO_COMMIT_STATE_NORMAL = 0,
+ OSTREE_REPO_COMMIT_STATE_PARTIAL = (1 << 0),
+ OSTREE_REPO_COMMIT_STATE_FSCK_PARTIAL = (1 << 1),
+} OstreeRepoCommitState;
+
+/**
* OstreeRepoTransactionStats:
* @metadata_objects_total: The total number of metadata objects
* in the repository after this transaction has completed.
@@ -316,6 +336,13 @@ gboolean ostree_repo_mark_commit_partial (OstreeRepo *self,
GError **error);
_OSTREE_PUBLIC
+gboolean ostree_repo_mark_commit_partial_reason (OstreeRepo *self,
+ const char *checksum,
+ gboolean is_partial,
+ OstreeRepoCommitState in_state,
+ GError **error);
+
+_OSTREE_PUBLIC
void ostree_repo_transaction_set_refspec (OstreeRepo *self,
const char *refspec,
const char *checksum);
@@ -526,23 +553,6 @@ gboolean ostree_repo_load_variant_if_exists (OstreeRepo *self,
GVariant **out_variant,
GError **error);
-/**
- * OstreeRepoCommitState:
- * @OSTREE_REPO_COMMIT_STATE_NORMAL: Commit is complete. This is the default.
- * (Since: 2017.14.)
- * @OSTREE_REPO_COMMIT_STATE_PARTIAL: One or more objects are missing from the
- * local copy of the commit, but metadata is present. (Since: 2015.7.)
- *
- * Flags representing the state of a commit in the local repository, as returned
- * by ostree_repo_load_commit().
- *
- * Since: 2015.7
- */
-typedef enum {
- OSTREE_REPO_COMMIT_STATE_NORMAL = 0,
- OSTREE_REPO_COMMIT_STATE_PARTIAL = (1 << 0),
-} OstreeRepoCommitState;
-
_OSTREE_PUBLIC
gboolean ostree_repo_load_commit (OstreeRepo *self,
const char *checksum,