enable DB upgrade for host readonly state
[MogileFS-Server.git] / CHANGES
blob441b328aa51646e4ef0c803a8e1c7900f9163054
1 2014-12-15: Release version 2.72
3    * Work with DBD::SQLite's latest lock errors (dormando <dormando@rydia.net>)
5    * remove update_host_property (Eric Wong <e@80x24.org>)
7    * remove users of unreachable_fids table (Eric Wong <e@80x24.org>)
9    * monitor: batch MySQL device table updates (Eric Wong <normalperson@yhbt.net>)
11    * monitor: defer DB updates until all HTTP requests are done (Eric Wong <normalperson@yhbt.net>)
13    * connection/poolable: defer expiry of timed out connections (Eric Wong <e@80x24.org>)
15    * connection/poolable: disable watch_write before retrying write (Eric Wong <normalperson@yhbt.net>)
17    * connection/poolable: do not write before event_write (Eric Wong <normalperson@yhbt.net>)
19    * add conn_pool_size configuration option (Eric Wong <normalperson@yhbt.net>)
21    * enable TCP keepalives for iostat watcher sockets (Eric Wong <normalperson@yhbt.net>)
23    * host: add "readonly" state to override device "alive" state (Eric Wong <normalperson@yhbt.net>)
25    * add LICENSE file to distro (dormando <dormando@rydia.net>)
27 2013-08-18: Release version 2.70
29    * This release features a very large rewrite to the Monitor worker to run
30      checks in parallel. There are no DB schema changes.
32    * replicate: use persistent connection from pool if possible (Eric Wong <normalperson@yhbt.net>)
34    * replicate: enforce expected Content-Length in http_copy (Eric Wong <normalperson@yhbt.net>)
36    * create_open: parallelize directory vivification (Eric Wong <normalperson@yhbt.net>)
38    * device: reuse HTTP connections for MKCOL (Eric Wong <normalperson@yhbt.net>)
40    * delete worker uses persistent HTTP connections (Eric Wong <normalperson@yhbt.net>)
42    * httpfile: use HTTP connection pool for DELETE (Eric Wong <normalperson@yhbt.net>)
44    * httpfile: use Net::HTTP::NB, remove LWP::UserAgent (Eric Wong <normalperson@yhbt.net>)
46    * fsck: parallelize size checks for any given FID (Eric Wong <normalperson@yhbt.net>)
48    * monitor: refactor/rewrite to use new async API (Eric Wong <normalperson@yhbt.net>)
50 2013-08-07: Release version 2.68
52    * optimize monitor worker for large installs (Eric Wong <normalperson@yhbt.net>)
54    * allow startup without job_master (and dependent workers) (Eric Wong <normalperson@yhbt.net>)
56    * store: do not disconnect for max_handles while locked (Eric Wong <normalperson@yhbt.net>)
58    * store: do not auto-reconnect while holding a lock (Eric Wong <normalperson@yhbt.net>)
60    * add naive MultipleDevice replication policy (Eric Wong <normalperson@yhbt.net>)
62    * httpfile: log mogstored I/O errors when checksumming (Eric Wong <normalperson@yhbt.net>)
64    * ProcManager: log socketpair errors correctly (Eric Wong <normalperson@yhbt.net>)
66    * fix "drain" handling used by MultipleHosts replpolicy (Eric Wong <normalperson@yhbt.net>)
68    * httpfile: correct timeouts for sidechannel digest (Eric Wong <normalperson@yhbt.net>)
70    * httpfile: correct FILE_MISSING check in digest_mgmt (Eric Wong <normalperson@yhbt.net>)
72    * mogstored: avoid bareword on IO::AIO w/o fadvise (Eric Wong <normalperson@yhbt.net>)
74    * ProcManager: only log times_out_of_qworkers for new queries (Eric Wong <normalperson@yhbt.net>)
76    * Don't emit warnings if we're lacking the space free of a device.  If we don't find space on devices with known space free, try the unknowns. (Dave Lambley <davel@state51.co.uk>)
78    * list_keys: escape in Store, allow [%\\] as prefix (Eric Wong <normalperson@yhbt.net>)
80    * list_keys: consistent ESCAPE usage across DB types (Eric Wong <normalperson@yhbt.net>)
82 2013-02-02: Release version 2.67
84    * Serialize tempfile reaping (dormando <dormando@rydia.net>)
86    * reaper: ensure worker can be stopped via "!want" (Eric Wong <normalperson@yhbt.net>)
88    * domain removal also removes its default class (Eric Wong <normalperson@yhbt.net>)
90    * store: wrap create_class in a transaction to avoid races (Eric Wong <normalperson@yhbt.net>)
92    * mogstored: fix kqueue usage with daemonization (Eric Wong <normalperson@yhbt.net>)
94    * Filter the devices before we do an expensive sort. (Dave Lambley <davel@state51.co.uk>)
96    * httpfile: avoid killing worker on down sidechannel (Eric Wong <normalperson@yhbt.net>)
98    * move checksum and tempfile delete to delete worker (Eric Wong <normalperson@yhbt.net>)
100    * sqlite: use immediate transactions to prevent busy errors (Eric Wong <normalperson@yhbt.net>)
102    * disable Nagle's algorithm for accepted clients (Eric Wong <normalperson@yhbt.net>)
104    * ProcManager: favor using recently-used queryworkers (Eric Wong <normalperson@yhbt.net>)
106    * Do both sorts in one method, to save on shared initialisation. (Dave Lambley <davel@state51.co.uk>)
108    * Pull out device sorting into it's own method for overriding. (Dave Lambley <davel@state51.co.uk>)
110    * Reseed the random number generator after forking. (Dave Lambley <davel@state51.co.uk>)
112    * support nginx server type in mogstored command line options (Daniel Frett <daniel.frett@ccci.org>)
113      (also Gernot Vormayr <notti@gbcc.at>, others)
115 2013-01-06: Release version 2.66
117    * add a hook to cmd_updateclass (Daniel Frett <daniel.frett@ccci.org>)
119    * support updating the class to the default class which has an id of 0 (Daniel Frett <daniel.frett@ccci.org>)
121    * reaper: validate DB connection before reaping (Eric Wong <normalperson@yhbt.net>)
122      Fixes occasional crash in reaper process.
124    * improve handling of classes which change hash algorithm (Eric Wong <normalperson@yhbt.net>)
126    * fsck: skip non-existent FIDs properly (Eric Wong <normalperson@yhbt.net>)
128    * fsck: use replicate lock when fixing FID (Eric Wong <normalperson@yhbt.net>)
130    * query: allow "0" key on all commands which take keys (Eric Wong <normalperson@yhbt.net>)
132    * prevent reqid mismatches (and queryworker death) (Eric Wong <normalperson@yhbt.net>)
133      Fixes crash case with specific error types.
135    * fix use_dest_devs for rebalance (Pyry Hakulinen <pyry@automattic.com>)
136      Fixes "use_dest_devs" argument during rebalance.
138    * Fix "skip_devcount" during rebalance (Pyry Hakulinen <pyry@automattic.com>)
139      Now actually skips updating devcount column during rebalance.
141 2012-08-13: Release version 2.65
143    * Postgres advisory lock instead of table-based lock (Robin H. Johnson <robbat2@gentoo.org>)
144      Now requires minimum Postgres version of pg8.4.
146    * reaper: switch to Danga::Socket for scheduling (Eric Wong <normalperson@yhbt.net>)
148    * reaper: add queue_size_for_reaper server setting (Eric Wong <normalperson@yhbt.net>)
150    * reaper: add "queue_rate_for_reaper" server setting (Eric Wong <normalperson@yhbt.net>)
151      defaults to 1000, same as previously.
153    * reaper: global lock around DB interaction (Eric Wong <normalperson@yhbt.net>)
154      prevents reapers clobbering each other, causing a reduction in DB writes.
156    * tests: add basic test for reaper (Eric Wong <normalperson@yhbt.net>)
158    * fix tests when /etc/mogilefs/mogstored.conf exists (Eric Wong <normalperson@yhbt.net>)
160    * iostat: increase flexibility of iostat parser (Eric Wong <normalperson@yhbt.net>)
162    * iostat: allow MOG_IOSTAT_CMD env override (Eric Wong <normalperson@yhbt.net>)
164    * When a mogstored is down, die with a more informative message. (Dave Lambley <davel@state51.co.uk>)
166 2012-06-21: Release version 2.64
168    * Delete memcache data when we replicate fids (Pyry Hakulinen <pyry@automattic.com>)
170    * implement "case_sensitive_list_keys" server setting (Eric Wong <normalperson@yhbt.net>)
172    * get_paths: deprioritize devs in "drain" state (Eric Wong <normalperson@yhbt.net>)
174    * make marking a host down cause devices to act as down (Eric Wong <normalperson@yhbt.net>)
176    * monitor skips hosts marked dead or down (Eric Wong <normalperson@yhbt.net>)
178 2012-05-29: Release version 2.63
180    * Critical bugfix for Postgres users introduced by 2.61. New file uploads
181      would fail. (noticed by robin H. Johnson, fixed by Eric Wong)
183 2012-05-19: Release version 2.62
185    * Critical bugfix for a compilation error (dormando, reported by Robin)
187    * Fix for upgrading a Postgres install for checksums (Robin * H. Johnson <robbat2@gentoo.org>)
189 2012-05-18: Release version 2.61
191    * fix issue #57 by Pyry and Eric (dormando <dormando@rydia.net>)
192      (mogadm host status sometimes allowed typos)
194    * avoid unnecessary devcount update in create_close (Eric Wong <normalperson@yhbt.net>)
196    * size arg check from tomas doran (dormando <dormando@rydia.net>)
197      (pass in a "size" argument (in bytes) to create_open and mogilefs will
198       ensure there's enough free space for it)
200    * sqlite: implement locking via tables (Eric Wong <normalperson@yhbt.net>)
202    * worker/query: Add optional callid parameter (Gernot Vormayr <notti@bgcc.at>)
203      (allows command pipelining)
205    * delete: prevent orphan files from replicator race (Eric Wong <normalperson@yhbt.net>)
207    * fsck: prevent running over 100% completion (Eric Wong <normalperson@yhbt.net>)
209    * fsck: cleanup and reduce unnecessary devcount updates (Eric Wong <normalperson@yhbt.net>)
211    * fsck: update devcount, forget devs on unfixable FIDs (Eric Wong <normalperson@yhbt.net>)
213    * fsck: log bad count correctly instead of policy violation (Eric Wong <normalperson@yhbt.net>)
215    * tests: add tests for fsck functionality (Eric Wong <normalperson@yhbt.net>)
217    * monitor: only broadcast reject_bad_md5 on change (Eric Wong <normalperson@yhbt.net>)
219    * worker: delete_domain returns has_classes error (Eric Wong <normalperson@yhbt.net>)
221    * log: enable autoflush for stdout logging (Eric Wong <normalperson@yhbt.net>)
223 2012-03-30: Release version 2.60
225    * Fix fsck status when running for the first time (dormando <dormando@rydia.net>)
227    * Checksum support (Major update!) (Eric Wong <normalperson@yhbt.net>)
228      See doc/checksums.txt for an overview of how the new checksum system
229      works. Also keep an eye on the wiki (http://www.mogilefs.org) for more
230      complete documentation in the coming weeks.
232 2012-02-29: Release version 2.59
234    * don't make SQLite error out on lock calls (dormando <dormando@rydia.net>)
236    * Postgres wasn't honoring a no-wait timeout (dormando <dormando@rydia.net>)
238 2012-02-28: Release version 2.58
240    * reduce UPDATE's to device table (dormando <dormando@rydia.net>)
242    * replicate: retry on short writes to destination (Eric Wong <normalperson@yhbt.net>)
244    * enable TCP keepalives for accepted sockets (Eric Wong <normalperson@yhbt.net>)
246    * Populate memcache even when noverify is missing (Pyry Hakulinen <pyry@automattic.com>)
248    * Remove FID from memcache when it is deleted (Pyry Hakulinen <pyry@automattic.com>)
250    * Unset memc when memcache servers have been removed (Pyry Hakulinen <pyry@automattic.com>)
252    * Filter out illegal memcache servers from memcache_servers (Pyry Hakulinen <pyry@automattic.com>)
254    * Add skip_mkcol setting for servers which do not need it (Pyry Hakulinen <pyry@automattic.com>)
256    * skip_devcount variable that disables devcount updates (Pyry Hakulinen <pyry@automattic.com>)
258    * Back off if master DB is down (dormando <dormando@rydia.net>)
260    * use cached setting for slave list (dormando <dormando@rydia.net>)
262    * fix "fsck never stops" issue (dormando <dormando@rydia.net>)
264 2012-01-31: Release version 2.57
266    * Silence a warning about undefined value introduced by the slave database ordering work (hachi@kuiki.net)
268    * Need a hook to be able to check the slave list during startup (hachi@kuiki.net)
270 2012-01-27: Release version 2.56
272    * Add database connect timeouts (dormando <dormando@rydia.net>)
274    * fix potential hang in JobMaster added in 2.55 (dormando <dormando@rydia.net>)
276    * fix "set_weight" command (Eric Wong <normalperson@yhbt.net>)
278    * sqlite: consider SQLITE_BUSY and SQLITE_LOCKED deadlocks (Eric Wong <normalperson@yhbt.net>)
280    * kill a little more dead fsck/Checker code (dormando <dormando@rydia.net>)
282    * Destroy mogdeps (dormando <dormando@rydia.net>)
284    * improve slave handling code (dormando <dormando@rydia.net>)
286    * don't spew errors if the master goes down (dormando <dormando@rydia.net>)
288    * provide an async server setting cache via monitor worker (dormando <dormando@rydia.net>)
290    * fix return value of commands that clear_cache (Eric Wong <normalperson@yhbt.net>)
292    * make reaper wait less time in test mode (dormando <dormando@rydia.net>)
294    * queryworker: reimplement "clear_caches" command (Eric Wong <normalperson@yhbt.net>)
296    * worker: use timeout with read_from_parent() instead of sleep (Eric Wong <normalperson@yhbt.net>)
298    * Fixed issue where too many devices being active could cause the monitor job
299      to be timed out by the watchdog. (Tomas Doran)
301 2011-11-14: Release version 2.55
303    * fixed sources in replication are now a suggestion (dormando <dormando@rydia.net>)
305    * More stats to help troubleshoot rebalance (dormando <dormando@rydia.net>)
307    * return 1 from condthrow if all is well (dormando <dormando@rydia.net>)
309    * schedule fsck replications for the future. (dormando <dormando@rydia.net>)
311    * stop enforcing a source id on new file upload (dormando <dormando@rydia.net>)
313    * restore new file upload replication priority (dormando <dormando@rydia.net>)
315    * Prevent queue related MySQL query hangs (dormando <dormando@rydia.net>)
317 2011-10-29: Release version 2.54
319    * Issue 36: Further insulate from mysql restarts resetting the fid counter (dormando <dormando@rydia.net>)
321    * Allow default class to be overridden again. (dormando <dormando@rydia.net>)
323    * Fix crash in old delete worker code (Daniel Frett <daniel.frett@ccci.org>)
325    * Fix mb_free() counting empty device as missing (git.user <git.user@gmail.com>)
327    * sqlite: fix mogdbsetup failure on new setups (Eric Wong <normalperson@yhbt.net>)
329    * fid size workaround for lighttpd 1.4.x (dormando <dormando@rydia.net>)
331    * Fix various issues in the new mogilefs server query worker. (Tomas Doran <bobtfish@bobtfish.net>)
333    * Allow chunked PUT's of unlimited size (dormando <dormando@rydia.net>)
335    * Fix listing FIDs.
336    * Fix fsck fixing a file from logging a message which appears to be
337      two commands (due to spurious \n). Also fix debug function to
338      not be able to log messages like this.
340 2011-08-12: Release version 2.53
342    * Fix host status not updating for trackers (important)
344 2011-07-30: Release version 2.52
346    * Plugins (such as FilePaths) might want to be run in info/debug commands (Michael Baehr <mbaehr@plos.org>)
348    * schema version 14; support devices > 16TB (dormando <dormando@rydia.net>)
350    * Make FSCK worker handle dead devices (dormando <dormando@rydia.net>)
352    * Throw out old HTTPFile->size code and use LWP (dormando <dormando@rydia.net>)
354    * Remove forced loading of DBD::mysql (dormando <dormando@rydia.net>)
356    * Don't test write on readonly devices (Akzhan Abdulin <akzhan.abdulin@gmail.com>)
358 2011-06-27: Release version 2.51
360    * Add minor backcompat for ZoneLocal and friends (dormando <dormando@rydia.net>)
362    * Only monitor a device if we should monitor it. (dormando <dormando@rydia.net>)
364 2011-06-15: Release version 2.50
366    * Completely rewire meta object caches. Device/Host/Class/Domain caches are
367      now asynchronously loaded via the Monitor worker. This should drastically
368      reduce the number of small queries issued against the master database.
369      (dormando <dormando@rydia.net>)
371    * Don't run workers until Monitor runs once (dormando <dormando@rydia.net>)
373    * s/TYPE/ENGINE/ for innodb initialization (dormando <dormando@rydia.net>)
375    * Create mogile database explicitly with UTF-8 encoding. (Robin H. Johnson <robbat2@gentoo.org>)
377    * Actually use the MOGTEST_* variables for Postgres testing... (Robin H. Johnson <robbat2@gentoo.org>)
379    * Add support for config file includes for Mogstored under lighttpd (Jason Mills <jmmills@cpan.org>)
381    * Make postgres use new delete worker code (Robin H. Johnson <robbat2@gentoo.org>)
383    * New test env variables: MOGTEST_DBROOT{USER,PASS} for easier test usage. (Robin H. Johnson <robbat2@gentoo.org>)
385    * Document test variables. (Robin H. Johnson <robbat2@gentoo.org>)
386    
387    * Support inclusion of custom lighttpd config. (Jason Mills <jmmills@cpan.org>)
389 2011-01-13: Release version 2.46
391    * Fix job_master crash under postgres (Robin H. Johnson <robbat2@gentoo.org>)
393    * Revert "only dbh->ping if not used in over a minute" (dormando <dormando@rydia.net>)
394       *IMPORTANT FIX* if you're using 2.45, you should upgrade to this.
396    * Example application. (dormando <dormando@rydia.net>)
398    * missing $fidid for source_down error message (dormando <dormando@rydia.net>)
400 2011-01-08: Release version 2.45
402    * file_debug command (dormando <dormando@rydia.net>)
404    * add "file_info" command for fetching metadata. (dormando <dormando@rydia.net>)
406    * don't allow clients to upload to the wrong dev (dormando <dormando@rydia.net>)
408    * validate database handles in the right places (dormando <dormando@rydia.net>)
410    * only dbh->ping if not used in over a minute (dormando <dormando@rydia.net>)
412    * make list_fids work with gaps (dormando <dormando@rydia.net>)
414    * Postgres enqueue_fids_* cleanup (Robin H. Johnson <robbat2@gentoo.org>)
416    * Fixes MogileFS::Store::retry_on_deadlock to honor non-deadlock exceptions (Jason Mills <jmmills@cpan.org>)
418    * Implements tests for MogileFS::Store::retry_on_deadlock (Jason Mills <jmmills@cpan.org>)
420    * Implements tests for MogileFS::Store::ignore_replace (Jason Mills <jmmills@cpan.org>)
422    * job_master was never revalidating its dbh handle. (dormando <dormando@rydia.net>)
424    * add a couple useful stats (dormando <dormando@rydia.net>)
426    * Correct iostat command on darwin (Tomas Doran <bobtfish@bobtfish.net>)
428    * Fix test db creation with SQLite (Tomas Doran <bobtfish@bobtfish.net>)
430    * Fix SQLite so tracker at least starts (Tomas Doran <bobtfish@bobtfish.net>)
432    * additional debian packaging fixes (kad <kad@blegh.net>)
434    * debian packaging updates. (Andre Bohr <andrepascha@googlemail.com>)
436    * Documentation updates. (Pyry Hakulinen <pyh@iki.fi>)
438    * HTTPFile returns -1 if the file is missing from the device. Content-Length: 0 is valid and it should return BLEN not MISS. (Pyry Hakulinen <pyh@iki.fi>)
440    * some further editing of the info file. (dormando <dormando@rydia.net>)
442    * Changed repository metadata (Tomas Doran <bobtfish@bobtfish.net>)
444 2010-11-25: Release version 2.44
446         * Fix issue with rebalance not filtering source devs from the
447           destination list.
449         * Make global rebalance limits work (Martijn Lina)
451 2010-10-10: Release version 2.43
453         * Make over-replication fixable again. (sigh)
455         * Fix old bug in MultipleHosts() which would not let you drop from
456           mindev > 1 down to 1.
458 2010-10-08: Release version 2.42
460         * Make FSCK run again (Andre Pascha)
462         * Fix Postgres schema upgrade issue (hopefully)
464 2010-10-06: Release version 2.41
466         * One line change that to fix uprading to 2.40
468 2010-09-28: Release version 2.40
470         * Optimize worker sleep patterns and worker/parent communications.
472         * New rebalance/drain code. See the docs/wiki for how to use.
473           ***NOTE*** Old drain/rebalance code is disabled. Setting a device
474           into drain mode no longer does what you think it would.
475           http://code.google.com/p/mogilefs/wiki/Rebalance
477 2010-08-13: Release version 2.37
479         * Make HTTP DELETE's work reliably
481         * Fix obscure crashes related to "unknown devices"
483         * make it slightly harder to crash trackers with bad slave DB settings
484           (Tomas Doran)
486         * make tracker -> storage node connection timeout configurable.
487           was hardcoded to 2 seconds. (Tomas Doran)
489         * update_class command (Tomas Doran)
491 2010-04-16: Release version 2.36
493         * Bump required version of perlbal for mogstored.
495         * Critical bug fix for creating files.
496           If you have many dead devices, poor filter ordering could cause
497           MogileFS to not consider any alive devices for new files.
499         * Actually default to BIGINT under MySQL...
500           Bug would always initialize new setups to INT.
502 2010-04-02: Release version 2.35
504         * Nuke ancient mogilefs 1.1 replication code.
505           no_unreachable_tracking and old_repl_compat variables are gone.
506           (dormando)
508         * Support modifying class replpolicy strings (requires new
509           mogadm/MogileFS::Client) (dormando)
511         * Print fidid and devid on errors when fsck fails to fix something
512           (t0m)
514         * Allow list_keys to work with a prefix of '0' (dormando)
516         * Print timestamp when logging to STDOUT (t0m)
518         * Sort by free space and weight fewer devices to avoid CPU churn
519           (dormando)
521         * Fix deadlock-related crash bugs in db queue fetch routines.
523         * Fix dependencies in MogileFS::Server (t0m)
525         * Fix bug in list_keys command that prevented searches with a
526           '0' prefix. (Ask Bjørn Hansen)
528 2009-12-05: Release version 2.34
530         * Fix bug in new copycount reduction code. If it was more than off by
531           one it wouldn't reduce the count properly.
533         * Improve accept loop. A reasonably busy tracker could start dropping
534           new client connections too easily.
536 2009-11-24: Release version 2.33
538         * 'mogadm fsck status' will now be more accurate.
540         * Support non-GNU df (paul armstrong)
542         * Remove old !replication command. It's in `mogadm stats` and tends
543           to kill the parent process.
545         * Force refreshing internal monitoring status every 5 minutes. Help
546           work around a potential bug where state changes are missed.
548         * Use new delete queue for tempfile culling
550         * Calculate free space from available space, not total space
551           (todd lipcon)
553         * FSCK code has new tunables to control how aggressive it runs:
554           queue_size_for_fsck (how many fids to keep in file_to_queue table)
555           queue_rate_for_fsck (how many fids to put into the table per second)
556           the generic internal queue is now tunable:
557           internal_queue_limit (how many fids to pull out of a queue table at
558               once. old default was 500).
559           All are tunable by 'mogadm settings set'
560           (dormando)
562         * Replication will now attempt to handle over replication situations.
563           FSCK will catch over replication as a policy violation, and
564           replicate will attempt to fix it. (dormando)
565           (rarely it might need multiple fscks)
567         * Since FIDSizes is no longer used, remove it and remove gearman
568           dependency. (dormando)
570         * FSCK no longer rabidly fills the queue table. (dormando)
572         * Make storage code resilient to rare deadlocks (dormando)
574         * Add 'max_handles' config option to restart a DB connection if there
575           are too many handles to it (victori).
577 2009-10-18: Release version 2.32
579         * No changes... MFS is hard to release due to mogdeps :/
581 2009-10-18: Release version 2.31
583         * Fix create_close race condition. (pipegeek)
585         * Fix bug in reporting of available disk space.
587         * Many minor bug/documentation fixes.
589         * MySQL and Postgres installs now use BIGINT's for fid/length by
590           default. (dormando, robbat2)
592         * Accept 405 responses to MKCOL from the WebDAV server since it often
593           just means that the directory already exists. (Ask Bjørn Hansen)
595         * Fix showing domain and class in mogadm output when there's only the
596           default class in the domain (Mark Imbriaco)
598         * mogstored: pidfile support
600         * New FSCK work and error for BCNT for bad devcount values (they would
601           not otherwise be caught unless the triggered another fix).
603 2009-01-12: Release version 2.30
605         * fsck will now fix broken 'devcount' cols.
607         * schema version bump to 12, and new delete worker code to use the new
608           queue system. delete should be faster and more scalable.
610         * add server setting queue_rate_for_fsck to allow rate limiting how
611           fast the new distributed fsck creates jobs. the original default of
612           10k could utterly defeat wimpy databases.
614         * Support 0 byte files.
616         * Fix a bug where rebalance would accidentally delete copies of a fid.
618         * Create new internal queue management system, with new job
619           'JobMaster'. This greatly reduces database load and increases
620           throughput for workers using the new system.
622         * Add 'no_unreachable_tracking' config. Disables more of the old
623           replication code. Use this if you have no 1.x trackers.
625         * Add hook for alternate replication sources. Obscure, but can be
626           nice.
628         * Add replicate_order_final_choices hook, so multidc replication may
629           pull from the local network if one copy already exists.
631         * Fix subtle bugs in process management.
633         * Allow overriding of default classes.
635 2008-08-18: Release version 2.20
637         * One more time, and hopefully never again. No changes. META.yml
638           fixes.
640 2008-08-18: Release version 2.19
642         * No changes except for META.yml fixes.
643           _should_ be able to upload releases without owning half of CPAN.
645 2008-08-16: Release version 2.18
647         * Add repl_use_get_port option (Brian Lynch)
649         * Remove tempfile data and rows on create_close (Chaos Wang)
651         * Don't delete files accidentally during tempfile table cleanup
653         * Specify username to run the mogstored daemon (Jonathan Share)
655         * Many spelling errors corrected.
657         * PostGres locking routines did not include the hostname for the lock
658           release.
660         * RFC 2518 says we "should" use a trailing slash when calling
661           MKCOL. Some servers (nginx) appears to require it. (Spotted by
662           Timu Eren).
664         * Add server option 'rebalance_ignore_missing' in mogilefsd config
665           that allows the rebalance to ignore files that are already missing
666           when it tries to delete them.
668         * Fix MultipleHosts replication policy to no longer return desperate
669           devices after no longer being desperate, instead returning a state
670           which will queue for retries in the future till it can be truly
671           happy. This prevents files from being replicated to all writable
672           devs when there are two few writable hosts to satisfy the policy.
674         * Add --chmod-mountpoints option to mogautomount, in an attempt to
675           prevent mogstored machines from accidentally writing to their under-
676           lying filesystem.
678         * New optional argument 'startpos' to fsck_reset.
680         * Use correct per-Store port, defaulting to UNIX sockets on localhost.
682         * add --dbport option to mogdbsetup (Ask Bjoern Hansen)
684         * Fix state_change() bug that could make file_to_delete_later
685           grow unnecessarily (Radu Greab)
687         * Add Mogstored::HTTPServer::None to allow using mogstored
688           with unmanaged backend DAV servers.
690         * Add experimental cmd_edit_file. Client requires DAV MOVE and
691           partial PUT on the store to use it.
693         * make mogstored and mogilefsd use the now-bundled dependency
694           Perl modules as a last resort, unless MOGILE_NO_BUILTIN_DEPS
695           environment variable is true.  this makes it easier for people
696           to use mogilefs, without dependency hell.  distros/packagers
697           are expected to ignore (or scoff at) this "feature".  but
698           easier for people working from tarball/svn releases.  bundled
699           dependencies will be updated over time, as needed.
701         * Bring the SQLite store up to date
703         * Increase the timeouts in the test suite
705         * In the test suite, also search for mogadm in /usr/local/bin/ and
706           /usr/local/sbin (spotted by Dean Wilson)
708         * SCHEMA VERSION 10:  'replpolicy' column on 'class' table.
709           it's safe to --ignore-schema-version and run this mogilefsd
710           against an older schema.  new column enables per-class
711           pluggable replication policies.  it was always
712           abstract, but not easy to plugin your own alternatives.
713           see doc/pluggable-replication-policies.txt
715         * add start of a MogileFS::ReplicationPolicy::Union implementation
717         * fix crash in queryworker's create_open command, when a device
718           has its directory made on a mogile storage node (the host of
719           which is being monitored by the 'monitor' process), but the
720           device isn't registered in the devices table yet.
722 2007-07-03: Release version 2.17
724         * get_paths command now takes a pathcount option, defaulting to
725           2, instead of having a hardcoded constant of 2. This allows
726           requesting more than 2 paths to a file.
728         * make fsck log over-replicated files as policy violations.  it
729           won't delete over-replicated files, though, just log
731         * Document how to test MogileFS under doc/testing.txt. You really
732           should read this if you want to use MogileFS to store your data.
734         * Add a safety check to ensure that Postgresql-8.2 or newer is used.
736         * Update mogdbsetup usage, and ensure it chooses the correct admin
737           username automatically.
739         * Document the --type option to mogdbsetup.
741         * Introduce the PostGres Store implementation. The locking system might
742           still have issues, beware of stale locks! Initial prototype by Radu
743           Greab <rg@yx.ro>, and developed heavily by Robin H. Johnson
744           <robbat2@gentoo.org>.
746         * start of support to make mogstored wrap Apache + web_dav
748         * Remove duplicated [fsck] in log output of Fsck worker.
750         * Handle HiRes gettimeofday correctly to get useful results. Arrays are
751           important. This gives us correct timing output.
753         * Handle input to log() correctly. Based on the implementation of
754           Sys::Syslog::syslog(), produces no ugly warnings, and makes sure that
755           printf stuff works nicely.
757         * The unix_timestamp function belongs to the Store, not other classes.
758           Need to add test cases for process_deletes and stats.
760         * Using NULL during an INSERT for the AUTO_INCREMENT column does not
761           work very well outside of MySQL. Pass the correct number of arguments
762           to the INSERT instead.
764         * Clean up all raw usages of UNIX_TIMESTAMP() function, in preparation
765           for database independence. If you need the unix timestamp, include the output
766           of $self->unix_timestamp directly into your query.
768         * Alter $0 so that the scripts show up as '$SCRIPTNAME' in the process
769           listing instead of '/usr/bin/perl $SCRIPTNAME'. This makes init.d
770           scripts easier to manage.
772         * make mogstored's lighttpd config use mod_status for "/", so
773           mogadm doesn't think it's dead when it previously saw a 404
774           (Justin Huff <jjhuff@mspin.net>)
776         * remove Linux::AIO support, now that Perlbal has removed it as well,
777           and because Linux::AIO support (when Perlbal then chooses
778           IO::AIO) was hanging mogstored on shutdown.  so also add a
779           mogstored shutdown test (after a full daemonization of it)
781         * make Mgd::validate_dbh() re-check/ping slave dbhs as well.
782           (problem mentioned by Steven Shou <steven.shou@verizon.net>)
784         * support drive identifiers above sdz (Arjan <info@bouncetek.com>)
786         * make mogstored's iostat child process properly shutdown,
787           even when iostat binary isn't installed.  (previously
788           it was stuck in a loop every 10 seconds, hoping for
789           iostat to be installed, but never respecting parent
790           process' death)
792         * Change delete worker to use new DeviceStates interface.
794         * Fix get_paths to honor new device state of 'drain' via new
795           DeviceStates interface.
797         * use significantly less CPU when re-broadcasting around
798           iostat device utilization% to child processes.  (future:
799           don't rebroadcast at all and use shared memory)
801         * slightly faster fsck (do less syscalls)
803         * efficiency: don't broadcast dup state information to children
804           (track in parent what children know already)
806         * if using Gearman::Server >= 1.09, respawn the fidsizes
807           worker if it dies.
809 2007-05-09: Release version 2.16
811         * BUG FIX from 2.15:  partially written but never closed
812           tempfiles weren't being cleaned up properly.
814         * start to work better when compiled as a stand-alone
815           PAR all-in-one script/archive
817 2007-05-07: Release version 2.15 ("fsck/drain/rebalance")
819         * minor bug fixes and enhancements for MultipleHosts replication
820           policy.  bunch of corner cases now checked with new tests.
821           now easy to write more replication policy tests in future.
823         * replication policies can now return "desperate" requests,
824           signalling that a replication reassessment should be
825           enqueued for the future, to see if things could be improved.
826           (that part's not currently implemented, but the real feature
827            and motivation is that the rebalancer now won't delete a
828            DevFID if it results in a desperate move, only an ideal move. )
830         * replication policies now can optionally return a new return
831           value of the (new) type MogileFS::ReplicationRequest, which
832           has pretty accessor names, can suggest multiple places,
833           can indicate non-ideal emergency replication decisions.
834           old plugins' return values will be transparently upgraded
835           to the equivalent new return value objects.
837         * adding new device state: "drain".  it's a hybrid of "dead"
838           (in that files are migrated off it) and "readonly", it that
839           it still serves traffic... it just doesn't get new files.
840           this also introduces the new object-oriented DeviceState class,
841           and device_state($name) utility function to get the DeviceState
842           singleton by name
844         * internal code cleanup.  notably, kill the old & nasty legacy
845           'find_deviceid' function which was ridiculously long and hairy.
846           the two callers are now more readable with sorts/greps/etc.
848         * make mogstored's devN/usage writing process (DiskUsage) be less
849           racy with the mogilefsd monitoring code... don't open file for
850           write... open read/write, then in one write system call, write
851           the entire file, with newline padding at end to cover old data,
852           then truncate it if necessary.  should remove harmless (but scary)
853           error messages previously reported by the mogilefsd monitor
854           about zero-length usage files.
856         * new protocol commands to list/set (certain) server settings,
857           with value sanity checking (see MogileFS::Config for which
858           are settable, and with what values).  needed for "enable_rebalance".
859           was partially enabled before for slave settings.  also needed
860           for memcached support before, which was never possible to
861           set with mogadm, only with db tweaking.
863         * make mogilefsd fsck use new mogstored fid_sizes command, to
864           do bulk stats.  speeds up fscks a ton.
866         * be robust against system clocks that go backwards between
867           gettimeofday calls:
868           http://lists.danga.com/pipermail/mogilefs/2007-April/000897.html
870         * Put gearman server in mogstored process, add worker
871           'mogstored-fidsizes' which runs as subprocess of mogstored. Add
872           side-channel command 'fid_sizes' which allows us to quickly enumerate
873           and get sizes for files across entire devices on a storage node.
875         * remove all code like $state eq "readonly", $state=~ /^dead|down$/
876           and instead convert it into specific questions on policy/traits
877           of given state, like $dev->should_put_new_files_on, or
878           $dev->should_drain_files_off.  see MogileFS::DeviceState,
879           objects of which are accessed via $dev->dstate, or new
880           MogileFS::Util device_state($name) wrapper.
882         * start of rebalance support.  (where replication workers, in their
883           idle time, can rearrange files to even out disk space and/or IO
884           activity on storage nodes... policy isn't hard-coded, and is
885           in fact currently random)
887         * lighttpd support in both mogilefsd and mogstored.  passes test
888           suite with environment MOGSTORED_SERVER_TYPE=lighttpd set now.
890         * abstract out the HTTP server support in mogstored, so
891           mogstored isn't just a perlbal wrapper, but an anything
892           wrapper. (in particular, lighttpd and apache)  mogstored still
893           exists for all its other misc admin/monitoring functions,
894           but can then manage/configure apache/lighttpd child process(es).
895           so far they're just stubbed out.
897         * split mogstored into separate files per class, rather than one
898           large script.
900 2007-04-24: Release version 2.10
902         * bug from earlier refactoring:  changing some 'next' to 'return'
903           in MogileFS::Device's create_directory method.  (thanks to
904           Justin Huff <jjhuff@mspin.net>)
906         * make sure mogdbsetup doesn't upgrade an existing table (with
907           potentially lot of data) from MyISAM to InnoDB.  just warn.
908           only new tables should become InnoDB on creation.  also,
909           detect InnoDB even on old MySQL 4.0.x, not just 4.1/5.0.
911         * make fsck faster by reducing number of db queries (both
912           reads and writes), though more unrelated fastness remains to
913           be done.
915         * make fsck_status faster (keep summary stats of evcode counts,
916           rather than doing a full GROUP BY query all the time)
918 2007-04-20: Release version 2.09
920         * filesystem checker (Fsck worker).  off by default, unless
921           it's enabled via protocol.  Control/monitor it with mogadm
922           in MogileFS-Utils 2.08, which needs MogileFS::Client 1.06.
924         * replication speed-up on configurations with only 1 host.
925           (replication would randomly have no suggestions before, when
926            there was only 1 target host, so replication would be rescheduled
927            until the future, when random returned a different device on
928            that host)
930 2007-04-17: Release version 2.08
932         * (no runtime-visible changes from 2.07)
934         * mogilefsd: remove incomplete "Checker" worker, replace with
935           incomplete "Fsck" worker.
937         * test cleanup/robustness improvements.  properly skips testing when
938           testing deps not found.  but searches harder for them now, too.
939           tests run under "make disttest".
941         * packaging cleanups, released using ShipIt.
944 2007-03/04:
946         * mogilefsd: Split Plugin::MetaData and Plugin::FilePaths into their own distributions.
948         * mogilefsd: Fix mogdbsetup to not ask empty questions.
950         * mogilefsd: command line/config file support for listening on specific IPs, also
951            support for listening on multiple IPs/ports
953 2007-03-19:
954         * mogstored: use XS HTTPHeaders by default, unless disabled with environment variable
956         * mogilefsd: memcache support for get_paths (see doc/memcache-support.txt)
958 2007-03-16:
959         * mogstored: make child processes be exec'ed (as as their own scripts, not inheriting
960           Perlbal, Linux::AIO/IO::AIO, etc baggage).  so they don't own listening
961           sockets, pipes to child workers, signal handlers, etc.  just a lot
962           cleaner now, and SIGTERM, SIGINT properly shut everything down now,
963           both in foreground and as daemon
965 2007-03-15:
966         * mogstored: this changelog is totally neglected.  :/  see svn log.
968         * mogstored: make perlbal's "shutdown graceful" work, by not doing
969           sidechannel accepting ourselves (which never hung up),
970           but subclass Perlbal's TCPListener class, which does it
971           all correctly.
973 2006-12/2007-01:  (2.00_05)
974         * mogilefsd: everything converted to OO API internally.  old internal APIs removed.
976         * mogilefsd: be database-agnostic.  Currently only works with MySQL (and
977            SQLite as a joke/demo), but Pg/Oracle coming in the future.
979         * mogilefsd: built-in I/O activity monitoring between mogstored/mogilefsd Monitor
980            now.
982         * mogilefsd: much improved internal communication between worker processes
984         * mogilefsd: start of better docs
986 2006-12-28
987         * mogilefsd: pidfile support (Radu Greab <radu@yx.ro>)
989 2006-12-28
990 2006-12-27
991         * mogilefsd: remove all old internal APIs, update everything to use new OO APIs,
992            expanding OO APIs where necessary (lots of places).  so much more
993            beautifully hackable now.
995         * mogstored: kill child processes (diskusage and iostat) when being killed.
997 2006-11-05:
998         * mogstored: set aio threads after daemonizing.  needed by Linux::AIO/IO::AIO, it seems?
1000 2006-09-29
1001         * mogilefsd: remove non-HTTP mode ("NFS mode") from the server
1003 2006-09-23:
1004         * mogstored: refuse to start up with missing Linux::AIO/IO::AIO or broken Linux::AIO
1006 2006-09-04:
1007         * mogstored: set aio_threads as a function of number of disks
1009 2006-07 -> 2006-09
1010         * mogilefsd: major refactoring/cleanup/new features ("MogileFS 2.0")
1012 2006-03-01 (Brad)
1013         * mogilefsd: fix dataloss bug when the 'tempfile' table is InnoDB and the
1014            server is restarted while the tempfile table is empty.
1016 2006-02-28 (Jr)
1017         * mogilefsd: allow create_open to take optional fid parameter which enables you to
1018         dictate which fid to use internally and to not rely on MySQL's auto_increment
1020 2006-01-10 (Brad)
1021         * mogilefsd: make Mgd::get_device_summary() always return all devices, regardless
1022         of status.
1024         * mogilefsd: update all callers of get_device_summary to filter on the device
1025         status, if they need to. (provided more clarity into what
1026         callers' intentions were...)
1028         * mogilefsd: add a new device state 'readonly' which means: it can be read from
1029         from clients, it can be replicated from, but no new files can go
1030         on it or be replicated onto it. and it also reaps, meaning the
1031         device is fucked. the filesystem probably ate itself.
1033 2005-08-10:
1034         * mogstored: write out usage files for devices, even if they're not on their own mount point.
1035           also explicitly include the '-k' flag to df, so we know they're KiB.
1037 2005-08-07:
1038         * mogstored: new config syntax and command line options