konrad-ohms commented on issue #3517:
URL: https://github.com/apache/couchdb/issues/3517#issuecomment-909124414


   Okay, I validated your fix, please find the outcome below:
   
   First, I wanted to create a patch build which is as close as possible to 
what I have tested before, so I used the same OS as in the container image I 
used initially:
   
   ```bash
   $ podman run --rm -it docker.io/library/couchdb:3.1.1 cat /etc/os-release
   PRETTY_NAME="Debian GNU/Linux 10 (buster)"
   NAME="Debian GNU/Linux"
   VERSION_ID="10"
   VERSION="10 (buster)"
   VERSION_CODENAME=buster
   ID=debian
   HOME_URL="https://www.debian.org/";
   SUPPORT_URL="https://www.debian.org/support";
   BUG_REPORT_URL="https://bugs.debian.org/";
   ```
   
   To get a build env matching the OS and its required libraries, I had a look 
into <https://github.com/apache/couchdb-ci> and built the following image on an 
18.04.5 LTS amd64 VM with Docker version 20.10.8, build 3967b7d:
   
   ```bash
   $ git clone https://github.com/apache/couchdb-ci.git
   Cloning into 'couchdb-ci'...
   remote: Enumerating objects: 1742, done.
   remote: Counting objects: 100% (87/87), done.
   remote: Compressing objects: 100% (58/58), done.
   remote: Total 1742 (delta 55), reused 56 (delta 29), pack-reused 1655
   Receiving objects: 100% (1742/1742), 10.24 MiB | 16.11 MiB/s, done.
   Resolving deltas: 100% (998/998), done.
   $ cd couchdb-ci/
   $ ./build.sh platform debian-buster
   ...
   Successfully built d1c29b763a2c
   Successfully tagged apache/couchdbci-debian:buster-erlang-20.3.8.26-1
   ```
   
   From there I used CouchDB v3.1.1 and applied your patch within the container:
   
   ```bash
   $ docker run --name couchdb-3.1.1-fix-validation -it 
apache/couchdbci-debian:buster-erlang-20.3.8.26-1
   jenkins@2665e52069d0:/$ cd ~
   jenkins@2665e52069d0:~$ whoami
   jenkins
   jenkins@2665e52069d0:~$ pwd
   /home/jenkins
   jenkins@2665e52069d0:~$ git clone --depth=1 -b 3.1.1 
https://github.com/apache/couchdb.git
   Cloning into 'couchdb'...
   remote: Enumerating objects: 1207, done.
   remote: Counting objects: 100% (1207/1207), done.
   remote: Compressing objects: 100% (1099/1099), done.
   remote: Total 1207 (delta 245), reused 380 (delta 55), pack-reused 0
   Receiving objects: 100% (1207/1207), 1.80 MiB | 6.14 MiB/s, done.
   Resolving deltas: 100% (245/245), done.
   Note: checking out 'ce596c65d9d7f0bc5d9937bcaf6253b343015690'.
   
   You are in 'detached HEAD' state. You can look around, make experimental
   changes and commit them, and you can discard any commits you make in this
   state without impacting any branches by performing another checkout.
   
   If you want to create a new branch to retain commits you create, you may
   do so (now or later) by using -b with the checkout command again. Example:
   
     git checkout -b <new-branch-name>
   
   jenkins@2665e52069d0:~$ # Apply Jan's patch
   jenkins@2665e52069d0:~$ cat <<'EOF' > jan.patch
   > diff --git a/share/server/60/rewrite_fun.js 
b/share/server/60/rewrite_fun.js
   > index 1b27a9d14..9b85f953f 100644
   > --- a/share/server/60/rewrite_fun.js
   > +++ b/share/server/60/rewrite_fun.js
   > @@ -15,30 +15,39 @@
   >  //
   >  //  
https://github.com/dmunch/couch-chakra/blob/master/js/normalizeFunction.js
   >  
   > +
   > +const cache = {}
   >  function rewriteFunInt(fun) {
   > -    const ast = esprima.parse(fun);
   > -    let idx = ast.body.length - 1;
   > -    let decl = {};
   > -
   > -    // Search for the first FunctionDeclaration beginning from the end
   > -    do {
   > -        decl = ast.body[idx--];
   > -    } while (idx >= 0 && decl.type !== "FunctionDeclaration");
   > -    idx++;
   > -
   > -    // If we have a function declaration without an Id, wrap it
   > -    // in an ExpressionStatement and change it into
   > -    // a FuntionExpression
   > -    if (decl.type == "FunctionDeclaration" && decl.id == null) {
   > -        decl.type = "FunctionExpression";
   > -        ast.body[idx] = {
   > -            type: "ExpressionStatement",
   > -            expression: decl
   > -        };
   > -    }
   > +    const crc = crc32_str(fun)
   > +    if (cache[crc]) {
   > +        return cache[crc];
   > +    } else {
   > +        const ast = esprima.parse(fun);
   > +        let idx = ast.body.length - 1;
   > +        let decl = {};
   > +
   > +        // Search for the first FunctionDeclaration beginning from the end
   > +        do {
   > +            decl = ast.body[idx--];
   > +        } while (idx >= 0 && decl.type !== "FunctionDeclaration");
   > +        idx++;
   > +
   > +        // If we have a function declaration without an Id, wrap it
   > +        // in an ExpressionStatement and change it into
   > +        // a FuntionExpression
   > +        if (decl.type == "FunctionDeclaration" && decl.id == null) {
   > +            decl.type = "FunctionExpression";
   > +            ast.body[idx] = {
   > +                type: "ExpressionStatement",
   > +                expression: decl
   > +            };
   > +        }
   >  
   > -    // Generate source from the rewritten AST
   > -    return escodegen.generate(ast);
   > +        // Generate source from the rewritten AST
   > +        const gen = escodegen.generate(ast);
   > +        cache[crc] = gen;
   > +        return gen;
   > +    }
   >  }
   >  
   >  
   > @@ -53,4 +62,51 @@ function rewriteFuns(funsJSON) {
   >          return rewriteFunInt(fun);
   >      });
   >      return JSON.stringify(results);
   > -}
   > \ No newline at end of file
   > +}
   > +
   > +// nicked from https://github.com/SheetJS/js-crc32/blob/master/crc32.js
   > +
   > +function signed_crc_table() {
   > +var c = 0, table = new Array(256);
   > +
   > +for(var n =0; n != 256; ++n){
   > +c = n;
   > +c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
   > +c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
   > +c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
   > +c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
   > +c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
   > +c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
   > +c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
   > +c = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));
   > +table[n] = c;
   > +}
   > +
   > +return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;
   > +}
   > +
   > +var T = signed_crc_table();
   > +
   > +function crc32_str(str, seed) {
   > +var C = seed ^ -1;
   > +for(var i = 0, L=str.length, c, d; i < L;) {
   > +c = str.charCodeAt(i++);
   > +if(c < 0x80) {
   > +C = (C>>>8) ^ T[(C ^ c)&0xFF];
   > +} else if(c < 0x800) {
   > +C = (C>>>8) ^ T[(C ^ (192|((c>>6)&31)))&0xFF];
   > +C = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF];
   > +} else if(c >= 0xD800 && c < 0xE000) {
   > +c = (c&1023)+64; d = str.charCodeAt(i++)&1023;
   > +C = (C>>>8) ^ T[(C ^ (240|((c>>8)&7)))&0xFF];
   > +C = (C>>>8) ^ T[(C ^ (128|((c>>2)&63)))&0xFF];
   > +C = (C>>>8) ^ T[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];
   > +C = (C>>>8) ^ T[(C ^ (128|(d&63)))&0xFF];
   > +} else {
   > +C = (C>>>8) ^ T[(C ^ (224|((c>>12)&15)))&0xFF];
   > +C = (C>>>8) ^ T[(C ^ (128|((c>>6)&63)))&0xFF];
   > +C = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF];
   > +}
   > +}
   > +return C ^ -1;
   > +}
   > EOF
   
   jenkins@2665e52069d0:~$ cd couchdb/
   jenkins@2665e52069d0:~/couchdb$ git status
   Not currently on any branch.
   nothing to commit, working tree clean
   jenkins@2665e52069d0:~/couchdb$ git checkout -b 3.1.1-patch-jan
   Switched to a new branch '3.1.1-patch-jan'
   jenkins@2665e52069d0:~/couchdb$ git apply ../jan.patch 
   jenkins@2665e52069d0:~/couchdb$ git status
   On branch 3.1.1-patch-jan
   Changes not staged for commit:
     (use "git add <file>..." to update what will be committed)
     (use "git checkout -- <file>..." to discard changes in working directory)
   
        modified:   share/server/60/rewrite_fun.js
   
   no changes added to commit (use "git add" and/or "git commit -a")
   ```
   
   Afterwards I compiled the source:
   
   ```bash
   jenkins@2665e52069d0:~/couchdb$ ./configure
   ...
   ==> couchdb (update-deps)
   Updating config from {git,"https://github.com/apache/couchdb-config.git";,
                             {tag,"2.1.7"}}
   Updating b64url from {git,"https://github.com/apache/couchdb-b64url.git";,
                             {tag,"1.0.2"}}
   Updating ets_lru from {git,"https://github.com/apache/couchdb-ets-lru.git";,
                              {tag,"1.1.0"}}
   Updating khash from {git,"https://github.com/apache/couchdb-khash.git";,
                            {tag,"1.1.0"}}
   Updating snappy from {git,"https://github.com/apache/couchdb-snappy.git";,
                             {tag,"CouchDB-1.0.4"}}
   Updating docs from {git,"https://github.com/apache/couchdb-documentation";,
                           {tag,"3.1.1-RC2"}}
   Updating fauxton from {git,"https://github.com/apache/couchdb-fauxton";,
                              {tag,"v1.2.6"}}
   Updating folsom from {git,"https://github.com/apache/couchdb-folsom.git";,
                             {tag,"CouchDB-0.8.3"}}
   Updating hyper from {git,"https://github.com/apache/couchdb-hyper.git";,
                            {tag,"CouchDB-2.2.0-6"}}
   Updating ibrowse from {git,"https://github.com/apache/couchdb-ibrowse.git";,
                              {tag,"CouchDB-4.0.1-1"}}
   Updating jiffy from {git,"https://github.com/apache/couchdb-jiffy.git";,
                            {tag,"CouchDB-1.0.4-1"}}
   Updating mochiweb from {git,"https://github.com/apache/couchdb-mochiweb.git";,
                               {tag,"v2.20.0"}}
   Updating meck from {git,"https://github.com/apache/couchdb-meck.git";,
                           {tag,"0.8.8"}}
   Updating recon from {git,"https://github.com/apache/couchdb-recon.git";,
                            {tag,"2.5.0"}}
   Updating proper from {git,"https://github.com/proper-testing/proper";,
                             {tag,"v1.3"}}
   Updating bear from {git,"https://github.com/apache/couchdb-bear.git";,
                           "008f48aff819126e281d5ccae80a258bf9bf9c30"}
   You have configured Apache CouchDB, time to relax. Relax.
   
   # Compile
   jenkins@2665e52069d0:~/couchdb$ make release
   ...
   The HTML pages are in build/html.
   sphinx-build -b man -a -W -n -A local=1 -D latex_elements.papersize=a4 -d 
build/doctree src/ build/man
   Running Sphinx v1.8.4
   making output directory...
   loading pickled environment... done
   building [mo]: all of 0 po files
   building [man]: all source files
   updating environment: 0 added, 0 changed, 0 removed
   looking for now-outdated files... none found
   writing... apachecouchdb.1 { intro/index intro/overview intro/why 
intro/consistency intro/curl intro/security intro/tour intro/api 
replication/index replication/intro replication/replicator 
replication/conflicts replication/protocol ddocs/index ddocs/ddocs 
ddocs/views/index ddocs/views/intro ddocs/views/collation ddocs/views/joins 
ddocs/views/nosql ddocs/views/pagination ddocs/search best-practices/index 
best-practices/documents best-practices/forms best-practices/iso-date 
best-practices/jsdevel best-practices/views best-practices/reverse-proxies 
install/index install/unix install/windows install/mac install/freebsd 
install/docker install/snap install/kubernetes install/search install/upgrading 
install/troubleshooting setup/index setup/single-node setup/cluster 
config/index config/intro config/couchdb config/cluster config/couch-peruser 
config/http config/auth config/compaction config/indexbuilds config/ioq 
config/logging config/replicator config/query-servers config/misc config/r
 esharding cluster/index cluster/theory cluster/nodes cluster/databases 
cluster/sharding cluster/purging maintenance/index maintenance/compaction 
maintenance/performance maintenance/backups fauxton/index fauxton/install 
experimental api/index api/basics api/server/index api/server/common 
api/server/authn api/server/configuration api/database/index 
api/database/common api/database/bulk-api api/database/find api/database/shard 
api/database/changes api/database/compact api/database/security 
api/database/misc api/document/index api/document/common 
api/document/attachments api/ddoc/index api/ddoc/common api/ddoc/views 
api/ddoc/search api/ddoc/render api/ddoc/rewrites api/partitioned-dbs api/local 
json-structure query-server/index query-server/protocol query-server/javascript 
query-server/erlang partitioned-dbs/index whatsnew/index whatsnew/3.1 
whatsnew/3.0 whatsnew/2.3 whatsnew/2.2 whatsnew/2.1 whatsnew/2.0 whatsnew/1.7 
whatsnew/1.6 whatsnew/1.5 whatsnew/1.4 whatsnew/1.3 whatsnew/1.2 what
 snew/1.1 whatsnew/1.0 whatsnew/0.11 whatsnew/0.10 whatsnew/0.9 whatsnew/0.8 
cve/index cve/2010-0009 cve/2010-2234 cve/2010-3854 cve/2012-5641 cve/2012-5649 
cve/2012-5650 cve/2014-2668 cve/2017-12635 cve/2017-12636 cve/2018-11769 
cve/2018-17188 cve/2018-8007 cve/2020-1955 about contributing } 
   build succeeded.
   
   The manual pages are in build/man.
   make[1]: Leaving directory '/home/jenkins/couchdb/src/docs'
   Installing CouchDB into rel/couchdb/ ...
   ==> rel (generate)
   WARN:  'generate' command does not apply to directory /home/jenkins/couchdb
   ... done
   
       You can now copy the rel/couchdb directory anywhere on your system.
       Start CouchDB with ./bin/couchdb from within that directory.
   
   jenkins@2665e52069d0:~/couchdb$ echo $?
   0
   
   ```
   
   The compilation seem to have worked, so I created deb packages based on 
