*: configure 'java' heap flags, Jute max buffer

This commit is contained in:
Gyu-Ho Lee 2017-02-23 10:09:53 -08:00
parent 520f664534
commit 580c46f4ef
No known key found for this signature in database
GPG Key ID: 1DDD39C7EB70C24C
3 changed files with 105 additions and 23 deletions

View File

@ -22,6 +22,8 @@ import (
"os/exec"
"path/filepath"
"strings"
"github.com/coreos/dbtester/dbtesterpb"
)
var (
@ -64,6 +66,19 @@ func init() {
}
}
// https://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
const (
// JavaClassPathZookeeperr349 is the Java class paths of Zookeeper r3.4.9.
// CHANGE THIS FOR DIFFERENT ZOOKEEPER RELEASE!
// THIS IS ONLY VALID FOR Zookeeper r3.4.9.
JavaClassPathZookeeperr349 = `-cp zookeeper-3.4.9.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.16.jar:conf org.apache.zookeeper.server.quorum.QuorumPeerMain`
// JavaClassPathZookeeperr352alpha is the Java class paths of Zookeeper r3.5.2-alpha.
// CHANGE THIS FOR DIFFERENT ZOOKEEPER RELEASE!
// THIS IS ONLY VALID FOR Zookeeper r3.5.2-alpha.
JavaClassPathZookeeperr352alpha = `-cp zookeeper-3.4.9.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.16.jar:conf org.apache.zookeeper.server.quorum.QuorumPeerMain`
)
// startZookeeper starts Zookeeper.
func startZookeeper(fs *flags, t *transporterServer) error {
if !exist(fs.javaExec) {
@ -83,46 +98,105 @@ func startZookeeper(fs *flags, t *transporterServer) error {
return err
}
// TODO: support r3.5.2
ipath := filepath.Join(fs.zkDataDir, "myid")
plog.Infof("writing Zookeeper myid file %d to %s", t.req.Flag_Zookeeper_R3_4_9.MyID, ipath)
if err := toFile(fmt.Sprintf("%d", t.req.Flag_Zookeeper_R3_4_9.MyID), ipath); err != nil {
return err
switch t.req.DatabaseID {
case dbtesterpb.DatabaseID_zookeeper__r3_4_9:
if t.req.Flag_Zookeeper_R3_4_9 == nil {
return fmt.Errorf("request 'Flag_Zookeeper_R3_4_9' is nil")
}
plog.Infof("writing Zookeeper myid file %d to %s", t.req.Flag_Zookeeper_R3_4_9.MyID, ipath)
if err := toFile(fmt.Sprintf("%d", t.req.Flag_Zookeeper_R3_4_9.MyID), ipath); err != nil {
return err
}
case dbtesterpb.DatabaseID_zookeeper__r3_5_2_alpha:
if t.req.Flag_Zookeeper_R3_5_2Alpha == nil {
return fmt.Errorf("request 'Flag_Zookeeper_R3_5_2Alpha' is nil")
}
plog.Infof("writing Zookeeper myid file %d to %s", t.req.Flag_Zookeeper_R3_5_2Alpha.MyID, ipath)
if err := toFile(fmt.Sprintf("%d", t.req.Flag_Zookeeper_R3_5_2Alpha.MyID), ipath); err != nil {
return err
}
default:
return fmt.Errorf("database ID %q is not supported", t.req.DatabaseID)
}
var cfg ZookeeperConfig
peerIPs := strings.Split(t.req.PeerIPsString, "___")
peers := []ZookeeperPeer{}
for i := range peerIPs {
peers = append(peers, ZookeeperPeer{MyID: i + 1, IP: peerIPs[i]})
}
cfg := ZookeeperConfig{
TickTime: t.req.Flag_Zookeeper_R3_4_9.TickTime,
DataDir: fs.zkDataDir,
ClientPort: t.req.Flag_Zookeeper_R3_4_9.ClientPort,
InitLimit: t.req.Flag_Zookeeper_R3_4_9.InitLimit,
SyncLimit: t.req.Flag_Zookeeper_R3_4_9.SyncLimit,
MaxClientConnections: t.req.Flag_Zookeeper_R3_4_9.MaxClientConnections,
Peers: peers,
SnapCount: t.req.Flag_Zookeeper_R3_4_9.SnapCount,
switch t.req.DatabaseID {
case dbtesterpb.DatabaseID_zookeeper__r3_4_9:
cfg = ZookeeperConfig{
TickTime: t.req.Flag_Zookeeper_R3_4_9.TickTime,
DataDir: fs.zkDataDir,
ClientPort: t.req.Flag_Zookeeper_R3_4_9.ClientPort,
InitLimit: t.req.Flag_Zookeeper_R3_4_9.InitLimit,
SyncLimit: t.req.Flag_Zookeeper_R3_4_9.SyncLimit,
MaxClientConnections: t.req.Flag_Zookeeper_R3_4_9.MaxClientConnections,
Peers: peers,
SnapCount: t.req.Flag_Zookeeper_R3_4_9.SnapCount,
}
case dbtesterpb.DatabaseID_zookeeper__r3_5_2_alpha:
cfg = ZookeeperConfig{
TickTime: t.req.Flag_Zookeeper_R3_5_2Alpha.TickTime,
DataDir: fs.zkDataDir,
ClientPort: t.req.Flag_Zookeeper_R3_5_2Alpha.ClientPort,
InitLimit: t.req.Flag_Zookeeper_R3_5_2Alpha.InitLimit,
SyncLimit: t.req.Flag_Zookeeper_R3_5_2Alpha.SyncLimit,
MaxClientConnections: t.req.Flag_Zookeeper_R3_5_2Alpha.MaxClientConnections,
Peers: peers,
SnapCount: t.req.Flag_Zookeeper_R3_5_2Alpha.SnapCount,
}
default:
return fmt.Errorf("database ID %q is not supported", t.req.DatabaseID)
}
tpl := template.Must(template.New("zkTemplate").Parse(zkTemplate))
buf := new(bytes.Buffer)
if err := tpl.Execute(buf, cfg); err != nil {
return err
}
zc := buf.String()
plog.Infof("writing Zookeeper config file %q (config %q)", fs.zkConfig, zc)
if err := toFile(zc, fs.zkConfig); err != nil {
zctxt := buf.String()
plog.Infof("writing Zookeeper config file %q (config %q)", fs.zkConfig, zctxt)
if err := toFile(zctxt, fs.zkConfig); err != nil {
return err
}
// CHANGE THIS FOR DIFFERENT ZOOKEEPER RELEASE
// https://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
// THIS IS ONLY VALID FOR Zookeeper r3.4.9
flagString := `-cp zookeeper-3.4.9.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.16.jar:conf org.apache.zookeeper.server.quorum.QuorumPeerMain`
args := []string{shell}
var flagString string
switch t.req.DatabaseID {
case dbtesterpb.DatabaseID_zookeeper__r3_4_9:
flagString = JavaClassPathZookeeperr349
// -Djute.maxbuffer=33554432 -Xms50G -Xmx50G
if t.req.Flag_Zookeeper_R3_4_9.JavaDJuteMaxBuffer != 0 {
args = append(args, fmt.Sprintf("-Djute.maxbuffer=%d", t.req.Flag_Zookeeper_R3_4_9.JavaDJuteMaxBuffer))
}
if t.req.Flag_Zookeeper_R3_4_9.JavaDJuteMaxBuffer != 0 {
args = append(args, fmt.Sprintf("-Xms%s", t.req.Flag_Zookeeper_R3_4_9.JavaXms))
}
if t.req.Flag_Zookeeper_R3_4_9.JavaDJuteMaxBuffer != 0 {
args = append(args, fmt.Sprintf("-Xmx%s", t.req.Flag_Zookeeper_R3_4_9.JavaXmx))
}
args := []string{shell, "-c", fs.javaExec + " " + flagString + " " + fs.zkConfig}
case dbtesterpb.DatabaseID_zookeeper__r3_5_2_alpha:
flagString = JavaClassPathZookeeperr352alpha
// -Djute.maxbuffer=33554432 -Xms50G -Xmx50G
if t.req.Flag_Zookeeper_R3_5_2Alpha.JavaDJuteMaxBuffer != 0 {
args = append(args, fmt.Sprintf("-Djute.maxbuffer=%d", t.req.Flag_Zookeeper_R3_5_2Alpha.JavaDJuteMaxBuffer))
}
if t.req.Flag_Zookeeper_R3_5_2Alpha.JavaDJuteMaxBuffer != 0 {
args = append(args, fmt.Sprintf("-Xms%s", t.req.Flag_Zookeeper_R3_5_2Alpha.JavaXms))
}
if t.req.Flag_Zookeeper_R3_5_2Alpha.JavaDJuteMaxBuffer != 0 {
args = append(args, fmt.Sprintf("-Xmx%s", t.req.Flag_Zookeeper_R3_5_2Alpha.JavaXmx))
}
default:
return fmt.Errorf("database ID %q is not supported", t.req.DatabaseID)
}
args = append(args, "-c", fs.javaExec+" "+flagString+" "+fs.zkConfig)
cmd := exec.Command(args[0], args[1:]...)
cmd.Stdout = t.databaseLogFile

View File

@ -341,9 +341,11 @@ func (cfg *Config) ToRequest(databaseID string, op dbtesterpb.Operation, idx int
QuotaSizeBytes: gcfg.Flag_Etcd_Tip.QuotaSizeBytes,
}
// TODO: jvm flags
case dbtesterpb.DatabaseID_zookeeper__r3_4_9:
req.Flag_Zookeeper_R3_4_9 = &dbtesterpb.Flag_Zookeeper_R3_4_9{
JavaDJuteMaxBuffer: gcfg.Flag_Zookeeper_R3_4_9.JavaDJuteMaxBuffer,
JavaXms: gcfg.Flag_Zookeeper_R3_4_9.JavaXms,
JavaXmx: gcfg.Flag_Zookeeper_R3_4_9.JavaXmx,
MyID: uint32(idx + 1),
ClientPort: gcfg.Flag_Zookeeper_R3_4_9.ClientPort,
TickTime: gcfg.Flag_Zookeeper_R3_4_9.TickTime,
@ -354,6 +356,9 @@ func (cfg *Config) ToRequest(databaseID string, op dbtesterpb.Operation, idx int
}
case dbtesterpb.DatabaseID_zookeeper__r3_5_2_alpha:
req.Flag_Zookeeper_R3_5_2Alpha = &dbtesterpb.Flag_Zookeeper_R3_5_2Alpha{
JavaDJuteMaxBuffer: gcfg.Flag_Zookeeper_R3_5_2Alpha.JavaDJuteMaxBuffer,
JavaXms: gcfg.Flag_Zookeeper_R3_5_2Alpha.JavaXms,
JavaXmx: gcfg.Flag_Zookeeper_R3_5_2Alpha.JavaXmx,
MyID: uint32(idx + 1),
ClientPort: gcfg.Flag_Zookeeper_R3_5_2Alpha.ClientPort,
TickTime: gcfg.Flag_Zookeeper_R3_5_2Alpha.TickTime,

View File

@ -542,6 +542,9 @@ func TestConfig(t *testing.T) {
GoogleCloudStorageSubDirectory: "2017Q1-01-etcd-zookeeper-consul/01-write-1M-keys-client-variable",
},
Flag_Zookeeper_R3_5_2Alpha: &dbtesterpb.Flag_Zookeeper_R3_5_2Alpha{
JavaDJuteMaxBuffer: 33554432,
JavaXms: "50G",
JavaXmx: "50G",
MyID: 3,
ClientPort: 2181,
TickTime: 2000,