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 1sX6vv-001cx1-5K for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Jul 2024 22:27:35 +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 1sX6vs-002J4n-2Q for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Jul 2024 22:27:32 +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 1sX6vr-002J4f-Hc for pgsql-hackers@lists.postgresql.org; Thu, 25 Jul 2024 22:27:31 +0000 Received: from mail-qk1-x730.google.com ([2607:f8b0:4864:20::730]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sX6vo-001RYn-N0 for pgsql-hackers@postgresql.org; Thu, 25 Jul 2024 22:27:30 +0000 Received: by mail-qk1-x730.google.com with SMTP id af79cd13be357-7a1d066a5daso2011785a.3 for ; Thu, 25 Jul 2024 15:27:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1721946448; x=1722551248; darn=postgresql.org; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:from:to:cc:subject:date:message-id:reply-to; bh=zYrqnQ8smNY6uCwpj8Yujg7hHHFktLawGxSfiViYuBU=; b=G5VDZCnGDvs4lJgdETlXiJmFIVn7O5NZr1Euuu71csd5NrQCj+qXR/LnamYyAX+2iG ZzHpiv1VBbRrUAvVPu1nM71GYenDaN8z6kyctudh3M64ciMGdBi9GvLNh5lNVLecnHo8 WZWU18iVHiyJTqvaCgRTZD4SA+AL1gZZ+yo6r+zc6+MesCjETwuD8auhcAxgx1Rme/do bZh9xJhkC9NzzyKMvHtYEBWNx6QQyseZe1FGKnM0314kke4AXBiCYOJyyiUFPwZF5p7N 2mcc51qc7WLKWxweSG2Db6ZbaYwBqVOGDSQnBUSfXvUXmxwinZTF/eb5/Jt+dHLsVHtM g1Aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721946448; x=1722551248; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=zYrqnQ8smNY6uCwpj8Yujg7hHHFktLawGxSfiViYuBU=; b=NGPThHhvXk0cUz9TL2eXwVoelAF/WP8UdOBcXJkAwaeSbPKcZyHyrZvdXzJ6U6FpFg j+MSZ2oH9aYZM6WXNA2zZYSMgWXObEVnVODZlkKMhqACLE55oFqbsXEc7iHyqTZNUxyH zykCXn3TBxJdKb0NIy0T27fIraSJ84eIUp4YcmDRYOjQOVIO9HkKkwSx5s/OwXtjnL2o KqhvcgPpYdwS2AKUAllYhLWW6oV1a053+4mCi9lTtAe7O4rbofM8JkBnrdTwhqxmG+Np C1eCqtANaXKwYSNTt7CsQwEEtD40fUiI/HgnnmrW+dFvXJ9sylUrIH+GVwp+zfonb6I8 VlQQ== X-Forwarded-Encrypted: i=1; AJvYcCUCQ35Sa1XeoTFF5APazcqzJeH1kjJfm4FNmysTVTKjatEnawaJzFojwvzI2/pY1Tdek0oQQAYH5JJgQSGXlqOSMtK80+jSFkfWA+8A X-Gm-Message-State: AOJu0Yydxl/wcHgkzVnU9cB2nQk7IwV82pwchNuii7u4LUTpmuqv4vE/ FwzTEwBHLvqXLIkXyIBukhtJYrNSUE1jB3a8Noei0py7OGDNZdI1 X-Google-Smtp-Source: AGHT+IEQRNTH93yKMXZUsLz0OFgonjdWh2ZcBEae87yfTam93iDO0SfLSMKTjoa2A1Iv98opQgLXQw== X-Received: by 2002:a05:620a:f11:b0:79f:84f:5b40 with SMTP id af79cd13be357-7a1d4532570mr530015285a.35.1721946447282; Thu, 25 Jul 2024 15:27:27 -0700 (PDT) Received: from smtpclient.apple ([52.94.133.128]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7a1d745f941sm120049685a.136.2024.07.25.15.27.26 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Jul 2024 15:27:26 -0700 (PDT) From: Sami Imseih Message-Id: Content-Type: multipart/alternative; boundary="Apple-Mail=_CB260402-5A9A-480B-998C-FF6DEB5BD524" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.600.62\)) Subject: Re: Restart pg_usleep when interrupted Date: Thu, 25 Jul 2024 17:27:15 -0500 In-Reply-To: Cc: Nathan Bossart , Tom Lane , Robert Haas , "pgsql-hackers@postgresql.org" To: Bertrand Drouvot References: <3712E898-03DA-4E03-AF51-D3E24DE68216@gmail.com> <2F781744-69B8-4BC2-A6EF-3998DCCDB634@gmail.com> <01A15AEA-C35C-41DF-8E81-3B5A0B523939@gmail.com> <521A6F3B-77E1-4F3F-B15E-BCF26D52C698@gmail.com> X-Mailer: Apple Mail (2.3774.600.62) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Apple-Mail=_CB260402-5A9A-480B-998C-FF6DEB5BD524 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 I am attaching v3 of the patch which addresses the comments made earlier by Bertrand about the comment in the patch [1]. Also I will = stick with vacuum_sleep as the name as the function will be inside vacuum.c. I am = not sure we should make this function available outside of vacuum, but I = would like to hear other thoughts. Also, earlier in the thread, Alvaro mentions what happens if the sleep time is 0 [2]. In that case, we do not do anything as we = check if sleep time is > 0 microseconds before proceeding with the sleep [1] = https://www.postgresql.org/message-id/ZpDhS4nFX66ItAze%40ip-10-97-1-34.eu-= west-3.compute.internal [2] = https://www.postgresql.org/message-id/202407120939.pr6wpjffmxov%40alvherre= .pgsql Regards, Sami =EF=BF=BC --Apple-Mail=_CB260402-5A9A-480B-998C-FF6DEB5BD524 Content-Type: multipart/mixed; boundary="Apple-Mail=_7F466F60-BAB7-4FAC-AD3D-24A4B3DD3222" --Apple-Mail=_7F466F60-BAB7-4FAC-AD3D-24A4B3DD3222 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii I am attaching = v3 of the patch which addresses the comments made
earlier by = Bertrand about the comment in the patch [1]. Also I will stick = with
vacuum_sleep as the name as the function will be inside = vacuum.c. I am not
sure we should make this function available = outside of vacuum, but I would like
to hear other = thoughts.

