func BenchmarkTopicPut(b *testing.B) { topic, err := New("bench-put", c) if err != nil { b.Fatal(err) } msg := message.NewMessageByData(message.NewMessageData([]byte(utils.RandString(256)))) reply := make(chan []error) var wg sync.WaitGroup go func() { for _ = range reply { wg.Done() } }() b.ResetTimer() buffer := []*message.Ins{} for i := 0; i < b.N; i++ { m, _ := message.NewMessage(msg.Bytes(), true) buffer = append(buffer, m) if len(buffer) >= MaxPutBenchSize { wg.Add(1) topic.Put(buffer, reply) buffer = nil } } wg.Wait() }
func BenchmarkNewMessageRaw256(b *testing.B) { m := NewMessageByData(NewMessageData([]byte(utils.RandString(256)))) b.ResetTimer() for i := 0; i < b.N; i++ { NewMessage(m.underlay, false) } }
func BenchmarkNewMessageByData(b *testing.B) { source := NewMessageData([]byte(utils.RandString(256))) b.ResetTimer() for i := 0; i < b.N; i++ { NewMessageByData(source) } }
func BenchmarkHttpPut(b *testing.B) { var data []byte batch := 200 for i := 0; i < batch; i++ { msg := message.NewMessageByData(message.NewMessageData([]byte(utils.RandString(200)))) data = append(data, msg.Bytes()...) } r := bytes.NewReader(data) client := &http.Client{} buffer := 0 url := "http://localhost:8611/put?topic=http-test&size=200" for i := 0; i < b.N; i++ { if buffer < batch { buffer++ continue } buffer = 0 r.Seek(0, 0) resp, err := client.Post(url, "", r) if err != nil { b.Fatal(err) } io.Copy(ioutil.Discard, resp.Body) resp.Body.Close() } }
func TestFileCon(t *testing.T) { n := 100 dirname := utils.GetRoot("/test/bitmap.file.con") os.RemoveAll(dirname) f, err := NewFileEx(dirname, 1) if err != nil { t.Fatal(err) } defer f.Close() buf := []byte(utils.RandString(3)) off := int64(0) for i := 0; i < n; i++ { n, err := f.WriteAt(buf, off) if err != nil { t.Fatal(err) } if n != len(buf) { t.Fatal("short write", n, len(buf)) } off += int64(n) } }
func BenchmarkTopicGet(b *testing.B) { n := b.N topic, err := New("bench-get", c) if err != nil { b.Fatal(err) } var wg2 sync.WaitGroup replyErrs := make(chan []error) go func() { for _ = range replyErrs { wg2.Done() } }() msg := message.NewMessageByData(message.NewMessageData([]byte(utils.RandString(256)))) var buffer []*message.Ins for i := 0; i < n; i++ { buffer = append(buffer, msg) if len(buffer) > MaxPutBenchSize { wg2.Add(1) topic.Put(buffer, replyErrs) buffer = nil } } wg2.Wait() close(replyErrs) b.ResetTimer() reply := make(chan *message.Reply, 1024) size := 0 off := int64(0) var wg sync.WaitGroup go func() { for msgs := range reply { wg.Add(1) for _, m := range msgs.Msgs { off += int64(len(m.Bytes())) wg.Done() } size -= len(msgs.Msgs) wg.Done() if size == 0 { continue } } }() for i := 0; i < n; i++ { if size < MaxGetBenchSize { size++ continue } wg.Add(size) if err := topic.GetSync(off, size, reply); err != nil { b.Fatal(err) } wg.Wait() } close(reply) }