Bug 1039849

Summary: php and zend cartridges are missing mysql default socket
Product: OpenShift Online Reporter: Vojtech Vitek <vvitek>
Component: ImageAssignee: Vojtech Vitek <vvitek>
Status: CLOSED CURRENTRELEASE QA Contact: libra bugs <libra-bugs>
Severity: low Docs Contact:
Priority: low    
Version: 2.xCC: bmeng, dmcphers, hripps, vvitek
Target Milestone: ---Keywords: UpcomingRelease
Target Release: ---   
Hardware: All   
OS: All   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2014-04-24 21:34:44 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description Vojtech Vitek 2013-12-10 07:40:56 UTC
Originally reported at:
https://www.openshift.com/forums/openshift/php-mysql-zend-framework

Comment 2 Vojtech Vitek 2014-02-13 21:24:07 UTC
Workaround:

rhc ssh <app>
cat - >> .htaccess <<EOF
php_value mysql.default_socket "${OPENSHIFT_MYSQL_DB_SOCKET}"
php_value mysqli.default_socket "${OPENSHIFT_MYSQL_DB_SOCKET}"
EOF

Comment 3 Vojtech Vitek 2014-03-24 18:32:07 UTC
https://github.com/openshift/origin-server/pull/5046

Comment 7 openshift-github-bot 2014-03-27 02:30:20 UTC
Commit pushed to master at https://github.com/openshift/li

https://github.com/openshift/li/commit/3d27c9fddd047e7a9176ab8dc73c4252d1dc348b
Update Cartridge Versions for Stage Cut

Mark the following cartridges for incompatible upgrade:
- metrics and rockmongo because of the logshifter code
- zend because of the Bug 1039849

Comment 8 Meng Bo 2014-04-01 06:04:40 UTC
Checked on devenv_4608, issue still can be reproduced.

For the new created apps, after add mysql to php/zend, and restart the app, the mysql.default_socket is still using the system default value.

[php54-bmengdev.dev.rhcloud.com 533a2e8a06a098edde000001]\> php -i |grep socket
mysql.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock
mysqli.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock
pdo_mysql.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock

[php54-bmengdev.dev.rhcloud.com 533a2e8a06a098edde000001]\> grep "mysql" php/configuration/etc/php.ini  |grep socket
mysql.default_socket =
mysqli.default_socket =


For migration parts, apps which does not have a mysql db added will use the system mysql sock path in php.ini file.

[zend61-bmeng1stg.stg.rhcloud.com 52e4eaa42587c8d766000043]\> grep "mysql" zend/php-5.4/etc/php.ini |grep socket
pdo_mysql.default_socket=/var/lib/mysql/mysql.sock
mysql.default_socket=/var/lib/mysql/mysql.sock
mysqli.default_socket=/var/lib/mysql/mysql.sock



Assign this back.

Comment 10 Vojtech Vitek 2014-04-01 11:48:54 UTC
(In reply to Meng Bo from comment #8)
> For migration parts, apps which does not have a mysql db added will use the
> system mysql sock path in php.ini file.

There's no MySQL socket available in apps that doesn't have MySQL cartridge attached. When the default_socket directive is empty => PHP defaults it to /var/lib/mysql/mysql.sock. That's expected behavior.

Comment 12 Meng Bo 2014-04-02 10:03:23 UTC
But for the new created app with mysql added, it will still using the system default path as the gear mysql.default_socket?

[phpnew-bmeng1stg.stg.rhcloud.com 533bd9ad2587c8a75d0001d3]\> php -i |grep default_socket
mysql.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock
mysqli.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock
pdo_mysql.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock


[phpnew-bmeng1stg.stg.rhcloud.com 533bd9ad2587c8a75d0001d3]\> env|grep MYSQL
OPENSHIFT_MYSQL_DIR=/var/lib/openshift/533bd9ad2587c8a75d0001d3/mysql/
OPENSHIFT_MYSQL_DB_PORT=3306
OPENSHIFT_MYSQL_DB_HOST=127.10.165.2
OPENSHIFT_MYSQL_DB_PASSWORD=c2YVnWaQR8QX
OPENSHIFT_MYSQL_IDENT=redhat:mysql:5.5:0.2.10
OPENSHIFT_MYSQL_DB_USERNAME=adminTxMEL5e
OPENSHIFT_MYSQL_DB_SOCKET=/var/lib/openshift/533bd9ad2587c8a75d0001d3/mysql//socket/mysql.sock
OPENSHIFT_MYSQL_DB_URL=mysql://adminTxMEL5e:c2YVnWaQR8QX.165.2:3306/
OPENSHIFT_MYSQL_LD_LIBRARY_PATH_ELEMENT=/opt/rh/mysql55/root/usr/lib64

Comment 13 Vojtech Vitek 2014-04-02 15:24:21 UTC
@Meng Bo, yeah, you're right. The logic doesn't count with MySQL cartridge being added/removed to the application during it's existence. It only works for the existing applications that already have MySQL cartridge added, or for new applications that have mysql added from the very beginning (one-liner rhc command).

Marking UpcomingRelease, because of low priority. This is not a TO_STAGE issue.

ZEND - I'm going to fix this during Sprint 43.
PHP - Sprint 43 functionality already fixes this issue naturally (PHP.INI gets processed on every cartridge start/restart)

Comment 14 Vojtech Vitek 2014-04-04 16:30:57 UTC
How to test:

$ rhc app create z61 zend-6.1 --no-git
$ rhc ssh z61 "cat zend/php-5.4/etc/php.ini | grep default_socket"
> default_socket_timeout=60
> pdo_mysql.default_socket=
> mysql.default_socket=
> mysqli.default_socket=

$ rhc cartridge-add mysql-5.1 --app z61
$ rhc app-restart z61
$ rhc ssh z61 "cat zend/php-5.4/etc/php.ini | grep default_socket"
> default_socket_timeout=60
> pdo_mysql.default_socket=/var/lib/openshift/***/mysql//socket/mysql.sock
> mysql.default_socket=/var/lib/openshift/***9/mysql//socket/mysql.sock
> mysqli.default_socket=/var/lib/openshift/***/mysql//socket/mysql.sock

Comment 15 Vojtech Vitek 2014-04-04 17:00:58 UTC
https://github.com/openshift/li/pull/2568

Comment 17 Vojtech Vitek 2014-04-05 11:45:36 UTC
User must restart the php gear to pick up new MYSQL_SOCKET value.

Comment 18 Meng Bo 2014-04-08 10:01:33 UTC
Checked on devenv_4638, issue has been fixed.

For both zend and php cartridge, the mysql.default_sock can be updated to correct value.

# rhc ssh zend61 "cat zend/php-5.4/etc/php.ini | grep default_socket"
default_socket_timeout=60
pdo_mysql.default_socket=/var/lib/openshift/5343c657cfca16b1820001fe/mysql//socket/mysql.sock
mysql.default_socket=/var/lib/openshift/5343c657cfca16b1820001fe/mysql//socket/mysql.sock
mysqli.default_socket=/var/lib/openshift/5343c657cfca16b1820001fe/mysql//socket/mysql.sock

# rhc ssh php54 "cat php/configuration/etc/php.ini | grep default_socket"
default_socket_timeout = 60
mysql.default_socket =/var/lib/openshift/5343c670cfca16e53100021b/mysql//socket/mysql.sock
mysqli.default_socket =/var/lib/openshift/5343c670cfca16e53100021b/mysql//socket/mysql.sock

Move bug to verified.