[lxc-devel] [lxd/master] client: Add Disconnect function
stgraber on Github
lxc-bot at linuxcontainers.org
Tue Nov 12 18:27:40 UTC 2019
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 354 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20191112/69948a9c/attachment.bin>
-------------- next part --------------
From b32ac8fbf31e4a976f24adc1c583d6469df6f879 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 12 Nov 2019 10:27:06 -0800
Subject: [PATCH] client: Add Disconnect function
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
client/connection.go | 7 ++++++-
client/interfaces.go | 1 +
client/lxd.go | 10 +++++++++-
client/lxd_events.go | 1 +
client/simplestreams.go | 5 +++++
5 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/client/connection.go b/client/connection.go
index dde3e327a1..86cdcbaafb 100644
--- a/client/connection.go
+++ b/client/connection.go
@@ -7,9 +7,10 @@ import (
"path/filepath"
"strings"
+ "gopkg.in/macaroon-bakery.v2/httpbakery"
+
"github.com/lxc/lxd/shared/logger"
"github.com/lxc/lxd/shared/simplestreams"
- "gopkg.in/macaroon-bakery.v2/httpbakery"
)
// ConnectionArgs represents a set of common connection properties
@@ -81,6 +82,7 @@ func ConnectLXDHTTP(args *ConnectionArgs, client *http.Client) (InstanceServer,
httpHost: "https://custom.socket",
httpProtocol: "custom",
httpUserAgent: args.UserAgent,
+ chConnected: make(chan struct{}, 1),
}
// Setup the HTTP client
@@ -119,6 +121,7 @@ func ConnectLXDUnix(path string, args *ConnectionArgs) (InstanceServer, error) {
httpUnixPath: path,
httpProtocol: "unix",
httpUserAgent: args.UserAgent,
+ chConnected: make(chan struct{}, 1),
}
// Determine the socket path
@@ -216,7 +219,9 @@ func httpsLXD(url string, args *ConnectionArgs) (InstanceServer, error) {
httpProtocol: "https",
httpUserAgent: args.UserAgent,
bakeryInteractor: args.AuthInteractor,
+ chConnected: make(chan struct{}, 1),
}
+
if args.AuthType == "candid" {
server.RequireAuthenticated(true)
}
diff --git a/client/interfaces.go b/client/interfaces.go
index 9dd9b7f5cf..fb954734f9 100644
--- a/client/interfaces.go
+++ b/client/interfaces.go
@@ -34,6 +34,7 @@ type RemoteOperation interface {
type Server interface {
GetConnectionInfo() (info *ConnectionInfo, err error)
GetHTTPClient() (client *http.Client, err error)
+ Disconnect()
}
// The ImageServer type represents a read-only image server.
diff --git a/client/lxd.go b/client/lxd.go
index 02cf92b3fb..a99ca34cb5 100644
--- a/client/lxd.go
+++ b/client/lxd.go
@@ -22,7 +22,8 @@ import (
// ProtocolLXD represents a LXD API server
type ProtocolLXD struct {
- server *api.Server
+ server *api.Server
+ chConnected chan struct{}
eventListeners []*EventListener
eventListenersLock sync.Mutex
@@ -42,6 +43,13 @@ type ProtocolLXD struct {
project string
}
+// Disconnect gets rid of any background goroutines
+func (r *ProtocolLXD) Disconnect() {
+ if r.chConnected != nil {
+ close(r.chConnected)
+ }
+}
+
// GetConnectionInfo returns the basic connection information used to interact with the server
func (r *ProtocolLXD) GetConnectionInfo() (*ConnectionInfo, error) {
info := ConnectionInfo{}
diff --git a/client/lxd_events.go b/client/lxd_events.go
index 3c83132053..67ff94a436 100644
--- a/client/lxd_events.go
+++ b/client/lxd_events.go
@@ -52,6 +52,7 @@ func (r *ProtocolLXD) GetEvents() (*EventListener, error) {
for {
select {
case <-time.After(time.Minute):
+ case <-r.chConnected:
case <-stopCh:
break
}
diff --git a/client/simplestreams.go b/client/simplestreams.go
index 471cf54b4e..205661d6e1 100644
--- a/client/simplestreams.go
+++ b/client/simplestreams.go
@@ -17,6 +17,11 @@ type ProtocolSimpleStreams struct {
httpCertificate string
}
+// Disconnect is a no-op for simplestreams
+func (r *ProtocolSimpleStreams) Disconnect() {
+ return
+}
+
// GetConnectionInfo returns the basic connection information used to interact with the server
func (r *ProtocolSimpleStreams) GetConnectionInfo() (*ConnectionInfo, error) {
info := ConnectionInfo{}
More information about the lxc-devel
mailing list