mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix: don't use yamux for in-memory provisioner{,d} streams (#5136)
This commit is contained in:
@@ -14,6 +14,7 @@ import (
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||
"github.com/spf13/afero"
|
||||
"github.com/valyala/fasthttp/fasthttputil"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
semconv "go.opentelemetry.io/otel/semconv/v1.11.0"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
@@ -344,7 +345,7 @@ func (p *Server) acquireJob(ctx context.Context) {
|
||||
}
|
||||
|
||||
func retryable(err error) bool {
|
||||
return xerrors.Is(err, yamux.ErrSessionShutdown) || xerrors.Is(err, io.EOF) ||
|
||||
return xerrors.Is(err, yamux.ErrSessionShutdown) || xerrors.Is(err, io.EOF) || xerrors.Is(err, fasthttputil.ErrInmemoryListenerClosed) ||
|
||||
// annoyingly, dRPC sometimes returns context.Canceled if the transport was closed, even if the context for
|
||||
// the RPC *is not canceled*. Retrying is fine if the RPC context is not canceled.
|
||||
xerrors.Is(err, context.Canceled)
|
||||
|
||||
@@ -843,6 +843,7 @@ func TestProvisionerd(t *testing.T) {
|
||||
<-failChan
|
||||
_ = client.DRPCConn().Close()
|
||||
second.Store(true)
|
||||
time.Sleep(50 * time.Millisecond)
|
||||
failedOnce.Do(func() { close(failedChan) })
|
||||
}()
|
||||
}
|
||||
@@ -1075,7 +1076,7 @@ func createProvisionerDaemonClient(t *testing.T, server provisionerDaemonTestSer
|
||||
return &proto.Empty{}, nil
|
||||
}
|
||||
}
|
||||
clientPipe, serverPipe := provisionersdk.TransportPipe()
|
||||
clientPipe, serverPipe := provisionersdk.MemTransportPipe()
|
||||
t.Cleanup(func() {
|
||||
_ = clientPipe.Close()
|
||||
_ = serverPipe.Close()
|
||||
@@ -1089,14 +1090,14 @@ func createProvisionerDaemonClient(t *testing.T, server provisionerDaemonTestSer
|
||||
go func() {
|
||||
_ = srv.Serve(ctx, serverPipe)
|
||||
}()
|
||||
return proto.NewDRPCProvisionerDaemonClient(provisionersdk.Conn(clientPipe))
|
||||
return proto.NewDRPCProvisionerDaemonClient(clientPipe)
|
||||
}
|
||||
|
||||
// Creates a provisioner protobuf client that's connected
|
||||
// to the server implementation provided.
|
||||
func createProvisionerClient(t *testing.T, server provisionerTestServer) sdkproto.DRPCProvisionerClient {
|
||||
t.Helper()
|
||||
clientPipe, serverPipe := provisionersdk.TransportPipe()
|
||||
clientPipe, serverPipe := provisionersdk.MemTransportPipe()
|
||||
t.Cleanup(func() {
|
||||
_ = clientPipe.Close()
|
||||
_ = serverPipe.Close()
|
||||
@@ -1110,7 +1111,7 @@ func createProvisionerClient(t *testing.T, server provisionerTestServer) sdkprot
|
||||
go func() {
|
||||
_ = srv.Serve(ctx, serverPipe)
|
||||
}()
|
||||
return sdkproto.NewDRPCProvisionerClient(provisionersdk.Conn(clientPipe))
|
||||
return sdkproto.NewDRPCProvisionerClient(clientPipe)
|
||||
}
|
||||
|
||||
type provisionerTestServer struct {
|
||||
|
||||
Reference in New Issue
Block a user