Bug #69921 Bundled memcached exposes wrong memcached/libevent version info
Submitted: 4 Aug 2013 0:00 Modified: 26 Sep 2014 21:20
Reporter: Hartmut Holzgraefe Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Cluster: Memcached Severity:S3 (Non-critical)
Version:MySQL Cluster 7.3.0, 7.3.2, 7.4.1 OS:Linux
Assigned to: CPU Architecture:Any

[4 Aug 2013 0:00] Hartmut Holzgraefe
Description:
When building memcached from the bundled sources the version info in the reply to the "stats" command looks like this:

  STAT version 5.5.25a-ndb-7.3.0
  STAT libevent 5.5.25a-ndb-7.3.0

When building against external memcached 1.6beta1 it reads like this though:

  STAT version 1.6.0_beta1
  STAT libevent 1.4.14b-stable

Problem is that both memcached and libevent source depends on VERSION being set to the version number in the local config.h files generated by the local configure scripts. 

These have been replaced by CMakeLists.txt files without taking care of preserving the VERSION info, so now both include the global mysql config.h file instead and so both bundled memcached and libevent espose the mysql version number instead of their own, which doesn't really seem to be intentional.

Even worse: the version info for both bundled projects are apparently nowhere to be found in the bundled source anymore due to the removal of the autotools spec files containing them ...

How to repeat:
Check "stats" output from bundled memcached binary.

Suggested fix:
Fix CMake replacements for upstream autotools spec files to provide the same version info ...
[8 Aug 2013 13:00] MySQL Verification Team
Hello Hartmut,

Thank you for the report.
I'm not able to reproduce the reported behavior with 7.3.2.
Could you please provide exact steps to reproduce this issue?

So far I tried this way and it reports:

STAT version 1.6.0_beta1
STAT libevent 1.4.14b-stable

// Build details
cmake -DCMAKE_INSTALL_PREFIX=/data/ushastry/cluster/mysql-cluster-7.3.2 -DWITH_BUNDLED_MEMCACHED=ON
make 
make install

// setup cluster 7.3.2, start mgm, storage and api node

//  Connect

[root@cluster-repo mysql-cluster-7.3.2]# memcached -E lib/ndb_engine.so -u root
09-Aug-2013 16:17:55 IST NDB Memcache 5.6.11-ndb-7.3.2 started [NDB 7.3.2; MySQL 5.6.11]
Contacting primary management server (localhost:1186) ...
Connected to "localhost:1186" as node id 5.
Retrieved 4 key prefixes for server role "default_role".
The default behavior is that:
    GET uses NDB only
    SET uses NDB only
    DELETE uses NDB only.
The 3 explicitly defined key prefixes are "b:" (demo_table_large), "mc:" () and "t:" (demo_table_tabs)
Connected to "127.0.0.1" as node id 6.
Server started with 4 threads.
Priming the pump ...
Connected to "127.0.0.1" as node id 7.
Scheduler: using 2 connections to cluster 0
Scheduler: starting for 1 cluster; c0,f0,g1,t1
done [0.809 sec].
stats
Pipeline 0 attached to S scheduler.
Pipeline 1 attached to S scheduler.

//

$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
stats
STAT pid 31661
STAT uptime 138
STAT time 1376045411
STAT version 1.6.0_beta1
STAT libevent 1.4.14b-stable
STAT pointer_size 64
STAT rusage_user 1.941704
STAT rusage_system 1.139826
STAT daemon_connections 10
STAT curr_connections 11
STAT total_connections 12
STAT connection_structures 11
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT auth_cmds 0
STAT auth_errors 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT bytes_read 19
STAT bytes_written 904
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT rejected_conns 0
STAT threads 4
STAT conn_yields 0
STAT evictions 0
STAT curr_items 0
STAT total_items 0
STAT bytes 0
STAT reclaimed 0
STAT engine_maxbytes 67108864
END

Thanks,
Umesh
[8 Aug 2013 15:02] Hartmut Holzgraefe
That's weird as the only place where the "1.6.0_beta1" string can be found in the 7.3.2 tarball is 

  ./plugin/innodb_memcached/daemon_memcached/config.h

and 1.4.14 can't be found at all. The two libevent versions that are bundled only contain the version string 1.3.99-trunk in the event-config.h header file.

So it looks as if you built against a genuine external memcached 1.6beta1 (that one comes with bundled libevent 1.4.14, too) and not the bundled version ...
[8 Aug 2013 15:07] MySQL Verification Team
Thank you for your feedback.

Let me clean up everything ( looks like I messed memcached by installing 1.4, 1.6 beta for other issues) and get back to you on this.

Regards,
Umesh
[8 Aug 2013 15:10] Hartmut Holzgraefe
$ tar -xvzf mysql-cluster-gpl-7.3.2.tar.gz
$ cd mysql-cluster-gpl-7.3.2
$ mkdir _build; cd _build
$ cmake ..
$ make

$ strings ./storage/ndb/memcache/extra/memcached/memcached | grep 7.3.2
5.6.11-ndb-7.3.2
VERSION 5.6.11-ndb-7.3.2
mysql 5.6.11-ndb-7.3.2
mysql 5.6.11-ndb-7.3.2

$ strings ./storage/ndb/memcache/extra/memcached/memcached | grep 1.4

$ strings ./storage/ndb/memcache/extra/memcached/memcached | grep 1.6

$ ./storage/ndb/memcache/extra/memcached/memcached -h
mysql 5.6.11-ndb-7.3.2
-p <num>      TCP port number to listen on (default: 11211)
[...]

$ /usr/local/bin/memcached -h
memcached 1.6.0_beta1
-p <num>      TCP port number to listen on (default: 11211)
[...]
[9 Aug 2013 13:48] MySQL Verification Team
Thank you for your feedback.
Verified as described.

Thanks,
Umesh
[26 Sep 2014 21:20] Hartmut Holzgraefe
Still unfixed in 7.4.1:

$ mysql-ndb-7.4.1/bin/memcached -h
mysql 5.6.20-ndb-7.4.1