| 989 | } |
| 990 | |
| 991 | func TestAddDataReplica(t *testing.T) { |
| 992 | partition := commonVol.dataPartitions.partitions[0] |
| 993 | dsAddr := mds7Addr |
| 994 | func() { |
| 995 | mockServerLock.Lock() |
| 996 | defer mockServerLock.Unlock() |
| 997 | mockDataServers = append(mockDataServers, addDataServer(dsAddr, "zone2", defaultMediaType)) |
| 998 | }() |
| 999 | reqURL := fmt.Sprintf("%v%v?id=%v&addr=%v&force=true", hostAddr, proto.AdminAddDataReplica, partition.PartitionID, dsAddr) |
| 1000 | process(reqURL, t) |
| 1001 | partition.RLock() |
| 1002 | if !contains(partition.Hosts, dsAddr) { |
| 1003 | t.Errorf("hosts[%v] should contains dsAddr[%v]", partition.Hosts, dsAddr) |
| 1004 | partition.RUnlock() |
| 1005 | return |
| 1006 | } |
| 1007 | partition.RUnlock() |
| 1008 | server.cluster.BadDataPartitionIds.Range( |
| 1009 | func(key, value interface{}) bool { |
| 1010 | addr, ok := key.(string) |
| 1011 | if !ok { |
| 1012 | return true |
| 1013 | } |
| 1014 | if strings.HasPrefix(addr, dsAddr) { |
| 1015 | server.cluster.BadDataPartitionIds.Delete(key) |
| 1016 | } |
| 1017 | return true |
| 1018 | }) |
| 1019 | } |
| 1020 | |
| 1021 | func TestRemoveDataReplica(t *testing.T) { |
| 1022 | partition := commonVol.dataPartitions.partitions[0] |