Date | Commit message (Collapse) |
|
bogomips.org is due to expire, soon, and I'm not willing to pay
extortionist fees to Ethos Capital/PIR/ICANN to keep a .org. So
it's at yhbt.net, for now, but it will change again to
whatever's affordable... Identity is overrated.
Tor users can use .onions and kick ICANN to the curb:
torsocks w3m http://cmogstored.ou63pmih66umazou.onion/
torsocks git clone http://ou63pmih66umazou.onion/cmogstored.git/
torsocks w3m http://ou63pmih66umazou.onion/cmogstored-public/
|
|
|
|
I haven't tested with systemtap, lately; maybe something
bit rotted.
|
|
Oops.
|
|
Sometimes people will forget to install the manpage, make sure
it's online in plain-text or HTML format.
|
|
Generate pre-formatted HTML which gives us a consistent visual style
with our mailing list archives and enhance linkability. <a>, <pre>,
and <title> are among the few useful HTML tags I'll use :P
Drop the AUTHORS file, it's pointless maintenance task and users can
just look at git history instead (and honestly, I have zero interest in
recognition; I only use my real name to deter GPL violations).
|
|
This might improve visibility of these scripts for use with systemd.
|
|
.slowrb tests have a different suffix and the test dependencies
need to be split out separately.
|
|
Since we'll support systemd, it's not a bad idea to include
reasonable example files for users.
|
|
Oops, we cannot have zero-byte gzipped files :x
|
|
Speeds up site loading when combined with things like
try_gzip_static in nginx.
|
|
Tested with automake 1:1.14.1-2 on Debian GNU/kFreeBSD
|
|
This was breaking the Debian kFreeBSD build
|
|
|
|
pwrite can be a slow, blocking function on an overloaded
system, but a slow pwrite requires a wrapper to simulate.
This allows us to have coverage of the:
if (mog_ioq_contended())
return MOG_NEXT_WAIT_RD;
cases in http_put.c
|
|
This allows us to avoid a redundant hash lookup every time we
"activate" an open file for reading or writing.
|
|
This replaces the fsck_queue internals with a generic
ioq implementation which is based on the MogileFS devid,
and not the operating system devid.
|
|
According to the m4/clock_gettime.m4 documentation (from gnulib),
the LIB_CLOCK_GETTIME variable should be added to a *LDADD variable
and not AM_LDFLAGS. This is also consistent with GNU automake
documentation.
Thanks to Cody Pisto for reporting this problem under Ubuntu 12.04
ref: http://www.gnu.org/software/automake/manual/html_node/Linking.html
|
|
For difficult-to-trigger errors, fault injection is necessary for
testing our error handling. I have confirmed this test fails with
"avoid leaks on epoll/kqueue resources exhaustion" reverted.
|
|
While pthread_yield is non-standard, it is relatively common and
preferable for systems where pthreads are _not_ 1:1 mapped to kernel
threads. This also provides a stronger yield to weaken the priority
of the calling thread wherever we previously used sched_yield.
|
|
Our tests over-link (to save developer time :P), so we must
link in probes with our tests. Also, we must keep probes.h
around for distclean (but not maintainerclean)
|
|
We cannot assume sa_family_t is the first element of "struct
sockaddr_in" or "struct sockaddr_in6". FreeBSD has a "sa_len"
member as the first element while Linux does not.
So only keep the parts of the "struct sockaddr*" we need and use
inet_ntop instead of getnameinfo. This also gives us a little more
space to add additional fields to "struct mog_http" in the future
without increasing memory (or CPU cache) use.
|
|
Tarballs were otherwise unusable.
|
|
This will allow us to do lookups for IO queues/semaphores before
we attempt to fstatat/stat a path.
|
|
This is useful for:
a) repeatibly generating the same tarball off git
b) diagnosing and tracking down (rare) gnulib bugs
c) 3rd parties verifying we do not put malicious code into our tarballs
|
|
We will key most client events by pid() and file descriptors,
as this is least ambiguous. There are some minor refactorings
to pass "struct mog_fd *" around as much as possible instead of
"struct mog_http *".
|
|
getpeername() does not work on unconnected sockets. For error-handling,
unconnected sockets is a fairly common occurrence, so we want to get
the address early on when we know the address is still valid.
For IPv4 addresses, this does not increase memory overhead at all. IPv6
addresses[1] does require an additional heap allocation, but it does not
need to be aligned since it is infrequently accessed. If IPv6 becomes
common, we may need to expand our per-client storage to 192 bytes (from
128) on 64-bit (or see if we may pack data more carefully).
[1] IPv6 addresses are rare with MogileFS, as MogileFS does not
currently support them.
|
|
This will allow us to more easily handle error reporting for
IPv6 addresses and allow for consistent formatting of
stringified IP addresses.
|
|
Andrey Okunev noted undefined references on the MogileFS mailing
list when building cmogstored 1.2.1 on his 32-bit CentOS5 machine.
|
|
This will inform the user of why cmogstored may be slow
to start, since we need the mountlist to be populated at
startup.
We also throw a pthread_cancel() in there to load libgcc_s under
glibc, so we can avoid loading libgcc_s once we're under FD pressure.
This makes test/http_idle_expire.rb more reliable.
|
|
This saves us a file descriptor in Linux, which provides
epoll_pwait in 2.6.19+ (and ppoll for 2.6.18, the oldest
kernel we support).
|
|
eventfd uses fewer resources than a pipe, so create less
overhead for our users by using eventfd instead of a pipe.
|
|
It should be clearer this code is only called from inside
mnt.c and not fs.c (the latter is for general filesystem
operations, not operations on a mount point).
|
|
There is no need to maintain our own code for this.
|
|
USR2 now forks a new cmogstored process which inherits
listener file descriptors from the parent. The parent
renames its pidfile with a ".oldbin" suffix so the new
child can use the new PID file.
Clusters may now upgrade to future versions of cmogstored
without needing to mark hosts down via mogadm.
The behavior of this process should match that of nginx:
http://wiki.nginx.org/CommandLine#Upgrading_To_a_New_Binary_On_The_Fly
|
|
To support transparent upgrades, we need to be able to reap
child processes regardless of what the child process was. So we
must do away with the iostat/worker-specifc waitpid() calls and
use waitpid(-1) to cast a wide net to reap anything and
everything.
When we support transparent upgrades, the fork+exec-ed child
process may die, so the main process (master if
--worker-processes are used) needs to be capable of reaping
that new process.
|
|
This lets us inherit listen sockets from the parent
process, in the future this will allow transparent
upgrades.
|
|
No need to clutter up the main file with graceful exit
functionality.
|
|
Filesystems with no block size are unusable, so avoid
stat()-ing them and potentially having problems with
our subsequent stat() stalling when a network connection
slows (or goes) down.
|
|
This prevents us from losing iostat utilization each time the
mount list is rescanned.
Additionally, this allows us to read iostat utilization (and
write to sidechannel clients) concurrently while the mount list
is being refreshed.
|
|
This allows users building from the dist tarball to make
minor changes to the source without needing "help2man".
This change has no effect for developers building from
the git repo.
|
|
Since we rely on gnulib-modified stdio.h/string.h headers,
we'll need the generated config.h to make sense of them.
|
|
Compared to our previous function, this:
* prefixes the message with the program name
* can show the strerror() message more consistently
* automatically adds a trailing newline for us
|
|
Saves about 10s of build time with "make check" and makes
the distribution tarball a little smaller.
|
|
Epoll/kqueue descriptors are safely usable for this task given
the the ability to use one-shot notifications (which is
independent of level-triggering, even).
|
|
gnulib now includes tests by default in the "tests/" directory.
We'll also avoid importing certain modules that our platforms
will never need to save some space in the tarball.
Based on gnulib commit 48fe477c9008efadab8cf8c0c3240d824c12a8b9
|
|
We can only rebuild the manpage if cmogstored is present. When
building in subdirectories, our manpage-hack.mk snippet won't
work.
|
|
"prove -w" isn't supported on some older systems which
we intend to support (e.g. CentOS 5.x).
|
|
This is helpful for isolating individual tests under valgrind.
|
|
This will allow us to add support for SHA1 (and other
algorithms) more easily in the future.
This also enables building against libgcrypt in case libgcrypt
gains optimized ASM routines or if users want a smaller binary.
|