URL:
https://github.com/SSSD/sssd/pull/601
Title: #601: sbus: integrate sssd with sbus2
pbrezina commented:
"""
Reconnection issue is fixed so everything @jhrozek raised is solved. Diff:
```diff
diff --git a/src/sbus/connection/sbus_connection_connect.c
b/src/sbus/connection/sbus_connection_connect.c
index bbe8a4c..3f8702f 100644
--- a/src/sbus/connection/sbus_connection_connect.c
+++ b/src/sbus/connection/sbus_connection_connect.c
@@ -40,8 +40,8 @@ static void sbus_connect_init_done(struct tevent_req *subreq);
struct tevent_req *
sbus_connect_init_send(TALLOC_CTX *mem_ctx,
- struct sbus_connection *conn,
- const char *name)
+ struct sbus_connection *conn,
+ const char *name)
{
struct sbus_connect_init_state *state;
struct tevent_req *subreq;
diff --git a/src/sbus/connection/sbus_reconnect.c b/src/sbus/connection/sbus_reconnect.c
index 9c5e560..a0055e5 100644
--- a/src/sbus/connection/sbus_reconnect.c
+++ b/src/sbus/connection/sbus_reconnect.c
@@ -60,8 +60,6 @@ sbus_reconnect_success(struct sbus_connection *conn)
sbus_reconnect_notify(conn, SBUS_RECONNECT_SUCCESS);
}
-static void sbus_reconnect_attempt_done(struct tevent_req *req);
-
static void
sbus_reconnect_attempt(struct tevent_context *ev,
struct tevent_timer *te,
@@ -70,8 +68,6 @@ sbus_reconnect_attempt(struct tevent_context *ev,
{
struct sbus_connection *sbus_conn;
DBusConnection *dbus_conn = NULL;
- bool init_connection = false;
- struct tevent_req *req;
errno_t ret;
sbus_conn = talloc_get_type(data, struct sbus_connection);
@@ -90,10 +86,13 @@ sbus_reconnect_attempt(struct tevent_context *ev,
case SBUS_CONNECTION_ADDRESS:
DEBUG(SSSDBG_MINOR_FAILURE, "Making reconnection attempt %d to
[%s]\n",
sbus_conn->reconnect->retry.current, sbus_conn->address);
- init_connection = true;
+ /* It is necessary to use blocking Hello and RequestName method
+ * so those two are the only methods that are sent to the new
+ * dbus connection before it is properly initialized.
+ */
dbus_conn = sbus_dbus_connect_address(sbus_conn->address,
sbus_conn->wellknown_name,
- false);
+ true);
break;
case SBUS_CONNECTION_SYSBUS:
DEBUG(SSSDBG_MINOR_FAILURE, "Making reconnection attempt %d "
@@ -117,18 +116,7 @@ sbus_reconnect_attempt(struct tevent_context *ev,
goto done;
}
- if (!init_connection) {
- goto done;
- }
-
- req = sbus_connect_init_send(sbus_conn, sbus_conn, sbus_conn->wellknown_name);
- if (req == NULL) {
- ret = ENOMEM;
- goto done;
- }
-
- tevent_req_set_callback(req, sbus_reconnect_attempt_done, sbus_conn);
- return;
+ ret = EOK;
done:
/* Issue next attempt or finish. */
@@ -140,24 +128,6 @@ done:
sbus_reconnect_success(sbus_conn);
}
-static void sbus_reconnect_attempt_done(struct tevent_req *req)
-{
- struct sbus_connection *conn;
- errno_t ret;
-
- conn = tevent_req_callback_data(req, struct sbus_connection);
-
- ret = sbus_connect_init_recv(req);
- talloc_zfree(req);
- /* Issue next attempt or finish. */
- if (ret != EOK) {
- sbus_reconnect(conn);
- return;
- }
-
- sbus_reconnect_success(conn);
-}
-
static struct timeval
sbus_reconnect_delay(struct sbus_reconnect *reconnect)
{
@@ -211,7 +181,7 @@ void sbus_reconnect(struct sbus_connection *conn)
/* Increase retry counter and check if we are still allowed to reconnect. */
reconnect->retry.current++;
- if (reconnect->retry.current >= reconnect->retry.max) {
+ if (reconnect->retry.current > reconnect->retry.max) {
DEBUG(SSSDBG_CRIT_FAILURE,
"Unable to reconnect: maximum retries exceeded.\n");
sbus_reconnect_notify(conn, SBUS_RECONNECT_EXCEEDED_RETRIES);
diff --git a/src/sbus/server/sbus_server_interface.c
b/src/sbus/server/sbus_server_interface.c
index 209532a..695d4d0 100644
--- a/src/sbus/server/sbus_server_interface.c
+++ b/src/sbus/server/sbus_server_interface.c
@@ -108,6 +108,8 @@ sbus_server_bus_request_name(TALLOC_CTX *mem_ctx,
struct sbus_connection *conn;
errno_t ret;
+ DEBUG(SSSDBG_TRACE_FUNC, "Requesting name: %s\n", name);
+
if (name[0] == ':') {
DEBUG(SSSDBG_OP_FAILURE, "Can not assign unique name: %s\n", name);
return EINVAL;
```
"""
See the full comment at
https://github.com/SSSD/sssd/pull/601#issuecomment-409583236