Also, earlier in the thread, = Alvaro mentions what happens
if the sleep time is 0 [2]. In = that case, we do not do anything as we check
if sleep time is = > 0 microseconds before proceeding with the = sleep




Regards= ,

Sami

= --Apple-Mail=_7F466F60-BAB7-4FAC-AD3D-24A4B3DD3222 Content-Disposition: attachment; filename=v3-0001-vaccum_delay-with-absolute-time-nanosleep.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v3-0001-vaccum_delay-with-absolute-time-nanosleep.patch" Content-Transfer-Encoding: quoted-printable =46rom=20f77cf0f831df74e5e2d11910cea395f5f4541d25=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Sami=20Imseih=20=0ADate:=20= Thu,=2025=20Jul=202024=2020:28:35=20+0000=0ASubject:=20[PATCH=201/1]=20= vaccum_delay=20with=20absolute=20time=20nanosleep=0A=0A---=0A=20= src/backend/commands/vacuum.c=20|=2049=20= ++++++++++++++++++++++++++++++++++-=0A=201=20file=20changed,=2048=20= insertions(+),=201=20deletion(-)=0A=0Adiff=20--git=20= a/src/backend/commands/vacuum.c=20b/src/backend/commands/vacuum.c=0A= index=2048f8eab202..a753d6984f=20100644=0A---=20= a/src/backend/commands/vacuum.c=0A+++=20b/src/backend/commands/vacuum.c=0A= @@=20-116,6=20+116,53=20@@=20static=20bool=20vacuum_rel(Oid=20relid,=20= RangeVar=20*relation,=20VacuumParams=20*params,=0A=20static=20double=20= compute_parallel_delay(void);=0A=20static=20VacOptValue=20= get_vacoptval_from_boolean(DefElem=20*def);=0A=20static=20bool=20= vac_tid_reaped(ItemPointer=20itemptr,=20void=20*state);=0A+static=20void=20= vacuum_sleep(double=20msec);=0A+=0A+static=0A+void=0A= +vacuum_sleep(double=20msec)=0A+{=0A+=09long=09=09microsec=20=3D=20msec=20= *=201000;=0A+=0A+=09if=20(microsec=20>=200)=0A+=09{=0A+#ifndef=20WIN32=0A= +=09=09/*=0A+=09=09=20*=20We=20allow=20nanosleep=20to=20handle=20= interrupts=20and=20retry=20with=20the=0A+=09=09=20*=20remaining=20time.=20= However,=20frequent=20interruptions=20and=20restarts=20of=20the=0A+=09=09= =20*=20nanosleep=20calls=20can=20substantially=20lead=20to=20drift=20in=20= the=20time=20when=0A+=09=09=20*=20the=20sleep=20finally=20completes.=20= To=20deal=20with=20this,=20we=20break=20out=20of=20the=0A+=09=09=20*=20= loop=20whenever=20the=20elapsed=20time=20exceeds=20the=20requested=20= time.=0A+=09=09=20*/=0A+=09=09struct=20timespec=20delay;=0A+=09=09struct=20= timespec=20remain;=0A+=09=09struct=20instr_time=20start_time;=0A+=0A+=09=09= INSTR_TIME_SET_CURRENT(start_time);=0A+=0A+=09=09delay.tv_sec=20=3D=20= microsec=20/=201000000L;=0A+=09=09delay.tv_nsec=20=3D=20(microsec=20%=20= 1000000L)=20*=201000;=0A+=0A+=09=09while=20(nanosleep(&delay,=20&remain)=20= =3D=3D=20-1=20&&=20errno=20=3D=3D=20EINTR)=0A+=09=09{=0A+=09=09=09struct=20= instr_time=20current_time;=0A+=09=09=09struct=20instr_time=20= elapsed_time;=0A+=0A+=09=09=09INSTR_TIME_SET_CURRENT(current_time);=0A+=0A= +=09=09=09INSTR_TIME_SET_ZERO(elapsed_time);=0A+=09=09=09= INSTR_TIME_ACCUM_DIFF(elapsed_time,=20current_time,=20start_time);=0A+=0A= +=09=09=09if=20(INSTR_TIME_GET_MICROSEC(elapsed_time)=20>=3D=20microsec)=0A= +=09=09=09=09break;=0A+=0A+=09=09=09delay=20=3D=20remain;=0A+=09=09}=0A= +#else=0A+=09=09SleepEx((microsec=20<=20500=20?=201=20:=20(microsec=20+=20= 500)=20/=201000),=20FALSE);=0A+#endif=0A+=09}=0A+}=0A=20=0A=20/*=0A=20=20= *=20GUC=20check=20function=20to=20ensure=20GUC=20value=20specified=20is=20= within=20the=20allowable=0A@@=20-2384,7=20+2431,7=20@@=20= vacuum_delay_point(void)=0A=20=09=09=09msec=20=3D=20vacuum_cost_delay=20= *=204;=0A=20=0A=20=09=09= pgstat_report_wait_start(WAIT_EVENT_VACUUM_DELAY);=0A-=09=09= pg_usleep(msec=20*=201000);=0A+=09=09vacuum_sleep(msec);=0A=20=09=09= pgstat_report_wait_end();=0A=20=0A=20=09=09/*=0A--=20=0A2.43.0=0A=0A= --Apple-Mail=_7F466F60-BAB7-4FAC-AD3D-24A4B3DD3222 Content-Transfer-Encoding: 7bit Content-Type: text/html; charset=us-ascii

--Apple-Mail=_7F466F60-BAB7-4FAC-AD3D-24A4B3DD3222-- --Apple-Mail=_CB260402-5A9A-480B-998C-FF6DEB5BD524--