github.com/Cloud-Foundations/Dominator@v0.3.4/imageunpacker/unpacker/forgetStream.go (about) 1 package unpacker 2 3 import ( 4 "errors" 5 6 proto "github.com/Cloud-Foundations/Dominator/proto/imageunpacker" 7 ) 8 9 func (u *Unpacker) forgetStream(streamName string) error { 10 u.updateUsageTime() 11 defer u.updateUsageTime() 12 streamInfo := u.getStream(streamName) 13 if streamInfo == nil { 14 return errors.New("unknown stream") 15 } 16 errorChannel := make(chan error) 17 request := requestType{ 18 request: requestForget, 19 errorChannel: errorChannel, 20 } 21 streamInfo.requestChannel <- request 22 return <-errorChannel 23 } 24 25 func (stream *streamManagerState) forget() error { 26 streamInfo := stream.streamInfo 27 switch streamInfo.status { 28 case proto.StatusStreamNoDevice: 29 case proto.StatusStreamNoFileSystem: 30 default: 31 if err := stream.unmount(); err != nil { 32 return err 33 } 34 } 35 u := stream.unpacker 36 u.rwMutex.Lock() 37 defer u.rwMutex.Unlock() 38 if device, ok := u.pState.Devices[streamInfo.DeviceId]; ok { 39 device.eraseFileSystem() 40 device.StreamName = "" 41 u.pState.Devices[streamInfo.DeviceId] = device 42 } 43 streamInfo.DeviceId = "" 44 delete(u.pState.ImageStreams, stream.streamName) 45 return u.writeStateWithLock() 46 }