Skip to content

Commit 0d5f000

Browse files
amitsadaphulerschlussel
authored andcommitted
Add support for ppc64le centos7
MariaDB 10.2.32 is used for ppc64le, since mysql does not have wide support on ppc64le. On the other hand, mariadb, which is a drop in replacement for mysql, has better support and availability on power. The reason for chosing version 10.2.x is its' compatibility with mysql 5.x.
1 parent 0f022fc commit 0d5f000

5 files changed

Lines changed: 108 additions & 27 deletions

File tree

testing-mysql-server-5/repack-mysql-5.sh

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ set -eu
44

55
VERSION=5.7.22
66
BASEURL="https://dev.mysql.com/get/Downloads/MySQL-5.7"
7+
PPC64LE_BASEURL="http://yum.mariadb.org/10.2/centos/7/ppc64le/rpms/"
78

89
LINUX_BASE=mysql-$VERSION-linux-glibc2.12-x86_64
10+
LINUX_PPC64LE_RPM=MariaDB-server-10.2.32-1.el7.centos.ppc64le.rpm
911
OSX_BASE=mysql-$VERSION-macos10.13-x86_64
1012

1113
TAR=tar
@@ -40,10 +42,13 @@ mkdir -p dist $RESOURCES
4042
LINUX_NAME=$LINUX_BASE.tar.gz
4143
LINUX_DIST=dist/$LINUX_NAME
4244

45+
LINUX_PPC64LE_DIST=dist/$LINUX_PPC64LE_RPM
46+
4347
OSX_NAME=$OSX_BASE.tar.gz
4448
OSX_DIST=dist/$OSX_NAME
4549

4650
test -e $LINUX_DIST || curl -L -o $LINUX_DIST "$BASEURL/$LINUX_NAME"
51+
test -e $LINUX_PPC64LE_DIST || curl -L -o $LINUX_PPC64LE_DIST "$PPC64LE_BASEURL/$LINUX_PPC64LE_RPM"
4752
test -e $OSX_DIST || curl -L -o $OSX_DIST "$BASEURL/$OSX_NAME"
4853

4954
PACKDIR=$(mktemp -d "${TMPDIR:-/tmp}/mysql.XXXXXXXXXX")
@@ -62,6 +67,21 @@ $TAR -czf $OLDPWD/$RESOURCES/mysql-Linux-amd64.tar.gz \
6267
popd
6368
rm -rf $PACKDIR
6469

