| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
It's possible for other couch_epi plugins to interfere with this test,
so mock `couch_epi:decide/5` to always return `no_decision`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, if the metadata key is bumped in a transaction, the same
transaction could not be used to add jobs with `couch_jobs`. That's because
metadata is a versionstamped value, and when set, it cannot be read back until
that transaction has committed. In `fabric2_fdb` there is a process dict key
that is set which declares that metadata was already read, which happens before
any db update, however `couch_jobs` uses it's own caching mechanism and doesn't
know about that pdict key.
Ideally we'd implement a single `couch_fdb` module to be shared between
`couch_jobs` and `fabric2_db` but until then it maybe simpler to just let
`couch_jobs` use its own metadata key. This way, it doesn't get invalidated or
bumped every time dbs get recreated or design docs are updated. The only time
it would be bumped is if the FDB layer prefix changed at runtime.
|
|
|
|
|
|
|
|
| |
We already handle them in couch_jobs_type_monitor so let's do it in
`couch_jobs:wait_pending` as well. Recent fixes in FDB 6.2 didn't completely
fix the issue and ther are still spurious 1009 errors dumped in the logs. They
seem to be benign as far as couch_jobs operation goes as type monitor code
already showed, so let's not pollute the logs with them.
|
| |
|
|
|
|
|
|
|
| |
Previously each doc was read in a separate transaction. It turns out that size
limits do not apply to read-only transactions so we don't have to worry about
that here. Also transaction restart are already implemented so we don't have to
worry about timeout either.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Versionstamp sequences should always be binaries when retrieved from a
rev info map.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This tracks the number of bytes that would be required to store the
contents of a database as flat files on disk. Currently the following
items are tracked:
* Doc ids
* Revisions
* Doc body as JSON
* Attachment names
* Attachment type
* Attachment length
* Attachment md5s
* Attachment headers
* Local doc id
* Local doc revision
* Local doc bodies
|
|
|
|
|
| |
I accidentally ported part of the old couch_att test suite into an
actual "feature" that's not actually accessible through any API.
|
|
|
|
|
| |
Index builder performs writes in the same transaction as the changes
feed so we can't use iterators as they disable writes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously changes feeds would fail if they streamed data for more than five
seconds. This was because of the FoundationDB's transaction time limit. After
the timeout fired, an 1007 (transaction_too_long) error was raised, and
transaction was retried. The emitted changes feed would often crash or simple
hang because the HTTP state would be garbled as response data was re-sent over
the same socket stream again.
To fix the issue introduce a new `{restart_tx, true}` option for
`fold_range/4`. This option sets up a new transaction to continue iterating
over the range from where the last one left off.
To avoid data being resent in the response stream, user callback functions must
first read all the data they plan on sending during that callback, send it out,
and then after that it must not do any more db reads so as not to trigger a
`transaction_too_old` error.
|
|
|
|
|
| |
Previously only `POST` with a list of keys was supported. The new `GET`
support just dumps all database info blobs in a single ordered response.
|
|
|
|
|
|
| |
This API allows for listing all database info blobs in a single request.
It accepts the same parameters as `_all_dbs` for controlling pagination
of results and so on.
|
| |
|
|
|
|
|
| |
This way we can expose the total view size for a database in the dbinfo
JSON blob.
|
|
|
|
| |
Attachment names should be binaries
|
|
|
|
|
|
|
| |
* Encode startkey/endkey for all_docs
Encodes the startkey/endkey so that if a startkey is not binary it will return the expected results.
|
|\
| |
| | |
Fix b3 header
|
| | |
|
| | |
|
| | |
|
|/
|
|
|
|
|
|
| |
There were couple of hacks in test/elixir/lib/couch.ex
We've got changes needed to remove them into httpotion 3.1.3.
The changes were introduced in:
- https://github.com/myfreeweb/httpotion/pull/118
- https://github.com/myfreeweb/httpotion/pull/130
|
|\
| |
| | |
Add http reporter
|
|/ |
|
|\
| |
| | |
reserve search namespace
|
|/ |
|
|\
| |
| | |
Delete unused ets table creation
|
|/
|
|
|
|
| |
This ets table was a holdover from when couch_expiring_cache was a non-
library OTP application. It is unused, and would prevent multiple users
of the library in the same project.
|
|\
| |
| | |
Bump ioq to 2.1.3
|
|/ |
|
|
|
|
|
| |
Changes map indexes to store the original key and value in a single
FDB row.
|
|\
| |
| | |
Add `external` tag to opentrace events
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This PR adds an ability to selectively enable opentracing for HTTP requests
with X-B3-... headers. This is helpful in following cases:
- tracing all requests with X-B3-... headers
`all = (#{external := E}) when E == true -> true`
- tracing all requests to specific database with X-B3-... headers
```
all = (#{external := E, 'db.name' := Db})
when E == true andalso Db == <<"foo">> -> true
```
- tracing requests to specific endpoint with X-B3-... headers
```
db.design.view.read = (#{external := E, 'design.id' := Name})
when E == true andalso Name == <<"bar">> -> true
```
I want to remind that we support following X-B3-... headers:
- X-B3-TraceId
- X-B3-SpanId
- X-B3-ParentSpanId
- B3 which is in the following format
<TraceId>-<SpanId>-<1 | 0>-<ParentSpanId>
|
|
|
|
|
|
|
|
|
| |
Previously the per-request nonce value was set as the transaction name and so
in the trace logs multiple transactions ended up having the same `TransactionID`
which was pretty confusing.
To fix the issue, append a transaction ID to the name. The ID is guaranteed to
be unique for the life of the VM node.
|
|\
| |
| | |
Expiring cache
|
|/
|
|
|
|
|
|
|
|
| |
This is a library for creating an FDB backed key value cache, where
each entry has a `stale` and `expires` time associated with it. Once
the current time exceeds the `expires` time, the entry is automatically
removed. The `stale` time can be used to indicate that a refresh is
necessary, while still returning a non-expired value. It is potentially
useful for implementing e.g. caches to external systems of record, such
as OAuth 2.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes attachment handling to properly remove attachment data when
it is no longer referenced by the document's revision tree.
As implemented this accounts for the possibility that multiple revisions
may reference a given attachment id. However, due to how the current
revision tree removes revisions aggressively it's not currently possible
for multiple leaf revisions to share an underlying attachment. This is
because when attempting to use a stub attachment when replicating in a
conflict we will encounter the `missing_stub` error because the previous
shared revision has already been removed.
|
| |
|
|
|
|
|
| |
This change ensures that all test names are visible and follows a single
unified pattern for each test module.
|
|
|
|
|
| |
Retry building a failing index for a set number of retries. If it
never completes, then return the error to the user.
|
|
|
|
|
| |
If the view is already built, read the view status and view
in the same transaction. This will improve view read latency.
|
| |
|
|
|
|
|
|
| |
This adds operation names to all valid HTTP end points. This covers all
of `make elixir` except for seven requests that are testing specific
error conditions in URL and Methods for various endpoints.
|
|
|
|
|
|
| |
The implementation follows the RFC [1]
[1]: https://github.com/apache/couchdb-documentation/blob/master/rfcs/013-node-types.md
|
| |
|
| |
|