Browse Source

Merge pull request #6666 from fanminshi/function-tester-refractor

functional-tester: move checker logic to cluster
fanmin shi 9 years ago
parent
commit
ed75d93625

+ 13 - 9
tools/functional-tester/etcd-tester/checks.go

@@ -24,14 +24,18 @@ type Checker interface {
 	Check() error
 }
 
+type hashAndRevGetter interface {
+	getRevisionHash() (revs map[string]int64, hashes map[string]int64, err error)
+}
+
 type hashChecker struct {
-	tt *tester
+	hrg hashAndRevGetter
 }
 
-func newHashChecker(tt *tester) Checker { return &hashChecker{tt} }
+func newHashChecker(hrg hashAndRevGetter) Checker { return &hashChecker{hrg} }
 
 func (hc *hashChecker) Check() (err error) {
-	plog.Printf("%s fetching current revisions...", hc.tt.logPrefix())
+	plog.Printf("fetching current revisions...")
 	var (
 		revs   map[string]int64
 		hashes map[string]int64
@@ -40,28 +44,28 @@ func (hc *hashChecker) Check() (err error) {
 	for i := 0; i < 7; i++ {
 		time.Sleep(time.Second)
 
-		revs, hashes, err = hc.tt.cluster.getRevisionHash()
+		revs, hashes, err = hc.hrg.getRevisionHash()
 		if err != nil {
-			plog.Printf("%s #%d failed to get current revisions (%v)", hc.tt.logPrefix(), i, err)
+			plog.Printf("#%d failed to get current revisions (%v)", i, err)
 			continue
 		}
 		if _, ok = getSameValue(revs); ok {
 			break
 		}
 
-		plog.Printf("%s #%d inconsistent current revisions %+v", hc.tt.logPrefix(), i, revs)
+		plog.Printf("#%d inconsistent current revisions %+v", i, revs)
 	}
 	if !ok || err != nil {
 		return fmt.Errorf("checking current revisions failed [err: %v, revisions: %v]", err, revs)
 	}
-	plog.Printf("%s all members are consistent with current revisions [revisions: %v]", hc.tt.logPrefix(), revs)
+	plog.Printf("all members are consistent with current revisions [revisions: %v]", revs)
 
-	plog.Printf("%s checking current storage hashes...", hc.tt.logPrefix())
+	plog.Printf("checking current storage hashes...")
 	if _, ok = getSameValue(hashes); !ok {
 		return fmt.Errorf("inconsistent hashes [%v]", hashes)
 	}
 
-	plog.Printf("%s all members are consistent with storage hashes", hc.tt.logPrefix())
+	plog.Printf("all members are consistent with storage hashes")
 	return nil
 }
 

+ 12 - 10
tools/functional-tester/etcd-tester/cluster.go

@@ -41,19 +41,15 @@ type agentConfig struct {
 type cluster struct {
 	agents []agentConfig
 
-	v2Only bool // to be deprecated
+	v2Only           bool // to be deprecated
+	consistencyCheck bool
+	Size             int
 
-	stressQPS            int
-	stressKeyLargeSize   int
-	stressKeySize        int
-	stressKeySuffixRange int
-
-	Size      int
-	Stressers []Stresser
+	Stressers     []Stresser
+	stressBuilder stressBuilder
+	Checker       Checker
 
 	Members []*member
-
-	stressBuilder stressBuilder
 }
 
 type ClusterStatus struct {
@@ -109,6 +105,12 @@ func (c *cluster) bootstrap() error {
 		go c.Stressers[i].Stress()
 	}
 
+	if c.consistencyCheck && !c.v2Only {
+		c.Checker = newHashChecker(hashAndRevGetter(c))
+	} else {
+		c.Checker = newNoChecker()
+	}
+
 	c.Size = size
 	c.Members = members
 	return nil

+ 4 - 8
tools/functional-tester/etcd-tester/main.go

@@ -75,9 +75,10 @@ func main() {
 	}
 
 	c := &cluster{
-		agents:        agents,
-		v2Only:        *isV2Only,
-		stressBuilder: newStressBuilder(*stresserType, sConfig),
+		agents:           agents,
+		v2Only:           *isV2Only,
+		stressBuilder:    newStressBuilder(*stresserType, sConfig),
+		consistencyCheck: *consistencyCheck,
 	}
 
 	if err := c.bootstrap(); err != nil {
@@ -125,11 +126,6 @@ func main() {
 		failures: schedule,
 		cluster:  c,
 		limit:    *limit,
-		checker:  newNoChecker(),
-	}
-
-	if *consistencyCheck && !c.v2Only {
-		t.checker = newHashChecker(t)
 	}
 
 	sh := statusHandler{status: &t.status}

+ 4 - 6
tools/functional-tester/etcd-tester/tester.go

@@ -20,11 +20,9 @@ import (
 )
 
 type tester struct {
-	failures []failure
-	cluster  *cluster
-	limit    int
-	checker  Checker
-
+	failures        []failure
+	cluster         *cluster
+	limit           int
 	status          Status
 	currentRevision int64
 }
@@ -146,7 +144,7 @@ func (tt *tester) checkConsistency() (err error) {
 		}
 		err = tt.startStressers()
 	}()
-	if err = tt.checker.Check(); err != nil {
+	if err = tt.cluster.Checker.Check(); err != nil {
 		plog.Printf("%s %v", tt.logPrefix(), err)
 	}
 	return err