70+
PACKDIR=$(mktemp -d "${TMPDIR:-/tmp}/mysql.XXXXXXXXXX")
71+
cp $LINUX_PPC64LE_DIST $PACKDIR/
72+
pushd $PACKDIR
73+
rpm2cpio $LINUX_PPC64LE_RPM | cpio -idm
74+
mkdir -p mysql-Linux-ppc64le/bin mysql-Linux-ppc64le/lib64 mysql-Linux-ppc64le/share mysql-Linux-ppc64le/data
75+
cp usr/bin/mysql_install_db mysql-Linux-ppc64le/bin/
76+
cp usr/bin/my_print_defaults mysql-Linux-ppc64le/bin/
77+
cp usr/bin/resolveip mysql-Linux-ppc64le/bin/
78+
cp usr/sbin/mysqld mysql-Linux-ppc64le/bin/
79+
cp -r usr/lib64/* mysql-Linux-ppc64le/lib64/
80+
cp -r usr/share/mysql mysql-Linux-ppc64le/share/
81+
$TAR -C ./mysql-Linux-ppc64le -czf $OLDPWD/$RESOURCES/mysql-Linux-ppc64le.tar.gz bin lib64 share data
82+
popd
83+
rm -rf $PACKDIR
84+
6585
PACKDIR=$(mktemp -d "${TMPDIR:-/tmp}/mysql.XXXXXXXXXX")
6686
$TAR -xf $OSX_DIST -C $PACKDIR
6787
pushd $PACKDIR/$OSX_BASE

testing-mysql-server-5/src/main/java/com/facebook/presto/testing/mysql/EmbeddedMySql5.java

Lines changed: 48 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,31 +30,60 @@ public EmbeddedMySql5(MySqlOptions mySqlOptions)
3030
@Override
3131
public List<String> getInitializationArguments()
3232
{
33-
return ImmutableList.of(
33+
if (isMariadb) {
34+
return ImmutableList.of(
3435
"--no-defaults",
35-
"--initialize-insecure",
36+
"--basedir=" + getBaseDirectory(),
37+
"--datadir=" + getDataDirectory(),
3638
"--skip-sync-frm",
37-
"--innodb-flush-method=nosync",
38-
"--datadir", getDataDirectory());
39+
"--innodb-flush-method=nosync");
40+
}
41+
else {
42+
return ImmutableList.of(
43+
"--no-defaults",
44+
"--initialize-insecure",
45+
"--skip-sync-frm",
46+
"--innodb-flush-method=nosync",
47+
"--datadir", getDataDirectory());
48+
}
3949
}
4050

4151
@Override
4252
public List<String> getStartArguments()
4353
{
44-
return ImmutableList.of(
45-
"--no-defaults",
46-
"--skip-ssl",
47-
"--default-time-zone=+00:00",
48-
"--disable-partition-engine-check",
49-
"--explicit_defaults_for_timestamp",
50-
"--skip-sync-frm",
51-
"--innodb-flush-method=nosync",
52-
"--innodb-flush-log-at-trx-commit=0",
53-
"--innodb-doublewrite=0",
54-
"--bind-address=localhost",
55-
"--lc_messages_dir", getShareDirectory(),
56-
"--socket", getSocketDirectory(),
57-
"--port", String.valueOf(getPort()),
58-
"--datadir", getDataDirectory());
54+
if (isMariadb) {
55+
return ImmutableList.of(
56+
"--no-defaults",
57+
"--default-time-zone=+00:00",
58+
"--skip-sync-frm",
59+
"--innodb-flush-method=nosync",
60+
"--innodb-flush-log-at-trx-commit=0",
61+
"--innodb-doublewrite=0",
62+
"--bind-address=localhost",
63+
"--basedir=" + getBaseDirectory(),
64+
"--plugin-dir=" + getPluginDirectory(),
65+
"--log-error=" + getDataDirectory() + "mariadb.log",
66+
"--pid-file=" + getDataDirectory() + "mariadb.pid",
67+
"--socket=" + getDataDirectory() + "mysql.sock",
68+
"--port=" + String.valueOf(getPort()),
69+
"--datadir=" + getDataDirectory());
70+
}
71+
else {
72+
return ImmutableList.of(
73+
"--no-defaults",
74+
"--skip-ssl",
75+
"--default-time-zone=+00:00",
76+
"--disable-partition-engine-check",
77+
"--explicit_defaults_for_timestamp",
78+
"--skip-sync-frm",
79+
"--innodb-flush-method=nosync",
80+
"--innodb-flush-log-at-trx-commit=0",
81+
"--innodb-doublewrite=0",
82+
"--bind-address=localhost",
83+
"--lc_messages_dir", getShareDirectory(),
84+
"--socket", getSocketDirectory(),
85+
"--port", String.valueOf(getPort()),
86+
"--datadir", getDataDirectory());
87+
}
5988
}
6089
}

testing-mysql-server-5/src/test/java/com/facebook/presto/testing/mysql/TestTestingMySqlServer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@
1818
public class TestTestingMySqlServer
1919
extends AbstractTestTestingMySqlServer
2020
{
21+
// for ppc64le, mariadb 10.2.x is used as an alternative for mysql 5.7
22+
private static final boolean isMariadb = System.getProperty("os.arch").equals("ppc64le");
23+
2124
@Override
2225
public String getMySqlVersion()
2326
{
24-
return "5.7.22";
27+
return (isMariadb ? "5.5.5-10.2.32-MariaDB" : "5.7.22");
2528
}
2629

2730
@Override

testing-mysql-server-base/src/main/java/com/facebook/presto/testing/mysql/AbstractEmbeddedMySql.java

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ public abstract class AbstractEmbeddedMySql
6868
private final Duration shutdownWait;
6969
private final Duration commandTimeout;
7070

71+
// for ppc64le, mariadb 10.2.x is used as an alternative for mysql 5.7
72+
protected final boolean isMariadb = System.getProperty("os.arch").equals("ppc64le");
73+
7174
public AbstractEmbeddedMySql(MySqlOptions mySqlOptions)
7275
throws IOException
7376
{
@@ -110,6 +113,16 @@ public Connection getMySqlDatabase()
110113
return DriverManager.getConnection(getJdbcUrl("root", "mysql"));
111114
}
112115

116+
protected String getMysqlInstallDb()
117+
{
118+
return (isMariadb ? serverDirectory.resolve("bin").resolve("mysql_install_db").toString() : "");
119+
}
120+
121+
protected String getBaseDirectory()
122+
{
123+
return serverDirectory.toString();
124+
}
125+
113126
protected String getMysqld()
114127
{
115128
return serverDirectory.resolve("bin").resolve("mysqld").toString();
@@ -127,7 +140,12 @@ protected String getShareDirectory()
127140

128141
protected String getSocketDirectory()
129142
{
130-
return serverDirectory.resolve("mysql.sock").toString();
143+
return (isMariadb ? "" : serverDirectory.resolve("mysql.sock").toString());
144+
}
145+
146+
protected String getPluginDirectory()
147+
{
148+
return (isMariadb ? serverDirectory.resolve("lib64").resolve("mysql").resolve("plugin").toString() : "");
131149
}
132150

133151
@Override
@@ -183,10 +201,18 @@ private static int randomPort()
183201

184202
private void initialize()
185203
{
186-
system(ImmutableList.<String>builder()
187-
.add(getMysqld())
188-
.addAll(getInitializationArguments())
189-
.build());
204+
if (isMariadb) {
205+
system(ImmutableList.<String>builder()
206+
.add(getMysqlInstallDb())
207+
.addAll(getInitializationArguments())
208+
.build());
209+
}
210+
else {
211+
system(ImmutableList.<String>builder()
212+
.add(getMysqld())
213+
.addAll(getInitializationArguments())
214+
.build());
215+
}
190216
}
191217

192218
private Process startMysqld()

testing-mysql-server-base/src/main/java/com/facebook/presto/testing/mysql/AbstractTestingMySqlServer.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ public abstract class AbstractTestingMySqlServer
3131
{
3232
private static final Logger log = Logger.get(AbstractTestingMySqlServer.class);
3333

34+
// for ppc64le, mariadb 10.2.x is used as an alternative for mysql 5.7
35+
private static final boolean isMariadb = System.getProperty("os.arch").equals("ppc64le");
36+
3437
private final String user;
3538
private final String password;
3639
private final Set<String> databases;
@@ -50,8 +53,8 @@ public AbstractTestingMySqlServer(EmbeddedMySql server, String user, String pass
5053
try (Connection connection = server.getMySqlDatabase()) {
5154
version = connection.getMetaData().getDatabaseProductVersion();
5255
try (Statement statement = connection.createStatement()) {
53-
execute(statement, format("CREATE USER '%s'@'%%' IDENTIFIED BY '%s'", user, password));
54-
execute(statement, format("GRANT ALL ON *.* to '%s'@'%%' WITH GRANT OPTION", user));
56+
execute(statement, format("CREATE USER '%s'@'%s' IDENTIFIED BY '%s'", user, isMariadb ? "localhost" : "%%", password));
57+
execute(statement, format("GRANT ALL ON *.* to '%s'@'%s' WITH GRANT OPTION", user, isMariadb ? "localhost" : "%%"));
5558
for (String database : databases) {
5659
execute(statement, format("CREATE DATABASE %s", database));
5760
}

0 commit comments

Comments
 (0)