diff options
| author | Chris Lu <chris.lu@gmail.com> | 2014-03-13 12:13:39 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2014-03-13 12:13:39 -0700 |
| commit | eec67d60081e7435dcc2506093bceabf26f4938e (patch) | |
| tree | effb2fa205e4c557e9e0b3665233c293d208635c /go/topology | |
| parent | 946aa6d1e78bb98e73851b87c291406b8112cc82 (diff) | |
| download | seaweedfs-eec67d60081e7435dcc2506093bceabf26f4938e.tar.xz seaweedfs-eec67d60081e7435dcc2506093bceabf26f4938e.zip | |
fix bug on volume growing failure where free space equals what's
required.
more meaningful volume allocation errors
Diffstat (limited to 'go/topology')
| -rw-r--r-- | go/topology/node.go | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/go/topology/node.go b/go/topology/node.go index abe363b39..c52414008 100644 --- a/go/topology/node.go +++ b/go/topology/node.go @@ -5,6 +5,7 @@ import ( "code.google.com/p/weed-fs/go/storage" "errors" "math/rand" + "strings" ) type NodeId string @@ -50,15 +51,18 @@ type NodeImpl struct { } // the first node must satisfy filterFirstNodeFn(), the rest nodes must have one free slot -func (n *NodeImpl) RandomlyPickNodes(numberOfNodes int, filterFirstNodeFn func(dn Node) bool) (firstNode Node, restNodes []Node, err error) { +func (n *NodeImpl) RandomlyPickNodes(numberOfNodes int, filterFirstNodeFn func(dn Node) error) (firstNode Node, restNodes []Node, err error) { candidates := make([]Node, 0, len(n.children)) + errs := make([]string, 0) for _, node := range n.children { - if filterFirstNodeFn(node) { + if err := filterFirstNodeFn(node); err == nil { candidates = append(candidates, node) + } else { + errs = append(errs, string(node.Id())+":"+err.Error()) } } if len(candidates) == 0 { - return nil, nil, errors.New("No matching data node found!") + return nil, nil, errors.New("No matching data node found! \n" + strings.Join(errs, "\n")) } firstNode = candidates[rand.Intn(len(candidates))] glog.V(2).Infoln(n.Id(), "picked main node:", firstNode.Id()) |
