Skip to content

Commit 1a0b032

Browse files
committed
AP_DDS: Add topic retries
1 parent f29b062 commit 1a0b032

File tree

1 file changed

+32
-3
lines changed

1 file changed

+32
-3
lines changed

libraries/AP_DDS/AP_DDS_Client.cpp

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1325,10 +1325,15 @@ bool AP_DDS_Client::init_transport()
13251325
bool initTransportStatus = ddsSerialInit();
13261326
is_using_serial = initTransportStatus;
13271327

1328+
if (is_using_serial) {
1329+
GCS_SEND_TEXT(MAV_SEVERITY_INFO, "%s Using Serial", msg_prefix);
1330+
}
1331+
13281332
#if AP_DDS_UDP_ENABLED
13291333
// fallback to UDP if available
13301334
if (!initTransportStatus) {
13311335
initTransportStatus = ddsUdpInit();
1336+
GCS_SEND_TEXT(MAV_SEVERITY_INFO, "%s Using UDP", msg_prefix);
13321337
}
13331338
#endif
13341339

@@ -1431,7 +1436,15 @@ bool AP_DDS_Client::create()
14311436
requests[1] = pub_req_id;
14321437
requests[2] = dwriter_req_id;
14331438

1434-
if (!uxr_run_session_until_all_status(&session, requestTimeoutMs, requests, status, nRequests)) {
1439+
bool success = false;
1440+
for (uint8_t retry = 0; retry < 3; retry++) {
1441+
success = uxr_run_session_until_all_status(&session, requestTimeoutMs * (retry + 1), requests, status, nRequests);
1442+
if (success) {
1443+
break;
1444+
}
1445+
GCS_SEND_TEXT(MAV_SEVERITY_WARNING, "%s Topic/Pub/Writer session request retry for index '%u'", msg_prefix, i);
1446+
}
1447+
if (!success) {
14351448
GCS_SEND_TEXT(MAV_SEVERITY_ERROR, "%s Topic/Pub/Writer session request failure for index '%u'", msg_prefix, i);
14361449
for (uint8_t s = 0 ; s < nRequests; s++) {
14371450
GCS_SEND_TEXT(MAV_SEVERITY_ERROR, "%s Status '%d' result '%u'", msg_prefix, s, status[s]);
@@ -1459,7 +1472,15 @@ bool AP_DDS_Client::create()
14591472
requests[1] = sub_req_id;
14601473
requests[2] = dreader_req_id;
14611474

1462-
if (!uxr_run_session_until_all_status(&session, requestTimeoutMs, requests, status, nRequests)) {
1475+
bool success = false;
1476+
for (uint8_t retry = 0; retry < 3; retry++) {
1477+
success = uxr_run_session_until_all_status(&session, requestTimeoutMs * (retry + 1), requests, status, nRequests);
1478+
if (success) {
1479+
break;
1480+
}
1481+
GCS_SEND_TEXT(MAV_SEVERITY_WARNING, "%s Topic/Sub/Reader session request retry for index '%u'", msg_prefix, i);
1482+
}
1483+
if (!success) {
14631484
GCS_SEND_TEXT(MAV_SEVERITY_ERROR, "%s Topic/Sub/Reader session request failure for index '%u'", msg_prefix, i);
14641485
for (uint8_t s = 0 ; s < nRequests; s++) {
14651486
GCS_SEND_TEXT(MAV_SEVERITY_ERROR, "%s Status '%d' result '%u'", msg_prefix, s, status[s]);
@@ -1491,7 +1512,15 @@ bool AP_DDS_Client::create()
14911512
uint16_t request = replier_req_id;
14921513
uint8_t status;
14931514

1494-
if (!uxr_run_session_until_all_status(&session, requestTimeoutMs, &request, &status, 1)) {
1515+
bool success = false;
1516+
for (uint8_t retry = 0; retry < 3; retry++) {
1517+
success = uxr_run_session_until_all_status(&session, requestTimeoutMs * (retry + 1), &request, &status, 1);
1518+
if (success) {
1519+
break;
1520+
}
1521+
GCS_SEND_TEXT(MAV_SEVERITY_WARNING, "%s Service/Replier session request retry for index '%u'", msg_prefix, i);
1522+
}
1523+
if (!success) {
14951524
GCS_SEND_TEXT(MAV_SEVERITY_ERROR, "%s Service/Replier session request failure for index '%u'", msg_prefix, i);
14961525
GCS_SEND_TEXT(MAV_SEVERITY_ERROR, "%s Status result '%u'", msg_prefix, status);
14971526
// TODO add a failure log message sharing the status results

0 commit comments

Comments
 (0)