LOCK_ALLDB,
};
+static const char * const lock_type_str[] = {
+ "lock_record",
+ "lock_db",
+ "lock_alldb_prio",
+ "lock_db",
+};
+
struct lock_request;
/* lock_context is the common part for a lock request */
* By default, all databases are set to priority 1. So only when priority
* is set to 1, check for databases that need higher priority.
*/
-static bool later_db(const char *name)
+static bool later_db(struct ctdb_context *ctdb, const char *name)
{
+ if (ctdb->tunable.samba3_hack == 0) {
+ return false;
+ }
+
if (strstr(name, "brlock") ||
strstr(name, "g_lock") ||
strstr(name, "notify_onelevel") ||
if (ctdb_db->priority != priority) {
continue;
}
- if (later_db(ctdb_db->db_name)) {
+ if (later_db(ctdb, ctdb_db->db_name)) {
continue;
}
DEBUG(DEBUG_INFO, ("locking database %s, priority:%u\n",
}
for (ctdb_db = ctdb->db_list; ctdb_db; ctdb_db = ctdb_db->next) {
- if (!later_db(ctdb_db->db_name)) {
+ if (!later_db(ctdb, ctdb_db->db_name)) {
continue;
}
DEBUG(DEBUG_INFO, ("locking database %s, priority:%u\n",
if (ctdb_db->priority != priority) {
continue;
}
- if (later_db(ctdb_db->db_name)) {
+ if (later_db(ctdb, ctdb_db->db_name)) {
continue;
}
if (tdb_transaction_write_lock_mark(ctdb_db->ltdb->tdb) != 0) {
}
for (ctdb_db = ctdb->db_list; ctdb_db; ctdb_db = ctdb_db->next) {
- if (!later_db(ctdb_db->db_name)) {
+ if (!later_db(ctdb, ctdb_db->db_name)) {
continue;
}
if (tdb_transaction_write_lock_mark(ctdb_db->ltdb->tdb) != 0) {
if (locked) {
CTDB_INCREMENT_STAT(lock_ctx->ctdb, locks.num_current);
- CTDB_UPDATE_RECLOCK_LATENCY(lock_ctx->ctdb, "lock()", locks.latency, t);
CTDB_INCREMENT_STAT(lock_ctx->ctdb, locks.buckets[id]);
if (lock_ctx->ctdb_db) {
CTDB_INCREMENT_DB_STAT(lock_ctx->ctdb_db, locks.num_current);
- CTDB_UPDATE_DB_RECLOCK_LATENCY(lock_ctx->ctdb_db, "lock()", locks.latency, t);
+ CTDB_UPDATE_DB_LATENCY(lock_ctx->ctdb_db, lock_type_str[lock_ctx->type], locks.latency, t);
CTDB_INCREMENT_DB_STAT(lock_ctx->ctdb_db, locks.buckets[id]);
}
} else {
DEBUG(DEBUG_WARNING,
("Process %s (pid=%d) locked database %s (inode %lu) for %.0lf seconds\n",
(process_name ? process_name : "unknown"),
- blocker_pid, db_name, inode,
+ blocker_pid, db_name, (unsigned long)inode,
timeval_elapsed(&lock_ctx->start_time)));
} else {
DEBUG(DEBUG_WARNING,
("Process %s (pid=%d) locked database (inode %lu) for %.0lf seconds\n",
(process_name ? process_name : "unknown"),
- blocker_pid, inode,
+ blocker_pid, (unsigned long)inode,
timeval_elapsed(&lock_ctx->start_time)));
}
process_name && strstr(process_name, "smbd")) {
DEBUG(DEBUG_WARNING,
("Deadlock detected. Killing smbd process (pid=%d)", blocker_pid));
- ctdb_kill(lock_ctx->ctdb, blocker_pid, SIGKILL);
+ kill(blocker_pid, SIGKILL);
}
free(process_name);