func handleArchiveKeyEntire(message types.Message, nimbusioWriter writer.NimbusioWriter, replyChan chan<- *reply.ReplyMessage) { var archiveKeyEntire msg.ArchiveKeyEntire var md5Digest []byte var err error var valueFileID uint32 archiveKeyEntire, err = msg.UnmarshalArchiveKeyEntire(message.Marshalled) if err != nil { fog.Error("UnmarshalArchiveKeyEntire failed %s", err) return } replyMessage := reply.NewReplyMessage("archive-key-final", message.ID, archiveKeyEntire.UserRequestID, archiveKeyEntire.ReturnAddress) lgr := logger.NewLogger(archiveKeyEntire.UserRequestID, archiveKeyEntire.UnifiedID, archiveKeyEntire.ConjoinedPart, archiveKeyEntire.SegmentNum, archiveKeyEntire.Key) lgr.Info("archive-key-entire") if archiveKeyEntire.SegmentSize != uint64(len(message.Data)) { lgr.Error("size mismatch (%d != %d)", archiveKeyEntire.SegmentSize, len(message.Data)) replyMessage.Error("size-mismatch", "segment size does not match expected value") replyChan <- replyMessage return } md5Digest, err = base64.StdEncoding.DecodeString(archiveKeyEntire.EncodedSegmentMD5Digest) if err != nil { lgr.Error("base64.StdEncoding.DecodeString %s", err) replyMessage.Error("base64", "base64.StdEncoding.DecodeString") replyChan <- replyMessage return } if !MD5DigestMatches(message.Data, md5Digest) { lgr.Error("md5 mismatch") replyMessage.Error("md5-mismatch", "segment md5 does not match expected value") replyChan <- replyMessage return } err = nimbusioWriter.StartSegment(archiveKeyEntire.UserRequestID, archiveKeyEntire.Segment, archiveKeyEntire.NodeNames) if err != nil { lgr.Error("StartSegment: %s", err) replyMessage.Error("error", err.Error()) replyChan <- replyMessage return } valueFileID, err = nimbusioWriter.StoreSequence( archiveKeyEntire.UserRequestID, archiveKeyEntire.Segment, archiveKeyEntire.Sequence, message.Data) if err != nil { lgr.Error("StoreSequence: %s", err) replyMessage.Error("error", err.Error()) replyChan <- replyMessage return } metaData := msg.GetMetaFromJSON(message.Marshalled) err = nimbusioWriter.FinishSegment(archiveKeyEntire.UserRequestID, archiveKeyEntire.Segment, archiveKeyEntire.File, metaData, valueFileID) if err != nil { lgr.Error("FinishSegment: %s", err) replyMessage.Error("error", err.Error()) replyChan <- replyMessage return } replyMessage.Success() replyChan <- replyMessage return }