Browse Source

Merge pull request #5827 from vieux/fix_multiple_events_on_same_computer

allow 2 docker events to be opened on the same computer over unix socket
Victor Vieux 11 năm trước cách đây
mục cha
commit
9e7757a3d2

+ 1 - 1
api/server/server.go

@@ -244,7 +244,7 @@ func getEvents(eng *engine.Engine, version version.Version, w http.ResponseWrite
 		return err
 		return err
 	}
 	}
 
 
-	var job = eng.Job("events", r.RemoteAddr)
+	var job = eng.Job("events")
 	streamJSON(job, w, true)
 	streamJSON(job, w, true)
 	job.Setenv("since", r.Form.Get("since"))
 	job.Setenv("since", r.Form.Get("since"))
 	job.Setenv("until", r.Form.Get("until"))
 	job.Setenv("until", r.Form.Get("until"))

+ 6 - 6
server/server.go

@@ -198,7 +198,7 @@ func (srv *Server) ContainerKill(job *engine.Job) engine.Status {
 	return engine.StatusOK
 	return engine.StatusOK
 }
 }
 
 
-func (srv *Server) EvictListener(from string) {
+func (srv *Server) EvictListener(from int64) {
 	srv.Lock()
 	srv.Lock()
 	if old, ok := srv.listeners[from]; ok {
 	if old, ok := srv.listeners[from]; ok {
 		delete(srv.listeners, from)
 		delete(srv.listeners, from)
@@ -208,12 +208,12 @@ func (srv *Server) EvictListener(from string) {
 }
 }
 
 
 func (srv *Server) Events(job *engine.Job) engine.Status {
 func (srv *Server) Events(job *engine.Job) engine.Status {
-	if len(job.Args) != 1 {
-		return job.Errorf("Usage: %s FROM", job.Name)
+	if len(job.Args) != 0 {
+		return job.Errorf("Usage: %s", job.Name)
 	}
 	}
 
 
 	var (
 	var (
-		from    = job.Args[0]
+		from    = time.Now().UTC().UnixNano()
 		since   = job.GetenvInt64("since")
 		since   = job.GetenvInt64("since")
 		until   = job.GetenvInt64("until")
 		until   = job.GetenvInt64("until")
 		timeout = time.NewTimer(time.Unix(until, 0).Sub(time.Now()))
 		timeout = time.NewTimer(time.Unix(until, 0).Sub(time.Now()))
@@ -2432,7 +2432,7 @@ func NewServer(eng *engine.Engine, config *daemonconfig.Config) (*Server, error)
 		pullingPool: make(map[string]chan struct{}),
 		pullingPool: make(map[string]chan struct{}),
 		pushingPool: make(map[string]chan struct{}),
 		pushingPool: make(map[string]chan struct{}),
 		events:      make([]utils.JSONMessage, 0, 64), //only keeps the 64 last events
 		events:      make([]utils.JSONMessage, 0, 64), //only keeps the 64 last events
-		listeners:   make(map[string]chan utils.JSONMessage),
+		listeners:   make(map[int64]chan utils.JSONMessage),
 		running:     true,
 		running:     true,
 	}
 	}
 	daemon.SetServer(srv)
 	daemon.SetServer(srv)
@@ -2494,7 +2494,7 @@ type Server struct {
 	pullingPool map[string]chan struct{}
 	pullingPool map[string]chan struct{}
 	pushingPool map[string]chan struct{}
 	pushingPool map[string]chan struct{}
 	events      []utils.JSONMessage
 	events      []utils.JSONMessage
-	listeners   map[string]chan utils.JSONMessage
+	listeners   map[int64]chan utils.JSONMessage
 	Eng         *engine.Engine
 	Eng         *engine.Engine
 	running     bool
 	running     bool
 }
 }

+ 4 - 3
server/server_unit_test.go

@@ -1,9 +1,10 @@
 package server
 package server
 
 
 import (
 import (
-	"github.com/dotcloud/docker/utils"
 	"testing"
 	"testing"
 	"time"
 	"time"
+
+	"github.com/dotcloud/docker/utils"
 )
 )
 
 
 func TestPools(t *testing.T) {
 func TestPools(t *testing.T) {
@@ -47,14 +48,14 @@ func TestPools(t *testing.T) {
 func TestLogEvent(t *testing.T) {
 func TestLogEvent(t *testing.T) {
 	srv := &Server{
 	srv := &Server{
 		events:    make([]utils.JSONMessage, 0, 64),
 		events:    make([]utils.JSONMessage, 0, 64),
-		listeners: make(map[string]chan utils.JSONMessage),
+		listeners: make(map[int64]chan utils.JSONMessage),
 	}
 	}
 
 
 	srv.LogEvent("fakeaction", "fakeid", "fakeimage")
 	srv.LogEvent("fakeaction", "fakeid", "fakeimage")
 
 
 	listener := make(chan utils.JSONMessage)
 	listener := make(chan utils.JSONMessage)
 	srv.Lock()
 	srv.Lock()
-	srv.listeners["test"] = listener
+	srv.listeners[1337] = listener
 	srv.Unlock()
 	srv.Unlock()
 
 
 	srv.LogEvent("fakeaction2", "fakeid", "fakeimage")
 	srv.LogEvent("fakeaction2", "fakeid", "fakeimage")