Sfoglia il codice sorgente

Qdevice: Reconnect on algo or tb differs error

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Jan Friesse 9 anni fa
parent
commit
78deaec9ed

+ 16 - 8
qdevices/qdevice-net-disconnect-reason.h

@@ -72,6 +72,11 @@ enum qdevice_net_disconnect_reason {
 	QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_ERROR,
 	/* Received message with error field set to TLV_REPLY_ERROR_CODE_DUPLICATE_NODE_ID value */
 	QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_DUPLICATE_NODE_ID_ERROR,
+	/* Received message with error field set to TLV_REPLY_ERROR_CODE_TIE_BREAKER_DIFFERS_FROM_OTHER_NODES value */
+	QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_TIE_BREAKER_DIFFERS_FROM_OTHER_NODES_ERROR,
+	/* Received message with error field set to TLV_REPLY_ERROR_CODE_ALGORITHM_DIFFERS_FROM_OTHER_NODES value */
+	QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_ALGORITHM_DIFFERS_FROM_OTHER_NODES_ERROR,
+
 	/* Server doesn't support client selected decision algorithm */
 	QDEVICE_NET_DISCONNECT_REASON_SERVER_DOESNT_SUPPORT_REQUIRED_ALGORITHM,
 
@@ -105,14 +110,17 @@ enum qdevice_net_disconnect_reason {
 	QDEVICE_NET_DISCONNECT_REASON_ALGO_ECHO_REPLY_NOT_RECEIVED_ERR,
 };
 
-#define qdevice_net_disconnect_reason_try_reconnect(reason) (				\
-    reason == QDEVICE_NET_DISCONNECT_REASON_MSG_DECODE_ERROR ||				\
-    reason == QDEVICE_NET_DISCONNECT_REASON_SERVER_CLOSED_CONNECTION ||			\
-    reason == QDEVICE_NET_DISCONNECT_REASON_CANT_READ_MESSAGE ||			\
-    reason == QDEVICE_NET_DISCONNECT_REASON_CANT_SEND_MESSAGE ||			\
-    reason == QDEVICE_NET_DISCONNECT_REASON_CANT_CONNECT_TO_THE_SERVER ||		\
-    reason == QDEVICE_NET_DISCONNECT_REASON_ALGO_ECHO_REPLY_NOT_RECEIVED_ERR ||		\
-    reason == QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_DUPLICATE_NODE_ID_ERROR)
+#define qdevice_net_disconnect_reason_try_reconnect(reason) (						\
+    reason == QDEVICE_NET_DISCONNECT_REASON_MSG_DECODE_ERROR ||						\
+    reason == QDEVICE_NET_DISCONNECT_REASON_SERVER_CLOSED_CONNECTION ||					\
+    reason == QDEVICE_NET_DISCONNECT_REASON_CANT_READ_MESSAGE ||					\
+    reason == QDEVICE_NET_DISCONNECT_REASON_CANT_SEND_MESSAGE ||					\
+    reason == QDEVICE_NET_DISCONNECT_REASON_CANT_CONNECT_TO_THE_SERVER ||				\
+    reason == QDEVICE_NET_DISCONNECT_REASON_ALGO_ECHO_REPLY_NOT_RECEIVED_ERR ||				\
+    reason == QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_DUPLICATE_NODE_ID_ERROR ||			\
+    reason == QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_TIE_BREAKER_DIFFERS_FROM_OTHER_NODES_ERROR ||	\
+    reason == QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_ALGORITHM_DIFFERS_FROM_OTHER_NODES_ERROR)
+
 
 #define qdevice_net_disconnect_reason_force_disconnect(reason)	(			\
     reason == QDEVICE_NET_DISCONNECT_REASON_COROSYNC_CONNECTION_CLOSED ||		\

+ 10 - 0
qdevices/qdevice-net-msg-received.c

@@ -282,6 +282,16 @@ qdevice_net_msg_received_init_reply(struct qdevice_net_instance *instance,
 			qdevice_log(LOG_ERR, "Duplicate node id may be result of server not yet "
 			    "accepted this node disconnect. Retry again.");
 			instance->disconnect_reason = QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_DUPLICATE_NODE_ID_ERROR;
+		} else if (msg->reply_error_code == TLV_REPLY_ERROR_CODE_TIE_BREAKER_DIFFERS_FROM_OTHER_NODES) {
+			qdevice_log(LOG_ERR, "Configured tie-breaker differs in cluster. This may be "
+			    "result of server not yet accepted this node disconnect. Retry again.");
+			instance->disconnect_reason =
+			    QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_TIE_BREAKER_DIFFERS_FROM_OTHER_NODES_ERROR;
+		} else if (msg->reply_error_code == TLV_REPLY_ERROR_CODE_ALGORITHM_DIFFERS_FROM_OTHER_NODES) {
+			qdevice_log(LOG_ERR, "Configured algorithm differs in cluster. This may be "
+			    "result of server not yet accepted this node disconnect. Retry again.");
+			instance->disconnect_reason =
+			    QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_ALGORITHM_DIFFERS_FROM_OTHER_NODES_ERROR;
 		} else {
 			instance->disconnect_reason = QDEVICE_NET_DISCONNECT_REASON_SERVER_SENT_ERROR;
 		}