cmogstored.git  about / heads / tags
alternative mogstored implementation for MogileFS
$ git log --pretty=format:'%h %s (%cs)%d'
e1a4e5d cmogstored 1.8.1 - use default system stack size (2021-02-13)
	(HEAD -> master, tag: v1.8.1)
f441da1 thrpool: remove stack size changing for all platforms (2021-02-13)
fac3a39 cmogstored 1.8.0 (2020-08-13)
	(tag: v1.8.0)
3d4f0bb doc: add IMAPS, NNTPS and .onion archive URLs (2020-08-13)
9958e4e m4/.gitignore: update for gnulib 4e082bffbcc46e68 (2020-08-13)
3a97c98 http: update in-memory devXX/usage on PUT+DELETE (2020-08-09)
d545133 doc: add "USAGE FILES" section to manpage (2020-08-09)
fc2f329 dev.c: emit usage for devices with unknown mount point (2020-08-09)
d7626e6 cmogstored 1.7.3 (2020-03-22)
	(tag: v1.7.3)
a4af139 http: favor chunked over Content-Length (2020-03-19)

$ git cat-file blob HEAD:README
cmogstored - alternative mogstored implementation for MogileFS

cmogstored is an alternative implementation of the "mogstored" storage
component of MogileFS.  cmogstored is implemented in C and does not use
Perl at runtime.  cmogstored is the only component you need to install
on a MogileFS storage node.

Read more about MogileFS at
cmogstored is not directly affiliated with the MogileFS project
nor any commercial interests behind MogileFS.


* low memory footprint, more memory for file system caches
* multithreaded design[1] keeps queues in rotational disks busy
* epoll/kqueue used to cheaply maintain persistent connections
* supports checksumming features in MogileFS::Server 2.60+
* easily installable on modern GNU/Linux and FreeBSD without Perl
* supports HTTP/1.1 persistent connections and pipelining
* supports chunked and partial (Content-Range) HTTP/1.1 PUT requests
* supports partial GET requests
* may reject PUTs based on Content-MD5 header/trailer verification
* graceful shutdown via SIGQUIT will not terminate active requests
* extensive test suite, code coverage and Valgrind-tested

Getting Started

See the INSTALL document for installation and runtime requirements.

cmogstored aims to be mostly command-line and configuration-file
compatible with the Perl mogstored.

cmogstored does not support spawning lighttpd/Apache instances like its
Perl counterpart.

In other cases, you can simply replace "mogstored" with "cmogstored"
in your init scripts and use the same config file.


For any and all questions, bug reports, patches, pull requests,
send plain-text email to our publically archived inbox at:

No subscription is neccessary, so reply-to-all on replies.
HTML email is not welcome and will be bounced.

Our archives are at
and via NNTP(S) and IMAP(S):


Tor users may also use .onions:


AUTH=ANONYMOUS is supported if your IMAP(S) client supports it,
but any username + password combination also works.

We also piggy-back onto the public MogileFS mailing list for public

Note, subscription required for the MogileFS list:

MogileFS archives are at: <!forum/mogile>


Source tarballs suitable for distribution are housed here:


The latest stable release is:

See for release notes

Source code

* git clone
* gitweb ::


cmogstored is licensed under the GNU General Public License, v3 (or later).
Distribution tarballs include LGPL code from the Gnulib project in lib/.
The bsd/*.h compatibility headers are BSD-licensed.
The nostd/* files are Expat/MIT-licensed from the libnostd project
Contributors retain their copyrights to their respective contributions.

This project is not affiliated with the GNU project nor FSF even though
we use their tools and licenses.


Eric Wong hates pretty things, so this README file is also the homepage:

The latest releases are announced via Atom feed:


# heads (aka `branches'):
$ git for-each-ref --sort=-creatordate refs/heads \
	--format='%(HEAD) %(refname:short) %(subject) (%(creatordate:short))'
* master       cmogstored 1.8.1 - use default system stack size (2021-02-13)
  gl-env       rely on gnulib for environ portability (2016-07-18)
  empty-header-values http_common: correctly handle empty header values (2014-09-03)
  khash        dev: minor khash-related cleanups (2014-05-29)
  ccan-list    svc_dev: calling free does not need the lock (2014-05-23)
  valgrind-fixes test: fix valgrind warnings in test-only C code (2013-12-01)
  malloc       default malloc tuning for glibc (2013-11-11)
  st-wip-broken more probes WIP (2013-07-26)
  wip-1.3      avoid leaks on epoll/kqueue resources exhaustion (2013-06-20)
  iosem        per-mog_devid IO channels via semaphores (2013-05-30)

# tags:
$ git for-each-ref --sort=-creatordate refs/tags \
	--format='%(refname:short) %(subject) (%(creatordate:short))'
v1.8.1       cmogstored 1.8.1 - use default system stack size (2021-02-13) tar.gz
v1.8.0       cmogstored 1.8.0 (2020-08-13) tar.gz
v1.7.3       cmogstored 1.7.3 (2020-03-22) tar.gz
v1.7.2       cmogstored 1.7.2 (2020-02-19) tar.gz
v1.7.1       cmogstored 1.7.1 - Linux 5.0/5.1 epoll_pwait workaround (2019-05-12) tar.gz
v1.7.0       cmogstored 1.7.0 (2018-12-18) tar.gz
v1.6.0       cmogstored 1.6.0 - minor fixes on allocation errors (2016-08-31) tar.gz
v1.5.0       cmogstored 1.5.0 - vfork, systemd, 416 codes (2015-11-21) tar.gz
v1.5.0rc1    cmogstored 1.5.0rc1 (2015-11-11) tar.gz
v1.4.3       cmogstored 1.4.3 - mostly non-GNU/Linux fixups (2015-03-09) tar.gz

# associated public inboxes:
# (number on the left is used for dev purposes)

git clone