couchdb.git
12 days agoAdd SSL session_lifetime limit for ibrowse pids master
Joan Touzet [Thu, 10 May 2018 16:59:57 +0000 (12:59 -0400)] 
Add SSL session_lifetime limit for ibrowse pids

2 weeks agoBump fauxton to fix CI builds
Joan Touzet [Wed, 2 May 2018 03:38:37 +0000 (23:38 -0400)] 
Bump fauxton to fix CI builds

3 weeks agoForce use of SMP enabled BEAM VM, fixes #1296
Joan Touzet [Sun, 29 Apr 2018 20:00:18 +0000 (16:00 -0400)] 
Force use of SMP enabled BEAM VM, fixes #1296

5 weeks agoFix length badarg error in mp parser
Nick Vatamaniuc [Tue, 17 Apr 2018 23:51:01 +0000 (19:51 -0400)] 
Fix length badarg error in mp parser

This was introduced in:

https://github.com/apache/couchdb/commit/083239353e919e897b97e8a96ee07cb42ca4eccd

Issue #1286

5 weeks agoFix mem3 tests (#1285)
Eric Avdey [Tue, 17 Apr 2018 17:04:39 +0000 (14:04 -0300)] 
Fix mem3 tests (#1285)

The changes listener started in setup of mem3_shards test
was crashing when tried to register on unstarted couch_event
server, so the test was either fast enough to do assertions
before of that or failed on dead listener process.

This change removes dependency on mocking and uses
a standard test_util's star and stop of couch. Module start
moved into the test body to avoid masking potential failure
in a setup.

Also the tests mem3_sync_security_test and mem3_util_test
been modified to avoid setup and teardown side effects.

5 weeks agoDocument enable_database_recovery ini option
Joan Touzet [Fri, 13 Apr 2018 18:37:10 +0000 (14:37 -0400)] 
Document enable_database_recovery ini option

5 weeks agoMerge pull request #1273 from cloudant/adopt-fake_db-to-PSE
Eric Avdey [Fri, 13 Apr 2018 14:09:45 +0000 (11:09 -0300)] 
Merge pull request #1273 from cloudant/adopt-fake_db-to-PSE

Adopt fake_db to PSE changes

5 weeks agoAdopt fake_db to PSE changes 1273/head
Eric Avdey [Mon, 9 Apr 2018 17:30:38 +0000 (14:30 -0300)] 
Adopt fake_db to PSE changes

With db headers moved into engine's state, any fake_db call,
that's trying to setup sequences for tests (e.g. in mem3_shards)
crashing with context setup failed.

It's not trivial to compose a proper `engine` field outside of
couch app, so instead this fix makes fake_db to set engine
transparently, unless it was provided in a payload.

5 weeks agoIn _scheduler/docs fix `crashing` state showing as `pending` sometimes
Nick Vatamaniuc [Tue, 10 Apr 2018 14:31:53 +0000 (10:31 -0400)] 
In _scheduler/docs fix `crashing` state showing as `pending` sometimes

Replication jobs are backed off based on the number of consecutive crashes,
that is, we count the number of crashes in a row and then penalize jobs with an
exponential wait based that number. After a job runs without crashing for 2
minutes, we consider it healthy and stop going back in its history and looking
for crashes.

Previously a job's state was set to `crashing` only if there were any
consecutive errors. So it could have ran for 3 minutes, then user deletes the
source database, job crashes and stops. Until it runs again the state would
have been shown as `pending`. For internal accounting purposes that's correct
but it is confusing for the user because the last event in its history is a
crash.

This commit makes sure that if the last even in job's history is a crash user
will see the jobs as `crashing` with the respective crash reason. The
scheduling algorithm didn't change.

Fixes #1276

5 weeks agoMerge pull request #1281 from apache/commit_data_pse
Robert Newson [Thu, 12 Apr 2018 17:02:56 +0000 (18:02 +0100)] 
Merge pull request #1281 from apache/commit_data_pse

call commit_data where needed

5 weeks agocall commit_data where needed 1281/head
Robert Newson [Thu, 12 Apr 2018 16:26:28 +0000 (17:26 +0100)] 
call commit_data where needed

Regression since introduction of PSE

6 weeks agoSet update_lru_on_read=false as default
Joan Touzet [Fri, 19 Jan 2018 20:22:23 +0000 (15:22 -0500)] 
Set update_lru_on_read=false as default

6 weeks agoMinor documentation cleanup for couch_replicator
Kyle Snavely [Mon, 9 Apr 2018 19:48:10 +0000 (15:48 -0400)] 
Minor documentation cleanup for couch_replicator

6 weeks agoSwitch to using a mirrored triq dependency
Nick Vatamaniuc [Mon, 9 Apr 2018 16:18:51 +0000 (12:18 -0400)] 
Switch to using a mirrored triq dependency

6 weeks agoDo not drop updated httpdb record after auth headers are updated
Nick Vatamaniuc [Fri, 6 Apr 2018 16:16:43 +0000 (12:16 -0400)] 
Do not drop updated httpdb record after auth headers are updated

In replicator, after client auth plugin updates headers it could also update
its private context. Make sure to pass the updated httpdb record along to
response processing code.

For example, session plugin updates the epoch number in its context, and it
needs the epoch number later in response processing to make the decision
whether to refresh the cookie or not.

6 weeks agoKill fabric attachment receiver when middleman times out
Nick Vatamaniuc [Tue, 3 Apr 2018 23:13:35 +0000 (19:13 -0400)] 
Kill fabric attachment receiver when middleman times out

Attachment receiver process is started with a plain spawn. If middleman process
dies, receiver would hang forever waiting on receive. After a long enough time
quite a few of these receiver processes could accumulate on a server.

Fixes #1264

7 weeks agoKey tree property tests
Nick Vatamaniuc [Fri, 2 Feb 2018 17:08:08 +0000 (12:08 -0500)] 
Key tree property tests

Key tree module is a candidate to use property tests on as it mostly deals with
manipulating a single data structure and functions are referentially
transparent, that is, they aren't many side-effects like IO for example.

The test consists of two main parts - generators and properties.

Generators generate random input, for example revision trees, and properties
check that certain properties hold, for example that after stemming all the
leaves are still present in the revtree.

To run the test:

make eunit apps=couch suites=couch_key_tree_prop_tests

7 weeks agoFix typo in node local _replicate handler
Nick Vatamaniuc [Mon, 2 Apr 2018 21:24:57 +0000 (17:24 -0400)] 
Fix typo in node local _replicate handler

Dialyzer run discovered:

```
Unknown function couch_replicator_httpd_utils:validate_rep_props/1
```

Indeed, the function should be
```
couch_replicator_httpd_util:validate_rep_props/1
```

7 weeks agofix file_compression value description
Serge A. Salamanka [Fri, 30 Mar 2018 07:05:31 +0000 (10:05 +0300)] 
fix file_compression value description

deflate_N value is more clear description and obvious to replace only N. the same description is in documentation.

7 weeks agoTest compaction resumption after error
Paul J. Davis [Thu, 29 Mar 2018 17:19:11 +0000 (12:19 -0500)] 
Test compaction resumption after error

7 weeks agoFix compaction resumption for the BT engine
Paul J. Davis [Thu, 29 Mar 2018 16:02:25 +0000 (11:02 -0500)] 
Fix compaction resumption for the BT engine

This bug prevents the proper resumption of compactions that died during
the meta copy phase. The issue is that we were setting the update_seq
but not copying over the id and seq tree states. Thus when compaction
resumed from the bad files we'd end up skipping the part where we copy
docs over and then think everything was finished. Thus completely
clearing a database of its contents.

Luckily this isn't release code and as such should have fairly minimal
impact other than those who might be running off master.

7 weeks agoMake loginUser wait for successful authentication
Eric Avdey [Thu, 29 Mar 2018 16:44:29 +0000 (13:44 -0300)] 
Make loginUser wait for successful authentication

7 weeks agoFix killing of OS processes
Paul J. Davis [Wed, 28 Mar 2018 20:59:29 +0000 (15:59 -0500)] 
Fix killing of OS processes

This was a latent bad merge that failed to remove the duplicate receive
statement. This ended up discarding the monitor's 'DOWN' message which
leads to an infinite loop in couch_os_proces:killer/1.

7 weeks agoFix shard substitution in changes feeds
Paul J. Davis [Tue, 27 Mar 2018 15:55:48 +0000 (10:55 -0500)] 
Fix shard substitution in changes feeds

7 weeks agofeat: add debug log output for shard open errors
Jan Lehnardt [Tue, 27 Mar 2018 14:11:12 +0000 (16:11 +0200)] 
feat: add debug log output for shard open errors

7 weeks agoadd test covering loading admins from config
Jan Lehnardt [Wed, 28 Mar 2018 10:33:40 +0000 (12:33 +0200)] 
add test covering loading admins from config

7 weeks agofix: more reliable password scheme tests
Jan Lehnardt [Wed, 28 Mar 2018 13:13:21 +0000 (15:13 +0200)] 
fix: more reliable password scheme tests

Closes #1238

1. log errors from waitForSuccess
2. log errors in testFun()
3. spinloop replaces arbitrary wait timeout

7 weeks agoFix couch peruser test suite (#1247)
Eric Avdey [Wed, 28 Mar 2018 12:08:43 +0000 (09:08 -0300)] 
Fix couch peruser test suite (#1247)

* Fix binary optimization warning

* Use proper config delete in couch_peruser_test

* Fix weird spacing

* Use test_util's wait in tests instead of custom one

* Remove obsolete constant

* Make get_security to wait for proper sec object

8 weeks agoMerge pull request #1240 from apache/cleanup
Joan Touzet [Tue, 27 Mar 2018 20:42:37 +0000 (16:42 -0400)] 
Merge pull request #1240 from apache/cleanup

Various top-level directory cleanups

8 weeks agoVarious top-level directory cleanups 1240/head
Joan Touzet [Mon, 26 Mar 2018 22:14:49 +0000 (18:14 -0400)] 
Various top-level directory cleanups

* Replace list of committers with link to ASF page showing committer list
* Move introspect escript to build-aux/, update Makefiles to match
* Remove unmaintained Vagrantfile, if a new maintainer steps up we can revisit
* Remove obsolete license.skip file, was used for auto-header insertion

8 weeks agoMerge pull request #1242 from apache/daemon-spaces
Joan Touzet [Tue, 27 Mar 2018 18:24:23 +0000 (14:24 -0400)] 
Merge pull request #1242 from apache/daemon-spaces

Allow couch_os_daemons to live in directories with spaces

8 weeks agoMerge branch 'master' into daemon-spaces 1242/head
Joan Touzet [Tue, 27 Mar 2018 07:06:39 +0000 (03:06 -0400)] 
Merge branch 'master' into daemon-spaces

8 weeks agoMerge pull request #1243 from apache/import-setup-again
Joan Touzet [Tue, 27 Mar 2018 07:05:27 +0000 (03:05 -0400)] 
Merge pull request #1243 from apache/import-setup-again

Import couchdb-setup application

8 weeks agoUpdate rebar.config for local src/setup 1243/head
Joan Touzet [Tue, 27 Mar 2018 06:11:31 +0000 (02:11 -0400)] 
Update rebar.config for local src/setup

8 weeks agoImport couchdb-setup
Joan Touzet [Tue, 27 Mar 2018 06:08:58 +0000 (02:08 -0400)] 
Import couchdb-setup

8 weeks agoMerge branch 'master' into daemon-spaces
Joan Touzet [Tue, 27 Mar 2018 00:41:33 +0000 (20:41 -0400)] 
Merge branch 'master' into daemon-spaces

8 weeks agoFix DB-specific compaction configuration (#1059)
Adam Kocoloski [Thu, 14 Dec 2017 20:30:41 +0000 (15:30 -0500)] 
Fix DB-specific compaction configuration (#1059)

The compaction daemon was checking for custom configurations using
shard names directly, which meant that users who defined a config for
a specific DB would not see it take effect.

This patch introduces support for custom configurations for both
databases *and* shards. An example of a shard config would be

shards/00000000-1fffffff/foo.1512750761 = [{db_fragmentation, "70%"}]

We don't anticipate that to be a typical usage pattern.

8 weeks agoAllow couch_os_daemons to live in directories with spaces
Joan Touzet [Mon, 26 Mar 2018 23:16:18 +0000 (19:16 -0400)] 
Allow couch_os_daemons to live in directories with spaces

8 weeks agoImprove 413 response handling
Nick Vatamaniuc [Fri, 23 Mar 2018 22:03:05 +0000 (18:03 -0400)] 
Improve 413 response handling

Previously, when the server decided too much data was sent in the client's
request, it would immediately send a 413 response and close the socket. In the
meantime there could be unread data on the socket since the client keeps
streaming data. When this happens the connection is reset instead of going
through regular close sequence. The client, specifically the replicator client,
detected the reset before it had a chance to process the 413 response. This
lead to a retry, since it was interpreted as generic network error, instead of
a proper 413 HTTP error.

The improvement is to flush the receive socket before and after sending a 413
response, then close the connection. This reduces the chance of the socket
being closed with unread data, avoids a TCP reset, and gives the client a
better chance of parsing the 413 response. This is mostly geared to work with
the replicator client but should help other clients as well.

Also the connection on both the server and the client sides is closed after a
413 event. This avoids a few race conditions were it is not clear how much data
is on the socket after the 413 is processed. On the server side, the `close`
response header is set and socket is closed. On the client side, a flag is set
such that right before the worker release back to the pool it is stopped, which
closes the socket.

8 weeks agoRevert "Revert "re-enable "flaky" test in quest to nail down #745""
Nick Vatamaniuc [Tue, 13 Mar 2018 19:18:41 +0000 (15:18 -0400)] 
Revert "Revert "re-enable "flaky" test in quest to nail down #745""

This reverts commit ba624ea7c26984b8ea52ec5e20534dc5f8508d3a.

8 weeks agoValidate password_scheme in user doc
Eric Avdey [Thu, 22 Mar 2018 16:55:52 +0000 (13:55 -0300)] 
Validate password_scheme in user doc

If `newDoc.password_scheme` provided validate that it is one
of the supported types.

8 weeks agoReplace resource expensive bcrypt test with shorter version (#1231)
Eric Avdey [Fri, 23 Mar 2018 18:43:03 +0000 (15:43 -0300)] 
Replace resource expensive bcrypt test with shorter version (#1231)

* Fix the tests

* Replace resource expensive bcrypt test with shorter version

* Add tests descriptions

2 months agoMerge pull request #1130 from cloudant/issue-876-remove-_config-call-in-eunit-test
Peng Hui Jiang [Fri, 23 Mar 2018 01:28:13 +0000 (09:28 +0800)] 
Merge pull request #1130 from cloudant/issue-876-remove-_config-call-in-eunit-test

Remove _config call in couch_peruser_test

2 months agoRemove _config call in couch_peruser_test 1130/head
jiangphcn [Mon, 29 Jan 2018 03:20:15 +0000 (11:20 +0800)] 
Remove _config call in couch_peruser_test

Fixes #876

2 months agoMerge pull request #1222 from cloudant/issue-820-add-queries
Peng Hui Jiang [Thu, 22 Mar 2018 02:03:34 +0000 (10:03 +0800)] 
Merge pull request #1222 from cloudant/issue-820-add-queries

 Support queries endpoints

2 months agoSupport queries for endpoints 1222/head
jiangphcn [Wed, 14 Mar 2018 11:36:56 +0000 (19:36 +0800)] 
Support queries for endpoints

  - Add _all_docs/queries endpoint,
  - Add _design_docs/queries endpoint,
  - Add _local_docs/queries endpoint, and
  - Add _design/{ddoc}/_view/{viewname}/queries endpoint

Fixes #820

2 months agoBump config dependency to 1.0.3
Nick Vatamaniuc [Wed, 14 Mar 2018 15:43:54 +0000 (11:43 -0400)] 
Bump config dependency to 1.0.3

This adds fixes to handle non-persistent set_integer/set_boolean values

2 months agoImplement format_status/2 for replication worker gen_server
Nick Vatamaniuc [Wed, 14 Mar 2018 04:01:25 +0000 (00:01 -0400)] 
Implement format_status/2 for replication worker gen_server

That was another place that could leak credentials in case of a crash

2 months agoIncrease PSE test engine timeouts
Nick Vatamaniuc [Fri, 9 Mar 2018 18:29:17 +0000 (13:29 -0500)] 
Increase PSE test engine timeouts

Also make them into defines to be easier to adjust in the future

2 months agostyle fixes as per @davisp
Jan Lehnardt [Fri, 9 Mar 2018 16:47:22 +0000 (17:47 +0100)] 
style fixes as per @davisp

2 months agofix whitespace
Jan Lehnardt [Fri, 9 Mar 2018 16:46:52 +0000 (17:46 +0100)] 
fix whitespace

2 months agoProper error handling for file:open() call
AlexanderKaraberov [Wed, 14 Feb 2018 16:10:32 +0000 (17:10 +0100)] 
Proper error handling for file:open() call

2 months agofix: compaction daemon symlink resolution and log level #1097
Jan Lehnardt [Fri, 9 Mar 2018 10:37:26 +0000 (11:37 +0100)] 
fix: compaction daemon symlink resolution and log level #1097

2 months agofeat: allow eunit to run without setup or make all
Jan Lehnardt [Fri, 9 Mar 2018 10:36:33 +0000 (11:36 +0100)] 
feat: allow eunit to run without setup or make all

2 months agoFix dialyzer warning for couch_att:from_disk_term
ILYA Khlopotov [Thu, 1 Mar 2018 21:19:52 +0000 (13:19 -0800)] 
Fix dialyzer warning for couch_att:from_disk_term

The `couch_att:from_disk_term` function is responible for conversion of
a disk format to #att{} record. However the way it is called
produces a dialyzer complaint.
Because `couch_att:from_disk_term` is always called as
`[couch_att:from_disk_term(Db, T) || T <- Doc1#doc.atts]`.

The `atts` field of `#doc{}` record is defined as
`[couch_att:att()] | binary()`

This is problematic because `att()` definition doesn't include disk
format representation. This commit adds disk format to the spec.

2 months agoIntroduce bin_opt_info erl_opts compilation option
Jay Doane [Fri, 9 Mar 2018 00:32:54 +0000 (16:32 -0800)] 
Introduce bin_opt_info erl_opts compilation option

As discussed in
http://erlang.org/doc/efficiency_guide/binaryhandling.html, the
bin_opt_info option can have the compiler print information about
binary optimizations. Typically, it issues warnings about code that
can not be optimized. For example, with the option enabled, it warns
about this line of code (among many others) like this:

src/chttpd/src/chttpd_auth_cache.erl:183:
  Warning: NOT OPTIMIZED: sub binary is used or returned

Not only should having this option enabled draw awareness to existing
sub-optimal binary constructs, it should help developers avoid
creating new ones.

2 months agoAdd bcrypt hashing option
Jan Lehnardt [Thu, 8 Mar 2018 16:47:24 +0000 (17:47 +0100)] 
Add bcrypt hashing option

2 months agoRevert "re-enable "flaky" test in quest to nail down #745"
Nick Vatamaniuc [Thu, 8 Mar 2018 03:15:23 +0000 (22:15 -0500)] 
Revert "re-enable "flaky" test in quest to nail down #745"

This reverts commit 4a73d035dc77c4074f5e3c8d8bcf900138c91eb6.

Latest Mochiweb 2.17 might have helped a bit but after runnig `soak-eunit
suites=couch_replicator_small_max_request_size_target` make it fail after 10-15
runs locally for me.

2 months agoAdd error tuple return type to replicator auth spec and callback 1160/head
Jay Doane [Wed, 7 Mar 2018 02:53:39 +0000 (18:53 -0800)] 
Add error tuple return type to replicator auth spec and callback

The {error, term()} return type is added to both the initialize/1
callback and spec, which matches the underlying implementation.

2 months agoMerge pull request #1193 from cloudant/fix-error-reporting-in-mango
iilyak [Tue, 6 Mar 2018 23:21:56 +0000 (15:21 -0800)] 
Merge pull request #1193 from cloudant/fix-error-reporting-in-mango

Use `chttpd:send_error/2` in mango_httpd

2 months agoUse `chttpd:send_error/2` in mango_httpd 1193/head
ILYA Khlopotov [Fri, 2 Mar 2018 15:19:42 +0000 (07:19 -0800)] 
Use `chttpd:send_error/2` in mango_httpd

We used to call non exported function chttpd:send_error/6. Switch to
public `chttpd:send_error/2` for sending error.

2 months agoSwitching `couch_stats_process_tracker:track/2` argument names
gesberger [Tue, 6 Mar 2018 20:58:31 +0000 (20:58 +0000)] 
Switching `couch_stats_process_tracker:track/2` argument names

2 months agoUse precise term comparison
AlexanderKaraberov [Thu, 22 Feb 2018 08:47:28 +0000 (09:47 +0100)] 
Use precise term comparison

2 months agoFix validate_doc_update for Erlang functions
AlexanderKaraberov [Wed, 14 Feb 2018 16:00:53 +0000 (17:00 +0100)] 
Fix validate_doc_update for Erlang functions

2 months agoFix dialyzer warning on `couch_key_tree:merge/2`
ILYA Khlopotov [Fri, 2 Mar 2018 00:59:05 +0000 (16:59 -0800)] 
Fix dialyzer warning on `couch_key_tree:merge/2`

The spec of `couch_key_tree:merge/2` doesn't include the `path()`
type. However we pass `path()` in few places. One of such places is
`couch_db:prep_and_validate_replicated_updates/5`.

```
{NewTree, _} = couch_key_tree:merge(AccTree,
    couch_doc:to_path(NewDoc), RevsLimit),
NewTree
```

The spec for `couch_doc:to_path/1` is defined as:
```
-spec to_path(#doc{}) -> path().
```

This PR adds `path()` type to `couch_key_tree:merge/2` spec.

2 months agoPrevent access to Fauxton on node-local port (5986)
Joan Touzet [Sat, 3 Mar 2018 00:12:56 +0000 (19:12 -0500)] 
Prevent access to Fauxton on node-local port (5986)

Will help stop people shooting themselves in the foot and/or using
node-local CouchDB as their "main" CouchDB port.

Closes #1198

2 months agofeat: demote view index opening/closing to log level debug
Jan Lehnardt [Mon, 5 Mar 2018 15:15:51 +0000 (16:15 +0100)] 
feat: demote view index opening/closing to log level debug

2 months agodoc: add snooze_period doc to default.ini
Jan Lehnardt [Mon, 5 Mar 2018 15:12:14 +0000 (16:12 +0100)] 
doc: add snooze_period doc to default.ini

2 months agofeat: bump the compaction daemon check_interval to one hour
Jan Lehnardt [Mon, 5 Mar 2018 17:08:16 +0000 (18:08 +0100)] 
feat: bump the compaction daemon check_interval to one hour

2 months agofix: simplify config integer get
Jan Lehnardt [Mon, 5 Mar 2018 15:09:00 +0000 (16:09 +0100)] 
fix: simplify config integer get

2 months agofeat: introduce snooze_period to reduce compaction_daemon load.
Jan Lehnardt [Mon, 5 Mar 2018 15:06:21 +0000 (16:06 +0100)] 
feat: introduce snooze_period to reduce compaction_daemon load.

This commit introduces a snooze period for the compaction daemon
to apply inbetween moving on from one database compaction to
another, and from one view group to another.

The result is that on db-per-user setups, the compaction daemon
doesn’t cause a CPU spike every check_interval seconds.

2 months agoThis fixes couch_bt_engine:fold_local_docs/4
Paul J. Davis [Sat, 3 Mar 2018 21:32:19 +0000 (15:32 -0600)] 
This fixes couch_bt_engine:fold_local_docs/4

Somehow managed to fix without getting it into the PSE PR that was
merged the other day.

2 months agoImplement pluggable authentication and session support for replicator
Nick Vatamaniuc [Tue, 13 Feb 2018 16:54:52 +0000 (11:54 -0500)] 
Implement pluggable authentication and session support for replicator

Previously replicator used only basic authentication. It was simple and
straightforward. However, with PBKDF2 hashing becoming the default it would be
nice not to do all the password verification work with every single request,
and instead take advantage of session (cookie) based authentication.

This commit implements session based authentication via a plugin mechanism.
The list of available replicator auth modules is configurable. For example:

```
[replicator]
auth_plugins = couch_replicator_auth_session,couch_replicator_auth_basic
```

The plugins will be tried in order. The first one to successfully initialize
will end up being used for that endpoint (source or target).

During the initialization callback, a plugin could decide it cannot be used in
the current context. In that case it signals to be "ignored". The plugin
framework will then skip over it and try to initialize the next on in the list.

`couch_replicator_auth_basic` effectively implements the old behavior. This
plugin should normally be used as a default catch-all at the end of the plugin
list. In some cases, it might be useful to enforce exclusive use of
session-based auth and fail replication jobs if it is not available.

`couch_replicator_auth_session` does most of the work of handling session based
authentication. On initialization, it strips away basic auth credentials from
headers and url to avoid basic auth being used on the server. Then it is in
charge of periodically issuing POST requests to `_session`, updating the
headers of each request with the latest cookie value, and possibly picking up
new session cookie if the server can issue them along with reglar responses.

Currently session based auth plugin is not enabled by default and is an opt-in
feature. That is, users would have to explicitly add the session module to the
list of auth_plugins. In a future, session might be used by default.

As discussed in #1153 this work also removes OAuth 1.0 support. After
server-side support was removed, it had stopped working anyway since the main
oauth app was removed. However, with the plugin framework in place it would be
possible for someone to implement it as a separate module not entangled with
the rest of the replicator code.

Fixes #1153

2 months agore-enable "flaky" test in quest to nail down #745
Jan Lehnardt [Fri, 16 Feb 2018 15:12:36 +0000 (16:12 +0100)] 
re-enable "flaky" test in quest to nail down #745

2 months agoRemove unused code for starting compactions
Paul J. Davis [Thu, 1 Mar 2018 19:43:33 +0000 (13:43 -0600)] 
Remove unused code for starting compactions

This was left over from an earlier attempt at being a bit more strict on
removing access to the #db record. Its not used as is obvious by the
fact that the 2-arity version isn't even exported from the module.

2 months agoEliminate "default" Erlang platform from Jenkins CI
Joan Touzet [Fri, 2 Mar 2018 16:51:17 +0000 (11:51 -0500)] 
Eliminate "default" Erlang platform from Jenkins CI

Currently, we run Jenkins CI builds on 11 platforms:

Erlang 18.3 + [centos6|centos7|debian8|debian9|ubuntu1404|ubuntu1604]
"Default" (ships-with-the-distro) Erlang + [same list but not centos6]

The intent was ensure that CouchDB ran fine both with our preferred
Erlang version (right now, 18.3) as well as the Erlang that ships with
various common distributions. This would help ease consumption of
CouchDB by end users, we thought.

With CouchDB 2.1.0 we started providing convenience binary packages,
built with Erlang 18.3. This (along with Docker) has become the most
common way people consume CouchDB today. Those binaries are generated
directly from the Jenkins builds.

Further, Travis CI already runs our test suite against a variety of
Erlang distributions, from 16B03 right through 20.1 (as of today).

There is little value in the extra Jenkins runs at this point, beyond
catching any vagaries of distro-specific Erlang weirdness that we
would probably wash our hands of anyway.

This change removes 5 of our 11 platform builds. This will be valuable
as we move towards regression testing other platforms (ppc64le, arm).
It also lightens our load on the ASF Jenkins infrastructure.

NOTE that we will still need to maintain the Docker image for
ubuntu1404erlangdefault, as this contains 16B03, the earliest version
of Erlang that we support. The initial "Build" step in our Jenkins
run uses this to build the couchdb.tar.gz dist tarball, which is then
compiled and tested on each platform during the "Test" step.

2 months agoIncrease timeout for storage engine tests
Paul J. Davis [Wed, 28 Feb 2018 22:35:30 +0000 (16:35 -0600)] 
Increase timeout for storage engine tests

The compaction test takes quite a long time on purpose to show that we
can run a compaction that has many batches. On resource constrained
build machines like Jenkins and TravisCI this can end up taking longer
than the default 5s timeout.

2 months agoEnsure deterministic revisions for attachments
Paul J. Davis [Wed, 8 Feb 2017 13:25:37 +0000 (07:25 -0600)] 
Ensure deterministic revisions for attachments

This re-fixes a corner case when recreating a document with an
attachment in a single multipart request. Since we don't detect that we
need a new revision until after the document has been serialized we need
to be able to deserialize the body so that we can generate the same
revisions regardless of the contents of the database. If we don't do
this then we end up including information from the position of the
attachment on disk in the revision calculation which can introduce
branches in the revision tree.

I've left this as a separate commit from the pluggable storage engine
work so that its called out clearly for us to revisit.

COUCHDB-3255

2 months agoAdd storage engine test suite
Paul J. Davis [Fri, 5 Feb 2016 18:21:39 +0000 (12:21 -0600)] 
Add storage engine test suite

This allows other storage engine implementations to reuse the same exact
test suite without having to resort to shenanigans like keeping vendored
copies up to date.

COUCHDB-3287

2 months agoImplement pluggable storage engines
Paul J. Davis [Fri, 5 Feb 2016 18:04:20 +0000 (12:04 -0600)] 
Implement pluggable storage engines

This change moves the main work of storage engines to run through the
new couch_db_engine behavior. This allows us to replace the storage
engine with different implementations that can be tailored to specific
work loads and environments.

COUCHDB-3287

2 months agoAdd legacy storage engine implementation
Paul J. Davis [Fri, 5 Feb 2016 17:51:31 +0000 (11:51 -0600)] 
Add legacy storage engine implementation

This is the legacy storage engine code. I've kept it as part of the core
couch application because we'll always need to have at least one
storage engine available.

COUCHDB-3287

2 months agoAdd couch_db_engine module
Paul J. Davis [Fri, 5 Feb 2016 17:49:34 +0000 (11:49 -0600)] 
Add couch_db_engine module

This is the primary API for pluggable storage engines. This module
serves as both a behavior and a call dispatch module for handling the
engine state updates.

COUCHDB-3287

2 months agoRemove old rolling reboot upgrade code
Paul J. Davis [Wed, 14 Feb 2018 19:28:34 +0000 (13:28 -0600)] 
Remove old rolling reboot upgrade code

This relied on having introspection into the state of a #doc{} record
that is no longer valid with PSE. This is a harmless change as it was
only necessary when performing a rolling reboot to a version that
included the new get_meta_body_size function. We can remove it now
because anyone wanting to do a rolling reboot with PSE will have to step
through a version that includes commit aee57bf which includes the
previous upgrade logic as well.

2 months agoPrevent chttpd multipart zombie processes
Jan Lehnardt [Tue, 13 Feb 2018 14:32:29 +0000 (15:32 +0100)] 
Prevent chttpd multipart zombie processes

Occasionally it's possible to lose track of our RPC workers in the main
multipart parsing code. This change monitors each worker process and
then exits if all workers have exited before the parser considers itself
finished.

Fixes part of #745

2 months agoAvoid unconditional retries in replicator's http client
Nick Vatamaniuc [Wed, 21 Feb 2018 22:41:56 +0000 (17:41 -0500)] 
Avoid unconditional retries in replicator's http client

In some cases the higher level code from `couch_replicator_api_wrap` needs to
handle retries explicitly and cannot cope with retries happening in the lower
level http client. In such cases it sets `retries = 0`.

For example:

https://github.com/apache/couchdb/blob/master/src/couch_replicator/src/couch_replicator_api_wrap.erl#L271-L275

The http client then should avoid unconditional retries and instead consult
`retries` value. If `retries = 0`, it shouldn't retry and instead bubble the
exception up to the caller.

This bug was discovered when attachments were replicated to a target cluster
and the target cluster's resources were constrainted. Since attachment `PUT`
requests were made from the context of an open_revs `GET` request, `PUT`
request timed out, and they would retry. However, because the retry didn't
bubble up to the `open_revs` code, the second `PUT` request would die with a
`noproc` error, since the old parser had exited by then. See issue #745 for
more.

3 months agofeat: update mochiweb to 2.17.0
Jan Lehnardt [Sun, 18 Feb 2018 12:50:53 +0000 (13:50 +0100)] 
feat: update mochiweb to 2.17.0

3 months agoUse callbacks for couch_event_listener behavior
Nick Vatamaniuc [Thu, 15 Feb 2018 15:36:06 +0000 (10:36 -0500)] 
Use callbacks for couch_event_listener behavior

This knocks out a few dialyzer errors

3 months agoBump config to 1.0.2 for dialyzer related fixes
Nick Vatamaniuc [Thu, 15 Feb 2018 16:18:09 +0000 (11:18 -0500)] 
Bump config to 1.0.2 for dialyzer related fixes

3 months agoAdd config app to couch_replicator app dependencies
Nick Vatamaniuc [Thu, 15 Feb 2018 06:08:54 +0000 (01:08 -0500)] 
Add config app to couch_replicator app dependencies

It depends on and uses `config`. Obviously it still works without it, but this
eliminates Dialyzer errors such as:

`Callback info about the config_listener behaviour is not available`

3 months agofeat: add ./configure --dev as alias for -c --disable-{docs,fauxton}
Jan Lehnardt [Tue, 13 Feb 2018 14:37:52 +0000 (15:37 +0100)] 
feat: add ./configure --dev as alias for -c --disable-{docs,fauxton}

3 months agoSimplify make dist approach
Joan Touzet [Tue, 7 Nov 2017 09:16:27 +0000 (04:16 -0500)] 
Simplify make dist approach

3 months agoMerge pull request #1143 from cloudant/issue-820-remove-queries-for_all_docs
iilyak [Tue, 6 Feb 2018 21:54:03 +0000 (13:54 -0800)] 
Merge pull request #1143 from cloudant/issue-820-remove-queries-for_all_docs

Remove queries for _all_docs,  _design_docs and _local_docs

3 months agoRemove queries for _all_docs 1143/head
jiangphcn [Tue, 6 Feb 2018 12:53:20 +0000 (20:53 +0800)] 
Remove queries for _all_docs
issue 820

3 months agoFix for issue #1134 clean up dev/lib before run mango tests (#1135)
Juanjo Rodriguez [Wed, 31 Jan 2018 22:29:24 +0000 (23:29 +0100)] 
Fix for issue #1134 clean up dev/lib before run mango tests (#1135)

* make javascript, test-cluster-with[out]-quorum and mango tests dependent of devclean target

3 months agofeat: add quorum tests to make check
Jan Lehnardt [Tue, 30 Jan 2018 10:40:31 +0000 (11:40 +0100)] 
feat: add quorum tests to make check

3 months agoFix for issue #603 - Error 500 when creating a db below quorum
Juanjo [Wed, 24 Jan 2018 14:01:40 +0000 (15:01 +0100)] 
Fix for issue #603 - Error 500 when creating a db below quorum

Add degrade-cluster option for cluster testing

Add tests for different cluster conditions with/without quorum

Add test-cluster-with-quorum and test-cluster-without-quorum tasks

3 months agoMerge pull request #1082 from cloudant/issue-822-all-dbs-info
iilyak [Mon, 29 Jan 2018 17:18:46 +0000 (09:18 -0800)] 
Merge pull request #1082 from cloudant/issue-822-all-dbs-info

Introduce new _dbs_info endpoint to get info of a list of databases

3 months agoIntroduce new _dbs_info endpoint to get info of a list of databases 1082/head
jiangphcn [Thu, 28 Dec 2017 03:45:43 +0000 (11:45 +0800)] 
Introduce new _dbs_info endpoint to get info of a list of databases

Fixes #822

3 months agoMake _design_docs to respect query parameters
jiangphcn [Mon, 15 Jan 2018 10:16:19 +0000 (18:16 +0800)] 
Make _design_docs to respect query parameters

Fixes #1100

3 months agoRemove 'smartquote' from default.ini, broke the build
Joan Touzet [Fri, 26 Jan 2018 18:16:32 +0000 (13:16 -0500)] 
Remove 'smartquote' from default.ini, broke the build