mirror of
				https://github.com/minio/minio.git
				synced 2025-11-04 02:01:05 +01:00 
			
		
		
		
	current implementation relied on recursively calling one bucket at a time across all peers, this would be very slow and chatty when there are 100's of buckets which would mean 100*peerCount amount of network operations. This PR attempts to reduce this entire call into `peerCount` amount of network calls only. This functionality addresses also a concern where the Prometheus metrics would significantly slow down when one of the peers is offline.
		
			
				
	
	
		
			576 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			576 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package cmd
 | 
						|
 | 
						|
// Code generated by github.com/tinylib/msgp DO NOT EDIT.
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/tinylib/msgp/msgp"
 | 
						|
)
 | 
						|
 | 
						|
func TestMarshalUnmarshalBucketReplicationStat(t *testing.T) {
 | 
						|
	v := BucketReplicationStat{}
 | 
						|
	bts, err := v.MarshalMsg(nil)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	left, err := v.UnmarshalMsg(bts)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if len(left) > 0 {
 | 
						|
		t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left)
 | 
						|
	}
 | 
						|
 | 
						|
	left, err = msgp.Skip(bts)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if len(left) > 0 {
 | 
						|
		t.Errorf("%d bytes left over after Skip(): %q", len(left), left)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkMarshalMsgBucketReplicationStat(b *testing.B) {
 | 
						|
	v := BucketReplicationStat{}
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		v.MarshalMsg(nil)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkAppendMsgBucketReplicationStat(b *testing.B) {
 | 
						|
	v := BucketReplicationStat{}
 | 
						|
	bts := make([]byte, 0, v.Msgsize())
 | 
						|
	bts, _ = v.MarshalMsg(bts[0:0])
 | 
						|
	b.SetBytes(int64(len(bts)))
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		bts, _ = v.MarshalMsg(bts[0:0])
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkUnmarshalBucketReplicationStat(b *testing.B) {
 | 
						|
	v := BucketReplicationStat{}
 | 
						|
	bts, _ := v.MarshalMsg(nil)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.SetBytes(int64(len(bts)))
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		_, err := v.UnmarshalMsg(bts)
 | 
						|
		if err != nil {
 | 
						|
			b.Fatal(err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestEncodeDecodeBucketReplicationStat(t *testing.T) {
 | 
						|
	v := BucketReplicationStat{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
 | 
						|
	m := v.Msgsize()
 | 
						|
	if buf.Len() > m {
 | 
						|
		t.Log("WARNING: TestEncodeDecodeBucketReplicationStat Msgsize() is inaccurate")
 | 
						|
	}
 | 
						|
 | 
						|
	vn := BucketReplicationStat{}
 | 
						|
	err := msgp.Decode(&buf, &vn)
 | 
						|
	if err != nil {
 | 
						|
		t.Error(err)
 | 
						|
	}
 | 
						|
 | 
						|
	buf.Reset()
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	err = msgp.NewReader(&buf).Skip()
 | 
						|
	if err != nil {
 | 
						|
		t.Error(err)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkEncodeBucketReplicationStat(b *testing.B) {
 | 
						|
	v := BucketReplicationStat{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	b.SetBytes(int64(buf.Len()))
 | 
						|
	en := msgp.NewWriter(msgp.Nowhere)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		v.EncodeMsg(en)
 | 
						|
	}
 | 
						|
	en.Flush()
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkDecodeBucketReplicationStat(b *testing.B) {
 | 
						|
	v := BucketReplicationStat{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	b.SetBytes(int64(buf.Len()))
 | 
						|
	rd := msgp.NewEndlessReader(buf.Bytes(), b)
 | 
						|
	dc := msgp.NewReader(rd)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		err := v.DecodeMsg(dc)
 | 
						|
		if err != nil {
 | 
						|
			b.Fatal(err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestMarshalUnmarshalBucketReplicationStats(t *testing.T) {
 | 
						|
	v := BucketReplicationStats{}
 | 
						|
	bts, err := v.MarshalMsg(nil)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	left, err := v.UnmarshalMsg(bts)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if len(left) > 0 {
 | 
						|
		t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left)
 | 
						|
	}
 | 
						|
 | 
						|
	left, err = msgp.Skip(bts)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if len(left) > 0 {
 | 
						|
		t.Errorf("%d bytes left over after Skip(): %q", len(left), left)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkMarshalMsgBucketReplicationStats(b *testing.B) {
 | 
						|
	v := BucketReplicationStats{}
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		v.MarshalMsg(nil)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkAppendMsgBucketReplicationStats(b *testing.B) {
 | 
						|
	v := BucketReplicationStats{}
 | 
						|
	bts := make([]byte, 0, v.Msgsize())
 | 
						|
	bts, _ = v.MarshalMsg(bts[0:0])
 | 
						|
	b.SetBytes(int64(len(bts)))
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		bts, _ = v.MarshalMsg(bts[0:0])
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkUnmarshalBucketReplicationStats(b *testing.B) {
 | 
						|
	v := BucketReplicationStats{}
 | 
						|
	bts, _ := v.MarshalMsg(nil)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.SetBytes(int64(len(bts)))
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		_, err := v.UnmarshalMsg(bts)
 | 
						|
		if err != nil {
 | 
						|
			b.Fatal(err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestEncodeDecodeBucketReplicationStats(t *testing.T) {
 | 
						|
	v := BucketReplicationStats{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
 | 
						|
	m := v.Msgsize()
 | 
						|
	if buf.Len() > m {
 | 
						|
		t.Log("WARNING: TestEncodeDecodeBucketReplicationStats Msgsize() is inaccurate")
 | 
						|
	}
 | 
						|
 | 
						|
	vn := BucketReplicationStats{}
 | 
						|
	err := msgp.Decode(&buf, &vn)
 | 
						|
	if err != nil {
 | 
						|
		t.Error(err)
 | 
						|
	}
 | 
						|
 | 
						|
	buf.Reset()
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	err = msgp.NewReader(&buf).Skip()
 | 
						|
	if err != nil {
 | 
						|
		t.Error(err)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkEncodeBucketReplicationStats(b *testing.B) {
 | 
						|
	v := BucketReplicationStats{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	b.SetBytes(int64(buf.Len()))
 | 
						|
	en := msgp.NewWriter(msgp.Nowhere)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		v.EncodeMsg(en)
 | 
						|
	}
 | 
						|
	en.Flush()
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkDecodeBucketReplicationStats(b *testing.B) {
 | 
						|
	v := BucketReplicationStats{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	b.SetBytes(int64(buf.Len()))
 | 
						|
	rd := msgp.NewEndlessReader(buf.Bytes(), b)
 | 
						|
	dc := msgp.NewReader(rd)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		err := v.DecodeMsg(dc)
 | 
						|
		if err != nil {
 | 
						|
			b.Fatal(err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestMarshalUnmarshalBucketStats(t *testing.T) {
 | 
						|
	v := BucketStats{}
 | 
						|
	bts, err := v.MarshalMsg(nil)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	left, err := v.UnmarshalMsg(bts)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if len(left) > 0 {
 | 
						|
		t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left)
 | 
						|
	}
 | 
						|
 | 
						|
	left, err = msgp.Skip(bts)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if len(left) > 0 {
 | 
						|
		t.Errorf("%d bytes left over after Skip(): %q", len(left), left)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkMarshalMsgBucketStats(b *testing.B) {
 | 
						|
	v := BucketStats{}
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		v.MarshalMsg(nil)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkAppendMsgBucketStats(b *testing.B) {
 | 
						|
	v := BucketStats{}
 | 
						|
	bts := make([]byte, 0, v.Msgsize())
 | 
						|
	bts, _ = v.MarshalMsg(bts[0:0])
 | 
						|
	b.SetBytes(int64(len(bts)))
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		bts, _ = v.MarshalMsg(bts[0:0])
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkUnmarshalBucketStats(b *testing.B) {
 | 
						|
	v := BucketStats{}
 | 
						|
	bts, _ := v.MarshalMsg(nil)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.SetBytes(int64(len(bts)))
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		_, err := v.UnmarshalMsg(bts)
 | 
						|
		if err != nil {
 | 
						|
			b.Fatal(err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestEncodeDecodeBucketStats(t *testing.T) {
 | 
						|
	v := BucketStats{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
 | 
						|
	m := v.Msgsize()
 | 
						|
	if buf.Len() > m {
 | 
						|
		t.Log("WARNING: TestEncodeDecodeBucketStats Msgsize() is inaccurate")
 | 
						|
	}
 | 
						|
 | 
						|
	vn := BucketStats{}
 | 
						|
	err := msgp.Decode(&buf, &vn)
 | 
						|
	if err != nil {
 | 
						|
		t.Error(err)
 | 
						|
	}
 | 
						|
 | 
						|
	buf.Reset()
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	err = msgp.NewReader(&buf).Skip()
 | 
						|
	if err != nil {
 | 
						|
		t.Error(err)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkEncodeBucketStats(b *testing.B) {
 | 
						|
	v := BucketStats{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	b.SetBytes(int64(buf.Len()))
 | 
						|
	en := msgp.NewWriter(msgp.Nowhere)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		v.EncodeMsg(en)
 | 
						|
	}
 | 
						|
	en.Flush()
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkDecodeBucketStats(b *testing.B) {
 | 
						|
	v := BucketStats{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	b.SetBytes(int64(buf.Len()))
 | 
						|
	rd := msgp.NewEndlessReader(buf.Bytes(), b)
 | 
						|
	dc := msgp.NewReader(rd)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		err := v.DecodeMsg(dc)
 | 
						|
		if err != nil {
 | 
						|
			b.Fatal(err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestMarshalUnmarshalBucketStatsMap(t *testing.T) {
 | 
						|
	v := BucketStatsMap{}
 | 
						|
	bts, err := v.MarshalMsg(nil)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	left, err := v.UnmarshalMsg(bts)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if len(left) > 0 {
 | 
						|
		t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left)
 | 
						|
	}
 | 
						|
 | 
						|
	left, err = msgp.Skip(bts)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if len(left) > 0 {
 | 
						|
		t.Errorf("%d bytes left over after Skip(): %q", len(left), left)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkMarshalMsgBucketStatsMap(b *testing.B) {
 | 
						|
	v := BucketStatsMap{}
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		v.MarshalMsg(nil)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkAppendMsgBucketStatsMap(b *testing.B) {
 | 
						|
	v := BucketStatsMap{}
 | 
						|
	bts := make([]byte, 0, v.Msgsize())
 | 
						|
	bts, _ = v.MarshalMsg(bts[0:0])
 | 
						|
	b.SetBytes(int64(len(bts)))
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		bts, _ = v.MarshalMsg(bts[0:0])
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkUnmarshalBucketStatsMap(b *testing.B) {
 | 
						|
	v := BucketStatsMap{}
 | 
						|
	bts, _ := v.MarshalMsg(nil)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.SetBytes(int64(len(bts)))
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		_, err := v.UnmarshalMsg(bts)
 | 
						|
		if err != nil {
 | 
						|
			b.Fatal(err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestEncodeDecodeBucketStatsMap(t *testing.T) {
 | 
						|
	v := BucketStatsMap{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
 | 
						|
	m := v.Msgsize()
 | 
						|
	if buf.Len() > m {
 | 
						|
		t.Log("WARNING: TestEncodeDecodeBucketStatsMap Msgsize() is inaccurate")
 | 
						|
	}
 | 
						|
 | 
						|
	vn := BucketStatsMap{}
 | 
						|
	err := msgp.Decode(&buf, &vn)
 | 
						|
	if err != nil {
 | 
						|
		t.Error(err)
 | 
						|
	}
 | 
						|
 | 
						|
	buf.Reset()
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	err = msgp.NewReader(&buf).Skip()
 | 
						|
	if err != nil {
 | 
						|
		t.Error(err)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkEncodeBucketStatsMap(b *testing.B) {
 | 
						|
	v := BucketStatsMap{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	b.SetBytes(int64(buf.Len()))
 | 
						|
	en := msgp.NewWriter(msgp.Nowhere)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		v.EncodeMsg(en)
 | 
						|
	}
 | 
						|
	en.Flush()
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkDecodeBucketStatsMap(b *testing.B) {
 | 
						|
	v := BucketStatsMap{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	b.SetBytes(int64(buf.Len()))
 | 
						|
	rd := msgp.NewEndlessReader(buf.Bytes(), b)
 | 
						|
	dc := msgp.NewReader(rd)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		err := v.DecodeMsg(dc)
 | 
						|
		if err != nil {
 | 
						|
			b.Fatal(err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestMarshalUnmarshalReplicationLatency(t *testing.T) {
 | 
						|
	v := ReplicationLatency{}
 | 
						|
	bts, err := v.MarshalMsg(nil)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	left, err := v.UnmarshalMsg(bts)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if len(left) > 0 {
 | 
						|
		t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left)
 | 
						|
	}
 | 
						|
 | 
						|
	left, err = msgp.Skip(bts)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if len(left) > 0 {
 | 
						|
		t.Errorf("%d bytes left over after Skip(): %q", len(left), left)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkMarshalMsgReplicationLatency(b *testing.B) {
 | 
						|
	v := ReplicationLatency{}
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		v.MarshalMsg(nil)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkAppendMsgReplicationLatency(b *testing.B) {
 | 
						|
	v := ReplicationLatency{}
 | 
						|
	bts := make([]byte, 0, v.Msgsize())
 | 
						|
	bts, _ = v.MarshalMsg(bts[0:0])
 | 
						|
	b.SetBytes(int64(len(bts)))
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		bts, _ = v.MarshalMsg(bts[0:0])
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkUnmarshalReplicationLatency(b *testing.B) {
 | 
						|
	v := ReplicationLatency{}
 | 
						|
	bts, _ := v.MarshalMsg(nil)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.SetBytes(int64(len(bts)))
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		_, err := v.UnmarshalMsg(bts)
 | 
						|
		if err != nil {
 | 
						|
			b.Fatal(err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestEncodeDecodeReplicationLatency(t *testing.T) {
 | 
						|
	v := ReplicationLatency{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
 | 
						|
	m := v.Msgsize()
 | 
						|
	if buf.Len() > m {
 | 
						|
		t.Log("WARNING: TestEncodeDecodeReplicationLatency Msgsize() is inaccurate")
 | 
						|
	}
 | 
						|
 | 
						|
	vn := ReplicationLatency{}
 | 
						|
	err := msgp.Decode(&buf, &vn)
 | 
						|
	if err != nil {
 | 
						|
		t.Error(err)
 | 
						|
	}
 | 
						|
 | 
						|
	buf.Reset()
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	err = msgp.NewReader(&buf).Skip()
 | 
						|
	if err != nil {
 | 
						|
		t.Error(err)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkEncodeReplicationLatency(b *testing.B) {
 | 
						|
	v := ReplicationLatency{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	b.SetBytes(int64(buf.Len()))
 | 
						|
	en := msgp.NewWriter(msgp.Nowhere)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		v.EncodeMsg(en)
 | 
						|
	}
 | 
						|
	en.Flush()
 | 
						|
}
 | 
						|
 | 
						|
func BenchmarkDecodeReplicationLatency(b *testing.B) {
 | 
						|
	v := ReplicationLatency{}
 | 
						|
	var buf bytes.Buffer
 | 
						|
	msgp.Encode(&buf, &v)
 | 
						|
	b.SetBytes(int64(buf.Len()))
 | 
						|
	rd := msgp.NewEndlessReader(buf.Bytes(), b)
 | 
						|
	dc := msgp.NewReader(rd)
 | 
						|
	b.ReportAllocs()
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		err := v.DecodeMsg(dc)
 | 
						|
		if err != nil {
 | 
						|
			b.Fatal(err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |