From b0013c19105f881d3d2b8a923571521e86d1de83 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 28 Nov 2017 13:13:14 +0100 Subject: add upstream patch to disable binary protocol with old libmemcached 1.0.16 in EL-7 --- memcached-pr330.patch | 230 ++++++++++++++++++++++++++++++++++++++++++++++++ php-pecl-memcached.spec | 9 +- 2 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 memcached-pr330.patch diff --git a/memcached-pr330.patch b/memcached-pr330.patch new file mode 100644 index 0000000..aa6739f --- /dev/null +++ b/memcached-pr330.patch @@ -0,0 +1,230 @@ +From d81697f7a04646edbbed8ecf34cb524ab1ff8d3c Mon Sep 17 00:00:00 2001 +From: Remi Collet +Date: Mon, 20 Feb 2017 19:27:39 +0100 +Subject: [PATCH 1/2] Refresh memcached.ini provided configuration + +- remove deprecated options +- add missing memcached.sess_server_failure_limit option +- comment all options default value (only needed when not default value) + see php.ini-production which follow this convention +--- + memcached.ini | 56 +++++++++++++++++++++++++++----------------------------- + 1 file changed, 27 insertions(+), 29 deletions(-) + +diff --git a/memcached.ini b/memcached.ini +index 59001aa..fa9a6fd 100644 +--- a/memcached.ini ++++ b/memcached.ini +@@ -2,45 +2,39 @@ + ; Use session locking + ; valid values: On, Off + ; the default is On +-memcached.sess_locking = On +- +-; !! DEPRECATED AND REMOVED in 3.x !! +-; memcached.sess_lock_wait = 150000 +- +-; !! DEPRECATED AND REMOVED in 3.x !! +-; memcached.sess_lock_max_wait = 0; ++;memcached.sess_locking = On + + ; The minimum time, in milliseconds, to wait between session lock attempts. + ; This value is double on each lock retry until memcached.sess_lock_wait_max + ; is reached, after which any further retries will take sess_lock_wait_max seconds. + ; Default is 1000. +-memcached.sess_lock_wait_min = 1000; ++;memcached.sess_lock_wait_min = 1000; + + ; The maximum time, in milliseconds, to wait between session lock attempts. + ; Default is 2000. +-memcached.sess_lock_wait_max = 2000; ++;memcached.sess_lock_wait_max = 2000; + + ; The number of times to retry locking the session lock, not including the first attempt. + ; Default is 5. +-memcached.sess_lock_retries = 5; ++;memcached.sess_lock_retries = 5; + + ; The time, in seconds, before a lock should release itself. + ; Setting to 0 results in the default behaviour, which is to + ; use the memcached.sess_lock_max_wait setting. If that is + ; also 0, max_execution_time will be used. +-memcached.sess_lock_expire = 0; ++;memcached.sess_lock_expire = 0; + + ; memcached session key prefix + ; valid values are strings less than 219 bytes long + ; the default value is "memc.sess.key." +-memcached.sess_prefix = "memc.sess.key." ++;memcached.sess_prefix = "memc.sess.key." + + ; Whether or not to re-use the memcached connections corresponding to the value(s) + ; of session.save_path after the execution of the script ends. + ; Don't use this if certain settings (e.g. SASL settings, sess_binary_protocol) would + ; be overridden between requests. + ; Default is Off. +-memcached.sess_persistent = Off ++;memcached.sess_persistent = Off + + ; memcached session consistent hash mode + ; if set to On, consistent hashing (libketama) is used +@@ -48,11 +42,15 @@ memcached.sess_persistent = Off + ; When consistent hashing is used, one can add or remove cache + ; node(s) without messing up too much with existing keys + ; default is On +-memcached.sess_consistent_hash = On ++;memcached.sess_consistent_hash = On + + ; Allow failed memcached server to automatically be removed. + ; Default is Off. (In previous versions, this setting was called memcached.sess_remove_failed) +-memcached.sess_remove_failed_servers = Off ++;memcached.sess_remove_failed_servers = Off ++ ++; Set this value to enable the server be removed after ++; configured number of continuous times connection failure. ++;memcached.sess_server_failure_limit = 0 + + ; Write data to a number of additional memcached servers + ; This is "poor man's HA" as libmemcached calls it. +@@ -61,34 +59,34 @@ memcached.sess_remove_failed_servers = Off + ; from a replica. However, if the failed memcache server + ; becomes available again it will read the session from there + ; which could have old data or no data at all +-memcached.sess_number_of_replicas = 0 ++;memcached.sess_number_of_replicas = 0 + + ; Use the memcached binary protocol for memcached sessions (Instead of the text protocol) + ; libmemcached replicas work only if binary mode is enabled. + ; However, certain proxies (such as twemproxy) will work only if the binary protocol is disabled. + ; Default is On. In older versions of php-memcached, this setting was Off and was called memcached.sess_binary. +-memcached.sess_binary_protocol = On ++;memcached.sess_binary_protocol = On + + ; memcached session replica read randomize +-memcached.sess_randomize_replica_read = Off ++;memcached.sess_randomize_replica_read = Off + + ; memcached connect timeout value + ; In non-blocking mode this changes the value of the timeout + ; during socket connection in milliseconds. Specifying -1 means an infinite timeout. +-memcached.sess_connect_timeout = 1000 ++;memcached.sess_connect_timeout = 1000 + + ; Session SASL username + ; Both username and password need to be set for SASL to be enabled + ; In addition to this memcached.use_sasl needs to be on +-memcached.sess_sasl_username = NULL ++;memcached.sess_sasl_username = NULL + + ; Session SASL password +-memcached.sess_sasl_password = NULL ++;memcached.sess_sasl_password = NULL + + ; Set the compression type + ; valid values are: fastlz, zlib + ; the default is fastlz +-memcached.compression_type = "fastlz" ++;memcached.compression_type = "fastlz" + + ; Compression factor + ; Store compressed value only if the compression +@@ -98,13 +96,13 @@ memcached.compression_type = "fastlz" + ; plain_len > comp_len * factor + ; + ; the default value is 1.3 (23% space saving) +-memcached.compression_factor = "1.3" ++;memcached.compression_factor = "1.3" + + ; The compression threshold + ; + ; Do not compress serialized values below this threshold. + ; the default is 2000 bytes +-memcached.compression_threshold = 2000 ++;memcached.compression_threshold = 2000 + + ; Set the default serializer for new memcached objects. + ; valid values are: php, igbinary, json, json_array, msgpack +@@ -119,14 +117,14 @@ memcached.compression_threshold = 2000 + ; msgpack - a cross-language binary serializer + ; + ; The default is igbinary if available, then msgpack if available, then php otherwise. +-memcached.serializer = "igbinary" ++;memcached.serializer = "igbinary" + + ; The amount of retries for failed store commands. + ; This mechanism allows transparent fail-over to secondary servers when + ; set/increment/decrement/setMulti operations fail on the desired server in a multi-server + ; environment. + ; the default is 2 +-memcached.store_retry_count = 2 ++;memcached.store_retry_count = 2 + + ; Sets the default for consistent hashing for new connections. + ; (To configure consistent hashing for session connections, +@@ -137,7 +135,7 @@ memcached.store_retry_count = 2 + ; When consistent hashing is used, one can add or remove cache + ; node(s) without messing up too much with existing keys + ; default is Off +-memcached.default_consistent_hash = Off ++;memcached.default_consistent_hash = Off + + ; Sets the default memcached protocol for new connections. + ; (To configure the memcached protocol for connections used by sessions, +@@ -146,7 +144,7 @@ memcached.default_consistent_hash = Off + ; If set to On, the memcached binary protocol is used by default. + ; If set to Off, the memcached text protocol is used. + ; Default is Off +-memcached.default_binary_protocol = Off ++;memcached.default_binary_protocol = Off + + ; Sets the default memcached connection timeout for new connections. + ; (To configure the memcached connection timeout for sessions, +@@ -155,4 +153,4 @@ memcached.default_binary_protocol = Off + ; during socket connection in milliseconds. Specifying -1 means an infinite timeout. + ; Specifying 0 means using the memcached library's default connection timeout. + ; Default is 0. +-memcached.default_connect_timeout = 0 ++;memcached.default_connect_timeout = 0 + +From 0a90491dd13af8dfc9a2e1ee600590fe9245ac50 Mon Sep 17 00:00:00 2001 +From: Remi Collet +Date: Mon, 20 Feb 2017 19:32:37 +0100 +Subject: [PATCH 2/2] set sess_binary_protocol off by default with older + libmemcached + +--- + memcached.ini | 4 +++- + php_memcached.c | 4 ++++ + 2 files changed, 7 insertions(+), 1 deletion(-) + +diff --git a/memcached.ini b/memcached.ini +index fa9a6fd..6d05da3 100644 +--- a/memcached.ini ++++ b/memcached.ini +@@ -64,7 +64,9 @@ + ; Use the memcached binary protocol for memcached sessions (Instead of the text protocol) + ; libmemcached replicas work only if binary mode is enabled. + ; However, certain proxies (such as twemproxy) will work only if the binary protocol is disabled. +-; Default is On. In older versions of php-memcached, this setting was Off and was called memcached.sess_binary. ++; In older versions of php-memcached, this setting was Off and was called memcached.sess_binary. ++; Default is On with libmemcached 1.0.18 or newer. ++; Default is Off with older version. + ;memcached.sess_binary_protocol = On + + ; memcached session replica read randomize +diff --git a/php_memcached.c b/php_memcached.c +index 1967332..b920970 100644 +--- a/php_memcached.c ++++ b/php_memcached.c +@@ -332,7 +332,11 @@ PHP_INI_BEGIN() + MEMC_SESSION_INI_ENTRY("lock_wait_max", "2000", OnUpdateLongGEZero, lock_wait_max) + MEMC_SESSION_INI_ENTRY("lock_retries", "5", OnUpdateLong, lock_retries) + MEMC_SESSION_INI_ENTRY("lock_expire", "0", OnUpdateLongGEZero, lock_expiration) ++#if defined(LIBMEMCACHED_VERSION_HEX) && LIBMEMCACHED_VERSION_HEX < 0x01000018 ++ MEMC_SESSION_INI_ENTRY("binary_protocol", "0", OnUpdateBool, binary_protocol_enabled) ++#else + MEMC_SESSION_INI_ENTRY("binary_protocol", "1", OnUpdateBool, binary_protocol_enabled) ++#endif + MEMC_SESSION_INI_ENTRY("consistent_hash", "1", OnUpdateBool, consistent_hash_enabled) + MEMC_SESSION_INI_ENTRY("number_of_replicas", "0", OnUpdateLongGEZero, number_of_replicas) + MEMC_SESSION_INI_ENTRY("randomize_replica_read", "0", OnUpdateLongGEZero, randomize_replica_read_enabled) diff --git a/php-pecl-memcached.spec b/php-pecl-memcached.spec index 7d314f1..8d07b78 100644 --- a/php-pecl-memcached.spec +++ b/php-pecl-memcached.spec @@ -27,13 +27,15 @@ Summary: Extension to work with the Memcached caching daemon Name: %{?sub_prefix}php-pecl-memcached Version: 3.0.4 -Release: 1%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} +Release: 2%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} License: PHP Group: Development/Languages URL: http://pecl.php.net/package/%{pecl_name} Source0: http://pecl.php.net/get/%{pecl_name}-%{version}.tgz +Patch0: %{pecl_name}-pr330.patch + BuildRequires: %{?scl_prefix}php-devel >= 7 BuildRequires: %{?scl_prefix}php-pear BuildRequires: %{?scl_prefix}php-json @@ -128,6 +130,7 @@ sed -e 's/role="test"/role="src"/' \ -i package.xml cd NTS +%patch0 -p1 -b .pr330 %if %{with_fastlz} rm -r fastlz @@ -331,6 +334,10 @@ exit $ret %changelog +* Tue Nov 28 2017 Remi Collet - 3.0.4-2 +- add upstream patch to disable binary protocol with + old libmemcached 1.0.16 in EL-7 + * Tue Nov 21 2017 Remi Collet - 3.0.4-1 - Update to 3.0.4 -- cgit