Commit Graph

1508 Commits

Author SHA1 Message Date
Daniele Alessandri 45da0fca55 Merge branch 'github/pr/182' 2014-07-07 10:52:58 +02:00
Daniele Alessandri 2d53db7b9b Rework PR to use "goto" instead of a "while ... do" loop. 2014-07-07 10:50:17 +02:00
Gwilym Evans f05cb1b46d use a loop instead of recursion in CursorBasedIterator
servers with large sets of keys will cause memory and stack exhaustion if recursion is used
2014-06-26 12:56:00 +10:00
Daniele Alessandri 4db00173f3 Use stream_socket_recvfrom() in PhpiredisStreamConnection.
Similarly to the socket-ext based connection using phpiredis, in our
stream based PhpiredisStreamConnection class we should read data from
the stream using stream_socket_recvfrom() instead of fread() because
the latter could block until a timeout is reached when the read buffer
contains less data then the specified length.

IMPORTANT: stream_socket_recvfrom() bypasses stream wrappers which
means that TLS/SSL, as requested by PR #158, won't ever work with
this connection class as the function returns the original encrypted
bytes.

This commit fixes issue #180.
2014-06-23 14:31:02 +02:00
Daniele Alessandri a2265b12b3 Remove implementation of Predis\Command\RawCommand::__toString().
See #151 and message of commit 5c5dd40, forgot to apply the same
change to the Predis\Command\RawCommand class.
2014-06-12 11:57:54 +02:00
Daniele Alessandri 0cd56406fe Just rename a couple of local variables. 2014-06-10 10:56:33 +02:00
Daniele Alessandri e575c32cb4 Rename RedisCluster::askClusterNodes() to askSlotsMap().
This is more consistent with the actual purpose of this method and
more in-line with a possible future change in the underlying command
used to retrieve the slots map if redis-cluster will implement the
CLUSTER SLOTS command.
2014-06-10 10:36:17 +02:00
Daniele Alessandri 42f237e306 [tests] Use annotations to specify expected Redis server version.
This change targets only method annotations and aims to make the body
of tests more readable using the @requiresRedisVersion annotation.

Tests using this annotation requires to be assigned the "connected"
group of tests because they create a connection to the Redis instance
specified in phpunit.xml to fetch its the version.

This is a quick example of how this annotation can be used:

    /**
     * @group connected
     * @requiresRedisVersion >= 2.8.9
     */
    public function testExecutedOnlyWithMatchingRedisVersion()
    {
    }

Future improvements (currently not needed) include:

  * Same annotation working on a class-level (but still applied only
    to test methods with an explicitly assigned @group connected).

  * Ability to specify a version range.

Meh

Meh
2014-06-09 17:31:18 +02:00
Daniele Alessandri 940326e5bd New command: ZREMRANGEBYLEX (Redis 2.8.9). 2014-06-09 15:35:28 +02:00
Daniele Alessandri ea32f74512 New command: ZRANGEBYLEX (Redis 2.8.9). 2014-06-09 15:26:17 +02:00
Daniele Alessandri 8dbac3dd73 New command: ZLEXCOUNT (Redis 2.8.9). 2014-06-09 15:17:36 +02:00
Daniele Alessandri 5a474c5a32 Rename alias used in Predis\Client for Predis\Transaction\MultiExec. 2014-06-03 18:56:48 +02:00
Daniele Alessandri 0148743a76 Fix parsing of the output of CLUSTER NODES to fetch slots map.
There was an error in presence of slaves in the cluster configuration,
see #165 for reference.
2014-06-03 16:24:27 +02:00
Daniele Alessandri 5c935d97bd Merge branch 'v1.0.0-dev/connection-namespace' 2014-06-03 15:45:57 +02:00
Daniele Alessandri 1fd113c570 Rename ComposableProtocolProcessor to CompositeProtocolProcessor. 2014-06-03 15:45:40 +02:00
Daniele Alessandri abd284c972 Complete reorganization of the Predis\Connection namespace.
* Renamed SingleConnectionInterface to NodeConnectionInterface since
  this name is better and makes even more sense in the context of
  cluster and replication scenarios.

* Moved specialized aggregate connections (the ones implementing both
  predis and redis cluster and master/slave replication) in a newly
  created Predis\Connection\Aggregate sub-namespace.

* Removed the "Connection" part from names of aggregate connection
  interfaces in the Predis\Connection\Aggregate sub-namespace.

* Changed "Composable" to "Composite" in the name of interfaces and
  classes that can use pluggable protocol processors.
