Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:20
ecache
ecache-2.0.0-git.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ecache-2.0.0-git.patch of Package ecache
diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..03e5e39 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,9 @@ +language: erlang +notifications: + email: false +otp_release: + - 17.4 + - 17.1 + - 17.0 + - R16B03-1 + - R15B03 diff --git a/README.md b/README.md index f5cc6f3..cb7abd7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ ecache: Erlang ETS Based TTL Cache ================================== +[![Build Status](https://secure.travis-ci.org/mattsta/ecache.png)](http://travis-ci.org/mattsta/ecache) + ecache stores your cache items in ets. Each cache item gets its own monitoring process to auto-delete the cache item when the TTL expires. diff --git a/src/ecache_reaper.erl b/src/ecache_reaper.erl index 9e9a2b0..9e87790 100644 --- a/src/ecache_reaper.erl +++ b/src/ecache_reaper.erl @@ -25,26 +25,17 @@ start(CacheName, CacheSize) -> %%%---------------------------------------------------------------------- shrink_cache_to_size(_Name, CurrentCacheSize, CacheSize) - when CurrentCacheSize < CacheSize -> + when CurrentCacheSize =< CacheSize -> ok; shrink_cache_to_size(Name, _CurrentCacheSize, CacheSize) -> gen_server:call(Name, reap_oldest), shrink_cache_to_size(Name, ecache:total_size(Name), CacheSize). - ecache_reaper(Name, CacheSize) -> % sleep for 4 seconds - receive - after 4000 -> ok - end, + timer:sleep(4000), CurrentCacheSize = ecache:total_size(Name), - if - CurrentCacheSize < CacheSize -> ok; - CurrentCacheSize >= CacheSize -> -%io:format("Cache ~p too big! Shrinking...~n", [self()]), -%io:format("CurrentSize: ~p; Target Size: ~p~n", [CurrentCacheSize, CacheSize]), - shrink_cache_to_size(Name, CurrentCacheSize, CacheSize) - end, + shrink_cache_to_size(Name, CurrentCacheSize, CacheSize), ecache_reaper(Name, CacheSize). init([Name, CacheSizeBytes]) -> diff --git a/src/ecache_server.erl b/src/ecache_server.erl index d14e0f8..33e41e1 100644 --- a/src/ecache_server.erl +++ b/src/ecache_server.erl @@ -212,9 +212,10 @@ unkey({ecache_multi, {M, F, A}}) -> {M, F, A}. -compile({inline, [{create_datum, 4}]}). create_datum(DatumKey, Data, TTL, Type) -> - #datum{key = DatumKey, data = Data, started = os:timestamp(), + Timestamp = os:timestamp(), + #datum{key = DatumKey, data = Data, started = Timestamp, ttl = TTL, remaining_ttl = TTL, type = Type, - last_active = os:timestamp()}. + last_active = Timestamp}. reap_after(EtsIndex, Key, LifeTTL) -> receive @@ -272,8 +273,9 @@ update_ttl(DatumIndex, #datum{key = Key, ttl = unlimited}) -> ets:update_element(DatumIndex, Key, NewNow); update_ttl(DatumIndex, #datum{key = Key, started = Started, ttl = TTL, type = actual_time, ttl_reaper = Reaper}) -> + Timestamp = os:timestamp(), % Get total time in seconds this datum has been running. Convert to ms. - StartedNowDiff = timer:now_diff(os:timestamp(), Started) div 1000, + StartedNowDiff = timer:now_diff(Timestamp, Started) div 1000, % If we are less than the TTL, update with TTL-used (TTL in ms too) % else, we ran out of time. expire on next loop. TTLRemaining = if @@ -282,7 +284,7 @@ update_ttl(DatumIndex, #datum{key = Key, started = Started, ttl = TTL, end, ping_reaper(Reaper, TTLRemaining), - NewNowTTL = [{#datum.last_active, os:timestamp()}, + NewNowTTL = [{#datum.last_active, Timestamp}, {#datum.remaining_ttl, TTLRemaining}], ets:update_element(DatumIndex, Key, NewNowTTL); update_ttl(DatumIndex, #datum{key = Key, ttl = TTL, ttl_reaper = Reaper}) -> diff --git a/test/ecache_tests.erl b/test/ecache_tests.erl index 8480196..3edfef0 100644 --- a/test/ecache_tests.erl +++ b/test/ecache_tests.erl @@ -46,8 +46,8 @@ ecache_test_() -> ?_E(erlang:crc32("bob2"), ecache:memoize(tc, ?MODULE, memoize_tester, "bob2")), ?_E(ok, ecache:dirty_memoize(tc, ?MODULE, memoize_tester, "bob2")), - ?_assertMatch(Size when Size =< 3000 andalso Size >= 2000, - ecache:total_size(tc)), + ?_assertMatch(Size when Size >= 0 andalso Size < 1000, + ecache:total_size(tc) - empty_table_size()), ?_E(1, count(ecache:stats(tc))), % now, sleep for 3.1 seconds and key "bob" will auto-expire ?_assertMatch(0,
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor