Skip to content

Commit ce6edcc

Browse files
committed
Merge pull request #749
* phplib-556: PHPLIB-556: Throw client-side error when allowDiskUse is not supported by a server
2 parents 898a66f + c93afd7 commit ce6edcc

File tree

4 files changed

+118
-0
lines changed

4 files changed

+118
-0
lines changed

src/Exception/UnsupportedException.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,16 @@
1919

2020
class UnsupportedException extends RuntimeException
2121
{
22+
/**
23+
* Thrown when a command's allowDiskUse option is not supported by a server.
24+
*
25+
* @return self
26+
*/
27+
public static function allowDiskUseNotSupported()
28+
{
29+
return new static('The "allowDiskUse" option is not supported by the server executing this operation');
30+
}
31+
2232
/**
2333
* Thrown when array filters are not supported by a server.
2434
*

src/Operation/Find.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ class Find implements Executable, Explainable
5555
/** @var integer */
5656
private static $wireVersionForReadConcern = 4;
5757

58+
/** @var integer */
59+
private static $wireVersionForAllowDiskUseServerSideError = 4;
60+
5861
/** @var string */
5962
private $databaseName;
6063

@@ -322,6 +325,10 @@ public function execute(Server $server)
322325
throw UnsupportedException::readConcernNotSupported();
323326
}
324327

328+
if (isset($this->options['allowDiskUse']) && ! server_supports_feature($server, self::$wireVersionForAllowDiskUseServerSideError)) {
329+
throw UnsupportedException::allowDiskUseNotSupported();
330+
}
331+
325332
$inTransaction = isset($this->options['session']) && $this->options['session']->isInTransaction();
326333
if ($inTransaction && isset($this->options['readConcern'])) {
327334
throw UnsupportedException::readConcernNotSupportedInTransaction();
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"runOn": [
3+
{
4+
"maxServerVersion": "3.0.99"
5+
}
6+
],
7+
"collection_name": "test_find_allowdiskuse_clienterror",
8+
"tests": [
9+
{
10+
"description": "Find fails when allowDiskUse true is specified against pre 3.2 server",
11+
"operations": [
12+
{
13+
"object": "collection",
14+
"name": "find",
15+
"arguments": {
16+
"filter": {},
17+
"allowDiskUse": true
18+
},
19+
"error": true
20+
}
21+
],
22+
"expectations": []
23+
},
24+
{
25+
"description": "Find fails when allowDiskUse false is specified against pre 3.2 server",
26+
"operations": [
27+
{
28+
"object": "collection",
29+
"name": "find",
30+
"arguments": {
31+
"filter": {},
32+
"allowDiskUse": false
33+
},
34+
"error": true
35+
}
36+
],
37+
"expectations": []
38+
}
39+
]
40+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
{
2+
"runOn": [
3+
{
4+
"minServerVersion": "3.2",
5+
"maxServerVersion": "4.3.0"
6+
}
7+
],
8+
"collection_name": "test_find_allowdiskuse_servererror",
9+
"tests": [
10+
{
11+
"description": "Find fails when allowDiskUse true is specified against pre 4.4 server (server-side error)",
12+
"operations": [
13+
{
14+
"object": "collection",
15+
"name": "find",
16+
"arguments": {
17+
"filter": {},
18+
"allowDiskUse": true
19+
},
20+
"error": true
21+
}
22+
],
23+
"expectations": [
24+
{
25+
"command_started_event": {
26+
"command": {
27+
"find": "test_find_allowdiskuse_servererror",
28+
"filter": {},
29+
"allowDiskUse": true
30+
}
31+
}
32+
}
33+
]
34+
},
35+
{
36+
"description": "Find fails when allowDiskUse false is specified against pre 4.4 server (server-side error)",
37+
"operations": [
38+
{
39+
"object": "collection",
40+
"name": "find",
41+
"arguments": {
42+
"filter": {},
43+
"allowDiskUse": false
44+
},
45+
"error": true
46+
}
47+
],
48+
"expectations": [
49+
{
50+
"command_started_event": {
51+
"command": {
52+
"find": "test_find_allowdiskuse_servererror",
53+
"filter": {},
54+
"allowDiskUse": false
55+
}
56+
}
57+
}
58+
]
59+
}
60+
]
61+
}

0 commit comments

Comments
 (0)