Browse Source

volume: change all writes to fsync during graceful stopping

fix https://github.com/chrislusf/seaweedfs/issues/2193
pull/2211/head
Chris Lu 4 years ago
parent
commit
49c66e88a0
  1. 1
      weed/command/volume.go
  2. 5
      weed/server/volume_server.go
  3. 7
      weed/storage/store.go

1
weed/command/volume.go

@ -259,6 +259,7 @@ func (v VolumeServerOptions) startVolumeServer(volumeFolders, maxVolumeCounts, v
// Stop heartbeats
if !volumeServer.StopHeartbeat() {
volumeServer.SetStopping()
glog.V(0).Infof("stop send heartbeat and wait %d seconds until shutdown ...", *v.preStopSeconds)
time.Sleep(time.Duration(*v.preStopSeconds) * time.Second)
}

5
weed/server/volume_server.go

@ -112,6 +112,11 @@ func NewVolumeServer(adminMux, publicMux *http.ServeMux, ip string,
return vs
}
func (vs *VolumeServer) SetStopping() {
glog.V(0).Infoln("Stopping volume server...")
vs.store.SetStopping()
}
func (vs *VolumeServer) Shutdown() {
glog.V(0).Infoln("Shutting down volume server...")
vs.store.Close()

7
weed/storage/store.go

@ -46,6 +46,7 @@ type Store struct {
DeletedVolumesChan chan master_pb.VolumeShortInformationMessage
NewEcShardsChan chan master_pb.VolumeEcShardInformationMessage
DeletedEcShardsChan chan master_pb.VolumeEcShardInformationMessage
isStopping bool
}
func (s *Store) String() (str string) {
@ -321,6 +322,10 @@ func (s *Store) CollectHeartbeat() *master_pb.Heartbeat {
}
func (s *Store) SetStopping() {
s.isStopping = true
}
func (s *Store) Close() {
for _, location := range s.Locations {
location.Close()
@ -333,7 +338,7 @@ func (s *Store) WriteVolumeNeedle(i needle.VolumeId, n *needle.Needle, fsync boo
err = fmt.Errorf("volume %d is read only", i)
return
}
_, _, isUnchanged, err = v.writeNeedle2(n, fsync)
_, _, isUnchanged, err = v.writeNeedle2(n, fsync && s.isStopping)
return
}
glog.V(0).Infoln("volume", i, "not found!")

Loading…
Cancel
Save