Date: Fri, 14 Feb 2003 19:54:25 -0800 From: Terry Lambert <tlambert2@mindspring.com> To: Wes Peters <wes@softweyr.com> Cc: Gordon Tetlow <gordont@gnf.org>, Garance A Drosihn <drosih@rpi.edu>, arch@FreeBSD.ORG Subject: Re: syslog.conf syntax change (multiple program/host specifications) Message-ID: <3E4DB9F1.83B7746D@mindspring.com> References: <20030210114930.GB90800@melusine.cuivre.fr.eu.org> <20030214220145.GM83215@roark.gnf.org> <3E4D7C2B.DDFC9DBE@mindspring.com> <200302141725.00421.wes@softweyr.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Wes Peters wrote: > On Friday 14 February 2003 15:30, Terry Lambert wrote: > > Only newsyslog is stupid. > > > > No matter what options you gave it, the first thing it would do is > > the moral equivalent of -F. > > > > So instead of a 60M Samba log file "/var/log/samba", you ended up > > with a "/var/log/samba.1" that was 60M, and a "/var/log/samba" > > that was empty. > > The real problem we're looking at is that ftruncate(2) doesn't take a > third argument describing which end you want to truncate at. Such a > facility would end this argument quickly, syslog could simply truncate > the first (filesize - desired log size) bytes of the file and be done > with it. This would solve the immediate "file too large" problem, but it wouldn't maintain the history properly; you'd end up with 0, 40K, a 60M-40K gap in the history, and then realy old 40K x 3. Probably the right interface is "donate this block range to file X starting at block offset Q, zeroing the corresponding blocks in this file, sparsely, if you can". It's a twisty little problem, probably not worth a general API, unless you can know the block granularity on the underlying FS, at which sparse blocks existed, and constrain it to use that. BTW: the SVR4 fcntl() that's the moral equivalent of ftruncate supports exactly the syntax you want (e.g. free up space at the start of the file for 60M-120K, replacing with sparseness -- it can put sparse blocks in the middle of files). What might be more useful, in this particular case, since you want only the last 120K is a means of truncating deleting cytes off the front of a file. You'd probably want to allow any value, but in terms of avoiding rewriting, in practice, you probably want to constrain it to an even multiple of the FS block size. > Short of getting ufs2 to provide frag blocks at both ends of the file, > this is about as good as it gets. I'll get my -current system up this > weekend and have a patch to review in a few days. If you do this, just implement the SVR4 fcntl(); it basically takes an fcntl() lock structure, e.g.: fcntl( fd, F_FREESP, struct flock *) l_whence SEEK_SET/SEEK_CUR/SEEK_END l_start l_len FWIW, the manual allows restriction to the end of the file, but in practice, that's not what happens on SVR4 systems. -- Terry To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3E4DB9F1.83B7746D>