summaryrefslogtreecommitdiffstats
path: root/ctdb/server/ctdb_lock.c
Commit message (Collapse)AuthorAgeFilesLines
* ctdb: Fix a comment typoVolker Lendecke2014-04-301-1/+1
| | | | | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Wed Apr 30 21:05:09 CEST 2014 on sn-devel-104
* ctdb-locking: Instead of comparing key, compare key hashAmitay Isaacs2014-03-281-4/+6
| | | | | | | | | | | This replaces memory comparison of the key with integer comparison. In addition, this also avoids scheduling locks with the same hash. Signed-off-by: Amitay Isaacs <amitay@gmail.com> Reviewed-by: Martin Schwenke <martin@meltin.net> Autobuild-User(master): Martin Schwenke <martins@samba.org> Autobuild-Date(master): Fri Mar 28 05:28:58 CET 2014 on sn-devel-104
* ctdb-locking: Check for talloc_memdup errorAmitay Isaacs2014-03-281-0/+5
| | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> Reviewed-by: Martin Schwenke <martin@meltin.net>
* ctdb-locking: Avoid memory leakAmitay Isaacs2014-03-281-0/+1
| | | | | | | | If lock_request could not be allocated, free lock_ctx since there can only be a single lock_request per lock_ctx. Signed-off-by: Amitay Isaacs <amitay@gmail.com> Reviewed-by: Martin Schwenke <martin@meltin.net>
* ctdb-locking: Use vfork instead of fork to exec helpersAmitay Isaacs2013-11-271-2/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is a significant overhead using fork() over vfork(), specially when the child process execs a helper. The overhead is in memory space and time. # strace -c ./test_fork 1024 200 count=1024, size=204800, total=200M failed fork=0 time for fork() = 4879.597000 us % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 100.00 4.543321 3304 1375 375 clone 0.00 0.000071 0 1033 mmap 0.00 0.000000 0 1 read 0.00 0.000000 0 3 write 0.00 0.000000 0 2 open 0.00 0.000000 0 2 close 0.00 0.000000 0 3 fstat 0.00 0.000000 0 3 mprotect 0.00 0.000000 0 1 munmap 0.00 0.000000 0 3 brk 0.00 0.000000 0 1 1 access 0.00 0.000000 0 1 execve 0.00 0.000000 0 1 arch_prctl ------ ----------- ----------- --------- --------- ---------------- 100.00 4.543392 2429 376 total # strace -c ./test_vfork 1024 200 count=1024, size=204800, total=200M failed fork=0 time for fork() = 82.041000 us % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 96.47 0.001204 1 1000 vfork 3.53 0.000044 0 1033 mmap 0.00 0.000000 0 1 read 0.00 0.000000 0 3 write 0.00 0.000000 0 2 open 0.00 0.000000 0 2 close 0.00 0.000000 0 3 fstat 0.00 0.000000 0 3 mprotect 0.00 0.000000 0 1 munmap 0.00 0.000000 0 3 brk 0.00 0.000000 0 1 1 access 0.00 0.000000 0 1 execve 0.00 0.000000 0 1 arch_prctl ------ ----------- ----------- --------- --------- ---------------- 100.00 0.001248 2054 1 total Signed-off-by: Amitay Isaacs <amitay@gmail.com> Reviewed-by: Michael Adam <obnox@samba.org>
* ctdb-locking: Update current lock statistics when lock is scheduledAmitay Isaacs2013-11-271-2/+2
| | | | | | | | | When a child process is created for a lock request, the current locks statistics should be updated immediately. This will provide accurate information on number of active lock requests. Signed-off-by: Amitay Isaacs <amitay@gmail.com> Reviewed-by: Michael Adam <obnox@samba.org>
* ctdb-locking: Do not merge multiple lock requests to avoid unfair schedulingAmitay Isaacs2013-11-271-1/+6
| | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> Reviewed-by: Michael Adam <obnox@samba.org>
* ctdb-locking: Implement active lock requests limit per databaseAmitay Isaacs2013-11-271-8/+11
| | | | | | | | | | | | This limit was currently a global limit and not per database. This prevents any database freeze lock requests from getting scheduled if the global limit was reached. Only individual record requests should be limited and database freeze requests should always get scheduled. Signed-off-by: Amitay Isaacs <amitay@gmail.com> Reviewed-by: Michael Adam <obnox@samba.org>
* ctdb-server: Coverity fixesAmitay Isaacs2013-11-191-4/+7
| | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> Reviewed-by: Michael Adam <obnox@samba.org>
* ctdbd: Debug locks by default with override from enviroment variableMartin Schwenke2013-10-221-4/+16
| | | | | | | | Default is debug_locks.sh, relative to CTDB_BASE. Signed-off-by: Martin Schwenke <martin@meltin.net> (This used to be ctdb commit c11803e3dcc905a45a08d743595e63f9ca445f0d)
* locking: Do not create multiple lock processes for the same keyAmitay Isaacs2013-08-091-6/+15
| | | | | | | | | | | | If there are multiple lock helper processes waiting for the same record, then it will cause a thundering herd when that record has been unlocked. So avoid scheduling lock contexts for the same record. This will also mean that multiple requests will get queued up behind the same lock context and can be processed quickly once the lock has been obtained. Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit ebecc3a18f1cb397a78b56eaf8f752dd5495bcc9)
* locking: Move function find_lock_context() before ctdb_lock_schedule()Amitay Isaacs2013-08-091-53/+53
| | | | | | | | | So that ctdb_lock_schedule() can call this function without requiring extra prototype declaration. Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 68af5405acc123b5a90decd2123e2a02961a8fcf)
* locking: Use external script to debug locking issuesAmitay Isaacs2013-07-101-152/+19
| | | | | | | | | | | | | Use an external script to parse /proc/locks and log useful debugging information about locks rather than doing that in C code. To use this feature, add configuration variable to /etc/sysconfig/ctdb: CTDB_DEBUG_LOCKS=/etc/ctdb/debug_locks.sh Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 2bfb8499366d530f16515b08928056bbda40f781)
* locking: Update locking bucket intervalsAmitay Isaacs2013-07-101-10/+14
| | | | | | | | | | | | | | | | | | 0 < 1 ms 1 < 10 ms 2 < 100 ms 3 < 1 s 4 < 2 s 5 < 4 s 6 < 8 s 7 < 16 s 8 < 32 s 9 < 64 s 10 >= 64 s Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 6fc36a7036933237d09151a0baf4d8ccd2bc2c99)
* locking: Update locks latency in CTDB statistics only for RECORD or DB locksAmitay Isaacs2013-07-101-2/+6
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit dcc42a75b4638b3aa40c44ed9e0aaae26483e2b0)
* build: Fix compiler warnings for uninitialized variablesAmitay Isaacs2013-07-041-1/+1
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 5408c5c4050539e5aa06a5e82ceb63a6cb5cef0c)
* locking: Set lock helper path onceAmitay Isaacs2013-05-241-6/+13
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 80fbe9364350d42658f7f8af250ac87eb1afbc21)
* locking: Remove functions that are not used anymoreAmitay Isaacs2013-05-241-84/+0
| | | | | | | | | These functions were used in locking child process to do the locking. With locking helper, these are not required. Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit c660f33c3eaa1b4a2c4e951c1982979e57374ed4)
* locking: Remove functions that are not used anymoreAmitay Isaacs2013-05-241-91/+0
| | | | | | | | | These functions were used in locking child process to do the locking. With locking helper, these are not required. Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 6ea3212a7b177c6c06b1484cf9e8b2f4036653d9)
* locking: Use separate locking helper binary for lockingAmitay Isaacs2013-05-241-17/+39
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 7cde53a6cbe74b1e46f7e1bca298df82c08de866)
* locking: Create commandline arguments for locking helperAmitay Isaacs2013-05-241-0/+115
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit f665e3d540c90579952e590caa5828acb581ae61)
* locking: Use database iterator for unmarking databasesAmitay Isaacs2013-05-241-17/+2
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 7630ca4116b476636c27407748088ea335f1a06c)
* locking: Add handler function for unmarking a databaseAmitay Isaacs2013-05-241-0/+23
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit adc113055de98fae276f9b501aff5c03cd25ddc8)
* locking: Use database iterator for marking databasesAmitay Isaacs2013-05-241-39/+2
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit e8ea65b2713417db4a618a9f4633991cfaa93fe6)
* locking: Add handler function for marking a databaseAmitay Isaacs2013-05-241-0/+23
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit f120e40533780e02ff1cdc41cc6d3af1c4c83258)
* locking: Use database iterator for unlocking databasesAmitay Isaacs2013-05-241-17/+2
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 187ed83f9701c7fa8d3cc476d47c5d2a87d5c308)
* locking: Add handler function for unlocking a databaseAmitay Isaacs2013-05-241-0/+20
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 725239535f40ca2cca445bb5bf2e181351b330e9)
* locking: Use database iterator for locking databasesAmitay Isaacs2013-05-241-38/+2
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit d2634d72d9ca0ceeb72cbb1adc95017a234480fd)
* locking: Add handler function for locking a databaseAmitay Isaacs2013-05-241-0/+20
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 2a1c933ef7c78ee071e2a640ea10941f1c12e32a)
* locking: Refactor code to iterate over databases based on priorityAmitay Isaacs2013-05-241-0/+42
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit a3275854812aca86032704134fdf6a129069c86a)
* locking: Add newline to debug logsAmitay Isaacs2013-05-241-2/+2
| | | | | | Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit d98a861716d5f8c1f4387d21666396d3164551b3)
* daemon: Add a tunable to enable automatic database priority settingAmitay Isaacs2013-01-051-5/+9
| | | | | | | | | | | | | | Samba versions 3.6.x and older do not set the database priority. This can cause deadlock between Samba and CTDB since the locking order of database will be different. A hack was added for automatic promotion of priority for specific databases to avoid deadlock. This code should not be invoked with Samba version 4.x which correctly specifies the priority for each database. Signed-off-by: Amitay Isaacs <amitay@gmail.com> Reviewed-by: Michael Adam <obnox@samba.org> (This used to be ctdb commit 4a9e96ad3d8fc46da1cd44cd82309c1b54301eb7)
* locking: Do not use RECLOCK for tracking DB locks and latenciesAmitay Isaacs2012-11-141-2/+8
| | | | | | | | | | RECLOCK is for recovery lock in CTDB. Do not override the meaning for tracking locks on databases. Database lock latency has nothing to do with recovery lock latency. Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 54e24a151d2163954e5a2a1c0f41a2b5c19ae44b)
* ctdbd: Fix compilation warning in locking codeMartin Schwenke2012-10-311-2/+2
| | | | | | Signed-off-by: Martin Schwenke <martin@meltin.net> (This used to be ctdb commit cd64035d71ddff6aebe6c15a49e09527283425d2)
* locking: Do not use ctdb_kill() to kill smbd processesAmitay Isaacs2012-10-201-1/+1
| | | | | | | | ctdb_kill() is used to terminate processes spawned by CTDB. Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 7d025281ee70c91ebcd4d9a908de1045a689786b)
* locking: Add database priority handling for older versions of sambaAmitay Isaacs2012-10-201-0/+61
| | | | | | | | | | | In samba versions 3.6.x and older, database priorities are not set. later_db() function implements higher database priority (locking order) for these databases - brlock, g_lock, notify_onelevel, serverid, xattr_tdb Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit edbc8a6669b594d3c413d603e1c9fada9244c2ee)
* locking: Schedule a new lock request everytime a lock is releasedAmitay Isaacs2012-10-201-0/+4
| | | | | | | | | | | Since the number of active lock requests is limited to MAX_LOCK_PROCESSES_PER_DB (= 100), any new requests won't get scheduled when they are created. So schedule a pending request once current active request is done. Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit c8eb4a3170ab8524e638047053831ba547e9cce8)
* ctdbd: locking: Provide non-blocking API for locking of TDB record/db/alldbAmitay Isaacs2012-10-201-0/+1069
| | | | | | | | | | | | | This introduces a consistent API for handling locks on single record, complete db or all dbs. The locks are taken out in a child process. In cases of timeout, find the processes that currently hold the lock and log. Callback functions for locking requests take locked boolean to indicate whether the lock was successfully obtained or not. Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 1af99cf0de9919dd89af1feab6d1bd18b95d82ff)
* Revert "server: locking: Provide a common API for non-blocking locking of TDBs"Amitay Isaacs2012-05-011-783/+0
| | | | | | | | This reverts commit 6a92fc2b8da2bba98dca29b781ab459ba4e879a5. Reverting incomplete changes to ctdb_lock.c (This used to be ctdb commit 2a3d22431948f849c93762a6ab49344acb687feb)
* server: locking: Provide a common API for non-blocking locking of TDBsAmitay Isaacs2012-05-011-0/+783
(This used to be ctdb commit 6a92fc2b8da2bba98dca29b781ab459ba4e879a5)