From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id BAA5660FD1 for ; Fri, 25 Sep 2020 18:30:12 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 9C2F41D19A for ; Fri, 25 Sep 2020 18:29:42 +0200 (CEST) Received: from mailpro.odiso.net (mailpro.odiso.net [89.248.211.110]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 925691D18C for ; Fri, 25 Sep 2020 18:29:38 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mailpro.odiso.net (Postfix) with ESMTP id 2E8691BBCA46 for ; Fri, 25 Sep 2020 18:29:38 +0200 (CEST) Received: from mailpro.odiso.net ([127.0.0.1]) by localhost (mailpro.odiso.net [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id Rb7m1CXYe1Ui for ; Fri, 25 Sep 2020 18:29:38 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mailpro.odiso.net (Postfix) with ESMTP id 146FE1BBCDC9 for ; Fri, 25 Sep 2020 18:29:38 +0200 (CEST) X-Virus-Scanned: amavisd-new at mailpro.odiso.com Received: from mailpro.odiso.net ([127.0.0.1]) by localhost (mailpro.odiso.net [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id pcUYwsI_1Thp for ; Fri, 25 Sep 2020 18:29:38 +0200 (CEST) Received: from mailpro.odiso.net (mailpro.odiso.net [10.1.31.111]) by mailpro.odiso.net (Postfix) with ESMTP id F316F1BBCDC7 for ; Fri, 25 Sep 2020 18:29:37 +0200 (CEST) Date: Fri, 25 Sep 2020 18:29:37 +0200 (CEST) From: Alexandre DERUMIER To: Proxmox VE development discussion Message-ID: <2049133658.1264587.1601051377789.JavaMail.zimbra@odiso.com> In-Reply-To: <1601037918.lwca57m6tz.astroid@nora.none> References: <216436814.339545.1599142316781.JavaMail.zimbra@odiso.com> <448071987.1233936.1600957757611.JavaMail.zimbra@odiso.com> <906463192.1239798.1600970863982.JavaMail.zimbra@odiso.com> <2019315449.1247737.1601016264202.JavaMail.zimbra@odiso.com> <1264529857.1248647.1601018149719.JavaMail.zimbra@odiso.com> <1601024991.2yoxd1np1v.astroid@nora.none> <1157671072.1253096.1601027205997.JavaMail.zimbra@odiso.com> <1601037918.lwca57m6tz.astroid@nora.none> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Mailer: Zimbra 8.8.12_GA_3866 (ZimbraWebClient - GC83 (Linux)/8.8.12_GA_3844) Thread-Topic: corosync bug: cluster break after 1 node clean shutdown Thread-Index: hNsnZ53rkFKBHRHtJpQpDcY84GL7kg== X-SPAM-LEVEL: Spam detection results: 0 AWL 0.278 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LOTSOFHASH 0.25 Emails with lots of hash-like gibberish RCVD_IN_DNSWL_NONE -0.0001 Sender listed at https://www.dnswl.org/, no trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [proxmox.com, odiso.net] Subject: Re: [pve-devel] corosync bug: cluster break after 1 node clean shutdown X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Sep 2020 16:30:12 -0000 here a new hang: http://odisoweb1.odiso.net/test4/ This time on corosync start. node1: ----- start corosync : 17:22:02 node2 ----- /etc/pve locked 17:22:07 Something new: where doing coredump or bt-full on pmxcfs on node1, this have unlocked /etc/pve on other nodes /etc/pve unlocked(with coredump or bt-full): 17:57:40 ----- Mail original ----- De: "Fabian Gr=C3=BCnbichler" =C3=80: "Proxmox VE development discussion" Envoy=C3=A9: Vendredi 25 Septembre 2020 14:51:30 Objet: Re: [pve-devel] corosync bug: cluster break after 1 node clean shutd= own On September 25, 2020 11:46 am, Alexandre DERUMIER wrote:=20 >>>I will rebuild once more modifying the send code a bit to log a lot more= =20 >>>details when sending state messages, it would be great if you could=20 >>>repeat with that as we are still unable to reproduce the issue.=20 >=20 > ok, no problem, I'm able to easily reproduce it, I'll do new test when yo= u'll=20 > send the new version.=20 >=20 > (and thanks again to debugging this, because It's really beyond my compet= ence)=20 same procedure as last time, same place, new checksums:=20 6b5e2defe543a874e0f7a883e40b279c997438dde158566c4c93c11ea531aef924ed2e4eb25= 06b5064e49ec9bdd4ebe7acd0b9278e9286eac527b0b15a43d8d7 pve-cluster_6.1-8_amd= 64.deb=20 d57ddc08824055826ee15c9c255690d9140e43f8d5164949108f0dc483a2d181b2bda76f0e7= f47202699a062342c0cf0bba8f2ae0f7c5411af9967ef051050a0 pve-cluster-dbgsym_6.= 1-8_amd64.deb=20 I found one (unfortunately unrelated) bug in our error handling, so=20 there's that at least ;)=20 diff --git a/data/src/dfsm.c b/data/src/dfsm.c=20 index 529c7f9..f3397a0 100644=20 --- a/data/src/dfsm.c=20 +++ b/data/src/dfsm.c=20 @@ -162,8 +162,8 @@ static void=20 dfsm_send_sync_message_abort(dfsm_t *dfsm)=20 {=20 g_return_if_fail(dfsm !=3D NULL);=20 -=20 g_mutex_lock (&dfsm->sync_mutex);=20 + cfs_dom_debug(dfsm->log_domain, "dfsm_send_sync_message_abort - %" PRIu64= " / %" PRIu64, dfsm->msgcount_rcvd, dfsm->msgcount);=20 dfsm->msgcount_rcvd =3D dfsm->msgcount;=20 g_cond_broadcast (&dfsm->sync_cond);=20 g_mutex_unlock (&dfsm->sync_mutex);=20 @@ -181,6 +181,7 @@ dfsm_record_local_result(=20 g_mutex_lock (&dfsm->sync_mutex);=20 dfsm_result_t *rp =3D (dfsm_result_t *)g_hash_table_lookup(dfsm->results, &= msg_count);=20 + cfs_dom_debug(dfsm->log_domain, "dfsm_record_local_result - %" PRIu64": %= d", msg_count, msg_result);=20 if (rp) {=20 rp->result =3D msg_result;=20 rp->processed =3D processed;=20 @@ -224,6 +225,48 @@ loop:=20 return result;=20 }=20 +static cs_error_t=20 +dfsm_send_message_full_debug_state(=20 + dfsm_t *dfsm,=20 + struct iovec *iov,=20 + unsigned int len,=20 + int retry)=20 +{=20 + g_return_val_if_fail(dfsm !=3D NULL, CS_ERR_INVALID_PARAM);=20 + g_return_val_if_fail(!len || iov !=3D NULL, CS_ERR_INVALID_PARAM);=20 +=20 + struct timespec tvreq =3D { .tv_sec =3D 0, .tv_nsec =3D 100000000 };=20 + cs_error_t result;=20 + int retries =3D 0;=20 + cfs_dom_message(dfsm->log_domain, "send state message debug");=20 + cfs_dom_message(dfsm->log_domain, "cpg_handle %" PRIu64, dfsm->cpg_handle= );=20 + for (int i =3D 0; i < len; i++)=20 + cfs_dom_message(dfsm->log_domain, "iov[%d] len %zd", i, iov[i].iov_len);= =20 +loop:=20 + cfs_dom_message(dfsm->log_domain, "send state message loop body");=20 +=20 + result =3D cpg_mcast_joined(dfsm->cpg_handle, CPG_TYPE_AGREED, iov, len);= =20 +=20 + cfs_dom_message(dfsm->log_domain, "send state message result: %d", result= );=20 + if (retry && result =3D=3D CS_ERR_TRY_AGAIN) {=20 + nanosleep(&tvreq, NULL);=20 + ++retries;=20 + if ((retries % 10) =3D=3D 0)=20 + cfs_dom_message(dfsm->log_domain, "cpg_send_message retry %d", retries);= =20 + if (retries < 100)=20 + goto loop;=20 + }=20 +=20 + if (retries)=20 + cfs_dom_message(dfsm->log_domain, "cpg_send_message retried %d times", re= tries);=20 +=20 + if (result !=3D CS_OK &&=20 + (!retry || result !=3D CS_ERR_TRY_AGAIN))=20 + cfs_dom_critical(dfsm->log_domain, "cpg_send_message failed: %d", result)= ;=20 +=20 + return result;=20 +}=20 +=20 static cs_error_t=20 dfsm_send_state_message_full(=20 dfsm_t *dfsm,=20 @@ -235,6 +278,8 @@ dfsm_send_state_message_full(=20 g_return_val_if_fail(DFSM_VALID_STATE_MESSAGE(type), CS_ERR_INVALID_PARAM);= =20 g_return_val_if_fail(!len || iov !=3D NULL, CS_ERR_INVALID_PARAM);=20 + cfs_dom_debug(dfsm->log_domain, "dfsm_send_state_message_full: type %d le= n %d", type, len);=20 +=20 dfsm_message_state_header_t header;=20 header.base.type =3D type;=20 header.base.subtype =3D 0;=20 @@ -252,7 +297,7 @@ dfsm_send_state_message_full(=20 for (int i =3D 0; i < len; i++)=20 real_iov[i + 1] =3D iov[i];=20 - return dfsm_send_message_full(dfsm, real_iov, len + 1, 1);=20 + return type =3D=3D DFSM_MESSAGE_STATE ? dfsm_send_message_full_debug_stat= e(dfsm, real_iov, len + 1, 1) : dfsm_send_message_full(dfsm, real_iov, len = + 1, 1);=20 }=20 cs_error_t=20 @@ -317,6 +362,7 @@ dfsm_send_message_sync(=20 for (int i =3D 0; i < len; i++)=20 real_iov[i + 1] =3D iov[i];=20 + cfs_dom_debug(dfsm->log_domain, "dfsm_send_messag_sync: type NORMAL, coun= t %" PRIu64 ", msgtype %d, len %d", msgcount, msgtype, len);=20 cs_error_t result =3D dfsm_send_message_full(dfsm, real_iov, len + 1, 1);= =20 g_mutex_unlock (&dfsm->sync_mutex);=20 @@ -335,10 +381,12 @@ dfsm_send_message_sync(=20 if (rp) {=20 g_mutex_lock (&dfsm->sync_mutex);=20 - while (dfsm->msgcount_rcvd < msgcount)=20 + while (dfsm->msgcount_rcvd < msgcount) {=20 + cfs_dom_debug(dfsm->log_domain, "dfsm_send_message_sync: waiting for rece= ived messages %" PRIu64 " / %" PRIu64, dfsm->msgcount_rcvd, msgcount);=20 g_cond_wait (&dfsm->sync_cond, &dfsm->sync_mutex);=20 + }=20 + cfs_dom_debug(dfsm->log_domain, "dfsm_send_message_sync: done waiting for= received messages!");=20 -=20 g_hash_table_remove(dfsm->results, &rp->msgcount);=20 g_mutex_unlock (&dfsm->sync_mutex);=20 @@ -685,9 +733,13 @@ dfsm_cpg_deliver_callback(=20 return;=20 }=20 + cfs_dom_debug(dfsm->log_domain, "received message's header type is %d", b= ase_header->type);=20 +=20 if (base_header->type =3D=3D DFSM_MESSAGE_NORMAL) {=20 dfsm_message_normal_header_t *header =3D (dfsm_message_normal_header_t *)ms= g;=20 + cfs_dom_debug(dfsm->log_domain, "received normal message (type =3D %d, su= btype =3D %d, %zd bytes)",=20 + base_header->type, base_header->subtype, msg_len);=20 if (msg_len < sizeof(dfsm_message_normal_header_t)) {=20 cfs_dom_critical(dfsm->log_domain, "received short message (type =3D %d, su= btype =3D %d, %zd bytes)",=20 @@ -704,6 +756,8 @@ dfsm_cpg_deliver_callback(=20 } else {=20 int msg_res =3D -1;=20 + cfs_dom_debug(dfsm->log_domain, "deliver message %" PRIu64 " (subtype =3D= %d, length =3D %zd)",=20 + header->count, base_header->subtype, msg_len);=20 int res =3D dfsm->dfsm_callbacks->dfsm_deliver_fn(=20 dfsm, dfsm->data, &msg_res, nodeid, pid, base_header->subtype,=20 base_header->time, (uint8_t *)msg + sizeof(dfsm_message_normal_header_t),= =20 @@ -724,6 +778,8 @@ dfsm_cpg_deliver_callback(=20 */=20 dfsm_message_state_header_t *header =3D (dfsm_message_state_header_t *)msg;= =20 + cfs_dom_debug(dfsm->log_domain, "received state message (type =3D %d, sub= type =3D %d, %zd bytes), mode is %d",=20 + base_header->type, base_header->subtype, msg_len, mode);=20 if (msg_len < sizeof(dfsm_message_state_header_t)) {=20 cfs_dom_critical(dfsm->log_domain, "received short state message (type =3D = %d, subtype =3D %d, %zd bytes)",=20 @@ -744,6 +800,7 @@ dfsm_cpg_deliver_callback(=20 if (mode =3D=3D DFSM_MODE_SYNCED) {=20 if (base_header->type =3D=3D DFSM_MESSAGE_UPDATE_COMPLETE) {=20 + cfs_dom_debug(dfsm->log_domain, "received update complete message");=20 for (int i =3D 0; i < dfsm->sync_info->node_count; i++)=20 dfsm->sync_info->nodes[i].synced =3D 1;=20 @@ -754,6 +811,7 @@ dfsm_cpg_deliver_callback(=20 return;=20 } else if (base_header->type =3D=3D DFSM_MESSAGE_VERIFY_REQUEST) {=20 + cfs_dom_debug(dfsm->log_domain, "received verify request message");=20 if (msg_len !=3D sizeof(dfsm->csum_counter)) {=20 cfs_dom_critical(dfsm->log_domain, "cpg received verify request with wrong = length (%zd bytes) form node %d/%d", msg_len, nodeid, pid);=20 @@ -823,7 +881,6 @@ dfsm_cpg_deliver_callback(=20 } else if (mode =3D=3D DFSM_MODE_START_SYNC) {=20 if (base_header->type =3D=3D DFSM_MESSAGE_SYNC_START) {=20 -=20 if (nodeid !=3D dfsm->lowest_nodeid) {=20 cfs_dom_critical(dfsm->log_domain, "ignore sync request from wrong member %= d/%d",=20 nodeid, pid);=20 @@ -861,6 +918,7 @@ dfsm_cpg_deliver_callback(=20 return;=20 } else if (base_header->type =3D=3D DFSM_MESSAGE_STATE) {=20 + cfs_dom_debug(dfsm->log_domain, "received state message for %d/%d", nodei= d, pid);=20 dfsm_node_info_t *ni;=20 @@ -906,6 +964,8 @@ dfsm_cpg_deliver_callback(=20 goto leave;=20 }=20 + } else {=20 + cfs_dom_debug(dfsm->log_domain, "haven't received all states, waiting for= more");=20 }=20 return;=20 @@ -914,6 +974,7 @@ dfsm_cpg_deliver_callback(=20 } else if (mode =3D=3D DFSM_MODE_UPDATE) {=20 if (base_header->type =3D=3D DFSM_MESSAGE_UPDATE) {=20 + cfs_dom_debug(dfsm->log_domain, "received update message");=20 int res =3D dfsm->dfsm_callbacks->dfsm_process_update_fn(=20 dfsm, dfsm->data, dfsm->sync_info, nodeid, pid, msg, msg_len);=20 @@ -925,6 +986,7 @@ dfsm_cpg_deliver_callback(=20 } else if (base_header->type =3D=3D DFSM_MESSAGE_UPDATE_COMPLETE) {=20 + cfs_dom_debug(dfsm->log_domain, "received update complete message");=20 int res =3D dfsm->dfsm_callbacks->dfsm_commit_fn(dfsm, dfsm->data, dfsm->sy= nc_info);=20 @@ -1104,6 +1166,7 @@ dfsm_cpg_confchg_callback(=20 size_t joined_list_entries)=20 {=20 cs_error_t result;=20 + cfs_debug("dfsm_cpg_confchg_callback called");=20 dfsm_t *dfsm =3D NULL;=20 result =3D cpg_context_get(handle, (gpointer *)&dfsm);=20 @@ -1190,7 +1253,7 @@ dfsm_cpg_confchg_callback(=20 dfsm_set_mode(dfsm, DFSM_MODE_START_SYNC);=20 if (lowest_nodeid =3D=3D dfsm->nodeid) {=20 - if (!dfsm_send_state_message_full(dfsm, DFSM_MESSAGE_SYNC_START, NULL, 0)= ) {=20 + if (dfsm_send_state_message_full(dfsm, DFSM_MESSAGE_SYNC_START, NULL, 0) = !=3D CS_OK) {=20 cfs_dom_critical(dfsm->log_domain, "failed to send SYNC_START message");=20 goto leave;=20 }=20 _______________________________________________=20 pve-devel mailing list=20 pve-devel@lists.proxmox.com=20 https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel=20