Begin handling deadlock errors.
[MogileFS-Server.git] / CHANGES
blob64a88c62c4399188fbbd7ff66112bdda9cf9d49e
1         * Add 'max_handles' config option to restart a DB connection if there
2           are too many handles to it (victori).
3  
4 2009-10-18: Release version 2.32
6         * No changes... MFS is hard to release due to mogdeps :/
8 2009-10-18: Release version 2.31
10         * Fix create_close race condition. (pipegeek)
12         * Fix bug in reporting of available disk space.
14         * Many minor bug/documentation fixes.
16         * MySQL and Postgres installs now use BIGINT's for fid/length by
17           default. (dormando, robbat2)
19         * Accept 405 responses to MKCOL from the WebDAV server since it often
20           just means that the directory already exists. (Ask Bjørn Hansen)
22         * Fix showing domain and class in mogadm output when there's only the
23           default class in the domain (Mark Imbriaco)
25         * mogstored: pidfile support
27         * New FSCK work and error for BCNT for bad devcount values (they would
28           not otherwise be caught unless the triggered another fix).
30 2009-01-12: Release version 2.30
32         * fsck will now fix broken 'devcount' cols.
34         * schema version bump to 12, and new delete worker code to use the new
35           queue system. delete should be faster and more scalable.
37         * add server setting queue_rate_for_fsck to allow rate limiting how
38           fast the new distributed fsck creates jobs. the original default of
39           10k could utterly defeat wimpy databases.
41         * Support 0 byte files.
43         * Fix a bug where rebalance would accidentally delete copies of a fid.
45         * Create new internal queue management system, with new job
46           'JobMaster'. This greatly reduces database load and increases
47           throughput for workers using the new system.
49         * Add 'no_unreachable_tracking' config. Disables more of the old
50           replication code. Use this if you have no 1.x trackers.
52         * Add hook for alternate replication sources. Obscure, but can be
53           nice.
55         * Add replicate_order_final_choices hook, so multidc replication may
56           pull from the local network if one copy already exists.
58         * Fix subtle bugs in process management.
60         * Allow overriding of default classes.
62 2008-08-18: Release version 2.20
64         * One more time, and hopefully never again. No changes. META.yml
65           fixes.
67 2008-08-18: Release version 2.19
69         * No changes except for META.yml fixes.
70           _should_ be able to upload releases without owning half of CPAN.
72 2008-08-16: Release version 2.18
74         * Add repl_use_get_port option (Brian Lynch)
76         * Remove tempfile data and rows on create_close (Chaos Wang)
78         * Don't delete files accidentally during tempfile table cleanup
80         * Specify username to run the mogstored daemon (Jonathan Share)
82         * Many spelling errors corrected.
84         * PostGres locking routines did not include the hostname for the lock
85           release.
87         * RFC 2518 says we "should" use a trailing slash when calling
88           MKCOL. Some servers (nginx) appears to require it. (Spotted by
89           Timu Eren).
91         * Add server option 'rebalance_ignore_missing' in mogilefsd config
92           that allows the rebalance to ignore files that are already missing
93           when it tries to delete them.
95         * Fix MultipleHosts replication policy to no longer return desperate
96           devices after no longer being desperate, instead returning a state
97           which will queue for retries in the future till it can be truly
98           happy. This prevents files from being replicated to all writable
99           devs when there are two few writable hosts to satisfy the policy.
101         * Add --chmod-mountpoints option to mogautomount, in an attempt to
102           prevent mogstored machines from accidentally writing to their under-
103           lying filesystem.
105         * New optional argument 'startpos' to fsck_reset.
107         * Use correct per-Store port, defaulting to UNIX sockets on localhost.
109         * add --dbport option to mogdbsetup (Ask Bjoern Hansen)
111         * Fix state_change() bug that could make file_to_delete_later
112           grow unnecessarily (Radu Greab)
114         * Add Mogstored::HTTPServer::None to allow using mogstored
115           with unmanaged backend DAV servers.
117         * Add experimental cmd_edit_file. Client requires DAV MOVE and
118           partial PUT on the store to use it.
120         * make mogstored and mogilefsd use the now-bundled dependency
121           Perl modules as a last resort, unless MOGILE_NO_BUILTIN_DEPS
122           environment variable is true.  this makes it easier for people
123           to use mogilefs, without dependency hell.  distros/packagers
124           are expected to ignore (or scoff at) this "feature".  but
125           easier for people working from tarball/svn releases.  bundled
126           dependencies will be updated over time, as needed.
128         * Bring the SQLite store up to date
130         * Increase the timeouts in the test suite
132         * In the test suite, also search for mogadm in /usr/local/bin/ and
133           /usr/local/sbin (spotted by Dean Wilson)
135         * SCHEMA VERSION 10:  'replpolicy' column on 'class' table.
136           it's safe to --ignore-schema-version and run this mogilefsd
137           against an older schema.  new column enables per-class
138           pluggable replication policies.  it was always
139           abstract, but not easy to plugin your own alternatives.
140           see doc/pluggable-replication-policies.txt
142         * add start of a MogileFS::ReplicationPolicy::Union implementation
144         * fix crash in queryworker's create_open command, when a device
145           has its directory made on a mogile storage node (the host of
146           which is being monitored by the 'monitor' process), but the
147           device isn't registered in the devices table yet.
149 2007-07-03: Release version 2.17
151         * get_paths command now takes a pathcount option, defaulting to
152           2, instead of having a hardcoded constant of 2. This allows
153           requesting more than 2 paths to a file.
155         * make fsck log over-replicated files as policy violations.  it
156           won't delete over-replicated files, though, just log
158         * Document how to test MogileFS under doc/testing.txt. You really
159           should read this if you want to use MogileFS to store your data.
161         * Add a safety check to ensure that Postgresql-8.2 or newer is used.
163         * Update mogdbsetup usage, and ensure it chooses the correct admin
164           username automatically.
166         * Document the --type option to mogdbsetup.
168         * Introduce the PostGres Store implementation. The locking system might
169           still have issues, beware of stale locks! Initial prototype by Radu
170           Greab <rg@yx.ro>, and developed heavily by Robin H. Johnson
171           <robbat2@gentoo.org>.
173         * start of support to make mogstored wrap Apache + web_dav
175         * Remove duplicated [fsck] in log output of Fsck worker.
177         * Handle HiRes gettimeofday correctly to get useful results. Arrays are
178           important. This gives us correct timing output.
180         * Handle input to log() correctly. Based on the implementation of
181           Sys::Syslog::syslog(), produces no ugly warnings, and makes sure that
182           printf stuff works nicely.
184         * The unix_timestamp function belongs to the Store, not other classes.
185           Need to add test cases for process_deletes and stats.
187         * Using NULL during an INSERT for the AUTO_INCREMENT column does not
188           work very well outside of MySQL. Pass the correct number of arguments
189           to the INSERT instead.
191         * Clean up all raw usages of UNIX_TIMESTAMP() function, in preparation
192           for database independence. If you need the unix timestamp, include the output
193           of $self->unix_timestamp directly into your query.
195         * Alter $0 so that the scripts show up as '$SCRIPTNAME' in the process
196           listing instead of '/usr/bin/perl $SCRIPTNAME'. This makes init.d
197           scripts easier to manage.
199         * make mogstored's lighttpd config use mod_status for "/", so
200           mogadm doesn't think it's dead when it previously saw a 404
201           (Justin Huff <jjhuff@mspin.net>)
203         * remove Linux::AIO support, now that Perlbal has removed it as well,
204           and because Linux::AIO support (when Perlbal then chooses
205           IO::AIO) was hanging mogstored on shutdown.  so also add a
206           mogstored shutdown test (after a full daemonization of it)
208         * make Mgd::validate_dbh() re-check/ping slave dbhs as well.
209           (problem mentioned by Steven Shou <steven.shou@verizon.net>)
211         * support drive identifiers above sdz (Arjan <info@bouncetek.com>)
213         * make mogstored's iostat child process properly shutdown,
214           even when iostat binary isn't installed.  (previously
215           it was stuck in a loop every 10 seconds, hoping for
216           iostat to be installed, but never respecting parent
217           process' death)
219         * Change delete worker to use new DeviceStates interface.
221         * Fix get_paths to honor new device state of 'drain' via new
222           DeviceStates interface.
224         * use significantly less CPU when re-broadcasting around
225           iostat device utilization% to child processes.  (future:
226           don't rebroadcast at all and use shared memory)
228         * slightly faster fsck (do less syscalls)
230         * efficiency: don't broadcast dup state information to children
231           (track in parent what children know already)
233         * if using Gearman::Server >= 1.09, respawn the fidsizes
234           worker if it dies.
236 2007-05-09: Release version 2.16
238         * BUG FIX from 2.15:  partially written but never closed
239           tempfiles weren't being cleaned up properly.
241         * start to work better when compiled as a stand-alone
242           PAR all-in-one script/archive
244 2007-05-07: Release version 2.15 ("fsck/drain/rebalance")
246         * minor bug fixes and enhancements for MultipleHosts replication
247           policy.  bunch of corner cases now checked with new tests.
248           now easy to write more replication policy tests in future.
250         * replication policies can now return "desperate" requests,
251           signalling that a replication reassessment should be
252           enqueued for the future, to see if things could be improved.
253           (that part's not currently implemented, but the real feature
254            and motivation is that the rebalancer now won't delete a
255            DevFID if it results in a desperate move, only an ideal move. )
257         * replication policies now can optionally return a new return
258           value of the (new) type MogileFS::ReplicationRequest, which
259           has pretty accessor names, can suggest multiple places,
260           can indicate non-ideal emergency replication decisions.
261           old plugins' return values will be transparently upgraded
262           to the equivalent new return value objects.
264         * adding new device state: "drain".  it's a hybrid of "dead"
265           (in that files are migrated off it) and "readonly", it that
266           it still serves traffic... it just doesn't get new files.
267           this also introduces the new object-oriented DeviceState class,
268           and device_state($name) utility function to get the DeviceState
269           singleton by name
271         * internal code cleanup.  notably, kill the old & nasty legacy
272           'find_deviceid' function which was ridiculously long and hairy.
273           the two callers are now more readable with sorts/greps/etc.
275         * make mogstored's devN/usage writing process (DiskUsage) be less
276           racy with the mogilefsd monitoring code... don't open file for
277           write... open read/write, then in one write system call, write
278           the entire file, with newline padding at end to cover old data,
279           then truncate it if necessary.  should remove harmless (but scary)
280           error messages previously reported by the mogilefsd monitor
281           about zero-length usage files.
283         * new protocol commands to list/set (certain) server settings,
284           with value sanity checking (see MogileFS::Config for which
285           are settable, and with what values).  needed for "enable_rebalance".
286           was partially enabled before for slave settings.  also needed
287           for memcached support before, which was never possible to
288           set with mogadm, only with db tweaking.
290         * make mogilefsd fsck use new mogstored fid_sizes command, to
291           do bulk stats.  speeds up fscks a ton.
293         * be robust against system clocks that go backwards between
294           gettimeofday calls:
295           http://lists.danga.com/pipermail/mogilefs/2007-April/000897.html
297         * Put gearman server in mogstored process, add worker
298           'mogstored-fidsizes' which runs as subprocess of mogstored. Add
299           side-channel command 'fid_sizes' which allows us to quickly enumerate
300           and get sizes for files across entire devices on a storage node.
302         * remove all code like $state eq "readonly", $state=~ /^dead|down$/
303           and instead convert it into specific questions on policy/traits
304           of given state, like $dev->should_put_new_files_on, or
305           $dev->should_drain_files_off.  see MogileFS::DeviceState,
306           objects of which are accessed via $dev->dstate, or new
307           MogileFS::Util device_state($name) wrapper.
309         * start of rebalance support.  (where replication workers, in their
310           idle time, can rearrange files to even out disk space and/or IO
311           activity on storage nodes... policy isn't hard-coded, and is
312           in fact currently random)
314         * lighttpd support in both mogilefsd and mogstored.  passes test
315           suite with environment MOGSTORED_SERVER_TYPE=lighttpd set now.
317         * abstract out the HTTP server support in mogstored, so
318           mogstored isn't just a perlbal wrapper, but an anything
319           wrapper. (in particular, lighttpd and apache)  mogstored still
320           exists for all its other misc admin/monitoring functions,
321           but can then manage/configure apache/lighttpd child process(es).
322           so far they're just stubbed out.
324         * split mogstored into separate files per class, rather than one
325           large script.
327 2007-04-24: Release version 2.10
329         * bug from earlier refactoring:  changing some 'next' to 'return'
330           in MogileFS::Device's create_directory method.  (thanks to
331           Justin Huff <jjhuff@mspin.net>)
333         * make sure mogdbsetup doesn't upgrade an existing table (with
334           potentially lot of data) from MyISAM to InnoDB.  just warn.
335           only new tables should become InnoDB on creation.  also,
336           detect InnoDB even on old MySQL 4.0.x, not just 4.1/5.0.
338         * make fsck faster by reducing number of db queries (both
339           reads and writes), though more unrelated fastness remains to
340           be done.
342         * make fsck_status faster (keep summary stats of evcode counts,
343           rather than doing a full GROUP BY query all the time)
345 2007-04-20: Release version 2.09
347         * filesystem checker (Fsck worker).  off by default, unless
348           it's enabled via protocol.  Control/monitor it with mogadm
349           in MogileFS-Utils 2.08, which needs MogileFS::Client 1.06.
351         * replication speed-up on configurations with only 1 host.
352           (replication would randomly have no suggestions before, when
353            there was only 1 target host, so replication would be rescheduled
354            until the future, when random returned a different device on
355            that host)
357 2007-04-17: Release version 2.08
359         * (no runtime-visible changes from 2.07)
361         * mogilefsd: remove incomplete "Checker" worker, replace with
362           incomplete "Fsck" worker.
364         * test cleanup/robustness improvements.  properly skips testing when
365           testing deps not found.  but searches harder for them now, too.
366           tests run under "make disttest".
368         * packaging cleanups, released using ShipIt.
371 2007-03/04:
373         * mogilefsd: Split Plugin::MetaData and Plugin::FilePaths into their own distributions.
375         * mogilefsd: Fix mogdbsetup to not ask empty questions.
377         * mogilefsd: command line/config file support for listening on specific IPs, also
378            support for listening on multiple IPs/ports
380 2007-03-19:
381         * mogstored: use XS HTTPHeaders by default, unless disabled with environment variable
383         * mogilefsd: memcache support for get_paths (see doc/memcache-support.txt)
385 2007-03-16:
386         * mogstored: make child processes be exec'ed (as as their own scripts, not inheriting
387           Perlbal, Linux::AIO/IO::AIO, etc baggage).  so they don't own listening
388           sockets, pipes to child workers, signal handlers, etc.  just a lot
389           cleaner now, and SIGTERM, SIGINT properly shut everything down now,
390           both in foreground and as daemon
392 2007-03-15:
393         * mogstored: this changelog is totally neglected.  :/  see svn log.
395         * mogstored: make perlbal's "shutdown graceful" work, by not doing
396           sidechannel accepting ourselves (which never hung up),
397           but subclass Perlbal's TCPListener class, which does it
398           all correctly.
400 2006-12/2007-01:  (2.00_05)
401         * mogilefsd: everything converted to OO API internally.  old internal APIs removed.
403         * mogilefsd: be database-agnostic.  Currently only works with MySQL (and
404            SQLite as a joke/demo), but Pg/Oracle coming in the future.
406         * mogilefsd: built-in I/O activity monitoring between mogstored/mogilefsd Monitor
407            now.
409         * mogilefsd: much improved internal communication between worker processes
411         * mogilefsd: start of better docs
413 2006-12-28
414         * mogilefsd: pidfile support (Radu Greab <radu@yx.ro>)
416 2006-12-28
417 2006-12-27
418         * mogilefsd: remove all old internal APIs, update everything to use new OO APIs,
419            expanding OO APIs where necessary (lots of places).  so much more
420            beautifully hackable now.
422         * mogstored: kill child processes (diskusage and iostat) when being killed.
424 2006-11-05:
425         * mogstored: set aio threads after daemonizing.  needed by Linux::AIO/IO::AIO, it seems?
427 2006-09-29
428         * mogilefsd: remove non-HTTP mode ("NFS mode") from the server
430 2006-09-23:
431         * mogstored: refuse to start up with missing Linux::AIO/IO::AIO or broken Linux::AIO
433 2006-09-04:
434         * mogstored: set aio_threads as a function of number of disks
436 2006-07 -> 2006-09
437         * mogilefsd: major refactoring/cleanup/new features ("MogileFS 2.0")
439 2006-03-01 (Brad)
440         * mogilefsd: fix dataloss bug when the 'tempfile' table is InnoDB and the
441            server is restarted while the tempfile table is empty.
443 2006-02-28 (Jr)
444         * mogilefsd: allow create_open to take optional fid parameter which enables you to
445         dictate which fid to use internally and to not rely on MySQL's auto_increment
447 2006-01-10 (Brad)
448         * mogilefsd: make Mgd::get_device_summary() always return all devices, regardless
449         of status.
451         * mogilefsd: update all callers of get_device_summary to filter on the device
452         status, if they need to. (provided more clarity into what
453         callers' intentions were...)
455         * mogilefsd: add a new device state 'readonly' which means: it can be read from
456         from clients, it can be replicated from, but no new files can go
457         on it or be replicated onto it. and it also reaps, meaning the
458         device is fucked. the filesystem probably ate itself.
460 2005-08-10:
461         * mogstored: write out usage files for devices, even if they're not on their own mount point.
462           also explicitly include the '-k' flag to df, so we know they're KiB.
464 2005-08-07:
465         * mogstored: new config syntax and command line options