that. The `make dist` seemed not to like uncommited changes, so I added your 
patch as a commit:
   
   ```bash
   jenkins@2665e52069d0:~/couchdb$ git config --global user.email 
"[email protected]"
   jenkins@2665e52069d0:~/couchdb$ git config --global user.name "CouchDB 
validation"
   jenkins@2665e52069d0:~/couchdb$ git commit -am "fix: Apply caching"
   [3.1.1-patch-jan 6c2d01a] fix: Apply caching
    1 file changed, 79 insertions(+), 23 deletions(-)
   jenkins@2665e52069d0:~/couchdb$ make dist
   ==> config (compile)
   ==> b64url (compile)
   ==> ets_lru (compile)
   ==> khash (compile)
   ==> snappy (compile)
   ==> bear (compile)
   ==> meck (compile)
   ==> folsom (compile)
   ==> hyper (compile)
   ==> ibrowse (compile)
   ==> jiffy (compile)
   ==> mochiweb (compile)
   ==> recon (compile)
   ==> proper (compile)
   ==> couch_epi (compile)
   ==> couch_log (compile)
   ==> chttpd (compile)
   ==> couch (compile)
   Compiling priv/couch_js/1.8.5/http.c
   Compiling priv/couch_js/1.8.5/main.c
   Compiling priv/couch_js/1.8.5/utf8.c
   Compiling priv/couch_js/1.8.5/util.c
   ==> couch_event (compile)
   ==> mem3 (compile)
   ==> couch_index (compile)
   ==> couch_mrview (compile)
   ==> couch_replicator (compile)
   ==> couch_plugins (compile)
   ==> couch_pse_tests (compile)
   ==> couch_stats (compile)
   ==> couch_peruser (compile)
   ==> couch_tests (compile)
   ==> ddoc_cache (compile)
   ==> dreyfus (compile)
   ==> fabric (compile)
   ==> global_changes (compile)
   ==> ioq (compile)
   ==> jwtf (compile)
   ==> ken (compile)
   ==> mango (compile)
   ==> rexi (compile)
   ==> setup (compile)
   ==> smoosh (compile)
   ==> rel (compile)
   ==> couchdb (compile)
   COUCHDB_GIT_SHA:        6c2d01a
   COUCHDB_VERSION:        3.1.1-6c2d01a
   COUCHDB_VERSION_SUFFIX: 6c2d01a
   DIRTY:                  
   IN_RC:                  
   IN_RELEASE:             
   ON_TAG:                 
   REL_TAG:                3.1.1
   SUB_VSN:                
   Building Apache CouchDB 3.1.1-6c2d01a
   fatal: ambiguous argument '6c976bd..HEAD': unknown revision or path not in 
the working tree.
   Use '--' to separate paths from revisions, like this:
   'git <command> [<revision>...] -- [<file>...]'
   Done: apache-couchdb-3.1.1-6c2d01a.tar.gz
   ```
   
   I copied that tar back to the host OS:
   
   ```bash
   $ docker cp 
couchdb-3.1.1-fix-validation:/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a.tar.gz
 .
   $ git clone https://github.com/apache/couchdb-pkg.git
   Cloning into 'couchdb-pkg'...
   remote: Enumerating objects: 723, done.
   remote: Counting objects: 100% (94/94), done.
   remote: Compressing objects: 100% (70/70), done.
   remote: Total 723 (delta 40), reused 57 (delta 20), pack-reused 629
   Receiving objects: 100% (723/723), 25.31 MiB | 23.49 MiB/s, done.
   Resolving deltas: 100% (335/335), done.
   $ cd couchdb-pkg/
   
   ```
   
   The assumed image name was 
