Browse Source

etcdhttp: never return 0 from genId

Blake Mizerany 11 years ago
parent
commit
6d7acc6b1e
1 changed files with 10 additions and 4 deletions
  1. 10 4
      etcdserver2/etcdhttp/http.go

+ 10 - 4
etcdserver2/etcdhttp/http.go

@@ -86,12 +86,18 @@ func (h Handler) serveRaft(ctx context.Context, w http.ResponseWriter, r *http.R
 	}
 }
 
+// genId generates an random id that is: n < 0 < n.
 func genId() int64 {
-	b := make([]byte, 8)
-	if _, err := io.ReadFull(rand.Reader, b); err != nil {
-		panic(err) // really bad stuff happened
+	for {
+		b := make([]byte, 8)
+		if _, err := io.ReadFull(rand.Reader, b); err != nil {
+			panic(err) // really bad stuff happened
+		}
+		n := int64(binary.BigEndian.Uint64(b))
+		if n != 0 {
+			return n
+		}
 	}
-	return int64(binary.BigEndian.Uint64(b))
 }
 
 func parseRequest(r *http.Request) (etcdserverpb.Request, error) {