From 660ca650ccf86b9d2435d7d4c39568b7e6510f71 Mon Sep 17 00:00:00 2001 From: Alexey Kostin Date: Thu, 14 Feb 2019 17:35:18 +0300 Subject: [PATCH] Splitted to files --- ceph-gobench.go | 89 ++++++++++++----------------------------------- cephconnection.go | 47 +++++++++++++++++++++++++ flags.go | 66 +++++++++++++++++++++++++++++++++++ 3 files changed, 135 insertions(+), 67 deletions(-) create mode 100644 cephconnection.go create mode 100644 flags.go diff --git a/ceph-gobench.go b/ceph-gobench.go index d91c333..5d5398e 100644 --- a/ceph-gobench.go +++ b/ceph-gobench.go @@ -2,81 +2,36 @@ package main import ( "code.cloudfoundry.org/bytefmt" - "github.com/ceph/go-ceph/rados" - "github.com/juju/gnuflag" + "fmt" "log" - "os" + "math/rand" ) func main() { - var duration int - var bs, cluster, user, keyring, config, pool string - gnuflag.IntVar(&duration, "duration", 30, - "Time limit for each test in seconds") - gnuflag.IntVar(&duration, "d", 30, - "Time limit for each test in seconds") - gnuflag.StringVar(&bs, "blocksize", "4K", - "Block size in format KB = K = KiB = 1024 MB = M = MiB = 1024 * K GB = G = GiB = 1024 * M TB = T = TiB = 1024 * G") - gnuflag.StringVar(&bs, "s", "4K", - "Block size in format KB = K = KiB = 1024 MB = M = MiB = 1024 * K GB = G = GiB = 1024 * M TB = T = TiB = 1024 * G") - gnuflag.StringVar(&user, "user", "admin", - "Ceph user (cephx)") - gnuflag.StringVar(&user, "u", "client.admin", - "Ceph user (cephx)") - gnuflag.StringVar(&cluster, "cluster", "ceph", - "Ceph cluster name") - gnuflag.StringVar(&cluster, "n", "ceph", - "Ceph cluster name") - gnuflag.StringVar(&keyring, "keyring", "/etc/ceph/ceph.client.admin.keyring", - "Ceph user keyring") - gnuflag.StringVar(&keyring, "k", "/etc/ceph/ceph.client.admin.keyring", - "Ceph user keyring") - gnuflag.StringVar(&config, "config", "/etc/ceph/ceph.conf", - "Ceph config") - gnuflag.StringVar(&config, "c", "/etc/ceph/ceph.conf", - "Ceph config") - gnuflag.StringVar(&pool, "pool", "bench", - "Ceph pool") - gnuflag.StringVar(&pool, "p", "bench", - "Ceph pool") - gnuflag.Parse(true) - - if _, err := os.Stat(config); os.IsNotExist(err) { - log.Fatalf("Congif file not exists. Error: %v\n", err) - } - - if _, err := os.Stat(keyring); os.IsNotExist(err) { - log.Fatalf("Keyring file not exists. Error: %v\n", err) - } - - conn, err := rados.NewConnWithClusterAndUser(cluster, user) - if err != nil { - log.Fatalf("Can't create connection with cluster:%v and user:%v. Error: %v\n", cluster, user, err) - } - - if err := conn.ReadConfigFile(config); err != nil { - log.Fatalf("Can't read config file. Error: err\n", err) - } - - if err := conn.SetConfigOption("keyring", keyring); err != nil { - log.Fatalf("Can't set config option. Error: err\n", err) - } - - if err := conn.Connect(); err != nil { - log.Fatalf("Failed to connect cluster. Error: %v\n", err) - } - - ioctx, err := conn.OpenIOContext(pool) - if err != nil { - log.Fatalf("Can't open pool %v. Error: %v\n", pool, err) - } - stats, _ := ioctx.GetPoolStats() - conn.Shutdown() + params := Route() + cephconn := connectioninit(¶ms) + defer cephconn.conn.Shutdown() + stats, _ := cephconn.ioctx.GetPoolStats() log.Println(stats) - blocksize, err := bytefmt.ToBytes(bs) + blocksize, err := bytefmt.ToBytes(params.bs) if err != nil { log.Println("Can't convert defined block size. 4K block size will be used\n") blocksize = 4096 } log.Printf("%v\n", blocksize) + var buffs [][]byte + for i :=0; i < 2 * params.threads_count; i++ { + buffs = append(buffs, make([]byte, blocksize)) + } + for num := range buffs { + _, err := rand.Read(buffs[num]) + if err != nil { + log.Fatalln(err) + } + } + fmt.Printf("%+v\n", buffs) + fmt.Println(len(buffs)) + + + } diff --git a/cephconnection.go b/cephconnection.go new file mode 100644 index 0000000..748faaf --- /dev/null +++ b/cephconnection.go @@ -0,0 +1,47 @@ +package main + +import ( + "github.com/ceph/go-ceph/rados" + "os" + "log" +) + +type cephconnection struct { + conn *rados.Conn + ioctx *rados.IOContext +} + +func connectioninit(params *Params) *cephconnection { + cephconn := &cephconnection{} + var err error + if _, err := os.Stat(params.config); os.IsNotExist(err) { + log.Fatalf("Congif file not exists. Error: %v\n", err) + } + + if _, err := os.Stat(params.keyring); os.IsNotExist(err) { + log.Fatalf("Keyring file not exists. Error: %v\n", err) + } + + cephconn.conn, err = rados.NewConnWithClusterAndUser(params.cluster, params.user) + if err != nil { + log.Fatalf("Can't create connection with cluster:%v and user:%v. Error: %v\n", params.cluster, params.user, err) + } + + if err = cephconn.conn.ReadConfigFile(params.config); err != nil { + log.Fatalf("Can't read config file. Error: err\n", err) + } + + if err = cephconn.conn.SetConfigOption("keyring", params.keyring); err != nil { + log.Fatalf("Can't set config option. Error: err\n", err) + } + + if err = cephconn.conn.Connect(); err != nil { + log.Fatalf("Failed to connect cluster. Error: %v\n", err) + } + + cephconn.ioctx, err = cephconn.conn.OpenIOContext(params.pool) + if err != nil { + log.Fatalf("Can't open pool %v. Error: %v\n", params.pool, err) + } + return cephconn +} \ No newline at end of file diff --git a/flags.go b/flags.go new file mode 100644 index 0000000..f5cbc50 --- /dev/null +++ b/flags.go @@ -0,0 +1,66 @@ +package main + +import ( + "strings" + "time" + "log" + "github.com/juju/gnuflag" +) + +type Params struct { + duration time.Duration + threads_count int + parallel bool + bs, cluster, user, keyring, config, pool, mode, define string +} + +func Route () Params { + params := Params{} + gnuflag.DurationVar(¶ms.duration, "duration", 30, + "Time limit for each test in seconds") + gnuflag.DurationVar(¶ms.duration, "d", 30, + "Time limit for each test in seconds") + gnuflag.StringVar(¶ms.bs, "blocksize", "4K", + "Block size in format KB = K = KiB = 1024 MB = M = MiB = 1024 * K GB = G = GiB = 1024 * M TB = T = TiB = 1024 * G") + gnuflag.StringVar(¶ms.bs, "s", "4K", + "Block size in format KB = K = KiB = 1024 MB = M = MiB = 1024 * K GB = G = GiB = 1024 * M TB = T = TiB = 1024 * G") + gnuflag.StringVar(¶ms.user, "user", "admin", + "Ceph user (cephx)") + gnuflag.StringVar(¶ms.user, "u", "client.admin", + "Ceph user (cephx)") + gnuflag.StringVar(¶ms.cluster, "cluster", "ceph", + "Ceph cluster name") + gnuflag.StringVar(¶ms.cluster, "n", "ceph", + "Ceph cluster name") + gnuflag.StringVar(¶ms.keyring, "keyring", "/etc/ceph/ceph.client.admin.keyring", + "Ceph user keyring") + gnuflag.StringVar(¶ms.keyring, "k", "/etc/ceph/ceph.client.admin.keyring", + "Ceph user keyring") + gnuflag.StringVar(¶ms.config, "config", "/etc/ceph/ceph.conf", + "Ceph config") + gnuflag.StringVar(¶ms.config, "c", "/etc/ceph/ceph.conf", + "Ceph config") + gnuflag.StringVar(¶ms.pool, "pool", "bench", + "Ceph pool") + gnuflag.StringVar(¶ms.pool, "p", "bench", + "Ceph pool") + gnuflag.StringVar(¶ms.mode, "mode", "osd", + "Mode osd or host") + gnuflag.StringVar(¶ms.mode, "m", "osd", + "Mode osd or host") + gnuflag.StringVar(¶ms.define, "define", "", + "Define specifically osd or host. osd.X or ceph-host-X") + gnuflag.IntVar(¶ms.threads_count, "threads", 1, + "Threads count") + gnuflag.IntVar(¶ms.threads_count, "t", 1, + "Threads count on each osd") + gnuflag.BoolVar(¶ms.parallel, "parallel", false, + "Do test all osd in parallel mode") + gnuflag.Parse(true) + if params.mode == "osd" && len(params.define) != 0 { + if i := strings.HasPrefix(params.define, "osd."); i != true { + log.Fatalln("Define correct osd in format osd.X") + } + } + return params +} \ No newline at end of file