Skip to content

Commit bbf5781

Browse files
authored
PHPC-2530: Deprecate hedged reads (#1962)
1 parent c5d060b commit bbf5781

10 files changed

Lines changed: 34 additions & 19 deletions

src/MongoDB/ReadPreference.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ static bool phongo_readpreference_init_from_hash(phongo_readpreference_t* intern
117117
if (Z_TYPE_P(hedge) == IS_ARRAY || Z_TYPE_P(hedge) == IS_OBJECT) {
118118
bson_t* hedge_doc = bson_new();
119119

120+
php_error_docref(NULL, E_DEPRECATED, "The \"hedge\" option is deprecated as of MongoDB 8.0 and will be removed in a future release");
121+
120122
if (mongoc_read_prefs_get_mode(intern->read_preference) == MONGOC_READ_PRIMARY) {
121123
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "%s initialization requires \"hedge\" field to not be present with \"primary\" mode", ZSTR_VAL(phongo_readpreference_ce->name));
122124
bson_destroy(hedge_doc);
@@ -252,6 +254,8 @@ static PHP_METHOD(MongoDB_Driver_ReadPreference, __construct)
252254
if (Z_TYPE_P(hedge) == IS_ARRAY || Z_TYPE_P(hedge) == IS_OBJECT) {
253255
bson_t* hedge_doc = bson_new();
254256

257+
php_error_docref(NULL, E_DEPRECATED, "The \"hedge\" option is deprecated as of MongoDB 8.0 and will be removed in a future release");
258+
255259
if (mongoc_read_prefs_get_mode(intern->read_preference) == MONGOC_READ_PRIMARY) {
256260
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "hedge may not be used with primary mode");
257261
bson_destroy(hedge_doc);

src/MongoDB/ReadPreference.stub.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ final class ReadPreference implements \MongoDB\BSON\Serializable
5353

5454
final public function __construct(string $mode, ?array $tagSets = null, ?array $options = null) {}
5555

56+
/** @deprecated Hedged reads are deprecated in MongoDB 8.0 and will be removed in a future release */
5657
final public function getHedge(): ?object {}
5758

5859
final public function getMaxStalenessSeconds(): int {}

src/MongoDB/ReadPreference_arginfo.h

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/readPreference/readpreference-ctor-001.phpt

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::PRIMAR
77
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::SECONDARY, [['tag' => 'one']]));
88
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::PRIMARY, []));
99
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::SECONDARY, null, ['maxStalenessSeconds' => 1000]));
10-
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::SECONDARY, null, ['hedge' => ['enabled' => true]]));
11-
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::SECONDARY, null, ['hedge' => []]));
1210

1311
?>
1412
===DONE===
@@ -40,17 +38,4 @@ object(MongoDB\Driver\ReadPreference)#%d (%d) {
4038
["maxStalenessSeconds"]=>
4139
int(1000)
4240
}
43-
object(MongoDB\Driver\ReadPreference)#%d (%d) {
44-
["mode"]=>
45-
string(9) "secondary"
46-
["hedge"]=>
47-
object(stdClass)#%d (%d) {
48-
["enabled"]=>
49-
bool(true)
50-
}
51-
}
52-
object(MongoDB\Driver\ReadPreference)#%d (%d) {
53-
["mode"]=>
54-
string(9) "secondary"
55-
}
5641
===DONE===

