[libvirt] [PATCH v2 01/13] util: add APIs for reading/writing from/to rotating files
Daniel P. Berrange
berrange at redhat.com
Wed Nov 18 15:02:13 UTC 2015
On Wed, Nov 18, 2015 at 08:46:43AM -0500, John Ferlan wrote:
>
>
> On 11/12/2015 12:18 PM, Daniel P. Berrange wrote:
> > Add virRotatingFileReader and virRotatingFileWriter objects
> > which allow reading & writing from/to files with automation
> > rotation to N backup files when a size limit is reached. This
> > is useful for guest logging when a guaranteed finite size
> > limit is required. Use of external tools like logrotate is
> > inadequate since it leaves the possibility for guest to DOS
> > the host in between invokations of logrotate.
> >
> > Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> > ---
> > po/POTFILES.in | 1 +
> > src/Makefile.am | 1 +
> > src/libvirt_private.syms | 13 +
> > src/util/virrotatingfile.c | 608 ++++++++++++++++++++++++++++++++++++++
> > src/util/virrotatingfile.h | 62 ++++
> > tests/Makefile.am | 6 +
> > tests/virrotatingfiletest.c | 698 ++++++++++++++++++++++++++++++++++++++++++++
> > 7 files changed, 1389 insertions(+)
> > create mode 100644 src/util/virrotatingfile.c
> > create mode 100644 src/util/virrotatingfile.h
> > create mode 100644 tests/virrotatingfiletest.c
> >
>
> [...]
>
> > --- /dev/null
> > +++ b/src/util/virrotatingfile.c
> > @@ -0,0 +1,608 @@
>
> In the grand scheme of things a nit - lately there seems to be an effort
> to use two lines for functions, such as:
>
> [static] int
> virFunctionName(param1Type param1,
> param2Type param2)
>
> This module has some that are and some that aren't. I don't have heart
> break one way or another, but someone may ;-)
>
> > +/*
> > + * virrotatingfile.c: file I/O with size rotation
> > + *
> > + * Copyright (C) 2015 Red Hat, Inc.
> > + *
> > + * This library is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU Lesser General Public
> > + * License as published by the Free Software Foundation; either
> > + * version 2.1 of the License, or (at your option) any later version.
> > + *
> > + * This library is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> > + * Lesser General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU Lesser General Public
> > + * License along with this library. If not, see
> > + * <http://www.gnu.org/licenses/>.
> > + *
> > + */
> > +
>
> [...]
>
> > +
> > +
> > +static virRotatingFileReaderEntryPtr
> > +virRotatingFileReaderEntryNew(const char *path)
> > +{
> > + virRotatingFileReaderEntryPtr entry;
> > + struct stat sb;
> > +
> > + VIR_DEBUG("Opening %s", path);
> > +
> > + if (VIR_ALLOC(entry) < 0)
> > + return NULL;
> > +
> > + if (VIR_STRDUP(entry->path, path) < 0)
> > + goto error;
>
> Should the open occur first; otherwise, entry->fd == 0 and the *Free
> routine will VIR_FORCE_CLOSE(0);
Yep, correct.
>
> Although I don't see it being documented/used later in/for some config
> file (and the max value I see used in code is 2)... Should there be some
> sort of "sanity check" that maxbackup doesn't exceed some number - only
> so many files can be open per process, right? Then of course there's
> the silly test of someone passing -1...
Well it is defined a size_t so you "cant" pass -1, but yeah we should
refuse greater than say 20 backup files.
> Also, as a config value it seems if someone changes the maxbackup value
> (higher to lower), then some algorithms may miss files... If then going
> from lower to higher, then files that may not have been deleted might be
> found.
IMHO if changing from higher to lower it is the admins responsibility
to kill off obsolete files.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list