HAMMER utility - Handle pruning when only snapshot meta-data present
authorMatthew Dillon <dillon@apollo.backplane.com>
Wed, 10 Nov 2010 20:12:45 +0000 (12:12 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Thu, 18 Nov 2010 17:43:31 +0000 (09:43 -0800)
* If only snapshot meta-data is present and no snapshot softlinks are found
  hammer prune (and hammer cleanup) previous exited with an error.  This case
  can occur when creating manual snapshot softlinks and/or trying to prune
  a slave PFS.

* In fact this is incorrect.  If meta-data is present we can prune based
  on that.

sbin/hammer/cmd_softprune.c
sbin/hammer/hammer.8

index 4e63f58..7335cc2 100644 (file)
@@ -120,6 +120,15 @@ hammer_cmd_softprune(char **av, int ac, int everything_opt)
                scan->prune.head.flags |= HAMMER_IOC_PRUNE_ALL;
        } else {
                hammer_softprune_scandir(&base, &template, *av);
+               if (base == NULL) {
+                       const char *dummylink = "";
+                       scan = hammer_softprune_addentry(&base, &template,
+                                                        *av, NULL, NULL,
+                                                        dummylink, dummylink);
+                       if (scan == NULL)
+                               softprune_usage(1);
+                       scan->prune.nelms = 0;
+               }
                ++av;
                --ac;
        }
@@ -127,10 +136,6 @@ hammer_cmd_softprune(char **av, int ac, int everything_opt)
        /*
         * XXX future (need to store separate cycles for each filesystem)
         */
-       if (base == NULL) {
-               fprintf(stderr, "No snapshot softlinks found\n");
-               exit(1);
-       }
        if (base->next) {
                fprintf(stderr, "Currently only one HAMMER filesystem may "
                                "be specified in the softlink scan\n");
@@ -185,6 +190,7 @@ hammer_cmd_softprune(char **av, int ac, int everything_opt)
                }
                if (scan->prune.nelms == 0 &&
                    (scan->prune.head.flags & HAMMER_IOC_PRUNE_ALL) == 0) {
+                       fprintf(stderr, "No snapshots found\n");
                        continue;
                }
 
index ed007b2..7f4949a 100644 (file)
@@ -494,11 +494,15 @@ directive has a period of 0 and a retention time of 0
 then snapshot generation is disabled, removal of old snapshots are
 disabled, and prunes will use
 .Cm prune-everything .
+.Pp
 If the
 .Cm snapshots
 directive has a period of 0 but a non-zero retention time
 then this command will not create any new snapshots but will remove old
-snapshots it finds based on the retention time.
+snapshots it finds based on the retention time.  This form should be
+used on PFS masters where you are generating your own snapshot softlinks
+manually and on PFS slaves when all you wish to do is prune away existing
+snapshots inherited via the mirroring stream.
 .Pp
 By default only snapshots in the form
 .Ql snap- Ns Ar yyyymmdd Ns Op - Ns Ar HHMM