3 days agoAdd support for queries in /{db}/_all_docs POST master
jiangphcn [Thu, 30 Nov 2017 09:52:08 +0000 (17:52 +0800)] 
Add support for queries in /{db}/_all_docs POST
Fixes #820

4 days agoCreate all needed directories to build docs (#1115)
Adam Kocoloski [Wed, 17 Jan 2018 18:19:57 +0000 (13:19 -0500)] 
Create all needed directories to build docs (#1115)

5 days agoMerge pull request #1085 from cloudant/issue-969-update_seq-true
Eric Avdey [Tue, 16 Jan 2018 14:52:34 +0000 (10:52 -0400)] 
Merge pull request #1085 from cloudant/issue-969-update_seq-true

Return update_seq and offset when update_seq is true and keys is set

5 days agoReturn null for update_seq and offset if update_seq is true 1085/head
jiangphcn [Wed, 3 Jan 2018 09:58:54 +0000 (17:58 +0800)] 
Return null for update_seq and offset if update_seq is true
issue 969

6 days agoFix couch_peruser_test
Eric Avdey [Mon, 15 Jan 2018 15:29:34 +0000 (11:29 -0400)] 
Fix couch_peruser_test

Fix a random mashup of test object generators
with normal assertions.

7 days agoAllow override of `-args_file` and `-config` parameters (#1095)
Edwin Fine [Sun, 14 Jan 2018 03:16:43 +0000 (22:16 -0500)] 
Allow override of `-args_file` and `-config` parameters (#1095)

The existing `couchdb` start script hard-codes the arguments to
`-args_file` and `-config`. Although it is possible to copy this
script and modify it, or modify it in place, that is less than ideal
and can lead to all kinds of difficulties.

This PR adds the following environment variables:

- `ARGS_FILE`: By default, set to the existing hard-coded value.
- `SYSCONFIG_FILE`: By default, set to the existing hard-coded value.
- `COUCHDB_ARGS_FILE`: If non-empty, overrides `ARGS_FILE`.
- `COUCHDB_SYSCONFIG_FILE`: If non-empty, overrides `SYSCONFIG_FILE`.

By changing the script to use these environment variables, it makes it easily
possible to use different settings without tinkering with the pristine
installed CouchDB environment.

9 days agoRemove warning on `couch_epi_codegen` compile
Eric Avdey [Fri, 12 Jan 2018 14:56:18 +0000 (10:56 -0400)] 
Remove warning on `couch_epi_codegen` compile

Change runtime choice between `erl_scan:token_info`
and `erl_scan:line` to compilation conditional one.

This is getting rid of compilation deprecation warning
and also should speed up things a bit.

9 days agoSimplify couch_key_tree test setup
Nick Vatamaniuc [Fri, 12 Jan 2018 06:56:21 +0000 (01:56 -0500)] 
Simplify couch_key_tree test setup

Avoid starting 4 applications (config, couch_log, ioq and couch_epi) just to
handle a call to config:get. Instead just mock the config directly.

This also speeds up the test suite a bit.

12 days agofallback to "selector" on empty "partial_filter_selector" (#1098)
Will Holley [Tue, 9 Jan 2018 08:25:14 +0000 (08:25 +0000)] 
fallback to "selector" on empty "partial_filter_selector" (#1098)

Mango text indexes historically supported partial indexes
defined via a "selector" field. This was renamed to
"partial_filter_selector" in b98de40 but the fallback
code did not correctly handle the case where
a "selector" existed alongside a "partial_filter_selector".

This situation can occur when a the _index endpoint is
used to create a text index with a "selector". The resulting
design document contains an empty "partial_filter_selector"
field *and* the "selector" field that was passed in. The
previous implementation of the fallback would detect the
presence of "partial_filter_selector" and use the empty
value (match all docs) instead of faling back to the
"selector" field.

This commit changes the behaviour so that a "selector"
will be used even if an empty "partial_filter_selector"
is present. A secondary fix would be to change the index
creation so that we never use "selector" in the underlying
index design document, even if it is passed to the _index

2 weeks agoReturn friendly error message when creating user with invalid password (#1087)
Peng Hui Jiang [Sat, 6 Jan 2018 00:05:38 +0000 (08:05 +0800)] 
Return friendly error message when creating user with invalid password (#1087)

* Return friendly error message when creating user with invalid password
  - Return friendly error message instead of returning unknown_error
    and function_clause when creating a use with non-string password.

issue 1051

* Add check for salt

issue 1051

2 weeks agoMerge pull request #1091 from apache/better-mango-test-recreate-function
Eric Avdey [Thu, 4 Jan 2018 19:21:05 +0000 (15:21 -0400)] 
Merge pull request #1091 from apache/better-mango-test-recreate-function

Make sure mango tests's recreate fun creates db

2 weeks agoMake sure mango tests's recreate fun creates db 1091/head
Eric Avdey [Thu, 4 Jan 2018 16:05:36 +0000 (12:05 -0400)] 
Make sure mango tests's recreate fun creates db

Rapid same database deletion/creation is a known
antipattern prone to a race condition, especially
on slow VMs.

This fix modifies mango test's helper function
used for db recreation to ensure that we are actually
starting tests when a database created and empty.

2 weeks agoMerge pull request #1092 from apache/use-uuid-in-eunit-dbnames
Eric Avdey [Thu, 4 Jan 2018 17:42:09 +0000 (13:42 -0400)] 
Merge pull request #1092 from apache/use-uuid-in-eunit-dbnames

Use uuid in tmp db names in unit tests

2 weeks agoUse uuid in tmp db names in unit tests 1092/head
Eric Avdey [Thu, 4 Jan 2018 16:56:43 +0000 (12:56 -0400)] 
Use uuid in tmp db names in unit tests

This changes naming of temporary eunit databases
and files from using unique_monotonic_integer to
couch_uuids:random to remove performance penalty
and normalize naming across erlang releases.

Also getting rid of unnecessary inter-types

2 weeks agoMerge pull request #1090 from apache/cleanup-on-setup_eunit
Eric Avdey [Thu, 4 Jan 2018 16:55:42 +0000 (12:55 -0400)] 
Merge pull request #1090 from apache/cleanup-on-setup_eunit

Cleanup data dirs in eunit_plugin before test run

2 weeks agoCleanup data dirs in eunit_plugin before test run 1090/head
Eric Avdey [Thu, 4 Jan 2018 14:57:48 +0000 (10:57 -0400)] 
Cleanup data dirs in eunit_plugin before test run

We use `unique_monotonic_integer` to name
the test databases in unit testing.
That means that on erlang R > 18 we are always
creating databases with same names.

When unit tests crashing or don't properly
cleaning up on teardown, they are leaving behind
old database files, son on a next run tests'
setup fails with `database exists` exception.

This fix cleans up old database files
making sure we are always running unit tests
from same blank state.

4 weeks agoMerge pull request #1078 from cloudant/issue-832-couch_log-refactor
iilyak [Thu, 21 Dec 2017 00:17:18 +0000 (16:17 -0800)] 
Merge pull request #1078 from cloudant/issue-832-couch_log-refactor

Refactor couch_log.erl

4 weeks agoRefactor couch_log 1078/head
jiangphcn [Wed, 20 Dec 2017 05:37:51 +0000 (13:37 +0800)] 
Refactor couch_log

issue 832

4 weeks agoFix mango native proc crash (#1067)
Eric Avdey [Wed, 20 Dec 2017 20:44:33 +0000 (16:44 -0400)] 
Fix mango native proc crash (#1067)

Don't crash on receiving cast stop

When soft limit is reached couch_proc_manager
evicts idle processes by casting on them `stop`
message. Since mango_native_proc doesn't handle
this message it results to its crash with
`invalid_cast` reason.

4 weeks agoMango: change catch-all field range priority (#1069)
Will Holley [Tue, 19 Dec 2017 13:04:44 +0000 (13:04 +0000)] 
Mango: change catch-all field range priority (#1069)

01252f97 introduced a "catch-all" feature to Mango that allowed
queries to fall back on a full database scan (_all_docs) when
no valid index was available.

This worked by creating a special index range representing
the full database scan.

For example, a selector:

{ "_id": "foo" }

would be translated into a field range of:

[{ "startkey": "foo", "endkey": "foo"}]

then prepending the catch-all field range, we would have:

{ "startkey": null, "endkey": max_json_value},
{ "startkey": "foo", "endkey": "foo"}

This set gets passed into
mango_cursor_view:choose_best_index to determine most selective
index and field range combination to use. Unfortunately, in
the event that we have one possible index (all_docs) and multiple
valid ranges, it just chooses the first range it finds -
the full index scan in this case.

This commit makes the catch-all field range the last
available option, ensuring we use the more selective
range where available.

5 weeks agoFix haproxy stats (#1039)
Geoff Cox [Fri, 15 Dec 2017 20:54:40 +0000 (12:54 -0800)] 
Fix haproxy stats (#1039)

- `stats scope .` ends up blocking all backends
- Renaming endpoint from `_stats` to `_haproxy_stats` so that it doesn't collide with CouchDB's `_stats` endpoint
- Added a commented out stats auth line so that you can easily password protect

5 weeks agoAdd couch_stats tracking back to couch_log (#1064)
Peng Hui Jiang [Fri, 15 Dec 2017 02:28:19 +0000 (10:28 +0800)] 
Add couch_stats tracking back to couch_log (#1064)

issue #832

5 weeks agoAdd coverage reports to more applications
Nick Vatamaniuc [Mon, 11 Dec 2017 21:50:30 +0000 (16:50 -0500)] 
Add coverage reports to more applications

5 weeks agoMultiple fixes and refactoring of couch tests. (#1062)
Eric Avdey [Mon, 11 Dec 2017 23:11:03 +0000 (19:11 -0400)] 
Multiple fixes and refactoring of couch tests. (#1062)

5 weeks agoAllow to use index with or (#1038)
Will Holley [Mon, 11 Dec 2017 13:25:53 +0000 (13:25 +0000)] 
Allow to use index with or (#1038)

Since #816, mango JSON index on compound fields can be
selected only if the selector make sure that all the fields
listed in the index are always present.

This adds a special case where all clauses of an `$or` can
ensure that a field is present.

For instance, if I had an index:

[A, B]

is_usable would now return true for the selector:

  "A": "foo",
  "$or": {
    "B": "bar",
    "B": "baz"

but false for:

  "A": "foo",
  "$or": {
    "B": "bar",
    "C": "bar"

6 weeks agoMake q configurable for peruser dbs
jiangphcn [Thu, 30 Nov 2017 03:58:08 +0000 (11:58 +0800)] 
Make q configurable for peruser dbs
issue 875

6 weeks agoFix replicator create target options test
Nick Vatamaniuc [Tue, 5 Dec 2017 20:42:47 +0000 (15:42 -0500)] 
Fix replicator create target options test

Don't need to use local as source since it doesn't test anything specific to
the code in question. Use credentials with http requests as it's a more
realistic scenario. Avoid spawning couch server twice - once to start chttpd
and then to start other couch servers.

7 weeks agoRemove references to etap
Adam Kocoloski [Fri, 1 Dec 2017 00:32:16 +0000 (19:32 -0500)] 
Remove references to etap

7 weeks agoRemove Bob's 2.0 TODO list
Adam Kocoloski [Tue, 28 Nov 2017 22:58:06 +0000 (17:58 -0500)] 
Remove Bob's 2.0 TODO list


7 weeks agoRemove Spidermonkey as an "optional" depedency
Adam Kocoloski [Tue, 28 Nov 2017 22:44:49 +0000 (17:44 -0500)] 
Remove Spidermonkey as an "optional" depedency

It's required, and thus would already have been isntalled via the
instructions in the INSTALL file. Also we don't mention it for any
other operating system here.

7 weeks agoFix eunit "suites" example
Adam Kocoloski [Tue, 28 Nov 2017 22:36:18 +0000 (17:36 -0500)] 
Fix eunit "suites" example

As far as I can tell rebar will run all tests in an application
if the specified suites are not found. Also, rebar appends the
_tests suffix to the name of the suite automatically when it
executes the search.

7 weeks agowarn instead of error when use_index not valid (#962)
Will Holley [Thu, 30 Nov 2017 19:53:19 +0000 (19:53 +0000)] 
warn instead of error when use_index not valid (#962)

If a user specifies a value for use_index that is not
valid for the selector - i.e. it does not meet the coverage
requirements of the selector or sort fields - attempt
to fall back to a valid index (or database scan) rather
than returning a 400 error.

When a fallback occurs, populate the "warning" field
in the response (as we already do when a full database
scan takes place) with details of the fallback.

This change is partially as mitigation for #816, which may
lead to some previously valid indexes being deemed invalid,
and also to make use_index less brittle in general. If
an index that is used explicitly by active queries is removed,
Couch will now generate warnings and there may be a performance
impact, but the client will still get correct results.

7 weeks agoRemove invalid meck unload
Eric Avdey [Thu, 30 Nov 2017 17:25:01 +0000 (13:25 -0400)] 
Remove invalid meck unload

Remove invalid meck unload and catch around unload
that was hiding this issue.

7 weeks agoAdd missing methods to fake index
Eric Avdey [Thu, 30 Nov 2017 17:17:35 +0000 (13:17 -0400)] 
Add missing methods to fake index

Mocked index module missing a couple of methods
called on late compaction stages. This leads
to a crash, but since it's happening after
the test's assertions, it bring the test to fail.

Also small refactoring to encapsulate all mocking
in a single function and move unrelated parts
back to test's setup.

7 weeks agoAllow replicator documents to include params for db creation
jiangphcn [Fri, 24 Nov 2017 14:41:37 +0000 (22:41 +0800)] 
Allow replicator documents to include params for db creation
  - specify q in "create_target_params": {"q": "1", ...}

7 weeks agoFix _explain for sort descending (#1025)
Will Holley [Tue, 28 Nov 2017 11:30:14 +0000 (11:30 +0000)] 
Fix _explain for sort descending (#1025)

Handle the case when startkey and endkey
are reversed. To create valid JSON we need to
replace the internal representation of the startkey
with a string.

Fixes #1023

8 weeks agoTest duplicate fields in Mango selector (#998)
Will Holley [Thu, 23 Nov 2017 09:26:07 +0000 (10:26 +0100)] 
Test duplicate fields in Mango selector (#998)

Adds a test to verify the behaviour of duplicate
fields in a Mango selector.

The fix for CVE-2017-12635 resulted in CouchDB's
JSON parser only recognising the last instance
of duplicated fields in a JSON object. This
represents a breaking change to Mango (_find)
because, previuously, all instances would have
been considered when evaluating a selector.

This test verifies that Mango now only considers
the last instance of a field, silently ignoring
those that appear before it.

TBD whether we can or should show an error when
this occurs, since this leads to predicates
silently being ignored.

8 weeks agoFix index validation for nested $and (#1014)
Will Holley [Thu, 23 Nov 2017 08:04:17 +0000 (09:04 +0100)] 
Fix index validation for nested $and (#1014)

mango_selector:has_required_fields checks that a list of
indexed fields is covered by a given selector. The implementation
recurses through the selector, tracking fields that encounters.

Unfortunately, this skipped peers of combination operators. For

"selector": {
"A": "foo"
"B": "bar"

would skip the first nested "$and" operator and only return "B"
as a covered field.

This commit explicitly handles this situation (the only combination
operator we care about is $and), so for the above selector we
would correctly indentify "A" and "B" as covered fields.

8 weeks agoFix replicator cluster stability race condition
Nick Vatamaniuc [Mon, 20 Nov 2017 17:29:43 +0000 (12:29 -0500)] 
Fix replicator cluster stability race condition

Replicator clustering module is in charge of keeping track of when the cluster
is stable or unstable. A cluster is said to be "stable" if there aren't any
new nodes added or removed for some period of time.

Replicator document processor uses cluster state to determine what to do with
document updates as they come in. If a document update comes during a time when
cluster is unstable, the update is skipped. The idea is that when cluster
becomes stable again, all the documents will be rescanned anyway.

In order for document updates to not be dropped, there is an implicit
constraint when cluster becomes stable -- after(couch_replicator_notifier
gen_event broadcasts `{cluster, stable}` event, any subsequent calls to
`couch_replicator_clustering:is_stable()` would return `true`. If that's not
the case then this sequence of events is possible:

1. `mem3_cluster` process calls the `cluster_stable` callback

2. `couch_replicator_notifier` broadcasts `{cluster, stable}` event

3. `couch_replicator_doc_processor` starts processing documents

4. On first document update `couch_replicator_clustering:is_stable()` is
`false`, because that gen_server wasn't notifier yet.

5. Document update is dropped.

6. There won't be any rescans until cluster membership is changed again.

To fix this, switch to setting stable state first via a `gen_server` call. This
way after the `{cluster, stable}` has been called, `is_stable()` is guaranteed to
return `true`.

Note: This issue is mostly theoretical. It was noticed when examining the code
related to another bug. The chance of the clustering process going to sleep
immediately after gen_event broadcast, then not handling the cast long enough
for a document to be processed by doc processor is pretty low in practice.

2 months agoUpdate
Diana Thayer [Tue, 21 Nov 2017 00:55:37 +0000 (16:55 -0800)] 

2 months agoMove cluster_start_period and cluster_quiet_period to replicator section
Nick Vatamaniuc [Fri, 17 Nov 2017 22:25:59 +0000 (17:25 -0500)] 
Move cluster_start_period and cluster_quiet_period to replicator section

Somehow entries ended up under [couch_per_user] but should be in the
[replicator] section.

2 months ago(typo) fetchig -> fetching
Diana Thayer [Fri, 17 Nov 2017 20:23:32 +0000 (12:23 -0800)] 
(typo) fetchig -> fetching

2 months agoImprove Mango test suite performance (#995)
Will Holley [Thu, 16 Nov 2017 08:21:56 +0000 (08:21 +0000)] 
Improve Mango test suite performance (#995)

* Remove artificial delays from database and index create/delete.
* Wait for indexes to report as created/deleted during test setup.
* Skip unnecessary database delete/create cycles.
* Default to n=1 when creating test databases. We don't have
 tests that explicitly test n=3 scenarios and the tests generally
 run on a single-node harness. Defaulting to n=1 allows the test
 behaviour to be consistent when run on multi-node clusters.
* Add delay on cluster setup for Mango tests to mitigate tests
 running before async cluster setup completes.

2 months agoThrow error on invalid use_index value (#989)
Will Holley [Wed, 15 Nov 2017 14:43:01 +0000 (14:43 +0000)] 
Throw error on invalid use_index value (#989)

Throw an error when a user specifies a value in
"use_index", of the form [<ddoc id>, <name>],
that cannot be used for the current query selector.

Fixes #988

2 months agofix exists false when field is explicitly defined (#863)
Tony Sun [Tue, 14 Nov 2017 18:35:42 +0000 (10:35 -0800)] 
fix exists false when field is explicitly defined (#863)

When users explicitly defined a text index's fields, and used $exists
with false, we tag false when constructing the query. This led to a
function clause for indexable_fields since we did not account for it.
This fix patches that up, but note that we don't care about the false
value itself since we only care about fields.

2 months agoFix Mango text index tests (#971)
Will Holley [Tue, 14 Nov 2017 13:20:15 +0000 (13:20 +0000)] 
Fix Mango text index tests (#971)

The text index tests are not routinely run by the Couch CI
(due to an external dependency that isn't shipped with Couch).
This fixes a number of tests that were broken as a result of
recent feature changes.

2 months agoRevert to ubuntu Jenkins label, uids now standardised
Joan Touzet [Sun, 12 Nov 2017 04:06:27 +0000 (23:06 -0500)] 
Revert to ubuntu Jenkins label, uids now standardised

2 months ago404 status for non using uri in _scheduler (#953)
sts [Wed, 8 Nov 2017 07:11:00 +0000 (09:11 +0200)] 
404 status for non using uri in _scheduler (#953)

2 months agoVersion bump to 2.2.0 for future release
Joan Touzet [Mon, 6 Nov 2017 20:47:21 +0000 (15:47 -0500)] 
Version bump to 2.2.0 for future release

2 months agoFix EUnit test suite on Windows
Joan Touzet [Mon, 6 Nov 2017 03:10:57 +0000 (22:10 -0500)] 
Fix EUnit test suite on Windows

1. You cannot create file names with " in them on Windows...
2. When you update Makefile, you have to update sometimes too.

2 months agoFix user-specified ddoc name in Mango (#961)
Will Holley [Fri, 3 Nov 2017 14:08:50 +0000 (14:08 +0000)] 
Fix user-specified ddoc name in Mango (#961)

When creating a Mango index, we allow the user to specify
a design document name. This can be of the form "_design/foo"
or just "foo", with the expectation that Mango would
automatically add the "_design" prefix.

This fixes a bug whereby if the user specified "_design/foo",
Mango was prefixing this again, creating a design document called

2 months agoAdd tests for error on invalid `docs` attribute
Eric Avdey [Thu, 2 Nov 2017 13:54:15 +0000 (10:54 -0300)] 
Add tests for error on invalid `docs` attribute

2 months agoReturn error 400 on invalid new_edits value
Eric Avdey [Thu, 2 Nov 2017 13:51:13 +0000 (10:51 -0300)] 
Return error 400 on invalid new_edits value

End-point `_bulk_docs` crashes if provided
with non-boolean value for `new_edits` parameter.

This patch changes it to return "Bad Request"
error instead.

2 months agoDo not always return partial_filter_selector (#951)
garren smith [Wed, 1 Nov 2017 15:45:32 +0000 (17:45 +0200)] 
Do not always return partial_filter_selector (#951)

For Get / _index only return the partial_filter_selector for an index if
it is set to something other than default

2 months agofix external size bug when seq btree exists (#849)
Tony Sun [Wed, 1 Nov 2017 00:54:28 +0000 (17:54 -0700)] 
fix external size bug when seq btree exists (#849)

When users specify "options":  {"seq_indexed": true}, we will run
reduced_external_size/1 on seq btrees. The reduce will return an
integer because the reduce function is:
This leads to a bad match error. Thanks @jiangphcn for finding this.

2 months agore-add query
Jan Lehnardt [Tue, 31 Oct 2017 21:00:18 +0000 (22:00 +0100)] 
re-add query

2 months agoUpdate NOTICE: remove autoconf/m4 references and revert react patents note
Jan Lehnardt [Tue, 31 Oct 2017 10:32:48 +0000 (11:32 +0100)] 
Update NOTICE: remove autoconf/m4 references and revert react patents note

2 months agoRevert "faet: reject user docs with duplicate keys"
Jan Lehnardt [Tue, 31 Oct 2017 17:50:06 +0000 (18:50 +0100)] 
Revert "faet: reject user docs with duplicate keys"

This reverts commit 42adcc1a0849f65f9ef4d55aafe11b3aa59512a9.

2 months agoConfigurable delay before retrying on missing_doc error
Nick Vatamaniuc [Mon, 30 Oct 2017 18:41:23 +0000 (14:41 -0400)] 
Configurable delay before retrying on missing_doc error

Implement a configurable delay before retrying a document fetch in replicator.

missing_doc exceptions usually happen when there is a continuous replication
set up and the source is updated. The change might appear in the changes feed,
but when worker tries to fetch the document's revisions it talks to a
node where internal replication hasn't caught up and so it throws an exception.

Previously the delay was hard-coded at 0 (that is retrying was immediate). The
replication would still make progress, but after crashing, retrying and
generating a lot of unnecessary log noise. Since updating a source while
continuous replication is running is a common scenario, it's worth optimizing
for it and avoiding wasting resources and spamming logs.

2 months agoUpdate jiffy to use dedupe_keys
Paul J. Davis [Mon, 30 Oct 2017 21:47:06 +0000 (16:47 -0500)] 
Update jiffy to use dedupe_keys

2 months agoReturn error 410 on temporary view request
Eric Avdey [Mon, 30 Oct 2017 17:07:57 +0000 (14:07 -0300)] 
Return error 410 on temporary view request

2 months agofix(peruser_test): on slow CI vms, we can get Cluster timeouts
Jan Lehnardt [Sun, 29 Oct 2017 07:54:40 +0000 (08:54 +0100)] 
fix(peruser_test): on slow CI vms, we can get Cluster timeouts

2 months agoUpdating verifyinstall URL
Muaaz Saleem [Sun, 29 Oct 2017 14:48:16 +0000 (15:48 +0100)] 
Updating verifyinstall URL

While going to http://localhost:5984/_utils/verify_install.html returns `Not found.`, browsing to `http://localhost:5984/_utils/#/verifyinstall` works. Maybe the url is outdated

2 months agowhitespace
Tony Sun [Sat, 28 Oct 2017 18:57:23 +0000 (11:57 -0700)] 

2 months agoadd delay for bulk_delete and create
Tony Sun [Sat, 28 Oct 2017 16:15:22 +0000 (09:15 -0700)] 
add delay for bulk_delete and create

2 months agoup delay
Tony Sun [Fri, 27 Oct 2017 18:20:03 +0000 (11:20 -0700)] 
up delay

2 months agouse delay instead
Tony Sun [Fri, 27 Oct 2017 17:43:58 +0000 (10:43 -0700)] 
use delay instead

2 months agouse string for w value
Tony Sun [Fri, 27 Oct 2017 01:13:23 +0000 (18:13 -0700)] 
use string for w value

2 months agoUpdate w value for deletion since n=1
Tony Sun [Fri, 27 Oct 2017 00:57:57 +0000 (17:57 -0700)] 
Update w value for deletion since n=1

Mango tests are failing due to flaky index deletion issues. We change
the value of w to 1 since n=1.

2 months agofeat: port time funs, as per #883
Jan Lehnardt [Sat, 28 Oct 2017 11:51:21 +0000 (13:51 +0200)] 
feat: port time funs, as per #883

2 months agofix: peruser tests: use spinlocks instead of timer:sleep()
Jan Lehnardt [Fri, 27 Oct 2017 08:00:02 +0000 (10:00 +0200)] 
fix: peruser tests: use spinlocks instead of timer:sleep()

2 months agofaet: reject user docs with duplicate keys
Jan Lehnardt [Wed, 25 Oct 2017 19:36:37 +0000 (21:36 +0200)] 
faet: reject user docs with duplicate keys

2 months agowhitespace
Jan Lehnardt [Thu, 26 Oct 2017 05:56:12 +0000 (07:56 +0200)] 

2 months agoCleanups for 2.1.1 proper version tagging
Joan Touzet [Sat, 21 Oct 2017 03:52:25 +0000 (23:52 -0400)] 
Cleanups for 2.1.1 proper version tagging

2 months agoAlias /_node/_local/... to /_node/<nodename>@<hostname>/...
Joan Touzet [Thu, 26 Oct 2017 02:46:36 +0000 (22:46 -0400)] 
Alias /_node/_local/... to /_node/<nodename>@<hostname>/...

Closes #824

2 months agoTravis: s/20.0/20.1 for build
Joan Touzet [Wed, 25 Oct 2017 20:27:55 +0000 (16:27 -0400)] 
Travis: s/20.0/20.1 for build

2 months agoDisable eval() and Function() constructor in JS by default
Joan Touzet [Wed, 25 Oct 2017 20:16:37 +0000 (16:16 -0400)] 
Disable eval() and Function() constructor in JS by default

This changes the couchjs --no-eval flag to --eval and disables
eval() and Function() constructors by default in couchjs.

2 months agoBlacklist some config sections from HTTP PUT/DELETE operations
Joan Touzet [Wed, 25 Oct 2017 16:35:02 +0000 (12:35 -0400)] 
Blacklist some config sections from HTTP PUT/DELETE operations

2 months agoadd ability to ignore javascript test suites (#889)
Tony Sun [Wed, 25 Oct 2017 19:40:30 +0000 (12:40 -0700)] 
add ability to ignore javascript test suites (#889)

Developers can now ignore javascript test suites with the new option

Example usage:

make javascript ignore_js_suites="all_docs basics"
make javascript suites="all_docs basics view_errors" ignore_js_suites=

The second example is redundant but the functionality works.

2 months agofeat: add warning about redirects without a slash
Jan Lehnardt [Tue, 24 Oct 2017 06:42:24 +0000 (08:42 +0200)] 
feat: add warning about redirects without a slash

3 months agoMango test README formatting 902/head
Will Holley [Wed, 18 Oct 2017 10:29:13 +0000 (11:29 +0100)] 
Mango test README formatting

3 months agoConfigurable Mango test parameters (#899)
Will Holley [Wed, 18 Oct 2017 10:25:53 +0000 (11:25 +0100)] 
Configurable Mango test parameters (#899)

The Mango test suite previously assumed that the target
CouchDB for testing was at with
username "testuser" and password "testpass".

It's helpful to be able to override these defaults
so we can test against other environments, including those
that do not support basic authentication. This commit
adds support for overriding the defaults using environment

Now that we enable tests to be run against remote
clusters, default to n=1 at database creation time
to prevent assertion failures due to eventual
consistency between replicas.

3 months agoMango text index test fixes (#894)
Will Holley [Tue, 17 Oct 2017 15:28:00 +0000 (16:28 +0100)] 
Mango text index test fixes (#894)

* Split out text index selection tests
* Skip operator tests that do not apply to text indexes
* Only run array length tests against text indexes
* Fix index crud tests when text indexes available
* Use environment variable to switch on text tests
* Fix incorrect text sort assertion in test
* Always use -test in fixture filename
* Fix index selection test compatibility with #816.
* Improve test README

3 months agoAdd test to show selector works with old design docs (#893)
garren smith [Tue, 17 Oct 2017 09:11:16 +0000 (11:11 +0200)] 
Add test to show selector works with old design docs (#893)

Add a test to show the parital_filter_selector functionality will work
with design docs that don't have a selector defined in it by default

3 months agoFix maximum key value when using JSON indexes (#881)
Will Holley [Mon, 16 Oct 2017 15:01:47 +0000 (16:01 +0100)] 
Fix maximum key value when using JSON indexes (#881)

Mango previously constrained range queries against JSON indexes
(map/reduce views) to startkey=[]&endkey=[{}]. In Mango, JSON
index keys are always compound (i.e. always arrays), but this
restriction resulted in Mango failing to match documents where
the indexed value was an object.

For example, an index with keys:

[{"foo": 3}]

would be restricted such that only [1] and [2] were returned
if a range query was issued.

On its own, this behaviour isn't necessarily unintuitive, but
it is different from the behaviour of a non-indexed Mango
query, so the query results would change in the presence of an

Additonally, it prevented operators or selectors which explicitly
depend on a full index scan (such as $exists) from returning a
complete result set.

This commit changes the maximum range boundary from {} to a
value that collates higher than any JSON object, so all
array/compound keys will be included.

Note that this uses an invalid UTF-8 character, so we depend
on the view engine not barfing when this is passed as a
parameter. In addition, we can't represent the value in JSON
so we need to subtitute is when returning a query plan
in the _explain endpoint.

3 months agoJenkins: Add Debian 9 (stretch), drop Ubuntu 12.04 (precise) (#891)
Joan Touzet [Sun, 15 Oct 2017 17:40:29 +0000 (13:40 -0400)] 
Jenkins: Add Debian 9 (stretch), drop Ubuntu 12.04 (precise) (#891)

3 months agoUpdate Unix install dependencies (FreeBSD) (#888)
Adriano Melo [Fri, 13 Oct 2017 17:50:06 +0000 (19:50 +0200)] 
Update Unix install dependencies (FreeBSD) (#888)

3 months agoFix incorrect index selection when sort specified (#866)
Will Holley [Thu, 12 Oct 2017 16:42:50 +0000 (17:42 +0100)] 
Fix incorrect index selection when sort specified (#866)

It seems safe to assume that if a user specifies that
results should be sorted by a field, that field needs to exist
(but could be null) in the results returned.

In #816 we can only use an index if all its columns are
required to exist in the selector, so this improves
compatibility with the old behaviour by allowing sort
fields to be included in the index coverage check for
JSON indexes.

3 months agoMerge pull request #882 from apache/janl-patch-1
Jan Lehnardt [Thu, 12 Oct 2017 13:40:29 +0000 (15:40 +0200)] 
Merge pull request #882 from apache/janl-patch-1

no need to make it look one needs to create an issue on top of a PR

3 months agochore: no need to make it look one needs to create an issue on top of a PR 882/head
Jan Lehnardt [Mon, 9 Oct 2017 19:38:42 +0000 (21:38 +0200)] 
chore: no need to make it look one needs to create an issue on top of a PR

3 months agoFix cluster upgrades when deploying ddoc_cache
Paul J. Davis [Tue, 10 Oct 2017 17:28:55 +0000 (12:28 -0500)] 
Fix cluster upgrades when deploying ddoc_cache

As it turns out I made a bit of a mistake when I forgot that the old
ddoc_cache implementation had an ets_lru process registered as
ddoc_cache_lru. These cast messages were causing that process to crash.
If a cluster had enough design document activity and enough nodes this
would cause nodes with the old ddoc_cache implementation to reboot the
entire VM. This was a cascading failure due to the ets_lru process
restarting frequently enough that it brought down the entire ddoc_cache

3 months agoFix erlang time module compatibility
Nick Vatamaniuc [Mon, 9 Oct 2017 21:04:21 +0000 (17:04 -0400)] 
Fix erlang time module compatibility

`now/0` is deprecated since Erlang 18.0, and a set of new time related
functions are available.

Usually `now/0` can be replaced with `os:timestamp/0`, however in some
instances it was used effectively to produce monotonically incrementing values
rather than timestamps. So added a new `couch_util:unique_monotonic_integer/0`.

Most functional changes are in couch_uuid module. There `now/0` was used both
as a timestamp and for uniqueness. To emulate previous behavior, a local
incrementing clock sequence is used. If `os:timestamp/0` does not advance since
last call then the local clock is advanced by 1 microsecond and that's used to
generate the next V1 UUIDs. As soon as os:timestamp/0` catches up, the local
sequence reset to that latest value.

Also exported function `utc_random/0` was not used, after updating the function
it wasn't exported anymore.

3 months agoMake couch_peruser a proper Erlang app (#756)
Russell Branca [Wed, 11 Oct 2017 00:54:14 +0000 (17:54 -0700)] 
Make couch_peruser a proper Erlang app (#756)

* Make couch_peruser a proper Erlang app
* Start and stop couch_peruser in the test suite
* feat: mango test runner: do not rely on timeout for CouchDB start alone

On slow build nodes, 10 seconds might not be enough of a wait.

* Ensure a user creation is handlined on one node only

This patch makes use of the mechanism that ensures that replications
are only run on one node.

When the cluster has nodes added/removed all changes listeners are

* track cluster state in gen_server state and get notfied from mem3 directly

* move couch_replication_clustering:owner/3 to mem3.erl

* remove reliance on couch_replicator_clustering, handle cluster state internally

* make sure peruser listeners are only initialised once per node

* add type specs

* fix tests

* simplify definition

* add registered modules

* remove leftover code from olde notification system

* s/clusterState/state/ && s/state/changes_state/

* s,init/0,init_state/0,

* move function declaration around for internal consistency

* whitespace

* update README

* document ini entries

* unlink changes listeners before exiting them so we survive

* fix state call

* fix style

* fix state

* whitespace and more state fixes

* 80 cols

Closes #749

3 months agoMerge pull request #797 from apache/improve-reduce-limit-errors
Jan Lehnardt [Tue, 10 Oct 2017 06:38:42 +0000 (08:38 +0200)] 
Merge pull request #797 from apache/improve-reduce-limit-errors

Return reduce overflow errors to the client

3 months agoReturn reduce overflow errors to the client 797/head
Paul J. Davis [Thu, 7 Sep 2017 19:37:36 +0000 (14:37 -0500)] 
Return reduce overflow errors to the client

This changes the reduce overflow error to return an error to the client
rather than blowing up the view build. This allows views that have a
single bad reduce to build while not crushing the server's RAM usage.

3 months agoUnit tests now pass on 20.0. Eenable it in rebar.config and in Travis
Nick Vatamaniuc [Sat, 7 Oct 2017 07:22:21 +0000 (03:22 -0400)] 
Unit tests now pass on 20.0. Eenable it in rebar.config and in Travis

3 months agoFix attachments tests for 20.0 compatibility
Nick Vatamaniuc [Sat, 7 Oct 2017 07:19:15 +0000 (03:19 -0400)] 
Fix attachments tests for 20.0 compatibility

Previously gzip compression asssumed that only one final result chunk would be
emitted during finalization. But in general, and specifically in 20.0 that's
not true.

3 months agoBump khash, b64, ioq deps
Nick Vatamaniuc [Thu, 5 Oct 2017 17:34:53 +0000 (13:34 -0400)] 
Bump khash, b64, ioq deps

To fix random compatibility issue

3 months agoHandle deprecated random module
Nick Vatamaniuc [Tue, 3 Oct 2017 06:14:22 +0000 (02:14 -0400)] 
Handle deprecated random module

Use erlang release version to decide if the newer `rand` module is present or

`erlang:function_exported(rand, uniform, 0)` could not be used here as it
returns false when function isn't loaded, even if module and function are both

3 months agoCorrect result count in Mango execution stats (#867)
Will Holley [Thu, 5 Oct 2017 14:27:02 +0000 (15:27 +0100)] 
Correct result count in Mango execution stats (#867)

Mango execution stats previously incremented the result count
at a point where the final result might be discarded. Instead,
increment the count when we know the result is being included
in the response.