本文整理汇总了Golang中github.com/Symantec/Dominator/lib/srpc.Conn.Flush方法的典型用法代码示例。如果您正苦于以下问题:Golang Conn.Flush方法的具体用法?Golang Conn.Flush怎么用?Golang Conn.Flush使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/Symantec/Dominator/lib/srpc.Conn
的用法示例。
在下文中一共展示了Conn.Flush方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: GetFiles
func (t *rpcType) GetFiles(conn *srpc.Conn) error {
defer conn.Flush()
t.getFilesLock.Lock()
defer t.getFilesLock.Unlock()
encoder := gob.NewEncoder(conn)
numFiles := 0
for ; ; numFiles++ {
filename, err := conn.ReadString('\n')
if err != nil {
return err
}
filename = filename[:len(filename)-1]
if filename == "" {
break
}
filename = path.Join(t.rootDir, filename)
if err := processFilename(conn, filename, encoder); err != nil {
return err
}
}
plural := "s"
if numFiles == 1 {
plural = ""
}
t.logger.Printf("GetFiles(): %d file%s provided\n", numFiles, plural)
return nil
}
示例2: addObjects
func addObjects(conn *srpc.Conn, adder ObjectAdder, logger *log.Logger) error {
defer conn.Flush()
decoder := gob.NewDecoder(conn)
encoder := gob.NewEncoder(conn)
numAdded := 0
numObj := 0
for ; ; numObj++ {
var request objectserver.AddObjectRequest
var response objectserver.AddObjectResponse
if err := decoder.Decode(&request); err != nil {
if err == io.EOF || err == io.ErrUnexpectedEOF {
break
}
return err
}
if request.Length < 1 {
break
}
response.Hash, response.Added, response.Error =
adder.AddObject(conn, request.Length, request.ExpectedHash)
if response.Added {
numAdded++
}
if err := encoder.Encode(response); err != nil {
return err
}
if response.Error != nil {
logger.Printf("AddObjects(): failed, %d of %d are new objects %s",
numAdded, numObj, response.Error.Error())
return nil
}
}
logger.Printf("AddObjects(): %d of %d are new objects", numAdded, numObj)
return nil
}
示例3: connect
func (m *Manager) connect(conn *srpc.Conn) error {
defer conn.Flush()
clientChannel := make(chan *proto.ServerMessage, 4096)
m.rwMutex.Lock()
m.clients[clientChannel] = clientChannel
m.rwMutex.Unlock()
defer func() {
m.rwMutex.Lock()
delete(m.clients, clientChannel)
m.rwMutex.Unlock()
}()
closeNotifyChannel := make(chan struct{})
// The client must keep the same encoder/decoder pair over the lifetime
// of the connection.
go m.handleClientRequests(gob.NewDecoder(conn), clientChannel,
closeNotifyChannel)
encoder := gob.NewEncoder(conn)
for {
select {
case serverMessage := <-clientChannel:
if err := encoder.Encode(serverMessage); err != nil {
m.logger.Printf("error encoding ServerMessage: %s\n", err)
return err
}
if len(clientChannel) < 1 {
if err := conn.Flush(); err != nil {
m.logger.Printf("error flushing: %s\n", err)
return err
}
}
case <-closeNotifyChannel:
return nil
}
}
}
示例4: sendRequests
func sendRequests(conn *srpc.Conn, filenames []string) error {
for _, filename := range filenames {
if _, err := conn.WriteString(filename + "\n"); err != nil {
return err
}
}
if _, err := conn.WriteString("\n"); err != nil {
return err
}
return conn.Flush()
}
示例5: Poll
func (t *rpcType) Poll(conn *srpc.Conn) error {
defer conn.Flush()
var request sub.PollRequest
var response sub.PollResponse
decoder := gob.NewDecoder(conn)
if err := decoder.Decode(&request); err != nil {
_, err = conn.WriteString(err.Error() + "\n")
return err
}
if _, err := conn.WriteString("\n"); err != nil {
return err
}
response.NetworkSpeed = t.networkReaderContext.MaximumSpeed()
response.CurrentConfiguration = t.getConfiguration()
t.rwLock.RLock()
response.FetchInProgress = t.fetchInProgress
response.UpdateInProgress = t.updateInProgress
if t.lastFetchError != nil {
response.LastFetchError = t.lastFetchError.Error()
}
if !t.updateInProgress {
if t.lastUpdateError != nil {
response.LastUpdateError = t.lastUpdateError.Error()
}
response.LastUpdateHadTriggerFailures = t.lastUpdateHadTriggerFailures
}
response.LastSuccessfulImageName = t.lastSuccessfulImageName
t.rwLock.RUnlock()
response.StartTime = startTime
response.PollTime = time.Now()
response.ScanCount = t.fileSystemHistory.ScanCount()
response.DurationOfLastScan = t.fileSystemHistory.DurationOfLastScan()
response.GenerationCount = t.fileSystemHistory.GenerationCount()
fs := t.fileSystemHistory.FileSystem()
if fs != nil &&
!request.ShortPollOnly &&
request.HaveGeneration != t.fileSystemHistory.GenerationCount() {
response.FileSystemFollows = true
}
encoder := gob.NewEncoder(conn)
if err := encoder.Encode(response); err != nil {
return err
}
if response.FileSystemFollows {
if err := fs.FileSystem.Encode(conn); err != nil {
return err
}
if err := fs.ObjectCache.Encode(conn); err != nil {
return err
}
}
return nil
}
示例6: Cleanup
func (t *rpcType) Cleanup(conn *srpc.Conn) error {
defer conn.Flush()
var request sub.CleanupRequest
var response sub.CleanupResponse
decoder := gob.NewDecoder(conn)
if err := decoder.Decode(&request); err != nil {
_, err = conn.WriteString(err.Error() + "\n")
return err
}
if err := t.cleanup(request, &response); err != nil {
_, err = conn.WriteString(err.Error() + "\n")
return err
}
if _, err := conn.WriteString("\n"); err != nil {
return err
}
return gob.NewEncoder(conn).Encode(response)
}
示例7: DeleteImage
func (t *srpcType) DeleteImage(conn *srpc.Conn) error {
defer conn.Flush()
var request imageserver.DeleteImageRequest
var response imageserver.DeleteImageResponse
decoder := gob.NewDecoder(conn)
if err := decoder.Decode(&request); err != nil {
_, err = conn.WriteString(err.Error() + "\n")
return err
}
if err := t.deleteImage(request, &response); err != nil {
_, err = conn.WriteString(err.Error() + "\n")
return err
}
if _, err := conn.WriteString("\n"); err != nil {
return err
}
return gob.NewEncoder(conn).Encode(response)
}
示例8: GetMdbUpdates
func (t *rpcType) GetMdbUpdates(conn *srpc.Conn) error {
encoder := gob.NewEncoder(conn)
updateChannel := make(chan mdbserver.MdbUpdate, 1)
t.rwMutex.Lock()
t.updateChannels[conn] = updateChannel
t.rwMutex.Unlock()
mdbUpdate := mdbserver.MdbUpdate{MachinesToAdd: t.currentMdb.Machines}
if err := encoder.Encode(mdbUpdate); err != nil {
return nil
}
if err := conn.Flush(); err != nil {
return nil
}
closeChannel := getCloseNotifier(conn)
for {
var err error
select {
case mdbUpdate := <-updateChannel:
if err = encoder.Encode(mdbUpdate); err != nil {
break
}
if err = conn.Flush(); err != nil {
break
}
case err = <-closeChannel:
break
}
if err != nil {
t.rwMutex.Lock()
delete(t.updateChannels, conn)
t.rwMutex.Unlock()
if err != io.EOF {
t.logger.Println(err)
return err
} else {
return nil
}
}
}
}
示例9: Poll
func (t *rpcType) Poll(conn *srpc.Conn) error {
defer conn.Flush()
t.pollLock.Lock()
defer t.pollLock.Unlock()
var request sub.PollRequest
var response sub.PollResponse
decoder := gob.NewDecoder(conn)
if err := decoder.Decode(&request); err != nil {
_, err = conn.WriteString(err.Error() + "\n")
return err
}
if _, err := conn.WriteString("\n"); err != nil {
return err
}
response.NetworkSpeed = t.networkReaderContext.MaximumSpeed()
t.rwLock.RLock()
response.FetchInProgress = t.fetchInProgress
response.UpdateInProgress = t.updateInProgress
response.LastUpdateHadTriggerFailures = t.lastUpdateHadTriggerFailures
t.rwLock.RUnlock()
response.GenerationCount = t.fileSystemHistory.GenerationCount()
fs := t.fileSystemHistory.FileSystem()
if fs != nil &&
request.HaveGeneration != t.fileSystemHistory.GenerationCount() {
response.FileSystemFollows = true
}
encoder := gob.NewEncoder(conn)
if err := encoder.Encode(response); err != nil {
return err
}
if response.FileSystemFollows {
if err := fs.FileSystem.Encode(conn); err != nil {
return err
}
if err := fs.ObjectCache.Encode(conn); err != nil {
return err
}
}
return nil
}
示例10: sendClientRequests
func sendClientRequests(conn *srpc.Conn,
clientRequestChannel <-chan *proto.ClientRequest,
closeNotifyChannel <-chan struct{}, logger *log.Logger) {
encoder := gob.NewEncoder(conn)
for {
select {
case clientRequest := <-clientRequestChannel:
if err := encoder.Encode(clientRequest); err != nil {
logger.Printf("error encoding client request: %s\n", err)
return
}
if len(clientRequestChannel) < 1 {
if err := conn.Flush(); err != nil {
logger.Printf("error flushing: %s\n", err)
return
}
}
case <-closeNotifyChannel:
return
}
}
}
示例11: AddObjects
func (t *srpcType) AddObjects(conn *srpc.Conn) error {
defer runtime.GC() // An opportune time to take out the garbage.
defer conn.Flush()
decoder := gob.NewDecoder(conn)
encoder := gob.NewEncoder(conn)
numAdded := 0
numObj := 0
for ; ; numObj++ {
var request objectserver.AddObjectRequest
var response objectserver.AddObjectResponse
if err := decoder.Decode(&request); err != nil {
if err == io.EOF || err == io.ErrUnexpectedEOF {
break
}
return err
}
if request.Length < 1 {
break
}
response.Hash, response.Added, response.Error =
t.objectServer.AddObject(conn, request.Length, request.ExpectedHash)
if response.Added {
numAdded++
}
if err := encoder.Encode(response); err != nil {
return err
}
if response.Error != nil {
t.logger.Printf("AddObjects(): failed, %d of %d are new objects %s",
numAdded, numObj, response.Error.Error())
return nil
}
}
t.logger.Printf("AddObjects(): %d of %d are new objects", numAdded, numObj)
return nil
}
示例12: GetImageUpdates
func (t *srpcType) GetImageUpdates(conn *srpc.Conn) error {
defer conn.Flush()
t.logger.Println("New image replication client connected")
t.incrementNumReplicationClients(true)
defer t.incrementNumReplicationClients(false)
addChannel := t.imageDataBase.RegisterAddNotifier()
deleteChannel := t.imageDataBase.RegisterDeleteNotifier()
mkdirChannel := t.imageDataBase.RegisterMakeDirectoryNotifier()
defer t.imageDataBase.UnregisterAddNotifier(addChannel)
defer t.imageDataBase.UnregisterDeleteNotifier(deleteChannel)
defer t.imageDataBase.UnregisterMakeDirectoryNotifier(mkdirChannel)
encoder := gob.NewEncoder(conn)
directories := t.imageDataBase.ListDirectories()
image.SortDirectories(directories)
for _, directory := range directories {
imageUpdate := imageserver.ImageUpdate{
Directory: &directory,
Operation: imageserver.OperationMakeDirectory,
}
if err := encoder.Encode(imageUpdate); err != nil {
t.logger.Println(err)
return err
}
}
for _, imageName := range t.imageDataBase.ListImages() {
imageUpdate := imageserver.ImageUpdate{Name: imageName}
if err := encoder.Encode(imageUpdate); err != nil {
t.logger.Println(err)
return err
}
}
// Signal end of initial image list.
if err := encoder.Encode(imageserver.ImageUpdate{}); err != nil {
t.logger.Println(err)
return err
}
if err := conn.Flush(); err != nil {
t.logger.Println(err)
return err
}
t.logger.Println(
"Finished sending initial image list to replication client")
closeChannel := getCloseNotifier(conn)
for {
select {
case imageName := <-addChannel:
if err := sendUpdate(encoder, imageName,
imageserver.OperationAddImage); err != nil {
t.logger.Println(err)
return err
}
case imageName := <-deleteChannel:
if err := sendUpdate(encoder, imageName,
imageserver.OperationDeleteImage); err != nil {
t.logger.Println(err)
return err
}
case directory := <-mkdirChannel:
if err := sendMakeDirectory(encoder, directory); err != nil {
t.logger.Println(err)
return err
}
case err := <-closeChannel:
if err == io.EOF {
t.logger.Println("Image replication client disconnected")
return nil
}
t.logger.Println(err)
return err
}
if err := conn.Flush(); err != nil {
t.logger.Println(err)
return err
}
}
}
示例13: GetObjects
func (objSrv *srpcType) GetObjects(conn *srpc.Conn) error {
defer conn.Flush()
var request objectserver.GetObjectsRequest
var response objectserver.GetObjectsResponse
if request.Exclusive {
exclusive.Lock()
defer exclusive.Unlock()
} else {
exclusive.RLock()
defer exclusive.RUnlock()
objSrv.getSemaphore <- true
defer releaseSemaphore(objSrv.getSemaphore)
}
decoder := gob.NewDecoder(conn)
encoder := gob.NewEncoder(conn)
var err error
if err = decoder.Decode(&request); err != nil {
response.ResponseString = err.Error()
return encoder.Encode(response)
}
response.ObjectSizes, err = objSrv.objectServer.CheckObjects(request.Hashes)
if err != nil {
response.ResponseString = err.Error()
return encoder.Encode(response)
}
// First a quick check for existence. If any objects missing, fail request.
for index, hash := range request.Hashes {
if response.ObjectSizes[index] < 1 {
response.ResponseString = fmt.Sprintf("unknown object: %x", hash)
return encoder.Encode(response)
}
}
objectsReader, err := objSrv.objectServer.GetObjects(request.Hashes)
if err != nil {
response.ResponseString = err.Error()
return encoder.Encode(response)
}
defer objectsReader.Close()
if err := encoder.Encode(response); err != nil {
return err
}
conn.Flush()
for _, hash := range request.Hashes {
length, reader, err := objectsReader.NextObject()
if err != nil {
objSrv.logger.Println(err)
return err
}
nCopied, err := io.Copy(conn.Writer, reader)
reader.Close()
if err != nil {
objSrv.logger.Printf("Error copying:\t%s\n", err)
return err
}
if nCopied != int64(length) {
txt := fmt.Sprintf("Expected length: %d, got: %d for: %x",
length, nCopied, hash)
objSrv.logger.Printf(txt)
return errors.New(txt)
}
}
objSrv.logger.Printf("GetObjects() sent: %d objects\n", len(request.Hashes))
return nil
}