瀏覽代碼

feat upgrade get_handler

Xiang Li 12 年之前
父節點
當前提交
b4f4528ef4
共有 1 個文件被更改,包括 21 次插入5 次删除
  1. 21 5
      server/v2/get_handler.go

+ 21 - 5
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