From ee2072dff921fdb5e71ce421a7c11fdcbcafa41c Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 27 Nov 2019 23:07:53 -0800 Subject: [PATCH] volume: avoid inifinite loop reading ec volume info if error happens --- weed/storage/store_ec.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/weed/storage/store_ec.go b/weed/storage/store_ec.go index 7e3f1a46c..208560b7e 100644 --- a/weed/storage/store_ec.go +++ b/weed/storage/store_ec.go @@ -120,8 +120,13 @@ func (s *Store) ReadEcShardNeedle(ctx context.Context, vid needle.VolumeId, n *n if localEcVolume, found := location.FindEcVolume(vid); found { // read the volume version + readCounter := 0 for localEcVolume.Version == 0 { err := s.readEcVolumeVersion(ctx, vid, localEcVolume) + readCounter++ + if readCounter > 10 && err != nil { + return 0, fmt.Errorf("fail to read ec volume %d: %v", vid, err) + } time.Sleep(1357 * time.Millisecond) glog.V(0).Infof("ReadEcShardNeedle vid %d version:%v: %v", vid, localEcVolume.Version, err) }