@cryptotaxi247 / kubo / commits / 15a470100

update error handling in ipns

Jeromy committed Oct 8, 2014 at 17:29 UTC 15a470100380d313730fdab83ed833b791163406
1 file changed +18 -10
fuse/ipns/ipns_unix.go
+18 -10
@@ -216,7 +216,10 @@ func (s *Node) loadData() error {
216 // Attr returns the attributes of a given node.
217 func (s *Node) Attr() fuse.Attr {
218 if s.cached == nil {
219 - s.loadData()
219 + err := s.loadData()
220 + if err != nil {
221 + log.Error("Error loading PBData for file: '%s'", s.name)
222 + }
223 }
224 switch s.cached.GetType() {
225 case ft.PBData_Directory:
@@ -259,6 +262,7 @@ func (n *Node) makeChild(name string, node *mdag.Node) *Node {
262 parent: n,
263 }
264
265 + // Always ensure that each child knows where the root is
266 if n.nsRoot == nil {
267 child.nsRoot = n
268 } else {
@@ -305,7 +309,9 @@ func (s *Node) ReadAll(intr fs.Intr) ([]byte, fuse.Error) {
309
310 func (n *Node) Write(req *fuse.WriteRequest, resp *fuse.WriteResponse, intr fs.Intr) fuse.Error {
311 log.Debug("ipns: Node Write [%s]: flags = %s, offset = %d, size = %d", n.name, req.Flags.String(), req.Offset, len(req.Data))
312 +
313 if n.dagMod == nil {
314 + // Create a DagModifier to allow us to change the existing dag node
315 dmod, err := dt.NewDagModifier(n.Nd, n.Ipfs.DAG, imp.DefaultSplitter)
316 if err != nil {
317 log.Error("Error creating dag modifier: %s", err)
@@ -324,6 +330,7 @@ func (n *Node) Write(req *fuse.WriteRequest, resp *fuse.WriteResponse, intr fs.I
330 func (n *Node) Flush(req *fuse.FlushRequest, intr fs.Intr) fuse.Error {
331 log.Debug("Got flush request [%s]!", n.name)
332
333 + // If a write has happened
334 if n.dagMod != nil {
335 newNode, err := n.dagMod.GetNode()
336 if err != nil {
@@ -364,6 +371,7 @@ func (n *Node) Flush(req *fuse.FlushRequest, intr fs.Intr) fuse.Error {
371 return nil
372 }
373
374 +// Signal that a node in this tree was changed so the root can republish
375 func (n *Node) wasChanged() {
376 root := n.nsRoot
377 if root == nil {
@@ -375,6 +383,8 @@ func (n *Node) wasChanged() {
383
384 func (n *Node) republishRoot() error {
385 log.Debug("Republish root")
386 +
387 + // We should already be the root, this is just a sanity check
388 var root *Node
389 if n.nsRoot != nil {
390 root = n.nsRoot
@@ -392,7 +402,6 @@ func (n *Node) republishRoot() error {
402 ndkey, err := root.Nd.Key()
403 if err != nil {
404 log.Error("getKey error: %s", err)
395 - // return fuse.ETHISREALLYSUCKS
405 return err
406 }
407 log.Debug("Publishing changes!")
@@ -432,8 +441,7 @@ func (n *Node) Mkdir(req *fuse.MkdirRequest, intr fs.Intr) (fs.Node, fuse.Error)
441 err := n.parent.update(n.name, nnode)
442 if err != nil {
443 log.Critical("Error updating node: %s", err)
435 - // Can we panic, please?
436 - return nil, fuse.ENODATA
444 + return nil, err
445 }
446 }
447 n.Nd = nnode
@@ -473,14 +481,14 @@ func (n *Node) Create(req *fuse.CreateRequest, resp *fuse.CreateResponse, intr f
481 err := nnode.AddNodeLink(req.Name, nd)
482 if err != nil {
483 log.Error("Error adding child to node: %s", err)
476 - return nil, nil, fuse.ENOENT
484 + return nil, nil, err
485 }
486 if n.parent != nil {
487 err := n.parent.update(n.name, nnode)
488 if err != nil {
489 log.Critical("Error updating node: %s", err)
490 // Can we panic, please?
483 - return nil, nil, fuse.ENODATA
491 + return nil, nil, err
492 }
493 }
494 n.Nd = nnode
@@ -502,8 +510,7 @@ func (n *Node) Remove(req *fuse.RemoveRequest, intr fs.Intr) fuse.Error {
510 err := n.parent.update(n.name, nnode)
511 if err != nil {
512 log.Critical("Error updating node: %s", err)
505 - // Can we panic, please?
506 - return fuse.ENODATA
513 + return err
514 }
515 }
516 n.Nd = nnode
@@ -530,15 +537,16 @@ func (n *Node) Rename(req *fuse.RenameRequest, newDir fs.Node, intr fs.Intr) fus
537 err := newDir.Nd.AddNodeLink(req.NewName, mdn)
538 if err != nil {
539 log.Error("Error adding node to new dir on rename: %s", err)
533 - return fuse.ENOENT
540 + return err
541 }
542 default:
543 log.Critical("Unknown node type for rename target dir!")
537 - return fuse.ENOENT
544 + return err
545 }
546 return nil
547 }
548
549 +// Updates the child of this node, specified by name to the given newnode
550 func (n *Node) update(name string, newnode *mdag.Node) error {
551 log.Debug("update '%s' in '%s'", name, n.name)
552 nnode := n.Nd.Copy()