Hi Aron,

Thanks for the input. The "small change" you suggest would change the
behavior of the patch which I would prefer not to do as I have reasons for
the previous behavior.
Because you gave no reasons and "stop after removing LIMIT LOs" was not
changed to "stop after attempting to remove LIMIT LOs" I suspect you were
just trying to keep the code clean.

The difference:
In your version of the patch vacuumlo will stop after N lo_unlink(OID)
attempts.
The previous behavior of the patch is that vacuumlo will stop after N
successful lo_unlink(OID)s.

If you have good reason for your behavior please add another flag so that it
is optional.
There should be a clear distinction between "counting vs not", and "aborting
vs continuing" when a lo_unlink(OID) is unsuccessful.


On Tue, Jul 26, 2011 at 4:18 AM, Aron <m...@eunice.de> wrote:

> Here's another small change to the patch, it works fine for me and it quite
> saved my day.
>
> I try to submit the patch by email.
>
>
> diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
> index f6e2a28..1f88d72 100644
> --- a/contrib/vacuumlo/vacuumlo.c
> +++ b/contrib/vacuumlo/vacuumlo.c
> @@ -48,6 +48,7 @@ struct _param
>        char       *pg_host;
>        int                     verbose;
>        int                     dry_run;
> +       int             transaction_limit;
>  };
>
>  int                    vacuumlo(char *, struct _param *);
> @@ -286,6 +287,8 @@ vacuumlo(char *database, struct _param * param)
>                 }
>                else
>                        deleted++;
> +               if(param->transaction_limit!=0 &&
> deleted>=param->transaction_limit)
> +                   break;
>        }
>        PQclear(res);
>
> @@ -313,6 +316,7 @@ usage(const char *progname)
>         printf("  -h HOSTNAME  database server host or socket
> directory\n");
>        printf("  -n           don't remove large objects, just show what
> would be
> done\n");
>        printf("  -p PORT      database server port\n");
> +       printf("  -l LIMIT     stop after removing LIMIT LOs\n");
>        printf("  -U USERNAME  user name to connect as\n");
>        printf("  -w           never prompt for password\n");
>        printf("  -W           force password prompt\n");
> @@ -342,6 +346,7 @@ main(int argc, char **argv)
>         param.pg_port = NULL;
>        param.verbose = 0;
>        param.dry_run = 0;
> +       param.transaction_limit = 0;
>
>        if (argc > 1)
>        {
> @@ -359,7 +364,7 @@ main(int argc, char **argv)
>
>        while (1)
>        {
> -               c = getopt(argc, argv, "h:U:p:vnwW");
> +               c = getopt(argc, argv, "h:U:p:l:vnwW");
>                if (c == -1)
>                        break;
>
> @@ -395,6 +400,14 @@ main(int argc, char **argv)
>                                 }
>                                param.pg_port = strdup(optarg);
>                                break;
> +                       case 'l':
> +                               param.transaction_limit = strtol(optarg,
> NULL, 10);
> +                               if ((param.transaction_limit < 0) ||
> (param.transaction_limit >
> 2147483647))
> +                               {
> +                                   fprintf(stderr, "%s: invalid
> transaction limit number: %s, valid
> range is form 0(disabled) to 2147483647.\n", progname, optarg);
> +                                   exit(1);
> +                               }
> +                               break;
>                        case 'h':
>                                param.pg_host = strdup(optarg);
>                                break;
>
>
> --
> View this message in context:
> http://postgresql.1045698.n5.nabble.com/vacuumlo-patch-tp4628522p4634026.html
> Sent from the PostgreSQL - hackers mailing list archive at Nabble.com.
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>



-- 

Noodle
Connecting People, Content & Capabilities within the Enterprise


Toll Free: 866-258-6951 x 701
tim.le...@vialect.com
http://www.vialect.com

Noodle is a product of Vialect Inc

Follow Noodle on Twitter
http://www.twitter.com/noodle_news

Reply via email to