commit 13a1a33dc7e0749c7b37222759ee3b797629b577 Author: Alexey Kostin Date: Thu Feb 14 15:01:33 2019 +0300 Initial commit. Connect to cluster ended. diff --git a/ceph-gobench.go b/ceph-gobench.go new file mode 100644 index 0000000..d91c333 --- /dev/null +++ b/ceph-gobench.go @@ -0,0 +1,82 @@ +package main + +import ( + "code.cloudfoundry.org/bytefmt" + "github.com/ceph/go-ceph/rados" + "github.com/juju/gnuflag" + "log" + "os" +) + +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() + log.Println(stats) + blocksize, err := bytefmt.ToBytes(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) +}