This is an automated email from the ASF dual-hosted git repository.

klesh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new f5e9b37f fix: add release to apiclient (#2444)
f5e9b37f is described below

commit f5e9b37f7d1c352e54bdeb345ef9a70c55866f66
Author: mappjzc <[email protected]>
AuthorDate: Fri Jul 8 15:39:45 2022 +0800

    fix: add release to apiclient (#2444)
    
    Add Release() for RateLimitedApiClient and ApiAsyncClient.
    Add defer Release() call at Execute of api_collector.
    
    Nddtfjiang <[email protected]>
---
 plugins/helper/api_async_client.go   | 9 +++++++++
 plugins/helper/api_collector.go      | 6 +++++-
 plugins/helper/api_collector_test.go | 1 +
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/plugins/helper/api_async_client.go 
b/plugins/helper/api_async_client.go
index 4cf5b88e..2d55ce2d 100644
--- a/plugins/helper/api_async_client.go
+++ b/plugins/helper/api_async_client.go
@@ -207,18 +207,26 @@ func (apiClient *ApiAsyncClient) WaitAsync() error {
        return apiClient.scheduler.Wait()
 }
 
+// HasError to return if the scheduler has Error
 func (apiClient *ApiAsyncClient) HasError() bool {
        return apiClient.scheduler.HasError()
 }
 
+// NextTick to return the NextTick of scheduler
 func (apiClient *ApiAsyncClient) NextTick(task func() error) {
        apiClient.scheduler.NextTick(task)
 }
 
+// GetNumOfWorkers to return the Workers count if scheduler.
 func (apiClient *ApiAsyncClient) GetNumOfWorkers() int {
        return apiClient.numOfWorkers
 }
 
+// Release will release the ApiAsyncClient with scheduler
+func (apiClient *ApiAsyncClient) Release() {
+       apiClient.scheduler.Release()
+}
+
 type RateLimitedApiClient interface {
        GetAsync(path string, query url.Values, header http.Header, handler 
common.ApiAsyncCallback)
        WaitAsync() error
@@ -226,6 +234,7 @@ type RateLimitedApiClient interface {
        NextTick(task func() error)
        GetNumOfWorkers() int
        SetAfterFunction(callback common.ApiClientAfterResponse)
+       Release()
 }
 
 var _ RateLimitedApiClient = (*ApiAsyncClient)(nil)
diff --git a/plugins/helper/api_collector.go b/plugins/helper/api_collector.go
index ec2dd522..500b42ab 100644
--- a/plugins/helper/api_collector.go
+++ b/plugins/helper/api_collector.go
@@ -147,8 +147,12 @@ func (collector *ApiCollector) Execute() error {
        collector.args.Ctx.SetProgress(0, -1)
        if collector.args.Input != nil {
                iterator := collector.args.Input
-               apiClient := collector.args.ApiClient
                defer iterator.Close()
+               apiClient := collector.args.ApiClient
+               if apiClient == nil {
+                       return fmt.Errorf("api_collector can not Execute with 
nil apiClient")
+               }
+               defer apiClient.Release()
                for iterator.HasNext() && !apiClient.HasError() {
                        input, err := iterator.Fetch()
                        if err != nil {
diff --git a/plugins/helper/api_collector_test.go 
b/plugins/helper/api_collector_test.go
index 400d85f1..3a7bdd0a 100644
--- a/plugins/helper/api_collector_test.go
+++ b/plugins/helper/api_collector_test.go
@@ -76,6 +76,7 @@ func TestFetchPageUndetermined(t *testing.T) {
        params := struct {
                Name string
        }{Name: "testparams"}
+       mockApi.On("Release").Return()
 
        collector, err := NewApiCollector(ApiCollectorArgs{
                RawDataSubTaskArgs: RawDataSubTaskArgs{

Reply via email to