mirror of
				https://github.com/minio/minio.git
				synced 2025-10-31 00:01:27 +01:00 
			
		
		
		
	- collect real time replication metrics for prometheus.
- add pending_count, failed_count metric for total pending/failed replication operations.
- add API to get replication metrics
- add MRF worker to handle spill-over replication operations
- multiple issues found with replication
- fixes an issue when client sends a bucket
 name with `/` at the end from SetRemoteTarget
 API call make sure to trim the bucket name to 
 avoid any extra `/`.
- hold write locks in GetObjectNInfo during replication
  to ensure that object version stack is not overwritten
  while reading the content.
- add additional protection during WriteMetadata() to
  ensure that we always write a valid FileInfo{} and avoid
  ever writing empty FileInfo{} to the lowest layers.
Co-authored-by: Poorna Krishnamoorthy <poorna@minio.io>
Co-authored-by: Harshavardhana <harsha@minio.io>
		
	
			
		
			
				
	
	
		
			1028 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			1028 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package cmd
 | |
| 
 | |
| // Code generated by github.com/tinylib/msgp DO NOT EDIT.
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/tinylib/msgp/msgp"
 | |
| )
 | |
| 
 | |
| func TestMarshalUnmarshaldataUsageCache(t *testing.T) {
 | |
| 	v := dataUsageCache{}
 | |
| 	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 BenchmarkMarshalMsgdataUsageCache(b *testing.B) {
 | |
| 	v := dataUsageCache{}
 | |
| 	b.ReportAllocs()
 | |
| 	b.ResetTimer()
 | |
| 	for i := 0; i < b.N; i++ {
 | |
| 		v.MarshalMsg(nil)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func BenchmarkAppendMsgdataUsageCache(b *testing.B) {
 | |
| 	v := dataUsageCache{}
 | |
| 	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 BenchmarkUnmarshaldataUsageCache(b *testing.B) {
 | |
| 	v := dataUsageCache{}
 | |
| 	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 TestEncodeDecodedataUsageCache(t *testing.T) {
 | |
| 	v := dataUsageCache{}
 | |
| 	var buf bytes.Buffer
 | |
| 	msgp.Encode(&buf, &v)
 | |
| 
 | |
| 	m := v.Msgsize()
 | |
| 	if buf.Len() > m {
 | |
| 		t.Log("WARNING: TestEncodeDecodedataUsageCache Msgsize() is inaccurate")
 | |
| 	}
 | |
| 
 | |
| 	vn := dataUsageCache{}
 | |
| 	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 BenchmarkEncodedataUsageCache(b *testing.B) {
 | |
| 	v := dataUsageCache{}
 | |
| 	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 BenchmarkDecodedataUsageCache(b *testing.B) {
 | |
| 	v := dataUsageCache{}
 | |
| 	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 TestMarshalUnmarshaldataUsageCacheInfo(t *testing.T) {
 | |
| 	v := dataUsageCacheInfo{}
 | |
| 	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 BenchmarkMarshalMsgdataUsageCacheInfo(b *testing.B) {
 | |
| 	v := dataUsageCacheInfo{}
 | |
| 	b.ReportAllocs()
 | |
| 	b.ResetTimer()
 | |
| 	for i := 0; i < b.N; i++ {
 | |
| 		v.MarshalMsg(nil)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func BenchmarkAppendMsgdataUsageCacheInfo(b *testing.B) {
 | |
| 	v := dataUsageCacheInfo{}
 | |
| 	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 BenchmarkUnmarshaldataUsageCacheInfo(b *testing.B) {
 | |
| 	v := dataUsageCacheInfo{}
 | |
| 	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 TestEncodeDecodedataUsageCacheInfo(t *testing.T) {
 | |
| 	v := dataUsageCacheInfo{}
 | |
| 	var buf bytes.Buffer
 | |
| 	msgp.Encode(&buf, &v)
 | |
| 
 | |
| 	m := v.Msgsize()
 | |
| 	if buf.Len() > m {
 | |
| 		t.Log("WARNING: TestEncodeDecodedataUsageCacheInfo Msgsize() is inaccurate")
 | |
| 	}
 | |
| 
 | |
| 	vn := dataUsageCacheInfo{}
 | |
| 	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 BenchmarkEncodedataUsageCacheInfo(b *testing.B) {
 | |
| 	v := dataUsageCacheInfo{}
 | |
| 	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 BenchmarkDecodedataUsageCacheInfo(b *testing.B) {
 | |
| 	v := dataUsageCacheInfo{}
 | |
| 	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 TestMarshalUnmarshaldataUsageCacheV2(t *testing.T) {
 | |
| 	v := dataUsageCacheV2{}
 | |
| 	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 BenchmarkMarshalMsgdataUsageCacheV2(b *testing.B) {
 | |
| 	v := dataUsageCacheV2{}
 | |
| 	b.ReportAllocs()
 | |
| 	b.ResetTimer()
 | |
| 	for i := 0; i < b.N; i++ {
 | |
| 		v.MarshalMsg(nil)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func BenchmarkAppendMsgdataUsageCacheV2(b *testing.B) {
 | |
| 	v := dataUsageCacheV2{}
 | |
| 	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 BenchmarkUnmarshaldataUsageCacheV2(b *testing.B) {
 | |
| 	v := dataUsageCacheV2{}
 | |
| 	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 TestEncodeDecodedataUsageCacheV2(t *testing.T) {
 | |
| 	v := dataUsageCacheV2{}
 | |
| 	var buf bytes.Buffer
 | |
| 	msgp.Encode(&buf, &v)
 | |
| 
 | |
| 	m := v.Msgsize()
 | |
| 	if buf.Len() > m {
 | |
| 		t.Log("WARNING: TestEncodeDecodedataUsageCacheV2 Msgsize() is inaccurate")
 | |
| 	}
 | |
| 
 | |
| 	vn := dataUsageCacheV2{}
 | |
| 	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 BenchmarkEncodedataUsageCacheV2(b *testing.B) {
 | |
| 	v := dataUsageCacheV2{}
 | |
| 	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 BenchmarkDecodedataUsageCacheV2(b *testing.B) {
 | |
| 	v := dataUsageCacheV2{}
 | |
| 	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 TestMarshalUnmarshaldataUsageCacheV3(t *testing.T) {
 | |
| 	v := dataUsageCacheV3{}
 | |
| 	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 BenchmarkMarshalMsgdataUsageCacheV3(b *testing.B) {
 | |
| 	v := dataUsageCacheV3{}
 | |
| 	b.ReportAllocs()
 | |
| 	b.ResetTimer()
 | |
| 	for i := 0; i < b.N; i++ {
 | |
| 		v.MarshalMsg(nil)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func BenchmarkAppendMsgdataUsageCacheV3(b *testing.B) {
 | |
| 	v := dataUsageCacheV3{}
 | |
| 	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 BenchmarkUnmarshaldataUsageCacheV3(b *testing.B) {
 | |
| 	v := dataUsageCacheV3{}
 | |
| 	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 TestEncodeDecodedataUsageCacheV3(t *testing.T) {
 | |
| 	v := dataUsageCacheV3{}
 | |
| 	var buf bytes.Buffer
 | |
| 	msgp.Encode(&buf, &v)
 | |
| 
 | |
| 	m := v.Msgsize()
 | |
| 	if buf.Len() > m {
 | |
| 		t.Log("WARNING: TestEncodeDecodedataUsageCacheV3 Msgsize() is inaccurate")
 | |
| 	}
 | |
| 
 | |
| 	vn := dataUsageCacheV3{}
 | |
| 	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 BenchmarkEncodedataUsageCacheV3(b *testing.B) {
 | |
| 	v := dataUsageCacheV3{}
 | |
| 	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 BenchmarkDecodedataUsageCacheV3(b *testing.B) {
 | |
| 	v := dataUsageCacheV3{}
 | |
| 	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 TestMarshalUnmarshaldataUsageEntry(t *testing.T) {
 | |
| 	v := dataUsageEntry{}
 | |
| 	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 BenchmarkMarshalMsgdataUsageEntry(b *testing.B) {
 | |
| 	v := dataUsageEntry{}
 | |
| 	b.ReportAllocs()
 | |
| 	b.ResetTimer()
 | |
| 	for i := 0; i < b.N; i++ {
 | |
| 		v.MarshalMsg(nil)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func BenchmarkAppendMsgdataUsageEntry(b *testing.B) {
 | |
| 	v := dataUsageEntry{}
 | |
| 	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 BenchmarkUnmarshaldataUsageEntry(b *testing.B) {
 | |
| 	v := dataUsageEntry{}
 | |
| 	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 TestEncodeDecodedataUsageEntry(t *testing.T) {
 | |
| 	v := dataUsageEntry{}
 | |
| 	var buf bytes.Buffer
 | |
| 	msgp.Encode(&buf, &v)
 | |
| 
 | |
| 	m := v.Msgsize()
 | |
| 	if buf.Len() > m {
 | |
| 		t.Log("WARNING: TestEncodeDecodedataUsageEntry Msgsize() is inaccurate")
 | |
| 	}
 | |
| 
 | |
| 	vn := dataUsageEntry{}
 | |
| 	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 BenchmarkEncodedataUsageEntry(b *testing.B) {
 | |
| 	v := dataUsageEntry{}
 | |
| 	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 BenchmarkDecodedataUsageEntry(b *testing.B) {
 | |
| 	v := dataUsageEntry{}
 | |
| 	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 TestMarshalUnmarshaldataUsageEntryV2(t *testing.T) {
 | |
| 	v := dataUsageEntryV2{}
 | |
| 	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 BenchmarkMarshalMsgdataUsageEntryV2(b *testing.B) {
 | |
| 	v := dataUsageEntryV2{}
 | |
| 	b.ReportAllocs()
 | |
| 	b.ResetTimer()
 | |
| 	for i := 0; i < b.N; i++ {
 | |
| 		v.MarshalMsg(nil)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func BenchmarkAppendMsgdataUsageEntryV2(b *testing.B) {
 | |
| 	v := dataUsageEntryV2{}
 | |
| 	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 BenchmarkUnmarshaldataUsageEntryV2(b *testing.B) {
 | |
| 	v := dataUsageEntryV2{}
 | |
| 	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 TestEncodeDecodedataUsageEntryV2(t *testing.T) {
 | |
| 	v := dataUsageEntryV2{}
 | |
| 	var buf bytes.Buffer
 | |
| 	msgp.Encode(&buf, &v)
 | |
| 
 | |
| 	m := v.Msgsize()
 | |
| 	if buf.Len() > m {
 | |
| 		t.Log("WARNING: TestEncodeDecodedataUsageEntryV2 Msgsize() is inaccurate")
 | |
| 	}
 | |
| 
 | |
| 	vn := dataUsageEntryV2{}
 | |
| 	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 BenchmarkEncodedataUsageEntryV2(b *testing.B) {
 | |
| 	v := dataUsageEntryV2{}
 | |
| 	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 BenchmarkDecodedataUsageEntryV2(b *testing.B) {
 | |
| 	v := dataUsageEntryV2{}
 | |
| 	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 TestMarshalUnmarshaldataUsageEntryV3(t *testing.T) {
 | |
| 	v := dataUsageEntryV3{}
 | |
| 	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 BenchmarkMarshalMsgdataUsageEntryV3(b *testing.B) {
 | |
| 	v := dataUsageEntryV3{}
 | |
| 	b.ReportAllocs()
 | |
| 	b.ResetTimer()
 | |
| 	for i := 0; i < b.N; i++ {
 | |
| 		v.MarshalMsg(nil)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func BenchmarkAppendMsgdataUsageEntryV3(b *testing.B) {
 | |
| 	v := dataUsageEntryV3{}
 | |
| 	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 BenchmarkUnmarshaldataUsageEntryV3(b *testing.B) {
 | |
| 	v := dataUsageEntryV3{}
 | |
| 	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 TestEncodeDecodedataUsageEntryV3(t *testing.T) {
 | |
| 	v := dataUsageEntryV3{}
 | |
| 	var buf bytes.Buffer
 | |
| 	msgp.Encode(&buf, &v)
 | |
| 
 | |
| 	m := v.Msgsize()
 | |
| 	if buf.Len() > m {
 | |
| 		t.Log("WARNING: TestEncodeDecodedataUsageEntryV3 Msgsize() is inaccurate")
 | |
| 	}
 | |
| 
 | |
| 	vn := dataUsageEntryV3{}
 | |
| 	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 BenchmarkEncodedataUsageEntryV3(b *testing.B) {
 | |
| 	v := dataUsageEntryV3{}
 | |
| 	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 BenchmarkDecodedataUsageEntryV3(b *testing.B) {
 | |
| 	v := dataUsageEntryV3{}
 | |
| 	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 TestMarshalUnmarshalreplicationStats(t *testing.T) {
 | |
| 	v := replicationStats{}
 | |
| 	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 BenchmarkMarshalMsgreplicationStats(b *testing.B) {
 | |
| 	v := replicationStats{}
 | |
| 	b.ReportAllocs()
 | |
| 	b.ResetTimer()
 | |
| 	for i := 0; i < b.N; i++ {
 | |
| 		v.MarshalMsg(nil)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func BenchmarkAppendMsgreplicationStats(b *testing.B) {
 | |
| 	v := replicationStats{}
 | |
| 	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 BenchmarkUnmarshalreplicationStats(b *testing.B) {
 | |
| 	v := replicationStats{}
 | |
| 	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 TestEncodeDecodereplicationStats(t *testing.T) {
 | |
| 	v := replicationStats{}
 | |
| 	var buf bytes.Buffer
 | |
| 	msgp.Encode(&buf, &v)
 | |
| 
 | |
| 	m := v.Msgsize()
 | |
| 	if buf.Len() > m {
 | |
| 		t.Log("WARNING: TestEncodeDecodereplicationStats Msgsize() is inaccurate")
 | |
| 	}
 | |
| 
 | |
| 	vn := replicationStats{}
 | |
| 	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 BenchmarkEncodereplicationStats(b *testing.B) {
 | |
| 	v := replicationStats{}
 | |
| 	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 BenchmarkDecodereplicationStats(b *testing.B) {
 | |
| 	v := replicationStats{}
 | |
| 	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 TestMarshalUnmarshalsizeHistogram(t *testing.T) {
 | |
| 	v := sizeHistogram{}
 | |
| 	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 BenchmarkMarshalMsgsizeHistogram(b *testing.B) {
 | |
| 	v := sizeHistogram{}
 | |
| 	b.ReportAllocs()
 | |
| 	b.ResetTimer()
 | |
| 	for i := 0; i < b.N; i++ {
 | |
| 		v.MarshalMsg(nil)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func BenchmarkAppendMsgsizeHistogram(b *testing.B) {
 | |
| 	v := sizeHistogram{}
 | |
| 	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 BenchmarkUnmarshalsizeHistogram(b *testing.B) {
 | |
| 	v := sizeHistogram{}
 | |
| 	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 TestEncodeDecodesizeHistogram(t *testing.T) {
 | |
| 	v := sizeHistogram{}
 | |
| 	var buf bytes.Buffer
 | |
| 	msgp.Encode(&buf, &v)
 | |
| 
 | |
| 	m := v.Msgsize()
 | |
| 	if buf.Len() > m {
 | |
| 		t.Log("WARNING: TestEncodeDecodesizeHistogram Msgsize() is inaccurate")
 | |
| 	}
 | |
| 
 | |
| 	vn := sizeHistogram{}
 | |
| 	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 BenchmarkEncodesizeHistogram(b *testing.B) {
 | |
| 	v := sizeHistogram{}
 | |
| 	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 BenchmarkDecodesizeHistogram(b *testing.B) {
 | |
| 	v := sizeHistogram{}
 | |
| 	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)
 | |
| 		}
 | |
| 	}
 | |
| }
 |