`couchdbdev/<osname>-<codename>-erlang-<erlang-version>`, so I retagged my 
created one before running the packaging job:
   
   ```bash
   $ docker tag apache/couchdbci-debian:buster-erlang-20.3.8.26-1 
couchdbdev/debian-buster-erlang-20.3.8.26-1
   $ ERLANGVERSION=20.3.8.26-1 ./build.sh couch debian-buster 
/root/apache-couchdb-3.1.1-6c2d01a.tar.gz
   Using apache-couchdb-3.1.1-6c2d01a.tar.gz to build packages...
   mkdir -p ../couchdb
   cp apache-couchdb-3.1.1-6c2d01a.tar.gz ../couchdb
   cd ../couchdb && tar xfz *.tar.gz
   cp debian/control.in debian/control
   sed -i 's/%SPIDERMONKEY%/libmozjs-60-0/g' debian/control
   sed -i 's/%SPIDERMONKEY_DEV%/libmozjs-60-dev/g' debian/control
   echo 'SM_VER = 60' > debian/sm_ver.mk
   rm -rf /home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/debian
   cp -R debian /home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a
   cd /home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a && dch -v 
3.1.1-6c2d01a~buster "Automatically generated package from upstream."
   cd /home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a && dpkg-buildpackage 
-b -us -uc
   dpkg-buildpackage: info: source package couchdb
   dpkg-buildpackage: info: source version 3.1.1-6c2d01a~buster
   dpkg-buildpackage: info: source distribution UNRELEASED
   dpkg-buildpackage: info: source changed by "CouchDB Developers" 
<"[email protected]">
    dpkg-source --before-build .
   dpkg-buildpackage: info: host architecture amd64
   dpkg-source: info: using options from 
apache-couchdb-3.1.1-6c2d01a/debian/source/options: --compression=bzip2 
--compression-level=9
    debian/rules clean
   make[1]: Entering directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   dh clean --with=systemd
      debian/rules override_dh_auto_clean
   make[2]: Entering directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   dh_auto_clean
        make -j1 distclean
   make[3]: Entering directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   ==> config (clean)
   ==> b64url (clean)
   ==> ets_lru (clean)
   ==> khash (clean)
   ==> snappy (clean)
   ==> bear (clean)
   ==> meck (clean)
   ==> folsom (clean)
   ==> hyper (clean)
   ==> ibrowse (clean)
   ==> jiffy (clean)
   ==> mochiweb (clean)
   ==> recon (clean)
   ==> couch_epi (clean)
   ==> couch_log (clean)
   ==> chttpd (clean)
   ==> couch (clean)
   ==> couch_event (clean)
   ==> mem3 (clean)
   ==> couch_index (clean)
   ==> couch_mrview (clean)
   ==> couch_replicator (clean)
   ==> couch_plugins (clean)
   ==> couch_pse_tests (clean)
   ==> couch_stats (clean)
   ==> couch_peruser (clean)
   ==> couch_tests (clean)
   ==> ddoc_cache (clean)
   ==> dreyfus (clean)
   ==> fabric (clean)
   ==> global_changes (clean)
   ==> ioq (clean)
   ==> jwtf (clean)
   ==> ken (clean)
   ==> mango (clean)
   ==> rexi (clean)
   ==> setup (clean)
   ==> smoosh (clean)
   ==> rel (clean)
   ==> apache-couchdb-3.1.1-6c2d01a (clean)
   make[3]: Leaving directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   mv src/mango/src/mango_cursor_text.erl.nocompile 
src/mango/src/mango_cursor_text.erl
   mv: cannot stat 'src/mango/src/mango_cursor_text.erl.nocompile': No such 
file or directory
   make[2]: [debian/rules:21: override_dh_auto_clean] Error 1 (ignored)
   mv src/mango/src/mango_cursor_text.nocompile 
src/mango/src/mango_cursor_text.erl
   mv: cannot stat 'src/mango/src/mango_cursor_text.nocompile': No such file or 
directory
   make[2]: [debian/rules:22: override_dh_auto_clean] Error 1 (ignored)
   make[2]: Leaving directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
      dh_clean
   make[1]: Leaving directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
    debian/rules build
   make[1]: Entering directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   dh build --with=systemd
      dh_update_autotools_config
      debian/rules override_dh_auto_configure
   make[2]: Entering directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   ./configure --spidermonkey-version 60
   ==> configuring couchdb in rel/couchdb.config
   You have configured Apache CouchDB, time to relax. Relax.
   make[2]: Leaving directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
      debian/rules override_dh_auto_build
   make[2]: Entering directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   dh_auto_build -- release
        make -j1 release
   make[3]: Entering directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   ==> config (compile)
   Compiled src/config_util.erl
   Compiled src/config_writer.erl
   Compiled src/config_sup.erl
   Compiled src/config_notifier.erl
   Compiled src/config_listener_mon.erl
   Compiled src/config_listener.erl
   Compiled src/config_app.erl
   Compiled src/config.erl
   ==> b64url (compile)
   Compiled src/b64url.erl
   Compiling c_src/b64url.c
   ==> ets_lru (compile)
   Compiled src/ets_lru.erl
   ==> khash (compile)
   Compiled src/khash.erl
   Compiling c_src/hash.c
   Compiling c_src/khash.c
   ==> snappy (compile)
   Compiled src/snappy.erl
   Compiling c_src/snappy_nif.cc
   c_src/snappy_nif.cc: In function 'ERL_NIF_TERM snappy_compress(ErlNifEnv*, 
int, const ERL_NIF_TERM*)':
   c_src/snappy_nif.cc:156:28: warning: catching polymorphic type 'class 
std::bad_alloc' by value [-Wcatch-value=]
        } catch(std::bad_alloc e) {
                               ^
   Compiling c_src/snappy/snappy-sinksource.cc
   Compiling c_src/snappy/snappy-stubs-internal.cc
   Compiling c_src/snappy/snappy.cc
   c_src/snappy/snappy.cc: In instantiation of 'bool 
snappy::SnappyScatteredWriter<Allocator>::AppendFromSelf(size_t, size_t) [with 
Allocator = snappy::SnappySinkAllocator; size_t = long unsigned int]':
   c_src/snappy/snappy.cc:779:13:   required from 'void 
snappy::SnappyDecompressor::DecompressAllTags(Writer*) [with Writer = 
snappy::SnappyScatteredWriter<snappy::SnappySinkAllocator>]'
   c_src/snappy/snappy.cc:865:3:   required from 'bool 
snappy::InternalUncompressAllTags(snappy::SnappyDecompressor*, Writer*, 
snappy::uint32) [with Writer = 
snappy::SnappyScatteredWriter<snappy::SnappySinkAllocator>; snappy::uint32 = 
unsigned int]'
   c_src/snappy/snappy.cc:1549:78:   required from here
   c_src/snappy/snappy.cc:1401:21: warning: comparison of integer expressions 
of different signedness: 'size_t' {aka 'long unsigned int'} and 'long int' 
[-Wsign-compare]
        if (offset - 1u < op_ptr_ - op_base_) {
            ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
   ==> bear (compile)
   /home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/src/bear/src/bear.erl:28: 
Warning: export_all flag enabled - all functions will be exported
   Compiled src/bear.erl
   ==> meck (compile)
   Compiled src/meck_util.erl
   Compiled src/meck_matcher.erl
   Compiled src/meck_ret_spec.erl
   Compiled src/meck_history.erl
   Compiled src/meck_expect.erl
   Compiled src/meck_cover.erl
   Compiled src/meck_code.erl
   Compiled src/meck_code_gen.erl
   Compiled src/meck_proc.erl
   Compiled src/meck_args_matcher.erl
   Compiled src/meck.erl
   ==> folsom (compile)
   Compiled src/folsom_utils.erl
   Compiled src/folsom_sup.erl
   Compiled src/folsom_sample_slide_uniform.erl
   Compiled src/folsom_sample_uniform.erl
   Compiled src/folsom_sample_slide_sup.erl
   Compiled src/folsom_sample_slide_server.erl
   Compiled src/folsom_sample_slide_sorted.erl
   Compiled src/folsom_vm_metrics.erl
   Compiled src/folsom_sample_none.erl
   Compiled src/folsom_sample_slide.erl
   Compiled src/folsom_metrics_spiral.erl
   Compiled src/folsom_sample_exdec.erl
   Compiled src/folsom_sample.erl
   Compiled src/folsom_metrics_meter.erl
   Compiled src/folsom_metrics_history.erl
   Compiled src/folsom_metrics_meter_reader.erl
   Compiled src/folsom_metrics_histogram_ets.erl
   Compiled src/folsom_metrics_gauge.erl
   Compiled src/folsom_metrics_histogram.erl
   Compiled src/folsom_metrics_duration.erl
   Compiled src/folsom_metrics_counter.erl
   Compiled src/folsom_ewma.erl
   Compiled src/folsom_meter_timer_server.erl
   Compiled src/folsom.erl
   Compiled src/folsom_metrics.erl
   Compiled src/folsom_ets.erl
   ==> hyper (compile)
   Compiled src/hyper_register.erl
   Compiled src/hyper_carray.erl
   Compiled src/hyper_gb.erl
   Compiled src/hyper_const.erl
   Compiled src/hyper_array.erl
   Compiled src/hyper_binary_rle.erl
   
/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/src/hyper/src/hyper.erl:245: 
Warning: random:uniform/1: the 'random' module is deprecated; use the 'rand' 
module instead
   
/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/src/hyper/src/hyper.erl:288: 
Warning: random:seed/3: the 'random' module is deprecated; use the 'rand' 
module instead
   
/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/src/hyper/src/hyper.erl:333: 
Warning: random:seed/3: the 'random' module is deprecated; use the 'rand' 
module instead
   Compiled src/hyper.erl
   Compiled src/hyper_binary.erl
   Compiling c_src/hyper_carray.c
   ==> ibrowse (compile)
   
/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/src/ibrowse/src/ibrowse_lib.erl:372:
 Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in 
Erlang" chapter of the ERTS User's Guide for more information.
   Compiled src/ibrowse_lib.erl
   Compiled src/ibrowse_sup.erl
   Compiled src/ibrowse_socks5.erl
   Compiled src/ibrowse_lb.erl
   Compiled src/ibrowse_app.erl
   
/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/src/ibrowse/src/ibrowse_test.erl:83:
 Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in 
Erlang" chapter of the ERTS User's Guide for more information.
   
/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/src/ibrowse/src/ibrowse_test.erl:93:
 Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in 
Erlang" chapter of the ERTS User's Guide for more information.
   
/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/src/ibrowse/src/ibrowse_test.erl:171:
 Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in 
Erlang" chapter of the ERTS User's Guide for more information.
   
/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/src/ibrowse/src/ibrowse_test.erl:182:
 Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in 
Erlang" chapter of the ERTS User's Guide for more information.
   Compiled src/ibrowse_test.erl
   Compiled src/ibrowse.erl
   
/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/src/ibrowse/src/ibrowse_http_client.erl:428:
 Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in 
Erlang" chapter of the ERTS User's Guide for more information.
   
/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/src/ibrowse/src/ibrowse_http_client.erl:1831:
 Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in 
Erlang" chapter of the ERTS User's Guide for more information.
   Compiled src/ibrowse_http_client.erl
   ==> jiffy (compile)
   Compiling c_src/decoder.c
   Compiling c_src/encoder.c
   Compiling c_src/jiffy.c
   Compiling c_src/termstack.c
   Compiling c_src/utf8.c
   Compiling c_src/util.c
   Compiling c_src/doubles.cc
   Compiling c_src/objects.cc
   Compiling c_src/double-conversion/bignum-dtoa.cc
   Compiling c_src/double-conversion/bignum.cc
   Compiling c_src/double-conversion/cached-powers.cc
   Compiling c_src/double-conversion/diy-fp.cc
   Compiling c_src/double-conversion/double-conversion.cc
   Compiling c_src/double-conversion/fast-dtoa.cc
   Compiling c_src/double-conversion/fixed-dtoa.cc
   Compiling c_src/double-conversion/strtod.cc
   Compiled src/jiffy_utf8.erl
   Compiled src/jiffy.erl
   ==> mochiweb (compile)
   Compiled src/reloader.erl
   Compiled src/mochiweb_websocket.erl
   Compiled src/mochiweb_socket.erl
   Compiled src/mochiweb_util.erl
   Compiled src/mochiweb_session.erl
   Compiled src/mochiweb_socket_server.erl
   Compiled src/mochiweb_response.erl
   Compiled src/mochiweb_mime.erl
   Compiled src/mochiweb_multipart.erl
   Compiled src/mochiweb_io.erl
   Compiled src/mochiweb_http.erl
   Compiled src/mochiweb_request.erl
   Compiled src/mochiweb_echo.erl
   Compiled src/mochiweb_headers.erl
   Compiled src/mochiweb_cover.erl
   Compiled src/mochiweb_cookies.erl
   Compiled src/mochiweb_clock.erl
   Compiled src/mochiweb_base64url.erl
   Compiled src/mochiweb_acceptor.erl
   Compiled src/mochiweb.erl
   Compiled src/mochiweb_html.erl
   Compiled src/mochiutf8.erl
   Compiled src/mochitemp.erl
   Compiled src/mochinum.erl
   Compiled src/mochilogfile2.erl
   Compiled src/mochilists.erl
   Compiled src/mochijson.erl
   Compiled src/mochihex.erl
   Compiled src/mochiglobal.erl
   Compiled src/mochifmt_std.erl
   Compiled src/mochifmt_records.erl
   Compiled src/mochijson2.erl
   Compiled src/mochifmt.erl
   Compiled src/mochiweb_charref.erl
   ==> recon (compile)
   Compiled src/recon_map.erl
   Compiled src/recon_rec.erl
   Compiled src/recon_trace.erl
   Compiled src/recon_alloc.erl
   Compiled src/recon_lib.erl
   Compiled src/recon.erl
   ==> proper (compile)
   Compiled src/vararg.erl
   Compiled src/proper_target.erl
   Compiled src/proper_types.erl
   Compiled src/proper_unicode.erl
   Compiled src/proper_unused_imports_remover.erl
   Compiled src/proper_symb.erl
   Compiled src/proper_transformer.erl
   Compiled src/proper_shrink.erl
   Compiled src/proper_statem.erl
   Compiled src/proper_sets.erl
   Compiled src/proper_queue.erl
   Compiled src/proper_sa.erl
   Compiled src/proper_prop_remover.erl
   Compiled src/proper_orddict.erl
   Compiled src/proper_ordsets.erl
   Compiled src/proper_gen.erl
   Compiled src/proper_typeserver.erl
   Compiled src/proper_gb_trees.erl
   Compiled src/proper_gb_sets.erl
   Compiled src/proper_gen_next.erl
   Compiled src/proper_dict.erl
   Compiled src/proper_array.erl
   Compiled src/proper_fsm.erl
   Compiled src/proper_arith.erl
   Compiled src/proper.erl
   ==> couch_epi (compile)
   Compiled src/couch_epi_util.erl
   Compiled src/couch_epi_sup.erl
   Compiled src/couch_epi_plugin.erl
   Compiled src/couch_epi_module_keeper.erl
   Compiled src/couch_epi_functions.erl
   Compiled src/couch_epi_functions_gen.erl
   Compiled src/couch_epi_data_gen.erl
   Compiled src/couch_epi_data.erl
   Compiled src/couch_epi_codegen.erl
   Compiled src/couch_epi_app.erl
   Compiled src/couch_epi_codechange_monitor.erl
   Compiled src/couch_epi.erl
   ==> couch_log (compile)
   Compiled src/couch_log_writer.erl
   Compiled src/couch_log_writer_journald.erl
   Compiled src/couch_log_writer_stderr.erl
   Compiled src/couch_log_writer_syslog.erl
   Compiled src/couch_log_writer_file.erl
   Compiled src/couch_log_util.erl
   Compiled src/couch_log_sup.erl
   Compiled src/couch_log_server.erl
   Compiled src/couch_log_monitor.erl
   Compiled src/couch_log_trunc_io_fmt.erl
   Compiled src/couch_log_error_logger_h.erl
   Compiled src/couch_log_config_dyn.erl
   Compiled src/couch_log_trunc_io.erl
   Compiled src/couch_log_app.erl
   Compiled src/couch_log_config.erl
   Compiled src/couch_log.erl
   Compiled src/couch_log_formatter.erl
   ==> chttpd (compile)
   Compiled src/chttpd.erl
   Compiled src/chttpd_xframe_options.erl
   Compiled src/chttpd_sup.erl
   Compiled src/chttpd_view.erl
   Compiled src/chttpd_stats.erl
   Compiled src/chttpd_test_util.erl
   Compiled src/chttpd_prefer_header.erl
   Compiled src/chttpd_rewrite.erl
   Compiled src/chttpd_show.erl
   Compiled src/chttpd_plugin.erl
   Compiled src/chttpd_httpd_handlers.erl
   Compiled src/chttpd_handlers.erl
   Compiled src/chttpd_node.erl
   Compiled src/chttpd_misc.erl
   Compiled src/chttpd_epi.erl
   Compiled src/chttpd_external.erl
   Compiled src/chttpd_cors.erl
   Compiled src/chttpd_auth_request.erl
   Compiled src/chttpd_auth.erl
   Compiled src/chttpd_app.erl
   Compiled src/chttpd_auth_cache.erl
   Compiled src/chttpd_db.erl
   ==> couch (compile)
   Compiled src/couch_httpd.erl
   Compiled src/test_request.erl
   Compiled src/couch_work_queue.erl
   Compiled src/couch_uuids.erl
   Compiled src/couch_users_db.erl
   Compiled src/couch_totp.erl
   Compiled src/test_util.erl
   Compiled src/couch_util.erl
   Compiled src/couch_task_status.erl
   Compiled src/couch_sup.erl
   Compiled src/couch_secondary_sup.erl
   Compiled src/couch_rand.erl
   Compiled src/couch_stream.erl
   Compiled src/couch_proc_manager.erl
   Compiled src/couch_query_servers.erl
   Compiled src/couch_server.erl
   Compiled src/couch_primary_sup.erl
   Compiled src/couch_partition.erl
   Compiled src/couch_passwords.erl
   Compiled src/couch_os_process.erl
   Compiled src/couch_lru.erl
   Compiled src/couch_multidb_changes.erl
   Compiled src/couch_io_logger.erl
   Compiled src/couch_native_process.erl
   Compiled src/couch_httpd_vhost.erl
   Compiled src/couch_key_tree.erl
   Compiled src/couch_httpd_rewrite.erl
   Compiled src/couch_httpd_handlers.erl
   Compiled src/couch_httpd_multipart.erl
   Compiled src/couch_httpd_misc_handlers.erl
   Compiled src/couch_httpd_external.erl
   Compiled src/couch_hotp.erl
   Compiled src/couch_hash.erl
   Compiled src/couch_flags_config.erl
   Compiled src/couch_httpd_auth.erl
   Compiled src/couch_flags.erl
   Compiled src/couch_event_sup.erl
   Compiled src/couch_emsort.erl
   Compiled src/couch_ejson_size.erl
   Compiled src/couch_file.erl
   Compiled src/couch_httpd_db.erl
   Compiled src/couch_ejson_compare.erl
   Compiled src/couch_drv.erl
   Compiled src/couch_debug.erl
   Compiled src/couch_doc.erl
   Compiled src/couch_db_split.erl
   Compiled src/couch_db_plugin.erl
   Compiled src/couch_db_epi.erl
   Compiled src/couch_db_header.erl
   Compiled src/couch_db_updater.erl
   Compiled src/couch_compress.erl
   Compiled src/couch_db_engine.erl
   Compiled src/couch_changes.erl
   Compiled src/couch_bt_engine_stream.erl
   Compiled src/couch_bt_engine_header.erl
   Compiled src/couch_db.erl
   Compiled src/couch_btree.erl
   Compiled src/couch_base32.erl
   Compiled src/couch_bt_engine_compactor.erl
   Compiled src/couch_auth_cache.erl
   Compiled src/couch_att.erl
   Compiled src/couch_bt_engine.erl
   Compiled src/couch.erl
   Compiled src/couch_app.erl
   Compiling priv/couch_js/60/http.cpp
   Compiling priv/couch_js/60/main.cpp
   Compiling priv/couch_js/60/util.cpp
   Compiling priv/icu_driver/couch_icu_driver.c
   Compiling priv/couch_ejson_compare/couch_ejson_compare.c
   ==> couch_event (compile)
   Compiled src/couch_event_listener.erl
   Compiled src/couch_event_sup2.erl
   Compiled src/couch_event_os_listener.erl
   Compiled src/couch_event_app.erl
   Compiled src/couch_event.erl
   Compiled src/couch_event_server.erl
   Compiled src/couch_event_listener_mfa.erl
   ==> mem3 (compile)
   Compiled src/mem3_sync_nodes.erl
   Compiled src/mem3_sync_security.erl
   Compiled src/mem3_sync_event.erl
   Compiled src/mem3_sync_event_listener.erl
   Compiled src/mem3_sup.erl
   Compiled src/mem3_sync.erl
   Compiled src/mem3_util.erl
   Compiled src/mem3_seeds.erl
   Compiled src/mem3_reshard_validate.erl
   Compiled src/mem3_reshard_sup.erl
   Compiled src/mem3_shards.erl
   Compiled src/mem3_rpc.erl
   Compiled src/mem3_reshard_job_sup.erl
   Compiled src/mem3_reshard_store.erl
   Compiled src/mem3_reshard_index.erl
   Compiled src/mem3_reshard_httpd.erl
   Compiled src/mem3_reshard_job.erl
   Compiled src/mem3_reshard_api.erl
   Compiled src/mem3_reshard_dbdoc.erl
   Compiled src/mem3_plugin_couch_db.erl
   Compiled src/mem3_nodes.erl
   Compiled src/mem3_httpd_handlers.erl
   Compiled src/mem3_reshard.erl
   Compiled src/mem3_hash.erl
   Compiled src/mem3_epi.erl
   Compiled src/mem3_httpd.erl
   Compiled src/mem3_rep.erl
   Compiled src/mem3_app.erl
   Compiled src/mem3_cluster.erl
   Compiled src/mem3.erl
   ==> couch_index (compile)
   Compiled src/couch_index_sup.erl
   Compiled src/couch_index_util.erl
   Compiled src/couch_index_plugin_couch_db.erl
   Compiled src/couch_index_updater.erl
   Compiled src/couch_index_epi.erl
   Compiled src/couch_index_plugin.erl
   Compiled src/couch_index_app.erl
   Compiled src/couch_index_server.erl
   Compiled src/couch_index_compactor.erl
   Compiled src/couch_index.erl
   ==> couch_mrview (compile)
   Compiled src/couch_mrview_update_notifier.erl
   Compiled src/couch_mrview_updater.erl
   Compiled src/couch_mrview_test_util.erl
   Compiled src/couch_mrview_show.erl
   Compiled src/couch_mrview_util.erl
   Compiled src/couch_mrview_index.erl
   Compiled src/couch_mrview_compactor.erl
   Compiled src/couch_mrview_cleanup.erl
   Compiled src/couch_mrview_http.erl
   Compiled src/couch_mrview.erl
   ==> couch_replicator (compile)
   Compiled src/couch_replicator_httpc.erl
   Compiled src/couch_replicator_auth.erl
   Compiled src/couch_replicator_utils.erl
   Compiled src/couch_replicator_sup.erl
   Compiled src/couch_replicator_stats.erl
   Compiled src/couch_replicator_scheduler_sup.erl
   Compiled src/json_stream_parse.erl
   Compiled src/couch_replicator_worker.erl
   Compiled src/couch_replicator_rate_limiter_tables.erl
   Compiled src/couch_replicator_rate_limiter.erl
   Compiled src/couch_replicator_notifier.erl
   Compiled src/couch_replicator_job_sup.erl
   Compiled src/couch_replicator_scheduler_job.erl
   Compiled src/couch_replicator_scheduler.erl
   Compiled src/couch_replicator_ids.erl
   Compiled src/couch_replicator_httpd_util.erl
   Compiled src/couch_replicator_httpd.erl
   Compiled src/couch_replicator_httpc_pool.erl
   Compiled src/couch_replicator_filters.erl
   Compiled src/couch_replicator_fabric_rpc.erl
   Compiled src/couch_replicator_doc_processor_worker.erl
   Compiled src/couch_replicator_fabric.erl
   Compiled src/couch_replicator_db_changes.erl
   Compiled src/couch_replicator_connection.erl
   Compiled src/couch_replicator_docs.erl
   Compiled src/couch_replicator_changes_reader.erl
   Compiled src/couch_replicator_doc_processor.erl
   Compiled src/couch_replicator_clustering.erl
   Compiled src/couch_replicator_app.erl
   Compiled src/couch_replicator_auth_noop.erl
   Compiled src/couch_replicator_auth_session.erl
   Compiled src/couch_replicator.erl
   Compiled src/couch_replicator_api_wrap.erl
   ==> couch_plugins (compile)
   Compiled src/couch_plugins_httpd.erl
   Compiled src/couch_plugins.erl
   ==> couch_pse_tests (compile)
   Compiled src/cpse_test_ref_counting.erl
   Compiled src/cpse_util.erl
   Compiled src/cpse_test_read_write_docs.erl
   
/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/src/couch_pse_tests/src/cpse_test_purge_seqs.erl:14:
 Warning: export_all flag enabled - all functions will be exported
   Compiled src/cpse_test_purge_seqs.erl
   Compiled src/cpse_test_purge_replication.erl
   Compiled src/cpse_test_purge_docs.erl
   Compiled src/cpse_test_open_close_delete.erl
   Compiled src/cpse_test_purge_bad_checkpoints.erl
   Compiled src/cpse_test_get_set_props.erl
   Compiled src/cpse_test_fold_purge_infos.erl
   Compiled src/cpse_test_fold_changes.erl
   Compiled src/cpse_test_fold_docs.erl
   Compiled src/cpse_test_copy_purge_infos.erl
   Compiled src/cpse_gather.erl
   Compiled src/cpse_test_attachments.erl
   Compiled src/cpse_test_compaction.erl
   ==> couch_stats (compile)
   Compiled src/couch_stats_sup.erl
   Compiled src/couch_stats_app.erl
   Compiled src/couch_stats_process_tracker.erl
   Compiled src/couch_stats.erl
   Compiled src/couch_stats_httpd.erl
   Compiled src/couch_stats_aggregator.erl
   ==> couch_peruser (compile)
   Compiled src/couch_peruser_app.erl
   Compiled src/couch_peruser_sup.erl
   Compiled src/couch_peruser.erl
   ==> couch_tests (compile)
   Compiled setups/couch_epi_dispatch.erl
   Compiled src/couch_tests_combinatorics.erl
   Compiled src/couch_tests.erl
   ==> ddoc_cache (compile)
   Compiled src/ddoc_cache_value.erl
   Compiled src/ddoc_cache_sup.erl
   Compiled src/ddoc_cache_opener.erl
   Compiled src/ddoc_cache_entry_validation_funs.erl
   Compiled src/ddoc_cache_entry_ddocid_rev.erl
   Compiled src/ddoc_cache_entry_ddocid.erl
   Compiled src/ddoc_cache_entry_custom.erl
   Compiled src/ddoc_cache_app.erl
   Compiled src/ddoc_cache_lru.erl
   Compiled src/ddoc_cache.erl
   Compiled src/ddoc_cache_entry.erl
   ==> dreyfus (compile)
   Compiled src/dreyfus_sup.erl
   Compiled src/dreyfus_plugin_couch_db.erl
   Compiled src/dreyfus_rpc.erl
   Compiled src/dreyfus_index_updater.erl
   Compiled src/dreyfus_util.erl
   Compiled src/dreyfus_index_manager.erl
   Compiled src/dreyfus_httpd_handlers.erl
   Compiled src/dreyfus_index.erl
   Compiled src/dreyfus_fabric_search.erl
   Compiled src/dreyfus_fabric_info.erl
   Compiled src/dreyfus_httpd.erl
   Compiled src/dreyfus_fabric_group2.erl
   Compiled src/dreyfus_fabric_cleanup.erl
   Compiled src/dreyfus_fabric_group1.erl
   Compiled src/dreyfus_epi.erl
   Compiled src/dreyfus_config.erl
   Compiled src/dreyfus_app.erl
   Compiled src/dreyfus_fabric.erl
   Compiled src/dreyfus_bookmark.erl
   Compiled src/clouseau_rpc.erl
   ==> fabric (compile)
   Compiled src/fabric_db_update_listener.erl
   Compiled src/fabric_view_reduce.erl
   Compiled src/fabric_view_map.erl
   Compiled src/fabric_view_all_docs.erl
   Compiled src/fabric_view_changes.erl
   Compiled src/fabric_view.erl
   Compiled src/fabric_streams.erl
   Compiled src/fabric_util.erl
   Compiled src/fabric_rpc.erl
   Compiled src/fabric_ring.erl
   Compiled src/fabric_group_info.erl
   Compiled src/fabric_doc_update.erl
   Compiled src/fabric_doc_purge.erl
   Compiled src/fabric_doc_missing_revs.erl
   Compiled src/fabric_doc_open_revs.erl
   Compiled src/fabric_doc_atts.erl
   Compiled src/fabric_doc_open.erl
   Compiled src/fabric_dict.erl
   Compiled src/fabric_doc_attachments.erl
   Compiled src/fabric_design_doc_count.erl
   Compiled src/fabric_db_partition_info.erl
   Compiled src/fabric_db_meta.erl
   Compiled src/fabric_db_doc_count.erl
   Compiled src/fabric_db_info.erl
   Compiled src/fabric_db_delete.erl
   Compiled src/fabric_db_create.erl
   Compiled src/fabric.erl
   ==> global_changes (compile)
   Compiled src/global_changes_sup.erl
   Compiled src/global_changes_util.erl
   Compiled src/global_changes_plugin.erl
   Compiled src/global_changes_httpd_handlers.erl
   Compiled src/global_changes_listener.erl
   Compiled src/global_changes_server.erl
   Compiled src/global_changes_epi.erl
   Compiled src/global_changes_app.erl
   Compiled src/global_changes_httpd.erl
   ==> ioq (compile)
   Compiled src/ioq_app.erl
   Compiled src/ioq_sup.erl
   Compiled src/ioq.erl
   ==> jwtf (compile)
   Compiled src/jwtf_app.erl
   Compiled src/jwtf_sup.erl
   Compiled src/jwtf.erl
   Compiled src/jwtf_keystore.erl
   ==> ken (compile)
   Compiled src/ken_sup.erl
   Compiled src/ken_event_handler.erl
   Compiled src/ken_app.erl
   Compiled src/ken.erl
   Compiled src/ken_server.erl
   ==> mango (compile)
   Compiled src/mango_sup.erl
   Compiled src/mango_sort.erl
   Compiled src/mango_util.erl
   Compiled src/mango_selector_text.erl
   Compiled src/mango_selector.erl
   Compiled src/mango_opts.erl
   Compiled src/mango_json.erl
   Compiled src/mango_json_bookmark.erl
   Compiled src/mango_native_proc.erl
   Compiled src/mango_idx_special.erl
   Compiled src/mango_idx_text.erl
   Compiled src/mango_httpd_handlers.erl
   Compiled src/mango_idx_view.erl
   Compiled src/mango_fields.erl
   Compiled src/mango_execution_stats.erl
   Compiled src/mango_idx.erl
   Compiled src/mango_epi.erl
   Compiled src/mango_httpd.erl
   Compiled src/mango_error.erl
   Compiled src/mango_doc.erl
   Compiled src/mango_cursor_text.erl
   Compiled src/mango_cursor_special.erl
   Compiled src/mango_cursor.erl
   Compiled src/mango_app.erl
   Compiled src/mango_crud.erl
   Compiled src/mango_cursor_view.erl
   ==> rexi (compile)
   Compiled src/rexi_server_sup.erl
   Compiled src/rexi_sup.erl
   Compiled src/rexi_utils.erl
   Compiled src/rexi_server_mon.erl
   Compiled src/rexi_monitor.erl
   Compiled src/rexi_app.erl
   Compiled src/rexi_server.erl
   Compiled src/rexi_buffer.erl
   Compiled src/rexi.erl
   ==> setup (compile)
   Compiled src/setup_sup.erl
   Compiled src/setup_httpd_handlers.erl
   Compiled src/setup_app.erl
   Compiled src/setup_epi.erl
   Compiled src/setup_httpd.erl
   Compiled src/setup.erl
   ==> smoosh (compile)
   Compiled src/smoosh_sup.erl
   Compiled src/smoosh_utils.erl
   Compiled src/smoosh_priority_queue.erl
   Compiled src/smoosh_app.erl
   Compiled src/smoosh_channel.erl
   Compiled src/smoosh_server.erl
   Compiled src/smoosh.erl
   ==> rel (compile)
   ==> apache-couchdb-3.1.1-6c2d01a (compile)
   Installing CouchDB into rel/couchdb/ ...
   ==> rel (generate)
   WARN:  'generate' command does not apply to directory 
/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a
   ... done
   
       You can now copy the rel/couchdb directory anywhere on your system.
       Start CouchDB with ./bin/couchdb from within that directory.
   
   make[3]: Leaving directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   rm -rf rel/couchdb/var/log
   rm -rf rel/couchdb/data
   make[2]: Leaving directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   make[1]: Leaving directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
    debian/rules binary
   make[1]: Entering directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   dh binary --with=systemd
      dh_testroot
      dh_prep
      dh_installdirs
      dh_install
      dh_installdocs
      dh_installchangelogs
      dh_installman
      dh_installdebconf
      dh_systemd_enable
      dh_installinit
      dh_systemd_start
      dh_installlogrotate
      dh_lintian
      dh_perl
      dh_link
      dh_strip_nondeterminism
      dh_compress
      dh_fixperms
      dh_missing
      dh_strip
      dh_makeshlibs
      debian/rules override_dh_shlibdeps
   make[2]: Entering directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   dh_shlibdeps -- --ignore-missing-info -xlibmozjs185-1.0
   objdump: 
debian/couchdb/opt/couchdb/lib/crypto-4.2.2.4/priv/obj/otp_test_engine.o: not a 
dynamic object
   objdump: 
debian/couchdb/opt/couchdb/lib/crypto-4.2.2.4/priv/obj/otp_test_engine.o: 
invalid operation
   dpkg-shlibdeps: warning: couldn't parse dynamic symbol definition: no symbols
   objdump: 
debian/couchdb/opt/couchdb/lib/crypto-4.2.2.4/priv/obj/crypto_callback.o: not a 
dynamic object
   objdump: 
debian/couchdb/opt/couchdb/lib/crypto-4.2.2.4/priv/obj/crypto_callback.o: 
invalid operation
   dpkg-shlibdeps: warning: couldn't parse dynamic symbol definition: no symbols
   objdump: debian/couchdb/opt/couchdb/lib/crypto-4.2.2.4/priv/obj/crypto.o: 
not a dynamic object
   objdump: debian/couchdb/opt/couchdb/lib/crypto-4.2.2.4/priv/obj/crypto.o: 
invalid operation
   dpkg-shlibdeps: warning: couldn't parse dynamic symbol definition: no symbols
   dpkg-shlibdeps: warning: package could avoid a useless dependency if 
debian/couchdb/opt/couchdb/lib/couch-3.1.1-6c2d01a/priv/couch_ejson_compare.so 
debian/couchdb/opt/couchdb/lib/couch-3.1.1-6c2d01a/priv/couch_icu_driver.so 
were not linked against libicudata.so.63 (they use none of the library's 
symbols)
   make[2]: Leaving directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
      dh_installdeb
      dh_gencontrol
      dh_md5sums
      debian/rules override_dh_builddeb
   make[2]: Entering directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   dh_builddeb -- -Zgzip
   dpkg-deb: building package 'couchdb-dbgsym' in 
'../couchdb-dbgsym_3.1.1-6c2d01a~buster_amd64.deb'.
   dpkg-deb: building package 'couchdb' in 
'../couchdb_3.1.1-6c2d01a~buster_amd64.deb'.
   make[2]: Leaving directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
   make[1]: Leaving directory 
'/home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a'
    dpkg-genbuildinfo --build=binary
    dpkg-genchanges --build=binary 
>../couchdb_3.1.1-6c2d01a~buster_amd64.changes
   dpkg-genchanges: info: binary-only upload (no source code included)
    dpkg-source --after-build .
   dpkg-source: info: using options from 
apache-couchdb-3.1.1-6c2d01a/debian/source/options: --compression=bzip2 
--compression-level=9
   dpkg-buildpackage: info: binary-only upload (no source included)
   cd /home/jenkins/couchdb/apache-couchdb-3.1.1-6c2d01a/.. && lintian 
--profile couchdb couch*.deb || true
   warning: the authors of lintian do not recommend running it with root 
privileges!
   W: couchdb: maintainer-script-should-not-use-recursive-chown-or-chmod 
postinst:207
   N: 3 tags overridden (2 errors, 1 info); 2 unused overrides
   chmod a+rwx ../couchdb/couchdb*
   mkdir -p pkgs/couch/debian-buster && chmod 777 pkgs/couch/debian-buster
   cp ../couchdb/couchdb* pkgs/couch/debian-buster
   if [ -f debian/control.bak ]; then mv -f debian/control.bak debian/control; 
fi
   if [ -f rpm/SPECS/couchdb.spec.bak ]; then mv -f rpm/SPECS/couchdb.spec.bak 
rpm/SPECS/couchdb.spec; fi
   rm -rf parts prime stage js/build debian/sm_ver.mk
   
   # packages were created
   $ ls -lah pkgs/couch/debian-buster/
   total 30M
   drwxrwxrwx 2 root root  207 Aug 31 01:58 .
   drwxrwxrwx 3 root root   45 Aug 31 01:58 ..
   -rwxr-xr-x 1 root root  11K Aug 31 01:58 
couchdb_3.1.1-6c2d01a~buster_amd64.buildinfo
   -rwxr-xr-x 1 root root 1.5K Aug 31 01:58 
couchdb_3.1.1-6c2d01a~buster_amd64.changes
   -rwxr-xr-x 1 root root  30M Aug 31 01:58 
couchdb_3.1.1-6c2d01a~buster_amd64.deb
   -rwxr-xr-x 1 root root 474K Aug 31 01:58 
couchdb-dbgsym_3.1.1-6c2d01a~buster_amd64.deb
   
   ```
   
   Next use https://github.com/apache/couchdb-docker/tree/main/3.1.1 to produce 
