Hi Jesse,
>>> I ran expire several times with '-v 2' through '-v 5' and never get more
>>> output than the standard three lines. I'm running INN 2.7.0rc1 with a rather
>>> large tradspool for most articles and a single CNFS buffer for binary
>>> articles.
>
> If there is anything I can do to help assist, let me know.
"expireover -e -N -p" should do what you want (see my previous response).
I've a bit improved expire for logging and, above all, with a few comments.
I don't know whether you could try the following patch easily (you will have to rebuild INN and run "make update") but in case you want to test it, feel free :-)
--- a/expire/expire.c
+++ b/expire/expire.c
@@ -372,6 +372,7 @@ EXPremove(const TOKEN *token)
/*
** Do the work of expiring one line.
+** Returns true when the article should be kept for the time being.
*/
static bool
EXPdoline(void *cookie UNUSED, time_t arrived, time_t posted, time_t expires,
@@ -389,12 +390,16 @@ EXPdoline(void *cookie UNUSED, time_t arrived, time_t posted, time_t expires,
HasSelfexpire = true;
Selfexpired = true;
} else {
- /* the article is still alive */
+ /* The article is still alive, free it. */
SMfreearticle(article);
+ /* Per-group expiry is done by expireover, remember!
+ * That's why if groupbaseexpiry is set, expire won't verify
+ * the expiration rules set in expire.ctl. */
if (innconf->groupbaseexpiry || !Ignoreselfexpire)
HasSelfexpire = true;
}
}
+
if (EXPusepost && posted != 0)
when = posted;
else
@@ -403,19 +408,29 @@ EXPdoline(void *cookie UNUSED, time_t arrived, time_t posted, time_t expires,
if (HasSelfexpire) {
if (Selfexpired || token->type == TOKEN_EMPTY) {
+ if (EXPverbose > 3)
+ printf("%s (to remember or forget, not existing)\n",
+ TokenToText(*token));
EXPallgone++;
r = false;
} else {
+ if (EXPverbose > 3)
+ printf("%s (to keep, may self-expire)\n",
+ TokenToText(*token));
EXPstillhere++;
r = true;
}
} else {
kr = EXPkeepit(token, when, expires);
if (kr == Remove) {
+ if (EXPverbose > 3)
+ printf("%s (to remember or forget)\n", TokenToText(*token));
EXPremove(token);
EXPallgone++;
r = false;
} else {
+ if (EXPverbose > 3)
+ printf("%s (to keep)\n", TokenToText(*token));
EXPstillhere++;
r = true;
}
@@ -699,7 +714,7 @@ main(int ac, char *av[])
if (!Bad && NHistory != NULL) {
snprintf(buff, sizeof(buff), "%s.n.done", NHistory);
fclose(EXPfopen(false, buff, "w", true, Server, false));
- CleanupAndExit(Server, false, Bad ? 1 : 0);
+ CleanupAndExit(Server, true, 0);
}
CleanupAndExit(Server, !Bad, Bad ? 1 : 0);
You can use "-x -t" for a dry-run of expire.
expire -x -t -v4 > exp.log
will output in exp.log tons of lines like:
@030346523100000000000000002600000001@ (to keep, may self-expire)
and
grep -v will exp.log
will tell you the tokens expire will remove (or remember depending on the setting of /remember/ in expire.ctl):
@03034652330000000000000F2EBE00000001@ (to remember or forget, not existing)
These tokens no longer correspond to an existing stored article (either the CNFS buffer wrapped or the article was cancelled).
--
Julien ÉLIE
« – À la plage ? Mais il pleut !
– Pas du tout ! Dans le midi de la Gaule, il pleut. Ici, c'est tout
juste un peu humide. Vivifiant. Pas vrai, Astérix ?
– Ce matin, ça devient de plus en plus vivifiant ! » (Astérix)