add option to set server's ip address
This commit is contained in:
@@ -7,7 +7,6 @@ import (
|
||||
"pkg/storage"
|
||||
"pkg/topology"
|
||||
"pkg/util"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type AllocateVolumeResult struct {
|
||||
@@ -18,7 +17,7 @@ func AllocateVolume(dn *topology.DataNode, vid storage.VolumeId, repType storage
|
||||
values := make(url.Values)
|
||||
values.Add("volume", vid.String())
|
||||
values.Add("replicationType", repType.String())
|
||||
jsonBlob, err := util.Post("http://"+dn.Ip+":"+strconv.Itoa(dn.Port)+"/admin/assign_volume", values)
|
||||
jsonBlob, err := util.Post("http://"+dn.Url()+"/admin/assign_volume", values)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
|
||||
type Location struct {
|
||||
Url string "url"
|
||||
PublicUrl string "publicUrl"
|
||||
PublicUrl string "publicUrl"
|
||||
}
|
||||
type LookupResult struct {
|
||||
Locations []Location "locations"
|
||||
|
||||
@@ -15,23 +15,24 @@ type Store struct {
|
||||
volumes map[VolumeId]*Volume
|
||||
dir string
|
||||
Port int
|
||||
Ip string
|
||||
PublicUrl string
|
||||
MaxVolumeCount int
|
||||
}
|
||||
|
||||
func NewStore(port int, publicUrl, dirname string, maxVolumeCount int) (s *Store) {
|
||||
s = &Store{Port: port, PublicUrl: publicUrl, dir: dirname, MaxVolumeCount: maxVolumeCount}
|
||||
func NewStore(port int, ip, publicUrl, dirname string, maxVolumeCount int) (s *Store) {
|
||||
s = &Store{Port: port, Ip: ip, PublicUrl: publicUrl, dir: dirname, MaxVolumeCount: maxVolumeCount}
|
||||
s.volumes = make(map[VolumeId]*Volume)
|
||||
s.loadExistingVolumes()
|
||||
|
||||
log.Println("Store started on dir:", dirname, "with", len(s.volumes), "volumes")
|
||||
return
|
||||
}
|
||||
func (s *Store) AddVolume(volumeListString string, replicationType string) (error) {
|
||||
rt, e := NewReplicationType(replicationType)
|
||||
if e!=nil {
|
||||
return e
|
||||
}
|
||||
func (s *Store) AddVolume(volumeListString string, replicationType string) error {
|
||||
rt, e := NewReplicationType(replicationType)
|
||||
if e != nil {
|
||||
return e
|
||||
}
|
||||
for _, range_string := range strings.Split(volumeListString, ",") {
|
||||
if strings.Index(range_string, "-") < 0 {
|
||||
id_string := range_string
|
||||
@@ -103,6 +104,7 @@ func (s *Store) Join(mserver string) error {
|
||||
bytes, _ := json.Marshal(stats)
|
||||
values := make(url.Values)
|
||||
values.Add("port", strconv.Itoa(s.Port))
|
||||
values.Add("ip", s.Ip)
|
||||
values.Add("publicUrl", s.PublicUrl)
|
||||
values.Add("volumes", string(bytes))
|
||||
values.Add("maxVolumeCount", strconv.Itoa(s.MaxVolumeCount))
|
||||
@@ -133,10 +135,10 @@ func (s *Store) Read(i VolumeId, n *Needle) (int, error) {
|
||||
return 0, errors.New("Not Found")
|
||||
}
|
||||
func (s *Store) GetVolume(i VolumeId) *Volume {
|
||||
return s.volumes[i]
|
||||
return s.volumes[i]
|
||||
}
|
||||
|
||||
func (s *Store) HasVolume(i VolumeId) bool {
|
||||
_, ok := s.volumes[i]
|
||||
return ok
|
||||
_, ok := s.volumes[i]
|
||||
return ok
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package topology
|
||||
import (
|
||||
_ "fmt"
|
||||
"pkg/storage"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type DataNode struct {
|
||||
@@ -43,11 +44,13 @@ func (dn *DataNode) GetTopology() *Topology {
|
||||
func (dn *DataNode) MatchLocation(ip string, port int) bool {
|
||||
return dn.Ip == ip && dn.Port == port
|
||||
}
|
||||
func (dn *DataNode) Url() string {
|
||||
return dn.Ip + strconv.Itoa(dn.Port)
|
||||
}
|
||||
|
||||
func (dn *DataNode) ToMap() interface{} {
|
||||
ret := make(map[string]interface{})
|
||||
ret["Ip"] = dn.Ip
|
||||
ret["Port"] = dn.Port
|
||||
ret["Url"] = dn.Url()
|
||||
ret["Volumes"] = dn.GetActiveVolumeCount()
|
||||
ret["Max"] = dn.GetMaxVolumeCount()
|
||||
ret["Free"] = dn.FreeSpace()
|
||||
|
||||
@@ -10,13 +10,13 @@ import (
|
||||
func Post(url string, values url.Values) ([]byte, error) {
|
||||
r, err := http.PostForm(url, values)
|
||||
if err != nil {
|
||||
log.Println("post:", err)
|
||||
log.Println("post to", url, err)
|
||||
return nil, err
|
||||
}
|
||||
defer r.Body.Close()
|
||||
b, err := ioutil.ReadAll(r.Body)
|
||||
if err != nil {
|
||||
log.Println("post:", err)
|
||||
log.Println("read post result from", url, err)
|
||||
return nil, err
|
||||
}
|
||||
return b, nil
|
||||
|
||||
Reference in New Issue
Block a user