Sync table files after CREATE (of non-temp table), DROP, RENAME,
TRUNCATE, sync directories and symlinks (for the 3 first commands).
Comments for future log records.
In ma_rename(), if rename of index works and then rename of data fails,
try to undo the rename of the index to leave a consistent state.
mysys/my_symlink.c:
sync directory after creation of a symbolic link in it, if asked
mysys/my_sync.c:
comment. Fix for when the file's name has no directory in it.
storage/maria/ma_create.c:
sync files and links and dirs when creating a non-temporary table.
Optimizations of the above to reduce syncs in the common cases:
* if index file and data file have the exact same paths (regular
and link), sync the directories (of regular and link) only once
after creating the last file (the data file).
* don't sync the data file if we didn't write to it (always true
in our builds).
storage/maria/ma_delete_all.c:
sync files after truncating a table
storage/maria/ma_delete_table.c:
sync files and symbolic links and dirs after dropping a table
storage/maria/ma_extra.c:
a function which wraps the sync of the index file and the sync of the
data file.
storage/maria/ma_locking.c:
using a wrapper function
storage/maria/ma_rename.c:
sync files and symbolic links and dirs after renaming a table.
If rename of index works and then rename of data fails, try to undo
the rename of the index to leave a consistent state. That is just a
try, it may fail...
storage/maria/ma_test3.c:
warning to not pay attention to this test.
storage/maria/maria_def.h:
declaration for the function added to ma_extra.c
make it return an error (except if certain errno), test this error in
callers. Do a single my_sync_dir() in my_rename() if possible.
include/my_global.h:
better have a symbol name talking about the feature, use it in the
code of the feature, and define the symbol once depending on the
platform, rather than have the platform "tested" in the code
of the feature several times.
include/my_sys.h:
my_sync_dir() now can return error
mysys/my_create.c:
my_sync_dir() can now return an error
mysys/my_delete.c:
my_sync_dir() can now return an error
mysys/my_rename.c:
my_sync_dir() can now return an error.
Do a single sync if "from" and "to" are the same directory.
#ifdef here to not even compile dirname_part() if useless.
mysys/my_sync.c:
more comments.
A compilation error if no way to make my_sync() work (I guess
we don't want to ship a binary which cannot do any sync at all;
users of strange OSes compile from source and can remove
the #error).
my_sync_dir() now returns an error (except for certain errno values
considered ok; EIO "input/output error" is not ok).
sql/unireg.cc:
my_sync_dir() now returns an error which must be tested
1) on Mac OS X >=10.3, fcntl() is recommended over fsync (from the
man page: "[With fsync()] the disk drive may also re-order the data
so that later writes may be present while earlier writes are not.
Applications such as databases that require a strict ordering of writes
should use F_FULLFSYNC to ensure their data is written in the order
they expect"). I have seen two other pieces of software changing from
fsync to F_FULLFSYNC on Mac OS X.
2) to make a file creation/deletion/renaming durable on Linux (at least
ext2 as I have tested) (see "man fsync"), a fsync() on the directory
is needed: new functions to do that, and a flag MY_SYNC_DIR to do
it in my_create/my_delete/my_rename.
3) now using this directory syncing when creating he frm if
opt_sync_frm, and for Maria's control file when it is created.
include/my_sys.h:
new flag to my_create/my_delete/my_rename, which asks to sync the
directory after the operation is done (currently does nothing except
on Linux)
libmysql/CMakeLists.txt:
my_create() now depends on my_sync() so my_sync is needed for libmysql
libmysql/Makefile.shared:
my_create() now depends on my_sync() so my_sync is needed for libmysql
mysys/my_create.c:
my_create() can now sync the directory if asked for
mysys/my_delete.c:
my_delete() can now sync the directory if asked for
mysys/my_open.c:
it was a bug that my_close() is done on fd but a positive fd would
still be returned, by my_register_filename().
mysys/my_rename.c:
my_rename() can now sync the two directories (the one of "from" and
the one of "to") if asked for.
mysys/my_sync.c:
On recent Mac OS X, fcntl(F_FULLFSYNC) is recommended over fsync()
(see "man fsync" on Mac OS X 10.3).
my_sync_dir(): to sync a directory after a file creation/deletion/
renaming; can be called directly or via MY_SYNC_DIR in my_create/
my_delete/my_rename(). No-op except on Linux (see "man fsync" on Linux).
my_sync_dir_from_file(): same as above, just more practical when the
caller has a file name but no directory name ready.
Should the #warning even be a #error? I mean do we want to release
binaries which don't guarantee any durability?
sql/log.cc:
a TODO for the future.
sql/unireg.cc:
If we sync the frm it makes sense to also sync its creation in the
directory.
storage/maria/ma_control_file.c:
control file is vital, try to make it to disk
#warning to warn (!) about current issues in the pagecache hindering
checkpoint (we will have to fix them!).
mysys/mf_pagecache.c:
fix for compiler warning (signed-ness).
#warning to warn (!) about current issues in the pagecache hindering
checkpoint (we will have to fix them!).
Moving the test_pagecache_ tests from mysys to unittest/mysys.
Means fixing includes to work with the new directory, some Makefile.am
editing, replacing memset() with bfill().
test_page_cache_*.c renamed to mf_pagecache_*-t.c (-t is the standard
suffix for tests in the mytap protocol).
Also added plan() and exit_status() calls to tests.
Sanja, I put some TODOs for you at the start of mf_pagecache_*.c
unittest/mysys/test_file.h:
Rename: mysys/test_file.h -> unittest/mysys/test_file.h
mysys/Makefile.am:
pagecache test files move to top/unittest/mysys
mysys/mf_pagecache.c:
my_bit.h needed to compile.
unittest/mysys/Makefile.am:
INCLUDES is a better place for includes than AM_CPPFLAGS (the latter
get overriden by prog_CPPFLAGS, which is not desirable here).
Adding pagecache's test programs (moved from mysys);
test_pagecache_* has been renamed to mf_pagecache*-t
(-t is the required suffix for test executables in the mytap framework).
unittest/mysys/mf_pagecache_consist.c:
fixing includes to work with the new directory.
The test must return an exit code informing if any part failed.
TODOs for Sanja.
unittest/mysys/mf_pagecache_single.c:
fixing includes to work with new directory.
adding a plan() to account for the number of tests.
Adding exit_status() to tell how many tests failed.
memset() was giving a compilation warning (implicit declaration etc),
properly due to me removing stdio.h etc, so I replaced it with bfill().
TODOs for Sanja.
unittest/mysys/test_file.c:
moved from mysys (piece of the page cache tests) and includes fixed.
fixed bug in the pagecache which lead to assertion in multithread test
include/pagecache.h:
post review fixes:
- comments fixed
- types fixed
- keyword 'extern' added to all interface functions
mysys/mf_pagecache.c:
postreview fixes:
- comments fixed and added
- types fixed
- typo fixed
Added write locking flag set when we took a block from LRU and going to free it (to prevent locking/using it for write)
mysys/test_pagecache_consist.c:
pagecache size reduced (to be able reproduce problems found by Guilhem)
typo in the comment fixed
This makes an expected warning message about the index file's size, go away,
as intended.
storage/maria/ma_test_all.sh:
importing change made to MyISAM's mi_test_all, into Maria's ma_test_all
This makes an expected warning message about the index file's size, go away,
as intended.
storage/maria/tablockman.c:
comments. bugfix - a special case in release_locks
storage/maria/unittest/lockman1-t.c:
updated
storage/maria/unittest/lockman2-t.c:
new tests
storage/maria/unittest/lockman1-t.c:
New BitKeeper file ``storage/maria/unittest/lockman1-t.c''
storage/maria/tablockman.c:
New BitKeeper file ``storage/maria/tablockman.c''
storage/maria/tablockman.h:
New BitKeeper file ``storage/maria/tablockman.h''
storage/maria/unittest/lockman2-t.c:
New BitKeeper file ``storage/maria/unittest/lockman2-t.c''
the unit test of the control file module.
storage/maria/trnman.c:
fix for a bug (i has to be in [1..SHORT_TRID_MAX])
storage/maria/unittest/ma_control_file-t.c:
corrupted checksum is in buffer[0], not in buffer[1]
"Changing MI_KEY_BLOCK_LENGTH makes a wrong myisamchk"
in the Maria tree as it is really needed to get "ma_test_all" to pass
(this bug showed up in Maria first, not in MyISAM).
Now ma_test_all does not have corruption messages about test2 anymore,
and shows the same output as mi_test_all except that
ma_test_all has this at the start:
lt-maria_chk: MARIA file test1
lt-maria_chk: warning: Size of indexfile is: 8192 Should be: 16384
MARIA-table 'test1' is usable but should be fixed
This was already true before importing the bugfix.
Wonder if normal.
NOTE: this bugfix is currently in 5.1-engines, in a few days
will be in the main 5.1, then we'll merge 5.1
into Maria: this will merge the bugfix into storage/myisam, but there
will be no need to apply it to storage/maria again. I just couldn't
wait a few days for the 5.1-engines->5.1 merge to be allowed.
mysql-test/r/maria.result:
result update
mysql-test/t/maria.test:
test for BUG#22119
storage/maria/ma_check.c:
fix for BUG#22119
---
comments
mysys/lf_alloc-pin.c:
comments
mysys/lf_dynarray.c:
comments
mysys/lf_hash.c:
comments, charset-aware comparison
storage/maria/trnman.c:
comments
storage/maria/unittest/lockman-t.c:
test case for a bug
unittest/mysys/my_atomic-t.c:
removed mistakenly copied line
storage/maria/trnman.c:
comments
include/my_dbug.h:
make DBUG_ASSERT always a statement
storage/maria/lockman.h:
comments
include/lf.h:
lf_pinbox - don't use a fixed-size purgatory.
mysys/lf_alloc-pin.c:
lf_pinbox - don't use a fixed-size purgatory.
mysys/lf_hash.c:
lf_pinbox - don't use a fixed-size purgatory.
storage/maria/lockman.c:
removed IGNORE_ME/UPGDARED matching - it was wrong in the first place.
updated for "lf_pinbox - don't use a fixed-size purgatory"
storage/maria/unittest/lockman-t.c:
IGNORE_ME/UPGRADED pair counting bugtest.
more tests
unittest/mysys/my_atomic-t.c:
lf_pinbox - don't use a fixed-size purgatory.
into janus.mylan:/usr/home/serg/Abk/mysql-maria
configure.in:
Auto merged
include/my_global.h:
Auto merged
include/my_sys.h:
Auto merged
mysys/Makefile.am:
Auto merged
sql/item_func.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_test.cc:
Auto merged
storage/maria/Makefile.am:
Auto merged
storage/maria/ha_maria.cc:
Auto merged
storage/myisam/ha_myisam.cc:
Auto merged
unittest/Makefile.am:
Auto merged
unittest/mysys/my_atomic-t.c:
merged
(lockmanager still fails unit tests)
BitKeeper/deleted/.del-Makefile.am~4375ae3d4de2bdf0:
Delete: unittest/maria/Makefile.am
configure.in:
silence up configure warnings, don't generate unittest/maria/Makefile
include/atomic/nolock.h:
s/LOCK/LOCK_prefix/
include/atomic/x86-gcc.h:
s/LOCK/LOCK_prefix/
include/atomic/x86-msvc.h:
s/LOCK/LOCK_prefix/
include/lf.h:
pin asserts, renames
include/my_atomic.h:
move cleanup
include/my_bit.h:
s/uint/uint32/
mysys/lf_dynarray.c:
style fixes, split for() in two, remove if()s
mysys/lf_hash.c:
renames, minor fixes
mysys/my_atomic.c:
run-time assert -> compile-time assert
storage/maria/Makefile.am:
lockman here
storage/maria/unittest/Makefile.am:
new unit tests
storage/maria/unittest/trnman-t.c:
lots of changes
storage/maria/lockman.c:
many changes:
second meaning of "blocker"
portability: s/gettimeofday/my_getsystime/
move mutex/cond out of LOCK_OWNER - it creates a race condition
that will be fixed in a separate changeset
increment lm->count for every element, not only for distinct ones -
because we cannot decrease it for distinct elements only :(
storage/maria/lockman.h:
move mutex/cond out of LOCK_OWNER
storage/maria/trnman.c:
move mutex/cond out of LOCK_OWNER
atomic-ops to access short_trid_to_trn[]
storage/maria/trnman.h:
move mutex/cond out of LOCK_OWNER
storage/maria/unittest/lockman-t.c:
unit stress test
as in the main 5.1 (partition and ndb_alter_table fail).
mysql-test/r/maria.result:
merge from MyISAM
mysql-test/r/ps_maria.result:
merge from MyISAM
mysql-test/t/maria.test:
merge from MyISAM
sql/mysql_priv.h:
fix after wrong merge
sql/mysqld.cc:
fix after wrong merge
sql/set_var.cc:
adding _db like other engines have
storage/maria/Makefile.am:
merge from MyISAM
storage/maria/ha_maria.cc:
merge from MyISAM
storage/maria/ha_maria.h:
merge from MyISAM
storage/maria/ma_check.c:
merge from MyISAM
storage/maria/ma_delete.c:
merge from MyISAM
storage/maria/ma_init.c:
maria_inited should rather be my_bool
storage/maria/ma_locking.c:
merge from MyISAM
storage/maria/ma_packrec.c:
merge from MyISAM
storage/maria/ma_panic.c:
maria_panic() should not take mutex if engine has not been inited.
storage/maria/ma_rkey.c:
merge from MyISAM
storage/maria/ma_write.c:
merge from MyISAM
storage/maria/maria_def.h:
merge from MyISAM. maria_inited is needed for maria_panic().
storage/maria/maria_ftdump.c:
merge from MyISAM
ndb_restore Return OK even if temporary errors
(otherwise mysql-test-run/ndb_restore can fail on really slow machines)
storage/ndb/tools/restore/restore_main.cpp:
Return OK even if temporary errors
into perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-new-ndb
client/mysqldump.c:
Auto merged
client/mysqltest.c:
Auto merged
mysql-test/r/csv.result:
Auto merged
mysql-test/r/ctype_utf8.result:
Auto merged
mysql-test/r/func_time.result:
Auto merged
mysql-test/t/csv.test:
Auto merged
mysql-test/t/ctype_utf8.test:
Auto merged
mysql-test/t/func_time.test:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_view.cc:
Auto merged
sql/table.cc:
Auto merged
storage/csv/ha_tina.cc:
Auto merged
storage/innobase/btr/btr0btr.c:
Auto merged
storage/innobase/buf/buf0buf.c:
Auto merged
storage/innobase/dict/dict0dict.c:
Auto merged
storage/innobase/fil/fil0fil.c:
Auto merged
storage/innobase/fsp/fsp0fsp.c:
Auto merged
storage/innobase/handler/ha_innodb.cc:
Auto merged
storage/innobase/include/btr0cur.ic:
Auto merged
storage/innobase/log/log0log.c:
Auto merged
storage/innobase/log/log0recv.c:
Auto merged
storage/innobase/os/os0file.c:
Auto merged
storage/innobase/row/row0mysql.c:
Auto merged
storage/innobase/row/row0sel.c:
Auto merged
storage/innobase/srv/srv0start.c:
Auto merged
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
Auto merged
tests/mysql_client_test.c:
Auto merged
into perch.ndb.mysql.com:/home/jonas/src/51-work
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
Auto merged
storage/ndb/test/ndbapi/testTimeout.cpp:
Auto merged
fix bug in handling of inactive timeout for scan, when all is delivered
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
1) set timeout if all scans are at api
2) Use c_appl_timeout_value when getting scan timeout
ndb/test/ndbapi/testTimeout.cpp:
test program