MCPcopy Create free account
hub / github.com/MG-RAST/Shock / addVirtualParts

Method addVirtualParts

shock-server/node/parts.go:54–83  ·  view source on GitHub ↗
(ids []string)

Source from the content-addressed store, hash-verified

52}
53
54func (node *Node) addVirtualParts(ids []string) (err error) {
55 nodes := Nodes{}
56 if _, err := dbFind(bson.M{"id": bson.M{"$in": ids}}, &nodes, "", nil); err != nil {
57 return err
58 }
59 if len(ids) != len(nodes) {
60 return errors.New("unable to load all node ids.")
61 }
62 node.File.Virtual = true
63 for _, n := range nodes {
64 if n.HasFile() && !n.HasFileLock() {
65 node.File.VirtualParts = append(node.File.VirtualParts, n.Id)
66 } else {
67 return errors.New("node %s: has no file or file is locked. All nodes in source must have available files.")
68 }
69 }
70 if reader, err := node.FileReader(); err == nil {
71 defer reader.Close()
72 md5h := md5.New()
73 n, err := io.Copy(md5h, reader)
74 if err != nil {
75 return err
76 }
77 node.File.Checksum["md5"] = fmt.Sprintf("%x", md5h.Sum(nil))
78 node.File.Size = n
79 } else {
80 return err
81 }
82 return
83}
84
85func (node *Node) addPart(n int, file *file.FormFile) (err error) {
86 if n >= node.Parts.Count && !node.Parts.VarLen {

Callers 1

UpdateMethod · 0.95

Calls 5

FileReaderMethod · 0.95
dbFindFunction · 0.85
HasFileMethod · 0.80
HasFileLockMethod · 0.80
CloseMethod · 0.65

Tested by

no test coverage detected