Skip to content

Commit fbab3df

Browse files
authored
Limit cache size to 256 results by default (#127)
Limit cache size to 256 results by default
2 parents 2192705 + 9b52f6c commit fbab3df

4 files changed

Lines changed: 7 additions & 43 deletions

File tree

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"license": "MIT",
66
"require": {
77
"php": ">=5.3.0",
8-
"react/cache": "^1.0 || ^0.6 || ^0.5 || ^0.4 || ^0.3",
8+
"react/cache": "^1.0 || ^0.6 || ^0.5",
99
"react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
1010
"react/promise": "^2.1 || ^1.2.1",
1111
"react/promise-timer": "^1.2",

src/Query/RecordCache.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public function lookup(Query $query)
3737
return $this->cache
3838
->get($id)
3939
->then(function ($value) use ($query, $expiredAt) {
40-
// cache 0.5+ resolves with null on cache miss, return explicit cache miss here
40+
// reject on cache miss
4141
if ($value === null) {
4242
return Promise\reject();
4343
}
@@ -86,17 +86,13 @@ public function storeRecord($currentTime, Record $record)
8686
->get($id)
8787
->then(
8888
function ($value) {
89+
// return empty bag on cache miss
8990
if ($value === null) {
90-
// cache 0.5+ cache miss resolves with null, return empty bag here
9191
return new RecordBag();
9292
}
9393

9494
// reuse existing bag on cache hit to append new record to it
9595
return unserialize($value);
96-
},
97-
function ($e) {
98-
// legacy cache < 0.5 cache miss rejects promise, return empty bag here
99-
return new RecordBag();
10096
}
10197
)
10298
->then(function (RecordBag $recordBag) use ($id, $currentTime, $record, $cache) {

src/Resolver/Factory.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ public function create($nameserver, LoopInterface $loop)
2727

2828
public function createCached($nameserver, LoopInterface $loop, CacheInterface $cache = null)
2929
{
30+
// default to keeping maximum of 256 responses in cache unless explicitly given
3031
if (!($cache instanceof CacheInterface)) {
31-
$cache = new ArrayCache();
32+
$cache = new ArrayCache(256);
3233
}
3334

3435
$nameserver = $this->addPortToServerIfMissing($nameserver);

tests/Query/RecordCacheTest.php

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class RecordCacheTest extends TestCase
1717
* @covers React\Dns\Query\RecordCache
1818
* @test
1919
*/
20-
public function lookupOnNewCacheMissShouldReturnNull()
20+
public function lookupOnCacheMissShouldReturnNull()
2121
{
2222
$query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
2323

@@ -30,23 +30,6 @@ public function lookupOnNewCacheMissShouldReturnNull()
3030
$this->assertInstanceOf('React\Promise\RejectedPromise', $promise);
3131
}
3232

33-
/**
34-
* @covers React\Dns\Query\RecordCache
35-
* @test
36-
*/
37-
public function lookupOnLegacyCacheMissShouldReturnNull()
38-
{
39-
$query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
40-
41-
$base = $this->getMockBuilder('React\Cache\CacheInterface')->getMock();
42-
$base->expects($this->once())->method('get')->willReturn(\React\Promise\reject());
43-
44-
$cache = new RecordCache($base);
45-
$promise = $cache->lookup($query);
46-
47-
$this->assertInstanceOf('React\Promise\RejectedPromise', $promise);
48-
}
49-
5033
/**
5134
* @covers React\Dns\Query\RecordCache
5235
* @test
@@ -68,7 +51,7 @@ public function storeRecordPendingCacheDoesNotSetCache()
6851
* @covers React\Dns\Query\RecordCache
6952
* @test
7053
*/
71-
public function storeRecordOnNewCacheMissSetsCache()
54+
public function storeRecordOnCacheMissSetsCache()
7255
{
7356
$query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
7457

@@ -80,22 +63,6 @@ public function storeRecordOnNewCacheMissSetsCache()
8063
$cache->storeRecord($query->currentTime, new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'));
8164
}
8265

83-
/**
84-
* @covers React\Dns\Query\RecordCache
85-
* @test
86-
*/
87-
public function storeRecordOnOldCacheMissSetsCache()
88-
{
89-
$query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
90-
91-
$base = $this->getMockBuilder('React\Cache\CacheInterface')->getMock();
92-
$base->expects($this->once())->method('get')->willReturn(\React\Promise\reject());
93-
$base->expects($this->once())->method('set')->with($this->isType('string'), $this->isType('string'));
94-
95-
$cache = new RecordCache($base);
96-
$cache->storeRecord($query->currentTime, new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'));
97-
}
98-
9966
/**
10067
* @covers React\Dns\Query\RecordCache
10168
* @test

0 commit comments

Comments
 (0)