Journal files don't have to exist if an owner sheep exits correctly.

Signed-off-by: Hitoshi Mitake <[email protected]>
---
v3: remove the obsolete comment

 sheep/journal.c    |   20 ++++++++++++++++++--
 sheep/sheep.c      |    6 ++++++
 sheep/sheep_priv.h |    1 +
 3 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/sheep/journal.c b/sheep/journal.c
index 92a005e..be1a6b7 100644
--- a/sheep/journal.c
+++ b/sheep/journal.c
@@ -248,8 +248,6 @@ skip:
 }
 
 /*
- * FIXME: clear jfile at shutdown command.
- *
  * We recover the journal file in order of wall time in the corner case that
  * sheep crashes while in the middle of journal committing. For most of cases,
  * we actually only recover one jfile, the other would be empty. This process
@@ -293,6 +291,24 @@ int journal_file_init(const char *path, size_t size, bool 
skip)
        return 0;
 }
 
+void clean_journal_file(const char *p)
+{
+       int ret;
+       char path[PATH_MAX];
+
+       sync();
+
+       snprintf(path, sizeof(path), "%s/%s", p, jfile_name[0]);
+       ret = unlink(path);
+       if (ret < 0)
+               sd_eprintf("unlink(%s): %m", path);
+
+       snprintf(path, sizeof(path), "%s/%s", p, jfile_name[1]);
+       ret = unlink(path);
+       if (ret < 0)
+               sd_eprintf("unlink(%s): %m", path);
+}
+
 static inline bool jfile_enough_space(size_t size)
 {
        if (jfile.pos + size > jfile_size)
diff --git a/sheep/sheep.c b/sheep/sheep.c
index 9e6de4d..7990893 100644
--- a/sheep/sheep.c
+++ b/sheep/sheep.c
@@ -706,6 +706,12 @@ int main(int argc, char **argv)
        sd_printf(SDOG_INFO, "shutdown");
 
        leave_cluster();
+
+       if (uatomic_is_true(&sys->use_journal)) {
+               sd_iprintf("cleaning journal file");
+               clean_journal_file(jpath);
+       }
+
        log_close();
 
        if (pid_file)
diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h
index d1022ac..a447387 100644
--- a/sheep/sheep_priv.h
+++ b/sheep/sheep_priv.h
@@ -402,6 +402,7 @@ bool sheep_need_retry(uint32_t epoch);
 
 /* journal_file.c */
 int journal_file_init(const char *path, size_t size, bool skip);
+void clean_journal_file(const char *p);
 int
 journal_write_store(uint64_t oid, const char *buf, size_t size, off_t, bool);
 int journal_write_epoch(const char *buf, size_t size, uint32_t epoch);
-- 
1.7.5.1

-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to