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  }