In the unlikely case that GC happens "too late", it could fail when
deleting, in which case it seems best to reopen the cache and try again,
as it will probably be deleted by a kresd instance by the next interval.
case KNOT_ENOENT:
already_gone++;
break;
+ case KNOT_ESPACE:
+ printf("Warning: out of space, bailing out to retry later.\n");
+ api->txn_abort(&txn);
+ goto finish;
default:
printf("Warning: skipping deletion because of error (%s)\n",
knot_strerror(ret));
int exit_code = 0;
kr_cache_gc_state_t *gc_state = NULL;
+ bool last_espace = false;
do {
int ret = kr_cache_gc(&cfg, &gc_state);
+
+ /* Let's tolerate ESPACE unless twice in a row. */
+ if (ret == KNOT_ESPACE) {
+ if (!last_espace)
+ ret = KNOT_EOK;
+ last_espace = true;
+ } else {
+ last_espace = false;
+ }
+
// ENOENT: kresd may not be started yet or cleared the cache now
- if (ret && ret != -ENOENT) {
+ if (ret && ret != KNOT_ENOENT) {
printf("Error (%s)\n", knot_strerror(ret));
exit_code = 10;
break;