tests/readPreference/readpreference-ctor_error-007.phpt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ echo throws(function() {
1313
===DONE===
1414
<?php exit(0); ?>
1515
--EXPECTF--
16+
Deprecated: MongoDB\Driver\ReadPreference::__construct(): The "hedge" option is deprecated as of MongoDB 8.0 and will be removed in a future release in %s
1617
OK: Got MongoDB\Driver\Exception\InvalidArgumentException
1718
hedge may not be used with primary mode
1819
===DONE===

tests/readPreference/readpreference-ctor_error-008.phpt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ echo throws(function() {
1616
?>
1717
===DONE===
1818
<?php exit(0); ?>
19-
--EXPECT--
19+
--EXPECTF--
20+
Deprecated: MongoDB\Driver\ReadPreference::__construct(): The "hedge" option is deprecated as of MongoDB 8.0 and will be removed in a future release in %s
2021
OK: Got MongoDB\Driver\Exception\UnexpectedValueException
2122
MongoDB\BSON\PackedArray cannot be serialized as a root document
2223
===DONE===

tests/readPreference/readpreference-debug-001.phpt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ foreach ($tests as $test) {
2626
===DONE===
2727
<?php exit(0); ?>
2828
--EXPECTF--
29+
Deprecated: MongoDB\Driver\ReadPreference::__construct(): The "hedge" option is deprecated as of MongoDB 8.0 and will be removed in a future release in %s
2930
object(MongoDB\Driver\ReadPreference)#%d (%d) {
3031
["mode"]=>
3132
string(7) "primary"

tests/readPreference/readpreference-getHedge-001.phpt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,30 @@ foreach ($tests as $test) {
2121
===DONE===
2222
<?php exit(0); ?>
2323
--EXPECTF--
24+
Deprecated: MongoDB\Driver\ReadPreference::__construct(): The "hedge" option is deprecated as of MongoDB 8.0 and will be removed in a future release in %s
25+
26+
Deprecated: Method MongoDB\Driver\ReadPreference::getHedge() is deprecated in %s
2427
NULL
28+
29+
Deprecated: MongoDB\Driver\ReadPreference::__construct(): The "hedge" option is deprecated as of MongoDB 8.0 and will be removed in a future release in %s
30+
31+
Deprecated: Method MongoDB\Driver\ReadPreference::getHedge() is deprecated in %s
2532
object(stdClass)#%d (%d) {
2633
["enabled"]=>
2734
bool(true)
2835
}
36+
37+
Deprecated: MongoDB\Driver\ReadPreference::__construct(): The "hedge" option is deprecated as of MongoDB 8.0 and will be removed in a future release in %s
38+
39+
Deprecated: Method MongoDB\Driver\ReadPreference::getHedge() is deprecated in %s
2940
object(stdClass)#%d (%d) {
3041
["enabled"]=>
3142
bool(true)
3243
}
44+
45+
Deprecated: MongoDB\Driver\ReadPreference::__construct(): The "hedge" option is deprecated as of MongoDB 8.0 and will be removed in a future release in %s
46+
47+
Deprecated: Method MongoDB\Driver\ReadPreference::getHedge() is deprecated in %s
3348
object(stdClass)#%d (%d) {
3449
["foo"]=>
3550
string(3) "bar"

tests/readPreference/readpreference-serialization-002.phpt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ foreach ($tests as $test) {
2929
===DONE===
3030
<?php exit(0); ?>
3131
--EXPECTF--
32+
Deprecated: MongoDB\Driver\ReadPreference::__construct(): The "hedge" option is deprecated as of MongoDB 8.0 and will be removed in a future release in %s
3233
object(MongoDB\Driver\ReadPreference)#%d (%d) {
3334
["mode"]=>
3435
string(7) "primary"
@@ -185,6 +186,8 @@ object(MongoDB\Driver\ReadPreference)#%d (%d) {
185186
}
186187
}
187188
O:29:"MongoDB\Driver\ReadPreference":2:{s:4:"mode";s:9:"secondary";s:5:"hedge";O:8:"stdClass":1:{s:7:"enabled";b:1;}}
189+
190+
Deprecated: MongoDB\Driver\ReadPreference::__unserialize(): The "hedge" option is deprecated as of MongoDB 8.0 and will be removed in a future release in %s
188191
object(MongoDB\Driver\ReadPreference)#%d (%d) {
189192
["mode"]=>
190193
string(9) "secondary"

tests/readPreference/readpreference-set_state_error-001.phpt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ echo throws(function() {
5151
?>
5252
===DONE===
5353
<?php exit(0); ?>
54-
--EXPECT--
54+
--EXPECTF--
5555
OK: Got MongoDB\Driver\Exception\InvalidArgumentException
5656
MongoDB\Driver\ReadPreference initialization requires specific values for "mode" string field
5757
OK: Got MongoDB\Driver\Exception\InvalidArgumentException
@@ -68,8 +68,12 @@ OK: Got MongoDB\Driver\Exception\InvalidArgumentException
6868
MongoDB\Driver\ReadPreference initialization requires "maxStalenessSeconds" field to not be present with "primary" mode
6969
OK: Got MongoDB\Driver\Exception\InvalidArgumentException
7070
MongoDB\Driver\ReadPreference initialization requires "hedge" field to be an array or object
71+
72+
Deprecated: MongoDB\Driver\ReadPreference::__set_state(): The "hedge" option is deprecated as of MongoDB 8.0 and will be removed in a future release in %s
7173
OK: Got MongoDB\Driver\Exception\InvalidArgumentException
7274
MongoDB\Driver\ReadPreference initialization requires "hedge" field to not be present with "primary" mode
75+
76+
Deprecated: MongoDB\Driver\ReadPreference::__set_state(): The "hedge" option is deprecated as of MongoDB 8.0 and will be removed in a future release in %s
7377
OK: Got MongoDB\Driver\Exception\UnexpectedValueException
7478
MongoDB\BSON\PackedArray cannot be serialized as a root document
7579
===DONE===

0 commit comments

Comments
 (0)