couchdb-ddoc-cache.git
3 years agoAdd LICENSE file master
Alexander Shorin [Sun, 23 Aug 2015 10:29:24 +0000 (13:29 +0300)] 
Add LICENSE file

3 years agoAllow ddoc_cache to open restricted design docs
Mike Wallace [Tue, 30 Jun 2015 20:51:23 +0000 (21:51 +0100)] 
Allow ddoc_cache to open restricted design docs

Design docs in the authentication DB cannot be opened without an
admin context so this commit teaches ddoc_cache to always use
?ADMIN_CTX when opening documents.

COUCHDB-2738

This closes #1

3 years agoAllow custom cache objects using callback modules
Adam Kocoloski [Thu, 11 Dec 2014 20:50:31 +0000 (15:50 -0500)] 
Allow custom cache objects using callback modules

This patch allows custom objects derived from design documents to be
exposed in the ddoc_cache. A custom object is defined by a module
exporting the recover/1 function which accepts the name of a database
and returns {ok, term()}. The term will be cached as if it were a design
doc. For the sake of simplicity all custom cache objects associated with
a database are evicted when any ddoc in the database changes.

Once a custom callback module has been defined the object associated
with the module can be retrieved via ddoc_cache:open(DbName, Mod).

BugzID: 42707

4 years agofix metric name
Robert Newson [Wed, 12 Nov 2014 15:10:48 +0000 (15:10 +0000)] 
fix metric name

4 years agoUpdate to use couch_stats windsor-merge
Paul J. Davis [Thu, 21 Aug 2014 06:49:43 +0000 (01:49 -0500)] 
Update to use couch_stats

4 years agoLoad design docs with an ejson body
Paul J. Davis [Thu, 14 Aug 2014 17:47:51 +0000 (12:47 -0500)] 
Load design docs with an ejson body

4 years agoset module version to 1
Robert Newson [Fri, 22 Nov 2013 16:38:03 +0000 (16:38 +0000)] 
set module version to 1

4 years agoAddress code review feedback
Brian Mitchell [Thu, 24 Oct 2013 03:02:00 +0000 (23:02 -0400)] 
Address code review feedback

Summary:
* removed the useless include inside ddoc_cache
* revised the export listing style and removed confusing comments
* added guards back to older ddoc_cache:open/2 API
* clarified a type declaration, still strict until it's moved
* replaced match_newest sort with the canonical comparison rule
* simplified setting of the OpenerKey in some clauses
* renamed Rev* variables for correctness
* added back precious whitespace in some places

4 years agoAdd support for keying the cache by revision
Brian Mitchell [Tue, 15 Oct 2013 21:05:55 +0000 (17:05 -0400)] 
Add support for keying the cache by revision

This patch splits up the code paths between ddoc_cache and
ddoc_cache_opener a bit more clearly, keeping the gen_server
implementation details "mostly" in one place. The overloaded
open function has been replaced with more explicit function
names. I've left the old open to support old code during the
upgrade process but it should be removed after the next release.

The opener lookup keys are a bit mismatched from the LRU keys so
I've renamed those variables to make it clear when we're talking
about the openers rather than the cache itself. It could be
argued that the revision oblivious doc lookup could reuse the
result of any pending revision specific lookup on the same id
but it seems a bit too optimistic here so I've left them as
separate opener keys.

4 years agoSimplify pulling out all design document ids from the cache
Brian Mitchell [Fri, 11 Oct 2013 16:25:34 +0000 (12:25 -0400)] 
Simplify pulling out all design document ids from the cache

This allows the code to avoid copying the entire ets entries into
code from a separate module for both efficiency and modularity
purposes. This requires the new ets_lru match code to function.

It currently uses match which is dispatched to the gen_server.
It might be wise to make it direct since the match code does not
update access times (or if it did, we could make that a cast).

4 years agoDefine a macro for the LRU cache name
Brian Mitchell [Fri, 11 Oct 2013 15:04:00 +0000 (11:04 -0400)] 
Define a macro for the LRU cache name

4 years agoAdd a simple dialyzer task
Brian Mitchell [Thu, 10 Oct 2013 20:50:38 +0000 (16:50 -0400)] 
Add a simple dialyzer task

This fixes a number of dialyzer warnings as well. Mostly for simple
missing matches. I'm not sure it's worth covering all of these cases
just yet but it wasn't hard for this code.

I've also included the ets_lru module in the dialyzer source to help
ensure that the new match APIs are used correctly. It will skip it
if it's not found on the default path or at ETS_LRU_PATH.

4 years agoFix name of event listener callback
Adam Kocoloski [Fri, 24 May 2013 18:32:04 +0000 (14:32 -0400)] 
Fix name of event listener callback

