mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 10:54:59 +00:00
remove pilosa-bench
This commit is contained in:
parent
60805d7f3e
commit
4c693ba7e7
2 changed files with 0 additions and 287 deletions
|
|
@ -1,213 +0,0 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
|
||||
"github.com/pilosa/pilosa"
|
||||
)
|
||||
|
||||
// BasePort is the initial port used when generating a cluster.
|
||||
const BasePort = 16000
|
||||
|
||||
// Default settings for command line arguments.
|
||||
const (
|
||||
DefaultServerN = 1
|
||||
DefaultReplicaN = 1
|
||||
)
|
||||
|
||||
func main() {
|
||||
m := NewMain()
|
||||
|
||||
// Parse command line arguments.
|
||||
if err := m.ParseFlags(os.Args[1:]); err == flag.ErrHelp {
|
||||
fmt.Fprintln(m.Stderr, m.Usage())
|
||||
os.Exit(1)
|
||||
} else if err != nil {
|
||||
fmt.Fprintln(m.Stderr, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Execute the program.
|
||||
if err := m.Run(); err != nil {
|
||||
fmt.Fprintln(m.Stderr, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
// Main represents the main program execution.
|
||||
type Main struct {
|
||||
ServerN int
|
||||
ReplicaN int
|
||||
|
||||
Verbose bool
|
||||
Work bool
|
||||
|
||||
// Standard input/output
|
||||
Stdin io.Reader
|
||||
Stdout io.Writer
|
||||
Stderr io.Writer
|
||||
}
|
||||
|
||||
// NewMain returns a new instance of Main.
|
||||
func NewMain() *Main {
|
||||
return &Main{
|
||||
ServerN: DefaultServerN,
|
||||
ReplicaN: DefaultReplicaN,
|
||||
|
||||
Stdin: os.Stdin,
|
||||
Stdout: os.Stdout,
|
||||
Stderr: os.Stderr,
|
||||
}
|
||||
}
|
||||
|
||||
// Usage returns usage documentation.
|
||||
func (m *Main) Usage() string {
|
||||
return `
|
||||
pilosa-bench is a tool for testing and benchmarking pilosa clusters.
|
||||
|
||||
Usage:
|
||||
|
||||
pilosa-bench [arguments]
|
||||
|
||||
The following arguments are available:
|
||||
|
||||
-servers N
|
||||
The number of servers to generate for the cluster.
|
||||
Defaults to 1 server.
|
||||
|
||||
-replicas N
|
||||
Replication factor for data in the cluster.
|
||||
Defaults to 1 replica.
|
||||
|
||||
-v
|
||||
Logs all server output to stderr in addition to server log.
|
||||
|
||||
-work
|
||||
Prints the temporary work directory and does not delete it
|
||||
after the benchmark has completed.
|
||||
|
||||
`[1:]
|
||||
}
|
||||
|
||||
// ParseFlags parses command line flags from args.
|
||||
func (m *Main) ParseFlags(args []string) error {
|
||||
fs := flag.NewFlagSet("pilosa-bench", flag.ContinueOnError)
|
||||
fs.SetOutput(ioutil.Discard)
|
||||
fs.IntVar(&m.ServerN, "servers", DefaultServerN, "server count")
|
||||
fs.IntVar(&m.ReplicaN, "replicas", DefaultReplicaN, "replication factor")
|
||||
fs.BoolVar(&m.Verbose, "v", false, "verbose")
|
||||
fs.BoolVar(&m.Work, "work", false, "verbose")
|
||||
if err := fs.Parse(args); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Run executes the main program execution.
|
||||
func (m *Main) Run(args ...string) error {
|
||||
// Validate arguments.
|
||||
if m.ServerN <= 0 {
|
||||
return errors.New("server count must be at least 1")
|
||||
} else if m.ReplicaN <= 0 {
|
||||
return errors.New("replication factor must be at least 1")
|
||||
} else if m.ReplicaN > m.ServerN {
|
||||
return errors.New("replication factor must be less than server count")
|
||||
}
|
||||
|
||||
logger := m.logger()
|
||||
var logFiles []*os.File
|
||||
|
||||
// Create a base temp path.
|
||||
path, err := ioutil.TempDir("", "pilosa-bench-")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if m.Work {
|
||||
fmt.Printf("WORK=%s\n\n", path)
|
||||
}
|
||||
|
||||
// Build cluster configuration.
|
||||
cluster := pilosa.Cluster{
|
||||
ReplicaN: m.ReplicaN,
|
||||
}
|
||||
for i := 0; i < m.ServerN; i++ {
|
||||
cluster.Nodes = append(cluster.Nodes, &pilosa.Node{
|
||||
Host: fmt.Sprintf("localhost:%d", BasePort+i),
|
||||
})
|
||||
}
|
||||
|
||||
// Build servers.
|
||||
servers := make([]*pilosa.Server, m.ServerN)
|
||||
for i := range servers {
|
||||
// Make server work directory.
|
||||
if err := os.MkdirAll(filepath.Join(path, strconv.Itoa(i)), 0777); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Build server.
|
||||
s := pilosa.NewServer()
|
||||
s.Host = fmt.Sprintf("localhost:%d", BasePort+i)
|
||||
s.Cluster = &cluster
|
||||
s.Index.Path = filepath.Join(path, strconv.Itoa(i), "data")
|
||||
|
||||
// Create log file.
|
||||
f, err := os.Create(filepath.Join(path, strconv.Itoa(i), "log"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
logFiles = append(logFiles, f)
|
||||
|
||||
// Set log and optionally write out to stderr as well.
|
||||
s.LogOutput = f
|
||||
if m.Verbose {
|
||||
s.LogOutput = io.MultiWriter(m.Stderr, s.LogOutput)
|
||||
}
|
||||
|
||||
servers[i] = s
|
||||
}
|
||||
|
||||
// Open all servers.
|
||||
for i, s := range servers {
|
||||
logger.Printf("starting server #%d: %s", i, s.Host)
|
||||
if err := s.Open(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME(benbjohnson): Execute benchmark testing.
|
||||
|
||||
// Close all servers.
|
||||
for i, s := range servers {
|
||||
logger.Printf("closing server #%d", i)
|
||||
if err := s.Close(); err != nil {
|
||||
logger.Printf("error closing server: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Close all logs.
|
||||
for _, f := range logFiles {
|
||||
f.Close()
|
||||
}
|
||||
|
||||
// If work flag is not set then delete all data & logs.
|
||||
if !m.Work {
|
||||
if err := os.RemoveAll(path); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Close gracefully closes the program.
|
||||
func (m *Main) Close() error { return nil }
|
||||
|
||||
func (m *Main) logger() *log.Logger { return log.New(m.Stderr, "", log.LstdFlags) }
|
||||
|
|
@ -1,74 +0,0 @@
|
|||
package main_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
main "github.com/pilosa/pilosa/cmd/pilosa-bench"
|
||||
)
|
||||
|
||||
// Ensure server count flag can be parsed.
|
||||
func TestMain_ParseFlags_ServerN(t *testing.T) {
|
||||
m := NewMain()
|
||||
if err := m.ParseFlags([]string{"-servers", "2"}); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if m.ServerN != 2 {
|
||||
t.Fatalf("unexpected server count: %d", m.ServerN)
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure replication factor flag can be parsed.
|
||||
func TestMain_ParseFlags_ReplicaN(t *testing.T) {
|
||||
m := NewMain()
|
||||
if err := m.ParseFlags([]string{"-servers=4", "-replicas", "3"}); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if m.ReplicaN != 3 {
|
||||
t.Fatalf("unexpected replica count: %d", m.ReplicaN)
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure verbose flag can be parsed.
|
||||
func TestMain_ParseFlags_Verbose(t *testing.T) {
|
||||
m := NewMain()
|
||||
if err := m.ParseFlags([]string{"-v"}); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !m.Verbose {
|
||||
t.Fatalf("expected verbose flag")
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure work flag can be parsed.
|
||||
func TestMain_ParseFlags_Work(t *testing.T) {
|
||||
m := NewMain()
|
||||
if err := m.ParseFlags([]string{"-work"}); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if !m.Work {
|
||||
t.Fatalf("expected work flag")
|
||||
}
|
||||
}
|
||||
|
||||
// Main represents a test wrapper for main.Main.
|
||||
type Main struct {
|
||||
*main.Main
|
||||
|
||||
Stdin bytes.Buffer
|
||||
Stdout bytes.Buffer
|
||||
Stderr bytes.Buffer
|
||||
}
|
||||
|
||||
// NewMain returns a new instance of Main.
|
||||
func NewMain() *Main {
|
||||
m := &Main{Main: main.NewMain()}
|
||||
m.Main.Stdin = &m.Stdin
|
||||
m.Main.Stdout = &m.Stdout
|
||||
m.Main.Stderr = &m.Stderr
|
||||
|
||||
if testing.Verbose() {
|
||||
m.Main.Stdout = io.MultiWriter(os.Stdout, m.Main.Stdout)
|
||||
m.Main.Stderr = io.MultiWriter(os.Stderr, m.Main.Stderr)
|
||||
}
|
||||
|
||||
return m
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue