fix: memory leak due to the gRPC connect keep (#313)
Co-authored-by: rick <LinuxSuRen@users.noreply.github.com>
This commit is contained in:
parent
be3976d91d
commit
a324fb1bbe
|
@ -278,6 +278,7 @@ func (s *server) GetVersion(ctx context.Context, in *Empty) (reply *HelloReply,
|
|||
|
||||
func (s *server) GetSuites(ctx context.Context, in *Empty) (reply *Suites, err error) {
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
reply = &Suites{
|
||||
Data: make(map[string]*Items),
|
||||
}
|
||||
|
@ -300,6 +301,7 @@ func (s *server) GetSuites(ctx context.Context, in *Empty) (reply *Suites, err e
|
|||
func (s *server) CreateTestSuite(ctx context.Context, in *TestSuiteIdentity) (reply *HelloReply, err error) {
|
||||
reply = &HelloReply{}
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
if loader == nil {
|
||||
reply.Error = "no loader found"
|
||||
} else {
|
||||
|
@ -348,6 +350,7 @@ func (s *server) ImportTestSuite(ctx context.Context, in *TestSuiteSource) (resu
|
|||
}
|
||||
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
|
||||
if err = loader.CreateSuite(suite.Name, suite.API); err != nil {
|
||||
return
|
||||
|
@ -364,6 +367,7 @@ func (s *server) ImportTestSuite(ctx context.Context, in *TestSuiteSource) (resu
|
|||
|
||||
func (s *server) GetTestSuite(ctx context.Context, in *TestSuiteIdentity) (result *TestSuite, err error) {
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
var suite *testing.TestSuite
|
||||
if suite, _, err = loader.GetSuite(in.Name); err == nil && suite != nil {
|
||||
result = ToGRPCSuite(suite)
|
||||
|
@ -374,6 +378,7 @@ func (s *server) GetTestSuite(ctx context.Context, in *TestSuiteIdentity) (resul
|
|||
func (s *server) UpdateTestSuite(ctx context.Context, in *TestSuite) (reply *HelloReply, err error) {
|
||||
reply = &HelloReply{}
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
err = loader.UpdateSuite(*ToNormalSuite(in))
|
||||
return
|
||||
}
|
||||
|
@ -381,6 +386,7 @@ func (s *server) UpdateTestSuite(ctx context.Context, in *TestSuite) (reply *Hel
|
|||
func (s *server) DeleteTestSuite(ctx context.Context, in *TestSuiteIdentity) (reply *HelloReply, err error) {
|
||||
reply = &HelloReply{}
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
err = loader.DeleteSuite(in.Name)
|
||||
return
|
||||
}
|
||||
|
@ -388,6 +394,7 @@ func (s *server) DeleteTestSuite(ctx context.Context, in *TestSuiteIdentity) (re
|
|||
func (s *server) ListTestCase(ctx context.Context, in *TestSuiteIdentity) (result *Suite, err error) {
|
||||
var items []testing.TestCase
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
if items, err = loader.ListTestCase(in.Name); err == nil {
|
||||
result = &Suite{}
|
||||
for _, item := range items {
|
||||
|
@ -400,6 +407,7 @@ func (s *server) ListTestCase(ctx context.Context, in *TestSuiteIdentity) (resul
|
|||
func (s *server) GetTestCase(ctx context.Context, in *TestCaseIdentity) (reply *TestCase, err error) {
|
||||
var result testing.TestCase
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
if result, err = loader.GetTestCase(in.Suite, in.Testcase); err == nil {
|
||||
reply = ToGRPCTestCase(result)
|
||||
}
|
||||
|
@ -410,6 +418,7 @@ func (s *server) RunTestCase(ctx context.Context, in *TestCaseIdentity) (result
|
|||
var targetTestSuite testing.TestSuite
|
||||
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
targetTestSuite, err = loader.GetTestSuite(in.Suite, true)
|
||||
if err != nil {
|
||||
err = nil
|
||||
|
@ -519,6 +528,7 @@ func (s *server) CreateTestCase(ctx context.Context, in *TestCaseWithSuite) (rep
|
|||
err = errors.New("data is required")
|
||||
} else {
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
err = loader.CreateTestCase(in.SuiteName, ToNormalTestCase(in.Data))
|
||||
}
|
||||
return
|
||||
|
@ -531,12 +541,14 @@ func (s *server) UpdateTestCase(ctx context.Context, in *TestCaseWithSuite) (rep
|
|||
return
|
||||
}
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
err = loader.UpdateTestCase(in.SuiteName, ToNormalTestCase(in.Data))
|
||||
return
|
||||
}
|
||||
|
||||
func (s *server) DeleteTestCase(ctx context.Context, in *TestCaseIdentity) (reply *HelloReply, err error) {
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
reply = &HelloReply{}
|
||||
err = loader.DeleteTestCase(in.Suite, in.Testcase)
|
||||
return
|
||||
|
@ -609,6 +621,7 @@ func (s *server) ConvertTestSuite(ctx context.Context, in *CodeGenerateRequest)
|
|||
} else {
|
||||
var result testing.TestSuite
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
if result, err = loader.GetTestSuite(in.TestSuite, true); err == nil {
|
||||
output, genErr := instance.Convert(&result)
|
||||
reply.Success = genErr == nil
|
||||
|
@ -640,6 +653,7 @@ func (s *server) GetSuggestedAPIs(ctx context.Context, in *TestSuiteIdentity) (r
|
|||
|
||||
var suite *testing.TestSuite
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
if suite, _, err = loader.GetSuite(in.Name); err != nil || suite == nil {
|
||||
return
|
||||
}
|
||||
|
@ -815,6 +829,7 @@ func (s *server) UpdateSecret(ctx context.Context, in *Secret) (reply *CommonRes
|
|||
}
|
||||
func (s *server) PProf(ctx context.Context, in *PProfRequest) (reply *PProfData, err error) {
|
||||
loader := s.getLoader(ctx)
|
||||
defer loader.Close()
|
||||
reply = &PProfData{
|
||||
Data: loader.PProf(in.Name),
|
||||
}
|
||||
|
|
|
@ -52,4 +52,5 @@ type Writer interface {
|
|||
GetSuite(name string) (*TestSuite, string, error)
|
||||
UpdateSuite(TestSuite) (err error)
|
||||
DeleteSuite(name string) (err error)
|
||||
Close()
|
||||
}
|
||||
|
|
|
@ -425,3 +425,7 @@ func (l *fileLoader) PProf(string) []byte {
|
|||
// not support
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l *fileLoader) Close() {
|
||||
// not support
|
||||
}
|
||||
|
|
|
@ -114,3 +114,7 @@ func (l *nonLoader) PProf(string) []byte {
|
|||
// not support
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l *nonLoader) Close() {
|
||||
// not support
|
||||
}
|
||||
|
|
|
@ -39,6 +39,7 @@ type gRPCLoader struct {
|
|||
store *testing.Store
|
||||
client LoaderClient
|
||||
ctx context.Context
|
||||
conn *grpc.ClientConn
|
||||
}
|
||||
|
||||
func NewGRPCloaderFromStore() testing.StoreWriterFactory {
|
||||
|
@ -54,6 +55,7 @@ func (g *gRPCLoader) NewInstance(store testing.Store) (writer testing.Writer, er
|
|||
store: &store,
|
||||
ctx: WithStoreContext(context.Background(), &store),
|
||||
client: NewLoaderClient(conn),
|
||||
conn: conn,
|
||||
}
|
||||
}
|
||||
return
|
||||
|
@ -213,3 +215,9 @@ func (g *gRPCLoader) PProf(name string) []byte {
|
|||
}
|
||||
return data.Data
|
||||
}
|
||||
|
||||
func (g *gRPCLoader) Close() {
|
||||
if g.conn != nil {
|
||||
g.conn.Close()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue