|
|
@ -3,6 +3,7 @@ package weed_server |
|
|
|
import ( |
|
|
|
"math/rand" |
|
|
|
"net/http" |
|
|
|
"sync" |
|
|
|
"time" |
|
|
|
|
|
|
|
"github.com/chrislusf/weed-fs/go/glog" |
|
|
@ -12,6 +13,7 @@ import ( |
|
|
|
|
|
|
|
type VolumeServer struct { |
|
|
|
masterNode string |
|
|
|
mnLock sync.RWMutex |
|
|
|
pulseSeconds int |
|
|
|
dataCenter string |
|
|
|
rack string |
|
|
@ -29,12 +31,12 @@ func NewVolumeServer(publicMux, adminMux *http.ServeMux, ip string, |
|
|
|
whiteList []string, |
|
|
|
fixJpgOrientation bool) *VolumeServer { |
|
|
|
vs := &VolumeServer{ |
|
|
|
masterNode: masterNode, |
|
|
|
pulseSeconds: pulseSeconds, |
|
|
|
dataCenter: dataCenter, |
|
|
|
rack: rack, |
|
|
|
FixJpgOrientation: fixJpgOrientation, |
|
|
|
} |
|
|
|
vs.SetMasterNode(masterNode) |
|
|
|
vs.store = storage.NewStore(port, adminPort, ip, publicUrl, folders, maxCounts) |
|
|
|
|
|
|
|
vs.guard = security.NewGuard(whiteList, "") |
|
|
@ -54,7 +56,8 @@ func NewVolumeServer(publicMux, adminMux *http.ServeMux, ip string, |
|
|
|
|
|
|
|
go func() { |
|
|
|
connected := true |
|
|
|
vs.store.SetBootstrapMaster(vs.masterNode) |
|
|
|
|
|
|
|
vs.store.SetBootstrapMaster(vs.GetMasterNode()) |
|
|
|
vs.store.SetDataCenter(vs.dataCenter) |
|
|
|
vs.store.SetRack(vs.rack) |
|
|
|
for { |
|
|
@ -62,8 +65,8 @@ func NewVolumeServer(publicMux, adminMux *http.ServeMux, ip string, |
|
|
|
if err == nil { |
|
|
|
if !connected { |
|
|
|
connected = true |
|
|
|
vs.masterNode = master |
|
|
|
glog.V(0).Infoln("Volume Server Connected with master at", master) |
|
|
|
vs.SetMasterNode(master) |
|
|
|
glog.V(0).Infoln("Volume Server Connected with master at", master, "and set it as masterNode") |
|
|
|
} |
|
|
|
} else { |
|
|
|
glog.V(4).Infoln("Volume Server Failed to talk with master:", err.Error()) |
|
|
@ -82,6 +85,18 @@ func NewVolumeServer(publicMux, adminMux *http.ServeMux, ip string, |
|
|
|
return vs |
|
|
|
} |
|
|
|
|
|
|
|
func (vs *VolumeServer) GetMasterNode() string { |
|
|
|
vs.mnLock.RLock() |
|
|
|
defer vs.mnLock.RUnlock() |
|
|
|
return vs.masterNode |
|
|
|
} |
|
|
|
|
|
|
|
func (vs *VolumeServer) SetMasterNode(masterNode string) { |
|
|
|
vs.mnLock.Lock() |
|
|
|
defer vs.mnLock.Unlock() |
|
|
|
vs.masterNode = masterNode |
|
|
|
} |
|
|
|
|
|
|
|
func (vs *VolumeServer) Shutdown() { |
|
|
|
glog.V(0).Infoln("Shutting down volume server...") |
|
|
|
vs.store.Close() |
|
|
|