Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r82Nk-007vhI-Dm for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Nov 2023 18:00:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r82Nj-006ynh-5b for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Nov 2023 18:00:23 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r82Ni-006ynZ-RW for pgsql-hackers@lists.postgresql.org; Tue, 28 Nov 2023 18:00:22 +0000 Received: from mail-ej1-x62e.google.com ([2a00:1450:4864:20::62e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1r82Ng-007o6T-Hh for pgsql-hackers@postgresql.org; Tue, 28 Nov 2023 18:00:21 +0000 Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-9fa2714e828so795759666b.1 for ; Tue, 28 Nov 2023 10:00:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701194419; x=1701799219; darn=postgresql.org; h=subject:to:from:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=jn6or6nORPnx+fljSLA4kYO6pCMzo+WbY8298XRyKgk=; b=Umzw9BOwFBjZC92EDF/DOLIegL4xYV5U48oLb8l0FIam7utL6AlDSI8UqTSSdeg160 MndJ8MUMZbnQ239NhLlHxsb4JoiDvvtTnQrsBEvYefBUVfjY5yocn6tcNS7F5nLxeG2t W/UJkTNq0nVfX25k4Jv3ks2Tf4f4QMwsxTwZ/OOElmQC9SPwIkjQwpESb+bYdPCkkygR oNPd7EaJvhYZgukUkS4U6uBsDS/j3qIjjxTGqOISc7fHFkPpyqXP66vxpCetjvjUt70R Eq9uHV1owhqT6hPw6X5bMwkSKq67OiVRcbE/H3G25MLlqvOBnmSc9+06cpvBPxZ2QuU6 yHpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701194419; x=1701799219; h=subject:to:from:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=jn6or6nORPnx+fljSLA4kYO6pCMzo+WbY8298XRyKgk=; b=jpMLj0Bh6jeX8rGd9u3X+C1lxd/B1yPgJxg/9jrYAodpxi3/hPaotP6BVSdCDwFHhx UgH/2paItgqAZTvAU/YlV9MCxFUa/ILWYO9IZ/EUd5iyEta3qRZ1GwJ1B0TlW3xZ4vqU ixTwNTeo707HgG0PMaKVZ9L+6QN1Vpp9VwJXj6nW1wF6OCOnvnzThK5n5/iZ5AhWv5w6 /82rORnqIlHq2P3TEI7V8JNjGymHQPd86EeG0CGxC13Wcs9zquPgGk57KQHkSdVfbA/U UowSt4y5dlp1cDnUrwM9lsphi/6WAdKQzzY97SkwI+p6usffnMKlLi7TFFFmbqSGq7YG R+bA== X-Gm-Message-State: AOJu0YzH7gywK/ZegK1AsURy4gnMXIlepNpealME099BUtP4nJ3rQmqO OS3zVixN+lkOdi5pM4YZ7KIhWhwmS8Q= X-Google-Smtp-Source: AGHT+IElrQ8v+BWLrtxL2EBQxlvHwhjyPJ/4H1EcfbtM1AIzjYaGPiCYfFG2YiEu/rY2RdLdq+ShsA== X-Received: by 2002:a17:907:c708:b0:9b2:d78c:afe9 with SMTP id ty8-20020a170907c70800b009b2d78cafe9mr15338131ejc.49.1701194418707; Tue, 28 Nov 2023 10:00:18 -0800 (PST) Received: from [192.168.63.128] ([147.161.231.14]) by smtp.gmail.com with ESMTPSA id j20-20020a1709064b5400b00a11e9036cffsm1438702ejv.195.2023.11.28.10.00.17 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 28 Nov 2023 10:00:18 -0800 (PST) Content-Type: multipart/mixed; boundary="------------Q4aLw488RvmmJYjmNjreZrrJ" Message-ID: Date: Tue, 28 Nov 2023 19:00:16 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US From: David Geier To: PostgreSQL-development Subject: Fix assertion in autovacuum worker List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------Q4aLw488RvmmJYjmNjreZrrJ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi hackers, PostgreSQL hit the following assertion during error cleanup, after being OOM in dsa_allocate0(): void dshash_detach(dshash_table *hash_table) { ASSERT_NO_PARTITION_LOCKS_HELD_BY_ME(hash_table); called from pgstat_shutdown_hook(), called from shmem_exit(), called from proc_exit(), called from the exception handler. The partition locks got previously acquired by AutoVacWorkerMain() pgstat_report_autovac() pgstat_get_entry_ref_locked() pgstat_get_entry_ref() dshash_find_or_insert() resize() resize() locks all partitions so the hash table can safely be resized. Then it calls dsa_allocate0(). If dsa_allocate0() fails to allocate, it errors out. The exception handler calls proc_exit() which normally calls LWLockReleaseAll() via AbortTransaction() but only if there's an active transaction. However, pgstat_report_autovac() runs before a transaction got started and hence LWLockReleaseAll() doesn't run before pgstat_shutdown_hook() is called. See attached patch for an attempt to fix this issue. -- David Geier (ServiceNow) --------------Q4aLw488RvmmJYjmNjreZrrJ Content-Type: text/x-patch; charset=UTF-8; name="0001-Fix-autovacuum-cleanup-on-error.patch" Content-Disposition: attachment; filename="0001-Fix-autovacuum-cleanup-on-error.patch" Content-Transfer-Encoding: base64 RnJvbSA1NTgwZTM2ODBiMjIxMTIzNWU0YmMyYjVkY2JmZTZiNGY1YjhlZWU1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBHZWllciA8Z2VpZGF2LnBnQGdtYWlsLmNv bT4KRGF0ZTogVHVlLCAyOCBOb3YgMjAyMyAxODo1Mjo0NiArMDEwMApTdWJqZWN0OiBbUEFU Q0hdIEZpeCBhdXRvdmFjdXVtIGNsZWFudXAgb24gZXJyb3IKCi0tLQogc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgfCAzICsrKwogMSBmaWxlIGNoYW5nZWQsIDMgaW5z ZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3Zh Y3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKaW5kZXggZjky OWI2MmU4YS4uNWRlNTU2NDlkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9hdXRvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVt LmMKQEAgLTE1ODQsNiArMTU4NCw5IEBAIEF1dG9WYWNXb3JrZXJNYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJCS8qIFJlcG9ydCB0aGUgZXJyb3IgdG8gdGhlIHNlcnZlciBsb2cg Ki8KIAkJRW1pdEVycm9yUmVwb3J0KCk7CiAKKwkJLyogTWFrZSBzdXJlIGFsbCBsb2NrcyBh cmUgcmVsZWFzZWQgc28gYXNzZXJ0aW9ucyBkb24ndCBoaXQgaW4gYXQtZXhpdCBjYWxsYmFj a3MgKi8KKwkJTFdMb2NrUmVsZWFzZUFsbCgpOworCiAJCS8qCiAJCSAqIFdlIGNhbiBub3cg Z28gYXdheS4gIE5vdGUgdGhhdCBiZWNhdXNlIHdlIGNhbGxlZCBJbml0UHJvY2VzcywgYQog CQkgKiBjYWxsYmFjayB3YXMgcmVnaXN0ZXJlZCB0byBkbyBQcm9jS2lsbCwgd2hpY2ggd2ls bCBjbGVhbiB1cAotLSAKMi4zOS4yCgo= --------------Q4aLw488RvmmJYjmNjreZrrJ--