Exemplo n.º 1
0
func benchmarkWrites(db storage.Engine, c *Config, points int) int {
	writesChan := make([]chan []storage.Write, c.threads)
	for i := range writesChan {
		writesChan[i] = make(chan []storage.Write, 1)
	}

	count := 0
	p := points

	go func() {
		defer func() {
			for _, ch := range writesChan {
				close(ch)
			}
		}()

		for {
			for _, ch := range writesChan {
				w := c.MakeBatch()
				ch <- w
				l := len(w)
				count += l
				p -= l
				if p <= 0 {
					return
				}
			}
		}
	}()

	wg := sync.WaitGroup{}
	for i := 0; i < c.threads; i++ {
		wg.Add(1)
		go func(idx int) {
			defer wg.Done()
			for w := range writesChan[idx] {
				if err := db.BatchPut(w); err != nil {
					panic(err)
				}
				fmt.Print(".")
			}
		}(i)
	}

	wg.Wait()
	fmt.Printf("\n")
	return count
}