From 8856c48950bf013c44bd13423a6565924a40b423 Mon Sep 17 00:00:00 2001 From: Michael Hixson Date: Mon, 29 Jan 2018 18:19:13 -0800 Subject: [PATCH] Try to fix PHP/hhvm tests by working around an issue with SET NAMES I think we are running into this problem: https://github.com/facebook/hhvm/issues/8111 We don't solve that problem, but we avoid it by specifying utf8 in a different fashion. I also took the opportunity to use the "TFB-database" hostname instead of the DBHOST environment variable because it's simpler that way. Here are the steps I took in a local TFB environment that make me think we're running into the same issue as that GitHub issue: - Run toolset/run-tests.py --mode verify --test hvm, see that it fails all tests with error messages that look like the application server simply isn't there - Enable logging in PHP/hhvm/deploy/config.hdf (basically copy the "Log" section over from config-debug.hdf), run the test again - Look at the log file it spit out, PHP/hhvm/error.log, notice messages like this: Core dumped: Segmentation fault Stack trace in /tmp/stacktrace.28653.log - /tmp is cleared by the TFB toolset each run, so I comment out that part of benchmarker.py that clears /tmp - Run the test again, look at the stacktrace file in /tmp, notice a stack trace referring to our implementation code like this: #0 PDO->__construct() called at [/home/techempower/FrameworkBenchmarks/frameworks/PHP/hhvm/once.php.inc:14] #1 Benchmark->setup_db() called at [/home/techempower/FrameworkBenchmarks/frameworks/PHP/hhvm/once.php.inc:31] #2 Benchmark->bench_db() called at [/home/techempower/FrameworkBenchmarks/frameworks/PHP/hhvm/db.php:10] #3 main() called at [/home/techempower/FrameworkBenchmarks/frameworks/PHP/hhvm/db.php:13] - Google a bit, come across a GitHub issue talking about a similar problem when they used "SET NAMES" - Comment the part of PHP/hhvm/once.php.inc that uses SET NAMES, run test again and it worked, except for fortunes which failed because of character encoding problems - Google for a different way to specify utf8 in the PDO constructor, try it again, all tests pass locally --- frameworks/PHP/hhvm/once.php.inc | 14 ++++++-------- frameworks/PHP/hhvm/setup_hhvm.sh | 1 - 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/frameworks/PHP/hhvm/once.php.inc b/frameworks/PHP/hhvm/once.php.inc index 4cfe31be4b6..7ab6668a7ec 100644 --- a/frameworks/PHP/hhvm/once.php.inc +++ b/frameworks/PHP/hhvm/once.php.inc @@ -3,15 +3,13 @@ class Benchmark { var $pdo; - public function setup_db($need_utf8 = true) + public function setup_db() { - $attrs = array(PDO::ATTR_PERSISTENT => false); - // hhvm doesn't support charset=utf8 in the DSN yet - // See https://github.com/facebook/hhvm/issues/1309 - if ($need_utf8) { - $attrs[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8"; - } - $this->pdo = new PDO('mysql:host=localhost;dbname=hello_world', 'benchmarkdbuser', 'benchmarkdbpass', $attrs); + $this->pdo = new PDO( + 'mysql:host=TFB-database;dbname=hello_world;charset=utf8', + 'benchmarkdbuser', + 'benchmarkdbpass', + array(PDO::ATTR_PERSISTENT => false)); } public function bench_json() diff --git a/frameworks/PHP/hhvm/setup_hhvm.sh b/frameworks/PHP/hhvm/setup_hhvm.sh index 759402fb6cd..00088b865a7 100755 --- a/frameworks/PHP/hhvm/setup_hhvm.sh +++ b/frameworks/PHP/hhvm/setup_hhvm.sh @@ -2,7 +2,6 @@ fw_depends mysql nginx php7 hhvm -sed -i 's|host=localhost;|host='"${DBHOST}"';|g' once.php.inc sed -i 's|SourceRoot = .*/FrameworkBenchmarks/hhvm|SourceRoot = '"${TROOT}"'|g' deploy/config.hdf sed -i 's|Path = .*/.hhvm.hhbc|Path = '"${TROOT}"'/.hhvm.bbhc|g' deploy/config.hdf sed -i 's|PidFile = .*/hhvm.pid|PidFile = '"${TROOT}"'/hhvm.pid|g' deploy/config.hdf