You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
3.3 KiB

13 years ago
13 years ago
7 years ago
7 years ago
  1. package topology
  2. import (
  3. "fmt"
  4. "github.com/chrislusf/seaweedfs/weed/pb/master_pb"
  5. "github.com/chrislusf/seaweedfs/weed/sequence"
  6. "github.com/chrislusf/seaweedfs/weed/storage"
  7. "github.com/kr/pretty"
  8. "testing"
  9. )
  10. func TestRemoveDataCenter(t *testing.T) {
  11. topo := setup(topologyLayout)
  12. topo.UnlinkChildNode(NodeId("dc2"))
  13. if topo.GetActiveVolumeCount() != 15 {
  14. t.Fail()
  15. }
  16. topo.UnlinkChildNode(NodeId("dc3"))
  17. if topo.GetActiveVolumeCount() != 12 {
  18. t.Fail()
  19. }
  20. }
  21. func TestHandlingVolumeServerHeartbeat(t *testing.T) {
  22. topo := NewTopology("weedfs", sequence.NewMemorySequencer(), 32*1024, 5)
  23. dc := topo.GetOrCreateDataCenter("dc1")
  24. rack := dc.GetOrCreateRack("rack1")
  25. dn := rack.GetOrCreateDataNode("127.0.0.1", 34534, "127.0.0.1", 25)
  26. {
  27. volumeCount := 7
  28. var volumeMessages []*master_pb.VolumeInformationMessage
  29. for k := 1; k <= volumeCount; k++ {
  30. volumeMessage := &master_pb.VolumeInformationMessage{
  31. Id: uint32(k),
  32. Size: uint64(25432),
  33. Collection: "",
  34. FileCount: uint64(2343),
  35. DeleteCount: uint64(345),
  36. DeletedByteCount: 34524,
  37. ReadOnly: false,
  38. ReplicaPlacement: uint32(0),
  39. Version: uint32(1),
  40. Ttl: 0,
  41. }
  42. volumeMessages = append(volumeMessages, volumeMessage)
  43. }
  44. topo.SyncDataNodeRegistration(volumeMessages, dn)
  45. assert(t, "activeVolumeCount1", topo.activeVolumeCount, volumeCount)
  46. assert(t, "volumeCount", topo.volumeCount, volumeCount)
  47. }
  48. {
  49. volumeCount := 7 - 1
  50. var volumeMessages []*master_pb.VolumeInformationMessage
  51. for k := 1; k <= volumeCount; k++ {
  52. volumeMessage := &master_pb.VolumeInformationMessage{
  53. Id: uint32(k),
  54. Size: uint64(254320),
  55. Collection: "",
  56. FileCount: uint64(2343),
  57. DeleteCount: uint64(345),
  58. DeletedByteCount: 345240,
  59. ReadOnly: false,
  60. ReplicaPlacement: uint32(0),
  61. Version: uint32(1),
  62. Ttl: 0,
  63. }
  64. volumeMessages = append(volumeMessages, volumeMessage)
  65. }
  66. topo.SyncDataNodeRegistration(volumeMessages, dn)
  67. assert(t, "activeVolumeCount1", topo.activeVolumeCount, volumeCount)
  68. assert(t, "volumeCount", topo.volumeCount, volumeCount)
  69. }
  70. topo.UnRegisterDataNode(dn)
  71. assert(t, "activeVolumeCount2", topo.activeVolumeCount, 0)
  72. }
  73. func assert(t *testing.T, message string, actual, expected int) {
  74. if actual != expected {
  75. t.Fatalf("unexpected %s: %d, expected: %d", message, actual, expected)
  76. }
  77. }
  78. func TestAddRemoveVolume(t *testing.T) {
  79. topo := NewTopology("weedfs", sequence.NewMemorySequencer(), 32*1024, 5)
  80. dc := topo.GetOrCreateDataCenter("dc1")
  81. rack := dc.GetOrCreateRack("rack1")
  82. dn := rack.GetOrCreateDataNode("127.0.0.1", 34534, "127.0.0.1", 25)
  83. v := storage.VolumeInfo{
  84. Id: storage.VolumeId(1),
  85. Size: 100,
  86. Collection: "xcollection",
  87. FileCount: 123,
  88. DeleteCount: 23,
  89. DeletedByteCount: 45,
  90. ReadOnly: false,
  91. Version: storage.CurrentVersion,
  92. ReplicaPlacement: &storage.ReplicaPlacement{},
  93. Ttl: storage.EMPTY_TTL,
  94. }
  95. dn.UpdateVolumes([]storage.VolumeInfo{v})
  96. topo.RegisterVolumeLayout(v, dn)
  97. fmt.Printf("added volume 1 \n%# v\n", pretty.Formatter(topo.ToMap()))
  98. topo.UnRegisterVolumeLayout(v, dn)
  99. fmt.Printf("removed volume 1 \n%# v\n", pretty.Formatter(topo.ToMap()))
  100. }