mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
read topology configuration
This commit is contained in:
parent
e986dcf5e0
commit
a34570fc5b
34
weed-fs/src/pkg/topology/configuration.go
Normal file
34
weed-fs/src/pkg/topology/configuration.go
Normal file
|
@ -0,0 +1,34 @@
|
|||
package topology
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
)
|
||||
|
||||
type rack struct {
|
||||
Name string `xml:"name,attr"`
|
||||
Ips []string `xml:"Ip"`
|
||||
}
|
||||
type dataCenter struct {
|
||||
Name string `xml:"name,attr"`
|
||||
Racks []rack `xml:"Rack"`
|
||||
}
|
||||
type topology struct {
|
||||
DataCenters []dataCenter `xml:"DataCenter"`
|
||||
}
|
||||
type configuration struct {
|
||||
XMLName xml.Name `xml:"Configuration"`
|
||||
Topo topology `xml:"Topology"`
|
||||
}
|
||||
|
||||
func NewConfiguration(b []byte) (*configuration, error){
|
||||
c := &configuration{}
|
||||
err := xml.Unmarshal(b, c)
|
||||
return c, err
|
||||
}
|
||||
|
||||
func (c *configuration) String() string{
|
||||
if b, e := xml.MarshalIndent(c, " ", " "); e==nil {
|
||||
return string(b)
|
||||
}
|
||||
return ""
|
||||
}
|
42
weed-fs/src/pkg/topology/configuration_test.go
Normal file
42
weed-fs/src/pkg/topology/configuration_test.go
Normal file
|
@ -0,0 +1,42 @@
|
|||
package topology
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestLoadConfiguration(t *testing.T) {
|
||||
|
||||
confContent := `
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<Configuration>
|
||||
<Topology>
|
||||
<DataCenter name="dc1">
|
||||
<Rack name="rack1">
|
||||
<Ip>192.168.1.1</Ip>
|
||||
</Rack>
|
||||
</DataCenter>
|
||||
<DataCenter name="dc2">
|
||||
<Rack name="rack1">
|
||||
<Ip>192.168.1.2</Ip>
|
||||
</Rack>
|
||||
<Rack name="rack2">
|
||||
<Ip>192.168.1.3</Ip>
|
||||
<Ip>192.168.1.4</Ip>
|
||||
</Rack>
|
||||
</DataCenter>
|
||||
</Topology>
|
||||
</Configuration>
|
||||
`
|
||||
c, err := NewConfiguration([]byte(confContent))
|
||||
|
||||
fmt.Printf("%s\n", c)
|
||||
if err!=nil{
|
||||
t.Fatalf("unmarshal error:%s",err.Error())
|
||||
}
|
||||
|
||||
if len(c.Topo.DataCenters) <= 0 || c.Topo.DataCenters[0].Name != "dc1" {
|
||||
t.Fatalf("unmarshal error:%s",c)
|
||||
}
|
||||
}
|
|
@ -76,8 +76,6 @@ func setup(topologyLayout string) *Topology {
|
|||
if err != nil {
|
||||
fmt.Println("error:", err)
|
||||
}
|
||||
//fmt.Println("data:", data)
|
||||
//printMap(data)
|
||||
|
||||
//need to connect all nodes first before server adding volumes
|
||||
topo := NewTopology("mynetwork","/tmp","test",234,5)
|
||||
|
@ -104,39 +102,9 @@ func setup(topologyLayout string) *Topology {
|
|||
}
|
||||
}
|
||||
|
||||
fmt.Println("topology:", *topo)
|
||||
|
||||
bytes, err := json.Marshal(topo.children)
|
||||
if err != nil {
|
||||
fmt.Println("json error:", err)
|
||||
}
|
||||
fmt.Println("json topo:", string(bytes))
|
||||
|
||||
return topo
|
||||
}
|
||||
|
||||
func printMap(mm interface{}) {
|
||||
m := mm.(map[string]interface{})
|
||||
for k, v := range m {
|
||||
switch vv := v.(type) {
|
||||
case string:
|
||||
fmt.Println(k, "\"", vv, "\"")
|
||||
case int, float64:
|
||||
fmt.Println(k, ":", vv)
|
||||
case []interface{}:
|
||||
fmt.Println(k, ":[")
|
||||
for _, u := range vv {
|
||||
fmt.Println(u)
|
||||
fmt.Println(",")
|
||||
}
|
||||
fmt.Println("]")
|
||||
default:
|
||||
fmt.Println(k, ":")
|
||||
printMap(vv)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoveDataCenter(t *testing.T) {
|
||||
topo := setup(topologyLayout)
|
||||
topo.UnlinkChildNode(NodeId("dc2"))
|
||||
|
@ -154,7 +122,6 @@ func TestReserveOneVolume(t *testing.T) {
|
|||
rand.Seed(time.Now().UnixNano())
|
||||
rand.Seed(1)
|
||||
ret, node, vid := topo.RandomlyReserveOneVolume()
|
||||
fmt.Println("topology:", topo)
|
||||
fmt.Println("assigned :", ret, ", node :", node,", volume id:", vid)
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue