Hi Justin,
Thanks for your help. I'm making an additional patch for Cirrus CI.
I'm also trying to reproduce the "make check-world" error you
reported, on my Linux environment that has neither a real PMem nor an
emulated one, with PMEM_IS_PMEM_FORCE=1. I'll keep you updated.
Regards,
Takashi
On Mon, Jan 17, 2022 at 4:34 PM Justin Pryzby <pryzby@telsasoft.com> wrote:
>
> On Thu, Jan 06, 2022 at 10:43:37PM -0600, Justin Pryzby wrote:
> > On Fri, Jan 07, 2022 at 12:50:01PM +0900, Takashi Menjo wrote:
> > > > But in this case it really doesn't work :(
> > > >
> > > > running bootstrap script ... 2022-01-05 23:17:30.244 CST [12088] FATAL: file not on PMEM: path
"pg_wal/000000010000000000000001"
> > >
> > > Do you have a real PMEM device such as NVDIMM-N or Intel Optane PMem?
> >
> > No - the point is that we'd like to have a way to exercise this patch on the
> > cfbot. Particularly the new code introduced by this patch, not just the
> > --without-pmem case...
> ..
> > I think you should add a patch which does what Thomas suggested: 1) add to
> > ./.cirrus.yaml installation of the libpmem package for debian/bsd/mac/windows;
> > 2) add setenv to main(), as above; 3) change configure.ac and guc.c to default
> > to --with-libpmem and wal_pmem_map=on. This should be the last patch, for
> > cfbot only, not meant to be merged.
>
> I was able to get the cirrus CI to compile on linux and bsd with the below
> changes. I don't know if there's an easy package installation for mac OSX. I
> think it's okay if mac CI doesn't use --enable-pmem for now.
>
> > You can test that the package installation part works before mailing patches to
> > the list with the instructions here:
> >
> > src/tools/ci/README:
> > Enabling cirrus-ci in a github repository..
>
> I ran the CI under my own github account.
> Linux crashes in the recovery check.
> And freebsd has been stuck for 45min.
>
> I'm not sure, but maybe those are legimate consequence of using
> PMEM_IS_PMEM_FORCE (?) If so, maybe the recovery check would need to be
> disabled for this patch to run on CI... Or maybe my suggestion to enable it by
> default for CI doesn't work for this patch. It would need to be specially
> tested with real hardware.
>
> https://cirrus-ci.com/task/6245151591890944
>
> https://cirrus-ci.com/task/6162551485497344?logs=test_world#L3941
> #2 0x000055ff43c6edad in ExceptionalCondition (conditionName=0x55ff43d18108
"!XLogRecPtrIsInvalid(missingContrecPtr)",errorType=0x55ff43d151c4 "FailedAssertion", fileName=0x55ff43d151bd "xlog.c",
lineNumber=8297)at assert.c:69
>
> commit 15533794e465a381eb23634d67700afa809a0210
> Author: Justin Pryzby <pryzbyj@telsasoft.com>
> Date: Thu Jan 6 22:53:28 2022 -0600
>
> tmp: enable pmem by default, for CI
>
> diff --git a/.cirrus.yml b/.cirrus.yml
> index 677bdf0e65e..0cb961c8103 100644
> --- a/.cirrus.yml
> +++ b/.cirrus.yml
> @@ -81,6 +81,7 @@ task:
> mkdir -m 770 /tmp/cores
> chown root:postgres /tmp/cores
> sysctl kern.corefile='/tmp/cores/%N.%P.core'
> + pkg install -y devel/pmdk
>
> # NB: Intentionally build without --with-llvm. The freebsd image size is
> # already large enough to make VM startup slow, and even without llvm
> @@ -99,6 +100,7 @@ task:
> --with-lz4 \
> --with-pam \
> --with-perl \
> + --with-libpmem \
> --with-python \
> --with-ssl=openssl \
> --with-tcl --with-tclconfig=/usr/local/lib/tcl8.6/ \
> @@ -138,6 +140,7 @@ LINUX_CONFIGURE_FEATURES: &LINUX_CONFIGURE_FEATURES >-
> --with-lz4
> --with-pam
> --with-perl
> + --with-libpmem
> --with-python
> --with-selinux
> --with-ssl=openssl
> @@ -188,6 +191,9 @@ task:
> mkdir -m 770 /tmp/cores
> chown root:postgres /tmp/cores
> sysctl kernel.core_pattern='/tmp/cores/%e-%s-%p.core'
> + echo 'deb http://deb.debian.org/debian bullseye universe' >>/etc/apt/sources.list
> + apt-get update
> + apt-get -y install libpmem-dev
>
> configure_script: |
> su postgres <<-EOF
> @@ -267,6 +273,7 @@ task:
> make \
> openldap \
> openssl \
> + pmem \
> python \
> tcl-tk
>
> @@ -301,6 +308,7 @@ task:
> --with-libxslt \
> --with-lz4 \
> --with-perl \
> + --with-libpmem \
> --with-python \
> --with-ssl=openssl \
> --with-tcl --with-tclconfig=${brewpath}/opt/tcl-tk/lib/ \
> diff --git a/src/backend/main/main.c b/src/backend/main/main.c
> index 9124060bde7..b814269675d 100644
> --- a/src/backend/main/main.c
> +++ b/src/backend/main/main.c
> @@ -69,6 +69,7 @@ main(int argc, char *argv[])
> #endif
>
> progname = get_progname(argv[0]);
> + setenv("PMEM_IS_PMEM_FORCE", "1", 0);
>
> /*
> * Platform-specific startup hacks
> diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
> index ffc55f33e86..32d650cb9b2 100644
> --- a/src/backend/utils/misc/guc.c
> +++ b/src/backend/utils/misc/guc.c
> @@ -1354,7 +1354,7 @@ static struct config_bool ConfigureNamesBool[] =
> "traditional volatile ones."),
> },
> &wal_pmem_map,
> - false,
> + true,
> NULL, NULL, NULL
> },
> #endif
--
Takashi Menjo <takashi.menjo@gmail.com>