Bug 1997378 - Review Request: pg_auto_failover - Postgres extension and service for automated failover and high-availability
Summary: Review Request: pg_auto_failover - Postgres extension and service for automat...
Keywords:
Status: CLOSED NEXTRELEASE
Alias: None
Product: Fedora
Classification: Fedora
Component: Package Review
Version: rawhide
Hardware: All
OS: Linux
unspecified
medium
Target Milestone: ---
Assignee: Michal Schorm
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2021-08-25 06:09 UTC by mkulik
Modified: 2021-09-22 10:40 UTC (History)
5 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2021-09-22 10:38:32 UTC
Type: ---
Embargoed:
mschorm: fedora-review+


Attachments (Terms of Use)

Description mkulik 2021-08-25 06:09:14 UTC
Spec URL: https://gist.githubusercontent.com/mkulik-rh/0899b8f07bb6fabeee0c7a94e7b8d340/raw/d448ac69bfac6448fc3462e3f5605ba9b04d87f1/pg_auto_failover.spec
SRPM URL: https://download.copr.fedorainfracloud.org/results/mkulik/pg_auto_failover/fedora-rawhide-x86_64/02562629-pg_auto_failover/pg_auto_failover-1.6.1-1.fc36.src.rpm

Description:
This is my first package and I'm looking for a sponsor.

pg_auto_failover is an extension and service for PostgreSQL that monitors and
manages automated failover for a Postgres cluster. It is optimized for
simplicity and correctness and supports Postgres 10 and newer.
We set up one PostgreSQL server as a monitor node as well as a primary and
secondary node for storing data. The monitor node tracks the health of the
data nodes and implements a failover state machine. On the PostgreSQL nodes,
the pg_autoctl program runs alongside PostgreSQL and runs the necessary
commands to configure synchronous streaming replication.

Fedora Account System Username: mkulik

Comment 1 david08741 2021-08-25 11:32:11 UTC
Please use plain links to the files them selves, such as:

Spec URL: https://gist.githubusercontent.com/mkulik-rh/0899b8f07bb6fabeee0c7a94e7b8d340/raw/d448ac69bfac6448fc3462e3f5605ba9b04d87f1/pg_auto_failover.spec
SRPM URL: https://download.copr.fedorainfracloud.org/results/mkulik/pg_auto_failover/fedora-rawhide-x86_64/02562629-pg_auto_failover/pg_auto_failover-1.6.1-1.fc36.src.rpm

Otherwise various tools don't work, as they cannot download the files, and get some html file rather then the spec file.

Comment 2 mkulik 2021-08-26 09:16:21 UTC
Thanks, already fixed. I will remember for the future.

Comment 3 Michal Schorm 2021-08-30 09:48:31 UTC
I will be the Reviewer of this package.

Comment 4 Michal Schorm 2021-08-30 10:58:41 UTC
I've ran the 'fedora-review' tool on this package.

Let's begin with the big findings first:
------------------------------------------

'fedora-review' reports:
  Large documentation must go in a -doc subpackage. Large could be size (~1MB) or number of files.
  Note: Documentation size is 3205120 bytes in 169 files.
  See: https://docs.fedoraproject.org/en-US/packaging-guidelines/#_documentation

Reviewer opinion:
  The package manual page coverage is rather extensive for a single tool.
  Even if the HTML Docs won't be present, I'd be quite confident to say the package is still well documented when installed.
  
  The additional 3MB in size HTML Docs should be moved to a standalone sub-package.
    If the Docs is architecture-independent, the sub-package should be 'noarch'.

  Q: Does the HTML docs provide more / different information or it is just a duplicate of the manpages in a different format ?
     If the Docs would be just a duplicate, I'd consider not packing it.
  Also, please note the Docs contains code under additional licenses, e.g. JQuery code under MIT license.
  Since the Docs utilise CSS, JS, JQuery, ... it requires an application capable interpreting those, to be used at all.
    Might be a good idea to take a look at other packages to learn how they deal with Docs in such format.

------------------------------------------

'fedora-review' reports:
  Rpmlint
  -------
  W: manpage-not-compressed gz /usr/share/man/man1/pg_autoctl config check.1

