From 018a9a20be26b704abb27b19a22a4377624a9d5c Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 24 Jun 2018 23:55:27 -0700 Subject: [PATCH] add test for volume registeration at master --- weed/topology/topology_test.go | 96 ++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/weed/topology/topology_test.go b/weed/topology/topology_test.go index 9a0dbc6b8..06f506c37 100644 --- a/weed/topology/topology_test.go +++ b/weed/topology/topology_test.go @@ -2,6 +2,9 @@ package topology import ( "testing" + "github.com/chrislusf/seaweedfs/weed/sequence" + "github.com/chrislusf/seaweedfs/weed/pb/master_pb" + "github.com/chrislusf/seaweedfs/weed/storage" ) func TestRemoveDataCenter(t *testing.T) { @@ -15,3 +18,96 @@ func TestRemoveDataCenter(t *testing.T) { t.Fail() } } + +func TestHandlingVolumeServerHeartbeat(t *testing.T) { + topo := NewTopology("weedfs", sequence.NewMemorySequencer(), 32*1024, 5) + + dc := topo.GetOrCreateDataCenter("dc1") + rack := dc.GetOrCreateRack("rack1") + dn := rack.GetOrCreateDataNode("127.0.0.1", 34534, "127.0.0.1", 25) + + { + volumeCount := 700 + var volumeMessages []*master_pb.VolumeInformationMessage + for k := 1; k <= volumeCount; k++ { + volumeMessage := &master_pb.VolumeInformationMessage{ + Id: uint32(k), + Size: uint64(25432), + Collection: "", + FileCount: uint64(2343), + DeleteCount: uint64(345), + DeletedByteCount: 34524, + ReadOnly: false, + ReplicaPlacement: uint32(0), + Version: uint32(1), + Ttl: 0, + } + volumeMessages = append(volumeMessages, volumeMessage) + } + var volumeInfos []storage.VolumeInfo + for _, v := range volumeMessages { + if vi, err := storage.NewVolumeInfo(v); err == nil { + volumeInfos = append(volumeInfos, vi) + } + } + + deletedVolumes := dn.UpdateVolumes(volumeInfos) + for _, v := range volumeInfos { + topo.RegisterVolumeLayout(v, dn) + } + for _, v := range deletedVolumes { + topo.UnRegisterVolumeLayout(v, dn) + } + + assert(t, "activeVolumeCount1", topo.activeVolumeCount, volumeCount) + assert(t, "volumeCount", topo.volumeCount, volumeCount) + } + + { + volumeCount := 700 - 1 + var volumeMessages []*master_pb.VolumeInformationMessage + for k := 1; k <= volumeCount; k++ { + volumeMessage := &master_pb.VolumeInformationMessage{ + Id: uint32(k), + Size: uint64(254320), + Collection: "", + FileCount: uint64(2343), + DeleteCount: uint64(345), + DeletedByteCount: 345240, + ReadOnly: false, + ReplicaPlacement: uint32(0), + Version: uint32(1), + Ttl: 0, + } + volumeMessages = append(volumeMessages, volumeMessage) + } + var volumeInfos []storage.VolumeInfo + for _, v := range volumeMessages { + if vi, err := storage.NewVolumeInfo(v); err == nil { + volumeInfos = append(volumeInfos, vi) + } + } + + deletedVolumes := dn.UpdateVolumes(volumeInfos) + for _, v := range volumeInfos { + topo.RegisterVolumeLayout(v, dn) + } + for _, v := range deletedVolumes { + topo.UnRegisterVolumeLayout(v, dn) + } + + assert(t, "activeVolumeCount1", topo.activeVolumeCount, volumeCount) + assert(t, "volumeCount", topo.volumeCount, volumeCount) + } + + topo.UnRegisterDataNode(dn) + + assert(t, "activeVolumeCount2", topo.activeVolumeCount, 0) + +} + +func assert(t *testing.T, message string, actual, expected int) { + if actual != expected { + t.Fatalf("unexpected %s: %d, expected: %d", message, actual, expected) + } +}