diff --git a/changes/bug40910 b/changes/bug40910
new file mode 100644
index 0000000000000000000000000000000000000000..6de15bf8c968758c364da5bbde9dd6813c90a30a
--- /dev/null
+++ b/changes/bug40910
@@ -0,0 +1,5 @@
+  o Minor bugfixes (directory authorities):
+    - Add a warning when publishing a vote or signatures to another
+      directory authority fails. Fixes bug 40910; bugfix on
+      0.2.0.3-alpha.
+
diff --git a/src/feature/dirclient/dirclient.c b/src/feature/dirclient/dirclient.c
index 84eefdd90b59763fc8ed1d359e6e4211664caa0f..9aa3164a65644dd336d599301d52675464929e0f 100644
--- a/src/feature/dirclient/dirclient.c
+++ b/src/feature/dirclient/dirclient.c
@@ -101,7 +101,7 @@ dir_conn_purpose_to_string(int purpose)
     case DIR_PURPOSE_UPLOAD_DIR:
       return "server descriptor upload";
     case DIR_PURPOSE_UPLOAD_VOTE:
-      return "server vote upload";
+      return "consensus vote upload";
     case DIR_PURPOSE_UPLOAD_SIGNATURES:
       return "consensus signature upload";
     case DIR_PURPOSE_FETCH_SERVERDESC:
@@ -763,6 +763,11 @@ connection_dir_client_request_failed(dir_connection_t *conn)
              "directory server at %s; will retry",
              connection_describe_peer(TO_CONN(conn)));
     connection_dir_download_routerdesc_failed(conn);
+  } else if (conn->base_.purpose == DIR_PURPOSE_UPLOAD_VOTE ||
+             conn->base_.purpose == DIR_PURPOSE_UPLOAD_SIGNATURES) {
+    log_warn(LD_DIR, "Failed to post %s to %s.",
+             dir_conn_purpose_to_string(conn->base_.purpose),
+             connection_describe_peer(TO_CONN(conn)));
   }
 }
 
diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index 18110984406bece571e05db137f433362084ae9e..a86638f8c9165b8b14a399933d00647ba42b65ba 100644
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@ -5264,7 +5264,7 @@ test_dir_conn_purpose_to_string(void *data)
   tt_str_op(dir_conn_purpose_to_string(purpose), OP_EQ, expected);
 
   EXPECT_CONN_PURPOSE(DIR_PURPOSE_UPLOAD_DIR, "server descriptor upload");
-  EXPECT_CONN_PURPOSE(DIR_PURPOSE_UPLOAD_VOTE, "server vote upload");
+  EXPECT_CONN_PURPOSE(DIR_PURPOSE_UPLOAD_VOTE, "consensus vote upload");
   EXPECT_CONN_PURPOSE(DIR_PURPOSE_UPLOAD_SIGNATURES,
                       "consensus signature upload");
   EXPECT_CONN_PURPOSE(DIR_PURPOSE_FETCH_SERVERDESC, "server descriptor fetch");