From 74380779abe8469b5037aa67daa76b7a0f9bca04 Mon Sep 17 00:00:00 2001 From: Phobetor Date: Wed, 5 Nov 2014 13:05:10 +0100 Subject: [PATCH 1/3] Add memcached options configuration and handling --- .../Builder/ServiceBuilder.php | 16 +++++ src/DependencyInjection/Configuration.php | 60 +++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/src/DependencyInjection/Builder/ServiceBuilder.php b/src/DependencyInjection/Builder/ServiceBuilder.php index bb993eb..9b29294 100755 --- a/src/DependencyInjection/Builder/ServiceBuilder.php +++ b/src/DependencyInjection/Builder/ServiceBuilder.php @@ -157,6 +157,22 @@ public function createCacheInstance(Definition $service, $type, $id, array $inst if (empty($instance['id'])) { $cache = new Definition(self::$types[$type]['class']); + // set memcached options first as they need to be set before the servers are added. + if ($type === 'memcached') { + if (!empty($instance['options']['memcached'])) { + foreach ($instance['options']['memcached'] as $option => $value) { + switch ($option) { + case 'serializer': + case 'hash': + case 'distribution': + $value = constant(sprintf('\Memcached::%s_%s', strtoupper($option), strtoupper($value))); + break; + } + $cache->addMethodCall('setOption', array(constant(sprintf('\Memcached::OPT_%s', strtoupper($option))), $value)); + } + } + } + if (isset($instance['persistent']) && $instance['persistent'] !== false) { if ($instance['persistent'] !== true) { $persistentId = $instance['persistent']; diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 08c2747..6bedc02 100755 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -112,6 +112,9 @@ function($v) { ->end() ->arrayNode('options') ->info("Options for Redis and Memcached.") + ->children() + ->append($this->getMemcachedOptions()) + ->end() ->end() ->arrayNode('hosts') ->prototype('array') @@ -164,6 +167,63 @@ function ($v) { return $node; } + /** + * @return ArrayNodeDefinition + */ + private function getMemcachedOptions() { + $treeBuilder = new TreeBuilder(); + $node = $treeBuilder->root('memcached'); + + if (class_exists('\Memcached')) { + $node + ->children() + ->booleanNode('compression') + ->end() + ->enumNode('serializer') + ->values(array('php', 'igbinary', 'json')) + ->end() + ->scalarNode('prefix_key') + ->end() + ->enumNode('hash') + ->values(array('default', 'md5', 'crc', 'fnv1_64', 'fnv1a_64', 'fnv1_32', 'fnv1a_32', 'hsieh', 'murmur')) + ->end() + ->enumNode('distribution') + ->values(array('modula', 'consistent')) + ->end() + ->booleanNode('libketama_compatible') + ->end() + ->booleanNode('uffer_writes') + ->end() + ->booleanNode('binary_protocol') + ->end() + ->booleanNode('no_block') + ->end() + ->booleanNode('tcp_nodelay') + ->end() + ->integerNode('socket_send_size') + ->end() + ->integerNode('socket_recv_size') + ->end() + ->integerNode('connect_timeout') + ->end() + ->integerNode('retry_timeout') + ->end() + ->integerNode('send_timeout') + ->end() + ->integerNode('recv_timeout') + ->end() + ->integerNode('poll_timeout') + ->end() + ->booleanNode('cache_lookups') + ->end() + ->integerNode('server_failure_limit') + ->end() + ->end(); + } + + return $node; + } + /** * Configure the "aequasi_cache.session" section * From 75ad18575b36a2804aa85c74bb35fdd84af99988 Mon Sep 17 00:00:00 2001 From: Phobetor Date: Wed, 5 Nov 2014 13:29:32 +0100 Subject: [PATCH 2/3] Fix code style --- src/DependencyInjection/Configuration.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 6bedc02..2279443 100755 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -170,7 +170,8 @@ function ($v) { /** * @return ArrayNodeDefinition */ - private function getMemcachedOptions() { + private function getMemcachedOptions() + { $treeBuilder = new TreeBuilder(); $node = $treeBuilder->root('memcached'); From 30c05ef4f83cb9b69ce748e1445ad1c9ceaecf77 Mon Sep 17 00:00:00 2001 From: Phobetor Date: Wed, 5 Nov 2014 14:15:17 +0100 Subject: [PATCH 3/3] Fix code style --- src/DependencyInjection/Configuration.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 2279443..369dfc3 100755 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -87,13 +87,13 @@ private function getClustersNode() ->defaultNull() ->beforeNormalization() ->ifTrue( - function($v) { - return $v === 'true' || $v === 'false'; + function ($v) { + return $v === 'true' || $v === 'false'; } ) ->then( - function($v) { - return (bool) $v; + function ($v) { + return (bool) $v; } ) ->end()