the container images, but adjust them to include the custom couchdb version.
   
   ```bash
   $ git clone https://github.com/apache/couchdb-docker.git
   Cloning into 'couchdb-docker'...
   remote: Enumerating objects: 1010, done.
   remote: Counting objects: 100% (118/118), done.
   remote: Compressing objects: 100% (82/82), done.
   remote: Total 1010 (delta 64), reused 64 (delta 32), pack-reused 892
   Receiving objects: 100% (1010/1010), 248.11 KiB | 1.19 MiB/s, done.
   Resolving deltas: 100% (490/490), done.
   $ cd ~/couchdb-docker/3.1.1
   $ cp -r ~/couchdb-pkg/pkgs/couch/debian-buster/ .
   $ ls debian-buster/
   couchdb_3.1.1-6c2d01a~buster_amd64.buildinfo  
couchdb_3.1.1-6c2d01a~buster_amd64.changes  
couchdb_3.1.1-6c2d01a~buster_amd64.deb  
couchdb-dbgsym_3.1.1-6c2d01a~buster_amd64.deb
   
   $ git diff
   diff --git a/3.1.1/Dockerfile b/3.1.1/Dockerfile
   index 75b4b29..59a90d9 100644
   --- a/3.1.1/Dockerfile
   +++ b/3.1.1/Dockerfile
   @@ -60,6 +60,10 @@ RUN . /etc/os-release; \
        echo "deb [signed-by=/usr/share/keyrings/couchdb-archive-keyring.gpg] 
https://apache.jfrog.io/artifactory/couchdb-deb/ ${VERSION_CODENAME} main" | \
            tee /etc/apt/sources.list.d/couchdb.list >/dev/null
    
   +# I know, we should not include deb packages in images, but it should be 
good enough to validate the fix
   +COPY debian-buster/couchdb_3.1.1-6c2d01a~buster_amd64.deb /tmp/packages/
   +COPY debian-buster/couchdb-dbgsym_3.1.1-6c2d01a~buster_amd64.deb 
/tmp/packages/
   +
    # https://github.com/apache/couchdb-pkg/blob/master/debian/README.Debian
    RUN set -eux; \
        apt-get update; \
   @@ -67,7 +71,7 @@ RUN set -eux; \
        echo "couchdb couchdb/mode select none" | debconf-set-selections; \
    # we DO want recommends this time
        DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-downgrades 
--allow-remove-essential --allow-change-held-packages \
   -            couchdb="$COUCHDB_VERSION"~buster \
   +    /tmp/packages/* \
        ; \
    # Undo symlinks to /var/log and /var/lib
        rmdir /var/lib/couchdb /var/log/couchdb; \
   
   docker build -t "couchdb:3.1.1-patch-jan" .
   Sending build context to Docker daemon  31.45MB
   Step 1/20 : FROM debian:buster-slim
    ---> 5c3d57f3e47a
   Step 2/20 : LABEL maintainer="CouchDB Developers [email protected]"
    ---> Using cache
    ---> 60f37c14a0e1
   Step 3/20 : RUN groupadd -g 5984 -r couchdb && useradd -u 5984 -d 
/opt/couchdb -g couchdb couchdb
    ---> Using cache
    ---> 78202346b500
   Step 4/20 : RUN set -ex;     apt-get update;     apt-get install -y 
--no-install-recommends         apt-transport-https         ca-certificates     
    dirmngr         gnupg      ;     rm -rf /var/lib/apt/lists/*
    ---> Using cache
    ---> fad0f8a736e0
   Step 5/20 : RUN set -eux;     apt-get update;     apt-get install -y 
--no-install-recommends gosu tini;     rm -rf /var/lib/apt/lists/*;     gosu 
nobody true;     tini --version
    ---> Using cache
    ---> aca1db0792a3
   Step 6/20 : ENV GPG_COUCH_KEY     390EF70BB1EA12B2773962950EE62FB37A00258D
    ---> Using cache
    ---> d28f3c244c10
   Step 7/20 : RUN set -eux;     apt-get update;     apt-get install -y curl;   
  export GNUPGHOME="$(mktemp -d)";     curl -fL -o keys.asc 
https://couchdb.apache.org/repo/keys.asc;     gpg --batch --import keys.asc;    
 gpg --batch --export "${GPG_COUCH_KEY}" > 
/usr/share/keyrings/couchdb-archive-keyring.gpg;     command -v gpgconf && 
gpgconf --kill all || :;     rm -rf "$GNUPGHOME";     apt-key list;     apt 
purge -y --autoremove curl;     rm -rf /var/lib/apt/lists/*
    ---> Using cache
    ---> e2949d6cc031
   Step 8/20 : ENV COUCHDB_VERSION 3.1.1
    ---> Using cache
    ---> baa8089d1bea
   Step 9/20 : RUN . /etc/os-release;     echo "deb 
[signed-by=/usr/share/keyrings/couchdb-archive-keyring.gpg] 
https://apache.jfrog.io/artifactory/couchdb-deb/ ${VERSION_CODENAME} main" |    
     tee /etc/apt/sources.list.d/couchdb.list >/dev/null
    ---> Using cache
    ---> a7933b88e802
   Step 10/20 : COPY debian-buster/couchdb_3.1.1-6c2d01a~buster_amd64.deb 
/tmp/packages/
    ---> Using cache
    ---> ded52d34b729
   Step 11/20 : COPY 
debian-buster/couchdb-dbgsym_3.1.1-6c2d01a~buster_amd64.deb /tmp/packages/
    ---> Using cache
    ---> eb9b215cb430
   Step 12/20 : RUN set -eux;     apt-get update;         echo "couchdb 
couchdb/mode select none" | debconf-set-selections;     
DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-downgrades 
--allow-remove-essential --allow-change-held-packages     /tmp/packages/*     ; 
    rmdir /var/lib/couchdb /var/log/couchdb;     rm /opt/couchdb/data 
/opt/couchdb/var/log;     mkdir -p /opt/couchdb/data /opt/couchdb/var/log;     
chown couchdb:couchdb /opt/couchdb/data /opt/couchdb/var/log;     chmod 777 
/opt/couchdb/data /opt/couchdb/var/log;     rm 
/opt/couchdb/etc/default.d/10-filelog.ini;     find /opt/couchdb \! \( -user 
couchdb -group couchdb \) -exec chown -f couchdb:couchdb '{}' +;     find 
/opt/couchdb/etc -type d ! -perm 0755 -exec chmod -f 0755 '{}' +;     find 
/opt/couchdb/etc -type f ! -perm 0644 -exec chmod -f 0644 '{}' +;     chmod -f 
0777 /opt/couchdb/etc/local.d;     rm -rf /var/lib/apt/lists/*;
    ---> Running in 6f530f886258
   + apt-get update
   Get:1 http://security.debian.org/debian-security buster/updates InRelease 
[65.4 kB]
   Get:2 http://deb.debian.org/debian buster InRelease [122 kB]
   Get:3 http://deb.debian.org/debian buster-updates InRelease [51.9 kB]
   Get:4 http://security.debian.org/debian-security buster/updates/main amd64 
Packages [302 kB]
   Get:5 http://deb.debian.org/debian buster/main amd64 Packages [7907 kB]
   Get:6 https://apache.jfrog.io/artifactory/couchdb-deb buster InRelease [5151 
B]
   Get:7 https://apache.jfrog.io/artifactory/couchdb-deb buster/main amd64 
Packages [3889 B]
   Get:8 http://deb.debian.org/debian buster-updates/main amd64 Packages [15.2 
kB]
   Fetched 8473 kB in 3s (3017 kB/s)
   Reading package lists...
   + echo couchdb couchdb/mode select none
   + debconf-set-selections
   + DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-downgrades 
--allow-remove-essential --allow-change-held-packages 
/tmp/packages/couchdb-dbgsym_3.1.1-6c2d01a~buster_amd64.deb 
/tmp/packages/couchdb_3.1.1-6c2d01a~buster_amd64.deb
   Reading package lists...
   Building dependency tree...
   Reading state information...
   The following additional packages will be installed:
     curl krb5-locales libcurl4 libgpm2 libgssapi-krb5-2 libicu63 libk5crypto3
     libkeyutils1 libkrb5-3 libkrb5support0 libmozjs-60-0 libncurses6
     libnghttp2-14 libprocps7 libpsl5 librtmp1 libssh2-1 procps psmisc
     publicsuffix
   Suggested packages:
     gpm krb5-doc krb5-user
   The following NEW packages will be installed:
     couchdb couchdb-dbgsym curl krb5-locales libcurl4 libgpm2 libgssapi-krb5-2
     libicu63 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libmozjs-60-0
     libncurses6 libnghttp2-14 libprocps7 libpsl5 librtmp1 libssh2-1 procps
     psmisc publicsuffix
   0 upgraded, 22 newly installed, 0 to remove and 0 not upgraded.
   Need to get 13.5 MB/45.0 MB of archives.
   After this operation, 104 MB of additional disk space will be used.
   Get:1 http://security.debian.org/debian-security buster/updates/main amd64 
krb5-locales all 1.17-3+deb10u2 [95.5 kB]
   Get:2 http://deb.debian.org/debian buster/main amd64 libncurses6 amd64 
6.1+20181013-2+deb10u2 [102 kB]
   Get:3 http://security.debian.org/debian-security buster/updates/main amd64 
libkrb5support0 amd64 1.17-3+deb10u2 [65.7 kB]
   Get:4 http://security.debian.org/debian-security buster/updates/main amd64 
libk5crypto3 amd64 1.17-3+deb10u2 [122 kB]
   Get:5 http://security.debian.org/debian-security buster/updates/main amd64 
libkrb5-3 amd64 1.17-3+deb10u2 [369 kB]
   Get:6 http://security.debian.org/debian-security buster/updates/main amd64 
libgssapi-krb5-2 amd64 1.17-3+deb10u2 [158 kB]
   Get:7 http://deb.debian.org/debian buster/main amd64 libprocps7 amd64 
2:3.3.15-2 [61.7 kB]
   Get:8 http://deb.debian.org/debian buster/main amd64 procps amd64 2:3.3.15-2 
[259 kB]
   Get:9 http://deb.debian.org/debian buster/main amd64 libkeyutils1 amd64 
1.6-6 [15.0 kB]
   Get:10 http://deb.debian.org/debian buster/main amd64 libnghttp2-14 amd64 
1.36.0-2+deb10u1 [85.0 kB]
   Get:11 /tmp/packages/couchdb_3.1.1-6c2d01a~buster_amd64.deb couchdb amd64 
3.1.1-6c2d01a~buster [30.9 MB]
   Get:12 /tmp/packages/couchdb-dbgsym_3.1.1-6c2d01a~buster_amd64.deb 
couchdb-dbgsym amd64 3.1.1-6c2d01a~buster [485 kB]
   Get:13 http://deb.debian.org/debian buster/main amd64 libpsl5 amd64 0.20.2-2 
[53.7 kB]
   Get:14 http://deb.debian.org/debian buster/main amd64 librtmp1 amd64 
2.4+20151223.gitfa8646d.1-2 [60.5 kB]
   Get:15 http://deb.debian.org/debian buster/main amd64 libssh2-1 amd64 
1.8.0-2.1 [140 kB]
   Get:16 http://deb.debian.org/debian buster/main amd64 libcurl4 amd64 
7.64.0-4+deb10u2 [332 kB]
   Get:17 http://deb.debian.org/debian buster/main amd64 curl amd64 
7.64.0-4+deb10u2 [265 kB]
   Get:18 http://deb.debian.org/debian buster/main amd64 libicu63 amd64 
63.1-6+deb10u1 [8300 kB]
   Get:19 http://deb.debian.org/debian buster/main amd64 libmozjs-60-0 amd64 
60.2.3-3 [2785 kB]
   Get:20 http://deb.debian.org/debian buster/main amd64 libgpm2 amd64 1.20.7-5 
[35.1 kB]
   Get:21 http://deb.debian.org/debian buster/main amd64 psmisc amd64 23.2-1 
[126 kB]
   Get:22 http://deb.debian.org/debian buster/main amd64 publicsuffix all 
20190415.1030-1 [116 kB]
   debconf: delaying package configuration, since apt-utils is not installed
   Fetched 13.5 MB in 1s (12.8 MB/s)
   Selecting previously unselected package libncurses6:amd64.
   (Reading database ... 7118 files and directories currently installed.)
   Preparing to unpack .../00-libncurses6_6.1+20181013-2+deb10u2_amd64.deb ...
   Unpacking libncurses6:amd64 (6.1+20181013-2+deb10u2) ...
   Selecting previously unselected package libprocps7:amd64.
   Preparing to unpack .../01-libprocps7_2%3a3.3.15-2_amd64.deb ...
   Unpacking libprocps7:amd64 (2:3.3.15-2) ...
   Selecting previously unselected package procps.
   Preparing to unpack .../02-procps_2%3a3.3.15-2_amd64.deb ...
   Unpacking procps (2:3.3.15-2) ...
   Selecting previously unselected package krb5-locales.
   Preparing to unpack .../03-krb5-locales_1.17-3+deb10u2_all.deb ...
   Unpacking krb5-locales (1.17-3+deb10u2) ...
   Selecting previously unselected package libkeyutils1:amd64.
   Preparing to unpack .../04-libkeyutils1_1.6-6_amd64.deb ...
   Unpacking libkeyutils1:amd64 (1.6-6) ...
   Selecting previously unselected package libkrb5support0:amd64.
   Preparing to unpack .../05-libkrb5support0_1.17-3+deb10u2_amd64.deb ...
   Unpacking libkrb5support0:amd64 (1.17-3+deb10u2) ...
   Selecting previously unselected package libk5crypto3:amd64.
   Preparing to unpack .../06-libk5crypto3_1.17-3+deb10u2_amd64.deb ...
   Unpacking libk5crypto3:amd64 (1.17-3+deb10u2) ...
   Selecting previously unselected package libkrb5-3:amd64.
   Preparing to unpack .../07-libkrb5-3_1.17-3+deb10u2_amd64.deb ...
   Unpacking libkrb5-3:amd64 (1.17-3+deb10u2) ...
   Selecting previously unselected package libgssapi-krb5-2:amd64.
   Preparing to unpack .../08-libgssapi-krb5-2_1.17-3+deb10u2_amd64.deb ...
   Unpacking libgssapi-krb5-2:amd64 (1.17-3+deb10u2) ...
   Selecting previously unselected package libnghttp2-14:amd64.
   Preparing to unpack .../09-libnghttp2-14_1.36.0-2+deb10u1_amd64.deb ...
   Unpacking libnghttp2-14:amd64 (1.36.0-2+deb10u1) ...
   Selecting previously unselected package libpsl5:amd64.
   Preparing to unpack .../10-libpsl5_0.20.2-2_amd64.deb ...
   Unpacking libpsl5:amd64 (0.20.2-2) ...
   Selecting previously unselected package librtmp1:amd64.
   Preparing to unpack .../11-librtmp1_2.4+20151223.gitfa8646d.1-2_amd64.deb ...
   Unpacking librtmp1:amd64 (2.4+20151223.gitfa8646d.1-2) ...
   Selecting previously unselected package libssh2-1:amd64.
   Preparing to unpack .../12-libssh2-1_1.8.0-2.1_amd64.deb ...
   Unpacking libssh2-1:amd64 (1.8.0-2.1) ...
   Selecting previously unselected package libcurl4:amd64.
   Preparing to unpack .../13-libcurl4_7.64.0-4+deb10u2_amd64.deb ...
   Unpacking libcurl4:amd64 (7.64.0-4+deb10u2) ...
   Selecting previously unselected package curl.
   Preparing to unpack .../14-curl_7.64.0-4+deb10u2_amd64.deb ...
   Unpacking curl (7.64.0-4+deb10u2) ...
   Selecting previously unselected package libicu63:amd64.
   Preparing to unpack .../15-libicu63_63.1-6+deb10u1_amd64.deb ...
   Unpacking libicu63:amd64 (63.1-6+deb10u1) ...
   Selecting previously unselected package libmozjs-60-0:amd64.
   Preparing to unpack .../16-libmozjs-60-0_60.2.3-3_amd64.deb ...
   Unpacking libmozjs-60-0:amd64 (60.2.3-3) ...
   Selecting previously unselected package couchdb.
   Preparing to unpack .../17-couchdb_3.1.1-6c2d01a~buster_amd64.deb ...
   Unpacking couchdb (3.1.1-6c2d01a~buster) ...
   Selecting previously unselected package couchdb-dbgsym.
   Preparing to unpack .../18-couchdb-dbgsym_3.1.1-6c2d01a~buster_amd64.deb ...
   Unpacking couchdb-dbgsym (3.1.1-6c2d01a~buster) ...
   Selecting previously unselected package libgpm2:amd64.
   Preparing to unpack .../19-libgpm2_1.20.7-5_amd64.deb ...
   Unpacking libgpm2:amd64 (1.20.7-5) ...
   Selecting previously unselected package psmisc.
   Preparing to unpack .../20-psmisc_23.2-1_amd64.deb ...
   Unpacking psmisc (23.2-1) ...
   Selecting previously unselected package publicsuffix.
   Preparing to unpack .../21-publicsuffix_20190415.1030-1_all.deb ...
   Unpacking publicsuffix (20190415.1030-1) ...
   Setting up libkeyutils1:amd64 (1.6-6) ...
   Setting up libpsl5:amd64 (0.20.2-2) ...
   Setting up libgpm2:amd64 (1.20.7-5) ...
   Setting up psmisc (23.2-1) ...
   Setting up libprocps7:amd64 (2:3.3.15-2) ...
   Setting up libnghttp2-14:amd64 (1.36.0-2+deb10u1) ...
   Setting up krb5-locales (1.17-3+deb10u2) ...
   Setting up libicu63:amd64 (63.1-6+deb10u1) ...
   Setting up libkrb5support0:amd64 (1.17-3+deb10u2) ...
   Setting up librtmp1:amd64 (2.4+20151223.gitfa8646d.1-2) ...
   Setting up libncurses6:amd64 (6.1+20181013-2+deb10u2) ...
   Setting up libk5crypto3:amd64 (1.17-3+deb10u2) ...
   Setting up procps (2:3.3.15-2) ...
   update-alternatives: using /usr/bin/w.procps to provide /usr/bin/w (w) in 
auto mode
   update-alternatives: warning: skip creation of /usr/share/man/man1/w.1.gz 
because associated file /usr/share/man/man1/w.procps.1.gz (of link group w) 
doesn't exist
   Setting up libssh2-1:amd64 (1.8.0-2.1) ...
   Setting up libkrb5-3:amd64 (1.17-3+deb10u2) ...
   Setting up publicsuffix (20190415.1030-1) ...
   Setting up libmozjs-60-0:amd64 (60.2.3-3) ...
   Setting up libgssapi-krb5-2:amd64 (1.17-3+deb10u2) ...
   Setting up libcurl4:amd64 (7.64.0-4+deb10u2) ...
   Setting up curl (7.64.0-4+deb10u2) ...
   Setting up couchdb (3.1.1-6c2d01a~buster) ...
   invoke-rc.d: could not determine current runlevel
   invoke-rc.d: policy-rc.d denied execution of start.
   Setting up couchdb-dbgsym (3.1.1-6c2d01a~buster) ...
   Processing triggers for libc-bin (2.28-10) ...
   + rmdir /var/lib/couchdb /var/log/couchdb
   + rm /opt/couchdb/data /opt/couchdb/var/log
   + mkdir -p /opt/couchdb/data /opt/couchdb/var/log
   + chown couchdb:couchdb /opt/couchdb/data /opt/couchdb/var/log
   + chmod 777 /opt/couchdb/data /opt/couchdb/var/log
   + rm /opt/couchdb/etc/default.d/10-filelog.ini
   + find /opt/couchdb ! ( -user couchdb -group couchdb ) -exec chown -f 
couchdb:couchdb {} +
   + find /opt/couchdb/etc -type d ! -perm 0755 -exec chmod -f 0755 {} +
   + find /opt/couchdb/etc -type f ! -perm 0644 -exec chmod -f 0644 {} +
   + chmod -f 0777 /opt/couchdb/etc/local.d
   + rm -rf 
/var/lib/apt/lists/apache.jfrog.io_artifactory_couchdb-deb_dists_buster_InRelease
 
/var/lib/apt/lists/apache.jfrog.io_artifactory_couchdb-deb_dists_buster_main_binary-amd64_Packages.lz4
 /var/lib/apt/lists/auxfiles 
/var/lib/apt/lists/deb.debian.org_debian_dists_buster-updates_InRelease 
/var/lib/apt/lists/deb.debian.org_debian_dists_buster-updates_main_binary-amd64_Packages.lz4
 /var/lib/apt/lists/deb.debian.org_debian_dists_buster_InRelease 
/var/lib/apt/lists/deb.debian.org_debian_dists_buster_main_binary-amd64_Packages.lz4
 /var/lib/apt/lists/lock /var/lib/apt/lists/partial 
/var/lib/apt/lists/security.debian.org_debian-security_dists_buster_updates_InRelease
 
/var/lib/apt/lists/security.debian.org_debian-security_dists_buster_updates_main_binary-amd64_Packages.lz4
   Removing intermediate container 6f530f886258
    ---> eaea07a7886e
   Step 13/20 : COPY --chown=couchdb:couchdb 10-docker-default.ini 
/opt/couchdb/etc/default.d/
    ---> f1c9d8e86732
   Step 14/20 : COPY --chown=couchdb:couchdb vm.args /opt/couchdb/etc/
    ---> a984087a4ee3
   Step 15/20 : COPY docker-entrypoint.sh /usr/local/bin
    ---> 66cd3ececce1
   Step 16/20 : RUN ln -s usr/local/bin/docker-entrypoint.sh 
/docker-entrypoint.sh # backwards compat
    ---> Running in ae10e0e02906
   Removing intermediate container ae10e0e02906
    ---> bf8817264923
   Step 17/20 : ENTRYPOINT ["tini", "--", "/docker-entrypoint.sh"]
    ---> Running in 1485a79c319f
   Removing intermediate container 1485a79c319f
    ---> 737d9f7a9b97
   Step 18/20 : VOLUME /opt/couchdb/data
    ---> Running in 6aa4eafbc054
   Removing intermediate container 6aa4eafbc054
    ---> 3f111d557168
   Step 19/20 : EXPOSE 5984 4369 9100
    ---> Running in 07b6a3204c82
   Removing intermediate container 07b6a3204c82
    ---> c70917bea3fd
   Step 20/20 : CMD ["/opt/couchdb/bin/couchdb"]
    ---> Running in d61719ef6dea
   Removing intermediate container d61719ef6dea
    ---> ca3940266314
   Successfully built ca3940266314
   Successfully tagged couchdb:3.1.1-patch-jan
   ```
   
   I pushed the image and pulled it to my workstation again to have the same 
