[PATCH] Remove serverid.tdb

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] Remove serverid.tdb

Samba - samba-technical mailing list
Hi!

Attached find a patch that replaces the message_send_all
implementation with other mechanisms. This makes serverid.tdb
obsolete.

Review appreciated!

Thanks, Volker

--
SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
phone: +49-551-370000-0, fax: +49-551-370000-9
AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
http://www.sernet.de, mailto:[hidden email]

patch.txt (59K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Remove serverid.tdb

Samba - samba-technical mailing list
On Mon, Nov 27, 2017 at 12:16:36PM +0100, Volker Lendecke via samba-technical wrote:
> Hi!
>
> Attached find a patch that replaces the message_send_all
> implementation with other mechanisms. This makes serverid.tdb
> obsolete.
>
> Review appreciated!

Went through really carefully. LGTM ! RB+ and pushed.

Thanks Volker for getting rid of another tdb :-).

> --
> SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
> phone: +49-551-370000-0, fax: +49-551-370000-9
> AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
> http://www.sernet.de, mailto:[hidden email]

> From 4a05217af459aa6d5fea4467888a16b4fe260e2d Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <[hidden email]>
> Date: Fri, 21 Jul 2017 19:08:43 +0200
> Subject: [PATCH 01/11] messaging: Remove the "n_sent" arg from
>  message_send_all
>
> The only user of this is an informative message in smbcontrol. I don't think
> that's worth the effort.
>
> Signed-off-by: Volker Lendecke <[hidden email]>
> ---
>  source3/include/serverid.h                  | 3 +--
>  source3/lib/serverid.c                      | 8 +-------
>  source3/passdb/pdb_interface.c              | 3 +--
>  source3/printing/queue_process.c            | 2 +-
>  source3/rpc_server/fss/srv_fss_agent.c      | 6 +++---
>  source3/rpc_server/spoolss/srv_spoolss_nt.c | 4 ++--
>  source3/rpc_server/srvsvc/srv_srvsvc_nt.c   | 8 +++-----
>  source3/smbd/smbd_cleanupd.c                | 2 +-
>  source3/smbd/statcache.c                    | 3 +--
>  source3/utils/smbcontrol.c                  | 5 +----
>  10 files changed, 15 insertions(+), 29 deletions(-)
>
> diff --git a/source3/include/serverid.h b/source3/include/serverid.h
> index 749b950f2c8..a73a6f6986c 100644
> --- a/source3/include/serverid.h
> +++ b/source3/include/serverid.h
> @@ -75,7 +75,6 @@ struct messaging_context;
>  
>  bool message_send_all(struct messaging_context *msg_ctx,
>        int msg_type,
> -      const void *buf, size_t len,
> -      int *n_sent);
> +      const void *buf, size_t len);
>  
>  #endif
> diff --git a/source3/lib/serverid.c b/source3/lib/serverid.c
> index 73004489bef..9fd506df5fd 100644
> --- a/source3/lib/serverid.c
> +++ b/source3/lib/serverid.c
> @@ -371,15 +371,11 @@ static int traverse_fn(struct db_record *rec, const struct server_id *id,
>   * applications that use it. When we need efficient broadcast we can add
>   * it.
>   *
> - * @param n_sent Set to the number of messages sent.  This should be
> - * equal to the number of processes, but be careful for races.
> - *
>   * @retval True for success.
>   **/
>  bool message_send_all(struct messaging_context *msg_ctx,
>        int msg_type,
> -      const void *buf, size_t len,
> -      int *n_sent)
> +      const void *buf, size_t len)
>  {
>   struct msg_all msg_all;
>  
> @@ -406,7 +402,5 @@ bool message_send_all(struct messaging_context *msg_ctx,
>   msg_all.msg_ctx = msg_ctx;
>  
>   serverid_traverse(traverse_fn, &msg_all);
> - if (n_sent)
> - *n_sent = msg_all.n_sent;
>   return true;
>  }
> diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c
> index 49752dde659..9827046187e 100644
> --- a/source3/passdb/pdb_interface.c
> +++ b/source3/passdb/pdb_interface.c
> @@ -651,8 +651,7 @@ NTSTATUS pdb_delete_user(TALLOC_CTX *mem_ctx, struct samu *sam_acct)
>   message_send_all(server_messaging_context(),
>   ID_CACHE_DELETE,
>   msg_data,
> - strlen(msg_data) + 1,
> - NULL);
> + strlen(msg_data) + 1);
>  
>   TALLOC_FREE(msg_data);
>   return status;
> diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c
> index e07aca036fa..381ef348805 100644
> --- a/source3/printing/queue_process.c
> +++ b/source3/printing/queue_process.c
> @@ -144,7 +144,7 @@ static void reload_pcap_change_notify(struct tevent_context *ev,
>   */
>   delete_and_reload_printers_full(ev, msg_ctx);
>  
> - message_send_all(msg_ctx, MSG_PRINTER_PCAP, NULL, 0, NULL);
> + message_send_all(msg_ctx, MSG_PRINTER_PCAP, NULL, 0);
>  }
>  
>  struct bq_state {
> diff --git a/source3/rpc_server/fss/srv_fss_agent.c b/source3/rpc_server/fss/srv_fss_agent.c
> index 0fc974bb455..c0bf7ddd11a 100644
> --- a/source3/rpc_server/fss/srv_fss_agent.c
> +++ b/source3/rpc_server/fss/srv_fss_agent.c
> @@ -1235,7 +1235,7 @@ uint32_t _fss_ExposeShadowCopySet(struct pipes_struct *p,
>   }
>   unbecome_root();
>  
> - message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
> + message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>   for (sc = sc_set->scs; sc; sc = sc->next) {
>   struct fss_sc_smap *sm;
>   for (sm = sc->smaps; sm; sm = sm->next)
> @@ -1577,7 +1577,7 @@ static NTSTATUS sc_smap_unexpose(struct messaging_context *msg_ctx,
>   ret = NT_STATUS_UNSUCCESSFUL;
>   goto err_cancel;
>   }
> - message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
> + message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>   } else {
>   ret = NT_STATUS_OK;
>   goto err_cancel;
> @@ -1661,7 +1661,7 @@ uint32_t _fss_DeleteShareMapping(struct pipes_struct *p,
>   }
>  
>   message_send_all(p->msg_ctx, MSG_SMB_FORCE_TDIS, sc_smap->sc_share_name,
> - strlen(sc_smap->sc_share_name) + 1, NULL);
> + strlen(sc_smap->sc_share_name) + 1);
>  
>   if (sc->smaps_count > 1) {
>   /* do not delete the underlying snapshot - still in use */
> diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> index 1476dc6bf15..d8b6023e5e9 100644
> --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c
> +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> @@ -368,7 +368,7 @@ static WERROR delete_printer_hook(TALLOC_CTX *ctx, struct security_token *token,
>   ret = smbrun(command, NULL, NULL);
>   if (ret == 0) {
>   /* Tell everyone we updated smb.conf. */
> - message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
> + message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>   }
>  
>   if ( is_print_op )
> @@ -6433,7 +6433,7 @@ static bool add_printer_hook(TALLOC_CTX *ctx, struct security_token *token,
>   ret = smbrun(command, &fd, NULL);
>   if (ret == 0) {
>   /* Tell everyone we updated smb.conf. */
> - message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
> + message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>   }
>  
>   if ( is_print_op )
> diff --git a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
> index 2a8cf8de650..899feb22da9 100644
> --- a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
> +++ b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
> @@ -1909,7 +1909,7 @@ WERROR _srvsvc_NetShareSetInfo(struct pipes_struct *p,
>   if (ret == 0) {
>   /* Tell everyone we updated smb.conf. */
>   message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED,
> - NULL, 0, NULL);
> + NULL, 0);
>   }
>  
>   if ( is_disk_op )
> @@ -2111,8 +2111,7 @@ WERROR _srvsvc_NetShareAdd(struct pipes_struct *p,
>   ret = smbrun(command, NULL, NULL);
>   if (ret == 0) {
>   /* Tell everyone we updated smb.conf. */
> - message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0,
> - NULL);
> + message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>   }
>  
>   if ( is_disk_op )
> @@ -2219,8 +2218,7 @@ WERROR _srvsvc_NetShareDel(struct pipes_struct *p,
>   ret = smbrun(command, NULL, NULL);
>   if (ret == 0) {
>   /* Tell everyone we updated smb.conf. */
> - message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0,
> - NULL);
> + message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>   }
>  
>   if ( is_disk_op )
> diff --git a/source3/smbd/smbd_cleanupd.c b/source3/smbd/smbd_cleanupd.c
> index 152f63c31ce..90c12cdcd7c 100644
> --- a/source3/smbd/smbd_cleanupd.c
> +++ b/source3/smbd/smbd_cleanupd.c
> @@ -98,7 +98,7 @@ static void smbd_cleanupd_unlock(struct messaging_context *msg,
>   DBG_WARNING("Cleaning up brl and lock database after unclean "
>      "shutdown\n");
>  
> - message_send_all(msg, MSG_SMB_UNLOCK, NULL, 0, NULL);
> + message_send_all(msg, MSG_SMB_UNLOCK, NULL, 0);
>  
>   brl_revalidate(msg, private_data, msg_type, server_id, data);
>  }
> diff --git a/source3/smbd/statcache.c b/source3/smbd/statcache.c
> index 89a4a3d2237..2023d52fb84 100644
> --- a/source3/smbd/statcache.c
> +++ b/source3/smbd/statcache.c
> @@ -357,8 +357,7 @@ void smbd_send_stat_cache_delete_message(struct messaging_context *msg_ctx,
>   message_send_all(msg_ctx,
>   MSG_SMB_STAT_CACHE_DELETE,
>   name,
> - strlen(name)+1,
> - NULL);
> + strlen(name)+1);
>  #endif
>  }
>  
> diff --git a/source3/utils/smbcontrol.c b/source3/utils/smbcontrol.c
> index 4c4bfcb4e5b..08c1530cdff 100644
> --- a/source3/utils/smbcontrol.c
> +++ b/source3/utils/smbcontrol.c
> @@ -62,16 +62,13 @@ static bool send_message(struct messaging_context *msg_ctx,
>   const void *buf, int len)
>  {
>   bool ret;
> - int n_sent = 0;
>  
>   if (procid_to_pid(&pid) != 0)
>   return NT_STATUS_IS_OK(
>   messaging_send_buf(msg_ctx, pid, msg_type,
>     (const uint8_t *)buf, len));
>  
> - ret = message_send_all(msg_ctx, msg_type, buf, len, &n_sent);
> - DEBUG(10,("smbcontrol/send_message: broadcast message to "
> -  "%d processes\n", n_sent));
> + ret = message_send_all(msg_ctx, msg_type, buf, len);
>  
>   return ret;
>  }
> --
> 2.11.0
>
>
> From 337492caa06799c31e01d4d6bcf56137e227401e Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <[hidden email]>
> Date: Fri, 21 Jul 2017 19:03:26 +0200
> Subject: [PATCH 02/11] messaging: Add messaging_dgm_forall
>
> This factors out the traversal function from _wipe. It will be used to
> replace message_send_all soon.
>
> Signed-off-by: Volker Lendecke <[hidden email]>
> ---
>  source3/lib/messages_dgm.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
>  source3/lib/messages_dgm.h |  2 ++
>  2 files changed, 48 insertions(+)
>
> diff --git a/source3/lib/messages_dgm.c b/source3/lib/messages_dgm.c
> index 15c83f75c47..2b0190a4b45 100644
> --- a/source3/lib/messages_dgm.c
> +++ b/source3/lib/messages_dgm.c
> @@ -1614,6 +1614,52 @@ int messaging_dgm_wipe(void)
>   return 0;
>  }
>  
> +int messaging_dgm_forall(int (*fn)(pid_t pid, void *private_data),
> + void *private_data)
> +{
> + struct messaging_dgm_context *ctx = global_dgm_context;
> + DIR *msgdir;
> + struct dirent *dp;
> +
> + if (ctx == NULL) {
> + return ENOTCONN;
> + }
> +
> + messaging_dgm_validate(ctx);
> +
> + /*
> + * We scan the socket directory and not the lock directory. Otherwise
> + * we would race against messaging_dgm_lockfile_create's open(O_CREAT)
> + * and fcntl(SETLK).
> + */
> +
> + msgdir = opendir(ctx->socket_dir.buf);
> + if (msgdir == NULL) {
> + return errno;
> + }
> +
> + while ((dp = readdir(msgdir)) != NULL) {
> + unsigned long pid;
> + int ret;
> +
> + pid = strtoul(dp->d_name, NULL, 10);
> + if (pid == 0) {
> + /*
> + * . and .. and other malformed entries
> + */
> + continue;
> + }
> +
> + ret = fn(pid, private_data);
> + if (ret != 0) {
> + break;
> + }
> + }
> + closedir(msgdir);
> +
> + return 0;
> +}
> +
>  struct messaging_dgm_fde {
>   struct tevent_fd *fde;
>  };
> diff --git a/source3/lib/messages_dgm.h b/source3/lib/messages_dgm.h
> index ca11db1dacf..7221c72660b 100644
> --- a/source3/lib/messages_dgm.h
> +++ b/source3/lib/messages_dgm.h
> @@ -42,6 +42,8 @@ int messaging_dgm_send(pid_t pid,
>         const int *fds, size_t num_fds);
>  int messaging_dgm_cleanup(pid_t pid);
>  int messaging_dgm_wipe(void);
> +int messaging_dgm_forall(int (*fn)(pid_t pid, void *private_data),
> + void *private_data);
>  
>  struct messaging_dgm_fde;
>  struct messaging_dgm_fde *messaging_dgm_register_tevent_context(
> --
> 2.11.0
>
>
> From da8c746b8b516db20088038287b5848d7ee49ba8 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <[hidden email]>
> Date: Mon, 16 Oct 2017 21:52:35 +0200
> Subject: [PATCH 03/11] messaging_dgm: Use messaging_dgm_forall in dgm_wipe
>
> Signed-off-by: Volker Lendecke <[hidden email]>
> ---
>  source3/lib/messages_dgm.c | 59 +++++++++++++---------------------------------
>  1 file changed, 17 insertions(+), 42 deletions(-)
>
> diff --git a/source3/lib/messages_dgm.c b/source3/lib/messages_dgm.c
> index 2b0190a4b45..f3e4e742fc0 100644
> --- a/source3/lib/messages_dgm.c
> +++ b/source3/lib/messages_dgm.c
> @@ -1562,55 +1562,30 @@ int messaging_dgm_cleanup(pid_t pid)
>   return 0;
>  }
>  
> -int messaging_dgm_wipe(void)
> +static int messaging_dgm_wipe_fn(pid_t pid, void *private_data)
>  {
> - struct messaging_dgm_context *ctx = global_dgm_context;
> - DIR *msgdir;
> - struct dirent *dp;
> - pid_t our_pid = getpid();
> + pid_t *our_pid = (pid_t *)private_data;
>   int ret;
>  
> - if (ctx == NULL) {
> - return ENOTCONN;
> + if (pid == *our_pid) {
> + /*
> + * fcntl(F_GETLK) will succeed for ourselves, we hold
> + * that lock ourselves.
> + */
> + return 0;
>   }
>  
> - messaging_dgm_validate(ctx);
> -
> - /*
> - * We scan the socket directory and not the lock directory. Otherwise
> - * we would race against messaging_dgm_lockfile_create's open(O_CREAT)
> - * and fcntl(SETLK).
> - */
> + ret = messaging_dgm_cleanup(pid);
> + DEBUG(10, ("messaging_dgm_cleanup(%lu) returned %s\n",
> +   (unsigned long)pid, ret ? strerror(ret) : "ok"));
>  
> - msgdir = opendir(ctx->socket_dir.buf);
> - if (msgdir == NULL) {
> - return errno;
> - }
> -
> - while ((dp = readdir(msgdir)) != NULL) {
> - unsigned long pid;
> -
> - pid = strtoul(dp->d_name, NULL, 10);
> - if (pid == 0) {
> - /*
> - * . and .. and other malformed entries
> - */
> - continue;
> - }
> - if ((pid_t)pid == our_pid) {
> - /*
> - * fcntl(F_GETLK) will succeed for ourselves, we hold
> - * that lock ourselves.
> - */
> - continue;
> - }
> -
> - ret = messaging_dgm_cleanup(pid);
> - DEBUG(10, ("messaging_dgm_cleanup(%lu) returned %s\n",
> -   pid, ret ? strerror(ret) : "ok"));
> - }
> - closedir(msgdir);
> + return 0;
> +}
>  
> +int messaging_dgm_wipe(void)
> +{
> + pid_t pid = getpid();
> + messaging_dgm_forall(messaging_dgm_wipe_fn, &pid);
>   return 0;
>  }
>  
> --
> 2.11.0
>
>
> From e44c142aa543f9aebfa583a10d1f481c87502004 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <[hidden email]>
> Date: Thu, 26 Oct 2017 17:18:36 +0200
> Subject: [PATCH 04/11] smbcontrol: Use messaging_dgm_forall
>
> Doing stacktraces can be done locally only anyway
>
> Signed-off-by: Volker Lendecke <[hidden email]>
> ---
>  source3/utils/smbcontrol.c | 10 +++-------
>  1 file changed, 3 insertions(+), 7 deletions(-)
>
> diff --git a/source3/utils/smbcontrol.c b/source3/utils/smbcontrol.c
> index 08c1530cdff..417358b7d5b 100644
> --- a/source3/utils/smbcontrol.c
> +++ b/source3/utils/smbcontrol.c
> @@ -319,13 +319,9 @@ cleanup:
>   ptrace(PTRACE_DETACH, pid, NULL, NULL);
>  }
>  
> -static int stack_trace_server(const struct server_id *id,
> -      uint32_t msg_flags,
> -      void *priv)
> +static int stack_trace_server(pid_t pid, void *priv)
>  {
> - if (procid_is_local(id)) {
> - print_stack_trace(procid_to_pid(id), (int *)priv);
> - }
> + print_stack_trace(pid, (int *)priv);
>   return 0;
>  }
>  
> @@ -352,7 +348,7 @@ static bool do_daemon_stack_trace(struct tevent_context *ev_ctx,
>   */
>   print_stack_trace(dest, &count);
>   } else {
> - serverid_traverse_read(stack_trace_server, &count);
> + messaging_dgm_forall(stack_trace_server, &count);
>   }
>  
>   return True;
> --
> 2.11.0
>
>
> From 4966abd6b34ae7173934813c4f045222a8b3d5e8 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <[hidden email]>
> Date: Sun, 5 Nov 2017 12:02:26 +0100
> Subject: [PATCH 05/11] net: Remove "net serverid wipe"
>
> This used to be a hygiene command for clustered node startup. In
> clustered mode, CLEAR_IF_FIRST does not work, records can stay alive
> by means of recovery. serverid.tdb will soon die, so remove this
> command.
>
> Signed-off-by: Volker Lendecke <[hidden email]>
> ---
>  source3/utils/net_serverid.c | 33 ---------------------------------
>  1 file changed, 33 deletions(-)
>
> diff --git a/source3/utils/net_serverid.c b/source3/utils/net_serverid.c
> index 942f7a49024..0fc7a0118d2 100644
> --- a/source3/utils/net_serverid.c
> +++ b/source3/utils/net_serverid.c
> @@ -46,31 +46,6 @@ static int net_serverid_list(struct net_context *c, int argc,
>   return serverid_traverse_read(net_serverid_list_fn, NULL) ? 0 : -1;
>  }
>  
> -static int net_serverid_wipe_fn(struct db_record *rec,
> - const struct server_id *id,
> - uint32_t msg_flags, void *private_data)
> -{
> - NTSTATUS status;
> -
> - if (!procid_is_local(id)) {
> - return 0;
> - }
> - status = dbwrap_record_delete(rec);
> - if (!NT_STATUS_IS_OK(status)) {
> - struct server_id_buf idbuf;
> - DEBUG(1, ("Could not delete serverid.tdb record %s: %s\n",
> -  server_id_str_buf(*id, &idbuf), nt_errstr(status)));
> - }
> - return 0;
> -}
> -
> -static int net_serverid_wipe(struct net_context *c, int argc,
> -     const char **argv)
> -{
> - return serverid_traverse(net_serverid_wipe_fn, NULL) ? 0 : -1;
> -}
> -
> -
>  struct wipedbs_record_marker {
>   struct wipedbs_record_marker *prev, *next;
>   TDB_DATA key, val;
> @@ -705,14 +680,6 @@ int net_serverid(struct net_context *c, int argc, const char **argv)
>     "    List all entries from serverid.tdb")
>   },
>   {
> - "wipe",
> - net_serverid_wipe,
> - NET_TRANSPORT_LOCAL,
> - N_("Wipe the serverid.tdb for the current node"),
> - N_("net serverid wipe\n"
> -   "    Wipe the serverid.tdb for the current node")
> - },
> - {
>   "wipedbs",
>   net_serverid_wipedbs,
>   NET_TRANSPORT_LOCAL,
> --
> 2.11.0
>
>
> From 8015c82751825458203acd14203229a59b19ed50 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <[hidden email]>
> Date: Sun, 5 Nov 2017 12:09:08 +0100
> Subject: [PATCH 06/11] net: Remove "net serverid list"
>
> Traversing a clustered tdb is a pretty expensive operation. If someone
> really needs this command-line interface, we can re-add it for the local
> node using messaging_dgm_forall. If someone needs that globally, there's
> the "onnode all" script that could be used. Alternatively, we could
> implement an enhanced ping broadcast message also returning a processes
> unique id.
>
> Signed-off-by: Volker Lendecke <[hidden email]>
> ---
>  source3/utils/net_serverid.c | 25 -------------------------
>  1 file changed, 25 deletions(-)
>
> diff --git a/source3/utils/net_serverid.c b/source3/utils/net_serverid.c
> index 0fc7a0118d2..c826f95cc0d 100644
> --- a/source3/utils/net_serverid.c
> +++ b/source3/utils/net_serverid.c
> @@ -29,23 +29,6 @@
>  #include "util_tdb.h"
>  #include "librpc/gen_ndr/ndr_open_files.h"
>  
> -static int net_serverid_list_fn(const struct server_id *id,
> - uint32_t msg_flags, void *priv)
> -{
> - struct server_id_buf idbuf;
> - d_printf("%s %llu 0x%x\n", server_id_str_buf(*id, &idbuf),
> - (unsigned long long)id->unique_id,
> - (unsigned int)msg_flags);
> - return 0;
> -}
> -
> -static int net_serverid_list(struct net_context *c, int argc,
> -     const char **argv)
> -{
> - d_printf("pid unique_id msg_flags\n");
> - return serverid_traverse_read(net_serverid_list_fn, NULL) ? 0 : -1;
> -}
> -
>  struct wipedbs_record_marker {
>   struct wipedbs_record_marker *prev, *next;
>   TDB_DATA key, val;
> @@ -672,14 +655,6 @@ int net_serverid(struct net_context *c, int argc, const char **argv)
>  {
>   struct functable func[] = {
>   {
> - "list",
> - net_serverid_list,
> - NET_TRANSPORT_LOCAL,
> - N_("List all entries from serverid.tdb"),
> - N_("net serverid list\n"
> -   "    List all entries from serverid.tdb")
> - },
> - {
>   "wipedbs",
>   net_serverid_wipedbs,
>   NET_TRANSPORT_LOCAL,
> --
> 2.11.0
>
>
> From bf751a871549f03e81b9646c62f19e2e83dedb53 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <[hidden email]>
> Date: Tue, 25 Jul 2017 16:24:04 +0200
> Subject: [PATCH 07/11] messaging: Remove an unused #define
>
> Signed-off-by: Volker Lendecke <[hidden email]>
> ---
>  source3/include/messages.h | 12 ------------
>  1 file changed, 12 deletions(-)
>
> diff --git a/source3/include/messages.h b/source3/include/messages.h
> index 8d3b1d86e75..6a0340f5a7f 100644
> --- a/source3/include/messages.h
> +++ b/source3/include/messages.h
> @@ -35,18 +35,6 @@
>   */
>  #define MSG_FLAG_LOWPRIORITY 0x80000000
>  
> -
> -/*
> - * ctdb gives us 64-bit server ids for messaging_send. This is done to avoid
> - * pid clashes and to be able to register for special messages like "all
> - * smbds".
> - *
> - * Normal individual server id's have the upper 32 bits to 0, I picked "1" for
> - * Samba, other subsystems might use something else.
> - */
> -
> -#define MSG_SRVID_SAMBA 0x0000000100000000LL
> -
>  #include "librpc/gen_ndr/server_id.h"
>  #include "lib/util/data_blob.h"
>  #include "system/network.h"
> --
> 2.11.0
>
>
> From 5792dad8d471cfcd3475bacb6c055957cb8af695 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <[hidden email]>
> Date: Tue, 25 Jul 2017 17:10:27 +0200
> Subject: [PATCH 08/11] messaging: Always register CTDB_SRVID_SAMBA_PROCESS
>
> This will be used to broadcast to all processes, avoiding the costly
> traverse of serverid.tdb.
>
> Signed-off-by: Volker Lendecke <[hidden email]>
> ---
>  source3/include/ctdb_srvids.h | 6 ++++++
>  source3/lib/messages_ctdb.c   | 9 +++++++++
>  2 files changed, 15 insertions(+)
>
> diff --git a/source3/include/ctdb_srvids.h b/source3/include/ctdb_srvids.h
> index 500b5069e67..b51a4585060 100644
> --- a/source3/include/ctdb_srvids.h
> +++ b/source3/include/ctdb_srvids.h
> @@ -38,3 +38,9 @@
>   * locally according to the non-clustered local notify.tdb
>   */
>  #define CTDB_SRVID_SAMBA_NOTIFY_PROXY  0xFE00000000000001LL
> +
> +/*
> + * SRVID for all processes that come from Samba. Used to be
> + * MSG_SRVID_SAMBA in the past. Now used for message_send_all.
> + */
> +#define CTDB_SRVID_SAMBA_PROCESS  0xFE00000000000002LL
> diff --git a/source3/lib/messages_ctdb.c b/source3/lib/messages_ctdb.c
> index a2a7c215f23..66b9f55d256 100644
> --- a/source3/lib/messages_ctdb.c
> +++ b/source3/lib/messages_ctdb.c
> @@ -26,6 +26,7 @@
>  #include "lib/messages_util.h"
>  #include "ctdbd_conn.h"
>  #include "lib/cluster_support.h"
> +#include "ctdb_srvids.h"
>  
>  struct messaging_ctdb_context;
>  
> @@ -111,6 +112,14 @@ int messaging_ctdb_init(const char *sockname, int timeout, uint64_t unique_id,
>   goto fail;
>   }
>  
> + ret = register_with_ctdbd(ctx->conn, CTDB_SRVID_SAMBA_PROCESS,
> +  messaging_ctdb_recv, ctx);
> + if (ret != 0) {
> + DBG_DEBUG("register_with_ctdbd returned %s (%d)\n",
> +  strerror(ret), ret);
> + goto fail;
> + }
> +
>   ret = register_with_ctdbd(ctx->conn, unique_id, NULL, NULL);
>   if (ret != 0) {
>   DBG_DEBUG("register_with_ctdbd returned %s (%d)\n",
> --
> 2.11.0
>
>
> From 594edfcab4399c9eee5d96d62aa4e498fec50916 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <[hidden email]>
> Date: Sun, 5 Nov 2017 12:44:01 +0100
> Subject: [PATCH 09/11] lib: Add messaging_send_all
>
> This will replace message_send_all. With messaging_dgm_forall we have
> a local broadcast mechanism, and ctdb can also broadcast
> everywhere. So there's no need for a separate traverse/send mechanism.
>
> There's no good error reporting mechanism for broadcasting, so make
> this function void.
>
> This drops the message_type filtering. I believe that this does not matter in
> practice, since messaging is a lot cheaper with dgm instead of the old tdb
> based messaging. If someone presents a use case where this matters, nowadays
> I'd much rather extend the messaging_dgm lock file format (where the unique id
> lives right now) with the filter bits.
>
> Signed-off-by: Volker Lendecke <[hidden email]>
> ---
>  source3/include/messages.h |  2 ++
>  source3/lib/messages.c     | 74 ++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 76 insertions(+)
>
> diff --git a/source3/include/messages.h b/source3/include/messages.h
> index 6a0340f5a7f..29c394af317 100644
> --- a/source3/include/messages.h
> +++ b/source3/include/messages.h
> @@ -96,6 +96,8 @@ NTSTATUS messaging_send_iov(struct messaging_context *msg_ctx,
>      struct server_id server, uint32_t msg_type,
>      const struct iovec *iov, int iovlen,
>      const int *fds, size_t num_fds);
> +void messaging_send_all(struct messaging_context *msg_ctx,
> + int msg_type, const void *buf, size_t len);
>  
>  struct tevent_req *messaging_filtered_read_send(
>   TALLOC_CTX *mem_ctx, struct tevent_context *ev,
> diff --git a/source3/lib/messages.c b/source3/lib/messages.c
> index 01029b2d68b..a0a3f9fb1ba 100644
> --- a/source3/lib/messages.c
> +++ b/source3/lib/messages.c
> @@ -60,6 +60,12 @@
>  #include "lib/messages_ctdb_ref.h"
>  #include "lib/messages_util.h"
>  #include "cluster_support.h"
> +#include "ctdbd_conn.h"
> +#include "ctdb_srvids.h"
> +
> +#ifdef CLUSTER_SUPPORT
> +#include "ctdb_protocol.h"
> +#endif
>  
>  struct messaging_callback {
>   struct messaging_callback *prev, *next;
> @@ -513,6 +519,7 @@ static NTSTATUS messaging_init_internal(TALLOC_CTX *mem_ctx,
>   }
>   talloc_set_destructor(ctx, messaging_context_destructor);
>  
> +#ifdef CLUSTER_SUPPORT
>   if (lp_clustering()) {
>   ctx->msg_ctdb_ref = messaging_ctdb_ref(
>   ctx, ctx->event_ctx,
> @@ -525,6 +532,8 @@ static NTSTATUS messaging_init_internal(TALLOC_CTX *mem_ctx,
>   goto done;
>   }
>   }
> +#endif
> +
>   ctx->id.vnn = get_my_vnn();
>  
>   ctx->names_db = server_id_db_init(ctx,
> @@ -836,6 +845,71 @@ NTSTATUS messaging_send_iov(struct messaging_context *msg_ctx,
>   return NT_STATUS_OK;
>  }
>  
> +struct send_all_state {
> + struct messaging_context *msg_ctx;
> + int msg_type;
> + const void *buf;
> + size_t len;
> +};
> +
> +static int send_all_fn(pid_t pid, void *private_data)
> +{
> + struct send_all_state *state = private_data;
> + NTSTATUS status;
> +
> + status = messaging_send_buf(state->msg_ctx, pid_to_procid(pid),
> +    state->msg_type, state->buf, state->len);
> + if (!NT_STATUS_IS_OK(status)) {
> + DBG_WARNING("messaging_send_buf to %ju failed: %s\n",
> +    (uintmax_t)pid, nt_errstr(status));
> + }
> +
> + return 0;
> +}
> +
> +void messaging_send_all(struct messaging_context *msg_ctx,
> + int msg_type, const void *buf, size_t len)
> +{
> + struct send_all_state state = {
> + .msg_ctx = msg_ctx, .msg_type = msg_type,
> + .buf = buf, .len = len
> + };
> + int ret;
> +
> +#ifdef CLUSTER_SUPPORT
> + if (lp_clustering()) {
> + struct ctdbd_connection *conn = messaging_ctdb_connection();
> + uint8_t msghdr[MESSAGE_HDR_LENGTH];
> + struct iovec iov[] = {
> + { .iov_base = msghdr,
> +  .iov_len = sizeof(msghdr) },
> + { .iov_base = discard_const_p(void, buf),
> +  .iov_len = len }
> + };
> +
> + message_hdr_put(msghdr, msg_type, messaging_server_id(msg_ctx),
> + (struct server_id) {0});
> +
> + ret = ctdbd_messaging_send_iov(
> + conn, CTDB_BROADCAST_CONNECTED,
> + CTDB_SRVID_SAMBA_PROCESS,
> + iov, ARRAY_SIZE(iov));
> + if (ret != 0) {
> + DBG_WARNING("ctdbd_messaging_send_iov failed: %s\n",
> +    strerror(ret));
> + }
> +
> + return;
> + }
> +#endif
> +
> + ret = messaging_dgm_forall(send_all_fn, &state);
> + if (ret != 0) {
> + DBG_WARNING("messaging_dgm_forall failed: %s\n",
> +    strerror(ret));
> + }
> +}
> +
>  static struct messaging_rec *messaging_rec_dup(TALLOC_CTX *mem_ctx,
>         struct messaging_rec *rec)
>  {
> --
> 2.11.0
>
>
> From 70d427395131b6d916013e57e1f8ff9ad683ef5b Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <[hidden email]>
> Date: Sun, 5 Nov 2017 12:54:10 +0100
> Subject: [PATCH 10/11] lib: Use messaging_send_all instead of message_send_all
>
> Just a global search&replace
>
> Signed-off-by: Volker Lendecke <[hidden email]>
> ---
>  source3/passdb/pdb_interface.c              | 8 ++++----
>  source3/printing/queue_process.c            | 2 +-
>  source3/rpc_server/fss/srv_fss_agent.c      | 9 +++++----
>  source3/rpc_server/spoolss/srv_spoolss_nt.c | 4 ++--
>  source3/rpc_server/srvsvc/srv_srvsvc_nt.c   | 8 ++++----
>  source3/smbd/smbd_cleanupd.c                | 2 +-
>  source3/smbd/statcache.c                    | 8 ++++----
>  source3/utils/smbcontrol.c                  | 6 ++----
>  8 files changed, 23 insertions(+), 24 deletions(-)
>
> diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c
> index 9827046187e..7fdc33c4fa7 100644
> --- a/source3/passdb/pdb_interface.c
> +++ b/source3/passdb/pdb_interface.c
> @@ -648,10 +648,10 @@ NTSTATUS pdb_delete_user(TALLOC_CTX *mem_ctx, struct samu *sam_acct)
>   * just return */
>   return status;
>   }
> - message_send_all(server_messaging_context(),
> - ID_CACHE_DELETE,
> - msg_data,
> - strlen(msg_data) + 1);
> + messaging_send_all(server_messaging_context(),
> +   ID_CACHE_DELETE,
> +   msg_data,
> +   strlen(msg_data) + 1);
>  
>   TALLOC_FREE(msg_data);
>   return status;
> diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c
> index 381ef348805..7a3b80aae0c 100644
> --- a/source3/printing/queue_process.c
> +++ b/source3/printing/queue_process.c
> @@ -144,7 +144,7 @@ static void reload_pcap_change_notify(struct tevent_context *ev,
>   */
>   delete_and_reload_printers_full(ev, msg_ctx);
>  
> - message_send_all(msg_ctx, MSG_PRINTER_PCAP, NULL, 0);
> + messaging_send_all(msg_ctx, MSG_PRINTER_PCAP, NULL, 0);
>  }
>  
>  struct bq_state {
> diff --git a/source3/rpc_server/fss/srv_fss_agent.c b/source3/rpc_server/fss/srv_fss_agent.c
> index c0bf7ddd11a..0e5c82ec5e9 100644
> --- a/source3/rpc_server/fss/srv_fss_agent.c
> +++ b/source3/rpc_server/fss/srv_fss_agent.c
> @@ -1235,7 +1235,7 @@ uint32_t _fss_ExposeShadowCopySet(struct pipes_struct *p,
>   }
>   unbecome_root();
>  
> - message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
> + messaging_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>   for (sc = sc_set->scs; sc; sc = sc->next) {
>   struct fss_sc_smap *sm;
>   for (sm = sc->smaps; sm; sm = sm->next)
> @@ -1577,7 +1577,7 @@ static NTSTATUS sc_smap_unexpose(struct messaging_context *msg_ctx,
>   ret = NT_STATUS_UNSUCCESSFUL;
>   goto err_cancel;
>   }
> - message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
> + messaging_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>   } else {
>   ret = NT_STATUS_OK;
>   goto err_cancel;
> @@ -1660,8 +1660,9 @@ uint32_t _fss_DeleteShareMapping(struct pipes_struct *p,
>   goto err_tmp_free;
>   }
>  
> - message_send_all(p->msg_ctx, MSG_SMB_FORCE_TDIS, sc_smap->sc_share_name,
> - strlen(sc_smap->sc_share_name) + 1);
> + messaging_send_all(p->msg_ctx, MSG_SMB_FORCE_TDIS,
> +   sc_smap->sc_share_name,
> +   strlen(sc_smap->sc_share_name) + 1);
>  
>   if (sc->smaps_count > 1) {
>   /* do not delete the underlying snapshot - still in use */
> diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> index d8b6023e5e9..f0226ba9441 100644
> --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c
> +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c
> @@ -368,7 +368,7 @@ static WERROR delete_printer_hook(TALLOC_CTX *ctx, struct security_token *token,
>   ret = smbrun(command, NULL, NULL);
>   if (ret == 0) {
>   /* Tell everyone we updated smb.conf. */
> - message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
> + messaging_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>   }
>  
>   if ( is_print_op )
> @@ -6433,7 +6433,7 @@ static bool add_printer_hook(TALLOC_CTX *ctx, struct security_token *token,
>   ret = smbrun(command, &fd, NULL);
>   if (ret == 0) {
>   /* Tell everyone we updated smb.conf. */
> - message_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
> + messaging_send_all(msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>   }
>  
>   if ( is_print_op )
> diff --git a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
> index 899feb22da9..2ff8e64fccc 100644
> --- a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
> +++ b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
> @@ -1908,8 +1908,8 @@ WERROR _srvsvc_NetShareSetInfo(struct pipes_struct *p,
>   ret = smbrun(command, NULL, NULL);
>   if (ret == 0) {
>   /* Tell everyone we updated smb.conf. */
> - message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED,
> - NULL, 0);
> + messaging_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED,
> +   NULL, 0);
>   }
>  
>   if ( is_disk_op )
> @@ -2111,7 +2111,7 @@ WERROR _srvsvc_NetShareAdd(struct pipes_struct *p,
>   ret = smbrun(command, NULL, NULL);
>   if (ret == 0) {
>   /* Tell everyone we updated smb.conf. */
> - message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
> + messaging_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>   }
>  
>   if ( is_disk_op )
> @@ -2218,7 +2218,7 @@ WERROR _srvsvc_NetShareDel(struct pipes_struct *p,
>   ret = smbrun(command, NULL, NULL);
>   if (ret == 0) {
>   /* Tell everyone we updated smb.conf. */
> - message_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
> + messaging_send_all(p->msg_ctx, MSG_SMB_CONF_UPDATED, NULL, 0);
>   }
>  
>   if ( is_disk_op )
> diff --git a/source3/smbd/smbd_cleanupd.c b/source3/smbd/smbd_cleanupd.c
> index 90c12cdcd7c..cfb75c971be 100644
> --- a/source3/smbd/smbd_cleanupd.c
> +++ b/source3/smbd/smbd_cleanupd.c
> @@ -98,7 +98,7 @@ static void smbd_cleanupd_unlock(struct messaging_context *msg,
>   DBG_WARNING("Cleaning up brl and lock database after unclean "
>      "shutdown\n");
>  
> - message_send_all(msg, MSG_SMB_UNLOCK, NULL, 0);
> + messaging_send_all(msg, MSG_SMB_UNLOCK, NULL, 0);
>  
>   brl_revalidate(msg, private_data, msg_type, server_id, data);
>  }
> diff --git a/source3/smbd/statcache.c b/source3/smbd/statcache.c
> index 2023d52fb84..d49f5eebdf0 100644
> --- a/source3/smbd/statcache.c
> +++ b/source3/smbd/statcache.c
> @@ -354,10 +354,10 @@ void smbd_send_stat_cache_delete_message(struct messaging_context *msg_ctx,
>   const char *name)
>  {
>  #ifdef DEVELOPER
> - message_send_all(msg_ctx,
> - MSG_SMB_STAT_CACHE_DELETE,
> - name,
> - strlen(name)+1);
> + messaging_send_all(msg_ctx,
> +   MSG_SMB_STAT_CACHE_DELETE,
> +   name,
> +   strlen(name)+1);
>  #endif
>  }
>  
> diff --git a/source3/utils/smbcontrol.c b/source3/utils/smbcontrol.c
> index 417358b7d5b..0f6dacce20d 100644
> --- a/source3/utils/smbcontrol.c
> +++ b/source3/utils/smbcontrol.c
> @@ -61,16 +61,14 @@ static bool send_message(struct messaging_context *msg_ctx,
>   struct server_id pid, int msg_type,
>   const void *buf, int len)
>  {
> - bool ret;
> -
>   if (procid_to_pid(&pid) != 0)
>   return NT_STATUS_IS_OK(
>   messaging_send_buf(msg_ctx, pid, msg_type,
>     (const uint8_t *)buf, len));
>  
> - ret = message_send_all(msg_ctx, msg_type, buf, len);
> + messaging_send_all(msg_ctx, msg_type, buf, len);
>  
> - return ret;
> + return true;
>  }
>  
>  static void smbcontrol_timeout(struct tevent_context *event_ctx,
> --
> 2.11.0
>
>
> From bebc8201be2f3c5255b631d67e20fd2227380b1d Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <[hidden email]>
> Date: Sun, 5 Nov 2017 12:58:09 +0100
> Subject: [PATCH 11/11] lib: Remove unused serverid.tdb
>
> Signed-off-by: Volker Lendecke <[hidden email]>
> ---
>  source3/include/serverid.h       |  49 ------
>  source3/lib/serverid.c           | 344 ---------------------------------------
>  source3/nmbd/nmbd.c              |  10 --
>  source3/printing/nt_printing.c   |   4 -
>  source3/printing/queue_process.c |   7 -
>  source3/printing/spoolssd.c      |  13 --
>  source3/rpc_server/epmd.c        |   9 -
>  source3/rpc_server/fssd.c        |   9 -
>  source3/rpc_server/lsasd.c       |  11 --
>  source3/rpc_server/mdssd.c       |  11 --
>  source3/smbd/negprot.c           |   8 -
>  source3/smbd/process.c           |   9 -
>  source3/smbd/scavenger.c         |   8 -
>  source3/smbd/server.c            |  20 ---
>  source3/smbd/server_exit.c       |   8 -
>  source3/smbd/smbd_cleanupd.c     |  14 --
>  source3/torture/vfstest.c        |   2 -
>  source3/winbindd/winbindd.c      |  14 --
>  18 files changed, 550 deletions(-)
>
> diff --git a/source3/include/serverid.h b/source3/include/serverid.h
> index a73a6f6986c..89487cfa62d 100644
> --- a/source3/include/serverid.h
> +++ b/source3/include/serverid.h
> @@ -21,60 +21,11 @@
>  #define __SERVERID_H__
>  
>  #include "replace.h"
> -#include "lib/dbwrap/dbwrap.h"
>  #include "librpc/gen_ndr/server_id.h"
>  
> -/* Flags to classify messages - used in message_send_all() */
> -/* Sender will filter by flag. */
> -
> -#define FLAG_MSG_GENERAL 0x0001
> -#define FLAG_MSG_SMBD 0x0002
> -#define FLAG_MSG_NMBD 0x0004
> -#define FLAG_MSG_WINBIND 0x0008
> -#define FLAG_MSG_PRINT_GENERAL 0x0010
> -/* dbwrap messages 4001-4999 */
> -#define FLAG_MSG_DBWRAP 0x0020
> -
> -/*
> - * Register a server with its unique id
> - */
> -bool serverid_register(const struct server_id id, uint32_t msg_flags);
> -
> -/*
> - * De-register a server with its unique id
> - */
> -bool serverid_deregister(const struct server_id id);
> -
>  /*
>   * Check existence of a server id
>   */
>  bool serverid_exists(const struct server_id *id);
>  
> -/*
> - * Walk the list of server_ids registered
> - */
> -bool serverid_traverse(int (*fn)(struct db_record *rec,
> - const struct server_id *id,
> - uint32_t msg_flags,
> - void *private_data),
> -       void *private_data);
> -
> -/*
> - * Walk the list of server_ids registered read-only
> - */
> -bool serverid_traverse_read(int (*fn)(const struct server_id *id,
> -      uint32_t msg_flags,
> -      void *private_data),
> -    void *private_data);
> -/*
> - * Ensure CLEAR_IF_FIRST works fine, to be called from the parent smbd
> - */
> -bool serverid_parent_init(TALLOC_CTX *mem_ctx);
> -
> -struct messaging_context;
> -
> -bool message_send_all(struct messaging_context *msg_ctx,
> -      int msg_type,
> -      const void *buf, size_t len);
> -
>  #endif
> diff --git a/source3/lib/serverid.c b/source3/lib/serverid.c
> index 9fd506df5fd..b4125cb9142 100644
> --- a/source3/lib/serverid.c
> +++ b/source3/lib/serverid.c
> @@ -18,157 +18,13 @@
>  */
>  
>  #include "includes.h"
> -#include "system/filesys.h"
>  #include "lib/util/server_id.h"
>  #include "serverid.h"
> -#include "util_tdb.h"
> -#include "dbwrap/dbwrap.h"
> -#include "dbwrap/dbwrap_open.h"
> -#include "lib/tdb_wrap/tdb_wrap.h"
>  #include "lib/param/param.h"
>  #include "ctdbd_conn.h"
> -#include "messages.h"
>  #include "lib/messages_ctdb.h"
>  #include "lib/messages_dgm.h"
>  
> -struct serverid_key {
> - pid_t pid;
> - uint32_t task_id;
> - uint32_t vnn;
> -};
> -
> -struct serverid_data {
> - uint64_t unique_id;
> - uint32_t msg_flags;
> -};
> -
> -static struct db_context *serverid_db(void)
> -{
> - static struct db_context *db;
> - char *db_path;
> -
> - if (db != NULL) {
> - return db;
> - }
> -
> - db_path = lock_path("serverid.tdb");
> - if (db_path == NULL) {
> - return NULL;
> - }
> -
> - db = db_open(NULL, db_path, 0,
> -     TDB_DEFAULT|TDB_CLEAR_IF_FIRST|TDB_INCOMPATIBLE_HASH,
> -     O_RDWR|O_CREAT, 0644, DBWRAP_LOCK_ORDER_2,
> -     DBWRAP_FLAG_NONE);
> - TALLOC_FREE(db_path);
> - return db;
> -}
> -
> -bool serverid_parent_init(TALLOC_CTX *mem_ctx)
> -{
> - struct db_context *db;
> -
> - db = serverid_db();
> - if (db == NULL) {
> - DEBUG(1, ("could not open serverid.tdb: %s\n",
> -  strerror(errno)));
> - return false;
> - }
> -
> - return true;
> -}
> -
> -static void serverid_fill_key(const struct server_id *id,
> -      struct serverid_key *key)
> -{
> - ZERO_STRUCTP(key);
> - key->pid = id->pid;
> - key->task_id = id->task_id;
> - key->vnn = id->vnn;
> -}
> -
> -bool serverid_register(const struct server_id id, uint32_t msg_flags)
> -{
> - struct db_context *db;
> - struct serverid_key key;
> - struct serverid_data data;
> - struct db_record *rec;
> - TDB_DATA tdbkey, tdbdata;
> - NTSTATUS status;
> - bool ret = false;
> -
> - db = serverid_db();
> - if (db == NULL) {
> - return false;
> - }
> -
> - serverid_fill_key(&id, &key);
> - tdbkey = make_tdb_data((uint8_t *)&key, sizeof(key));
> -
> - rec = dbwrap_fetch_locked(db, talloc_tos(), tdbkey);
> - if (rec == NULL) {
> - DEBUG(1, ("Could not fetch_lock serverid.tdb record\n"));
> - return false;
> - }
> -
> - ZERO_STRUCT(data);
> - data.unique_id = id.unique_id;
> - data.msg_flags = msg_flags;
> -
> - tdbdata = make_tdb_data((uint8_t *)&data, sizeof(data));
> - status = dbwrap_record_store(rec, tdbdata, 0);
> - if (!NT_STATUS_IS_OK(status)) {
> - DEBUG(1, ("Storing serverid.tdb record failed: %s\n",
> -  nt_errstr(status)));
> - goto done;
> - }
> -
> - if (lp_clustering()) {
> - register_with_ctdbd(messaging_ctdb_connection(), id.unique_id,
> -    NULL, NULL);
> - }
> -
> - ret = true;
> -done:
> - TALLOC_FREE(rec);
> - return ret;
> -}
> -
> -bool serverid_deregister(struct server_id id)
> -{
> - struct db_context *db;
> - struct serverid_key key;
> - struct db_record *rec;
> - TDB_DATA tdbkey;
> - NTSTATUS status;
> - bool ret = false;
> -
> - db = serverid_db();
> - if (db == NULL) {
> - return false;
> - }
> -
> - serverid_fill_key(&id, &key);
> - tdbkey = make_tdb_data((uint8_t *)&key, sizeof(key));
> -
> - rec = dbwrap_fetch_locked(db, talloc_tos(), tdbkey);
> - if (rec == NULL) {
> - DEBUG(1, ("Could not fetch_lock serverid.tdb record\n"));
> - return false;
> - }
> -
> - status = dbwrap_record_delete(rec);
> - if (!NT_STATUS_IS_OK(status)) {
> - DEBUG(1, ("Deleting serverid.tdb record failed: %s\n",
> -  nt_errstr(status)));
> - goto done;
> - }
> - ret = true;
> -done:
> - TALLOC_FREE(rec);
> - return ret;
> -}
> -
>  static bool serverid_exists_local(const struct server_id *id)
>  {
>   bool exists = process_exists_by_pid(id->pid);
> @@ -204,203 +60,3 @@ bool serverid_exists(const struct server_id *id)
>  
>   return false;
>  }
> -
> -static bool serverid_rec_parse(const struct db_record *rec,
> -       struct server_id *id, uint32_t *msg_flags)
> -{
> - struct serverid_key key;
> - struct serverid_data data;
> - TDB_DATA tdbkey;
> - TDB_DATA tdbdata;
> -
> - tdbkey = dbwrap_record_get_key(rec);
> - tdbdata = dbwrap_record_get_value(rec);
> -
> - if (tdbkey.dsize != sizeof(key)) {
> - DEBUG(1, ("Found invalid key length %d in serverid.tdb\n",
> -  (int)tdbkey.dsize));
> - return false;
> - }
> - if (tdbdata.dsize != sizeof(data)) {
> - DEBUG(1, ("Found invalid value length %d in serverid.tdb\n",
> -  (int)tdbdata.dsize));
> - return false;
> - }
> -
> - memcpy(&key, tdbkey.dptr, sizeof(key));
> - memcpy(&data, tdbdata.dptr, sizeof(data));
> -
> - id->pid = key.pid;
> - id->task_id = key.task_id;
> - id->vnn = key.vnn;
> - id->unique_id = data.unique_id;
> - *msg_flags = data.msg_flags;
> - return true;
> -}
> -
> -struct serverid_traverse_read_state {
> - int (*fn)(const struct server_id *id, uint32_t msg_flags,
> -  void *private_data);
> - void *private_data;
> -};
> -
> -static int serverid_traverse_read_fn(struct db_record *rec, void *private_data)
> -{
> - struct serverid_traverse_read_state *state =
> - (struct serverid_traverse_read_state *)private_data;
> - struct server_id id;
> - uint32_t msg_flags;
> -
> - if (!serverid_rec_parse(rec, &id, &msg_flags)) {
> - return 0;
> - }
> - return state->fn(&id, msg_flags,state->private_data);
> -}
> -
> -bool serverid_traverse_read(int (*fn)(const struct server_id *id,
> -      uint32_t msg_flags, void *private_data),
> -    void *private_data)
> -{
> - struct db_context *db;
> - struct serverid_traverse_read_state state;
> - NTSTATUS status;
> -
> - db = serverid_db();
> - if (db == NULL) {
> - return false;
> - }
> - state.fn = fn;
> - state.private_data = private_data;
> -
> - status = dbwrap_traverse_read(db, serverid_traverse_read_fn, &state,
> -      NULL);
> - return NT_STATUS_IS_OK(status);
> -}
> -
> -struct serverid_traverse_state {
> - int (*fn)(struct db_record *rec, const struct server_id *id,
> -  uint32_t msg_flags, void *private_data);
> - void *private_data;
> -};
> -
> -static int serverid_traverse_fn(struct db_record *rec, void *private_data)
> -{
> - struct serverid_traverse_state *state =
> - (struct serverid_traverse_state *)private_data;
> - struct server_id id;
> - uint32_t msg_flags;
> -
> - if (!serverid_rec_parse(rec, &id, &msg_flags)) {
> - return 0;
> - }
> - return state->fn(rec, &id, msg_flags, state->private_data);
> -}
> -
> -bool serverid_traverse(int (*fn)(struct db_record *rec,
> - const struct server_id *id,
> - uint32_t msg_flags, void *private_data),
> -    void *private_data)
> -{
> - struct db_context *db;
> - struct serverid_traverse_state state;
> - NTSTATUS status;
> -
> - db = serverid_db();
> - if (db == NULL) {
> - return false;
> - }
> - state.fn = fn;
> - state.private_data = private_data;
> -
> - status = dbwrap_traverse(db, serverid_traverse_fn, &state, NULL);
> - return NT_STATUS_IS_OK(status);
> -}
> -
> -struct msg_all {
> - struct messaging_context *msg_ctx;
> - int msg_type;
> - uint32_t msg_flag;
> - const void *buf;
> - size_t len;
> - int n_sent;
> -};
> -
> -/****************************************************************************
> - Send one of the messages for the broadcast.
> -****************************************************************************/
> -
> -static int traverse_fn(struct db_record *rec, const struct server_id *id,
> -       uint32_t msg_flags, void *state)
> -{
> - struct msg_all *msg_all = (struct msg_all *)state;
> - NTSTATUS status;
> -
> - /* Don't send if the receiver hasn't registered an interest. */
> -
> - if((msg_flags & msg_all->msg_flag) == 0) {
> - return 0;
> - }
> -
> - /* If the msg send fails because the pid was not found (i.e. smbd died),
> - * the msg has already been deleted from the messages.tdb.*/
> -
> - status = messaging_send_buf(msg_all->msg_ctx, *id, msg_all->msg_type,
> -    (const uint8_t *)msg_all->buf, msg_all->len);
> -
> - if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_HANDLE)) {
> - struct server_id_buf idbuf;
> -
> - /*
> - * If the pid was not found delete the entry from
> - * serverid.tdb
> - */
> -
> - DEBUG(2, ("pid %s doesn't exist\n",
> -  server_id_str_buf(*id, &idbuf)));
> -
> - dbwrap_record_delete(rec);
> - }
> - msg_all->n_sent++;
> - return 0;
> -}
> -
> -/**
> - * Send a message to all smbd processes.
> - *
> - * It isn't very efficient, but should be OK for the sorts of
> - * applications that use it. When we need efficient broadcast we can add
> - * it.
> - *
> - * @retval True for success.
> - **/
> -bool message_send_all(struct messaging_context *msg_ctx,
> -      int msg_type,
> -      const void *buf, size_t len)
> -{
> - struct msg_all msg_all;
> -
> - msg_all.msg_type = msg_type;
> - if (msg_type < 0x100) {
> - msg_all.msg_flag = FLAG_MSG_GENERAL;
> - } else if (msg_type > 0x100 && msg_type < 0x200) {
> - msg_all.msg_flag = FLAG_MSG_NMBD;
> - } else if (msg_type > 0x200 && msg_type < 0x300) {
> - msg_all.msg_flag = FLAG_MSG_PRINT_GENERAL;
> - } else if (msg_type > 0x300 && msg_type < 0x400) {
> - msg_all.msg_flag = FLAG_MSG_SMBD;
> - } else if (msg_type > 0x400 && msg_type < 0x600) {
> - msg_all.msg_flag = FLAG_MSG_WINBIND;
> - } else if (msg_type > 4000 && msg_type < 5000) {
> - msg_all.msg_flag = FLAG_MSG_DBWRAP;
> - } else {
> - return false;
> - }
> -
> - msg_all.buf = buf;
> - msg_all.len = len;
> - msg_all.n_sent = 0;
> - msg_all.msg_ctx = msg_ctx;
> -
> - serverid_traverse(traverse_fn, &msg_all);
> - return true;
> -}
> diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c
> index 14eaef647d0..9be708a9c02 100644
> --- a/source3/nmbd/nmbd.c
> +++ b/source3/nmbd/nmbd.c
> @@ -70,7 +70,6 @@ static void terminate(struct messaging_context *msg)
>   kill_async_dns_child();
>  
>   gencache_stabilize();
> - serverid_deregister(messaging_server_id(msg));
>  
>   pidfile_unlink(lp_pid_directory(), "nmbd");
>  
> @@ -1015,15 +1014,6 @@ static bool open_sockets(bool isdaemon, int port)
>   exit(1);
>   }
>  
> - /* get broadcast messages */
> -
> - if (!serverid_register(messaging_server_id(msg),
> - FLAG_MSG_GENERAL |
> - FLAG_MSG_NMBD |
> - FLAG_MSG_DBWRAP)) {
> - exit_daemon("Could not register NMBD process in serverid.tdb", EACCES);
> - }
> -
>   messaging_register(msg, NULL, MSG_FORCE_ELECTION,
>     nmbd_message_election);
>  #if 0
> diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c
> index 932d4d76df0..2e500f18c7d 100644
> --- a/source3/printing/nt_printing.c
> +++ b/source3/printing/nt_printing.c
> @@ -243,10 +243,6 @@ bool nt_printing_init(struct messaging_context *msg_ctx)
>   messaging_register(msg_ctx, NULL, MSG_PRINTER_DRVUPGRADE,
>   forward_drv_upgrade_printer_msg);
>  
> - /* of course, none of the message callbacks matter if you don't
> -   tell messages.c that you interested in receiving PRINT_GENERAL
> -   msgs.  This is done in serverid_register() */
> -
>   if ( lp_security() == SEC_ADS ) {
>   win_rc = check_published_printers(msg_ctx);
>   if (!W_ERROR_IS_OK(win_rc))
> diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c
> index 7a3b80aae0c..24708c19537 100644
> --- a/source3/printing/queue_process.c
> +++ b/source3/printing/queue_process.c
> @@ -27,7 +27,6 @@
>  #include "printing.h"
>  #include "printing/pcap.h"
>  #include "printing/queue_process.h"
> -#include "serverid.h"
>  #include "locking/proto.h"
>  #include "smbd/smbd.h"
>  #include "rpc_server/rpc_config.h"
> @@ -392,12 +391,6 @@ pid_t start_background_queue(struct tevent_context *ev,
>   exit(1);
>   }
>  
> - if (!serverid_register(messaging_server_id(msg_ctx),
> -       FLAG_MSG_GENERAL |
> -       FLAG_MSG_PRINT_GENERAL)) {
> - exit(1);
> - }
> -
>   if (!locking_init()) {
>   exit(1);
>   }
> diff --git a/source3/printing/spoolssd.c b/source3/printing/spoolssd.c
> index 48a914ef6de..2b08d580f35 100644
> --- a/source3/printing/spoolssd.c
> +++ b/source3/printing/spoolssd.c
> @@ -17,7 +17,6 @@
>     along with this program.  If not, see <http://www.gnu.org/licenses/>.
>  */
>  #include "includes.h"
> -#include "serverid.h"
>  #include "smbd/smbd.h"
>  
>  #include "messages.h"
> @@ -280,12 +279,6 @@ static bool spoolss_child_init(struct tevent_context *ev_ctx,
>   return false;
>   }
>  
> - if (!serverid_register(messaging_server_id(msg_ctx),
> - FLAG_MSG_GENERAL |
> - FLAG_MSG_PRINT_GENERAL)) {
> - return false;
> - }
> -
>   if (!locking_init()) {
>   return false;
>   }
> @@ -694,12 +687,6 @@ pid_t start_spoolssd(struct tevent_context *ev_ctx,
>   exit(1);
>   }
>  
> - if (!serverid_register(messaging_server_id(msg_ctx),
> - FLAG_MSG_GENERAL |
> - FLAG_MSG_PRINT_GENERAL)) {
> - exit(1);
> - }
> -
>   if (!locking_init()) {
>   exit(1);
>   }
> diff --git a/source3/rpc_server/epmd.c b/source3/rpc_server/epmd.c
> index faf60f5c95b..0b94a1cf4ef 100644
> --- a/source3/rpc_server/epmd.c
> +++ b/source3/rpc_server/epmd.c
> @@ -21,7 +21,6 @@
>  
>  #include "includes.h"
>  
> -#include "serverid.h"
>  #include "ntdomain.h"
>  #include "messages.h"
>  
> @@ -171,14 +170,6 @@ void start_epmd(struct tevent_context *ev_ctx,
>   epmd_setup_sig_term_handler(ev_ctx);
>   epmd_setup_sig_hup_handler(ev_ctx, msg_ctx);
>  
> - ok = serverid_register(messaging_server_id(msg_ctx),
> -       FLAG_MSG_GENERAL |
> -       FLAG_MSG_PRINT_GENERAL);
> - if (!ok) {
> - DEBUG(0, ("Failed to register serverid in epmd!\n"));
> - exit(1);
> - }
> -
>   messaging_register(msg_ctx,
>     ev_ctx,
>     MSG_SMB_CONF_UPDATED,
> diff --git a/source3/rpc_server/fssd.c b/source3/rpc_server/fssd.c
> index 8f55aff6f85..3116679179a 100644
> --- a/source3/rpc_server/fssd.c
> +++ b/source3/rpc_server/fssd.c
> @@ -22,7 +22,6 @@
>  
>  #include "includes.h"
>  
> -#include "serverid.h"
>  #include "ntdomain.h"
>  #include "messages.h"
>  
> @@ -182,14 +181,6 @@ void start_fssd(struct tevent_context *ev_ctx,
>   fssd_setup_sig_term_handler(ev_ctx);
>   fssd_setup_sig_hup_handler(ev_ctx, msg_ctx);
>  
> - ok = serverid_register(messaging_server_id(msg_ctx),
> -       FLAG_MSG_GENERAL |
> -       FLAG_MSG_PRINT_GENERAL);
> - if (!ok) {
> - DEBUG(0, ("Failed to register serverid in fssd!\n"));
> - exit(1);
> - }
> -
>   messaging_register(msg_ctx,
>     ev_ctx,
>     MSG_SMB_CONF_UPDATED,
> diff --git a/source3/rpc_server/lsasd.c b/source3/rpc_server/lsasd.c
> index 8cd89a9fd38..08e9fe26a74 100644
> --- a/source3/rpc_server/lsasd.c
> +++ b/source3/rpc_server/lsasd.c
> @@ -20,7 +20,6 @@
>   */
>  
>  #include "includes.h"
> -#include "serverid.h"
>  #include "messages.h"
>  #include "ntdomain.h"
>  
> @@ -261,11 +260,6 @@ static bool lsasd_child_init(struct tevent_context *ev_ctx,
>   return false;
>   }
>  
> - if (!serverid_register(messaging_server_id(msg_ctx),
> -       FLAG_MSG_GENERAL)) {
> - return false;
> - }
> -
>   messaging_register(msg_ctx, ev_ctx,
>     MSG_SMB_CONF_UPDATED, lsasd_smb_conf_updated);
>   messaging_register(msg_ctx, ev_ctx,
> @@ -897,11 +891,6 @@ void start_lsasd(struct tevent_context *ev_ctx,
>   exit(1);
>   }
>  
> - if (!serverid_register(messaging_server_id(msg_ctx),
> -       FLAG_MSG_GENERAL)) {
> - exit(1);
> - }
> -
>   messaging_register(msg_ctx,
>     ev_ctx,
>     MSG_SMB_CONF_UPDATED,
> diff --git a/source3/rpc_server/mdssd.c b/source3/rpc_server/mdssd.c
> index daff5f02e67..d5c05c7e8e9 100644
> --- a/source3/rpc_server/mdssd.c
> +++ b/source3/rpc_server/mdssd.c
> @@ -20,7 +20,6 @@
>   */
>  
>  #include "includes.h"
> -#include "serverid.h"
>  #include "messages.h"
>  #include "ntdomain.h"
>  
> @@ -219,11 +218,6 @@ static bool mdssd_child_init(struct tevent_context *ev_ctx,
>   return false;
>   }
>  
> - if (!serverid_register(messaging_server_id(msg_ctx),
> -       FLAG_MSG_GENERAL)) {
> - return false;
> - }
> -
>   messaging_register(msg_ctx, ev_ctx,
>     MSG_SMB_CONF_UPDATED, mdssd_smb_conf_updated);
>   messaging_register(msg_ctx, ev_ctx,
> @@ -686,11 +680,6 @@ void start_mdssd(struct tevent_context *ev_ctx,
>   exit(1);
>   }
>  
> - if (!serverid_register(messaging_server_id(msg_ctx),
> -       FLAG_MSG_GENERAL)) {
> - exit(1);
> - }
> -
>   messaging_register(msg_ctx,
>     ev_ctx,
>     MSG_SMB_CONF_UPDATED,
> diff --git a/source3/smbd/negprot.c b/source3/smbd/negprot.c
> index d3f4776076f..cdbc2c4089e 100644
> --- a/source3/smbd/negprot.c
> +++ b/source3/smbd/negprot.c
> @@ -691,14 +691,6 @@ void reply_negprot(struct smb_request *req)
>   /* possibly reload - change of architecture */
>   reload_services(sconn, conn_snum_used, true);
>  
> - /* moved from the netbios session setup code since we don't have that
> -   when the client connects to port 445.  Of course there is a small
> -   window where we are listening to messages   -- jerry */
> -
> - serverid_register(messaging_server_id(sconn->msg_ctx),
> -  FLAG_MSG_GENERAL|FLAG_MSG_SMBD
> -  |FLAG_MSG_PRINT_GENERAL);
> -
>   /*
>   * Anything higher than PROTOCOL_SMB2_10 still
>   * needs to go via "SMB 2.???", which is marked
> diff --git a/source3/smbd/process.c b/source3/smbd/process.c
> index b5f528fc78a..4376f2eff99 100644
> --- a/source3/smbd/process.c
> +++ b/source3/smbd/process.c
> @@ -41,7 +41,6 @@
>  #include "../libcli/security/security_token.h"
>  #include "lib/id_cache.h"
>  #include "lib/util/sys_rw_data.h"
> -#include "serverid.h"
>  #include "system/threads.h"
>  
>  /* Internal message queue for deferred opens. */
> @@ -3947,14 +3946,6 @@ void smbd_process(struct tevent_context *ev_ctx,
>   if (!interactive) {
>   smbd_setup_sig_term_handler(sconn);
>   smbd_setup_sig_hup_handler(sconn);
> -
> - if (!serverid_register(messaging_server_id(msg_ctx),
> -       FLAG_MSG_GENERAL|FLAG_MSG_SMBD
> -       |FLAG_MSG_DBWRAP
> -       |FLAG_MSG_PRINT_GENERAL)) {
> - exit_server_cleanly("Could not register myself in "
> -    "serverid.tdb");
> - }
>   }
>  
>   status = smbd_add_connection(client, sock_fd, &xconn);
> diff --git a/source3/smbd/scavenger.c b/source3/smbd/scavenger.c
> index 9b479a621e3..a9fda7f0641 100644
> --- a/source3/smbd/scavenger.c
> +++ b/source3/smbd/scavenger.c
> @@ -138,7 +138,6 @@ static bool smbd_scavenger_running(struct smbd_scavenger_state *state)
>  
>  static int smbd_scavenger_server_id_destructor(struct server_id *id)
>  {
> - serverid_deregister(*id);
>   return 0;
>  }
>  
> @@ -256,13 +255,6 @@ static bool smbd_scavenger_start(struct smbd_scavenger_state *state)
>  
>   scavenger_setup_sig_term_handler(state->ev);
>  
> - if (!serverid_register(*state->scavenger_id,
> -       FLAG_MSG_GENERAL)) {
> - DBG_WARNING("serverid_register failed");
> - exit_server("serverid_register failed");
> - return false;
> - }
> -
>   ok = scavenger_say_hello(fds[1], *state->scavenger_id);
>   if (!ok) {
>   DEBUG(2, ("scavenger_say_hello failed\n"));
> diff --git a/source3/smbd/server.c b/source3/smbd/server.c
> index 916727635f9..e3f19f3cec1 100644
> --- a/source3/smbd/server.c
> +++ b/source3/smbd/server.c
> @@ -36,7 +36,6 @@
>  #include "printing/queue_process.h"
>  #include "rpc_server/rpc_service_setup.h"
>  #include "rpc_server/rpc_config.h"
> -#include "serverid.h"
>  #include "passdb.h"
>  #include "auth.h"
>  #include "messages.h"
> @@ -1263,21 +1262,6 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
>   return false;
>   }
>  
> - /* Setup the main smbd so that we can get messages. Note that
> -   do this after starting listening. This is needed as when in
> -   clustered mode, ctdb won't allow us to start doing database
> -   operations until it has gone thru a full startup, which
> -   includes checking to see that smbd is listening. */
> -
> - if (!serverid_register(messaging_server_id(msg_ctx),
> -       FLAG_MSG_GENERAL|FLAG_MSG_SMBD
> -       |FLAG_MSG_PRINT_GENERAL
> -       |FLAG_MSG_DBWRAP)) {
> - DEBUG(0, ("open_sockets_smbd: Failed to register "
> -  "myself in serverid.tdb\n"));
> - return false;
> - }
> -
>          /* Listen to messages */
>  
>   messaging_register(msg_ctx, NULL, MSG_SHUTDOWN, msg_exit_server);
> @@ -1986,10 +1970,6 @@ extern void build_options(bool screen);
>   exit_daemon("Samba cannot init scavenging", EACCES);
>   }
>  
> - if (!serverid_parent_init(ev_ctx)) {
> - exit_daemon("Samba cannot init server id", EACCES);
> - }
> -
>   if (!W_ERROR_IS_OK(registry_init_full()))
>   exit_daemon("Samba cannot init registry", EACCES);
>  
> diff --git a/source3/smbd/server_exit.c b/source3/smbd/server_exit.c
> index 74ddd70bd3a..a9ef37f49e2 100644
> --- a/source3/smbd/server_exit.c
> +++ b/source3/smbd/server_exit.c
> @@ -171,14 +171,6 @@ static void exit_server_common(enum server_exit_reason how,
>   /* 3 second timeout. */
>   print_notify_send_messages(msg_ctx, 3);
>  
> - /* delete our entry in the serverid database. */
> - if (am_parent) {
> - /*
> - * For children the parent takes care of cleaning up
> - */
> - serverid_deregister(messaging_server_id(msg_ctx));
> - }
> -
>  #ifdef USE_DMAPI
>   /* Destroy Samba DMAPI session only if we are master smbd process */
>   if (am_parent) {
> diff --git a/source3/smbd/smbd_cleanupd.c b/source3/smbd/smbd_cleanupd.c
> index cfb75c971be..5bd18c1411c 100644
> --- a/source3/smbd/smbd_cleanupd.c
> +++ b/source3/smbd/smbd_cleanupd.c
> @@ -177,7 +177,6 @@ static void smbd_cleanupd_process_exited(struct messaging_context *msg,
>       child != NULL;
>       child = child->next)
>   {
> - struct server_id child_id;
>   bool ok;
>  
>   ok = cleanupdb_delete_child(child->pid);
> @@ -185,14 +184,6 @@ static void smbd_cleanupd_process_exited(struct messaging_context *msg,
>   DBG_ERR("failed to delete pid %d\n", (int)child->pid);
>   }
>  
> - /*
> - * Get child_id before messaging_cleanup which wipes
> - * the unique_id. Not that it really matters here for
> - * functionality (the child should have properly
> - * cleaned up :-)) though, but it looks nicer.
> - */
> - child_id = pid_to_procid(child->pid);
> -
>   smbprofile_cleanup(child->pid, state->parent_pid);
>  
>   ret = messaging_cleanup(msg, child->pid);
> @@ -202,11 +193,6 @@ static void smbd_cleanupd_process_exited(struct messaging_context *msg,
>    strerror(ret));
>   }
>  
> - if (!serverid_deregister(child_id)) {
> - DBG_ERR("Could not remove pid %d from serverid.tdb\n",
> - (int)child->pid);
> - }
> -
>   DBG_DEBUG("cleaned up pid %d\n", (int)child->pid);
>   }
>  
> diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c
> index b6ef2f2e438..f156def4647 100644
> --- a/source3/torture/vfstest.c
> +++ b/source3/torture/vfstest.c
> @@ -527,7 +527,6 @@ int main(int argc, const char *argv[])
>   sec_init();
>   init_guest_info();
>   locking_init();
> - serverid_parent_init(NULL);
>   vfs = talloc_zero(NULL, struct vfs_state);
>   if (vfs == NULL) {
>   return 1;
> @@ -553,7 +552,6 @@ int main(int argc, const char *argv[])
>   vfs->conn->share_access = FILE_GENERIC_ALL;
>   vfs->conn->read_only = false;
>  
> - serverid_register(messaging_server_id(vfs->conn->sconn->msg_ctx), 0);
>   file_init(vfs->conn->sconn);
>   for (i=0; i < 1024; i++)
>   vfs->files[i] = NULL;
> diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
> index ceb131e9b32..23e8a5ede5e 100644
> --- a/source3/winbindd/winbindd.c
> +++ b/source3/winbindd/winbindd.c
> @@ -34,7 +34,6 @@
>  #include "rpc_client/cli_netlogon.h"
>  #include "idmap.h"
>  #include "lib/addrchange.h"
> -#include "serverid.h"
>  #include "auth.h"
>  #include "messages.h"
>  #include "../lib/util/pidfile.h"
> @@ -221,9 +220,6 @@ static void terminate(bool is_parent)
>  #endif
>  
>   if (is_parent) {
> - struct messaging_context *msg = server_messaging_context();
> - struct server_id self = messaging_server_id(msg);
> - serverid_deregister(self);
>   pidfile_unlink(lp_pid_directory(), "winbindd");
>   }
>  
> @@ -1305,16 +1301,6 @@ static void winbindd_register_handlers(struct messaging_context *msg_ctx,
>   exit(1);
>   }
>  
> - /* get broadcast messages */
> -
> - if (!serverid_register(messaging_server_id(msg_ctx),
> -       FLAG_MSG_GENERAL |
> -       FLAG_MSG_WINBIND |
> -       FLAG_MSG_DBWRAP)) {
> - DEBUG(1, ("Could not register myself in serverid.tdb\n"));
> - exit(1);
> - }
> -
>   /* React on 'smbcontrol winbindd reload-config' in the same way
>     as to SIGHUP signal */
>   messaging_register(msg_ctx, NULL,
> --
> 2.11.0
>


Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Remove serverid.tdb

Samba - samba-technical mailing list
On Tuesday, 5 December 2017 00:55:50 CET Jeremy Allison via samba-technical
wrote:
> On Mon, Nov 27, 2017 at 12:16:36PM +0100, Volker Lendecke via samba-
technical wrote:
> > Hi!
> >
> > Attached find a patch that replaces the message_send_all
> > implementation with other mechanisms. This makes serverid.tdb
> > obsolete.
> >
> > Review appreciated!
>
> Went through really carefully. LGTM ! RB+ and pushed.

Hey!

As this removes the 'net serverid' command I think you need to mention this in
WHATSNEW.txt.


Cheers,


        Andreas

--
Andreas Schneider                   GPG-ID: CC014E3D
Samba Team                             [hidden email]
www.samba.org

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Remove serverid.tdb

Samba - samba-technical mailing list
On Tue, Dec 05, 2017 at 07:42:01AM +0100, Andreas Schneider wrote:
> Hey!
>
> As this removes the 'net serverid' command I think you need to mention this in
> WHATSNEW.txt.

Attached. Review appreciated!

Thanks, Volker

--
SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
phone: +49-551-370000-0, fax: +49-551-370000-9
AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
http://www.sernet.de, mailto:[hidden email]

patch.txt (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Remove serverid.tdb

Samba - samba-technical mailing list
On Tue, Dec 05, 2017 at 11:40:19AM +0100, Volker Lendecke via samba-technical wrote:
> On Tue, Dec 05, 2017 at 07:42:01AM +0100, Andreas Schneider wrote:
> > Hey!
> >
> > As this removes the 'net serverid' command I think you need to mention this in
> > WHATSNEW.txt.
>
> Attached. Review appreciated!

pushed.

-slow

--
Ralph Boehme, Samba Team       https://samba.org/
Samba Developer, SerNet GmbH   https://sernet.de/en/samba/

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Remove serverid.tdb

Samba - samba-technical mailing list
On Tuesday, 5 December 2017 13:47:46 CET Ralph Böhme wrote:
> On Tue, Dec 05, 2017 at 11:40:19AM +0100, Volker Lendecke via samba-
technical wrote:
> > On Tue, Dec 05, 2017 at 07:42:01AM +0100, Andreas Schneider wrote:
> > > Hey!
> > >
> > > As this removes the 'net serverid' command I think you need to mention
> > > this in WHATSNEW.txt.
> >
> > Attached. Review appreciated!

Thanks :-)

--
Andreas Schneider                   GPG-ID: CC014E3D
Samba Team                             [hidden email]
www.samba.org