summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Merge branch 'master' into better-mango-test-recreate-functionbetter-mango-test-recreate-functionEric Avdey2018-01-041-0/+20
|\
| * Merge pull request #1090 from apache/cleanup-on-setup_eunitEric Avdey2018-01-041-0/+20
| |\ | | | | | | Cleanup data dirs in eunit_plugin before test run
| | * Cleanup data dirs in eunit_plugin before test runEric Avdey2018-01-041-0/+20
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | Make sure mango tests's recreate fun creates dbEric Avdey2018-01-041-6/+8
|/ | | | | | | | | | 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.
* Merge pull request #1078 from cloudant/issue-832-couch_log-refactoriilyak2017-12-201-24/+9
|\ | | | | Refactor couch_log.erl
| * Refactor couch_logjiangphcn2017-12-211-24/+9
|/ | | | issue 832
* Fix mango native proc crash (#1067)Eric Avdey2017-12-202-2/+36
| | | | | | | | | | 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.
* Mango: change catch-all field range priority (#1069)Will Holley2017-12-192-3/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Fix haproxy stats (#1039)Geoff Cox2017-12-151-2/+2
| | | | | | - `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
* Add couch_stats tracking back to couch_log (#1064)Peng Hui Jiang2017-12-145-16/+35
| | | issue #832
* Add coverage reports to more applicationsNick Vatamaniuc2017-12-115-3/+10
|
* Multiple fixes and refactoring of couch tests. (#1062)Eric Avdey2017-12-113-134/+169
|
* Allow to use index with or (#1038)Will Holley2017-12-112-7/+181
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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" } }
* Make q configurable for peruser dbsjiangphcn2017-12-084-16/+70
| | | | issue 875
* Fix replicator create target options testNick Vatamaniuc2017-12-051-62/+51
| | | | | | | 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.
* Remove references to etapAdam Kocoloski2017-12-014-46/+0
|
* Remove Bob's 2.0 TODO listAdam Kocoloski2017-12-011-10/+0
| | | | :)
* Remove Spidermonkey as an "optional" depedencyAdam Kocoloski2017-12-011-1/+1
| | | | | | 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.
* Fix eunit "suites" exampleAdam Kocoloski2017-12-011-1/+1
| | | | | | | 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.
* warn instead of error when use_index not valid (#962)Will Holley2017-11-306-81/+112
| | | | | | | | | | | | | | | | | | 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.
* Remove invalid meck unloadEric Avdey2017-11-302-4/+2
| | | | | Remove invalid meck unload and catch around unload that was hiding this issue.
* Add missing methods to fake indexEric Avdey2017-11-302-6/+9
| | | | | | | | | | | 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.
* Allow replicator documents to include params for db creationjiangphcn2017-11-284-8/+177
| | | | | - specify q in "create_target_params": {"q": "1", ...} issue-887
* Fix _explain for sort descending (#1025)Will Holley2017-11-282-1/+9
| | | | | | | | 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
* Test duplicate fields in Mango selector (#998)Will Holley2017-11-231-0/+12
| | | | | | | | | | | | | | | | | | | 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.
* Fix index validation for nested $and (#1014)Will Holley2017-11-232-13/+54
| | | | | | | | | | | | | | | | | | | | | | | | | | 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 example, "selector": { "$and":[ "$and":[ "A": "foo" ], "$and":[ "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.
* Fix replicator cluster stability race conditionNick Vatamaniuc2017-11-221-10/+63
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Update COMMITTERS.mdDiana Thayer2017-11-201-1/+1
|
* Move cluster_start_period and cluster_quiet_period to replicator sectionNick Vatamaniuc2017-11-171-4/+4
| | | | | Somehow entries ended up under [couch_per_user] but should be in the [replicator] section.
* (typo) fetchig -> fetchingDiana Thayer2017-11-171-1/+1
|
* Improve Mango test suite performance (#995)Will Holley2017-11-162-8/+34
| | | | | | | | | | | | * 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.
* Throw error on invalid use_index value (#989)Will Holley2017-11-152-2/+31
| | | | | | | 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
* fix exists false when field is explicitly defined (#863)Tony Sun2017-11-142-0/+53
| | | | | | | 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.
* Fix Mango text index tests (#971)Will Holley2017-11-144-23/+22
| | | | | | 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.
* Revert to ubuntu Jenkins label, uids now standardisedJoan Touzet2017-11-121-13/+14
|
* 404 status for non using uri in _scheduler (#953)sts2017-11-081-0/+2
|
* Version bump to 2.2.0 for future releaseJoan Touzet2017-11-062-3/+3
|
* Fix EUnit test suite on WindowsJoan Touzet2017-11-062-2/+5
| | | | | 1. You cannot create file names with " in them on Windows... 2. When you update Makefile, you have to update Makefile.win sometimes too.
* Fix user-specified ddoc name in Mango (#961)Will Holley2017-11-031-1/+10
| | | | | | | | | | 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 "_design/_design/foo".
* Add tests for error on invalid `docs` attributeEric Avdey2017-11-021-0/+10
|
* Return error 400 on invalid new_edits valueEric Avdey2017-11-022-1/+13
| | | | | | | | 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.
* Do not always return partial_filter_selector (#951)garren smith2017-11-013-1/+20
| | | | | | | For Get / _index only return the partial_filter_selector for an index if it is set to something other than default
* fix external size bug when seq btree exists (#849)Tony Sun2017-10-313-12/+63
| | | | | | | 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: couch_db_updater:btree_by_seq_reduce/2. This leads to a bad match error. Thanks @jiangphcn for finding this.
* re-add queryJan Lehnardt2017-10-311-0/+4
|
* Update NOTICE: remove autoconf/m4 references and revert react patents noteJan Lehnardt2017-10-311-23/+1
|
* Revert "faet: reject user docs with duplicate keys"Jan Lehnardt2017-10-312-64/+10
| | | | This reverts commit 42adcc1a0849f65f9ef4d55aafe11b3aa59512a9.
* Configurable delay before retrying on missing_doc errorNick Vatamaniuc2017-10-312-0/+16
| | | | | | | | | | | | | | | 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.
* Update jiffy to use dedupe_keysPaul J. Davis2017-10-312-2/+2
|
* Return error 410 on temporary view requestEric Avdey2017-10-302-1/+13
|
* fix(peruser_test): on slow CI vms, we can get Cluster timeoutsJan Lehnardt2017-10-291-10/+24
|