underlying hardware as in the previous test.
   
   I also adjusted the couchdb-test.sh 
[couchdb-test-validate-patch-3517.zip](https://github.com/apache/couchdb/files/7083304/couchdb-test-validate-patch-3517.zip)
 script to use the patched image and compare it against the vanilla CouchDB 
3.1.1 image.
   
   ```bash
   $ ./couchdb-test.sh setup
   ...
   inserting docs cycle 2000/2000
   
{"ok":true,"id":"a479f05c01bf22c5168ee73617783eb7","rev":"1-f7fac9a3f6ce538d67747271336211c4"}
   
{"ok":true,"id":"a479f05c01bf22c5168ee73617784bb6","rev":"1-7e3d2b01acbc416b60e6e5be050dd790"}
   
{"ok":true,"id":"a479f05c01bf22c5168ee73617784e38","rev":"1-c959b425a724ad6346f646d8a63da6cd"}
   
{"ok":true,"id":"a479f05c01bf22c5168ee73617785d5b","rev":"1-d8bd0d00d0b04b52796cfe73d9a80760"}
   
{"ok":true,"id":"a479f05c01bf22c5168ee73617786743","rev":"1-24f6bc4fcfdceae7ff2fae47a68fbf42"}
   
{"ok":true,"id":"a479f05c01bf22c5168ee73617787715","rev":"1-b0dfc903b7f27dc98130c8d51931f5d4"}
   
   $ ./couchdb-test.sh query
   CouchDB performance regression test script
   Assuming that setup is already complete
   ================ Query CouchDB 3.1.1 ================
   
{"couchdb":"Welcome","version":"3.1.1","git_sha":"ce596c65d","uuid":"84f2eae60ea04fe192284667cb0e4640","features":["access-ready","partitioned","pluggable-storage-engines","reshard","scheduler"],"vendor":{"name":"The
 Apache Software Foundation"}}
   Query Database views on port 3003
   Round: 1/10
   
   real 0m36.391s
   user 0m0.014s
   sys  0m0.010s
   Round: 2/10
   
   real 0m36.426s
   user 0m0.009s
   sys  0m0.015s
   Round: 3/10
   
   real 0m37.448s
   user 0m0.015s
   sys  0m0.010s
   Round: 4/10
   
   real 0m37.182s
   user 0m0.010s
   sys  0m0.016s
   Round: 5/10
   
   real 0m34.802s
   user 0m0.013s
   sys  0m0.013s
   Round: 6/10
   
   real 0m34.877s
   user 0m0.009s
   sys  0m0.016s
   Round: 7/10
   
   real 0m34.204s
   user 0m0.007s
   sys  0m0.017s
   Round: 8/10
   
   real 0m34.092s
   user 0m0.009s
   sys  0m0.015s
   Round: 9/10
   
   real 0m35.571s
   user 0m0.014s
   sys  0m0.011s
   Round: 10/10
   
   real 0m35.790s
   user 0m0.010s
   sys  0m0.015s
   ================ Query CouchDB 3.1.1 patch jan ================
   
{"couchdb":"Welcome","version":"3.1.1","git_sha":"6c2d01a","uuid":"7df6b96ce9f321de839f65a9a6f264f3","features":["access-ready","partitioned","pluggable-storage-engines","reshard","scheduler"],"vendor":{"name":"The
 Apache Software Foundation"}}
   Query Database views on port 3004
   Round: 1/10
   
   real 0m11.194s
   user 0m0.012s
   sys  0m0.010s
   Round: 2/10
   
   real 0m11.224s
   user 0m0.014s
   sys  0m0.011s
   Round: 3/10
   
   real 0m10.966s
   user 0m0.012s
   sys  0m0.012s
   Round: 4/10
   
   real 0m11.212s
   user 0m0.013s
   sys  0m0.012s
   Round: 5/10
   
   real 0m10.696s
   user 0m0.016s
   sys  0m0.009s
   Round: 6/10
   
   real 0m10.859s
   user 0m0.013s
   sys  0m0.012s
   Round: 7/10
   
   real 0m11.342s
   user 0m0.012s
   sys  0m0.013s
   Round: 8/10
   
   real 0m11.276s
   user 0m0.011s
   sys  0m0.013s
   Round: 9/10
   
   real 0m11.357s
   user 0m0.015s
   sys  0m0.009s
   Round: 10/10
   
   real 0m11.542s
   user 0m0.014s
   sys  0m0.010s
   ```
   
   That's actually great news, we have an average response time from about 
11.2s now compared to 35.7s on the vanilla image :-)
   If possible, I would vote for including your patch in a new 3.x build, as it 
would be more than 3 times faster for the same queries with unchanged client 
code (at least for the given dataset).
   
   Still, nothing seem to beat build-in reducers, but at least it would not be 
way slower to run customer reducers on CouchDB 3 vs. CouchDB 2 installations.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to