static struct timeval next_removal_check;
/** Creation time of the snapshot currently being created. */
static int64_t current_snapshot_creation_time;
-/** The snapshot currently being removed. */
+/* Set by the pre-rm hook, cleared by handle_remove_exit(). */
struct snapshot *snapshot_currently_being_removed;
/** Needed by the post-create hook. */
static char *path_to_last_complete_snapshot;
return strcmp(s->name, name_of_reference_snapshot)? 0 : 1;
}
-/*
- * return: 0: no redundant snapshots, 1: rm process started, negative: error
- */
static struct snapshot *find_redundant_snapshot(struct snapshot_list *sl)
{
int i, interval;
int i, num_complete;
struct snapshot *s, *ref = NULL;
+ DSS_DEBUG_LOG(("picking snapshot with earliest creation time\n"));
num_complete = num_complete_snapshots(sl);
if (num_complete <= OPT_UINT32_VAL(DSS, MIN_COMPLETE))
return NULL;
ref = s;
continue;
}
- DSS_INFO_LOG(("oldest removable snapshot: %s\n", s->name));
return s;
}
assert(ref);
victim = find_redundant_snapshot(&sl);
if (victim)
goto rm;
+ dss_msg("nothing to prune\n");
ret = 0;
goto out;
rm:
ret = wait_for_remove_process();
if (ret < 0)
goto out;
+ ret = -E_HOOK_FAILED;
if (snapshot_removal_status != HS_PRE_SUCCESS)
goto out;
}
ret = wait_for_remove_process();
if (ret < 0)
goto out;
- if (snapshot_removal_status != HS_SUCCESS)
- goto out;
+ assert(snapshot_removal_status == HS_SUCCESS);
post_remove_hook();
- if (snapshot_removal_status != HS_POST_RUNNING)
- goto out;
+ assert(snapshot_removal_status == HS_POST_RUNNING);
ret = wait_for_remove_process();
if (ret < 0)
goto out;