fix dial error when clean up a dead shim
Signed-off-by: lifubang <lifubang@acmcoder.com>
This commit is contained in:
parent
c6851ace61
commit
488d6194f2
@ -44,8 +44,11 @@ func TestClientTTRPC_Reconnect(t *testing.T) {
|
|||||||
err = client.Reconnect()
|
err = client.Reconnect()
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
||||||
|
service, err := client.EventsService()
|
||||||
|
assert.NilError(t, err)
|
||||||
|
|
||||||
// Send test request to make sure its alive after reconnect
|
// Send test request to make sure its alive after reconnect
|
||||||
_, err = client.EventsService().Forward(context.Background(), &v1.ForwardRequest{
|
_, err = service.Forward(context.Background(), &v1.ForwardRequest{
|
||||||
Envelope: &v1.Envelope{
|
Envelope: &v1.Envelope{
|
||||||
Timestamp: time.Now(),
|
Timestamp: time.Now(),
|
||||||
Namespace: namespaces.Default,
|
Namespace: namespaces.Default,
|
||||||
@ -63,10 +66,13 @@ func TestClientTTRPC_Close(t *testing.T) {
|
|||||||
client, err := ttrpcutil.NewClient(address + ".ttrpc")
|
client, err := ttrpcutil.NewClient(address + ".ttrpc")
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
||||||
|
service, err := client.EventsService()
|
||||||
|
assert.NilError(t, err)
|
||||||
|
|
||||||
err = client.Close()
|
err = client.Close()
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
||||||
_, err = client.EventsService().Forward(context.Background(), &v1.ForwardRequest{Envelope: &v1.Envelope{}})
|
_, err = service.Forward(context.Background(), &v1.ForwardRequest{Envelope: &v1.Envelope{}})
|
||||||
assert.Equal(t, err, ttrpc.ErrClosed)
|
assert.Equal(t, err, ttrpc.ErrClosed)
|
||||||
|
|
||||||
err = client.Close()
|
err = client.Close()
|
||||||
|
@ -50,14 +50,8 @@ func NewClient(address string, opts ...ttrpc.ClientOpts) (*Client, error) {
|
|||||||
return client, nil
|
return client, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
client, err := connector()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &Client{
|
return &Client{
|
||||||
connector: connector,
|
connector: connector,
|
||||||
client: client,
|
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,6 +68,12 @@ func (c *Client) Reconnect() error {
|
|||||||
return errors.New("client is closed")
|
return errors.New("client is closed")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if c.client != nil {
|
||||||
|
if err := c.client.Close(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
client, err := c.connector()
|
client, err := c.connector()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -84,16 +84,26 @@ func (c *Client) Reconnect() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// EventsService creates an EventsService client
|
// EventsService creates an EventsService client
|
||||||
func (c *Client) EventsService() v1.EventsService {
|
func (c *Client) EventsService() (v1.EventsService, error) {
|
||||||
return v1.NewEventsClient(c.Client())
|
client, err := c.Client()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return v1.NewEventsClient(client), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Client returns the underlying TTRPC client object
|
// Client returns the underlying TTRPC client object
|
||||||
func (c *Client) Client() *ttrpc.Client {
|
func (c *Client) Client() (*ttrpc.Client, error) {
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
defer c.mu.Unlock()
|
defer c.mu.Unlock()
|
||||||
|
if c.client == nil {
|
||||||
return c.client
|
client, err := c.connector()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
c.client = client
|
||||||
|
}
|
||||||
|
return c.client, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close closes the clients TTRPC connection to containerd
|
// Close closes the clients TTRPC connection to containerd
|
||||||
@ -102,5 +112,8 @@ func (c *Client) Close() error {
|
|||||||
defer c.mu.Unlock()
|
defer c.mu.Unlock()
|
||||||
|
|
||||||
c.closed = true
|
c.closed = true
|
||||||
return c.client.Close()
|
if c.client != nil {
|
||||||
|
return c.client.Close()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -128,9 +128,12 @@ func (l *RemoteEventsPublisher) Publish(ctx context.Context, topic string, event
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (l *RemoteEventsPublisher) forwardRequest(ctx context.Context, req *v1.ForwardRequest) error {
|
func (l *RemoteEventsPublisher) forwardRequest(ctx context.Context, req *v1.ForwardRequest) error {
|
||||||
_, err := l.client.EventsService().Forward(ctx, req)
|
service, err := l.client.EventsService()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return nil
|
_, err = service.Forward(ctx, req)
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != ttrpc.ErrClosed {
|
if err != ttrpc.ErrClosed {
|
||||||
@ -138,11 +141,15 @@ func (l *RemoteEventsPublisher) forwardRequest(ctx context.Context, req *v1.Forw
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Reconnect and retry request
|
// Reconnect and retry request
|
||||||
if err := l.client.Reconnect(); err != nil {
|
if err = l.client.Reconnect(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := l.client.EventsService().Forward(ctx, req); err != nil {
|
service, err = l.client.EventsService()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if _, err = service.Forward(ctx, req); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user