- The confused error in mds log since disabled FCTRL agent
receive a flow control message type from enabled FCTRL agent.
MDS should ignore flow control message on disabled FCTRL agent.
- Refactor mds_tipc_fctrl_drop_data() for code consistency.
- Also print Adest info detail in logging for easy troubleshoot.
---
src/mds/mds_dt_common.c | 65 ++++++++++++++++++----------------
src/mds/mds_tipc_fctrl_intf.cc | 63 +++++++++++++++++---------------
2 files changed, 69 insertions(+), 59 deletions(-)
diff --git a/src/mds/mds_dt_common.c b/src/mds/mds_dt_common.c
index ef8425cb9..6f1bd8a2e 100644
--- a/src/mds/mds_dt_common.c
+++ b/src/mds/mds_dt_common.c
@@ -314,9 +314,11 @@ uint32_t mdtm_process_recv_message_common(uint8_t flag,
uint8_t *buffer,
* header length */
if (len < len_mds_hdr) {
m_MDS_LOG_ERR(
- "MDTM: Message recd (Non Fragmented) len is less
than the MDS HDR len Adest = <%" PRId64
- "> len =%d len_mds_hdr=%d",
- transport_adest, len, len_mds_hdr);
+ "MDTM: Message recd (Non Fragmented) len is less
than the MDS HDR len "
+ "Adest <0x%08x, %u> len =%d len_mds_hdr=%d",
+ m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+ m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest),
+ len, len_mds_hdr);
return NCSCC_RC_FAILURE;
}
@@ -350,10 +352,10 @@ uint32_t mdtm_process_recv_message_common(uint8_t flag,
uint8_t *buffer,
&dest_svc_hdl)) {
*buff_dump = 0; /* For future hack */
m_MDS_LOG_ERR(
- "MDTM: svc_id = %s(%d) Doesnt exists for the
message recd, Adest = <%" PRId64
- ">\n",
+ "MDTM: svc_id = %s(%d) Doesnt exists for the
message recd, Adest <0x%08x, %u>\n",
get_svc_names(dest_svc_id), dest_svc_id,
- transport_adest);
+ m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+ m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
return NCSCC_RC_FAILURE;
}
@@ -365,9 +367,9 @@ uint32_t mdtm_process_recv_message_common(uint8_t flag,
uint8_t *buffer,
if (enc_type > MDS_ENC_TYPE_DIRECT_BUFF) {
*buff_dump = 0; /* For future hack */
m_MDS_LOG_ERR(
- "MDTM: Encoding unsupported, Adest = <%" PRId64
- ">\n",
- transport_adest);
+ "MDTM: Encoding unsupported, Adest Adest <0x%08x,
%u>\n",
+ m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+ m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
return NCSCC_RC_FAILURE;
}
@@ -506,9 +508,10 @@ uint32_t mdtm_process_recv_message_common(uint8_t flag,
uint8_t *buffer,
}
m_MDS_LOG_DBG(
- "MDTM: Recd Unfragmented message with SVC Seq num =%d, from
src Adest = <%" PRId64
- ">",
- svc_seq_num, transport_adest);
+ "MDTM: Recd Unfragmented message with SVC Seq num =%d, from
src Adest <0x%08x, %u>",
+ svc_seq_num,
+ m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+ m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
if (msg_snd_type == MDS_SENDTYPE_ACK) {
/* NOTE: Version in ACK message is ignored */
@@ -603,9 +606,9 @@ uint32_t mdtm_process_recv_message_common(uint8_t flag,
uint8_t *buffer,
if (len <= (len_mds_hdr + MDTM_FRAG_HDR_LEN)) {
m_MDS_LOG_ERR(
"MDTM: Message recd (Fragmented First Pkt) len is
less than or equal to \
- the sum of (len_mds_hdr+MDTM_FRAG_HDR_LEN) len,
Adest = <%" PRId64
- ">",
- transport_adest);
+ the sum of (len_mds_hdr+MDTM_FRAG_HDR_LEN) len,
Adest <0x%08x, %u>",
+ m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+ m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
return NCSCC_RC_FAILURE;
}
data = &buffer[MDS_HEADER_PWE_ID_POSITION + MDTM_FRAG_HDR_LEN];
@@ -796,9 +799,10 @@ uint32_t mdtm_process_recv_message_common(uint8_t flag,
uint8_t *buffer,
m_MDS_LOG_INFO("MDTM: Reassembly started\n");
m_MDS_LOG_DBG(
- "MDTM: Recd fragmented message(first frag) with Frag
Seqnum=%d SVC Seq num =%d, from src Adest = <%" PRId64
- ">",
- seq_num, svc_seq_num, transport_adest);
+ "MDTM: Recd fragmented message(first frag) with Frag
Seqnum=%d SVC Seq num =%d, from src Adest <0x%08x, %u>",
+ seq_num, svc_seq_num,
+ m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+ m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
if ((len - (len_mds_hdr + MDTM_FRAG_HDR_LEN)) > 0) {
if (NCSCC_RC_SUCCESS !=
@@ -1134,9 +1138,10 @@ uint32_t mdtm_process_recv_data(uint8_t *buffer,
uint16_t len,
seq_num = ncs_decode_32bit(&data);
m_MDS_LOG_DBG(
- "MDTM: Recd message with Fragment Seqnum=%d, frag_num=%d,
from src_id=<0x%08x:%u>",
- seq_num, frag_num, (uint32_t)(transport_adest >> 32),
- (uint32_t)(transport_adest));
+ "MDTM: Recd message with Fragment Seqnum=%d, frag_num=%d,
from Adest <0x%08x, %u>",
+ seq_num, frag_num,
+ m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+ m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
/* Checking in reassembly queue */
reassem_queue =
@@ -1187,9 +1192,9 @@ uint32_t mdtm_process_recv_data(uint8_t *buffer, uint16_t
len,
easily without having to relink etc.
*/
m_MDS_LOG_ERR(
- "MDTM: Message is dropped as msg is out of
seq Adest = <%" PRIu64
- ">\n",
- transport_adest);
+ "MDTM: Message is dropped as msg is out of
seq Adest <0x%08x, %u>\n",
+
m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+
m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
return NCSCC_RC_FAILURE;
}
@@ -1360,9 +1365,9 @@ uint32_t mdtm_process_recv_data(uint8_t *buffer, uint16_t
len,
easily without having to relink etc.
*/
m_MDS_LOG_ERR(
- "MDTM: Frag recd is not next frag so
dropping Adest = <%" PRIu64
- ">\n",
- transport_adest);
+ "MDTM: Frag recd is not next frag so
dropping Adest <0x%08x, %u>\n",
+
m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+
m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
reassem_queue
->to_be_dropped = true; /* This is for
avoiding the
@@ -1409,9 +1414,9 @@ uint32_t mdtm_process_recv_data(uint8_t *buffer, uint16_t
len,
*buff_dump = 0;
/* Some stale message, Log and Drop */
m_MDS_LOG_ERR(
- "MDTM: Some stale message recd, hence dropping
Adest = <%" PRIu64
- ">\n",
- transport_adest);
+ "MDTM: Some stale message recd, hence dropping
Adest <0x%08x, %u>\n",
+ m_MDS_GET_NODE_ID_FROM_ADEST(transport_adest),
+ m_MDS_GET_PROCESS_ID_FROM_ADEST(transport_adest));
return NCSCC_RC_FAILURE;
}
} /* ELSE Loop */
diff --git a/src/mds/mds_tipc_fctrl_intf.cc b/src/mds/mds_tipc_fctrl_intf.cc
index 4270cf26a..22af9a59b 100644
--- a/src/mds/mds_tipc_fctrl_intf.cc
+++ b/src/mds/mds_tipc_fctrl_intf.cc
@@ -454,37 +454,20 @@ uint32_t mds_tipc_fctrl_portid_terminate(struct
tipc_portid id) {
uint32_t mds_tipc_fctrl_drop_data(uint8_t *buffer, uint16_t len,
struct tipc_portid id) {
- if (is_fctrl_enabled == false) return NCSCC_RC_SUCCESS;
-
HeaderMessage header;
header.Decode(buffer);
Event* pevt = nullptr;
+
// if mds support flow control
- if ((header.pro_ver_ & MDS_PROT_VER_MASK) == MDS_PROT_FCTRL) {
- if (header.pro_id_ == MDS_PROT_FCTRL_ID) {
- if (header.msg_type_ == ChunkAck::kChunkAckMsgType) {
- // receive single ack message
- ChunkAck ack;
- ack.Decode(buffer);
- // send to the event thread
- pevt = new Event(Event::Type::kEvtSendChunkAck, id, ack.svc_id_,
- header.mseq_, header.mfrag_, ack.acked_fseq_);
- pevt->chunk_size_ = ack.chunk_size_;
- if (m_NCS_IPC_SEND(&mbx_events, pevt,
- NCS_IPC_PRIORITY_HIGH) != NCSCC_RC_SUCCESS) {
- m_MDS_LOG_ERR("FCTRL: Failed to send msg to mbx_events, Error[%s]",
- strerror(errno));
- return NCSCC_RC_FAILURE;
- }
- return NCSCC_RC_SUCCESS;
- }
- } else {
- // receive data message
- DataMessage data;
- data.Decode(buffer);
+ if (header.IsControlMessage()) {
+ if (header.msg_type_ == ChunkAck::kChunkAckMsgType) {
+ // receive single ack message
+ ChunkAck ack;
+ ack.Decode(buffer);
// send to the event thread
- pevt = new Event(Event::Type::kEvtDropData, id, data.svc_id_,
- header.mseq_, header.mfrag_, header.fseq_);
+ pevt = new Event(Event::Type::kEvtSendChunkAck, id, ack.svc_id_,
+ header.mseq_, header.mfrag_, ack.acked_fseq_);
+ pevt->chunk_size_ = ack.chunk_size_;
if (m_NCS_IPC_SEND(&mbx_events, pevt,
NCS_IPC_PRIORITY_HIGH) != NCSCC_RC_SUCCESS) {
m_MDS_LOG_ERR("FCTRL: Failed to send msg to mbx_events, Error[%s]",
@@ -495,19 +478,36 @@ uint32_t mds_tipc_fctrl_drop_data(uint8_t *buffer,
uint16_t len,
}
}
+ if (header.IsFlowMessage()) {
+ // receive data message
+ DataMessage data;
+ data.Decode(buffer);
+ // send to the event thread
+ pevt = new Event(Event::Type::kEvtDropData, id, data.svc_id_,
+ header.mseq_, header.mfrag_, header.fseq_);
+ if (m_NCS_IPC_SEND(&mbx_events, pevt,
+ NCS_IPC_PRIORITY_HIGH) != NCSCC_RC_SUCCESS) {
+ m_MDS_LOG_ERR("FCTRL: Failed to send msg to mbx_events, Error[%s]",
+ strerror(errno));
+ return NCSCC_RC_FAILURE;
+ }
+ return NCSCC_RC_SUCCESS;
+ }
+
return NCSCC_RC_SUCCESS;
}
uint32_t mds_tipc_fctrl_rcv_data(uint8_t *buffer, uint16_t len,
struct tipc_portid id) {
- if (is_fctrl_enabled == false) return NCSCC_RC_SUCCESS;
-
uint32_t rc = NCSCC_RC_SUCCESS;
HeaderMessage header;
header.Decode(buffer);
Event* pevt = nullptr;
- // if mds support flow control
+
if (header.IsControlMessage()) {
+ // skip the control message if flow control disabled
+ if (is_fctrl_enabled == false) return NCSCC_RC_FAILURE;
+ // if mds support flow control
if (header.msg_type_ == ChunkAck::kChunkAckMsgType) {
m_MDS_LOG_DBG("FCTRL: Receive ChunkAck");
// receive single ack message
@@ -555,6 +555,10 @@ uint32_t mds_tipc_fctrl_rcv_data(uint8_t *buffer, uint16_t
len,
// skip this data msg
rc = NCSCC_RC_FAILURE;
}
+
+ // Let the tipc receiving thread (legacy) handle this data message
+ if (is_fctrl_enabled == false) return NCSCC_RC_SUCCESS;
+
if (header.IsLegacyMessage()) {
m_MDS_LOG_DBG("FCTRL: [me] <-- [node:%x, ref:%u], "
"Receive legacy data message, "
@@ -570,6 +574,7 @@ uint32_t mds_tipc_fctrl_rcv_data(uint8_t *buffer, uint16_t
len,
portid_map_mutex.unlock();
}
}
+
if (header.IsFlowMessage() || header.IsUndefinedMessage()) {
// receive flow message explicitly identified by protocol version
// or if it is still undefined, then consult the stateful portid
--
2.17.1
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel