On Fri, 2004-04-30 at 04:02, Bruce Momjian wrote:
> Simon Riggs wrote:
> > > Agreed we want to allow the superuser control over writing of the
> > > archive logs.  The question is how do they get access to that.  Is it by
> > > running a client program continuously or calling an interface script
> > > from the backend?
> > > 
> > > My point was that having the backend call the program has improved
> > > reliablity and control over when to write, and easier administration.
> > > 
> > 
> > Agreed. We've both suggested ways that can occur, though I suggest this
> > is much less of a priority, for now. Not "no", just not "now".
> > 
> > > Another case is server start/stop.  You want to start/stop the archive
> > > logger to match the database server, particularly if you reboot the
> > > server.  I know Informix used a client program for logging, and it was a
> > > pain to administer.
> > > 
> > 
> > pg_arch is just icing on top of the API. The API is the real deal here.
> > I'm not bothered if pg_arch is not accepted, as long as we can adopt the
> > API. As noted previously, my original mind was to split the API away
> > from the pg_arch application to make it clearer what was what. Once that
> > has been done, I encourage others to improve pg_arch - but also to use
> > the API to interface with other BAR prodiucts.
> > 
> > If you're using PostgreSQL for serious business then you will be using a
> > serious BAR product as well. There are many FOSS alternatives...
> > 
> > The API's purpose is to allow larger, pre-existing BAR products to know
> > when and how to retrieve data from PostgreSQL. Those products don't and
> > won't run underneath postmaster, so although I agree with Peter's
> > original train of thought, I also agree with Tom's suggestion that we
> > need an API more than we need an archiver process. 
> > 
> > I would be happy with an exteral program if it was started/stoped by the
> > > postmaster (or via GUC change) and received a signal when a WAL file was
> > > written.  
> > 
> > That is exactly what has been written.
> > 
> > The PostgreSQL side of the API is written directly into the backend, in
> > xlog.c and is therefore activated by postmaster controlled code. That
> > then sends "a signal" to the process that will do the archiving - the
> > Archiver side of the XLogArchive API has it as an in-process library.
> > (The "signal" is, in fact, a zero-length file written to disk because
> > there are many reasons why an external archiver may not be ready to
> > archive or even up and running to receive a signal).
> > 
> > The only difference is that there is some confusion as to the role and
> > importance of pg_arch.
> 
> OK, I have finalized my thinking on this.
> 
> We both agree that a pg_arch client-side program certainly works for
> PITR logging.  The big question in my mind is whether a client-side
> program is what we want to use long-term, and whether we want to release
> a 7.5 that uses it and then change it in 7.6 to something more
> integrated into the backend.
> 
> Let me add this is a little different from pg_autovacuum.  With that,
> you could put it in cron and be done with it.  With pg_arch, there is a
> routine that has to be used to do PITR, and if we change the process in
> 7.6, I am afraid there will be confusion.
> 
> Let me also add that I am not terribly worried about having the feature
> to restore to an arbitrary point in time for 7.5.  I would much rather
> have a good PITR solution that works cleanly in 7.5 and add it to 7.6,
> than to have retore to an arbitrary point but have a strained
> implementation that we have to revisit for 7.6.
> 
> Here are my ideas.  (I talked to Tom about this and am including his
> ideas too.)  Basically, the archiver that scans the xlog directory to
> identify files to be archived should be a subprocess of the postmaster. 
> You already have that code and it can be moved into the backend.
> 
> Here is my implementation idea.  First, your pg_arch code runs in the
> backend and is started just like the statistics process.  It has to be
> started whether PITR is being used or not, but will be inactive if PITR
> isn't enabled.  This must be done because we can't have a backend start
> this process later in case they turn on PITR after server start.
> 
> The process id of the archive process is stored in shared memory.  When
> PITR is turned on, each backend that complete a WAL file sends a signal
> to the archiver process.  The archiver wakes up on the signal and scans
> the directory, finds files that need archiving, and either does a 'cp'
> or runs a user-defined program (like scp) to transfer the file to the
> archive location.
> 
> In GUC we add:
> 
>       pitr = true/false
>       pitr_location = 'directory, [EMAIL PROTECTED]:/dir, etc'
>       pitr_transfer = 'cp, scp, etc'
> 
> The archiver program updates its config values when someone changes
> these values via postgresql.conf (and uses pg_ctl reload).  These can
> only be modified from postgresql.conf.  Changing them via SET has to be
> disabled because they are cluster-level settings, not per session, like
> port number or checkpoint_segments.
> 
> Basically, I think that we need to push user-level control of this
> process down beyond the directory scanning code (that is pretty
> standard), and allow them to call an arbitrary program to transfer the
> logs.  My idea is that the pitr_transfer program will get $1=WAL file
> name and $2=pitr_location and the program can use those arguments to do
> the transfer.  We can even put a pitr_transfer.sample program in share
> and document $1 and $2.

...Bruce and I have just discussed this in some detail and reached a
good understanding of the design proposals as a whole. It looks like all
of this can happen in the next few weeks, with a worst case time
estimate of mid-June. TGFT!

I'll write this up and post this shortly, with a rough roadmap for
further development of recovery-related features.

Best Regards,

Simon Riggs
2nd Quadrant



---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to