2014-06-03 15:19:32 +02:00
Daniele Alessandri ff2e0823ec Merge remote-tracking branch 'github/pr/174' 2014-05-30 12:32:40 +02:00
Graham Campbell a6c6951bf8 Added 1.0 branch alias
Let's allow people to install predis using "1.0.x@dev", "~1.0@dev", or any other valid version constraint rather than typing "dev-master" which is really horrible.
2014-05-30 11:24:39 +01:00
Daniele Alessandri 87417f4d7e Skip integration tests for HyperLogLog commands on Redis < 2.8.9.
Caught this by running the test suite on TravisCI which still runs an
older version of Redis 2.8. We should find a more decent way to handle
differences in profiles when commands get added between patch releases
of Redis, our custom skip method will do for now.
2014-05-30 12:19:05 +02:00
Daniele Alessandri 2aa0b071fc New commands: PFADD, PFCOUNT, PFMERGE (Redis 2.8.9).
Many thanks to @rubensayshi for his initial commits on this in #163,
but I had to start from scratch for the master branch first.
2014-05-30 11:32:39 +02:00
Alexey Kupershtokh f784dfad84 Enable INCRBYFLOAT in cluster mode 2014-05-28 13:00:24 +02:00
Daniele Alessandri 10c2f321ff Merge branch 'pr170-master' 2014-05-28 12:54:16 +02:00
thbourlove 7da3da776f use phpunit 4.x instead of 3.x 2014-05-28 12:54:04 +02:00
thbourlove 90cb71ac4a isntall requirement with a better way 2014-05-28 12:53:58 +02:00
thbourlove 2d4383c891 add phpunit as dev requirement 2014-05-28 12:53:50 +02:00
Daniele Alessandri 8ea76f79c7 Minor rewording in CHANGELOG. 2014-03-25 15:33:27 +01:00
Daniele Alessandri 5c5dd40527 Remove implementation of Predis\Command\Command::__toString().
Issue #151 pointed to a flaw in how command instances were converted
to strings: we were simply truncating their arguments when exceeding
a certain size as this was mostly intended for logging or debugging,
but this approach breaks strings containing multibyte characters so
we decided to drop this feature altogether for the sake of simplicity.

It is still possible to replicate the same (and eventually improved)
behavior externally by fetching ID and arguments of a command out of
a command instance using the public methods made available by the
Predis\Command\CommandInterface.
2014-03-25 15:32:20 +01:00
Daniele Alessandri 4638e05865 Tweak sentence in CHANGELOG.
[ci skip]
2014-03-25 15:05:37 +01:00
Daniele Alessandri 4784291640 Failures for PHP 5.6 on Travis CI are not allowed anymore. 2014-03-25 14:49:49 +01:00
Daniele Alessandri a51ff2d6e5 Port #156 to the current master branch.
This fix the parsing of responses to INFO when the node is configured
to work with redis-sentinel.
2014-03-25 14:49:25 +01:00
Daniele Alessandri 451d28ee66 Let's set this in stone: next major version is going to be v1.0.0.
[ci skip]
2014-02-12 10:27:42 +01:00
Daniele Alessandri e23fd9bea8 Use redis-cluster rules for empty key tags for client-side sharding.
This commit represents a breaking change when the first occurrence of
"{}" is found in a key because it will produce a different hash than
previous versions of Predis, thus leading to a different partitioning.

If you really need to stick with the old behavior, you can subclass
Predis\Cluster\PredisStrategy and override extractKeyTag() using the
old implementation of this method and pass the strategy instance when
initializing the cluster connection via client options.
2014-02-11 19:06:47 +01:00
Daniele Alessandri 8fbe658ca8 Fix implementation for hash tags extraction from keys.
We now fully comply with the specifications defined by Redis.
2014-02-11 19:06:44 +01:00
Daniele Alessandri d89027d2da Add PHP 5.6 to the build matix of Travis-CI.
Builds are allowed to fail for now as PHP 5.6 is still in alpha stage.
2014-02-11 16:35:39 +01:00
Daniele Alessandri 26289f47ec Add support for key hash tags in redis-cluster (Redis 3.0.0b1).
Multi-keys operations are not allowed even when keys generate the same
hash but this will probably be supported in later betas of Redis which
means we will basically end up reusing the whole strategy used for
client-side sharding.

Ported from the v0.8 branch.
2014-02-11 15:44:37 +01:00
Daniele Alessandri ba0dc12d5b Merge pull request #146 from GrahamCampbell/master
Travis Tweaks
2014-02-10 21:00:02 +01:00
Graham Campbell 42a9489f11 Updated travis.yml 2014-02-10 19:49:26 +00:00
Daniele Alessandri 51febb32a9 Update CHANGELOG. 2014-01-16 15:26:30 +01:00
Daniele Alessandri 0a5363dddf Bump year in LICENSE.
[ci skip]
2014-01-10 17:47:32 +01:00
Daniele Alessandri b852eeed9f [bin] Add missing executable in the repository for new script. 2014-01-08 17:37:02 +01:00
Daniele Alessandri 10dcac8f05 [bin] Add helper script to automate PEAR package creation.
Note that this script takes care of customizing `phpunit.xml.dist` so
that tests can be run as soon as the PEAR package has been installed
as requested in #126.
2014-01-08 17:34:52 +01:00
Daniele Alessandri ae61a0fd2b [tests] Use Predis\Autoload from include_path when not in repository.
This is useful only for running the test suite after installing the
PEAR package, see #126 for reference.
2014-01-08 17:34:41 +01:00
Daniele Alessandri dc6c298960 Reword paragraph in README about HHVM compatibility. 2013-12-22 16:19:05 +01:00
Daniele Alessandri e04c7d51b8 Explicitly return null value. 2013-12-22 16:19:05 +01:00
Daniele Alessandri da8a203a75 Remove useless return statement. 2013-12-22 16:19:04 +01:00
Daniele Alessandri bf32f4b87c [tests] Remove unused "use" directives. 2013-12-22 16:19:04 +01:00
Daniele Alessandri 46671b9095 Run php-cs against test suite.
[ci skip]
2013-12-22 16:18:59 +01:00
Daniele Alessandri 9a38d2caec Move @property-read tags for parameters and options to interfaces.
This actually makes sense since whatever the actual implementation is,
classes implementing these interfaces should provide at least those
properties that are actively used through the library.
2013-12-22 15:03:31 +01:00
Daniele Alessandri cfa456fdd1 [tests] Fix a couple of innocuous glitches. 2013-12-22 15:00:51 +01:00
Daniele Alessandri 6a577a0eb5 Apply more phpdoc fixes. 2013-12-22 15:00:51 +01:00