| Commit message (Collapse) | Author | Age | Files | Lines |
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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 unload and catch around unload
that was hiding this issue.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | |
|
| |
| |
| |
| | |
:)
|
| |
| |
| |
| |
| |
| | |
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.
|
|/
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
- specify q in "create_target_params": {"q": "1", ...}
issue-887
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
Somehow entries ended up under [couch_per_user] but should be in the
[replicator] section.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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 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
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
1. You cannot create file names with " in them on Windows...
2. When you update Makefile, you have to update Makefile.win sometimes too.
|
|
|
|
|
|
|
|
|
|
| |
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".
|
| |
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
For Get / _index only return the partial_filter_selector for an index if
it is set to something other than default
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
|
|
|
| |
This reverts commit 42adcc1a0849f65f9ef4d55aafe11b3aa59512a9.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
|
|
| |
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
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Mango tests are failing due to flaky index deletion issues. We change
the value of w to 1 since n=1.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Closes #824
|
| |
|