From b4f4528ef46bbf6dd291697375953b5fb9c3945c Mon Sep 17 00:00:00 2001
From: Xiang Li <xiang.li@coreos.com>
Date: Thu, 7 Nov 2013 22:29:15 -0800
Subject: [PATCH] feat upgrade get_handler

---
 server/v2/get_handler.go | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/server/v2/get_handler.go b/server/v2/get_handler.go
index 39e932fe0..afa44c9b8 100644
--- a/server/v2/get_handler.go
+++ b/server/v2/get_handler.go
@@ -16,6 +16,7 @@ import (
 func GetHandler(w http.ResponseWriter, req *http.Request, s Server) error {
 	var err error
 	var event *store.Event
+	events := make([]*store.Event, 0)
 
 	vars := mux.Vars(req)
 	key := "/" + vars["key"]
@@ -54,10 +55,17 @@ func GetHandler(w http.ResponseWriter, req *http.Request, s Server) error {
 		cn, _ := w.(http.CloseNotifier)
 		closeChan := cn.CloseNotify()
 
-		select {
-		case <-closeChan:
-			return nil
-		case event = <-eventChan:
+		for {
+			select {
+			case <-closeChan:
+				return nil
+			case event = <-eventChan:
+				if event != nil && event.Action == store.Expire {
+					events = append(events, event)
+				} else {
+					goto finish
+				}
+			}
 		}
 
 	} else { //get
@@ -68,11 +76,19 @@ func GetHandler(w http.ResponseWriter, req *http.Request, s Server) error {
 		}
 	}
 
+finish:
+
 	w.Header().Add("X-Etcd-Index", fmt.Sprint(event.Index))
 	w.Header().Add("X-Etcd-Term", fmt.Sprint(event.Term))
 	w.WriteHeader(http.StatusOK)
 
-	b, _ := json.Marshal(event)
+	var b []byte
+
+	if len(events) == 0 {
+		b, _ = json.Marshal(event)
+	} else {
+		b, _ = json.Marshal(events)
+	}
 	w.Write(b)
 
 	return nil