github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/objectserver/rpcd/lib/addObjects.go (about) 1 package lib 2 3 import ( 4 "io" 5 6 "github.com/Cloud-Foundations/Dominator/lib/errors" 7 "github.com/Cloud-Foundations/Dominator/lib/log" 8 "github.com/Cloud-Foundations/Dominator/lib/srpc" 9 "github.com/Cloud-Foundations/Dominator/proto/objectserver" 10 ) 11 12 func addObjects(conn *srpc.Conn, decoder srpc.Decoder, encoder srpc.Encoder, 13 adder ObjectAdder, logger log.Logger) error { 14 defer conn.Flush() 15 logger.Printf("AddObjects(%s) starting\n", conn.RemoteAddr()) 16 numAdded := 0 17 numObj := 0 18 for ; ; numObj++ { 19 var request objectserver.AddObjectRequest 20 var response objectserver.AddObjectResponse 21 if err := decoder.Decode(&request); err != nil { 22 if err == io.EOF || err == io.ErrUnexpectedEOF { 23 break 24 } 25 return errors.New("error decoding: " + err.Error()) 26 } 27 if request.Length < 1 { 28 break 29 } 30 var err error 31 response.Hash, response.Added, err = 32 adder.AddObject(conn, request.Length, request.ExpectedHash) 33 response.ErrorString = errors.ErrorToString(err) 34 if err := encoder.Encode(response); err != nil { 35 return errors.New("error encoding: " + err.Error()) 36 } 37 if response.ErrorString != "" { 38 logger.Printf( 39 "AddObjects(): failed, %d of %d so far are new objects: %s", 40 numAdded, numObj+1, response.ErrorString) 41 return nil 42 } 43 if response.Added { 44 numAdded++ 45 } 46 } 47 logger.Printf("AddObjects(): %d of %d are new objects", numAdded, numObj) 48 return nil 49 }