Reviewer opinion:
  The manpages should be compressed.
  Also, we have automation for that. Take a look at the second paragraph describing usage of the RPM "%doc" directive and "%_pkgdocdir" macro:
    https://docs.fedoraproject.org/en-US/packaging-guidelines/#_documentation

------------------------------------------

'fedora-review' reports:
  Rpmlint
  -------
  W: invalid-license Apache

Reviewer opinion:
  Here is a list of approved licenses for Fedora:
    https://fedoraproject.org/wiki/Licensing:Main
  The error might be caused by using incorrect name or abbreviation for the same license.

------------------------------------------

Reviewer finding:
  The SPECfile:
  |  # openssl is required for ssl-self-signed option in pg_auto_failover
  |  Requires:       postgresql postgresql-contrib openssl glibc

Reviewer opinion:
  Please take a look at:
    https://docs.fedoraproject.org/en-US/packaging-guidelines/#_dependency_types
  and consider making some of the "Requires:" to be "Recommends:" or just "Suggests:" only.
  The comment suggest that the "openssl" is a good candidate for such change.

  Also, are you sure the 'glibc' dependency is necessary? That would be most unusual.
  If required by the binaries, it should be required automatically. In such case you even MUST NOT duplicate such automatic requirement.

------------------------------------------

Reviewer finding:
  The SPECfile:
  |  %files
  |  %{_bindir}/*
  |  %{_libdir}/*

Reviewer opinion:
  Please do not use Globs for a critical parts of the package.
  While it is not forbidden for most parts of the package, it is a best practice to not conceal the important files that are actually packed.
  Explicit listing also serves as a good protection mechanisms for the maintainer during package rebases - to catch unexpected files additions or removals.

Comment 5 mkulik 2021-08-31 12:12:59 UTC
Update:

New SPEC file: https://gist.githubusercontent.com/mkulik-rh/0899b8f07bb6fabeee0c7a94e7b8d340/raw/85408546dcf5364dfa2c2ee9790dac6095e6972a/pg_auto_failover.spec

New RPM builds: https://download.copr.fedorainfracloud.org/results/mkulik/pg_auto_failover/fedora-35-x86_64/02676689-pg_auto_failover/pg_auto_failover-1.6.1-1.fc35.src.rpm

Changes:

- Moved HTML docs to separate package (docs)
- Fix license for main and sub-packages
- Fix manual(s) auto gz compression
- Change Globs in %files macro to static ones
- Move openssl package to Recommends, remove glibc


Docs files contain the same information as man files but they also provide some additional information:
- architecture-multi-standby.html
- failover-state-machine.html
- security.html

Comment 6 Michal Schorm 2021-09-01 10:53:30 UTC
I'd still make the %files section more clear to catch possible unexpected changes in the future.

Instead of:
---
%files
%{_bindir}/pg_autoctl
%{_libdir}/pgsql
%{_datadir}/pgsql
%{_mandir}/man1/*
%{_mandir}/man5/*
%license LICENSE
---

I suggest:
---
%files
%{_bindir}/pg_autoctl

%dir %{_libdir}/pgsql
%{_libdir}/pgsql/pgautofailover.so
%{_libdir}/pgsql/bitcode

%dir %{_datadir}/pgsql
%dir %{_datadir}/pgsql/extension
%{_datadir}/pgsql/extension/pgautofailover--*.sql
%{_datadir}/pgsql/extension/pgautofailover.control

%{_mandir}/man{1,5}/*.gz

%license LICENSE
---

======================

I googled whether this package has already been packed by anyone to seek inspiration and avoid re-inventing the wheel.
I found that Devrim Gündüz <devrim> is a maintainer of this package in CentOS 7 and he is keeping it up-to-date.
  https://centos.pkgs.org/7/postgresql-13-x86_64/pg_auto_failover_13-1.6.1-2.rhel7.x86_64.rpm.html

He moved the bytecode to a separate package, with a single purpose of JIT.
That sounds like a good idea to me.
Though I would like first to be sure it is possible to use the JIT files in Fedora in the first place.
I don't see a point in packing files without purpose.
Please:
1/ examine if and how can be those JIT files used in Fedora
2/ move them to a separate sub-package, remove them entirely, or make a different decision;  leave comment in the SPECfile in any case.

You may even try to reach Devrim and ask him, so the package maintenance efforts can be coordinated.

Please, also take a look at the:
  "PG_CONFIG=%{pginstdir}/bin/pg_config"
variable definition before "make" and "make install" commands and find out whether they are useful in our case.

Comment 7 mkulik 2021-09-02 05:58:35 UTC
Updated SPEC: https://gist.githubusercontent.com/mkulik-rh/0899b8f07bb6fabeee0c7a94e7b8d340/raw/bca577e92d84706ecc5176fe299dcfe9a1623c94/pg_auto_failover.spec
Updated SRPM: https://download.copr.fedorainfracloud.org/results/mkulik/pg_auto_failover/fedora-rawhide-x86_64/02679427-pg_auto_failover/pg_auto_failover-1.6.1-1.fc36.src.rpm


We don't need to specify PG_CONFIG variable for a build process in our case, path to pg_config is detected automatically.
This variable might be used when multiple version of postgresql are installed, to select one.

- I cleanup BuildRequires and %files.
- I added global macros to control subpackages builds.
-I separated JIT extension to subpackage. I don't see scenario when JIT code might be preferred 
 for this package by postgresql but ofc It can be forced to use. Regardless.. we should provide that option since we have postgresql-llvmjit

Comment 9 mkulik 2021-09-03 14:07:26 UTC
All packages seems to work correctly. I wrote short HOWTO to setup and test basic functionality of pg_auto_failover and JIT extension for it:

######################
#  pg_auto_failover  #
# Setup & test HOWTO #
######################

# First we need to install pg_auto_failover
# postgres will be installed automatically as dependency
# RPMs links can be found above
> dnf install pg_auto_failover-1.6.1-1.fc34.x86_64.rpm
> dnf install pg_auto_failover-llvmjit-1.6.1-1.fc34.x86_64.rpm

# Let's create default database (we are not gonna use it)
> postgresql-setup --initdb

# Let's try to start postgres server
> systemctl start postgresql

# Let's install screen, we will use it later
> dnf install -y screen

# JIT should be enabled by default after -llvmjit installation (Default ON since postgresql version 12)
> su postgres
> psql
> SHOW jit;



# When we su to another account (postgres) from root we need to adjust this variables
> export XDG_RUNTIME_DIR="/run/user/26" # <-- make sure ID is correct (postgres user)
# make sure that root directories in PATH after su are gone
> export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

# Let's setup DIRs for monitor node
> export PGDATA=/tmp/monitor
> export PGPORT=5000

##################################
# pg_auto_failover setup monitor
##################################

# let's open screen session (as postgres user)
> screen
# adjust variables
> export PGDATA=/tmp/monitor
> export PGPORT=5000
> export XDG_RUNTIME_DIR="/run/user/26"
> export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

# create monitor instance
> pg_autoctl create monitor --ssl-self-signed --hostname localhost --auth trust --run

# detach screen CTRL +a +d

##################################
# pg_auto_failover setup node 1
##################################

# let's open another screen session for node 1 ( postgres user )
> screen
# adjust variables
> export XDG_RUNTIME_DIR="/run/user/26"
> export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
> export PGDATA=/tmp/node_1
> export PGPORT=5001

# create node_1 instance
> pg_autoctl create postgres \
>    --hostname localhost \
>     --auth trust \
>    --ssl-self-signed \
>    --monitor 'postgres://autoctl_node@localhost:5000/pg_auto_failover?sslmode=require' \
>    --run

# detach screen CTRL +a +d

##################################
# pg_auto_failover setup node 2
##################################

# let's open another screen session for node 2 (postgres user)
> screen
# adjust variables
> export XDG_RUNTIME_DIR="/run/user/26"
> export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
> export PGDATA=/tmp/node_2
> export PGPORT=5002

# create node_2 instance
> pg_autoctl create postgres \
>     --hostname localhost \
>    --auth trust \
>     --ssl-self-signed \
>    --monitor 'postgres://autoctl_node@localhost:5000/pg_auto_failover?sslmode=require' \
>    --run

# detach screen CTRL +a +d

# Now all is setup and we can test pg_auto_failover from postgres user
# We need to remember to adjust all variables when we use su (this can be automated in init scripts)
# Example commands to test:
> pg_autoctl show state
> pg_autoctl perform switchover

Result:
> $ pg_autoctl show state
>  Name |  Node |      Host:Port |       LSN | Reachable |       Current State |      Assigned State
> -------+-------+----------------+-----------+-----------+---------------------+--------------------
> node_1 |     1 | localhost:5001 | 0/30000D8 |       yes |             primary |             primary
> node_2 |     2 | localhost:5002 | 0/30000D8 |       yes |           secondary |           secondary

# Testing JIT extension require some changes.
# We need to fake one thing because running JIT is not really fast/optimal in most scenarios:
# we need to change config settings in postgresql monitor node ( for example )
# to force postgres to use JIT when looking at cost of a Query.
# We have 2 options to do that.

##########
# OPTION 1
##########
# Edit postgres configuration file in /tmp/monitor

# Change this options: 
# jit_above_cost = 1
# jit_inline_above_cost = 1
# jit_optimize_above_cost = 1

# After setting this up we need to resume screen with monitor
# and rerun it.
> screen -r <pid monitor>

# To kill current command:
> CTRL+C

# rerun the same command
# Proper command here would be probably: pg_autoctl start monitor
# but this is fine to ( it will skip creating)
> pg_autoctl create monitor --ssl-self-signed --hostname localhost --auth trust --run


##########
# OPTION 2
##########

# Execute as postgres user
> psql -h localhost -p 5000
> set jit = on;
> set jit_above_cost = 1;
> set jit_inline_above_cost = 1;
> set jit_optimize_above_cost = 1;

# Do not close connection, otherwise this settings will be lost


# Here we should be still connected to monitor postgres node after option 2 ( via psql )
# if we choose option 1 we need to connect to it:
> psql -h localhost -p 5000


# Lets create pg_auto_failover extension
> CREATE EXTENSION pgautofailover CASCADE;

# Let's try to execute any command with pg_auto_failover function with analyze:
> explain analyze select * from pgautofailover.get_nodes();

# Expected result:
                                                   QUERY PLAN                                                    
> -----------------------------------------------------------------------------------------------------------------
>  Function Scan on get_nodes  (cost=0.00..10.00 rows=1000 width=85) (actual time=850.328..850.328 rows=0 loops=1)
>  Planning Time: 0.033 ms
>  JIT:
>   Functions: 2
>   Options: Inlining true, Optimization true, Expressions true, Deforming true
>   Timing: Generation 0.653 ms, Inlining 0.085 ms, Optimization 3.543 ms, Emission 8.198 ms, Total 12.478 ms
> Execution Time: 851.127 ms
> (7 rows)

Comment 10 Michal Schorm 2021-09-13 12:52:45 UTC
Thank you for the JIT how-to !

--

I've made another go-through and got following findings:

1/ There is a whitespace right after "%prep" macro you should remove.

2/ I can see that the "docs" supackage states:
  |  Requires:	%{name}%{?_isa} = %precise_version
It the base package really necessary for the "docs" package to be installable and usable ?
If not, I'd suggest weakening the relation to the base package to Recommends or Suggests.

3/ Few days ago, the 1.6.2 version has been released
  https://github.com/citusdata/pg_auto_failover/releases/tag/v1.6.2
Please update your code to match the latest upstream release

Comment 11 mkulik 2021-09-13 21:14:18 UTC
1. Fixed trailing spaces.

2. Yes, I agree.

3. Update spec file to 1.6.2. (bug fix release) (new issues, look docs section)

Another Changes:
* Fixed cond macros for sub-pkgs builds. Now, all builds correctly.
* Description for openssl-devel added.
* Added _unpackaged_files_terminate_build (This is only activated when we build without jit extension, I would not put it in default build but for conditional, not default arguments should be fine, avoiding not packed JIT extensions)
* Switch to bcond

About man files:
I know that removing spaces is not a great solution here but this is not a problem on my side. Assuming that spaces in man files are allowed, example 'autopl example.1'
those files should be compressed by %install macro, they are not because of this:

https://github.com/rpm-software-management/rpm/blob/master/scripts/brp-compress#L24

this script won't handle files with special characters correctly.

I will try to solve it in upstream but that will take time and I need to choose workaround for now. Here are my options:
- change spaces to '-' or '_' to satisfy brp script.
- compress man files manually in spec %install macro
- try to modify sources to generate names without spaces (Not a great solution probably)
- add compression to Makefile in sources using patch file

I choose the 1st one, it seems like a good compromise until bug is fixed. Last option also looks ok-ish but it will require more changes and it is more pron to errors in the future (additional patch file).


About docs:
- Added %doc macro.
- upstream started using sphinx_rtd_theme_citus (fork of sphinx_rtd_theme). I reverted it to official version using patch file. More comments in patch file.
- Fix files wildcard (compression .gz)

SPEC: https://gist.githubusercontent.com/mkulik-rh/0899b8f07bb6fabeee0c7a94e7b8d340/raw/30a0fa9b3c890995830239808929f1296f6a0afa/pg_auto_failover.spec
Patch0: https://gist.githubusercontent.com/mkulik-rh/ace6f65a9bef641860e93bea7bbd0e78/raw/bf454e9687f5cf3d5ac9bb14d70ee06fc7abb57a/gistfile1.txt 

SRPM: https://copr-be.cloud.fedoraproject.org/results/mkulik/pg_auto_failover/srpm-builds/02742729/pg_auto_failover-1.6.2-1.fc35.src.rpm

https://copr.fedorainfracloud.org/coprs/mkulik/pg_auto_failover/builds/

Comment 12 Michal Schorm 2021-09-14 09:15:53 UTC
Looks good, thanks for the justifications !

---

I won't accept this piece of code:
|  # To allow error-less build without packing llvmjit
|  %if %{without llvmjit}
|  %define _unpackaged_files_terminate_build 0
|  %endif

If possible, please avoid modifying the natural build process.

When you have a known list of unpacked files, remove them in in %install phase instead. That way you will still be informed, when a new unexpected file become unpacked to !
When using 'rm', do not use '-f'; for the same reason. As long as you can precisely list all file to be affected by the command, let the command stop you with it's natural behaviour (e.g. "hey, I should have removed a file but it is not there after the last rebase, what should I do?")
The very same idea is the reason why the Guidelines prohibits concealing shared libraries version number with a globs / wildcards. So the natural build process would let you know in the future, that something needs your attention.
Please keep this idea in mind during your maintainer life.

---

Issue found by fedora-review tool:


1/
If your application is a C or C++ application you must list a
BuildRequires against gcc, gcc-c++ or clang.
Note: No gcc, gcc-c++ or clang found in BuildRequires
See: https://docs.fedoraproject.org/en-US/packaging-guidelines/C_and_C++/


2/
License file installed when any subpackage combination is installed.
  We overlooked this one in the last iteration. The 'docs' subpackage>
    Requires:	%{name}%{?_isa} = %precise_version
  was taking care of this.
  Either put it back, or move the license file to a standalone subpackage which will be required by all other subpackages.


3/
Package requires other packages for directories it uses.
  Note: No known owner of /usr/lib64/pgsql/bitcode/pgautofailover
Package must own all directories that it creates.
  Note: Directories without known owners:
  /usr/lib64/pgsql/bitcode/pgautofailover, /usr/lib64/pgsql/bitcode

Comment 13 mkulik 2021-09-14 10:17:35 UTC
Changelog:
* removing JIT extensions folder in %install macro instead of ignoring errors
* /usr/lib64/pgsql/bitcode/pgautofailover is now own by jit sub-pkg, /usr/lib64/pgsql/bitcode should be own by postgresql-llvmjit
* Changed back Suggest to Requires main pkg for docs sub-pkg
* Compiler added

SPEC: https://gist.githubusercontent.com/mkulik-rh/0899b8f07bb6fabeee0c7a94e7b8d340/raw/058606939caf270e8cb0a1005000ac22f77d9d05/pg_auto_failover.spec
SRPM: https://copr-be.cloud.fedoraproject.org/results/mkulik/pg_auto_failover/srpm-builds/02768450/pg_auto_failover-1.6.2-1.fc35.src.rpm

Comment 14 Michal Schorm 2021-09-14 11:57:10 UTC
Package Review
==============

Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed

===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[-]: Development (unversioned) .so files in -devel subpackage, if present.
[x]: If your application is a C or C++ application you must list a
     BuildRequires against gcc, gcc-c++ or clang.
[x]: Header files in -devel subpackage, if present.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: License field in the package spec file matches the actual license.
[x]: License file installed when any subpackage combination is installed.
[x]: Package must own all directories that it creates.
[x]: %build honors applicable compiler flags or justifies otherwise.
[x]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[-]: Package contains desktop file if it is a GUI application.
[-]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[x]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: Useful -debuginfo package or justification otherwise.
[x]: Package is not known to require an ExcludeArch tag.
[x]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package does not own files or directories owned by other packages.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package must not depend on deprecated() packages.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[-]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[x]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[x]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[-]: Sources are verified with gpgverify first in %prep if upstream
     publishes signatures.
     Note: gpgverify is not used.
[-]: Description and summary sections in the package spec file contains
     translations for supported Non-English languages, if available.
[x]: Package should compile and build into binary rpms on all supported
     architectures.
[-]: %check is present and all tests pass.
[?]: Packages should try to preserve timestamps of original installed
     files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Fully versioned dependency in subpackages if applicable.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: There are rpmlint messages (see attachment).
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.
[x]: Spec file according to URL is the same as in SRPM.


Rpmlint
-------
Checking: pg_auto_failover-1.6.2-1.fc36.x86_64.rpm
          pg_auto_failover-docs-1.6.2-1.fc36.noarch.rpm
          pg_auto_failover-llvmjit-1.6.2-1.fc36.x86_64.rpm
          pg_auto_failover-debuginfo-1.6.2-1.fc36.x86_64.rpm
          pg_auto_failover-debugsource-1.6.2-1.fc36.x86_64.rpm
          pg_auto_failover-1.6.2-1.fc36.src.rpm
pg_auto_failover.x86_64: W: spelling-error Summary(en_US) Postgres -> Postures, Postgraduates
pg_auto_failover.x86_64: W: spelling-error Summary(en_US) failover -> fail over, fail-over, spillover
pg_auto_failover.x86_64: W: spelling-error %description -l en_US failover -> fail over, fail-over, spillover
pg_auto_failover.x86_64: W: spelling-error %description -l en_US autoctl -> autoclave
pg_auto_failover-docs.noarch: W: spelling-error Summary(en_US) failover -> fail over, fail-over, spillover
pg_auto_failover-docs.noarch: W: spelling-error %description -l en_US failover -> fail over, fail-over, spillover
pg_auto_failover-llvmjit.x86_64: W: spelling-error Summary(en_US) failover -> fail over, fail-over, spillover
pg_auto_failover-llvmjit.x86_64: W: spelling-error %description -l en_US failover -> fail over, fail-over, spillover
pg_auto_failover-llvmjit.x86_64: W: only-non-binary-in-usr-lib
pg_auto_failover-llvmjit.x86_64: W: no-documentation
pg_auto_failover-debuginfo.x86_64: W: spelling-error Summary(en_US) failover -> fail over, fail-over, spillover
pg_auto_failover-debuginfo.x86_64: W: spelling-error %description -l en_US failover -> fail over, fail-over, spillover
pg_auto_failover-debugsource.x86_64: W: spelling-error Summary(en_US) failover -> fail over, fail-over, spillover
pg_auto_failover-debugsource.x86_64: W: spelling-error %description -l en_US failover -> fail over, fail-over, spillover
pg_auto_failover.src: W: spelling-error Summary(en_US) Postgres -> Postures, Postgraduates
pg_auto_failover.src: W: spelling-error Summary(en_US) failover -> fail over, fail-over, spillover
pg_auto_failover.src: W: spelling-error %description -l en_US failover -> fail over, fail-over, spillover
pg_auto_failover.src: W: spelling-error %description -l en_US autoctl -> autoclave
6 packages and 0 specfiles checked; 0 errors, 18 warnings.




Rpmlint (debuginfo)
-------------------
Checking: pg_auto_failover-debuginfo-1.6.2-1.fc36.x86_64.rpm
pg_auto_failover-debuginfo.x86_64: W: spelling-error Summary(en_US) failover -> fail over, fail-over, spillover
pg_auto_failover-debuginfo.x86_64: W: spelling-error %description -l en_US failover -> fail over, fail-over, spillover
1 packages and 0 specfiles checked; 0 errors, 2 warnings.





Unversioned so-files
--------------------
pg_auto_failover: /usr/lib64/pgsql/pgautofailover.so

Source checksums
----------------
https://github.com/citusdata/pg_auto_failover/archive/refs/tags/v1.6.2.tar.gz :
  CHECKSUM(SHA256) this package     : 8af35ac18e39b9b016c5410b317bdd81a3351f0d6f65bb77484d14936d17bb74
  CHECKSUM(SHA256) upstream package : 8af35ac18e39b9b016c5410b317bdd81a3351f0d6f65bb77484d14936d17bb74


Requires
--------
pg_auto_failover (rpmlib, GLIBC filtered):
    libc.so.6()(64bit)
    libm.so.6()(64bit)
    libpq.so.private13-5()(64bit)
    postgresql-contrib
    postgresql-server
    rtld(GNU_HASH)

pg_auto_failover-docs (rpmlib, GLIBC filtered):
    pg_auto_failover(x86-64)

pg_auto_failover-llvmjit (rpmlib, GLIBC filtered):
    pg_auto_failover(x86-64)
    postgresql-llvmjit

pg_auto_failover-debuginfo (rpmlib, GLIBC filtered):

pg_auto_failover-debugsource (rpmlib, GLIBC filtered):



Provides
--------
pg_auto_failover:
    pg_auto_failover
    pg_auto_failover(x86-64)

pg_auto_failover-docs:
    pg_auto_failover-docs

pg_auto_failover-llvmjit:
    pg_auto_failover-llvmjit
    pg_auto_failover-llvmjit(x86-64)

pg_auto_failover-debuginfo:
    debuginfo(build-id)
    pg_auto_failover-debuginfo
    pg_auto_failover-debuginfo(x86-64)

pg_auto_failover-debugsource:
    pg_auto_failover-debugsource
    pg_auto_failover-debugsource(x86-64)



Generated by fedora-review 0.7.6 (b083f91) last change: 2020-11-10
Command line :/usr/bin/fedora-review -n pg_auto_failover
Buildroot used: fedora-rawhide-x86_64
Active plugins: Shell-api, Generic, C/C++
Disabled plugins: Ocaml, fonts, Haskell, PHP, SugarActivity, Python, Java, Perl, R
Disabled flags: EPEL6, EPEL7, DISTTAG, BATCH, EXARCH

==================================================================================================

Revieved by: Michal Schorm

Reviewer notes:

* The '/usr/lib64/pgsql/pgautofailover.so' file is a plugin for PostgreSQL database.
  It is not versioned nor is expected to be.
* The author provided *.rpmlintrc file to deal with the RPMLint spelling errors that are false positives or otherwise wrong.

I _ACCEPT_ this package submission.
Marek, feel free to contact me anytime, should you need any additional guidance or just a help in the Fedora import/build/update process.

Comment 15 mkulik 2021-09-14 14:18:20 UTC
That was an in-depth review. I appreciate it. Thank you.

Comment 16 Miroslav Suchý 2021-09-18 07:30:25 UTC
One nitpick:

> %if 0%{?fedora} < 35

This can cause problems when downstreaming. E.g. This becomes true on RH 9 (or 10). Because the macro fedora is not defined there and it becomes 0 < 35 which is True.
It is better to write it as:

> %if 0%{?fedora} && 0%{?fedora} < 35

or you can reverse the condition

%if 0%{?fedora} < 35
   #nothing to do here because.....
%elif
  Requires:.....
%endif

But this definitely does not block the review.
I explained to Marek the processes in Fedora and how to do the things.
I granted Marek the packager role.

Comment 17 Igor Raits 2021-09-20 11:58:28 UTC
(fedscm-admin):  The Pagure repository was created at https://src.fedoraproject.org/rpms/pg_auto_failover


Note You need to log in before you can comment on or make changes to this bug.