[SCM] Samba Shared Repository - branch master updated
Martin Schwenke
martins at samba.org
Mon Mar 7 10:30:03 UTC 2016
The branch, master has been updated
via ace23f0 ctdb-locking: Use real-time only for actual record or DB locking
via 00b9e76 ctdb-takeover: Inform clients when dropping all IP addresses
via b8272d8 ctdb-takeover: Do not kill smbd processes on releasing IP
from c16e770 Remove posixAccount from samdb.py
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit ace23f0a81b057fbabd7e75a777688fee81bce94
Author: Amitay Isaacs <amitay at gmail.com>
Date: Tue Feb 9 11:59:30 2016 +1100
ctdb-locking: Use real-time only for actual record or DB locking
Use real-time priority only for obtaining record and database locks.
Do not open databases with real-time priority as it can cause thundering
herd on fcntl lock while opening tdb database. Also relinquish real-time
priority after the lock is obtained.
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
Autobuild-User(master): Martin Schwenke <martins at samba.org>
Autobuild-Date(master): Mon Mar 7 11:29:00 CET 2016 on sn-devel-144
commit 00b9e76904bb1108e0f06d0dba4df89394d58252
Author: Amitay Isaacs <amitay at gmail.com>
Date: Sat Mar 5 14:05:21 2016 +1100
ctdb-takeover: Inform clients when dropping all IP addresses
CTDB releases all IPs in following cases: starting up, shutting down,
node gets banned, node does not come out of recovery for a long time.
Always inform samba when CTDB releases IP addresses.
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit b8272d835d6e5186568237cd8b7a2105884c0515
Author: Amitay Isaacs <amitay at gmail.com>
Date: Fri Mar 4 15:04:13 2016 +1100
ctdb-takeover: Do not kill smbd processes on releasing IP
CTDB already notifies Samba with RELEASE_IP message. Samba can take
appropriate action based on that.
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
-----------------------------------------------------------------------
Summary of changes:
ctdb/server/ctdb_lock_helper.c | 27 +++++++++++++++++----
ctdb/server/ctdb_takeover.c | 53 +++++++++---------------------------------
2 files changed, 33 insertions(+), 47 deletions(-)
Changeset truncated at 500 lines:
diff --git a/ctdb/server/ctdb_lock_helper.c b/ctdb/server/ctdb_lock_helper.c
index 4f1fe2d..cdcbb4a 100644
--- a/ctdb/server/ctdb_lock_helper.c
+++ b/ctdb/server/ctdb_lock_helper.c
@@ -69,6 +69,7 @@ static int lock_record(const char *dbpath, const char *dbflags, const char *dbke
TDB_DATA key;
struct tdb_context *tdb;
int tdb_flags;
+ bool realtime;
/* No error checking since CTDB always passes sane values */
tdb_flags = strtol(dbflags, NULL, 0);
@@ -87,12 +88,22 @@ static int lock_record(const char *dbpath, const char *dbflags, const char *dbke
return 1;
}
+ realtime = set_scheduler();
+ if (! realtime) {
+ fprintf(stderr, "%s: Unable to set real-time scheduler priority\n",
+ progname);
+ }
+
if (tdb_chainlock(tdb, key) < 0) {
fprintf(stderr, "%s: Error getting record lock (%s)\n",
progname, tdb_errorstr(tdb));
return 1;
}
+ if (realtime) {
+ reset_scheduler();
+ }
+
return 0;
}
@@ -102,6 +113,7 @@ static int lock_db(const char *dbpath, const char *dbflags)
{
struct tdb_context *tdb;
int tdb_flags;
+ bool realtime;
/* No error checking since CTDB always passes sane values */
tdb_flags = strtol(dbflags, NULL, 0);
@@ -112,12 +124,22 @@ static int lock_db(const char *dbpath, const char *dbflags)
return 1;
}
+ realtime = set_scheduler();
+ if (! realtime) {
+ fprintf(stderr, "%s: Unable to set real-time scheduler priority\n",
+ progname);
+ }
+
if (tdb_lockall(tdb) < 0) {
fprintf(stderr, "%s: Error getting db lock (%s)\n",
progname, tdb_errorstr(tdb));
return 1;
}
+ if (realtime) {
+ reset_scheduler();
+ }
+
return 0;
}
@@ -136,11 +158,6 @@ int main(int argc, char *argv[])
exit(1);
}
- if (!set_scheduler()) {
- fprintf(stderr, "%s: Unable to set real-time scheduler priority\n",
- progname);
- }
-
log_fd = atoi(argv[1]);
close(STDOUT_FILENO);
close(STDERR_FILENO);
diff --git a/ctdb/server/ctdb_takeover.c b/ctdb/server/ctdb_takeover.c
index 13276af..5829e87 100644
--- a/ctdb/server/ctdb_takeover.c
+++ b/ctdb/server/ctdb_takeover.c
@@ -815,44 +815,6 @@ int32_t ctdb_control_takeover_ip(struct ctdb_context *ctdb,
return 0;
}
-/*
- kill any clients that are registered with a IP that is being released
- */
-static void release_kill_clients(struct ctdb_context *ctdb, ctdb_sock_addr *addr)
-{
- struct ctdb_client_ip *ip;
-
- DEBUG(DEBUG_INFO,("release_kill_clients for ip %s\n",
- ctdb_addr_to_str(addr)));
-
- for (ip=ctdb->client_ip_list; ip; ip=ip->next) {
- ctdb_sock_addr tmp_addr;
-
- tmp_addr = ip->addr;
- DEBUG(DEBUG_INFO,("checking for client %u with IP %s\n",
- ip->client_id,
- ctdb_addr_to_str(&ip->addr)));
-
- if (ctdb_same_ip(&tmp_addr, addr)) {
- struct ctdb_client *client = reqid_find(ctdb->idr,
- ip->client_id,
- struct ctdb_client);
- DEBUG(DEBUG_INFO,("matched client %u with IP %s and pid %u\n",
- ip->client_id,
- ctdb_addr_to_str(&ip->addr),
- client->pid));
-
- if (client->pid != 0) {
- DEBUG(DEBUG_INFO,(__location__ " Killing client pid %u for IP %s on client_id %u\n",
- (unsigned)client->pid,
- ctdb_addr_to_str(addr),
- ip->client_id));
- kill(client->pid, SIGKILL);
- }
- }
- }
-}
-
static void do_delete_ip(struct ctdb_context *ctdb, struct ctdb_vnn *vnn)
{
DLIST_REMOVE(ctdb->vnn, vnn);
@@ -898,9 +860,6 @@ static void release_ip_callback(struct ctdb_context *ctdb, int status,
ctdb_daemon_send_message(ctdb, ctdb->pnn, CTDB_SRVID_RELEASE_IP, data);
- /* kill clients that have registered with this IP */
- release_kill_clients(ctdb, state->addr);
-
ctdb_vnn_unassign_iface(ctdb, state->vnn);
/* Process the IP if it has been marked for deletion */
@@ -2394,6 +2353,7 @@ void ctdb_release_all_ips(struct ctdb_context *ctdb)
{
struct ctdb_vnn *vnn;
int count = 0;
+ TDB_DATA data;
if (ctdb->tunable.disable_ip_failover == 1) {
return;
@@ -2431,7 +2391,16 @@ void ctdb_release_all_ips(struct ctdb_context *ctdb)
ctdb_vnn_iface_string(vnn),
ctdb_addr_to_str(&vnn->public_address),
vnn->public_netmask_bits);
- release_kill_clients(ctdb, &vnn->public_address);
+
+ data.dptr = (uint8_t *)talloc_strdup(
+ vnn, ctdb_addr_to_str(&vnn->public_address));
+ if (data.dptr != NULL) {
+ data.dsize = strlen((char *)data.dptr) + 1;
+ ctdb_daemon_send_message(ctdb, ctdb->pnn,
+ CTDB_SRVID_RELEASE_IP, data);
+ talloc_free(data.dptr);
+ }
+
ctdb_vnn_unassign_iface(ctdb, vnn);
vnn->update_in_flight = false;
count++;
--
Samba Shared Repository
More information about the samba-cvs
mailing list