Files
wehub-resource-sync 5357c39144
Fuzzer / Run Fuzzer (push) Has been cancelled
Race tests / Go race tests (ubuntu-22.04) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:01:40 +08:00

139 lines
3.2 KiB
Go

// Copyright 2022 Dolthub, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package benchmark_runner
import (
"context"
"fmt"
"runtime"
)
var defaultTpccParams = []string{
fmt.Sprintf("%s=%s", tpccMysqlDbFlag, tpccDbName),
fmt.Sprintf("%s=%s", tpccDbDriverFlag, mysqlDriverName),
}
// tpccConfigImpl represents a configuration for an execution of the TPCC Benchmark. It executes a series of tests
// against different ServerConfigurations.
type tpccConfigImpl struct {
// RuntimeOS is the platform the benchmarks ran on
RuntimeOS string
// RuntimeGoArch is the runtime architecture
RuntimeGoArch string
// ScriptDir represents the location of the TPCC tests
ScriptDir string
// Servers are the servers to benchmark.
Servers []ServerConfig
// ScaleFactors represent the scale at which to run each TpccBenchmark at.
ScaleFactors []int
}
var _ TpccConfig = &tpccConfigImpl{}
func NewTpccRunnerConfig() *tpccConfigImpl {
return &tpccConfigImpl{
Servers: make([]ServerConfig, 0),
ScaleFactors: make([]int, 0),
}
}
func (c *tpccConfigImpl) GetRuns() int {
return 1
}
func (c *tpccConfigImpl) GetScriptDir() string {
return c.ScriptDir
}
func (c *tpccConfigImpl) GetRuntimeOs() string {
return c.RuntimeOS
}
func (c *tpccConfigImpl) GetRuntimeGoArch() string {
return c.RuntimeGoArch
}
func (c *tpccConfigImpl) ContainsServerOfType(st ServerType) bool {
for _, s := range c.Servers {
if s.GetServerType() == st {
return true
}
}
return false
}
func (c *tpccConfigImpl) GetScaleFactors() []int {
return c.ScaleFactors
}
func (c *tpccConfigImpl) GetServerConfigs() []ServerConfig {
return c.Servers
}
func (c *tpccConfigImpl) setDefaults() {
// TODO: Eventually we need to support scale factors all the way to 10
if len(c.ScaleFactors) == 0 {
c.ScaleFactors = append(c.ScaleFactors, 1)
}
if c.RuntimeOS == "" {
c.RuntimeOS = runtime.GOOS
}
if c.RuntimeGoArch == "" {
c.RuntimeGoArch = runtime.GOARCH
}
}
// validateServerConfigs ensures the ServerConfigs are valid
func (c *tpccConfigImpl) validateServerConfigs() error {
portMap := make(map[int]ServerType)
for _, s := range c.Servers {
st := s.GetServerType()
if st != Dolt && st != MySql && st != Doltgres && st != Postgres {
return fmt.Errorf("unsupported server type: %s", st)
}
err := s.Validate()
if err != nil {
return err
}
err = s.SetDefaults()
if err != nil {
return err
}
portMap, err = CheckUpdatePortMap(s, portMap)
if err != nil {
return err
}
}
return nil
}
func (c *tpccConfigImpl) Validate(ctx context.Context) error {
if len(c.Servers) < 1 {
return ErrNoServersDefined
}
if len(c.Servers) > 2 {
return ErrTooManyServersDefined
}
c.setDefaults()
return c.validateServerConfigs()
}