4 years agoUpdate to use new couch_event application
Paul J. Davis [Tue, 23 Apr 2013 22:05:55 +0000 (17:05 -0500)] 
Update to use new couch_event application

4 years agoChange API to function per level 1843-feature-bigcouch
Robert Newson [Wed, 12 Feb 2014 23:24:20 +0000 (23:24 +0000)] 
Change API to function per level

4 years agoSwitch to couch_log
Robert Newson [Wed, 12 Feb 2014 20:12:28 +0000 (20:12 +0000)] 
Switch to couch_log

5 years agoThis ejson_body requirement is tedious and pervasive.
Robert Newson [Mon, 23 Dec 2013 23:09:28 +0000 (23:09 +0000)] 
This ejson_body requirement is tedious and pervasive.

5 years agoRemove references to margaret
Robert Newson [Thu, 19 Dec 2013 18:16:58 +0000 (18:16 +0000)] 
Remove references to margaret

5 years agoBuild with rebar
Robert Newson [Wed, 18 Dec 2013 14:04:59 +0000 (14:04 +0000)] 
Build with rebar

5 years agoFix up copyright headers
Robert Newson [Thu, 13 Jun 2013 12:42:11 +0000 (13:42 +0100)] 
Fix up copyright headers

5 years agoNew build system for ddoc_cache
Paul J. Davis [Tue, 5 Mar 2013 22:39:17 +0000 (16:39 -0600)] 
New build system for ddoc_cache

5 years agoFix validation funs return format bug
Paul J. Davis [Tue, 29 Jan 2013 23:26:47 +0000 (17:26 -0600)] 
Fix validation funs return format bug

5 years agoPass through responses and errors directly
Paul J. Davis [Tue, 29 Jan 2013 23:09:52 +0000 (17:09 -0600)] 
Pass through responses and errors directly

There was a bit of a mismatch in the behavior of ddoc_cache:open/2 and
fabric:open_doc/3. This just makes sure that return values are returned
and any exceptions are reraised with the same semantics of
throw/error/exit as they were generated.

5 years agoInclude some basic metrics for cache ops
Paul J. Davis [Fri, 25 Jan 2013 21:49:35 +0000 (15:49 -0600)] 
Include some basic metrics for cache ops

5 years agoHandle requests that occur when the LRU is down
Paul J. Davis [Fri, 25 Jan 2013 06:12:20 +0000 (00:12 -0600)] 
Handle requests that occur when the LRU is down

We don't want to break things if the ddoc cache LRU disappears for any
reason. I've seen this during the first release upgrade as well as
locally during a dev node boot. Its relatively minor but we should be
thorough here.

5 years agoReport database_not_found errors to clients
Paul J. Davis [Thu, 24 Jan 2013 23:31:41 +0000 (17:31 -0600)] 
Report database_not_found errors to clients

Bit of a regression on trying to load views from dbs that didn't exist
created a bad match when we returned an error instead of {ok, DDoc}.
This just tracks database_not_found and throws errors instead of
returning them.

5 years agoThe ets_lru TTL is specified in milliseconds
Paul J. Davis [Thu, 24 Jan 2013 07:11:43 +0000 (01:11 -0600)] 
The ets_lru TTL is specified in milliseconds

This makes a significant difference in caching efficacy.

5 years agoRemember the empty options argument
Paul J. Davis [Wed, 23 Jan 2013 22:16:53 +0000 (16:16 -0600)] 
Remember the empty options argument

5 years agoSet cache TTL to 60s
Paul J. Davis [Wed, 23 Jan 2013 22:02:33 +0000 (16:02 -0600)] 
Set cache TTL to 60s

5 years agoInclude a cache eviction strategy
Paul J. Davis [Wed, 23 Jan 2013 21:34:47 +0000 (15:34 -0600)] 
Include a cache eviction strategy

The LRU already has a fairly short TTL of 60s so this is just to try and
minimize the window that we have stale design docs cached. As such this
eviction strategy isn't super sensitive to errors as the TTL should
limit our window of staleness.

5 years agoSupport caching validation functions
Paul J. Davis [Wed, 23 Jan 2013 20:11:28 +0000 (14:11 -0600)] 
Support caching validation functions

6 years agoRefactor to use new ets_lru application
Paul J. Davis [Fri, 28 Dec 2012 09:03:35 +0000 (03:03 -0600)] 
Refactor to use new ets_lru application

Breaking out the LRU definitely stripped out a lot of the code from this
application.

6 years agoAdd .gitignore
Paul J. Davis [Fri, 28 Dec 2012 09:02:07 +0000 (03:02 -0600)] 
Add .gitignore

6 years agoInitial import
Paul J. Davis [Thu, 20 Dec 2012 00:18:04 +0000 (18:18 -0600)] 
Initial import