| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
Fixes #977
|
|
|
|
|
|
| |
- don't display credential information for user who
just wants to check replication status. In basic authentication,
the credential information is available in header field of doc
|
|
|
|
|
| |
We removed the Dockerfile in 6e57c43a and moved all Docker-related
materials to apache/couchdb-docker, but we never cleaned up the
Makefile targets or developer documentation.
|
|
|
|
| |
Fixes #876
|
|\
| |
| |
| |
| | |
apache/fix-create_delete_database_continuously-test
Set eunit timeout on a whole test object
|
|/ |
|
|
|
|
| |
Fixes #820
|
| |
|
|\
| |
| | |
Return update_seq and offset when update_seq is true and keys is set
|
|/
|
|
| |
issue 969
|
|
|
|
|
| |
Fix a random mashup of test object generators
with normal assertions.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
API.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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
|
|\
| |
| | |
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.
|
|\
| |
| | |
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
convertion.
|
|\
| |
| | |
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.
|
|\
| |
| | |
Refactor couch_log.erl
|
|/
|
|
| |
issue 832
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
- `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
|
|
|
| |
issue #832
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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"
}
}
|
|
|
|
| |
issue 875
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
:)
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
- 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.
|