You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by kl...@apache.org on 2022/06/20 09:50:27 UTC

[incubator-devlake] branch main updated: github sundry task refactor (#2211)

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 457a5484 github sundry task refactor (#2211)
457a5484 is described below

commit 457a54841fc8090e887f60c9441edef3a1056193
Author: likyh <l...@likyh.com>
AuthorDate: Mon Jun 20 17:50:23 2022 +0800

    github sundry task refactor (#2211)
    
    * add commit test
    
    * add some connectionId for sundry in github
    
    * add connection_id for github user
    
    * add a case for other connectionId existing
    
    * save after encode check
    
    * move config to transformationRules
    
    * delete sprintf in e2e filename
    
    * change name from review to reviewer
    
    Co-authored-by: linyh <ya...@meri.co>
---
 plugins/github/e2e/comment_test.go                 |  2 +-
 .../github/{models/user.go => e2e/commit_test.go}  | 26 +++---
 plugins/github/e2e/event_test.go                   |  3 +-
 plugins/github/e2e/issue_test.go                   | 13 ++-
 plugins/github/e2e/pr_commit_test.go               |  9 +-
 plugins/github/e2e/pr_enrich_issue_test.go         | 11 ++-
 .../e2e/{pr_review_test.go => pr_reviewer_test.go} |  7 +-
 plugins/github/e2e/pr_test.go                      | 11 ++-
 .../e2e/raw_tables/_raw_github_api_comments.csv    |  1 +
 .../e2e/raw_tables/_raw_github_api_events.csv      |  1 +
 .../e2e/raw_tables/_raw_github_api_issues.csv      |  1 +
 .../_raw_github_api_pull_request_commits.csv       |  1 +
 .../_raw_github_api_pull_request_reviews.csv       |  1 +
 .../raw_tables/_raw_github_api_pull_requests.csv   |  1 +
 .../raw_tables/_raw_github_api_repositories.csv    |  1 +
 plugins/github/e2e/repo_test.go                    |  9 +-
 .../e2e/snapshot_tables/_tool_github_reviewers.csv | 14 ++--
 .../github/e2e/snapshot_tables/issue_comments.csv  | 96 ++++++++++-----------
 plugins/github/e2e/snapshot_tables/issues.csv      | 52 ++++++------
 .../e2e/snapshot_tables/pull_request_comments.csv  | 92 ++++++++++----------
 .../github/e2e/snapshot_tables/pull_requests.csv   | 98 +++++++++++-----------
 plugins/github/models/commit.go                    |  1 -
 plugins/github/models/commit_stats.go              |  7 +-
 plugins/github/models/connection.go                |  2 +-
 .../models/migrationscripts/archived/commit.go     |  1 -
 .../migrationscripts/archived/commit_stat.go       |  7 +-
 .../migrationscripts/archived/repo_commit.go       |  5 +-
 .../models/migrationscripts/archived/user.go       | 13 +--
 ..._schema_20220611.go => init_schema_20220615.go} | 34 ++++----
 plugins/github/models/repo_commit.go               |  5 +-
 plugins/github/models/user.go                      | 13 +--
 plugins/github/tasks/commit_collector.go           |  7 +-
 plugins/github/tasks/commit_convertor.go           |  7 +-
 plugins/github/tasks/commit_extractor.go           | 10 ++-
 plugins/github/tasks/commit_stats_collector.go     | 11 +--
 plugins/github/tasks/commit_stats_extractor.go     |  6 +-
 plugins/github/tasks/issue_comment_convertor.go    |  2 +-
 plugins/github/tasks/issue_convertor.go            |  4 +-
 plugins/github/tasks/issue_extractor.go            |  2 +-
 plugins/github/tasks/pr_comment_convertor.go       |  2 +-
 plugins/github/tasks/pr_commit_extractor.go        |  1 -
 plugins/github/tasks/pr_convertor.go               |  2 +-
 plugins/github/tasks/pr_extractor.go               |  2 +-
 plugins/github/tasks/task_data.go                  | 12 +--
 plugins/github/tasks/user_convertor.go             |  7 +-
 45 files changed, 310 insertions(+), 303 deletions(-)

diff --git a/plugins/github/e2e/comment_test.go b/plugins/github/e2e/comment_test.go
index 8f87b833..8b27a9fa 100644
--- a/plugins/github/e2e/comment_test.go
+++ b/plugins/github/e2e/comment_test.go
@@ -41,7 +41,7 @@ func TestCommentDataFlow(t *testing.T) {
 			ConnectionId: 1,
 			Owner:        "panjf2000",
 			Repo:         "ants",
-			Config: models.Config{
+			TransformationRules: models.TransformationRules{
 				PrType:               "type/(.*)$",
 				PrComponent:          "component/(.*)$",
 				PrBodyClosePattern:   "(?mi)(fix|close|resolve|fixes|closes|resolves|fixed|closed|resolved)[\\s]*.*(((and )?(#|https:\\/\\/github.com\\/%s\\/%s\\/issues\\/)\\d+[ ]*)+)",
diff --git a/plugins/github/models/user.go b/plugins/github/e2e/commit_test.go
similarity index 59%
copy from plugins/github/models/user.go
copy to plugins/github/e2e/commit_test.go
index 56d00180..be5a7b33 100644
--- a/plugins/github/models/user.go
+++ b/plugins/github/e2e/commit_test.go
@@ -15,22 +15,20 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package models
+package e2e
 
 import (
-	"github.com/apache/incubator-devlake/models/common"
-)
+	"github.com/stretchr/testify/assert"
+	"testing"
 
-type GithubUser struct {
-	Id        int    `json:"id" gorm:"primaryKey"`
-	Login     string `json:"login" gorm:"type:varchar(255)"`
-	AvatarUrl string `json:"avatar_url" gorm:"type:varchar(255)"`
-	Url       string `json:"url" gorm:"type:varchar(255)"`
-	HtmlUrl   string `json:"html_url" gorm:"type:varchar(255)"`
-	Type      string `json:"type" gorm:"type:varchar(255)"`
-	common.NoPKModel
-}
+	"github.com/apache/incubator-devlake/plugins/github/tasks"
+)
 
-func (GithubUser) TableName() string {
-	return "_tool_github_users"
+func TestCommitDataFlow(t *testing.T) {
+	assert.False(t, tasks.CollectApiCommitsMeta.EnabledByDefault)
+	assert.False(t, tasks.ExtractApiCommitsMeta.EnabledByDefault)
+	assert.False(t, tasks.CollectApiCommitStatsMeta.EnabledByDefault)
+	assert.False(t, tasks.ExtractApiCommitStatsMeta.EnabledByDefault)
+	assert.False(t, tasks.ConvertCommitsMeta.EnabledByDefault)
+	assert.False(t, tasks.ConvertUsersMeta.EnabledByDefault)
 }
diff --git a/plugins/github/e2e/event_test.go b/plugins/github/e2e/event_test.go
index 6b8b11b6..69b5ad9f 100644
--- a/plugins/github/e2e/event_test.go
+++ b/plugins/github/e2e/event_test.go
@@ -18,7 +18,6 @@ limitations under the License.
 package e2e
 
 import (
-	"fmt"
 	"github.com/apache/incubator-devlake/plugins/github/models"
 	"testing"
 
@@ -51,7 +50,7 @@ func TestEventDataFlow(t *testing.T) {
 	dataflowTester.Subtask(tasks.ExtractApiEventsMeta, taskData)
 	dataflowTester.VerifyTable(
 		models.GithubIssueEvent{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubIssueEvent{}.TableName()),
+		"./snapshot_tables/_tool_github_issue_events.csv",
 		[]string{"connection_id", "github_id"},
 		[]string{
 			"issue_id",
diff --git a/plugins/github/e2e/issue_test.go b/plugins/github/e2e/issue_test.go
index 8e307533..b045ea55 100644
--- a/plugins/github/e2e/issue_test.go
+++ b/plugins/github/e2e/issue_test.go
@@ -18,7 +18,6 @@ limitations under the License.
 package e2e
 
 import (
-	"fmt"
 	"github.com/apache/incubator-devlake/models/domainlayer/ticket"
 	"github.com/apache/incubator-devlake/plugins/github/models"
 	"testing"
@@ -40,7 +39,7 @@ func TestIssueDataFlow(t *testing.T) {
 			ConnectionId: 1,
 			Owner:        "panjf2000",
 			Repo:         "ants",
-			Config: models.Config{
+			TransformationRules: models.TransformationRules{
 				PrType:               "type/(.*)$",
 				PrComponent:          "component/(.*)$",
 				PrBodyClosePattern:   "(?mi)(fix|close|resolve|fixes|closes|resolves|fixed|closed|resolved)[\\s]*.*(((and )?(#|https:\\/\\/github.com\\/%s\\/%s\\/issues\\/)\\d+[ ]*)+)",
@@ -64,7 +63,7 @@ func TestIssueDataFlow(t *testing.T) {
 	dataflowTester.Subtask(tasks.ExtractApiIssuesMeta, taskData)
 	dataflowTester.VerifyTable(
 		models.GithubIssue{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubIssue{}.TableName()),
+		"./snapshot_tables/_tool_github_issues.csv",
 		[]string{"connection_id", "github_id", "repo_id"},
 		[]string{
 			"number",
@@ -93,7 +92,7 @@ func TestIssueDataFlow(t *testing.T) {
 	)
 	dataflowTester.VerifyTable(
 		models.GithubIssueLabel{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubIssueLabel{}.TableName()),
+		"./snapshot_tables/_tool_github_issue_labels.csv",
 		[]string{"connection_id", "issue_id", "label_name"},
 		[]string{
 			"_raw_data_params",
@@ -109,7 +108,7 @@ func TestIssueDataFlow(t *testing.T) {
 	dataflowTester.Subtask(tasks.ConvertIssuesMeta, taskData)
 	dataflowTester.VerifyTable(
 		ticket.Issue{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", ticket.Issue{}.TableName()),
+		"./snapshot_tables/issues.csv",
 		[]string{"id"},
 		[]string{
 			"url",
@@ -141,7 +140,7 @@ func TestIssueDataFlow(t *testing.T) {
 	)
 	dataflowTester.VerifyTable(
 		ticket.BoardIssue{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", ticket.BoardIssue{}.TableName()),
+		"./snapshot_tables/board_issues.csv",
 		[]string{"board_id", "issue_id"},
 		[]string{},
 	)
@@ -151,7 +150,7 @@ func TestIssueDataFlow(t *testing.T) {
 	dataflowTester.Subtask(tasks.ConvertIssueLabelsMeta, taskData)
 	dataflowTester.VerifyTable(
 		ticket.IssueLabel{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", ticket.IssueLabel{}.TableName()),
+		"./snapshot_tables/issue_labels.csv",
 		[]string{"issue_id", "label_name"},
 		[]string{},
 	)
diff --git a/plugins/github/e2e/pr_commit_test.go b/plugins/github/e2e/pr_commit_test.go
index 61def3a9..d6681f07 100644
--- a/plugins/github/e2e/pr_commit_test.go
+++ b/plugins/github/e2e/pr_commit_test.go
@@ -18,7 +18,6 @@ limitations under the License.
 package e2e
 
 import (
-	"fmt"
 	"github.com/apache/incubator-devlake/models/domainlayer/code"
 	"github.com/apache/incubator-devlake/plugins/github/models"
 	"testing"
@@ -45,7 +44,7 @@ func TestPrCommitDataFlow(t *testing.T) {
 	}
 
 	// import raw data table
-	dataflowTester.ImportCsvIntoTabler(fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubPullRequest{}.TableName()), models.GithubPullRequest{})
+	dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_github_pull_requests.csv", models.GithubPullRequest{})
 	dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_github_api_pull_request_commits.csv", "_raw_github_api_pull_request_commits")
 
 	// verify extraction
@@ -54,7 +53,7 @@ func TestPrCommitDataFlow(t *testing.T) {
 	dataflowTester.Subtask(tasks.ExtractApiPullRequestCommitsMeta, taskData)
 	dataflowTester.VerifyTable(
 		models.GithubCommit{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubCommit{}.TableName()),
+		"./snapshot_tables/_tool_github_commits.csv",
 		[]string{"connection_id", "sha"},
 		[]string{
 			"author_id",
@@ -78,7 +77,7 @@ func TestPrCommitDataFlow(t *testing.T) {
 
 	dataflowTester.VerifyTable(
 		models.GithubPullRequestCommit{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubPullRequestCommit{}.TableName()),
+		"./snapshot_tables/_tool_github_pull_request_commits.csv",
 		[]string{"connection_id", "commit_sha"},
 		[]string{
 			"pull_request_id",
@@ -94,7 +93,7 @@ func TestPrCommitDataFlow(t *testing.T) {
 	dataflowTester.Subtask(tasks.ConvertPullRequestCommitsMeta, taskData)
 	dataflowTester.VerifyTable(
 		code.PullRequestCommit{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", code.PullRequestCommit{}.TableName()),
+		"./snapshot_tables/pull_request_commits.csv",
 		[]string{"commit_sha", "pull_request_id"},
 		[]string{},
 	)
diff --git a/plugins/github/e2e/pr_enrich_issue_test.go b/plugins/github/e2e/pr_enrich_issue_test.go
index 42ebec8b..660ee2bf 100644
--- a/plugins/github/e2e/pr_enrich_issue_test.go
+++ b/plugins/github/e2e/pr_enrich_issue_test.go
@@ -18,7 +18,6 @@ limitations under the License.
 package e2e
 
 import (
-	"fmt"
 	"github.com/apache/incubator-devlake/models/domainlayer/crossdomain"
 	"github.com/apache/incubator-devlake/plugins/github/models"
 	"testing"
@@ -40,7 +39,7 @@ func TestPrEnrichIssueDataFlow(t *testing.T) {
 			ConnectionId: 1,
 			Owner:        "panjf2000",
 			Repo:         "ants",
-			Config: models.Config{
+			TransformationRules: models.TransformationRules{
 				PrType:               "type/(.*)$",
 				PrComponent:          "component/(.*)$",
 				PrBodyClosePattern:   "(?mi)(fix|close|resolve|fixes|closes|resolves|fixed|closed|resolved)[\\s]*.*(((and )?(#|https:\\/\\/github.com\\/%s\\/%s\\/issues\\/)\\d+[ ]*)+)",
@@ -56,15 +55,15 @@ func TestPrEnrichIssueDataFlow(t *testing.T) {
 	}
 
 	// import raw data table
-	dataflowTester.ImportCsvIntoTabler(fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubIssue{}.TableName()), &models.GithubIssue{})
-	dataflowTester.ImportCsvIntoTabler(fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubPullRequest{}.TableName()), models.GithubPullRequest{})
+	dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_github_issues.csv", &models.GithubIssue{})
+	dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_github_pull_requests.csv", models.GithubPullRequest{})
 
 	// verify extraction
 	dataflowTester.FlushTabler(&models.GithubPullRequestIssue{})
 	dataflowTester.Subtask(tasks.EnrichPullRequestIssuesMeta, taskData)
 	dataflowTester.VerifyTable(
 		models.GithubPullRequestIssue{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubPullRequestIssue{}.TableName()),
+		"./snapshot_tables/_tool_github_pull_request_issues.csv",
 		[]string{"connection_id", "pull_request_id", "issue_id"},
 		[]string{
 			"pull_request_number",
@@ -81,7 +80,7 @@ func TestPrEnrichIssueDataFlow(t *testing.T) {
 	dataflowTester.Subtask(tasks.ConvertPullRequestIssuesMeta, taskData)
 	dataflowTester.VerifyTable(
 		crossdomain.PullRequestIssue{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", crossdomain.PullRequestIssue{}.TableName()),
+		"./snapshot_tables/pull_request_issues.csv",
 		[]string{"pull_request_id", "issue_id"},
 		[]string{
 			"pull_request_number",
diff --git a/plugins/github/e2e/pr_review_test.go b/plugins/github/e2e/pr_reviewer_test.go
similarity index 87%
rename from plugins/github/e2e/pr_review_test.go
rename to plugins/github/e2e/pr_reviewer_test.go
index 53a342c3..fd2cea50 100644
--- a/plugins/github/e2e/pr_review_test.go
+++ b/plugins/github/e2e/pr_reviewer_test.go
@@ -18,7 +18,6 @@ limitations under the License.
 package e2e
 
 import (
-	"fmt"
 	"github.com/apache/incubator-devlake/plugins/github/models"
 	"testing"
 
@@ -27,7 +26,7 @@ import (
 	"github.com/apache/incubator-devlake/plugins/github/tasks"
 )
 
-func TestPrReviewDataFlow(t *testing.T) {
+func TestPrReviewerDataFlow(t *testing.T) {
 	var plugin impl.Github
 	dataflowTester := e2ehelper.NewDataFlowTester(t, "gitlab", plugin)
 
@@ -44,7 +43,7 @@ func TestPrReviewDataFlow(t *testing.T) {
 	}
 
 	// import raw data table
-	dataflowTester.ImportCsvIntoTabler(fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubPullRequest{}.TableName()), models.GithubPullRequest{})
+	dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_github_pull_requests.csv", models.GithubPullRequest{})
 	dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_github_api_pull_request_reviews.csv", "_raw_github_api_pull_request_reviews")
 
 	// verify extraction
@@ -52,7 +51,7 @@ func TestPrReviewDataFlow(t *testing.T) {
 	dataflowTester.Subtask(tasks.ExtractApiPullRequestReviewersMeta, taskData)
 	dataflowTester.VerifyTable(
 		models.GithubReviewer{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubReviewer{}.TableName()),
+		"./snapshot_tables/_tool_github_reviewers.csv",
 		[]string{"connection_id", "github_id", "pull_request_id"},
 		[]string{
 			"login",
diff --git a/plugins/github/e2e/pr_test.go b/plugins/github/e2e/pr_test.go
index cca678af..ddac5e28 100644
--- a/plugins/github/e2e/pr_test.go
+++ b/plugins/github/e2e/pr_test.go
@@ -18,7 +18,6 @@ limitations under the License.
 package e2e
 
 import (
-	"fmt"
 	"github.com/apache/incubator-devlake/models/domainlayer/code"
 	"github.com/apache/incubator-devlake/plugins/github/models"
 	"testing"
@@ -40,7 +39,7 @@ func TestPrDataFlow(t *testing.T) {
 			ConnectionId: 1,
 			Owner:        "panjf2000",
 			Repo:         "ants",
-			Config: models.Config{
+			TransformationRules: models.TransformationRules{
 				PrType:             "type/(.*)$",
 				PrComponent:        "component/(.*)$",
 				PrBodyClosePattern: "(?mi)(fix|close|resolve|fixes|closes|resolves|fixed|closed|resolved)[\\s]*.*(((and )?(#|https:\\/\\/github.com\\/%s\\/%s\\/issues\\/)\\d+[ ]*)+)",
@@ -58,7 +57,7 @@ func TestPrDataFlow(t *testing.T) {
 	dataflowTester.Subtask(tasks.ExtractApiPullRequestsMeta, taskData)
 	dataflowTester.VerifyTable(
 		models.GithubPullRequest{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubPullRequest{}.TableName()),
+		"./snapshot_tables/_tool_github_pull_requests.csv",
 		[]string{"connection_id", "github_id", "repo_id"},
 		[]string{
 			"number",
@@ -94,7 +93,7 @@ func TestPrDataFlow(t *testing.T) {
 
 	dataflowTester.VerifyTable(
 		models.GithubPullRequestLabel{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubPullRequestLabel{}.TableName()),
+		"./snapshot_tables/_tool_github_pull_request_labels.csv",
 		[]string{"connection_id", "pull_id", "label_name"},
 		[]string{},
 	)
@@ -104,7 +103,7 @@ func TestPrDataFlow(t *testing.T) {
 	dataflowTester.Subtask(tasks.ConvertPullRequestsMeta, taskData)
 	dataflowTester.VerifyTable(
 		code.PullRequest{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", code.PullRequest{}.TableName()),
+		"./snapshot_tables/pull_requests.csv",
 		[]string{"id"},
 		[]string{
 			"base_repo_id",
@@ -135,7 +134,7 @@ func TestPrDataFlow(t *testing.T) {
 	dataflowTester.Subtask(tasks.ConvertPullRequestLabelsMeta, taskData)
 	dataflowTester.VerifyTable(
 		code.PullRequestLabel{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", code.PullRequestLabel{}.TableName()),
+		"./snapshot_tables/pull_request_labels.csv",
 		[]string{"pull_request_id", "label_name"},
 		[]string{},
 	)
diff --git a/plugins/github/e2e/raw_tables/_raw_github_api_comments.csv b/plugins/github/e2e/raw_tables/_raw_github_api_comments.csv
index 8cabc6e8..ecac6b17 100644
--- a/plugins/github/e2e/raw_tables/_raw_github_api_comments.csv
+++ b/plugins/github/e2e/raw_tables/_raw_github_api_comments.csv
@@ -1,4 +1,5 @@
 id,params,data,url,input,created_at
+316,"{""ConnectionId"":2,""Owner"":""panjf2000"",""Repo"":""ants""}","{""url"":""https://api.github.com/repos/panjf2000/ants/issues/comments/407675431"",""html_url"":""https://github.com/panjf2000/ants/pull/4#issuecomment-407675431"",""issue_url"":""https://api.github.com/repos/panjf2000/ants/issues/4"",""id"":407675431,""node_id"":""MDEyOklzc3VlQ29tbWVudDQwNzY3NTQzMQ=="",""user"":{""login"":""codecov[bot]"",""id"":22429695,""node_id"":""MDM6Qm90MjI0Mjk2OTU="",""avatar_url"":""https://av [...]
 3162,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""url"":""https://api.github.com/repos/panjf2000/ants/issues/comments/407675431"",""html_url"":""https://github.com/panjf2000/ants/pull/4#issuecomment-407675431"",""issue_url"":""https://api.github.com/repos/panjf2000/ants/issues/4"",""id"":407675431,""node_id"":""MDEyOklzc3VlQ29tbWVudDQwNzY3NTQzMQ=="",""user"":{""login"":""codecov[bot]"",""id"":22429695,""node_id"":""MDM6Qm90MjI0Mjk2OTU="",""avatar_url"":""https://a [...]
 3163,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""url"":""https://api.github.com/repos/panjf2000/ants/issues/comments/407714136"",""html_url"":""https://github.com/panjf2000/ants/pull/4#issuecomment-407714136"",""issue_url"":""https://api.github.com/repos/panjf2000/ants/issues/4"",""id"":407714136,""node_id"":""MDEyOklzc3VlQ29tbWVudDQwNzcxNDEzNg=="",""user"":{""login"":""panjf2000"",""id"":7496278,""node_id"":""MDQ6VXNlcjc0OTYyNzg="",""avatar_url"":""https://avata [...]
 3164,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""url"":""https://api.github.com/repos/panjf2000/ants/issues/comments/407755528"",""html_url"":""https://github.com/panjf2000/ants/pull/4#issuecomment-407755528"",""issue_url"":""https://api.github.com/repos/panjf2000/ants/issues/4"",""id"":407755528,""node_id"":""MDEyOklzc3VlQ29tbWVudDQwNzc1NTUyOA=="",""user"":{""login"":""barryz"",""id"":16658738,""node_id"":""MDQ6VXNlcjE2NjU4NzM4"",""avatar_url"":""https://avatars [...]
diff --git a/plugins/github/e2e/raw_tables/_raw_github_api_events.csv b/plugins/github/e2e/raw_tables/_raw_github_api_events.csv
index 55472f0a..fb891a6a 100644
--- a/plugins/github/e2e/raw_tables/_raw_github_api_events.csv
+++ b/plugins/github/e2e/raw_tables/_raw_github_api_events.csv
@@ -1,4 +1,5 @@
 id,params,data,url,input,created_at
+100,"{""ConnectionId"":,""Owner"":""panjf2000"",""Repo"":""ants""}","{""id"":6774117135,""node_id"":""CE_lADOB_z1Gs5K-Ts6zwAAAAGTxNMP"",""url"":""https://api.github.com/repos/panjf2000/ants/issues/events/6774117135"",""actor"":{""login"":""ZhMaio"",""id"":47515663,""node_id"":""MDQ6VXNlcjQ3NTE1NjYz"",""avatar_url"":""https://avatars.githubusercontent.com/u/47515663?v=4"",""gravatar_id"":"""",""url"":""https://api.github.com/users/ZhMaio"",""html_url"":""https://github.com/ZhMaio"",""foll [...]
 1,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""id"":6774117135,""node_id"":""CE_lADOB_z1Gs5K-Ts6zwAAAAGTxNMP"",""url"":""https://api.github.com/repos/panjf2000/ants/issues/events/6774117135"",""actor"":{""login"":""ZhMaio"",""id"":47515663,""node_id"":""MDQ6VXNlcjQ3NTE1NjYz"",""avatar_url"":""https://avatars.githubusercontent.com/u/47515663?v=4"",""gravatar_id"":"""",""url"":""https://api.github.com/users/ZhMaio"",""html_url"":""https://github.com/ZhMaio"",""follo [...]
 2,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""id"":6766052007,""node_id"":""AE_lADOB_z1Gs5LWMEGzwAAAAGTScKn"",""url"":""https://api.github.com/repos/panjf2000/ants/issues/events/6766052007"",""actor"":{""login"":""panjf2000"",""id"":7496278,""node_id"":""MDQ6VXNlcjc0OTYyNzg="",""avatar_url"":""https://avatars.githubusercontent.com/u/7496278?v=4"",""gravatar_id"":"""",""url"":""https://api.github.com/users/panjf2000"",""html_url"":""https://github.com/panjf2000"", [...]
 3,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""id"":6766051996,""node_id"":""LE_lADOB_z1Gs5LWMEGzwAAAAGTScKc"",""url"":""https://api.github.com/repos/panjf2000/ants/issues/events/6766051996"",""actor"":{""login"":""iGen1us"",""id"":14806824,""node_id"":""MDQ6VXNlcjE0ODA2ODI0"",""avatar_url"":""https://avatars.githubusercontent.com/u/14806824?v=4"",""gravatar_id"":"""",""url"":""https://api.github.com/users/iGen1us"",""html_url"":""https://github.com/iGen1us"",""fo [...]
diff --git a/plugins/github/e2e/raw_tables/_raw_github_api_issues.csv b/plugins/github/e2e/raw_tables/_raw_github_api_issues.csv
index bbce55ef..78cf624d 100644
--- a/plugins/github/e2e/raw_tables/_raw_github_api_issues.csv
+++ b/plugins/github/e2e/raw_tables/_raw_github_api_issues.csv
@@ -1,4 +1,5 @@
 id,params,data,url,input,created_at
+9,"{""ConnectionId"":2,""Owner"":""panjf2000"",""Repo"":""ants""}","{""url"":""https://api.github.com/repos/panjf2000/ants/issues/4"",""repository_url"":""https://api.github.com/repos/panjf2000/ants"",""labels_url"":""https://api.github.com/repos/panjf2000/ants/issues/4/labels{/name}"",""comments_url"":""https://api.github.com/repos/panjf2000/ants/issues/4/comments"",""events_url"":""https://api.github.com/repos/panjf2000/ants/issues/4/events"",""html_url"":""https://github.com/panjf2000 [...]
 10,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""url"":""https://api.github.com/repos/panjf2000/ants/issues/4"",""repository_url"":""https://api.github.com/repos/panjf2000/ants"",""labels_url"":""https://api.github.com/repos/panjf2000/ants/issues/4/labels{/name}"",""comments_url"":""https://api.github.com/repos/panjf2000/ants/issues/4/comments"",""events_url"":""https://api.github.com/repos/panjf2000/ants/issues/4/events"",""html_url"":""https://github.com/panjf200 [...]
 11,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""url"":""https://api.github.com/repos/panjf2000/ants/issues/5"",""repository_url"":""https://api.github.com/repos/panjf2000/ants"",""labels_url"":""https://api.github.com/repos/panjf2000/ants/issues/5/labels{/name}"",""comments_url"":""https://api.github.com/repos/panjf2000/ants/issues/5/comments"",""events_url"":""https://api.github.com/repos/panjf2000/ants/issues/5/events"",""html_url"":""https://github.com/panjf200 [...]
 12,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""url"":""https://api.github.com/repos/panjf2000/ants/issues/6"",""repository_url"":""https://api.github.com/repos/panjf2000/ants"",""labels_url"":""https://api.github.com/repos/panjf2000/ants/issues/6/labels{/name}"",""comments_url"":""https://api.github.com/repos/panjf2000/ants/issues/6/comments"",""events_url"":""https://api.github.com/repos/panjf2000/ants/issues/6/events"",""html_url"":""https://github.com/panjf200 [...]
diff --git a/plugins/github/e2e/raw_tables/_raw_github_api_pull_request_commits.csv b/plugins/github/e2e/raw_tables/_raw_github_api_pull_request_commits.csv
index d1e0242a..477d6784 100644
--- a/plugins/github/e2e/raw_tables/_raw_github_api_pull_request_commits.csv
+++ b/plugins/github/e2e/raw_tables/_raw_github_api_pull_request_commits.csv
@@ -1,4 +1,5 @@
 id,params,data,url,input,created_at
+9,"{""ConnectionId"":2,""Owner"":""panjf2000"",""Repo"":""ants""}","{""sha"":""5bbc9e170bbee27c37bcc30da3da75b4531d1edb"",""node_id"":""MDY6Q29tbWl0MTM0MDE4MzMwOjViYmM5ZTE3MGJiZWUyN2MzN2JjYzMwZGEzZGE3NWI0NTMxZDFlZGI="",""commit"":{""author"":{""name"":""Cholerae Hu"",""email"":""choleraehyq@gmail.com"",""date"":""2019-01-21T10:57:23Z""},""committer"":{""name"":""Cholerae Hu"",""email"":""choleraehyq@gmail.com"",""date"":""2019-01-22T05:09:19Z""},""message"":""feature: add PanicHandler\n\ [...]
 10,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""sha"":""5bbc9e170bbee27c37bcc30da3da75b4531d1edb"",""node_id"":""MDY6Q29tbWl0MTM0MDE4MzMwOjViYmM5ZTE3MGJiZWUyN2MzN2JjYzMwZGEzZGE3NWI0NTMxZDFlZGI="",""commit"":{""author"":{""name"":""Cholerae Hu"",""email"":""choleraehyq@gmail.com"",""date"":""2019-01-21T10:57:23Z""},""committer"":{""name"":""Cholerae Hu"",""email"":""choleraehyq@gmail.com"",""date"":""2019-01-22T05:09:19Z""},""message"":""feature: add PanicHandler\n [...]
 24,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""sha"":""2fa305b66b7b4bd8116ef9c7635396ae6a3a9c68"",""node_id"":""MDY6Q29tbWl0MTQ5MjY3MTc3OjJmYTMwNWI2NmI3YjRiZDgxMTZlZjljNzYzNTM5NmFlNmEzYTljNjg="",""commit"":{""author"":{""name"":""Andy Pan"",""email"":""panjf2000@gmail.com"",""date"":""2018-08-04T02:49:26Z""},""committer"":{""name"":""Andy Pan"",""email"":""panjf2000@gmail.com"",""date"":""2018-08-04T02:49:26Z""},""message"":""Merge branch 'develop'"",""tree"":{"" [...]
 11,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""sha"":""ec5d1f3b8107265cb53536975504c7cda4f6d68f"",""node_id"":""MDY6Q29tbWl0MTM0MDE4MzMwOmVjNWQxZjNiODEwNzI2NWNiNTM1MzY5NzU1MDRjN2NkYTRmNmQ2OGY="",""commit"":{""author"":{""name"":""Sarath Sadasivan Pillai"",""email"":""sarath.sp06@gmail.com"",""date"":""2019-04-04T11:52:12Z""},""committer"":{""name"":""GitHub"",""email"":""noreply@github.com"",""date"":""2019-04-04T11:52:12Z""},""message"":""goreport: lint warning  [...]
diff --git a/plugins/github/e2e/raw_tables/_raw_github_api_pull_request_reviews.csv b/plugins/github/e2e/raw_tables/_raw_github_api_pull_request_reviews.csv
index 4343cdba..11659812 100644
--- a/plugins/github/e2e/raw_tables/_raw_github_api_pull_request_reviews.csv
+++ b/plugins/github/e2e/raw_tables/_raw_github_api_pull_request_reviews.csv
@@ -1,4 +1,5 @@
 id,params,data,url,input,created_at
+9,"{""ConnectionId"":2,""Owner"":""panjf2000"",""Repo"":""ants""}","{""id"":277027723,""node_id"":""MDE3OlB1bGxSZXF1ZXN0UmV2aWV3Mjc3MDI3NzIz"",""user"":{""login"":""choleraehyq"",""id"":8923413,""node_id"":""MDQ6VXNlcjg5MjM0MTM="",""avatar_url"":""https://avatars.githubusercontent.com/u/8923413?u=1053453176d6be4d727304fe7b134098c9ecf316&v=4"",""gravatar_id"":"""",""url"":""https://api.github.com/users/choleraehyq"",""html_url"":""https://github.com/choleraehyq"",""followers_url"":""https [...]
 10,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""id"":277027723,""node_id"":""MDE3OlB1bGxSZXF1ZXN0UmV2aWV3Mjc3MDI3NzIz"",""user"":{""login"":""choleraehyq"",""id"":8923413,""node_id"":""MDQ6VXNlcjg5MjM0MTM="",""avatar_url"":""https://avatars.githubusercontent.com/u/8923413?u=1053453176d6be4d727304fe7b134098c9ecf316&v=4"",""gravatar_id"":"""",""url"":""https://api.github.com/users/choleraehyq"",""html_url"":""https://github.com/choleraehyq"",""followers_url"":""http [...]
 11,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""id"":277036116,""node_id"":""MDE3OlB1bGxSZXF1ZXN0UmV2aWV3Mjc3MDM2MTE2"",""user"":{""login"":""panjf2000"",""id"":7496278,""node_id"":""MDQ6VXNlcjc0OTYyNzg="",""avatar_url"":""https://avatars.githubusercontent.com/u/7496278?u=07ba348f0ca79d78e45b1f628723a7c3abf80fac&v=4"",""gravatar_id"":"""",""url"":""https://api.github.com/users/panjf2000"",""html_url"":""https://github.com/panjf2000"",""followers_url"":""https://ap [...]
 12,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""id"":277042368,""node_id"":""MDE3OlB1bGxSZXF1ZXN0UmV2aWV3Mjc3MDQyMzY4"",""user"":{""login"":""choleraehyq"",""id"":8923413,""node_id"":""MDQ6VXNlcjg5MjM0MTM="",""avatar_url"":""https://avatars.githubusercontent.com/u/8923413?u=1053453176d6be4d727304fe7b134098c9ecf316&v=4"",""gravatar_id"":"""",""url"":""https://api.github.com/users/choleraehyq"",""html_url"":""https://github.com/choleraehyq"",""followers_url"":""http [...]
diff --git a/plugins/github/e2e/raw_tables/_raw_github_api_pull_requests.csv b/plugins/github/e2e/raw_tables/_raw_github_api_pull_requests.csv
index 6db5f758..e1cfcad5 100644
--- a/plugins/github/e2e/raw_tables/_raw_github_api_pull_requests.csv
+++ b/plugins/github/e2e/raw_tables/_raw_github_api_pull_requests.csv
@@ -1,4 +1,5 @@
 id,params,data,url,input,created_at
+9,"{""ConnectionId"":2,""Owner"":""panjf2000"",""Repo"":""ants""}","{""url"":""https://api.github.com/repos/panjf2000/ants/pulls/4"",""id"":203756736,""node_id"":""MDExOlB1bGxSZXF1ZXN0MjAzNzU2NzM2"",""html_url"":""https://github.com/panjf2000/ants/pull/4"",""diff_url"":""https://github.com/panjf2000/ants/pull/4.diff"",""patch_url"":""https://github.com/panjf2000/ants/pull/4.patch"",""issue_url"":""https://api.github.com/repos/panjf2000/ants/issues/4"",""number"":4,""state"":""closed"","" [...]
 246,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""url"":""https://api.github.com/repos/panjf2000/ants/pulls/4"",""id"":203756736,""node_id"":""MDExOlB1bGxSZXF1ZXN0MjAzNzU2NzM2"",""html_url"":""https://github.com/panjf2000/ants/pull/4"",""diff_url"":""https://github.com/panjf2000/ants/pull/4.diff"",""patch_url"":""https://github.com/panjf2000/ants/pull/4.patch"",""issue_url"":""https://api.github.com/repos/panjf2000/ants/issues/4"",""number"":4,""state"":""closed"", [...]
 247,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""url"":""https://api.github.com/repos/panjf2000/ants/pulls/8"",""id"":211603583,""node_id"":""MDExOlB1bGxSZXF1ZXN0MjExNjAzNTgz"",""html_url"":""https://github.com/panjf2000/ants/pull/8"",""diff_url"":""https://github.com/panjf2000/ants/pull/8.diff"",""patch_url"":""https://github.com/panjf2000/ants/pull/8.patch"",""issue_url"":""https://api.github.com/repos/panjf2000/ants/issues/8"",""number"":8,""state"":""closed"", [...]
 248,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""url"":""https://api.github.com/repos/panjf2000/ants/pulls/9"",""id"":212277907,""node_id"":""MDExOlB1bGxSZXF1ZXN0MjEyMjc3OTA3"",""html_url"":""https://github.com/panjf2000/ants/pull/9"",""diff_url"":""https://github.com/panjf2000/ants/pull/9.diff"",""patch_url"":""https://github.com/panjf2000/ants/pull/9.patch"",""issue_url"":""https://api.github.com/repos/panjf2000/ants/issues/9"",""number"":9,""state"":""closed"", [...]
diff --git a/plugins/github/e2e/raw_tables/_raw_github_api_repositories.csv b/plugins/github/e2e/raw_tables/_raw_github_api_repositories.csv
index db7c8f34..3183c489 100644
--- a/plugins/github/e2e/raw_tables/_raw_github_api_repositories.csv
+++ b/plugins/github/e2e/raw_tables/_raw_github_api_repositories.csv
@@ -1,2 +1,3 @@
 id,params,data,url,input,created_at
+1,"{""ConnectionId"":2,""Owner"":""panjf2000"",""Repo"":""ants""}","{""id"":134018330,""node_id"":""MDEwOlJlcG9zaXRvcnkxMzQwMTgzMzA="",""name"":""ants"",""full_name"":""panjf2000/ants"",""private"":false,""owner"":{""login"":""panjf2000"",""id"":7496278,""node_id"":""MDQ6VXNlcjc0OTYyNzg="",""avatar_url"":""https://avatars.githubusercontent.com/u/7496278?v=4"",""gravatar_id"":"""",""url"":""https://api.github.com/users/panjf2000"",""html_url"":""https://github.com/panjf2000"",""followers_ [...]
 7,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}","{""id"":134018330,""node_id"":""MDEwOlJlcG9zaXRvcnkxMzQwMTgzMzA="",""name"":""ants"",""full_name"":""panjf2000/ants"",""private"":false,""owner"":{""login"":""panjf2000"",""id"":7496278,""node_id"":""MDQ6VXNlcjc0OTYyNzg="",""avatar_url"":""https://avatars.githubusercontent.com/u/7496278?v=4"",""gravatar_id"":"""",""url"":""https://api.github.com/users/panjf2000"",""html_url"":""https://github.com/panjf2000"",""followers_ [...]
diff --git a/plugins/github/e2e/repo_test.go b/plugins/github/e2e/repo_test.go
index 45612292..4a7f8e89 100644
--- a/plugins/github/e2e/repo_test.go
+++ b/plugins/github/e2e/repo_test.go
@@ -18,7 +18,6 @@ limitations under the License.
 package e2e
 
 import (
-	"fmt"
 	"github.com/apache/incubator-devlake/models/domainlayer/code"
 	"github.com/apache/incubator-devlake/models/domainlayer/ticket"
 	"github.com/apache/incubator-devlake/plugins/github/models"
@@ -41,7 +40,7 @@ func TestRepoDataFlow(t *testing.T) {
 			ConnectionId: 1,
 			Owner:        "panjf2000",
 			Repo:         "ants",
-			Config: models.Config{
+			TransformationRules: models.TransformationRules{
 				PrType:      "type/(.*)$",
 				PrComponent: "component/(.*)$",
 			},
@@ -57,7 +56,7 @@ func TestRepoDataFlow(t *testing.T) {
 	dataflowTester.Subtask(tasks.ExtractApiRepoMeta, taskData)
 	dataflowTester.VerifyTable(
 		models.GithubRepo{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", models.GithubRepo{}.TableName()),
+		"./snapshot_tables/_tool_github_repos.csv",
 		[]string{"connection_id", "github_id"},
 		[]string{
 			"name",
@@ -81,7 +80,7 @@ func TestRepoDataFlow(t *testing.T) {
 	dataflowTester.Subtask(tasks.ConvertRepoMeta, taskData)
 	dataflowTester.VerifyTable(
 		code.Repo{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", code.Repo{}.TableName()),
+		"./snapshot_tables/repos.csv",
 		[]string{"id"},
 		[]string{
 			"name",
@@ -97,7 +96,7 @@ func TestRepoDataFlow(t *testing.T) {
 	)
 	dataflowTester.VerifyTable(
 		ticket.Board{},
-		fmt.Sprintf("./snapshot_tables/%s.csv", ticket.Board{}.TableName()),
+		"./snapshot_tables/boards.csv",
 		[]string{"id"},
 		[]string{
 			"name",
diff --git a/plugins/github/e2e/snapshot_tables/_tool_github_reviewers.csv b/plugins/github/e2e/snapshot_tables/_tool_github_reviewers.csv
index 2971f8b7..5b49528f 100644
--- a/plugins/github/e2e/snapshot_tables/_tool_github_reviewers.csv
+++ b/plugins/github/e2e/snapshot_tables/_tool_github_reviewers.csv
@@ -1,7 +1,7 @@
-connection_id,github_id,login,pull_request_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
-1,2813260,KevinBaiSg,325179595,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}",_raw_github_api_pull_request_reviews,39,
-1,7496278,panjf2000,308859272,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}",_raw_github_api_pull_request_reviews,21,
-1,7496278,panjf2000,316337433,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}",_raw_github_api_pull_request_reviews,22,
-1,7496278,panjf2000,325179595,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}",_raw_github_api_pull_request_reviews,38,
-1,8923413,choleraehyq,308859272,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}",_raw_github_api_pull_request_reviews,20,
-1,8923413,choleraehyq,316337433,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}",_raw_github_api_pull_request_reviews,24,
+connection_id,github_id,pull_request_id,login,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+1,2813260,325179595,KevinBaiSg,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}",_raw_github_api_pull_request_reviews,39,
+1,7496278,308859272,panjf2000,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}",_raw_github_api_pull_request_reviews,21,
+1,7496278,316337433,panjf2000,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}",_raw_github_api_pull_request_reviews,22,
+1,7496278,325179595,panjf2000,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}",_raw_github_api_pull_request_reviews,38,
+1,8923413,308859272,choleraehyq,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}",_raw_github_api_pull_request_reviews,20,
+1,8923413,316337433,choleraehyq,"{""ConnectionId"":1,""Owner"":""panjf2000"",""Repo"":""ants""}",_raw_github_api_pull_request_reviews,24,
diff --git a/plugins/github/e2e/snapshot_tables/issue_comments.csv b/plugins/github/e2e/snapshot_tables/issue_comments.csv
index 0e0b099b..fb4dbf22 100644
--- a/plugins/github/e2e/snapshot_tables/issue_comments.csv
+++ b/plugins/github/e2e/snapshot_tables/issue_comments.csv
@@ -1,49 +1,49 @@
 id,issue_id,body,user_id,created_date
-gitlab:GithubIssue:1:409800144,gitlab:GithubIssue:1:346842831,"""这里freeSignal和idleWorkers的数量是绝对匹配的,也就是说,只要freeSignal有值那么idleWorkers里肯定有可用worker可以取出来,putWorker就是把可用worker放回idleWorkers,每次都会塞一个值进freeSignal,还有每次从idleWorkers里取一个worker都要取出freeSignal对应的一个值,不存在有可用worker却被freeSignal阻塞""",gitlab:GithubUser:7496278,2018-08-02T04:13:09.000+00:00
-gitlab:GithubIssue:1:410141732,gitlab:GithubIssue:1:347255859,"""切片如下\r\n\r\n这里等待锁\r\n9913 @ 0x42c73a 0x42c7ee 0x43cf64 0x43cc7d 0x46dfe8 0x7b28e0 0x7b2be5 0x4591f1\r\n#\t0x43cc7c\tsync.runtime_SemacquireMutex+0x3c\t\t\t\tE:/go/src/runtime/sema.go:71\r\n#\t0x46dfe7\tsync.(*Mutex).Lock+0x107\t\t\t\t\tE:/go/src/sync/mutex.go:134\r\n#\t0x7b28df\tmp/vendor/github.com/panjf2000/ants.(*Pool).putWorker+0x6f\tF:/gowork/src/mp/vendor/github.com/panjf2000/ants/pool.go:229\r\n#\t0x7b2be4\tmp/vendor [...]
-gitlab:GithubIssue:1:410143221,gitlab:GithubIssue:1:347255859,"""加了锁之后有下标溢出了。。。\r\npanic: runtime error: index out of range\r\n\r\ngoroutine 7 [running]:\r\nmp/vendor/github.com/panjf2000/ants.(*Pool).getWorker(0xc4200b6460, 0xc4202a6e01)\r\n\tF:/gowork/src/mp/vendor/github.com/panjf2000/ants/pool.go:213 +0x2ce\r\nmp/vendor/github.com/panjf2000/ants.(*Pool).Submit(0xc4200b6460, 0xc4223d47d0, 0x0, 0x0)\r\n\tF:/gowork/src/mp/vendor/github.com/panjf2000/ants/pool.go:125 +0x62\r\n""",gitlab: [...]
-gitlab:GithubIssue:1:410147487,gitlab:GithubIssue:1:347255859,"""@lovelly 我查了源码,怎么行数和你说的有点对不上,你的代码更新到最新了吗?""",gitlab:GithubUser:7496278,2018-08-03T05:21:03.000+00:00
-gitlab:GithubIssue:1:410170764,gitlab:GithubIssue:1:347255859,"""是最新的代码,我有添加一些print 所以行数不一样,这确实是一个bug 9913个协程阻塞在了 putWorker 很久很久。,。。。""",gitlab:GithubUser:13118848,2018-08-03T07:33:21.000+00:00
-gitlab:GithubIssue:1:410173358,gitlab:GithubIssue:1:347255859,"""![image](https://user-images.githubusercontent.com/13118848/43630582-44f48000-9733-11e8-936d-9cb0d4145204.png)\r\n 我idleWorkers 为空的, 但是我有n个协程阻塞在了 204行的\t<-p.freeSignal, 这时候来了一个worker被放入idleWorkers, 很巧的是一个协程在putWorker结束锁后,在190行的p.lock.Lock()拿到了锁,这时候 n := len(idleWorkers) - 1 结果是0 这个协程很高兴的进入了接下来的else分支, 然而不幸发生了,p.freeSignal的信号确被早已等在 204行的若干个协程中的一个拿走了, 那么 可怜的协程拿到了锁, 确无法等到 p.freeSignal  p.freeSignal要拿到锁才能产生信号, 然后就。,。。""",gitlab [...]
-gitlab:GithubIssue:1:410204870,gitlab:GithubIssue:1:347255859,"""@lovelly 检查了一下,的确可能会有这个问题,这两天我会修复;\r\n另外,我测试的时候试过1000w的量都没发现过这个问题,可能是我每个任务的执行时间太短了,所以我想问下你的任务量有多大以及每个任务的耗时大概是多少?""",gitlab:GithubUser:7496278,2018-08-03T09:51:15.000+00:00
-gitlab:GithubIssue:1:410205295,gitlab:GithubIssue:1:347255859,"""我任务耗时从0秒到60秒之间。。。""",gitlab:GithubUser:13118848,2018-08-03T09:53:00.000+00:00
-gitlab:GithubIssue:1:410267195,gitlab:GithubIssue:1:347255859,"""@lovelly 应该已经修复了,可以再试试""",gitlab:GithubUser:7496278,2018-08-03T14:15:45.000+00:00
-gitlab:GithubIssue:1:410290418,gitlab:GithubIssue:1:346842831,"""具体问题可以看 #6 """,gitlab:GithubUser:7496278,2018-08-03T15:32:00.000+00:00
-gitlab:GithubIssue:1:411342200,gitlab:GithubIssue:1:348630179,"""@huiwq1990 谢谢指出,今天会修复这个问题。""",gitlab:GithubUser:7496278,2018-08-08T09:17:30.000+00:00
-gitlab:GithubIssue:1:411369513,gitlab:GithubIssue:1:348630179,"""@huiwq1990 应该解决了,可以再试试""",gitlab:GithubUser:7496278,2018-08-08T11:06:55.000+00:00
-gitlab:GithubIssue:1:411965696,gitlab:GithubIssue:1:348630179,"""嗯,解决了""",gitlab:GithubUser:4555057,2018-08-10T03:35:53.000+00:00
-gitlab:GithubIssue:1:411969260,gitlab:GithubIssue:1:348630179,"""@huiwq1990 好的,那我关掉这个issue了。""",gitlab:GithubUser:7496278,2018-08-10T04:06:04.000+00:00
-gitlab:GithubIssue:1:418287926,gitlab:GithubIssue:1:356703393,"""会导致很多任务长时间在阻塞,至于cpu飙升应该不会""",gitlab:GithubUser:7496278,2018-09-04T08:40:06.000+00:00
-gitlab:GithubIssue:1:418290090,gitlab:GithubIssue:1:356703393,"""所以应该在goroutine中调用submit 否则会阻塞主任务""",gitlab:GithubUser:11763614,2018-09-04T08:47:39.000+00:00
-gitlab:GithubIssue:1:418293975,gitlab:GithubIssue:1:356703393,"""不是的,如果每一个submit都用一个goroutine那不就违背初衷了吗,这样的话你有多少个任务还是要启动多少个原生goroutine。""",gitlab:GithubUser:7496278,2018-09-04T09:00:55.000+00:00
-gitlab:GithubIssue:1:418297020,gitlab:GithubIssue:1:356703393,"""// Submit submits a task to this pool.\r\nfunc (p *Pool) Submit(task f) error {\r\n\tif len(p.release) > 0 {\r\n\t\treturn ErrPoolClosed\r\n\t}\r\n\tp.getWorker().task <- task\r\n\treturn nil\r\n}\r\n我是觉得p.getWorker()  阻塞不太好 ,这样主任务和pool没有彻底隔离""",gitlab:GithubUser:11763614,2018-09-04T09:11:37.000+00:00
-gitlab:GithubIssue:1:425014962,gitlab:GithubIssue:1:364361014,"""我晚上回去就打一下新的tag,完了我再给你回一个邮件\r\n\r\nedcismybrother <no...@github.com> 于2018年9月27日周四 下午4:32写道:\r\n\r\n> 鄙人现在在弄dep依赖管理,有用到你写的ants项目,可是你好像忘记打最新的tag了。最新的tag\r\n> 3.6是指向ed55924这个提交,git上的最新代码是af376f1b这次提交,两次提交都隔了快5个月了,看到的话,麻烦打一个最新的tag吧。(手动可怜)\r\n>\r\n> —\r\n> You are receiving this because you are subscribed to this thread.\r\n> Reply to this email directly, view it on GitHub\r\n> <https://github.com/panjf2000/ants/issues/1 [...]
-gitlab:GithubIssue:1:425018770,gitlab:GithubIssue:1:356703393,"""我觉得这个会导致cpu上升。调用Submit时,如果没有多余的worker,会一直进入这个死循环\r\n```\t\t\r\nfor {\r\n\t\t\tp.lock.Lock()\r\n\t\t\tidleWorkers = p.workers\r\n\t\t\tl := len(idleWorkers) - 1\r\n\t\t\tif l < 0 {\r\n\t\t\t\tp.lock.Unlock()\r\n\t\t\t\tcontinue\r\n\t\t\t}\r\n\t\t\tw = idleWorkers[l]\r\n\t\t\tidleWorkers[l] = nil\r\n\t\t\tp.workers = idleWorkers[:l]\r\n\t\t\tp.lock.Unlock()\r\n\t\t\tbreak\r\n\t\t}\r\n```\r\n一直会continue,直到有空闲的worker,这样会阻塞调用Sub [...]
-gitlab:GithubIssue:1:425061837,gitlab:GithubIssue:1:356703393,"""![snip20180927_3](https://user-images.githubusercontent.com/12890888/46144182-c4efe200-c28e-11e8-8e69-ffd4502e3b9e.png)\r\n\r\ncpu占用率一直接近100%\r\n\r\n![snip20180927_4](https://user-images.githubusercontent.com/12890888/46144221-ddf89300-c28e-11e8-985b-48437eb20cdc.png)\r\n""",gitlab:GithubUser:12890888,2018-09-27T11:53:26.000+00:00
-gitlab:GithubIssue:1:425062926,gitlab:GithubIssue:1:364361014,"""tag更新了,v3.7\r\n\r\nAndy Pan <pa...@gmail.com> 于2018年9月27日周四 下午5:00写道:\r\n\r\n> 我晚上回去就打一下新的tag,完了我再给你回一个邮件\r\n>\r\n> edcismybrother <no...@github.com> 于2018年9月27日周四 下午4:32写道:\r\n>\r\n>> 鄙人现在在弄dep依赖管理,有用到你写的ants项目,可是你好像忘记打最新的tag了。最新的tag\r\n>> 3.6是指向ed55924这个提交,git上的最新代码是af376f1b这次提交,两次提交都隔了快5个月了,看到的话,麻烦打一个最新的tag吧。(手动可怜)\r\n>>\r\n>> —\r\n>> You are receiving this because you are subscribed to this thread.\r\n>> Rep [...]
-gitlab:GithubIssue:1:425066089,gitlab:GithubIssue:1:356703393,"""@liyonglion 这个例子看起来有点极端,因为只有两个任务,pool容量是1,所以剩下那个不断在自己加锁解锁导致cpu忙,如果是多个竞争的大部分是block状态,应该不会出现这种cpu满的情况,不然你把例子改改?增加提交的任务数再看看,看看还会不会出现这种情况。""",gitlab:GithubUser:7496278,2018-09-27T12:07:30.000+00:00
-gitlab:GithubIssue:1:425288734,gitlab:GithubIssue:1:356703393,"""@panjf2000  ants比较适合做“短期”任务,如果存在大量的“长期”任务,很有可能导致死循环。为什么不block当前Submit的“线程”?""",gitlab:GithubUser:12890888,2018-09-28T01:09:40.000+00:00
-gitlab:GithubIssue:1:425293042,gitlab:GithubIssue:1:356703393,"""@liyonglion 之前有用过chan阻塞等待,但是导致了一个死锁问题:#6,后来才改成这种形式。所以我说的增加submit的任务数再测试之后也是cpu 100%吗?这个问题我现在暂时没想到比较好的解决办法,我再想想,或者你有没有比较好的想法?可以提个pr。""",gitlab:GithubUser:7496278,2018-09-28T01:37:17.000+00:00
-gitlab:GithubIssue:1:425331360,gitlab:GithubIssue:1:364361014,"""@panjf2000 可以的,谢谢啦""",gitlab:GithubUser:29452204,2018-09-28T06:05:58.000+00:00
-gitlab:GithubIssue:1:425409255,gitlab:GithubIssue:1:356703393,"""@panjf2000  我提交了一个pr,你看下是否合理?我自己跑了上面的用例,没有问题。效率方面我还没有具体测试。""",gitlab:GithubUser:12890888,2018-09-28T11:41:08.000+00:00
-gitlab:GithubIssue:1:425423023,gitlab:GithubIssue:1:356703393,"""@liyonglion 我看修改的代码应该是正确的,但是有两个问题:\r\n1. 要正确测试你pr,你要把ants_test.go里import ants的路径改成你自己的路径;\r\n2.你现在只修改了pool.go的代码,麻烦把pool_func.go里相应的地方也优化一下。""",gitlab:GithubUser:7496278,2018-09-28T12:41:27.000+00:00
-gitlab:GithubIssue:1:439792581,gitlab:GithubIssue:1:382039050,"""GOMAXPROCS你可以理解成是G-P-M模型中的M的数量,也就是最大并行数。""",gitlab:GithubUser:7496278,2018-11-19T07:10:47.000+00:00
-gitlab:GithubIssue:1:439793939,gitlab:GithubIssue:1:381941219,"""release的确有这个问题,目前还没有比较好的办法,只是等待定时销毁的那个goroutine去释放内存,你要是有兴趣可以再想想有没有更好的办法,可以提个pr""",gitlab:GithubUser:7496278,2018-11-19T07:18:05.000+00:00
-gitlab:GithubIssue:1:440207809,gitlab:GithubIssue:1:382574800,"""https://github.com/panjf2000/ants/blob/711dbdb7a222771ce15aaee1bb7b7c6e9731f208/pool.go#L119""",gitlab:GithubUser:5668717,2018-11-20T09:41:24.000+00:00
-gitlab:GithubIssue:1:440263871,gitlab:GithubIssue:1:382574800,"""这里可以讨论下,是否可以在任务函数里通过闭包的形式,将结果存入channel,满足你的需求?""",gitlab:GithubUser:7496278,2018-11-20T12:56:13.000+00:00
-gitlab:GithubIssue:1:440500490,gitlab:GithubIssue:1:382574800,"""> 这里可以讨论下,是否可以在任务函数里通过闭包的形式,将结果存入channel,满足你的需求?\r\n\r\n可以的。但不仅仅如此,最重要的是想得到哪条消息失败了,方便进行下次延时处理或丢回队列。""",gitlab:GithubUser:5668717,2018-11-21T02:00:22.000+00:00
-gitlab:GithubIssue:1:440541883,gitlab:GithubIssue:1:382574800,"""目前可以通过参数来传入处理失败的chan\r\n\r\ntype msg struct {\r\n……\r\nFailed chan<- *msg\r\n}\r\n\r\n// payload == &msg\r\npool,_:= NewPoolWithFunc(10,func(payload interface{}) error{\r\n……\r\n// 失败的话payload 发送到 Failed chan\r\n})\r\n\r\npool.Serve(msg)""",gitlab:GithubUser:7931755,2018-11-21T05:57:51.000+00:00
-gitlab:GithubIssue:1:440605531,gitlab:GithubIssue:1:382574800,"""> 目前可以通过参数来传入处理失败的chan\r\n> \r\n> type msg struct {\r\n> ……\r\n> Failed chan<- *msg\r\n> }\r\n> \r\n> // payload == &msg\r\n> pool,_:= NewPoolWithFunc(10,func(payload interface{}) error{\r\n> ……\r\n> // 失败的话payload 发送到 Failed chan\r\n> })\r\n> \r\n> pool.Serve(msg)\r\n\r\n我目前的做法是没有用 `NewPoolWithFunc()`,而是用的 `ants.NewPool()`,控制整个服务只有一个`pool`,所有的任务都是从大`pool`里取:\r\n\r\n```\r\nfunc (w *Worker) Register(fn func() error, opts ... [...]
-gitlab:GithubIssue:1:440876192,gitlab:GithubIssue:1:382574800,"""错误返回,按照ants的设计,其实应该是异步的,目前没办法直接return error到调用的函数里,所以我觉得就算是处理也应该是异步的方式;至于任务依赖,目前想到的有两种办法:1.回调函数;2.消息通知(通过channel或消息队列),至于是不是要把这些复杂的逻辑加到ants里,有待商榷,或者你也可以推一个pr,大家一起探讨下~~""",gitlab:GithubUser:7496278,2018-11-22T01:09:56.000+00:00
-gitlab:GithubIssue:1:442366878,gitlab:GithubIssue:1:381941219,"""在 pool里面加上一个 waitgroup,每次 启动一个 work,调用 waitgroup.Add(),协程执行完了就执行waitgroup.Done()。在release时候调用waitgroup.Wait()。最后再回收空闲 worker。不过b如果 worker 对于的 func 执行时间过长,会导致release一直等待。""",gitlab:GithubUser:32898629,2018-11-28T08:48:17.000+00:00
-gitlab:GithubIssue:1:445462719,gitlab:GithubIssue:1:388907811,"""你的go版本是多少?""",gitlab:GithubUser:7496278,2018-12-08T14:20:26.000+00:00
-gitlab:GithubIssue:1:445496131,gitlab:GithubIssue:1:388907811,"""go version go1.11.1 darwin/amd64\r\n\r\n我也尝试了将几个参数调小一点,结果都是 Semaphore 和 AntsPool 量级上都是差不多的""",gitlab:GithubUser:720086,2018-12-08T22:56:54.000+00:00
-gitlab:GithubIssue:1:445815378,gitlab:GithubIssue:1:388907811,"""嗯,的确是一个量级。\r\nants的优势是:\r\n1. 内存消耗会小(并发量大的时候几乎可以节省一半的内存量);\r\n2. goroutine常驻内存(定时清理长时间空置的goroutine,按最后使用时间排序,最久未使用的goroutine最先被清理,进一步降低资源消耗);\r\n3. ants pool更加灵活可控,可动态调整pool size、手动销毁pool;\r\n4. 还有各类方法获取正在运行的goroutine数量、可用的goroutine数量,使并发程序更精确可控;\r\n......""",gitlab:GithubUser:7496278,2018-12-10T13:30:04.000+00:00
-gitlab:GithubIssue:1:446447291,gitlab:GithubIssue:1:388907811,"""好的,怎么样测试内存消耗呢?按我理解大家活跃的 go routines 是一样的数目,为什么 ants 的内存消耗会小呢?""",gitlab:GithubUser:720086,2018-12-12T03:18:44.000+00:00
-gitlab:GithubIssue:1:446453643,gitlab:GithubIssue:1:388907811,"""加上benchmem=true参数;至于为什么内存会更小,是因为在pool里的goroutines是常驻内存的,新的任务是复用goroutine的,而用sema的话只是限制了活跃的goroutine数量,并没有复用,新的任务还是会生成新的goroutine。""",gitlab:GithubUser:7496278,2018-12-12T03:58:29.000+00:00
-gitlab:GithubIssue:1:456022133,gitlab:GithubIssue:1:401277739,"""合理的需求,可以加。我这两天加下。""",gitlab:GithubUser:7496278,2019-01-21T10:21:24.000+00:00
-gitlab:GithubIssue:1:456022560,gitlab:GithubIssue:1:401277739,"""你要有兴趣也可以自己做,然后提个PR。""",gitlab:GithubUser:7496278,2019-01-21T10:22:39.000+00:00
-gitlab:GithubIssue:1:459948887,gitlab:GithubIssue:1:405951301,"""@jiashiwen \r\nIt works on my side, pls make sure that you run the example on top of the latest ants code, thanks.""",gitlab:GithubUser:7496278,2019-02-02T09:03:51.000+00:00
-gitlab:GithubIssue:1:468919580,gitlab:GithubIssue:1:413968505,"""不会的,incRunning操作总是在比较大小之后才发生的。""",gitlab:GithubUser:7496278,2019-03-02T13:14:05.000+00:00
-gitlab:GithubIssue:1:471299071,gitlab:GithubIssue:1:419183961,"""server接收的并发请求量有多大?""",gitlab:GithubUser:7496278,2019-03-10T13:18:01.000+00:00
-gitlab:GithubIssue:1:471869506,gitlab:GithubIssue:1:419268851,"""加锁后资源消耗会增加,性能会下降很多,所以是加锁确保池数量还是不加锁保证性能呢?""",gitlab:GithubUser:29243953,2019-03-12T06:06:39.000+00:00
+gitlab:GithubIssue:1:409800144,gitlab:GithubIssue:1:346842831,"""这里freeSignal和idleWorkers的数量是绝对匹配的,也就是说,只要freeSignal有值那么idleWorkers里肯定有可用worker可以取出来,putWorker就是把可用worker放回idleWorkers,每次都会塞一个值进freeSignal,还有每次从idleWorkers里取一个worker都要取出freeSignal对应的一个值,不存在有可用worker却被freeSignal阻塞""",gitlab:GithubUser:1:7496278,2018-08-02T04:13:09.000+00:00
+gitlab:GithubIssue:1:410141732,gitlab:GithubIssue:1:347255859,"""切片如下\r\n\r\n这里等待锁\r\n9913 @ 0x42c73a 0x42c7ee 0x43cf64 0x43cc7d 0x46dfe8 0x7b28e0 0x7b2be5 0x4591f1\r\n#\t0x43cc7c\tsync.runtime_SemacquireMutex+0x3c\t\t\t\tE:/go/src/runtime/sema.go:71\r\n#\t0x46dfe7\tsync.(*Mutex).Lock+0x107\t\t\t\t\tE:/go/src/sync/mutex.go:134\r\n#\t0x7b28df\tmp/vendor/github.com/panjf2000/ants.(*Pool).putWorker+0x6f\tF:/gowork/src/mp/vendor/github.com/panjf2000/ants/pool.go:229\r\n#\t0x7b2be4\tmp/vendor [...]
+gitlab:GithubIssue:1:410143221,gitlab:GithubIssue:1:347255859,"""加了锁之后有下标溢出了。。。\r\npanic: runtime error: index out of range\r\n\r\ngoroutine 7 [running]:\r\nmp/vendor/github.com/panjf2000/ants.(*Pool).getWorker(0xc4200b6460, 0xc4202a6e01)\r\n\tF:/gowork/src/mp/vendor/github.com/panjf2000/ants/pool.go:213 +0x2ce\r\nmp/vendor/github.com/panjf2000/ants.(*Pool).Submit(0xc4200b6460, 0xc4223d47d0, 0x0, 0x0)\r\n\tF:/gowork/src/mp/vendor/github.com/panjf2000/ants/pool.go:125 +0x62\r\n""",gitlab: [...]
+gitlab:GithubIssue:1:410147487,gitlab:GithubIssue:1:347255859,"""@lovelly 我查了源码,怎么行数和你说的有点对不上,你的代码更新到最新了吗?""",gitlab:GithubUser:1:7496278,2018-08-03T05:21:03.000+00:00
+gitlab:GithubIssue:1:410170764,gitlab:GithubIssue:1:347255859,"""是最新的代码,我有添加一些print 所以行数不一样,这确实是一个bug 9913个协程阻塞在了 putWorker 很久很久。,。。。""",gitlab:GithubUser:1:13118848,2018-08-03T07:33:21.000+00:00
+gitlab:GithubIssue:1:410173358,gitlab:GithubIssue:1:347255859,"""![image](https://user-images.githubusercontent.com/13118848/43630582-44f48000-9733-11e8-936d-9cb0d4145204.png)\r\n 我idleWorkers 为空的, 但是我有n个协程阻塞在了 204行的\t<-p.freeSignal, 这时候来了一个worker被放入idleWorkers, 很巧的是一个协程在putWorker结束锁后,在190行的p.lock.Lock()拿到了锁,这时候 n := len(idleWorkers) - 1 结果是0 这个协程很高兴的进入了接下来的else分支, 然而不幸发生了,p.freeSignal的信号确被早已等在 204行的若干个协程中的一个拿走了, 那么 可怜的协程拿到了锁, 确无法等到 p.freeSignal  p.freeSignal要拿到锁才能产生信号, 然后就。,。。""",gitlab [...]
+gitlab:GithubIssue:1:410204870,gitlab:GithubIssue:1:347255859,"""@lovelly 检查了一下,的确可能会有这个问题,这两天我会修复;\r\n另外,我测试的时候试过1000w的量都没发现过这个问题,可能是我每个任务的执行时间太短了,所以我想问下你的任务量有多大以及每个任务的耗时大概是多少?""",gitlab:GithubUser:1:7496278,2018-08-03T09:51:15.000+00:00
+gitlab:GithubIssue:1:410205295,gitlab:GithubIssue:1:347255859,"""我任务耗时从0秒到60秒之间。。。""",gitlab:GithubUser:1:13118848,2018-08-03T09:53:00.000+00:00
+gitlab:GithubIssue:1:410267195,gitlab:GithubIssue:1:347255859,"""@lovelly 应该已经修复了,可以再试试""",gitlab:GithubUser:1:7496278,2018-08-03T14:15:45.000+00:00
+gitlab:GithubIssue:1:410290418,gitlab:GithubIssue:1:346842831,"""具体问题可以看 #6 """,gitlab:GithubUser:1:7496278,2018-08-03T15:32:00.000+00:00
+gitlab:GithubIssue:1:411342200,gitlab:GithubIssue:1:348630179,"""@huiwq1990 谢谢指出,今天会修复这个问题。""",gitlab:GithubUser:1:7496278,2018-08-08T09:17:30.000+00:00
+gitlab:GithubIssue:1:411369513,gitlab:GithubIssue:1:348630179,"""@huiwq1990 应该解决了,可以再试试""",gitlab:GithubUser:1:7496278,2018-08-08T11:06:55.000+00:00
+gitlab:GithubIssue:1:411965696,gitlab:GithubIssue:1:348630179,"""嗯,解决了""",gitlab:GithubUser:1:4555057,2018-08-10T03:35:53.000+00:00
+gitlab:GithubIssue:1:411969260,gitlab:GithubIssue:1:348630179,"""@huiwq1990 好的,那我关掉这个issue了。""",gitlab:GithubUser:1:7496278,2018-08-10T04:06:04.000+00:00
+gitlab:GithubIssue:1:418287926,gitlab:GithubIssue:1:356703393,"""会导致很多任务长时间在阻塞,至于cpu飙升应该不会""",gitlab:GithubUser:1:7496278,2018-09-04T08:40:06.000+00:00
+gitlab:GithubIssue:1:418290090,gitlab:GithubIssue:1:356703393,"""所以应该在goroutine中调用submit 否则会阻塞主任务""",gitlab:GithubUser:1:11763614,2018-09-04T08:47:39.000+00:00
+gitlab:GithubIssue:1:418293975,gitlab:GithubIssue:1:356703393,"""不是的,如果每一个submit都用一个goroutine那不就违背初衷了吗,这样的话你有多少个任务还是要启动多少个原生goroutine。""",gitlab:GithubUser:1:7496278,2018-09-04T09:00:55.000+00:00
+gitlab:GithubIssue:1:418297020,gitlab:GithubIssue:1:356703393,"""// Submit submits a task to this pool.\r\nfunc (p *Pool) Submit(task f) error {\r\n\tif len(p.release) > 0 {\r\n\t\treturn ErrPoolClosed\r\n\t}\r\n\tp.getWorker().task <- task\r\n\treturn nil\r\n}\r\n我是觉得p.getWorker()  阻塞不太好 ,这样主任务和pool没有彻底隔离""",gitlab:GithubUser:1:11763614,2018-09-04T09:11:37.000+00:00
+gitlab:GithubIssue:1:425014962,gitlab:GithubIssue:1:364361014,"""我晚上回去就打一下新的tag,完了我再给你回一个邮件\r\n\r\nedcismybrother <no...@github.com> 于2018年9月27日周四 下午4:32写道:\r\n\r\n> 鄙人现在在弄dep依赖管理,有用到你写的ants项目,可是你好像忘记打最新的tag了。最新的tag\r\n> 3.6是指向ed55924这个提交,git上的最新代码是af376f1b这次提交,两次提交都隔了快5个月了,看到的话,麻烦打一个最新的tag吧。(手动可怜)\r\n>\r\n> —\r\n> You are receiving this because you are subscribed to this thread.\r\n> Reply to this email directly, view it on GitHub\r\n> <https://github.com/panjf2000/ants/issues/1 [...]
+gitlab:GithubIssue:1:425018770,gitlab:GithubIssue:1:356703393,"""我觉得这个会导致cpu上升。调用Submit时,如果没有多余的worker,会一直进入这个死循环\r\n```\t\t\r\nfor {\r\n\t\t\tp.lock.Lock()\r\n\t\t\tidleWorkers = p.workers\r\n\t\t\tl := len(idleWorkers) - 1\r\n\t\t\tif l < 0 {\r\n\t\t\t\tp.lock.Unlock()\r\n\t\t\t\tcontinue\r\n\t\t\t}\r\n\t\t\tw = idleWorkers[l]\r\n\t\t\tidleWorkers[l] = nil\r\n\t\t\tp.workers = idleWorkers[:l]\r\n\t\t\tp.lock.Unlock()\r\n\t\t\tbreak\r\n\t\t}\r\n```\r\n一直会continue,直到有空闲的worker,这样会阻塞调用Sub [...]
+gitlab:GithubIssue:1:425061837,gitlab:GithubIssue:1:356703393,"""![snip20180927_3](https://user-images.githubusercontent.com/12890888/46144182-c4efe200-c28e-11e8-8e69-ffd4502e3b9e.png)\r\n\r\ncpu占用率一直接近100%\r\n\r\n![snip20180927_4](https://user-images.githubusercontent.com/12890888/46144221-ddf89300-c28e-11e8-985b-48437eb20cdc.png)\r\n""",gitlab:GithubUser:1:12890888,2018-09-27T11:53:26.000+00:00
+gitlab:GithubIssue:1:425062926,gitlab:GithubIssue:1:364361014,"""tag更新了,v3.7\r\n\r\nAndy Pan <pa...@gmail.com> 于2018年9月27日周四 下午5:00写道:\r\n\r\n> 我晚上回去就打一下新的tag,完了我再给你回一个邮件\r\n>\r\n> edcismybrother <no...@github.com> 于2018年9月27日周四 下午4:32写道:\r\n>\r\n>> 鄙人现在在弄dep依赖管理,有用到你写的ants项目,可是你好像忘记打最新的tag了。最新的tag\r\n>> 3.6是指向ed55924这个提交,git上的最新代码是af376f1b这次提交,两次提交都隔了快5个月了,看到的话,麻烦打一个最新的tag吧。(手动可怜)\r\n>>\r\n>> —\r\n>> You are receiving this because you are subscribed to this thread.\r\n>> Rep [...]
+gitlab:GithubIssue:1:425066089,gitlab:GithubIssue:1:356703393,"""@liyonglion 这个例子看起来有点极端,因为只有两个任务,pool容量是1,所以剩下那个不断在自己加锁解锁导致cpu忙,如果是多个竞争的大部分是block状态,应该不会出现这种cpu满的情况,不然你把例子改改?增加提交的任务数再看看,看看还会不会出现这种情况。""",gitlab:GithubUser:1:7496278,2018-09-27T12:07:30.000+00:00
+gitlab:GithubIssue:1:425288734,gitlab:GithubIssue:1:356703393,"""@panjf2000  ants比较适合做“短期”任务,如果存在大量的“长期”任务,很有可能导致死循环。为什么不block当前Submit的“线程”?""",gitlab:GithubUser:1:12890888,2018-09-28T01:09:40.000+00:00
+gitlab:GithubIssue:1:425293042,gitlab:GithubIssue:1:356703393,"""@liyonglion 之前有用过chan阻塞等待,但是导致了一个死锁问题:#6,后来才改成这种形式。所以我说的增加submit的任务数再测试之后也是cpu 100%吗?这个问题我现在暂时没想到比较好的解决办法,我再想想,或者你有没有比较好的想法?可以提个pr。""",gitlab:GithubUser:1:7496278,2018-09-28T01:37:17.000+00:00
+gitlab:GithubIssue:1:425331360,gitlab:GithubIssue:1:364361014,"""@panjf2000 可以的,谢谢啦""",gitlab:GithubUser:1:29452204,2018-09-28T06:05:58.000+00:00
+gitlab:GithubIssue:1:425409255,gitlab:GithubIssue:1:356703393,"""@panjf2000  我提交了一个pr,你看下是否合理?我自己跑了上面的用例,没有问题。效率方面我还没有具体测试。""",gitlab:GithubUser:1:12890888,2018-09-28T11:41:08.000+00:00
+gitlab:GithubIssue:1:425423023,gitlab:GithubIssue:1:356703393,"""@liyonglion 我看修改的代码应该是正确的,但是有两个问题:\r\n1. 要正确测试你pr,你要把ants_test.go里import ants的路径改成你自己的路径;\r\n2.你现在只修改了pool.go的代码,麻烦把pool_func.go里相应的地方也优化一下。""",gitlab:GithubUser:1:7496278,2018-09-28T12:41:27.000+00:00
+gitlab:GithubIssue:1:439792581,gitlab:GithubIssue:1:382039050,"""GOMAXPROCS你可以理解成是G-P-M模型中的M的数量,也就是最大并行数。""",gitlab:GithubUser:1:7496278,2018-11-19T07:10:47.000+00:00
+gitlab:GithubIssue:1:439793939,gitlab:GithubIssue:1:381941219,"""release的确有这个问题,目前还没有比较好的办法,只是等待定时销毁的那个goroutine去释放内存,你要是有兴趣可以再想想有没有更好的办法,可以提个pr""",gitlab:GithubUser:1:7496278,2018-11-19T07:18:05.000+00:00
+gitlab:GithubIssue:1:440207809,gitlab:GithubIssue:1:382574800,"""https://github.com/panjf2000/ants/blob/711dbdb7a222771ce15aaee1bb7b7c6e9731f208/pool.go#L119""",gitlab:GithubUser:1:5668717,2018-11-20T09:41:24.000+00:00
+gitlab:GithubIssue:1:440263871,gitlab:GithubIssue:1:382574800,"""这里可以讨论下,是否可以在任务函数里通过闭包的形式,将结果存入channel,满足你的需求?""",gitlab:GithubUser:1:7496278,2018-11-20T12:56:13.000+00:00
+gitlab:GithubIssue:1:440500490,gitlab:GithubIssue:1:382574800,"""> 这里可以讨论下,是否可以在任务函数里通过闭包的形式,将结果存入channel,满足你的需求?\r\n\r\n可以的。但不仅仅如此,最重要的是想得到哪条消息失败了,方便进行下次延时处理或丢回队列。""",gitlab:GithubUser:1:5668717,2018-11-21T02:00:22.000+00:00
+gitlab:GithubIssue:1:440541883,gitlab:GithubIssue:1:382574800,"""目前可以通过参数来传入处理失败的chan\r\n\r\ntype msg struct {\r\n……\r\nFailed chan<- *msg\r\n}\r\n\r\n// payload == &msg\r\npool,_:= NewPoolWithFunc(10,func(payload interface{}) error{\r\n……\r\n// 失败的话payload 发送到 Failed chan\r\n})\r\n\r\npool.Serve(msg)""",gitlab:GithubUser:1:7931755,2018-11-21T05:57:51.000+00:00
+gitlab:GithubIssue:1:440605531,gitlab:GithubIssue:1:382574800,"""> 目前可以通过参数来传入处理失败的chan\r\n> \r\n> type msg struct {\r\n> ……\r\n> Failed chan<- *msg\r\n> }\r\n> \r\n> // payload == &msg\r\n> pool,_:= NewPoolWithFunc(10,func(payload interface{}) error{\r\n> ……\r\n> // 失败的话payload 发送到 Failed chan\r\n> })\r\n> \r\n> pool.Serve(msg)\r\n\r\n我目前的做法是没有用 `NewPoolWithFunc()`,而是用的 `ants.NewPool()`,控制整个服务只有一个`pool`,所有的任务都是从大`pool`里取:\r\n\r\n```\r\nfunc (w *Worker) Register(fn func() error, opts ... [...]
+gitlab:GithubIssue:1:440876192,gitlab:GithubIssue:1:382574800,"""错误返回,按照ants的设计,其实应该是异步的,目前没办法直接return error到调用的函数里,所以我觉得就算是处理也应该是异步的方式;至于任务依赖,目前想到的有两种办法:1.回调函数;2.消息通知(通过channel或消息队列),至于是不是要把这些复杂的逻辑加到ants里,有待商榷,或者你也可以推一个pr,大家一起探讨下~~""",gitlab:GithubUser:1:7496278,2018-11-22T01:09:56.000+00:00
+gitlab:GithubIssue:1:442366878,gitlab:GithubIssue:1:381941219,"""在 pool里面加上一个 waitgroup,每次 启动一个 work,调用 waitgroup.Add(),协程执行完了就执行waitgroup.Done()。在release时候调用waitgroup.Wait()。最后再回收空闲 worker。不过b如果 worker 对于的 func 执行时间过长,会导致release一直等待。""",gitlab:GithubUser:1:32898629,2018-11-28T08:48:17.000+00:00
+gitlab:GithubIssue:1:445462719,gitlab:GithubIssue:1:388907811,"""你的go版本是多少?""",gitlab:GithubUser:1:7496278,2018-12-08T14:20:26.000+00:00
+gitlab:GithubIssue:1:445496131,gitlab:GithubIssue:1:388907811,"""go version go1.11.1 darwin/amd64\r\n\r\n我也尝试了将几个参数调小一点,结果都是 Semaphore 和 AntsPool 量级上都是差不多的""",gitlab:GithubUser:1:720086,2018-12-08T22:56:54.000+00:00
+gitlab:GithubIssue:1:445815378,gitlab:GithubIssue:1:388907811,"""嗯,的确是一个量级。\r\nants的优势是:\r\n1. 内存消耗会小(并发量大的时候几乎可以节省一半的内存量);\r\n2. goroutine常驻内存(定时清理长时间空置的goroutine,按最后使用时间排序,最久未使用的goroutine最先被清理,进一步降低资源消耗);\r\n3. ants pool更加灵活可控,可动态调整pool size、手动销毁pool;\r\n4. 还有各类方法获取正在运行的goroutine数量、可用的goroutine数量,使并发程序更精确可控;\r\n......""",gitlab:GithubUser:1:7496278,2018-12-10T13:30:04.000+00:00
+gitlab:GithubIssue:1:446447291,gitlab:GithubIssue:1:388907811,"""好的,怎么样测试内存消耗呢?按我理解大家活跃的 go routines 是一样的数目,为什么 ants 的内存消耗会小呢?""",gitlab:GithubUser:1:720086,2018-12-12T03:18:44.000+00:00
+gitlab:GithubIssue:1:446453643,gitlab:GithubIssue:1:388907811,"""加上benchmem=true参数;至于为什么内存会更小,是因为在pool里的goroutines是常驻内存的,新的任务是复用goroutine的,而用sema的话只是限制了活跃的goroutine数量,并没有复用,新的任务还是会生成新的goroutine。""",gitlab:GithubUser:1:7496278,2018-12-12T03:58:29.000+00:00
+gitlab:GithubIssue:1:456022133,gitlab:GithubIssue:1:401277739,"""合理的需求,可以加。我这两天加下。""",gitlab:GithubUser:1:7496278,2019-01-21T10:21:24.000+00:00
+gitlab:GithubIssue:1:456022560,gitlab:GithubIssue:1:401277739,"""你要有兴趣也可以自己做,然后提个PR。""",gitlab:GithubUser:1:7496278,2019-01-21T10:22:39.000+00:00
+gitlab:GithubIssue:1:459948887,gitlab:GithubIssue:1:405951301,"""@jiashiwen \r\nIt works on my side, pls make sure that you run the example on top of the latest ants code, thanks.""",gitlab:GithubUser:1:7496278,2019-02-02T09:03:51.000+00:00
+gitlab:GithubIssue:1:468919580,gitlab:GithubIssue:1:413968505,"""不会的,incRunning操作总是在比较大小之后才发生的。""",gitlab:GithubUser:1:7496278,2019-03-02T13:14:05.000+00:00
+gitlab:GithubIssue:1:471299071,gitlab:GithubIssue:1:419183961,"""server接收的并发请求量有多大?""",gitlab:GithubUser:1:7496278,2019-03-10T13:18:01.000+00:00
+gitlab:GithubIssue:1:471869506,gitlab:GithubIssue:1:419268851,"""加锁后资源消耗会增加,性能会下降很多,所以是加锁确保池数量还是不加锁保证性能呢?""",gitlab:GithubUser:1:29243953,2019-03-12T06:06:39.000+00:00
diff --git a/plugins/github/e2e/snapshot_tables/issues.csv b/plugins/github/e2e/snapshot_tables/issues.csv
index 477c87e7..2368875d 100644
--- a/plugins/github/e2e/snapshot_tables/issues.csv
+++ b/plugins/github/e2e/snapshot_tables/issues.csv
@@ -1,27 +1,27 @@
 id,url,icon_url,issue_key,title,description,epic_key,type,status,original_status,story_point,resolution_date,created_date,updated_date,lead_time_minutes,parent_issue_id,priority,original_estimate_minutes,time_spent_minutes,time_remaining_minutes,creator_id,creator_name,assignee_id,assignee_name,severity,component
-gitlab:GithubIssue:1:346842831,https://github.com/panjf2000/ants/issues/5,,5,关于 <-p.freeSignal 的疑惑,"""Hi,\r\n    我阅读了源码,对 `<-p.freeSignal` 这句代码有疑惑。 这句代码出现在了多个地方,freeSignal 的作用英文注释我是理解的,并且知道在 `putWorker` 中才进行 `p.freeSignal <- sig{}`\r\n\r\n对于下面的代码\r\n```\r\nfunc (p *Pool) getWorker() *Worker {\r\n\tvar w *Worker\r\n\twaiting := false\r\n\r\n\tp.lock.Lock()\r\n\tidleWorkers := p.workers\r\n\tn := len(idleWorkers) - 1\r\n\tif n < 0 { // 说明 pool中没有worker了\r\n\t\twaiting = p.Running() >= p.Ca [...]
-gitlab:GithubIssue:1:347255859,https://github.com/panjf2000/ants/issues/6,,6,死锁bug,"""func (p *Pool) getWorker() *Worker  这个函数的 199行 \r\n必须先解锁在加锁, 要不然会产生死锁\r\n\r\n\tp.lock.Unlock()\r\n\t\t<-p.freeSignal\r\n\t\tp.lock.Lock()""",,BUG,DONE,,0,2018-08-04T10:18:41.000+00:00,2018-08-03T04:32:28.000+00:00,2018-08-04T10:18:41.000+00:00,1786,,,0,0,0,gitlab:GithubUser:13118848,lovelly,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:348630179,https://github.com/panjf2000/ants/issues/7,,7,清理过期协程报错,"""你好,非常感谢提供这么好用的工具包。我在使用ants时,发现报异常。结果见下图\r\n![image](https://user-images.githubusercontent.com/4555057/43823431-98384444-9b21-11e8-880c-7458b931734a.png)\r\n日志是我在periodicallyPurge里加的调试信息\r\n![image](https://user-images.githubusercontent.com/4555057/43823534-e3c624a8-9b21-11e8-96c6-512e3e08db22.png)\r\n\r\n### 原因分析\r\n\r\n我认为可能原因是没有处理n==0的情况\r\n```\r\nif n > 0 {\r\n\tn++\r\n\tp.workers = idleWorkers[n: [...]
-gitlab:GithubIssue:1:356703393,https://github.com/panjf2000/ants/issues/10,,10,高并发下设定较小的worker数量问题,"""会存在cpu飚升的问题吧?""",,,DONE,,0,2018-09-29T11:45:00.000+00:00,2018-09-04T08:26:55.000+00:00,2018-09-29T11:45:00.000+00:00,36198,,,0,0,0,gitlab:GithubUser:11763614,Moonlight-Zhao,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:364361014,https://github.com/panjf2000/ants/issues/12,,12,潘少,更新下tag吧,"""鄙人现在在弄dep依赖管理,有用到你写的ants项目,可是你好像忘记打最新的tag了。最新的tag 3.6是指向ed55924这个提交,git上的最新代码是af376f1b这次提交,两次提交都隔了快5个月了,看到的话,麻烦打一个最新的tag吧。(手动可怜)""",,,DONE,,0,2018-09-28T06:05:58.000+00:00,2018-09-27T08:32:25.000+00:00,2019-04-21T08:19:58.000+00:00,1293,,,0,0,0,gitlab:GithubUser:29452204,edcismybrother,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:381941219,https://github.com/panjf2000/ants/issues/17,,17,关于优雅退出的问题,"""关于这个package优雅退出的问题,我看了一下Release的代码:\r\n\r\n`\r\n\t// Release Closed this pool.\r\n\tfunc (p *PoolWithFunc) Release() error {\r\n\t\tp.once.Do(func() {\r\n\t\t\tp.release <- sig{}\r\n\t\t\tp.lock.Lock()\r\n\t\t\tidleWorkers := p.workers\r\n\t\t\tfor i, w := range idleWorkers {\r\n\t\t\t\tw.args <- nil\r\n\t\t\t\tidleWorkers[i] = nil\r\n\t\t\t}\r\n\t\t\tp.workers = nil\r\n\t\t\tp.lock.Unlock()\r\n\t [...]
-gitlab:GithubIssue:1:382039050,https://github.com/panjf2000/ants/issues/18,,18,go协程的理解,"""你好楼主,向您请教一个协程和线程的问题,协程基于go进程调度,线程基于系统内核调度,调度协程的过程是先调度线程后获得资源再去调度协程。\""官方解释: GOMAXPROCS sets the maximum number of CPUs that can be executing simultaneously。限制cpu数,本质上是什么,限制并行数?,并行数即同时执行数量?,执行单元即线程?,即限制最大并行线程数量?\""""",,,DONE,,0,2018-12-03T03:53:50.000+00:00,2018-11-19T02:59:53.000+00:00,2018-12-03T03:53:50.000+00:00,20213,,,0,0,0,gitlab:GithubUser:13944100,LinuxForYQH,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:382574800,https://github.com/panjf2000/ants/issues/20,,20,是否考虑任务支持回调函数处理失败的逻辑和任务依赖,"""#""",,,DONE,,0,2019-01-25T15:34:03.000+00:00,2018-11-20T09:36:02.000+00:00,2019-01-25T15:34:03.000+00:00,95398,,,0,0,0,gitlab:GithubUser:5668717,kklinan,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:388907811,https://github.com/panjf2000/ants/issues/21,,21,Benchmark 下直接使用 Semaphore 似乎更快呢?,"""简单跑了一下 benchmark,Semaphore 更快且很简单\r\n\r\n```bash\r\n$ go test -bench .\r\ngoos: darwin\r\ngoarch: amd64\r\npkg: github.com/panjf2000/ants\r\nBenchmarkGoroutineWithFunc-4   \t       1\t3445631705 ns/op\r\nBenchmarkSemaphoreWithFunc-4   \t       1\t1037219073 ns/op\r\nBenchmarkAntsPoolWithFunc-4    \t       1\t1138053222 ns/op\r\nBenchmarkGoroutine-4           \t       2\t 731 [...]
-gitlab:GithubIssue:1:401277739,https://github.com/panjf2000/ants/issues/22,,22,是否考虑 worker 中添加  PanicHandler ?,"""比方说在创建 Pool 的时候传入一个 PanicHandler,然后在每个 worker 创建的时候 recover 之后传给 PanicHandler  处理。否则池子里如果发生 panic 会直接挂掉整个进程。""",,,DONE,,0,2019-01-22T05:41:34.000+00:00,2019-01-21T10:06:56.000+00:00,2019-01-22T05:41:34.000+00:00,1174,,,0,0,0,gitlab:GithubUser:8923413,choleraehyq,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:402513849,https://github.com/panjf2000/ants/issues/24,,24,提交任务不阻塞,"""`Pool.Submit`和`PoolWithFunc.Server`提交任务,如果没有空的worker,会一直阻塞。建议增加不阻塞的接口,当前失败时直接返回错误。""",,,DONE,,0,2019-08-20T10:56:30.000+00:00,2019-01-24T02:24:13.000+00:00,2019-08-20T10:56:30.000+00:00,300032,,,0,0,0,gitlab:GithubUser:5044825,tenfyzhong,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:405951301,https://github.com/panjf2000/ants/issues/25,,25,use example errors,"""./antstest.go:37:14: cannot use syncCalculateSum (type func()) as type ants.f in argument to ants.Submit\r\n./antstest.go:45:35: cannot use func literal (type func(interface {})) as type ants.pf in argument to ants.NewPoolWithFunc\r\n""",,,DONE,,0,2019-02-04T09:11:52.000+00:00,2019-02-02T05:43:38.000+00:00,2019-02-04T09:11:52.000+00:00,3088,,,0,0,0,gitlab:GithubUser:5244267,jiashiwen,gitl [...]
-gitlab:GithubIssue:1:413968505,https://github.com/panjf2000/ants/issues/26,,26,running可能大于cap的问题,"""running与cap的比较判断与incRuning分开执行的, 可能会出现running大于cap的问题?\r\n`func (p *Pool) retrieveWorker() *Worker {\r\n\tvar w *Worker\r\n\r\n\tp.lock.Lock()\r\n\tidleWorkers := p.workers\r\n\tn := len(idleWorkers) - 1\r\n\tif n >= 0 {\r\n\t\tw = idleWorkers[n]\r\n\t\tidleWorkers[n] = nil\r\n\t\tp.workers = idleWorkers[:n]\r\n\t\tp.lock.Unlock()\r\n\t} else if p.Running() < p.Cap() {\r\n\t\tp.lock.Unlock [...]
-gitlab:GithubIssue:1:419183961,https://github.com/panjf2000/ants/issues/27,,27,为何goroutine一直上不去,用户量也打不上去,"""为何goroutine一直上不去,用户量也打不上去\r\n是我用的有问题吗?\r\n\r\nwebsocket server\r\nhttps://github.com/im-ai/pushm/blob/master/learn/goroutine/goroutinepoolwebsocket.go\r\n\r\nwebsocket cient\r\nhttps://github.com/im-ai/pushm/blob/master/learn/goroutine/goroutinepoolwebsocketclient.go\r\n""",,,DONE,,0,2019-04-05T14:05:20.000+00:00,2019-03-10T13:08:52.000+00:00,2019-04-05T14:05:20.000+00:00,37496,,,0 [...]
-gitlab:GithubIssue:1:419268851,https://github.com/panjf2000/ants/issues/28,,28,cap 和 running 比较的问题,"""这是我在 Playground 上面的代码 https://play.golang.org/p/D94YUU3FnX6\r\natomic 只能保证自增自减时的原子操作,在比较过程中,其他线程对变量进行了操作 比较过程并无感知,所以这个比较结果 不是完全正确的,想要实现 比较的数量完全正确,只能在修改和比较两个值的地方加锁\r\n像 #26 说的是对的""",,,DONE,,0,2019-08-22T16:27:37.000+00:00,2019-03-11T02:24:41.000+00:00,2019-08-22T16:27:37.000+00:00,237002,,,0,0,0,gitlab:GithubUser:29243953,naiba,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:424634533,https://github.com/panjf2000/ants/issues/29,,29,任务传参,"""你好,你的项目太酷了👍\r\n\r\nhttps://github.com/panjf2000/ants/blob/master/pool.go#L124 貌似不支持带参数的任务, 请问传参是用闭包的方式吗?\r\n""",,,DONE,,0,2019-03-25T09:32:11.000+00:00,2019-03-24T16:52:21.000+00:00,2019-03-25T09:45:05.000+00:00,999,,,0,0,0,gitlab:GithubUser:8509898,prprprus,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:429972115,https://github.com/panjf2000/ants/issues/31,,31,Add go.mod,"""""",,,DONE,,0,2019-04-08T09:45:31.000+00:00,2019-04-05T23:50:36.000+00:00,2019-10-17T03:12:19.000+00:00,3474,,,0,0,0,gitlab:GithubUser:48135919,tsatke,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:433564955,https://github.com/panjf2000/ants/issues/32,,32,关于版本问题,我发现小版本(0.0.x)这种更新就会不向下兼容?,"""如题,我感觉这样不好。\r\n\r\n功能版本号不向下兼容能理解\r\n\r\n修复问题的版本号也不向下兼容,难以理解。""",,,DONE,,0,2019-04-21T07:16:26.000+00:00,2019-04-16T03:16:02.000+00:00,2019-04-21T07:16:26.000+00:00,7440,,,0,0,0,gitlab:GithubUser:7931755,zplzpl,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:434069015,https://github.com/panjf2000/ants/issues/33,,33,support semantic versioning.,"""建议将发布的tag兼容为semantic versioning,vX.Y.Z。go modules对此支持比较良好。\r\nhttps://semver.org/\r\nhttps://research.swtch.com/vgo-import""",,,DONE,,0,2019-04-21T08:25:20.000+00:00,2019-04-17T02:55:11.000+00:00,2019-04-21T08:25:20.000+00:00,6090,,,0,0,0,gitlab:GithubUser:1284892,jjeffcaii,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:435486645,https://github.com/panjf2000/ants/issues/34,,34,Important announcement about <ants> from author !!!,"""**Dear users of `ants`:**\r\nI am apologetically telling you that I have to dump all tags which already presents in `ants` repository.\r\n\r\nThe reason why I'm doing so is to standardize the version management with `Semantic Versioning`, which will make a formal and clear dependency management in go, for go modules, godep, or glide, etc. So I decide to st [...]
-gitlab:GithubIssue:1:461280653,https://github.com/panjf2000/ants/issues/35,,35,worker exit on panic,"""个人认为PanicHandler设计不妥。\r\n1.无PanicHandler时,抛出给外面的不是panic,外层感受不到。\r\n2.无论有没有PanicHandler,都会导致worker退出,最终pool阻塞住全部任务。""",,,DONE,,0,2019-08-17T20:33:10.000+00:00,2019-06-27T03:11:49.000+00:00,2019-08-17T20:33:10.000+00:00,74481,,,0,0,0,gitlab:GithubUser:38849208,king526,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:462631417,https://github.com/panjf2000/ants/issues/37,,37,请不要再随意变更版本号了。。。,"""之前用的是 3.9.9,结果今天构建出了问题,一看发现这个版本没了,变成 1.0.0。这种变更完全不考虑现有用户的情况。希望以后不要随意变更了""",,,DONE,,0,2019-07-01T12:37:55.000+00:00,2019-07-01T10:17:15.000+00:00,2019-07-02T10:17:31.000+00:00,140,,,0,0,0,gitlab:GithubUser:8923413,choleraehyq,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:472125082,https://github.com/panjf2000/ants/issues/38,,38,retrieveWorker与revertWorker之间会导致死锁,"""func (p *Pool) retrieveWorker() *Worker {\r\n\tvar w *Worker\r\n\r\n\t**p.lock.Lock()**\r\n\tidleWorkers := p.workers\r\n\tn := len(idleWorkers) - 1\r\n\tif n >= 0 {\r\n\t\tw = idleWorkers[n]\r\n\t\tidleWorkers[n] = nil\r\n\t\tp.workers = idleWorkers[:n]\r\n\t\tp.lock.Unlock()\r\n\t} else if p.Running() < p.Cap() {\r\n\t\tp.lock.Unlock()\r\n\t\tif cacheWorker := p.workerCa [...]
-gitlab:GithubIssue:1:483164833,https://github.com/panjf2000/ants/issues/42,,42,带选项的初始化函数,我觉得用 functional options 更好一点,"""以下是示意代码\r\n如果用 functional options,原来的写法是\r\n```\r\nants.NewPool(10)\r\n```\r\n新的写法,如果不加 option,写法是不变的,因为 options 是作为可变参数传进去的。如果要加 option,只需要改成\r\n```\r\nants.NewPool(10, ants.WithNonblocking(true))\r\n```\r\n这样。\r\n\r\n现在是直接传一个 Option 结构体进去,所有的地方都要改,感觉很不优雅。\r\n具体 functional options 的设计可以看 rob pike 的一篇博客 https://commandcenter.blogspot.com/2014/01/self-referential-functi [...]
-gitlab:GithubIssue:1:483736247,https://github.com/panjf2000/ants/issues/43,,43,1.3.0 是不兼容更新,"""Pool 里那些暴露出来的字段(PanicHandler 之类的)都没了,这是一个不兼容更新,根据语义化版本的要求要发大版本。""",,,DONE,,0,2019-08-22T13:22:10.000+00:00,2019-08-22T02:29:34.000+00:00,2019-08-22T13:22:10.000+00:00,652,,,0,0,0,gitlab:GithubUser:8923413,choleraehyq,gitlab:GithubUser:0,,,
-gitlab:GithubIssue:1:484311063,https://github.com/panjf2000/ants/issues/44,,44,1.1.1 -> 1.2.0 也是不兼容更新,"""Pool.Release 的返回值没了""",,,DONE,,0,2019-08-25T06:36:14.000+00:00,2019-08-23T03:27:38.000+00:00,2019-08-25T06:36:14.000+00:00,3068,,,0,0,0,gitlab:GithubUser:8923413,choleraehyq,gitlab:GithubUser:0,,,
+gitlab:GithubIssue:1:346842831,https://github.com/panjf2000/ants/issues/5,,5,关于 <-p.freeSignal 的疑惑,"""Hi,\r\n    我阅读了源码,对 `<-p.freeSignal` 这句代码有疑惑。 这句代码出现在了多个地方,freeSignal 的作用英文注释我是理解的,并且知道在 `putWorker` 中才进行 `p.freeSignal <- sig{}`\r\n\r\n对于下面的代码\r\n```\r\nfunc (p *Pool) getWorker() *Worker {\r\n\tvar w *Worker\r\n\twaiting := false\r\n\r\n\tp.lock.Lock()\r\n\tidleWorkers := p.workers\r\n\tn := len(idleWorkers) - 1\r\n\tif n < 0 { // 说明 pool中没有worker了\r\n\t\twaiting = p.Running() >= p.Ca [...]
+gitlab:GithubIssue:1:347255859,https://github.com/panjf2000/ants/issues/6,,6,死锁bug,"""func (p *Pool) getWorker() *Worker  这个函数的 199行 \r\n必须先解锁在加锁, 要不然会产生死锁\r\n\r\n\tp.lock.Unlock()\r\n\t\t<-p.freeSignal\r\n\t\tp.lock.Lock()""",,BUG,DONE,,0,2018-08-04T10:18:41.000+00:00,2018-08-03T04:32:28.000+00:00,2018-08-04T10:18:41.000+00:00,1786,,,0,0,0,gitlab:GithubUser:1:13118848,lovelly,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:348630179,https://github.com/panjf2000/ants/issues/7,,7,清理过期协程报错,"""你好,非常感谢提供这么好用的工具包。我在使用ants时,发现报异常。结果见下图\r\n![image](https://user-images.githubusercontent.com/4555057/43823431-98384444-9b21-11e8-880c-7458b931734a.png)\r\n日志是我在periodicallyPurge里加的调试信息\r\n![image](https://user-images.githubusercontent.com/4555057/43823534-e3c624a8-9b21-11e8-96c6-512e3e08db22.png)\r\n\r\n### 原因分析\r\n\r\n我认为可能原因是没有处理n==0的情况\r\n```\r\nif n > 0 {\r\n\tn++\r\n\tp.workers = idleWorkers[n: [...]
+gitlab:GithubIssue:1:356703393,https://github.com/panjf2000/ants/issues/10,,10,高并发下设定较小的worker数量问题,"""会存在cpu飚升的问题吧?""",,,DONE,,0,2018-09-29T11:45:00.000+00:00,2018-09-04T08:26:55.000+00:00,2018-09-29T11:45:00.000+00:00,36198,,,0,0,0,gitlab:GithubUser:1:11763614,Moonlight-Zhao,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:364361014,https://github.com/panjf2000/ants/issues/12,,12,潘少,更新下tag吧,"""鄙人现在在弄dep依赖管理,有用到你写的ants项目,可是你好像忘记打最新的tag了。最新的tag 3.6是指向ed55924这个提交,git上的最新代码是af376f1b这次提交,两次提交都隔了快5个月了,看到的话,麻烦打一个最新的tag吧。(手动可怜)""",,,DONE,,0,2018-09-28T06:05:58.000+00:00,2018-09-27T08:32:25.000+00:00,2019-04-21T08:19:58.000+00:00,1293,,,0,0,0,gitlab:GithubUser:1:29452204,edcismybrother,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:381941219,https://github.com/panjf2000/ants/issues/17,,17,关于优雅退出的问题,"""关于这个package优雅退出的问题,我看了一下Release的代码:\r\n\r\n`\r\n\t// Release Closed this pool.\r\n\tfunc (p *PoolWithFunc) Release() error {\r\n\t\tp.once.Do(func() {\r\n\t\t\tp.release <- sig{}\r\n\t\t\tp.lock.Lock()\r\n\t\t\tidleWorkers := p.workers\r\n\t\t\tfor i, w := range idleWorkers {\r\n\t\t\t\tw.args <- nil\r\n\t\t\t\tidleWorkers[i] = nil\r\n\t\t\t}\r\n\t\t\tp.workers = nil\r\n\t\t\tp.lock.Unlock()\r\n\t [...]
+gitlab:GithubIssue:1:382039050,https://github.com/panjf2000/ants/issues/18,,18,go协程的理解,"""你好楼主,向您请教一个协程和线程的问题,协程基于go进程调度,线程基于系统内核调度,调度协程的过程是先调度线程后获得资源再去调度协程。\""官方解释: GOMAXPROCS sets the maximum number of CPUs that can be executing simultaneously。限制cpu数,本质上是什么,限制并行数?,并行数即同时执行数量?,执行单元即线程?,即限制最大并行线程数量?\""""",,,DONE,,0,2018-12-03T03:53:50.000+00:00,2018-11-19T02:59:53.000+00:00,2018-12-03T03:53:50.000+00:00,20213,,,0,0,0,gitlab:GithubUser:1:13944100,LinuxForYQH,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:382574800,https://github.com/panjf2000/ants/issues/20,,20,是否考虑任务支持回调函数处理失败的逻辑和任务依赖,"""#""",,,DONE,,0,2019-01-25T15:34:03.000+00:00,2018-11-20T09:36:02.000+00:00,2019-01-25T15:34:03.000+00:00,95398,,,0,0,0,gitlab:GithubUser:1:5668717,kklinan,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:388907811,https://github.com/panjf2000/ants/issues/21,,21,Benchmark 下直接使用 Semaphore 似乎更快呢?,"""简单跑了一下 benchmark,Semaphore 更快且很简单\r\n\r\n```bash\r\n$ go test -bench .\r\ngoos: darwin\r\ngoarch: amd64\r\npkg: github.com/panjf2000/ants\r\nBenchmarkGoroutineWithFunc-4   \t       1\t3445631705 ns/op\r\nBenchmarkSemaphoreWithFunc-4   \t       1\t1037219073 ns/op\r\nBenchmarkAntsPoolWithFunc-4    \t       1\t1138053222 ns/op\r\nBenchmarkGoroutine-4           \t       2\t 731 [...]
+gitlab:GithubIssue:1:401277739,https://github.com/panjf2000/ants/issues/22,,22,是否考虑 worker 中添加  PanicHandler ?,"""比方说在创建 Pool 的时候传入一个 PanicHandler,然后在每个 worker 创建的时候 recover 之后传给 PanicHandler  处理。否则池子里如果发生 panic 会直接挂掉整个进程。""",,,DONE,,0,2019-01-22T05:41:34.000+00:00,2019-01-21T10:06:56.000+00:00,2019-01-22T05:41:34.000+00:00,1174,,,0,0,0,gitlab:GithubUser:1:8923413,choleraehyq,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:402513849,https://github.com/panjf2000/ants/issues/24,,24,提交任务不阻塞,"""`Pool.Submit`和`PoolWithFunc.Server`提交任务,如果没有空的worker,会一直阻塞。建议增加不阻塞的接口,当前失败时直接返回错误。""",,,DONE,,0,2019-08-20T10:56:30.000+00:00,2019-01-24T02:24:13.000+00:00,2019-08-20T10:56:30.000+00:00,300032,,,0,0,0,gitlab:GithubUser:1:5044825,tenfyzhong,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:405951301,https://github.com/panjf2000/ants/issues/25,,25,use example errors,"""./antstest.go:37:14: cannot use syncCalculateSum (type func()) as type ants.f in argument to ants.Submit\r\n./antstest.go:45:35: cannot use func literal (type func(interface {})) as type ants.pf in argument to ants.NewPoolWithFunc\r\n""",,,DONE,,0,2019-02-04T09:11:52.000+00:00,2019-02-02T05:43:38.000+00:00,2019-02-04T09:11:52.000+00:00,3088,,,0,0,0,gitlab:GithubUser:1:5244267,jiashiwen,gi [...]
+gitlab:GithubIssue:1:413968505,https://github.com/panjf2000/ants/issues/26,,26,running可能大于cap的问题,"""running与cap的比较判断与incRuning分开执行的, 可能会出现running大于cap的问题?\r\n`func (p *Pool) retrieveWorker() *Worker {\r\n\tvar w *Worker\r\n\r\n\tp.lock.Lock()\r\n\tidleWorkers := p.workers\r\n\tn := len(idleWorkers) - 1\r\n\tif n >= 0 {\r\n\t\tw = idleWorkers[n]\r\n\t\tidleWorkers[n] = nil\r\n\t\tp.workers = idleWorkers[:n]\r\n\t\tp.lock.Unlock()\r\n\t} else if p.Running() < p.Cap() {\r\n\t\tp.lock.Unlock [...]
+gitlab:GithubIssue:1:419183961,https://github.com/panjf2000/ants/issues/27,,27,为何goroutine一直上不去,用户量也打不上去,"""为何goroutine一直上不去,用户量也打不上去\r\n是我用的有问题吗?\r\n\r\nwebsocket server\r\nhttps://github.com/im-ai/pushm/blob/master/learn/goroutine/goroutinepoolwebsocket.go\r\n\r\nwebsocket cient\r\nhttps://github.com/im-ai/pushm/blob/master/learn/goroutine/goroutinepoolwebsocketclient.go\r\n""",,,DONE,,0,2019-04-05T14:05:20.000+00:00,2019-03-10T13:08:52.000+00:00,2019-04-05T14:05:20.000+00:00,37496,,,0 [...]
+gitlab:GithubIssue:1:419268851,https://github.com/panjf2000/ants/issues/28,,28,cap 和 running 比较的问题,"""这是我在 Playground 上面的代码 https://play.golang.org/p/D94YUU3FnX6\r\natomic 只能保证自增自减时的原子操作,在比较过程中,其他线程对变量进行了操作 比较过程并无感知,所以这个比较结果 不是完全正确的,想要实现 比较的数量完全正确,只能在修改和比较两个值的地方加锁\r\n像 #26 说的是对的""",,,DONE,,0,2019-08-22T16:27:37.000+00:00,2019-03-11T02:24:41.000+00:00,2019-08-22T16:27:37.000+00:00,237002,,,0,0,0,gitlab:GithubUser:1:29243953,naiba,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:424634533,https://github.com/panjf2000/ants/issues/29,,29,任务传参,"""你好,你的项目太酷了👍\r\n\r\nhttps://github.com/panjf2000/ants/blob/master/pool.go#L124 貌似不支持带参数的任务, 请问传参是用闭包的方式吗?\r\n""",,,DONE,,0,2019-03-25T09:32:11.000+00:00,2019-03-24T16:52:21.000+00:00,2019-03-25T09:45:05.000+00:00,999,,,0,0,0,gitlab:GithubUser:1:8509898,prprprus,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:429972115,https://github.com/panjf2000/ants/issues/31,,31,Add go.mod,"""""",,,DONE,,0,2019-04-08T09:45:31.000+00:00,2019-04-05T23:50:36.000+00:00,2019-10-17T03:12:19.000+00:00,3474,,,0,0,0,gitlab:GithubUser:1:48135919,tsatke,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:433564955,https://github.com/panjf2000/ants/issues/32,,32,关于版本问题,我发现小版本(0.0.x)这种更新就会不向下兼容?,"""如题,我感觉这样不好。\r\n\r\n功能版本号不向下兼容能理解\r\n\r\n修复问题的版本号也不向下兼容,难以理解。""",,,DONE,,0,2019-04-21T07:16:26.000+00:00,2019-04-16T03:16:02.000+00:00,2019-04-21T07:16:26.000+00:00,7440,,,0,0,0,gitlab:GithubUser:1:7931755,zplzpl,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:434069015,https://github.com/panjf2000/ants/issues/33,,33,support semantic versioning.,"""建议将发布的tag兼容为semantic versioning,vX.Y.Z。go modules对此支持比较良好。\r\nhttps://semver.org/\r\nhttps://research.swtch.com/vgo-import""",,,DONE,,0,2019-04-21T08:25:20.000+00:00,2019-04-17T02:55:11.000+00:00,2019-04-21T08:25:20.000+00:00,6090,,,0,0,0,gitlab:GithubUser:1:1284892,jjeffcaii,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:435486645,https://github.com/panjf2000/ants/issues/34,,34,Important announcement about <ants> from author !!!,"""**Dear users of `ants`:**\r\nI am apologetically telling you that I have to dump all tags which already presents in `ants` repository.\r\n\r\nThe reason why I'm doing so is to standardize the version management with `Semantic Versioning`, which will make a formal and clear dependency management in go, for go modules, godep, or glide, etc. So I decide to st [...]
+gitlab:GithubIssue:1:461280653,https://github.com/panjf2000/ants/issues/35,,35,worker exit on panic,"""个人认为PanicHandler设计不妥。\r\n1.无PanicHandler时,抛出给外面的不是panic,外层感受不到。\r\n2.无论有没有PanicHandler,都会导致worker退出,最终pool阻塞住全部任务。""",,,DONE,,0,2019-08-17T20:33:10.000+00:00,2019-06-27T03:11:49.000+00:00,2019-08-17T20:33:10.000+00:00,74481,,,0,0,0,gitlab:GithubUser:1:38849208,king526,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:462631417,https://github.com/panjf2000/ants/issues/37,,37,请不要再随意变更版本号了。。。,"""之前用的是 3.9.9,结果今天构建出了问题,一看发现这个版本没了,变成 1.0.0。这种变更完全不考虑现有用户的情况。希望以后不要随意变更了""",,,DONE,,0,2019-07-01T12:37:55.000+00:00,2019-07-01T10:17:15.000+00:00,2019-07-02T10:17:31.000+00:00,140,,,0,0,0,gitlab:GithubUser:1:8923413,choleraehyq,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:472125082,https://github.com/panjf2000/ants/issues/38,,38,retrieveWorker与revertWorker之间会导致死锁,"""func (p *Pool) retrieveWorker() *Worker {\r\n\tvar w *Worker\r\n\r\n\t**p.lock.Lock()**\r\n\tidleWorkers := p.workers\r\n\tn := len(idleWorkers) - 1\r\n\tif n >= 0 {\r\n\t\tw = idleWorkers[n]\r\n\t\tidleWorkers[n] = nil\r\n\t\tp.workers = idleWorkers[:n]\r\n\t\tp.lock.Unlock()\r\n\t} else if p.Running() < p.Cap() {\r\n\t\tp.lock.Unlock()\r\n\t\tif cacheWorker := p.workerCa [...]
+gitlab:GithubIssue:1:483164833,https://github.com/panjf2000/ants/issues/42,,42,带选项的初始化函数,我觉得用 functional options 更好一点,"""以下是示意代码\r\n如果用 functional options,原来的写法是\r\n```\r\nants.NewPool(10)\r\n```\r\n新的写法,如果不加 option,写法是不变的,因为 options 是作为可变参数传进去的。如果要加 option,只需要改成\r\n```\r\nants.NewPool(10, ants.WithNonblocking(true))\r\n```\r\n这样。\r\n\r\n现在是直接传一个 Option 结构体进去,所有的地方都要改,感觉很不优雅。\r\n具体 functional options 的设计可以看 rob pike 的一篇博客 https://commandcenter.blogspot.com/2014/01/self-referential-functi [...]
+gitlab:GithubIssue:1:483736247,https://github.com/panjf2000/ants/issues/43,,43,1.3.0 是不兼容更新,"""Pool 里那些暴露出来的字段(PanicHandler 之类的)都没了,这是一个不兼容更新,根据语义化版本的要求要发大版本。""",,,DONE,,0,2019-08-22T13:22:10.000+00:00,2019-08-22T02:29:34.000+00:00,2019-08-22T13:22:10.000+00:00,652,,,0,0,0,gitlab:GithubUser:1:8923413,choleraehyq,gitlab:GithubUser:1:0,,,
+gitlab:GithubIssue:1:484311063,https://github.com/panjf2000/ants/issues/44,,44,1.1.1 -> 1.2.0 也是不兼容更新,"""Pool.Release 的返回值没了""",,,DONE,,0,2019-08-25T06:36:14.000+00:00,2019-08-23T03:27:38.000+00:00,2019-08-25T06:36:14.000+00:00,3068,,,0,0,0,gitlab:GithubUser:1:8923413,choleraehyq,gitlab:GithubUser:1:0,,,
diff --git a/plugins/github/e2e/snapshot_tables/pull_request_comments.csv b/plugins/github/e2e/snapshot_tables/pull_request_comments.csv
index d1c18c3b..ee25dc09 100644
--- a/plugins/github/e2e/snapshot_tables/pull_request_comments.csv
+++ b/plugins/github/e2e/snapshot_tables/pull_request_comments.csv
@@ -1,47 +1,47 @@
 id,pull_request_id,body,user_id,created_date,commit_sha,position
-gitlab:GithubPullRequest:1:407675431,gitlab:GithubPullRequest:1:203756736,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/4?src=pr&el=h1) Report\n> Merging [#4](https://codecov.io/gh/panjf2000/ants/pull/4?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/f5b37d0798a8e4c6780a1e08270fa50e979aa1d7?src=pr&el=desc) will **not change** coverage.\n> The diff coverage is `100%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pull/4/graphs/tr [...]
-gitlab:GithubPullRequest:1:407714136,gitlab:GithubPullRequest:1:203756736,"""@barryz 改的不错,不过有一点需要商榷,那个预分配的大小,之前benchmark我记得1000w也只需要用到7w多,这样的话预分配5w对于大部分场景其实有点浪费,你有没有用修改后的代码benchmark一下,每次allocs/op应该是变大了吧""",gitlab:GithubUser:7496278,2018-07-25T10:49:44.000+00:00,,0
-gitlab:GithubPullRequest:1:407755528,gitlab:GithubPullRequest:1:203756736,"""@panjf2000  因为从压测结果来看, 1000W的场景下goroutine池的作用很明显, 尤其是在节省内存开销方面,所以在选择默认worker数量时,取了一个相对较大的值。 下面是benchmark 对比\r\n\r\nmaster:\r\n\r\n```\r\ngoos: linux\r\ngoarch: amd64\r\nBenchmarkGoroutineWithFunc-4           1        15079030287 ns/op       723120296 B/op  10176159 allocs/op\r\nPASS\r\nok      command-line-arguments  15.106s\r\n```\r\n\r\nPR:\r\n```\r\ngoos: linux\r\ngoarch: amd64\r\nBenchmarkGoroutineWithFunc-4 [...]
-gitlab:GithubPullRequest:1:407764945,gitlab:GithubPullRequest:1:203756736,"""@barryz 这样看起来预分配似乎没有太大的内存优势,相反在其他数量的任务量场景下可能还会有点浪费,这样吧,要不你先把预分配内存这一块的暂时移除,然后我合一下优化代码的部分,至于预分配内存这一块,后续再继续讨论下看看有没有能兼顾的办法""",gitlab:GithubUser:7496278,2018-07-25T14:02:41.000+00:00,,0
-gitlab:GithubPullRequest:1:416794440,gitlab:GithubPullRequest:1:211603583,"""@hongli-my 不好意思,我没太懂你的意图?能麻烦说详细点吗?""",gitlab:GithubUser:7496278,2018-08-29T01:39:23.000+00:00,,0
-gitlab:GithubPullRequest:1:416794871,gitlab:GithubPullRequest:1:211603583,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/8?src=pr&el=h1) Report\n> Merging [#8](https://codecov.io/gh/panjf2000/ants/pull/8?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/666635c65d8d3bb1223b819325e0bd23c81f2733?src=pr&el=desc) will **decrease** coverage by `1.24%`.\n> The diff coverage is `100%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pull/8/ [...]
-gitlab:GithubPullRequest:1:416803651,gitlab:GithubPullRequest:1:211603583,"""```n := 0\r\n\t\tfor i, w := range idleWorkers {\r\n\t\t\tif currentTime.Sub(w.recycleTime) <= p.expiryDuration {\r\n\t\t\t\tbreak\r\n\t\t\t}\r\n\t\t\tn = i\r\n\t\t\tw.args <- nil\r\n\t\t\tidleWorkers[i] = nil\r\n\t\t}\r\n\t\tn++\r\n\t\tif n >= len(idleWorkers) {\r\n\t\t\tp.workers = idleWorkers[:0]\r\n\t\t} else {\r\n\t\t\tp.workers = idleWorkers[n:]\r\n\t\t}```\r\nfor 循环中,如果for 循环没有满足条件,n 并没有复制,此时n ++,   n 变为1 [...]
-gitlab:GithubPullRequest:1:416818094,gitlab:GithubPullRequest:1:211603583,"""@hongli-my 嗯,我知道了,但是你的修改似乎不完整,我已经在develop分支改了一版,要不你看下那个分支,然后按照那个再改一下,然后我再merge""",gitlab:GithubUser:7496278,2018-08-29T04:11:17.000+00:00,,0
-gitlab:GithubPullRequest:1:421884048,gitlab:GithubPullRequest:1:211603583,"""对于worker中的chan应该也需要close吧,当协程数量增大时,这种也是一种消耗""",gitlab:GithubUser:29241786,2018-09-17T03:37:44.000+00:00,,0
-gitlab:GithubPullRequest:1:425423544,gitlab:GithubPullRequest:1:218939809,"""@liyonglion 我看修改的代码应该是正确的,但是有两个问题:\r\n1. 要正确测试你pr,你要把ants_test.go里import ants的路径改成你自己的路径;\r\n2. 你现在只修改了pool.go的代码,麻烦把pool_func.go里相应的地方也优化一下。\r\n\r\n你重新修改一下pr,然后通过测试,我就merge了。""",gitlab:GithubUser:7496278,2018-09-28T12:43:30.000+00:00,,0
-gitlab:GithubPullRequest:1:425428914,gitlab:GithubPullRequest:1:218939809,"""我又仔细地想了想,在putWorker方法中,调用p.cond.Signal()之前,p.lock已经解锁了,如果这时候被\r\n![image](https://user-images.githubusercontent.com/7496278/46209831-824b0a00-c361-11e8-9109-609d21bab572.png)\r\n这里获得锁,则空闲队列中的刚刚放入的worker会被取出,这时候p.cond.Wait()再获得锁去队列中取worker的时候就会取不到,len(p.workers) - 1就会是-1,会报错:index out of range,和https://github.com/panjf2000/ants/issues/6 相似的问题,所以p.cond.Signal()应该放在putWorker中的p.lock.Lock()和p.lock.Unlock()之间。\r\n""" [...]
-gitlab:GithubPullRequest:1:425431081,gitlab:GithubPullRequest:1:218939809,"""我明天仔细研究下。如果这个地方的死锁不好解决,其实可以使用另外一把锁,专门给条件变量使用。""",gitlab:GithubUser:12890888,2018-09-28T13:12:08.000+00:00,,0
-gitlab:GithubPullRequest:1:425432498,gitlab:GithubPullRequest:1:218939809,"""单一操作变量最好不要有多个锁,这样引发死锁的概率会非常高。""",gitlab:GithubUser:7496278,2018-09-28T13:17:44.000+00:00,,0
-gitlab:GithubPullRequest:1:425438107,gitlab:GithubPullRequest:1:218939809,"""新的锁只给条件变量使用,其他任何地方都不会使用。如果怕死锁,明天我封装一层,pool层只有一把锁。""",gitlab:GithubUser:12890888,2018-09-28T13:37:48.000+00:00,,0
-gitlab:GithubPullRequest:1:425439137,gitlab:GithubPullRequest:1:218939809,"""封装一层后,按照你的思路修改应该就可以了。""",gitlab:GithubUser:12890888,2018-09-28T13:41:20.000+00:00,,0
-gitlab:GithubPullRequest:1:425608265,gitlab:GithubPullRequest:1:218939809,"""看了下代码,你说的没错。我在测试下性能方面""",gitlab:GithubUser:12890888,2018-09-29T02:22:39.000+00:00,,0
-gitlab:GithubPullRequest:1:425609411,gitlab:GithubPullRequest:1:218939809,"""![image](https://user-images.githubusercontent.com/7496278/46240052-34bbb500-c3d4-11e8-809b-46b429039aee.png)\r\n你这改的有问题,取出来后没有对workers队列缩容,现在Travis CI整个卡住了""",gitlab:GithubUser:7496278,2018-09-29T02:41:56.000+00:00,,0
-gitlab:GithubPullRequest:1:425609608,gitlab:GithubPullRequest:1:218939809,"""嗯,到时候我会补上。容我再想想""",gitlab:GithubUser:12890888,2018-09-29T02:45:23.000+00:00,,0
-gitlab:GithubPullRequest:1:425622339,gitlab:GithubPullRequest:1:218939809,"""性能测试如下:\r\n100w的并发,5w的goroutine\r\n![snip20180929_3](https://user-images.githubusercontent.com/12890888/46242225-93932580-c3f8-11e8-841c-fc7fc620313d.png)\r\n\r\n![snip20180929_5](https://user-images.githubusercontent.com/12890888/46242227-9beb6080-c3f8-11e8-80fa-5d01da9aba19.png)\r\n""",gitlab:GithubUser:12890888,2018-09-29T07:02:56.000+00:00,,0
-gitlab:GithubPullRequest:1:425622437,gitlab:GithubPullRequest:1:218939809,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/13?src=pr&el=h1) Report\n> Merging [#13](https://codecov.io/gh/panjf2000/ants/pull/13?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/af376f1b7b59dc488458bcecd4273f0fcde33c55?src=pr&el=desc) will **decrease** coverage by `90.38%`.\n> The diff coverage is `5%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pull/ [...]
-gitlab:GithubPullRequest:1:425623081,gitlab:GithubPullRequest:1:218939809,"""@panjf2000  这个覆盖率怎么看?""",gitlab:GithubUser:12890888,2018-09-29T07:16:02.000+00:00,,0
-gitlab:GithubPullRequest:1:425632550,gitlab:GithubPullRequest:1:218939809,"""怎么会有负数。。。""",gitlab:GithubUser:7496278,2018-09-29T09:53:47.000+00:00,,0
-gitlab:GithubPullRequest:1:425632613,gitlab:GithubPullRequest:1:218939809,"""而且你那个取出worker之后还是没有对队列进行缩容吧""",gitlab:GithubUser:7496278,2018-09-29T09:54:48.000+00:00,,0
-gitlab:GithubPullRequest:1:425632632,gitlab:GithubPullRequest:1:218939809,"""这个我没玩过。。。。""",gitlab:GithubUser:12890888,2018-09-29T09:55:07.000+00:00,,0
-gitlab:GithubPullRequest:1:425632777,gitlab:GithubPullRequest:1:218939809,"""@panjf2000  我缩容了,具体哪个地方?""",gitlab:GithubUser:12890888,2018-09-29T09:57:34.000+00:00,,0
-gitlab:GithubPullRequest:1:425637776,gitlab:GithubPullRequest:1:218939809,"""@liyonglion 我看错了,缩容的补上了,这块没什么问题了,关于覆盖率这块我明天再查查。。。""",gitlab:GithubUser:7496278,2018-09-29T11:25:56.000+00:00,,0
-gitlab:GithubPullRequest:1:425637938,gitlab:GithubPullRequest:1:218939809,"""哦,我知道了,应该是那个import路径的问题导致的,那我先merge一下代码""",gitlab:GithubUser:7496278,2018-09-29T11:29:28.000+00:00,,0
-gitlab:GithubPullRequest:1:425896318,gitlab:GithubPullRequest:1:219363161,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/14?src=pr&el=h1) Report\n> Merging [#14](https://codecov.io/gh/panjf2000/ants/pull/14?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/1b62696050b7030106291980d5220f886b017eff?src=pr&el=desc) will **decrease** coverage by `2.12%`.\n> The diff coverage is `100%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pull [...]
-gitlab:GithubPullRequest:1:425906970,gitlab:GithubPullRequest:1:219363161,"""thanks for your correction and could you also modify the pool_func.go cuz there is also the same useless statement in that file. i will accept this pr after your modification is done, thanks.""",gitlab:GithubUser:7496278,2018-10-01T13:27:04.000+00:00,,0
-gitlab:GithubPullRequest:1:426537013,gitlab:GithubPullRequest:1:219936521,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/15?src=pr&el=h1) Report\n> Merging [#15](https://codecov.io/gh/panjf2000/ants/pull/15?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/29730bb70343924a2f56a13a9799611dd1cd27fd?src=pr&el=desc) will **decrease** coverage by `0.84%`.\n> The diff coverage is `n/a`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pull/ [...]
-gitlab:GithubPullRequest:1:426596957,gitlab:GithubPullRequest:1:219936521,"""@egonelbre thanks for your interest in this repository and i got some puzzles.\r\nfirstly, i don't understand why you use both the chan struct{} and sync.WaitGroup at once, that seems a bit excessive cuz waitgroup and chan did the same thing.\r\nsecondly, method BenchmarkGoroutine was design to test throughput so it should run without waitgroup.""",gitlab:GithubUser:7496278,2018-10-03T11:05:45.000+00:00,,0
-gitlab:GithubPullRequest:1:426604764,gitlab:GithubPullRequest:1:219936521,"""Hi, semaphore acts as protection to avoid starting too many goroutines at once. `WaitGroup` is used to wait for everything to complete.\r\n\r\n`BenchmarkGoroutine` doesn't wait for all the goroutines to finish, so you are testing goroutine startup speed rather than throughput. It's somewhat unclear what you mean by \""throughput\"" in this case, but either way you would need to wait for all goroutines to finish, [...]
-gitlab:GithubPullRequest:1:429609579,gitlab:GithubPullRequest:1:222703171,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/16?src=pr&el=h1) Report\n> Merging [#16](https://codecov.io/gh/panjf2000/ants/pull/16?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/711dbdb7a222771ce15aaee1bb7b7c6e9731f208?src=pr&el=desc) will **decrease** coverage by `2.03%`.\n> The diff coverage is `0%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pull/1 [...]
-gitlab:GithubPullRequest:1:433821356,gitlab:GithubPullRequest:1:211603583,"""这种bugfix是不是应该赶紧修了?""",gitlab:GithubUser:8923413,2018-10-29T08:10:59.000+00:00,,0
-gitlab:GithubPullRequest:1:434126048,gitlab:GithubPullRequest:1:211603583,"""@choleraehyq 这个很早就已经修复了这个pr一直忘了关。""",gitlab:GithubUser:7496278,2018-10-30T00:10:32.000+00:00,,0
-gitlab:GithubPullRequest:1:434126349,gitlab:GithubPullRequest:1:211603583,"""@MrDragon1122 一般来说channel是不需要显式close的,只要没有goroutine持有channel,相关资源会自动释放。""",gitlab:GithubUser:7496278,2018-10-30T00:12:13.000+00:00,,0
-gitlab:GithubPullRequest:1:439758381,gitlab:GithubPullRequest:1:231840723,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/19?src=pr&el=h1) Report\n> Merging [#19](https://codecov.io/gh/panjf2000/ants/pull/19?src=pr&el=desc) into [develop](https://codecov.io/gh/panjf2000/ants/commit/92acf74bb71c1dc1758c61346c88325284978b3e?src=pr&el=desc) will **increase** coverage by `0.02%`.\n> The diff coverage is `100%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pul [...]
-gitlab:GithubPullRequest:1:439758480,gitlab:GithubPullRequest:1:231840723,"""我自己写了测试示例\r\n重复\r\nants.NewPoolWithFunc()\r\n然后\r\n进行Resize(0) && Release\r\n但仍发现内存泄漏现象,追溯到了NewTicker没有进行Stop可能导致\r\n\r\nflat  flat%   sum%        cum   cum%\r\n\r\n 7168.57kB 77.60% 77.60%  7168.57kB 77.60%  time.NewTicker\r\n\r\n\r\n\r\n""",gitlab:GithubUser:7931755,2018-11-19T03:06:50.000+00:00,,0
-gitlab:GithubPullRequest:1:439781607,gitlab:GithubPullRequest:1:231840723,"""突然看到一个PR有更完善的解决方式,不知道为啥没有PR成功""",gitlab:GithubUser:7931755,2018-11-19T06:07:43.000+00:00,,0
-gitlab:GithubPullRequest:1:439793352,gitlab:GithubPullRequest:1:231840723,"""另外一个pr跟你大概是完成类似的功能,不过那个failed之后作者就没再更新了,所以就没有merge,你要是有时间不如参考下他的代码再优化下?就放到这个pr里。""",gitlab:GithubUser:7496278,2018-11-19T07:14:58.000+00:00,,0
-gitlab:GithubPullRequest:1:456033956,gitlab:GithubPullRequest:1:246250598,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/23?src=pr&el=h1) Report\n> Merging [#23](https://codecov.io/gh/panjf2000/ants/pull/23?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/812dd4e01075be3cf97429a43abaf6837908cdcd?src=pr&el=desc) will **decrease** coverage by `1.02%`.\n> The diff coverage is `71.42%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pu [...]
-gitlab:GithubPullRequest:1:456071084,gitlab:GithubPullRequest:1:246250598,"""@choleraehyq \r\nbuild失败了,解决一下?""",gitlab:GithubUser:7496278,2019-01-21T13:18:19.000+00:00,,0
-gitlab:GithubPullRequest:1:456261758,gitlab:GithubPullRequest:1:246250598,"""@panjf2000 这是测试覆盖率的问题吧,我已经测了设置 PanicHandler 的情况了,不设置的情况一测就 panic 了,而且是在一个 worker 里 panic,没法 recover""",gitlab:GithubUser:8923413,2019-01-22T03:45:04.000+00:00,,0
-gitlab:GithubPullRequest:1:456270386,gitlab:GithubPullRequest:1:246250598,"""@choleraehyq \r\n三点:\r\n1. CI failed是因为TestPanicHandler测试失败了\r\n![image](https://user-images.githubusercontent.com/7496278/51513040-ba5fe680-1e43-11e9-92eb-6af6fa1242c9.png)\r\n2. 在Worker的recover里面,需要再加一个w.pool.decRunning(),因为panic之后这个goroutine就销毁了,所以要更新pool中的可用worker数量\r\n3. 麻烦在pool_func.go和worker_func.go里面也相应地加上PanicHandler的逻辑以及对应的unit tests\r\n\r\nThanks.""",gitlab:GithubUser:7496278,2019-01-22T04:50:28.000+00:00,,0
-gitlab:GithubPullRequest:1:456273052,gitlab:GithubPullRequest:1:246250598,"""@panjf2000 thanks,修了""",gitlab:GithubUser:8923413,2019-01-22T05:10:00.000+00:00,,0
-gitlab:GithubPullRequest:1:456277710,gitlab:GithubPullRequest:1:246250598,"""Thanks for your contributions to `ants`!""",gitlab:GithubUser:7496278,2019-01-22T05:41:10.000+00:00,,0
+gitlab:GithubPullRequest:1:407675431,gitlab:GithubPullRequest:1:203756736,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/4?src=pr&el=h1) Report\n> Merging [#4](https://codecov.io/gh/panjf2000/ants/pull/4?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/f5b37d0798a8e4c6780a1e08270fa50e979aa1d7?src=pr&el=desc) will **not change** coverage.\n> The diff coverage is `100%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pull/4/graphs/tr [...]
+gitlab:GithubPullRequest:1:407714136,gitlab:GithubPullRequest:1:203756736,"""@barryz 改的不错,不过有一点需要商榷,那个预分配的大小,之前benchmark我记得1000w也只需要用到7w多,这样的话预分配5w对于大部分场景其实有点浪费,你有没有用修改后的代码benchmark一下,每次allocs/op应该是变大了吧""",gitlab:GithubUser:1:7496278,2018-07-25T10:49:44.000+00:00,,0
+gitlab:GithubPullRequest:1:407755528,gitlab:GithubPullRequest:1:203756736,"""@panjf2000  因为从压测结果来看, 1000W的场景下goroutine池的作用很明显, 尤其是在节省内存开销方面,所以在选择默认worker数量时,取了一个相对较大的值。 下面是benchmark 对比\r\n\r\nmaster:\r\n\r\n```\r\ngoos: linux\r\ngoarch: amd64\r\nBenchmarkGoroutineWithFunc-4           1        15079030287 ns/op       723120296 B/op  10176159 allocs/op\r\nPASS\r\nok      command-line-arguments  15.106s\r\n```\r\n\r\nPR:\r\n```\r\ngoos: linux\r\ngoarch: amd64\r\nBenchmarkGoroutineWithFunc-4 [...]
+gitlab:GithubPullRequest:1:407764945,gitlab:GithubPullRequest:1:203756736,"""@barryz 这样看起来预分配似乎没有太大的内存优势,相反在其他数量的任务量场景下可能还会有点浪费,这样吧,要不你先把预分配内存这一块的暂时移除,然后我合一下优化代码的部分,至于预分配内存这一块,后续再继续讨论下看看有没有能兼顾的办法""",gitlab:GithubUser:1:7496278,2018-07-25T14:02:41.000+00:00,,0
+gitlab:GithubPullRequest:1:416794440,gitlab:GithubPullRequest:1:211603583,"""@hongli-my 不好意思,我没太懂你的意图?能麻烦说详细点吗?""",gitlab:GithubUser:1:7496278,2018-08-29T01:39:23.000+00:00,,0
+gitlab:GithubPullRequest:1:416794871,gitlab:GithubPullRequest:1:211603583,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/8?src=pr&el=h1) Report\n> Merging [#8](https://codecov.io/gh/panjf2000/ants/pull/8?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/666635c65d8d3bb1223b819325e0bd23c81f2733?src=pr&el=desc) will **decrease** coverage by `1.24%`.\n> The diff coverage is `100%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pull/8/ [...]
+gitlab:GithubPullRequest:1:416803651,gitlab:GithubPullRequest:1:211603583,"""```n := 0\r\n\t\tfor i, w := range idleWorkers {\r\n\t\t\tif currentTime.Sub(w.recycleTime) <= p.expiryDuration {\r\n\t\t\t\tbreak\r\n\t\t\t}\r\n\t\t\tn = i\r\n\t\t\tw.args <- nil\r\n\t\t\tidleWorkers[i] = nil\r\n\t\t}\r\n\t\tn++\r\n\t\tif n >= len(idleWorkers) {\r\n\t\t\tp.workers = idleWorkers[:0]\r\n\t\t} else {\r\n\t\t\tp.workers = idleWorkers[n:]\r\n\t\t}```\r\nfor 循环中,如果for 循环没有满足条件,n 并没有复制,此时n ++,   n 变为1 [...]
+gitlab:GithubPullRequest:1:416818094,gitlab:GithubPullRequest:1:211603583,"""@hongli-my 嗯,我知道了,但是你的修改似乎不完整,我已经在develop分支改了一版,要不你看下那个分支,然后按照那个再改一下,然后我再merge""",gitlab:GithubUser:1:7496278,2018-08-29T04:11:17.000+00:00,,0
+gitlab:GithubPullRequest:1:421884048,gitlab:GithubPullRequest:1:211603583,"""对于worker中的chan应该也需要close吧,当协程数量增大时,这种也是一种消耗""",gitlab:GithubUser:1:29241786,2018-09-17T03:37:44.000+00:00,,0
+gitlab:GithubPullRequest:1:425423544,gitlab:GithubPullRequest:1:218939809,"""@liyonglion 我看修改的代码应该是正确的,但是有两个问题:\r\n1. 要正确测试你pr,你要把ants_test.go里import ants的路径改成你自己的路径;\r\n2. 你现在只修改了pool.go的代码,麻烦把pool_func.go里相应的地方也优化一下。\r\n\r\n你重新修改一下pr,然后通过测试,我就merge了。""",gitlab:GithubUser:1:7496278,2018-09-28T12:43:30.000+00:00,,0
+gitlab:GithubPullRequest:1:425428914,gitlab:GithubPullRequest:1:218939809,"""我又仔细地想了想,在putWorker方法中,调用p.cond.Signal()之前,p.lock已经解锁了,如果这时候被\r\n![image](https://user-images.githubusercontent.com/7496278/46209831-824b0a00-c361-11e8-9109-609d21bab572.png)\r\n这里获得锁,则空闲队列中的刚刚放入的worker会被取出,这时候p.cond.Wait()再获得锁去队列中取worker的时候就会取不到,len(p.workers) - 1就会是-1,会报错:index out of range,和https://github.com/panjf2000/ants/issues/6 相似的问题,所以p.cond.Signal()应该放在putWorker中的p.lock.Lock()和p.lock.Unlock()之间。\r\n""" [...]
+gitlab:GithubPullRequest:1:425431081,gitlab:GithubPullRequest:1:218939809,"""我明天仔细研究下。如果这个地方的死锁不好解决,其实可以使用另外一把锁,专门给条件变量使用。""",gitlab:GithubUser:1:12890888,2018-09-28T13:12:08.000+00:00,,0
+gitlab:GithubPullRequest:1:425432498,gitlab:GithubPullRequest:1:218939809,"""单一操作变量最好不要有多个锁,这样引发死锁的概率会非常高。""",gitlab:GithubUser:1:7496278,2018-09-28T13:17:44.000+00:00,,0
+gitlab:GithubPullRequest:1:425438107,gitlab:GithubPullRequest:1:218939809,"""新的锁只给条件变量使用,其他任何地方都不会使用。如果怕死锁,明天我封装一层,pool层只有一把锁。""",gitlab:GithubUser:1:12890888,2018-09-28T13:37:48.000+00:00,,0
+gitlab:GithubPullRequest:1:425439137,gitlab:GithubPullRequest:1:218939809,"""封装一层后,按照你的思路修改应该就可以了。""",gitlab:GithubUser:1:12890888,2018-09-28T13:41:20.000+00:00,,0
+gitlab:GithubPullRequest:1:425608265,gitlab:GithubPullRequest:1:218939809,"""看了下代码,你说的没错。我在测试下性能方面""",gitlab:GithubUser:1:12890888,2018-09-29T02:22:39.000+00:00,,0
+gitlab:GithubPullRequest:1:425609411,gitlab:GithubPullRequest:1:218939809,"""![image](https://user-images.githubusercontent.com/7496278/46240052-34bbb500-c3d4-11e8-809b-46b429039aee.png)\r\n你这改的有问题,取出来后没有对workers队列缩容,现在Travis CI整个卡住了""",gitlab:GithubUser:1:7496278,2018-09-29T02:41:56.000+00:00,,0
+gitlab:GithubPullRequest:1:425609608,gitlab:GithubPullRequest:1:218939809,"""嗯,到时候我会补上。容我再想想""",gitlab:GithubUser:1:12890888,2018-09-29T02:45:23.000+00:00,,0
+gitlab:GithubPullRequest:1:425622339,gitlab:GithubPullRequest:1:218939809,"""性能测试如下:\r\n100w的并发,5w的goroutine\r\n![snip20180929_3](https://user-images.githubusercontent.com/12890888/46242225-93932580-c3f8-11e8-841c-fc7fc620313d.png)\r\n\r\n![snip20180929_5](https://user-images.githubusercontent.com/12890888/46242227-9beb6080-c3f8-11e8-80fa-5d01da9aba19.png)\r\n""",gitlab:GithubUser:1:12890888,2018-09-29T07:02:56.000+00:00,,0
+gitlab:GithubPullRequest:1:425622437,gitlab:GithubPullRequest:1:218939809,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/13?src=pr&el=h1) Report\n> Merging [#13](https://codecov.io/gh/panjf2000/ants/pull/13?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/af376f1b7b59dc488458bcecd4273f0fcde33c55?src=pr&el=desc) will **decrease** coverage by `90.38%`.\n> The diff coverage is `5%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pull/ [...]
+gitlab:GithubPullRequest:1:425623081,gitlab:GithubPullRequest:1:218939809,"""@panjf2000  这个覆盖率怎么看?""",gitlab:GithubUser:1:12890888,2018-09-29T07:16:02.000+00:00,,0
+gitlab:GithubPullRequest:1:425632550,gitlab:GithubPullRequest:1:218939809,"""怎么会有负数。。。""",gitlab:GithubUser:1:7496278,2018-09-29T09:53:47.000+00:00,,0
+gitlab:GithubPullRequest:1:425632613,gitlab:GithubPullRequest:1:218939809,"""而且你那个取出worker之后还是没有对队列进行缩容吧""",gitlab:GithubUser:1:7496278,2018-09-29T09:54:48.000+00:00,,0
+gitlab:GithubPullRequest:1:425632632,gitlab:GithubPullRequest:1:218939809,"""这个我没玩过。。。。""",gitlab:GithubUser:1:12890888,2018-09-29T09:55:07.000+00:00,,0
+gitlab:GithubPullRequest:1:425632777,gitlab:GithubPullRequest:1:218939809,"""@panjf2000  我缩容了,具体哪个地方?""",gitlab:GithubUser:1:12890888,2018-09-29T09:57:34.000+00:00,,0
+gitlab:GithubPullRequest:1:425637776,gitlab:GithubPullRequest:1:218939809,"""@liyonglion 我看错了,缩容的补上了,这块没什么问题了,关于覆盖率这块我明天再查查。。。""",gitlab:GithubUser:1:7496278,2018-09-29T11:25:56.000+00:00,,0
+gitlab:GithubPullRequest:1:425637938,gitlab:GithubPullRequest:1:218939809,"""哦,我知道了,应该是那个import路径的问题导致的,那我先merge一下代码""",gitlab:GithubUser:1:7496278,2018-09-29T11:29:28.000+00:00,,0
+gitlab:GithubPullRequest:1:425896318,gitlab:GithubPullRequest:1:219363161,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/14?src=pr&el=h1) Report\n> Merging [#14](https://codecov.io/gh/panjf2000/ants/pull/14?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/1b62696050b7030106291980d5220f886b017eff?src=pr&el=desc) will **decrease** coverage by `2.12%`.\n> The diff coverage is `100%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pull [...]
+gitlab:GithubPullRequest:1:425906970,gitlab:GithubPullRequest:1:219363161,"""thanks for your correction and could you also modify the pool_func.go cuz there is also the same useless statement in that file. i will accept this pr after your modification is done, thanks.""",gitlab:GithubUser:1:7496278,2018-10-01T13:27:04.000+00:00,,0
+gitlab:GithubPullRequest:1:426537013,gitlab:GithubPullRequest:1:219936521,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/15?src=pr&el=h1) Report\n> Merging [#15](https://codecov.io/gh/panjf2000/ants/pull/15?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/29730bb70343924a2f56a13a9799611dd1cd27fd?src=pr&el=desc) will **decrease** coverage by `0.84%`.\n> The diff coverage is `n/a`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pull/ [...]
+gitlab:GithubPullRequest:1:426596957,gitlab:GithubPullRequest:1:219936521,"""@egonelbre thanks for your interest in this repository and i got some puzzles.\r\nfirstly, i don't understand why you use both the chan struct{} and sync.WaitGroup at once, that seems a bit excessive cuz waitgroup and chan did the same thing.\r\nsecondly, method BenchmarkGoroutine was design to test throughput so it should run without waitgroup.""",gitlab:GithubUser:1:7496278,2018-10-03T11:05:45.000+00:00,,0
+gitlab:GithubPullRequest:1:426604764,gitlab:GithubPullRequest:1:219936521,"""Hi, semaphore acts as protection to avoid starting too many goroutines at once. `WaitGroup` is used to wait for everything to complete.\r\n\r\n`BenchmarkGoroutine` doesn't wait for all the goroutines to finish, so you are testing goroutine startup speed rather than throughput. It's somewhat unclear what you mean by \""throughput\"" in this case, but either way you would need to wait for all goroutines to finish, [...]
+gitlab:GithubPullRequest:1:429609579,gitlab:GithubPullRequest:1:222703171,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/16?src=pr&el=h1) Report\n> Merging [#16](https://codecov.io/gh/panjf2000/ants/pull/16?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/711dbdb7a222771ce15aaee1bb7b7c6e9731f208?src=pr&el=desc) will **decrease** coverage by `2.03%`.\n> The diff coverage is `0%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pull/1 [...]
+gitlab:GithubPullRequest:1:433821356,gitlab:GithubPullRequest:1:211603583,"""这种bugfix是不是应该赶紧修了?""",gitlab:GithubUser:1:8923413,2018-10-29T08:10:59.000+00:00,,0
+gitlab:GithubPullRequest:1:434126048,gitlab:GithubPullRequest:1:211603583,"""@choleraehyq 这个很早就已经修复了这个pr一直忘了关。""",gitlab:GithubUser:1:7496278,2018-10-30T00:10:32.000+00:00,,0
+gitlab:GithubPullRequest:1:434126349,gitlab:GithubPullRequest:1:211603583,"""@MrDragon1122 一般来说channel是不需要显式close的,只要没有goroutine持有channel,相关资源会自动释放。""",gitlab:GithubUser:1:7496278,2018-10-30T00:12:13.000+00:00,,0
+gitlab:GithubPullRequest:1:439758381,gitlab:GithubPullRequest:1:231840723,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/19?src=pr&el=h1) Report\n> Merging [#19](https://codecov.io/gh/panjf2000/ants/pull/19?src=pr&el=desc) into [develop](https://codecov.io/gh/panjf2000/ants/commit/92acf74bb71c1dc1758c61346c88325284978b3e?src=pr&el=desc) will **increase** coverage by `0.02%`.\n> The diff coverage is `100%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pul [...]
+gitlab:GithubPullRequest:1:439758480,gitlab:GithubPullRequest:1:231840723,"""我自己写了测试示例\r\n重复\r\nants.NewPoolWithFunc()\r\n然后\r\n进行Resize(0) && Release\r\n但仍发现内存泄漏现象,追溯到了NewTicker没有进行Stop可能导致\r\n\r\nflat  flat%   sum%        cum   cum%\r\n\r\n 7168.57kB 77.60% 77.60%  7168.57kB 77.60%  time.NewTicker\r\n\r\n\r\n\r\n""",gitlab:GithubUser:1:7931755,2018-11-19T03:06:50.000+00:00,,0
+gitlab:GithubPullRequest:1:439781607,gitlab:GithubPullRequest:1:231840723,"""突然看到一个PR有更完善的解决方式,不知道为啥没有PR成功""",gitlab:GithubUser:1:7931755,2018-11-19T06:07:43.000+00:00,,0
+gitlab:GithubPullRequest:1:439793352,gitlab:GithubPullRequest:1:231840723,"""另外一个pr跟你大概是完成类似的功能,不过那个failed之后作者就没再更新了,所以就没有merge,你要是有时间不如参考下他的代码再优化下?就放到这个pr里。""",gitlab:GithubUser:1:7496278,2018-11-19T07:14:58.000+00:00,,0
+gitlab:GithubPullRequest:1:456033956,gitlab:GithubPullRequest:1:246250598,"""# [Codecov](https://codecov.io/gh/panjf2000/ants/pull/23?src=pr&el=h1) Report\n> Merging [#23](https://codecov.io/gh/panjf2000/ants/pull/23?src=pr&el=desc) into [master](https://codecov.io/gh/panjf2000/ants/commit/812dd4e01075be3cf97429a43abaf6837908cdcd?src=pr&el=desc) will **decrease** coverage by `1.02%`.\n> The diff coverage is `71.42%`.\n\n[![Impacted file tree graph](https://codecov.io/gh/panjf2000/ants/pu [...]
+gitlab:GithubPullRequest:1:456071084,gitlab:GithubPullRequest:1:246250598,"""@choleraehyq \r\nbuild失败了,解决一下?""",gitlab:GithubUser:1:7496278,2019-01-21T13:18:19.000+00:00,,0
+gitlab:GithubPullRequest:1:456261758,gitlab:GithubPullRequest:1:246250598,"""@panjf2000 这是测试覆盖率的问题吧,我已经测了设置 PanicHandler 的情况了,不设置的情况一测就 panic 了,而且是在一个 worker 里 panic,没法 recover""",gitlab:GithubUser:1:8923413,2019-01-22T03:45:04.000+00:00,,0
+gitlab:GithubPullRequest:1:456270386,gitlab:GithubPullRequest:1:246250598,"""@choleraehyq \r\n三点:\r\n1. CI failed是因为TestPanicHandler测试失败了\r\n![image](https://user-images.githubusercontent.com/7496278/51513040-ba5fe680-1e43-11e9-92eb-6af6fa1242c9.png)\r\n2. 在Worker的recover里面,需要再加一个w.pool.decRunning(),因为panic之后这个goroutine就销毁了,所以要更新pool中的可用worker数量\r\n3. 麻烦在pool_func.go和worker_func.go里面也相应地加上PanicHandler的逻辑以及对应的unit tests\r\n\r\nThanks.""",gitlab:GithubUser:1:7496278,2019-01-22T04:50:28.000 [...]
+gitlab:GithubPullRequest:1:456273052,gitlab:GithubPullRequest:1:246250598,"""@panjf2000 thanks,修了""",gitlab:GithubUser:1:8923413,2019-01-22T05:10:00.000+00:00,,0
+gitlab:GithubPullRequest:1:456277710,gitlab:GithubPullRequest:1:246250598,"""Thanks for your contributions to `ants`!""",gitlab:GithubUser:1:7496278,2019-01-22T05:41:10.000+00:00,,0
diff --git a/plugins/github/e2e/snapshot_tables/pull_requests.csv b/plugins/github/e2e/snapshot_tables/pull_requests.csv
index 263b00bd..f5142504 100644
--- a/plugins/github/e2e/snapshot_tables/pull_requests.csv
+++ b/plugins/github/e2e/snapshot_tables/pull_requests.csv
@@ -1,50 +1,50 @@
 id,base_repo_id,head_repo_id,status,title,description,url,author_name,author_id,parent_pr_id,pull_request_key,created_date,merged_date,closed_date,type,component,merge_commit_sha,head_ref,base_ref,base_commit_sha,head_commit_sha
-gitlab:GithubPullRequest:1:203756736,gitlab:GithubRepo:1:134018330,,closed,pre-allocate the capacity of the worker list,"""fix #3 \r\n* 链表实际测过, 性能相差无几, 但内存占用高了几倍\r\n* 初始化`Pool`和`PoolFunc`是给定了个默认的worker capacity\r\n* 优化了下其他代码""",https://github.com/panjf2000/ants/pull/4,barryz,gitlab:GithubUser:16658738,,4,2018-07-25T08:19:30.000+00:00,2018-07-26T02:32:41.000+00:00,2018-07-26T02:32:41.000+00:00,,,3ddd58c390b0f928a5782c235f90ad0c9c21312c,pre_allocate,master,f5b37d0798a8e4c6780a1e08270fa50e9 [...]
-gitlab:GithubPullRequest:1:211603583,gitlab:GithubRepo:1:134018330,,closed,fix goroutine leak,"""n++,  will cause  workers[0] leak""",https://github.com/panjf2000/ants/pull/8,hongli-my,gitlab:GithubUser:8597823,,8,2018-08-29T01:35:54.000+00:00,,2018-10-30T00:12:13.000+00:00,,,74ba726f34abe487b7defac6bb9bebf24d342377,dev,master,666635c65d8d3bb1223b819325e0bd23c81f2733,afd687164b13280199208ec4869709edcf02b52d
-gitlab:GithubPullRequest:1:212277907,gitlab:GithubRepo:1:134018330,,closed,Update pool.go,"""#活着的孩子不想当孤儿\r\n\tHopefully:\r\n\tchildren := []*child{C1,C2,C3,C4,C5,C6,C7}\r\n\tIn fact:\r\n\tchildren := []*child{C1,C4,C2,C3,C5,C6,C7}""",https://github.com/panjf2000/ants/pull/9,Nonnnnnnnnn,gitlab:GithubUser:42808204,,9,2018-08-31T05:29:36.000+00:00,,2018-08-31T13:40:33.000+00:00,,,f14d3f91f68d0bc23fe42aa413e98005f6575045,patch-1,master,666635c65d8d3bb1223b819325e0bd23c81f2733,2726d42ea628572 [...]
-gitlab:GithubPullRequest:1:216254598,gitlab:GithubRepo:1:134018330,,closed,graceful exit,"""graceful exit""",https://github.com/panjf2000/ants/pull/11,shanhuhai5739,gitlab:GithubUser:3794113,,11,2018-09-18T10:15:01.000+00:00,,2018-12-03T03:52:35.000+00:00,,,6a87067eb3d6440e5db17f31d4bc12ac291633f4,master,develop,833b6e29acfb2f16e3cf7fc92c79763847c319f4,a03eccc794870f0a2e55a5cb8344ea47f2a0001d
-gitlab:GithubPullRequest:1:218939809,gitlab:GithubRepo:1:134018330,,closed,解决死循环导致cpu占用率过高,"""使用了cond 条件变量来阻塞Submit goroutine。潘少,你再仔细琢磨琢磨,看下有何不妥?""",https://github.com/panjf2000/ants/pull/13,liyonglion,gitlab:GithubUser:12890888,,13,2018-09-28T11:37:28.000+00:00,2018-09-29T11:29:54.000+00:00,2018-09-29T11:29:54.000+00:00,,,9a3b5cd25344822bca7684f87d9e123890a7bf59,master,master,af376f1b7b59dc488458bcecd4273f0fcde33c55,1846b4392a3a20e6bf1a7431b67f86bd43e0f0b9
-gitlab:GithubPullRequest:1:219363161,gitlab:GithubRepo:1:134018330,,closed,Remove meaningless if statements,"""""",https://github.com/panjf2000/ants/pull/14,SimePel,gitlab:GithubUser:20608155,,14,2018-10-01T12:48:11.000+00:00,2018-10-02T13:52:27.000+00:00,2018-10-02T13:52:27.000+00:00,,,29730bb70343924a2f56a13a9799611dd1cd27fd,master,master,1b62696050b7030106291980d5220f886b017eff,5ed168767a771e3802252020b9821610380ed1a4
-gitlab:GithubPullRequest:1:219936521,gitlab:GithubRepo:1:134018330,,closed,Fixes to benchmarks and added semaphore comparison,"""Benchmark results with Param=0, as time.Sleep is not stable on Windows\r\n\r\nAlso Go 1.11 has bunch of improvements:\r\n\r\n```\r\ngoos: windows\r\ngoarch: amd64\r\npkg: github.com/panjf2000/ants\r\nBenchmarkGoroutineWithFunc-8           1        3530220300 ns/op          207472 B/op        506 allocs/op\r\nBenchmarkSemaphoreWithFunc-8           1        43919 [...]
-gitlab:GithubPullRequest:1:222703171,gitlab:GithubRepo:1:134018330,,closed,bugfix(check max pool size),"""if you limit max goroutine  to math.Maxint32 as your code `int32(pool size)`\r\nI think should check max Goroutine size, otherwise size overflow to negative?\r\n""",https://github.com/panjf2000/ants/pull/16,rikewang,gitlab:GithubUser:24841832,,16,2018-10-14T09:21:41.000+00:00,,2018-12-03T03:53:31.000+00:00,,,1399cfa28f6751f769a985206daecb56a08b2de9,bugfix_check_max_pool_size,master,7 [...]
-gitlab:GithubPullRequest:1:231840723,gitlab:GithubRepo:1:134018330,,closed,Possible memory leak because of Ticker,"""// NewTicker returns a new Ticker containing a channel that will send the\r\n// time with a period specified by the duration argument.\r\n// It adjusts the intervals or drops ticks to make up for slow receivers.\r\n// The duration d must be greater than zero; if not, NewTicker will panic.\r\n// Stop the ticker to release associated resources.\r\nfunc NewTicker(d Duration)  [...]
-gitlab:GithubPullRequest:1:246250598,gitlab:GithubRepo:1:134018330,,closed,feature: add PanicHandler,"""@panjf2000 PTAL\r\nFix #22 \r\nSigned-off-by: Cholerae Hu <ch...@gmail.com>""",https://github.com/panjf2000/ants/pull/23,choleraehyq,gitlab:GithubUser:8923413,,23,2019-01-21T10:58:15.000+00:00,2019-01-22T05:41:34.000+00:00,2019-01-22T05:41:34.000+00:00,,,9158bd37025ccdd29d6346a6639a282e0060c7e2,panichandler,master,812dd4e01075be3cf97429a43abaf6837908cdcd,5bbc9e170bbee27c37bcc30da [...]
-gitlab:GithubPullRequest:1:267414275,gitlab:GithubRepo:1:134018330,,closed,goreport: lint warning on code comment structure,"""Added a newline between group comment and exported variable line 😄""",https://github.com/panjf2000/ants/pull/30,sarathsp06,gitlab:GithubUser:964542,,30,2019-04-04T11:52:48.000+00:00,2019-04-23T11:11:58.000+00:00,2019-04-23T11:11:58.000+00:00,,,dec04010834ccd3691eb1776045ce3b9310ce26c,patch-1,master,4ae3fb8dc413492862469027bb58cb45b77338f1,ec5d1f3b8107265cb5353697 [...]
-gitlab:GithubPullRequest:1:292246524,gitlab:GithubRepo:1:134018330,,closed,handle job panic,"""""",https://github.com/panjf2000/ants/pull/36,king526,gitlab:GithubUser:38849208,,36,2019-06-27T03:27:05.000+00:00,,2019-08-17T20:32:34.000+00:00,,,95e11bf85f18a80197918d15a19ec10f41903d63,master,master,05e96abd6103ae7b70436abe58dbc0ad7e740929,39f04c6e65b76b5f20abd3ca0606db4cd038e5c2
-gitlab:GithubPullRequest:1:300598936,gitlab:GithubRepo:1:134018330,,closed,优化清理速度并修复内存泄漏,"""""",https://github.com/panjf2000/ants/pull/39,wwjiang,gitlab:GithubUser:1290360,,39,2019-07-24T07:41:02.000+00:00,2019-07-26T04:00:12.000+00:00,2019-07-26T04:00:12.000+00:00,,,21a109c7f0873c8f466d6710de23474968940011,master,master,fc48d32604efc2b36d144b8f83d34c1aa1fda1c9,b44a12884b495713a44f796981267ed87134decb
-gitlab:GithubPullRequest:1:301421607,gitlab:GithubRepo:1:134018330,,closed,"optimize memory allocation, change the default pool param and add the log of panic stack.","""Hi, I am using it on my online server which almost need 5 million goroutines on each go service.\r\nI'm divided into 10 small pools, because a pool of five million will slow down the speed associated with the slice.\r\nI made some small optimizations, I hope this is useful.\r\noptimize memory allocation, change the defau [...]
-gitlab:GithubPullRequest:1:308859272,gitlab:GithubRepo:1:134018330,,closed,support nonblocking submit and max blocking limit setting,"""Signed-off-by: Cholerae Hu <ch...@gmail.com>""",https://github.com/panjf2000/ants/pull/41,choleraehyq,gitlab:GithubUser:8923413,,41,2019-08-20T03:24:27.000+00:00,2019-08-20T10:55:19.000+00:00,2019-08-20T10:55:19.000+00:00,,,faef79b7d8a4876da8a215d7794cce20c710aaa2,nonblocking,master,dc8169d5c2645bfc507d6993b7d215326300f31b,58466b12b03a603d9f0331bbc [...]
-gitlab:GithubPullRequest:1:311420898,gitlab:GithubRepo:1:134018330,,closed,Create CODE_OF_CONDUCT.md,"""""",https://github.com/panjf2000/ants/pull/48,panjf2000,gitlab:GithubUser:7496278,,48,2019-08-27T14:44:03.000+00:00,2019-08-27T14:46:22.000+00:00,2019-08-27T14:46:22.000+00:00,,,d5eded45bffe827e5a64a3376c4b94f08b641031,add-code-of-conduct-1,master,44aec9954f58987c37d5937ba590bbf0812a32de,bba6c12b60eff3445adcc168fff3bfdcad9e2571
-gitlab:GithubPullRequest:1:316337433,gitlab:GithubRepo:1:134018330,,closed,Invoke decRunning() when revertWorker() returns false,"""Signed-off-by: Cholerae Hu <ch...@gmail.com>\r\n\r\n---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help  [...]
-gitlab:GithubPullRequest:1:325179595,gitlab:GithubRepo:1:134018330,,closed,add loop queue ,"""---\r\nname: Pull request\r\nabout: 抽象出worker队列的实现,使用原先和循环队列实现这个接口\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull requests get mer [...]
-gitlab:GithubPullRequest:1:329127652,gitlab:GithubRepo:1:134018330,,closed,throw out default panic,"""<the Go programming language>\r\n5.10. Recover\r\nRecovering indiscriminately from panics is a dubious practice because the state of a package’s variables after a panic is rarely well defined or documented. Perhaps a critical update to a data structure was incomplete, a file or net work connection was opened but not closed, or a lock was acquired but not released. Furthermore, by replaci [...]
-gitlab:GithubPullRequest:1:346931859,gitlab:GithubRepo:1:134018330,,closed,Refine the indentation of the sample code in READMEs,"""""",https://github.com/panjf2000/ants/pull/66,RealLiuSha,gitlab:GithubUser:5715152,,66,2019-11-29T07:50:17.000+00:00,,2019-11-29T07:52:04.000+00:00,,,1acafed7740d0daf1dcc3a30129798f59c234331,master,master,fd3841dd88c15fcc0e0ea94e606d980221ac5e09,b19edbd7b909527b2cc2a759e7a60133497f9dee
-gitlab:GithubPullRequest:1:379435034,gitlab:GithubRepo:1:134018330,,closed,Fix a bug that doesn't release lock,"""err!=nil时未释放锁,使用defer p.lock.Unlock()修复\r\n\r\n---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change  [...]
-gitlab:GithubPullRequest:1:404931293,gitlab:GithubRepo:1:134018330,,closed,fix:v2 dir not exist,"""---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull requests get m [...]
-gitlab:GithubPullRequest:1:410487606,gitlab:GithubRepo:1:134018330,,closed,Fix indent on README,"""---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: 'Fix indent'\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull requ [...]
-gitlab:GithubPullRequest:1:415925259,gitlab:GithubRepo:1:134018330,,closed,支持配置workerChanCap大小,"""---\r\nname: Pull request\r\nabout: support customize workerChanCap \r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull requests g [...]
-gitlab:GithubPullRequest:1:452382525,gitlab:GithubRepo:1:134018330,,closed,chore: support go1.14,"""as title.""",https://github.com/panjf2000/ants/pull/100,appleboy,gitlab:GithubUser:21979,,100,2020-07-19T06:38:38.000+00:00,2020-07-19T14:59:48.000+00:00,2020-07-19T14:59:48.000+00:00,,,0a7be73d35726850863a80432dec0ac5c78cdfb4,patch,master,b2666199751ef4fe666c175ba667d18a182b67e0,18623ceb17a9230484ff5d1a31c3beb0b631a2f3
-gitlab:GithubPullRequest:1:461992435,gitlab:GithubRepo:1:134018330,,closed,Add a Gitter chat badge to README.md,"""### panjf2000/ants now has a Chat Room on Gitter\n\n@panjf2000 has just created a chat room. You can visit it here: [https://gitter.im/ants-pool/ants](https://gitter.im/ants-pool/ants?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&content=body_link).\n\nThis pull-request adds this badge to your README.md:\n\n\n[![Gitter](https://badges.gitter.im/ants-pool/ants.svg)] [...]
-gitlab:GithubPullRequest:1:475457581,gitlab:GithubRepo:1:134018330,,closed,Avoid memory leak,"""---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: 'avoid memory leaky'\r\nlabels: 'gc'\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pu [...]
-gitlab:GithubPullRequest:1:496172205,gitlab:GithubRepo:1:134018330,,closed,Remove underscore from file names,"""\r\n## 1. Are you opening this pull request for bug-fixes, optimizations, or new features?\r\nFixing the file naming convention based on [this](https://golang.org/doc/effective_go.html#package-names).\r\n\r\n## 2. Please describe how these code changes achieve your intention.\r\nThere is no code change\r\n\r\n\r\n\r\n_(Feel free to reject this PR if you think it's unnecessary)_ [...]
-gitlab:GithubPullRequest:1:502102437,gitlab:GithubRepo:1:134018330,,closed,fix: Memory leak,"""Fixes #113""",https://github.com/panjf2000/ants/pull/114,Mutated1994,gitlab:GithubUser:29589055,,114,2020-10-13T08:37:37.000+00:00,2020-10-15T03:35:56.000+00:00,2020-10-15T03:35:56.000+00:00,,,94a7a7f1cb3a11fcaaf9608c94fe1dc0bcd98ab0,master,master,ef6017217221e20416d886c0231dd5134752ef4e,00691c648a5b7d28dba5bcafa05d9bbccdf4d933
-gitlab:GithubPullRequest:1:505486248,gitlab:GithubRepo:1:134018330,,closed,fix set negative size,"""fix set negative size for pool\r\n""",https://github.com/panjf2000/ants/pull/117,imxyb,gitlab:GithubUser:7411249,,117,2020-10-18T14:58:12.000+00:00,,2020-10-19T01:58:45.000+00:00,,,55d7f5eb6298d59b76a26b56d1bbb776503a8563,hotfix-poolsize,master,94a7a7f1cb3a11fcaaf9608c94fe1dc0bcd98ab0,05a3664dbf966f1a7ced274aaf47d34e644287ef
-gitlab:GithubPullRequest:1:543900177,gitlab:GithubRepo:1:134018330,,closed,Add go1.15.x support on CI,"""Add go1.15.x support on CI""",https://github.com/panjf2000/ants/pull/131,kaiiak,gitlab:GithubUser:2832687,,131,2020-12-22T06:25:18.000+00:00,,2021-03-19T02:15:23.000+00:00,,,545d5f0c007d1d5e2cd23ae2d9074365c0f03790,patch-1,master,fd8d670fd09489e6ea7693c0a382ba85d2694f16,15cb2705734c62544ac5dca0de3f28f03a69a854
-gitlab:GithubPullRequest:1:582870188,gitlab:GithubRepo:1:134018330,,closed,Change the writing of if...err,"""---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull requ [...]
-gitlab:GithubPullRequest:1:586207150,gitlab:GithubRepo:1:134018330,,closed,The program should return directly when the pool size passed in when …,"""…calling the NewPool interface is less than or equal to 0\r\n\r\n---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: 'code improve'\r\n---\r\n""",https://github.com/panjf2000/ants/pull/139,zhangyuanxue,gitlab:GithubUser:32893410,,139,2021-03-07T08:00:46.000+00:00,,2021-03-12T12:45:57.000+00:00,,,9a4288b9368ab4551d967fdd [...]
-gitlab:GithubPullRequest:1:607755003,gitlab:GithubRepo:1:134018330,,closed,pool_list,"""sequence""",https://github.com/panjf2000/ants/pull/149,yddeng,gitlab:GithubUser:41562937,,149,2021-04-02T01:16:21.000+00:00,,2021-04-02T04:09:52.000+00:00,,,fd1b0378ee9b60fe32a2fe5c8198a427e5f46949,pool_list,master,dbcb6a104f23b1a6a7521796b30515230353283e,674fe08bb2c2ced275600ebdddf2412c84e2c349
-gitlab:GithubPullRequest:1:654684379,gitlab:GithubRepo:1:134018330,,open,Submit a task with args to pool,"""---\r\nname: Resolve problem with args capturing\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull requests get merged.\r\n\r\nIt is not uncommon for pull requests [...]
-gitlab:GithubPullRequest:1:669972849,gitlab:GithubRepo:1:134018330,,open,allow NewPoolWithFunc can invoke with nil argument,"""2. abstract a Task interface for SubmitTask which is more convenient\r\n\r\n---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: 'allow NewPoolWithFunc can invoke with nil argument'\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n [...]
-gitlab:GithubPullRequest:1:686947632,gitlab:GithubRepo:1:134018330,,closed,Timing issue in the TestNonblockingSubmitWithFunc,"""On some machines this unit would fail due to a timing issue.  Since the Invoke in the loop was using nil as the param, it would (depending on timing) lead to the workers finishing the  (w *goWorkerWithFunc) run() in the range loop over w.args as args would == nil and return. \r\n\r\nIf an explicit time.Sleep(1 * time.Second) is added before the \""\tassert.Equal [...]
-gitlab:GithubPullRequest:1:693963625,gitlab:GithubRepo:1:134018330,,closed,Fix CI workflow to make the cache action really work,"""workflows add cache mod file\r\nworkflows should be restore cache before unit test\r\nlink [actions/cache](https://github.com/marketplace/actions/cache)\r\n---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: 'workflows'\r\nlabels: 'workflows'\r\nassignees: ''\r\n---\r\n\r\n## 1. Are you opening this pull request for bug-fixs, optimizatio [...]
-gitlab:GithubPullRequest:1:696437287,gitlab:GithubRepo:1:134018330,,open,feat: goroutine exits immediately,"""---\r\nname: goroutine exits immediately\r\nabout: goroutine exits immediately, lazy init defaultAntsPool\r\ntitle: 'goroutine exits immediately'\r\nlabels: ''\r\nassignees: 'panjf2000'\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help sa [...]
-gitlab:GithubPullRequest:1:731946063,gitlab:GithubRepo:1:134018330,,closed,style: fixed some typos in the comments,"""---\r\nname: Pull request\r\nabout: typos in comments\r\ntitle: fixed some typos in the comments\r\nlabels: \r\nassignees: @panjf2000 \r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fi [...]
-gitlab:GithubPullRequest:1:736936308,gitlab:GithubRepo:1:134018330,,closed,Update the link of one of the relevant articles,"""Hello! I never got the chance to mention it before, but thank you for linking one of my articles in your repository :) \r\n\r\n## 1. Are you opening this pull request for bug-fixs, optimizations or new feature?\r\nNo\r\n\r\n\r\n## 2. Please describe how these code changes achieve your intention.\r\nI'm working on migrating my domain from `twinnation.org` to `twin. [...]
-gitlab:GithubPullRequest:1:742901118,gitlab:GithubRepo:1:134018330,,closed,Update the link of one of the relevant articles,"""re: #185\r\n\r\nMissed the `README_ZH.md` file 😅 """,https://github.com/panjf2000/ants/pull/186,TwiN,gitlab:GithubUser:15699766,,186,2021-09-26T15:53:39.000+00:00,2021-09-27T02:38:55.000+00:00,2021-09-27T02:38:55.000+00:00,,,3f9c4cd54898e7149c7f6d072213b8fdbd0036d8,patch-1,master,61d120b6f086998184f402a83ace485a036d4c7d,41f6b572b25da6363d7d7c45b77705fd8bee7466
-gitlab:GithubPullRequest:1:757412327,gitlab:GithubRepo:1:134018330,,closed,add shopify into user cases,"""Fixes https://github.com/panjf2000/ants/issues/188""",https://github.com/panjf2000/ants/pull/189,lilien1010,gitlab:GithubUser:3814966,,189,2021-10-13T13:34:05.000+00:00,2021-10-13T13:42:42.000+00:00,2021-10-13T13:42:42.000+00:00,,,76ce0ce24f21b1dd13050e0c84b07ce55e68f111,add-shopify-as-user-case,master,3f9c4cd54898e7149c7f6d072213b8fdbd0036d8,efe0bad6c0ab13b54d00909864e34a1060e41d6e
-gitlab:GithubPullRequest:1:763816683,gitlab:GithubRepo:1:134018330,,closed,add more  test about spinlock,"""---\r\nname: Pull request\r\nabout:  add more test about spinlock\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull req [...]
-gitlab:GithubPullRequest:1:770998086,gitlab:GithubRepo:1:134018330,,closed,Replace goto with simple for loop,"""---\r\nname: Pull request\r\nabout: Replace goto with simple for loop\r\ntitle: 'Replace goto with simple for loop'\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a g [...]
-gitlab:GithubPullRequest:1:791490205,gitlab:GithubRepo:1:134018330,,closed,optimize: calculating mid in binary search,"""---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not a [...]
-gitlab:GithubPullRequest:1:816835878,gitlab:GithubRepo:1:134018330,,closed,Add binarysearch of loop queue,"""---\r\nname: Pull request\r\nabout:  Add binarysearch method to loop_queue to get expired workers, just like worker_stack.\r\ntitle: ''\r\nlabels: ''\r\nassignees: 'bright2227'\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in [...]
-gitlab:GithubPullRequest:1:835038436,gitlab:GithubRepo:1:134018330,,closed,Awake the blocking callers when Tune(size int) is invoked to expand the pool,"""…capacity\r\n\r\n---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: 'Instantly scale up capacity when using Tune(size int) to enlarge the capacity'\r\nlabels: 'enhancement'\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull reque [...]
-gitlab:GithubPullRequest:1:842184289,gitlab:GithubRepo:1:134018330,,open,Remove worker_func.go and modify pool_func.go simplifying the library,"""---\r\nname: Remove worker_func.go and modify pool_func.go simplifying the library\r\nabout: Remove worker_func.go and modify pool_func.go to simply utilize the non-func pool+worker implementation\r\ntitle: 'Remove worker_func.go and modify pool_func.go simplifying the library'\r\nlabels: ''\r\nassignees: @panjf2000 \r\n---\r\n\r\n<!--\r\nThank [...]
+gitlab:GithubPullRequest:1:203756736,gitlab:GithubRepo:1:134018330,,closed,pre-allocate the capacity of the worker list,"""fix #3 \r\n* 链表实际测过, 性能相差无几, 但内存占用高了几倍\r\n* 初始化`Pool`和`PoolFunc`是给定了个默认的worker capacity\r\n* 优化了下其他代码""",https://github.com/panjf2000/ants/pull/4,barryz,gitlab:GithubUser:1:16658738,,4,2018-07-25T08:19:30.000+00:00,2018-07-26T02:32:41.000+00:00,2018-07-26T02:32:41.000+00:00,,,3ddd58c390b0f928a5782c235f90ad0c9c21312c,pre_allocate,master,f5b37d0798a8e4c6780a1e08270fa50 [...]
+gitlab:GithubPullRequest:1:211603583,gitlab:GithubRepo:1:134018330,,closed,fix goroutine leak,"""n++,  will cause  workers[0] leak""",https://github.com/panjf2000/ants/pull/8,hongli-my,gitlab:GithubUser:1:8597823,,8,2018-08-29T01:35:54.000+00:00,,2018-10-30T00:12:13.000+00:00,,,74ba726f34abe487b7defac6bb9bebf24d342377,dev,master,666635c65d8d3bb1223b819325e0bd23c81f2733,afd687164b13280199208ec4869709edcf02b52d
+gitlab:GithubPullRequest:1:212277907,gitlab:GithubRepo:1:134018330,,closed,Update pool.go,"""#活着的孩子不想当孤儿\r\n\tHopefully:\r\n\tchildren := []*child{C1,C2,C3,C4,C5,C6,C7}\r\n\tIn fact:\r\n\tchildren := []*child{C1,C4,C2,C3,C5,C6,C7}""",https://github.com/panjf2000/ants/pull/9,Nonnnnnnnnn,gitlab:GithubUser:1:42808204,,9,2018-08-31T05:29:36.000+00:00,,2018-08-31T13:40:33.000+00:00,,,f14d3f91f68d0bc23fe42aa413e98005f6575045,patch-1,master,666635c65d8d3bb1223b819325e0bd23c81f2733,2726d42ea6285 [...]
+gitlab:GithubPullRequest:1:216254598,gitlab:GithubRepo:1:134018330,,closed,graceful exit,"""graceful exit""",https://github.com/panjf2000/ants/pull/11,shanhuhai5739,gitlab:GithubUser:1:3794113,,11,2018-09-18T10:15:01.000+00:00,,2018-12-03T03:52:35.000+00:00,,,6a87067eb3d6440e5db17f31d4bc12ac291633f4,master,develop,833b6e29acfb2f16e3cf7fc92c79763847c319f4,a03eccc794870f0a2e55a5cb8344ea47f2a0001d
+gitlab:GithubPullRequest:1:218939809,gitlab:GithubRepo:1:134018330,,closed,解决死循环导致cpu占用率过高,"""使用了cond 条件变量来阻塞Submit goroutine。潘少,你再仔细琢磨琢磨,看下有何不妥?""",https://github.com/panjf2000/ants/pull/13,liyonglion,gitlab:GithubUser:1:12890888,,13,2018-09-28T11:37:28.000+00:00,2018-09-29T11:29:54.000+00:00,2018-09-29T11:29:54.000+00:00,,,9a3b5cd25344822bca7684f87d9e123890a7bf59,master,master,af376f1b7b59dc488458bcecd4273f0fcde33c55,1846b4392a3a20e6bf1a7431b67f86bd43e0f0b9
+gitlab:GithubPullRequest:1:219363161,gitlab:GithubRepo:1:134018330,,closed,Remove meaningless if statements,"""""",https://github.com/panjf2000/ants/pull/14,SimePel,gitlab:GithubUser:1:20608155,,14,2018-10-01T12:48:11.000+00:00,2018-10-02T13:52:27.000+00:00,2018-10-02T13:52:27.000+00:00,,,29730bb70343924a2f56a13a9799611dd1cd27fd,master,master,1b62696050b7030106291980d5220f886b017eff,5ed168767a771e3802252020b9821610380ed1a4
+gitlab:GithubPullRequest:1:219936521,gitlab:GithubRepo:1:134018330,,closed,Fixes to benchmarks and added semaphore comparison,"""Benchmark results with Param=0, as time.Sleep is not stable on Windows\r\n\r\nAlso Go 1.11 has bunch of improvements:\r\n\r\n```\r\ngoos: windows\r\ngoarch: amd64\r\npkg: github.com/panjf2000/ants\r\nBenchmarkGoroutineWithFunc-8           1        3530220300 ns/op          207472 B/op        506 allocs/op\r\nBenchmarkSemaphoreWithFunc-8           1        43919 [...]
+gitlab:GithubPullRequest:1:222703171,gitlab:GithubRepo:1:134018330,,closed,bugfix(check max pool size),"""if you limit max goroutine  to math.Maxint32 as your code `int32(pool size)`\r\nI think should check max Goroutine size, otherwise size overflow to negative?\r\n""",https://github.com/panjf2000/ants/pull/16,rikewang,gitlab:GithubUser:1:24841832,,16,2018-10-14T09:21:41.000+00:00,,2018-12-03T03:53:31.000+00:00,,,1399cfa28f6751f769a985206daecb56a08b2de9,bugfix_check_max_pool_size,master [...]
+gitlab:GithubPullRequest:1:231840723,gitlab:GithubRepo:1:134018330,,closed,Possible memory leak because of Ticker,"""// NewTicker returns a new Ticker containing a channel that will send the\r\n// time with a period specified by the duration argument.\r\n// It adjusts the intervals or drops ticks to make up for slow receivers.\r\n// The duration d must be greater than zero; if not, NewTicker will panic.\r\n// Stop the ticker to release associated resources.\r\nfunc NewTicker(d Duration)  [...]
+gitlab:GithubPullRequest:1:246250598,gitlab:GithubRepo:1:134018330,,closed,feature: add PanicHandler,"""@panjf2000 PTAL\r\nFix #22 \r\nSigned-off-by: Cholerae Hu <ch...@gmail.com>""",https://github.com/panjf2000/ants/pull/23,choleraehyq,gitlab:GithubUser:1:8923413,,23,2019-01-21T10:58:15.000+00:00,2019-01-22T05:41:34.000+00:00,2019-01-22T05:41:34.000+00:00,,,9158bd37025ccdd29d6346a6639a282e0060c7e2,panichandler,master,812dd4e01075be3cf97429a43abaf6837908cdcd,5bbc9e170bbee27c37bcc30 [...]
+gitlab:GithubPullRequest:1:267414275,gitlab:GithubRepo:1:134018330,,closed,goreport: lint warning on code comment structure,"""Added a newline between group comment and exported variable line 😄""",https://github.com/panjf2000/ants/pull/30,sarathsp06,gitlab:GithubUser:1:964542,,30,2019-04-04T11:52:48.000+00:00,2019-04-23T11:11:58.000+00:00,2019-04-23T11:11:58.000+00:00,,,dec04010834ccd3691eb1776045ce3b9310ce26c,patch-1,master,4ae3fb8dc413492862469027bb58cb45b77338f1,ec5d1f3b8107265cb53536 [...]
+gitlab:GithubPullRequest:1:292246524,gitlab:GithubRepo:1:134018330,,closed,handle job panic,"""""",https://github.com/panjf2000/ants/pull/36,king526,gitlab:GithubUser:1:38849208,,36,2019-06-27T03:27:05.000+00:00,,2019-08-17T20:32:34.000+00:00,,,95e11bf85f18a80197918d15a19ec10f41903d63,master,master,05e96abd6103ae7b70436abe58dbc0ad7e740929,39f04c6e65b76b5f20abd3ca0606db4cd038e5c2
+gitlab:GithubPullRequest:1:300598936,gitlab:GithubRepo:1:134018330,,closed,优化清理速度并修复内存泄漏,"""""",https://github.com/panjf2000/ants/pull/39,wwjiang,gitlab:GithubUser:1:1290360,,39,2019-07-24T07:41:02.000+00:00,2019-07-26T04:00:12.000+00:00,2019-07-26T04:00:12.000+00:00,,,21a109c7f0873c8f466d6710de23474968940011,master,master,fc48d32604efc2b36d144b8f83d34c1aa1fda1c9,b44a12884b495713a44f796981267ed87134decb
+gitlab:GithubPullRequest:1:301421607,gitlab:GithubRepo:1:134018330,,closed,"optimize memory allocation, change the default pool param and add the log of panic stack.","""Hi, I am using it on my online server which almost need 5 million goroutines on each go service.\r\nI'm divided into 10 small pools, because a pool of five million will slow down the speed associated with the slice.\r\nI made some small optimizations, I hope this is useful.\r\noptimize memory allocation, change the defau [...]
+gitlab:GithubPullRequest:1:308859272,gitlab:GithubRepo:1:134018330,,closed,support nonblocking submit and max blocking limit setting,"""Signed-off-by: Cholerae Hu <ch...@gmail.com>""",https://github.com/panjf2000/ants/pull/41,choleraehyq,gitlab:GithubUser:1:8923413,,41,2019-08-20T03:24:27.000+00:00,2019-08-20T10:55:19.000+00:00,2019-08-20T10:55:19.000+00:00,,,faef79b7d8a4876da8a215d7794cce20c710aaa2,nonblocking,master,dc8169d5c2645bfc507d6993b7d215326300f31b,58466b12b03a603d9f0331b [...]
+gitlab:GithubPullRequest:1:311420898,gitlab:GithubRepo:1:134018330,,closed,Create CODE_OF_CONDUCT.md,"""""",https://github.com/panjf2000/ants/pull/48,panjf2000,gitlab:GithubUser:1:7496278,,48,2019-08-27T14:44:03.000+00:00,2019-08-27T14:46:22.000+00:00,2019-08-27T14:46:22.000+00:00,,,d5eded45bffe827e5a64a3376c4b94f08b641031,add-code-of-conduct-1,master,44aec9954f58987c37d5937ba590bbf0812a32de,bba6c12b60eff3445adcc168fff3bfdcad9e2571
+gitlab:GithubPullRequest:1:316337433,gitlab:GithubRepo:1:134018330,,closed,Invoke decRunning() when revertWorker() returns false,"""Signed-off-by: Cholerae Hu <ch...@gmail.com>\r\n\r\n---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help  [...]
+gitlab:GithubPullRequest:1:325179595,gitlab:GithubRepo:1:134018330,,closed,add loop queue ,"""---\r\nname: Pull request\r\nabout: 抽象出worker队列的实现,使用原先和循环队列实现这个接口\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull requests get mer [...]
+gitlab:GithubPullRequest:1:329127652,gitlab:GithubRepo:1:134018330,,closed,throw out default panic,"""<the Go programming language>\r\n5.10. Recover\r\nRecovering indiscriminately from panics is a dubious practice because the state of a package’s variables after a panic is rarely well defined or documented. Perhaps a critical update to a data structure was incomplete, a file or net work connection was opened but not closed, or a lock was acquired but not released. Furthermore, by replaci [...]
+gitlab:GithubPullRequest:1:346931859,gitlab:GithubRepo:1:134018330,,closed,Refine the indentation of the sample code in READMEs,"""""",https://github.com/panjf2000/ants/pull/66,RealLiuSha,gitlab:GithubUser:1:5715152,,66,2019-11-29T07:50:17.000+00:00,,2019-11-29T07:52:04.000+00:00,,,1acafed7740d0daf1dcc3a30129798f59c234331,master,master,fd3841dd88c15fcc0e0ea94e606d980221ac5e09,b19edbd7b909527b2cc2a759e7a60133497f9dee
+gitlab:GithubPullRequest:1:379435034,gitlab:GithubRepo:1:134018330,,closed,Fix a bug that doesn't release lock,"""err!=nil时未释放锁,使用defer p.lock.Unlock()修复\r\n\r\n---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change  [...]
+gitlab:GithubPullRequest:1:404931293,gitlab:GithubRepo:1:134018330,,closed,fix:v2 dir not exist,"""---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull requests get m [...]
+gitlab:GithubPullRequest:1:410487606,gitlab:GithubRepo:1:134018330,,closed,Fix indent on README,"""---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: 'Fix indent'\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull requ [...]
+gitlab:GithubPullRequest:1:415925259,gitlab:GithubRepo:1:134018330,,closed,支持配置workerChanCap大小,"""---\r\nname: Pull request\r\nabout: support customize workerChanCap \r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull requests g [...]
+gitlab:GithubPullRequest:1:452382525,gitlab:GithubRepo:1:134018330,,closed,chore: support go1.14,"""as title.""",https://github.com/panjf2000/ants/pull/100,appleboy,gitlab:GithubUser:1:21979,,100,2020-07-19T06:38:38.000+00:00,2020-07-19T14:59:48.000+00:00,2020-07-19T14:59:48.000+00:00,,,0a7be73d35726850863a80432dec0ac5c78cdfb4,patch,master,b2666199751ef4fe666c175ba667d18a182b67e0,18623ceb17a9230484ff5d1a31c3beb0b631a2f3
+gitlab:GithubPullRequest:1:461992435,gitlab:GithubRepo:1:134018330,,closed,Add a Gitter chat badge to README.md,"""### panjf2000/ants now has a Chat Room on Gitter\n\n@panjf2000 has just created a chat room. You can visit it here: [https://gitter.im/ants-pool/ants](https://gitter.im/ants-pool/ants?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&content=body_link).\n\nThis pull-request adds this badge to your README.md:\n\n\n[![Gitter](https://badges.gitter.im/ants-pool/ants.svg)] [...]
+gitlab:GithubPullRequest:1:475457581,gitlab:GithubRepo:1:134018330,,closed,Avoid memory leak,"""---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: 'avoid memory leaky'\r\nlabels: 'gc'\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pu [...]
+gitlab:GithubPullRequest:1:496172205,gitlab:GithubRepo:1:134018330,,closed,Remove underscore from file names,"""\r\n## 1. Are you opening this pull request for bug-fixes, optimizations, or new features?\r\nFixing the file naming convention based on [this](https://golang.org/doc/effective_go.html#package-names).\r\n\r\n## 2. Please describe how these code changes achieve your intention.\r\nThere is no code change\r\n\r\n\r\n\r\n_(Feel free to reject this PR if you think it's unnecessary)_ [...]
+gitlab:GithubPullRequest:1:502102437,gitlab:GithubRepo:1:134018330,,closed,fix: Memory leak,"""Fixes #113""",https://github.com/panjf2000/ants/pull/114,Mutated1994,gitlab:GithubUser:1:29589055,,114,2020-10-13T08:37:37.000+00:00,2020-10-15T03:35:56.000+00:00,2020-10-15T03:35:56.000+00:00,,,94a7a7f1cb3a11fcaaf9608c94fe1dc0bcd98ab0,master,master,ef6017217221e20416d886c0231dd5134752ef4e,00691c648a5b7d28dba5bcafa05d9bbccdf4d933
+gitlab:GithubPullRequest:1:505486248,gitlab:GithubRepo:1:134018330,,closed,fix set negative size,"""fix set negative size for pool\r\n""",https://github.com/panjf2000/ants/pull/117,imxyb,gitlab:GithubUser:1:7411249,,117,2020-10-18T14:58:12.000+00:00,,2020-10-19T01:58:45.000+00:00,,,55d7f5eb6298d59b76a26b56d1bbb776503a8563,hotfix-poolsize,master,94a7a7f1cb3a11fcaaf9608c94fe1dc0bcd98ab0,05a3664dbf966f1a7ced274aaf47d34e644287ef
+gitlab:GithubPullRequest:1:543900177,gitlab:GithubRepo:1:134018330,,closed,Add go1.15.x support on CI,"""Add go1.15.x support on CI""",https://github.com/panjf2000/ants/pull/131,kaiiak,gitlab:GithubUser:1:2832687,,131,2020-12-22T06:25:18.000+00:00,,2021-03-19T02:15:23.000+00:00,,,545d5f0c007d1d5e2cd23ae2d9074365c0f03790,patch-1,master,fd8d670fd09489e6ea7693c0a382ba85d2694f16,15cb2705734c62544ac5dca0de3f28f03a69a854
+gitlab:GithubPullRequest:1:582870188,gitlab:GithubRepo:1:134018330,,closed,Change the writing of if...err,"""---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull requ [...]
+gitlab:GithubPullRequest:1:586207150,gitlab:GithubRepo:1:134018330,,closed,The program should return directly when the pool size passed in when …,"""…calling the NewPool interface is less than or equal to 0\r\n\r\n---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: 'code improve'\r\n---\r\n""",https://github.com/panjf2000/ants/pull/139,zhangyuanxue,gitlab:GithubUser:1:32893410,,139,2021-03-07T08:00:46.000+00:00,,2021-03-12T12:45:57.000+00:00,,,9a4288b9368ab4551d967f [...]
+gitlab:GithubPullRequest:1:607755003,gitlab:GithubRepo:1:134018330,,closed,pool_list,"""sequence""",https://github.com/panjf2000/ants/pull/149,yddeng,gitlab:GithubUser:1:41562937,,149,2021-04-02T01:16:21.000+00:00,,2021-04-02T04:09:52.000+00:00,,,fd1b0378ee9b60fe32a2fe5c8198a427e5f46949,pool_list,master,dbcb6a104f23b1a6a7521796b30515230353283e,674fe08bb2c2ced275600ebdddf2412c84e2c349
+gitlab:GithubPullRequest:1:654684379,gitlab:GithubRepo:1:134018330,,open,Submit a task with args to pool,"""---\r\nname: Resolve problem with args capturing\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull requests get merged.\r\n\r\nIt is not uncommon for pull requests [...]
+gitlab:GithubPullRequest:1:669972849,gitlab:GithubRepo:1:134018330,,open,allow NewPoolWithFunc can invoke with nil argument,"""2. abstract a Task interface for SubmitTask which is more convenient\r\n\r\n---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: 'allow NewPoolWithFunc can invoke with nil argument'\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n [...]
+gitlab:GithubPullRequest:1:686947632,gitlab:GithubRepo:1:134018330,,closed,Timing issue in the TestNonblockingSubmitWithFunc,"""On some machines this unit would fail due to a timing issue.  Since the Invoke in the loop was using nil as the param, it would (depending on timing) lead to the workers finishing the  (w *goWorkerWithFunc) run() in the range loop over w.args as args would == nil and return. \r\n\r\nIf an explicit time.Sleep(1 * time.Second) is added before the \""\tassert.Equal [...]
+gitlab:GithubPullRequest:1:693963625,gitlab:GithubRepo:1:134018330,,closed,Fix CI workflow to make the cache action really work,"""workflows add cache mod file\r\nworkflows should be restore cache before unit test\r\nlink [actions/cache](https://github.com/marketplace/actions/cache)\r\n---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: 'workflows'\r\nlabels: 'workflows'\r\nassignees: ''\r\n---\r\n\r\n## 1. Are you opening this pull request for bug-fixs, optimizatio [...]
+gitlab:GithubPullRequest:1:696437287,gitlab:GithubRepo:1:134018330,,open,feat: goroutine exits immediately,"""---\r\nname: goroutine exits immediately\r\nabout: goroutine exits immediately, lazy init defaultAntsPool\r\ntitle: 'goroutine exits immediately'\r\nlabels: ''\r\nassignees: 'panjf2000'\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help sa [...]
+gitlab:GithubPullRequest:1:731946063,gitlab:GithubRepo:1:134018330,,closed,style: fixed some typos in the comments,"""---\r\nname: Pull request\r\nabout: typos in comments\r\ntitle: fixed some typos in the comments\r\nlabels: \r\nassignees: @panjf2000 \r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fi [...]
+gitlab:GithubPullRequest:1:736936308,gitlab:GithubRepo:1:134018330,,closed,Update the link of one of the relevant articles,"""Hello! I never got the chance to mention it before, but thank you for linking one of my articles in your repository :) \r\n\r\n## 1. Are you opening this pull request for bug-fixs, optimizations or new feature?\r\nNo\r\n\r\n\r\n## 2. Please describe how these code changes achieve your intention.\r\nI'm working on migrating my domain from `twinnation.org` to `twin. [...]
+gitlab:GithubPullRequest:1:742901118,gitlab:GithubRepo:1:134018330,,closed,Update the link of one of the relevant articles,"""re: #185\r\n\r\nMissed the `README_ZH.md` file 😅 """,https://github.com/panjf2000/ants/pull/186,TwiN,gitlab:GithubUser:1:15699766,,186,2021-09-26T15:53:39.000+00:00,2021-09-27T02:38:55.000+00:00,2021-09-27T02:38:55.000+00:00,,,3f9c4cd54898e7149c7f6d072213b8fdbd0036d8,patch-1,master,61d120b6f086998184f402a83ace485a036d4c7d,41f6b572b25da6363d7d7c45b77705fd8bee7466
+gitlab:GithubPullRequest:1:757412327,gitlab:GithubRepo:1:134018330,,closed,add shopify into user cases,"""Fixes https://github.com/panjf2000/ants/issues/188""",https://github.com/panjf2000/ants/pull/189,lilien1010,gitlab:GithubUser:1:3814966,,189,2021-10-13T13:34:05.000+00:00,2021-10-13T13:42:42.000+00:00,2021-10-13T13:42:42.000+00:00,,,76ce0ce24f21b1dd13050e0c84b07ce55e68f111,add-shopify-as-user-case,master,3f9c4cd54898e7149c7f6d072213b8fdbd0036d8,efe0bad6c0ab13b54d00909864e34a1060e41d6e
+gitlab:GithubPullRequest:1:763816683,gitlab:GithubRepo:1:134018330,,closed,add more  test about spinlock,"""---\r\nname: Pull request\r\nabout:  add more test about spinlock\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not all pull req [...]
+gitlab:GithubPullRequest:1:770998086,gitlab:GithubRepo:1:134018330,,closed,Replace goto with simple for loop,"""---\r\nname: Pull request\r\nabout: Replace goto with simple for loop\r\ntitle: 'Replace goto with simple for loop'\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a g [...]
+gitlab:GithubPullRequest:1:791490205,gitlab:GithubRepo:1:134018330,,closed,optimize: calculating mid in binary search,"""---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: ''\r\nlabels: ''\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in case the change is not a good fit for the project. Not a [...]
+gitlab:GithubPullRequest:1:816835878,gitlab:GithubRepo:1:134018330,,closed,Add binarysearch of loop queue,"""---\r\nname: Pull request\r\nabout:  Add binarysearch method to loop_queue to get expired workers, just like worker_stack.\r\ntitle: ''\r\nlabels: ''\r\nassignees: 'bright2227'\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull request.\r\n\r\nWas this change discussed in an issue first? That can help save time in [...]
+gitlab:GithubPullRequest:1:835038436,gitlab:GithubRepo:1:134018330,,closed,Awake the blocking callers when Tune(size int) is invoked to expand the pool,"""…capacity\r\n\r\n---\r\nname: Pull request\r\nabout: Propose changes to the code\r\ntitle: 'Instantly scale up capacity when using Tune(size int) to enlarge the capacity'\r\nlabels: 'enhancement'\r\nassignees: ''\r\n---\r\n\r\n<!--\r\nThank you for contributing to `ants`! Please fill this out to help us make the most of your pull reque [...]
+gitlab:GithubPullRequest:1:842184289,gitlab:GithubRepo:1:134018330,,open,Remove worker_func.go and modify pool_func.go simplifying the library,"""---\r\nname: Remove worker_func.go and modify pool_func.go simplifying the library\r\nabout: Remove worker_func.go and modify pool_func.go to simply utilize the non-func pool+worker implementation\r\ntitle: 'Remove worker_func.go and modify pool_func.go simplifying the library'\r\nlabels: ''\r\nassignees: @panjf2000 \r\n---\r\n\r\n<!--\r\nThank [...]
diff --git a/plugins/github/models/commit.go b/plugins/github/models/commit.go
index 3310bbfb..84366cb3 100644
--- a/plugins/github/models/commit.go
+++ b/plugins/github/models/commit.go
@@ -24,7 +24,6 @@ import (
 )
 
 type GithubCommit struct {
-	ConnectionId   uint64 `gorm:"primaryKey"`
 	Sha            string `gorm:"primaryKey;type:varchar(40)"`
 	AuthorId       int
 	AuthorName     string `gorm:"type:varchar(255)"`
diff --git a/plugins/github/models/commit_stats.go b/plugins/github/models/commit_stats.go
index 606a29b5..c2717995 100644
--- a/plugins/github/models/commit_stats.go
+++ b/plugins/github/models/commit_stats.go
@@ -23,9 +23,10 @@ import (
 )
 
 type GithubCommitStat struct {
-	Sha       string `gorm:"primaryKey;type:varchar(40)"`
-	Additions int    `gorm:"comment:Added lines of code"`
-	Deletions int    `gorm:"comment:Deleted lines of code"`
+	ConnectionId uint64 `gorm:"primaryKey"`
+	Sha          string `gorm:"primaryKey;type:varchar(40)"`
+	Additions    int    `gorm:"comment:Added lines of code"`
+	Deletions    int    `gorm:"comment:Deleted lines of code"`
 
 	CommittedDate time.Time `gorm:"index"`
 	common.NoPKModel
diff --git a/plugins/github/models/connection.go b/plugins/github/models/connection.go
index afc7577f..4b8bb3a5 100644
--- a/plugins/github/models/connection.go
+++ b/plugins/github/models/connection.go
@@ -30,7 +30,7 @@ type GithubConnection struct {
 	helper.AccessToken    `mapstructure:",squash"`
 }
 
-type Config struct {
+type TransformationRules struct {
 	PrType               string `mapstructure:"prType" json:"prType"`
 	PrComponent          string `mapstructure:"prComponent" json:"prComponent"`
 	PrBodyClosePattern   string `mapstructure:"prBodyClosePattern" json:"prBodyClosePattern"`
diff --git a/plugins/github/models/migrationscripts/archived/commit.go b/plugins/github/models/migrationscripts/archived/commit.go
index 30711c22..d428b448 100644
--- a/plugins/github/models/migrationscripts/archived/commit.go
+++ b/plugins/github/models/migrationscripts/archived/commit.go
@@ -24,7 +24,6 @@ import (
 )
 
 type GithubCommit struct {
-	ConnectionId   uint64 `gorm:"primaryKey"`
 	Sha            string `gorm:"primaryKey;type:varchar(40)"`
 	AuthorId       int
 	AuthorName     string `gorm:"type:varchar(255)"`
diff --git a/plugins/github/models/migrationscripts/archived/commit_stat.go b/plugins/github/models/migrationscripts/archived/commit_stat.go
index b9280703..e6bef52a 100644
--- a/plugins/github/models/migrationscripts/archived/commit_stat.go
+++ b/plugins/github/models/migrationscripts/archived/commit_stat.go
@@ -24,9 +24,10 @@ import (
 )
 
 type GithubCommitStat struct {
-	Sha       string `gorm:"primaryKey;type:varchar(40)"`
-	Additions int    `gorm:"comment:Added lines of code"`
-	Deletions int    `gorm:"comment:Deleted lines of code"`
+	ConnectionId uint64 `gorm:"primaryKey"`
+	Sha          string `gorm:"primaryKey;type:varchar(40)"`
+	Additions    int    `gorm:"comment:Added lines of code"`
+	Deletions    int    `gorm:"comment:Deleted lines of code"`
 
 	CommittedDate time.Time `gorm:"index"`
 	archived.NoPKModel
diff --git a/plugins/github/models/migrationscripts/archived/repo_commit.go b/plugins/github/models/migrationscripts/archived/repo_commit.go
index 3f821613..da763231 100644
--- a/plugins/github/models/migrationscripts/archived/repo_commit.go
+++ b/plugins/github/models/migrationscripts/archived/repo_commit.go
@@ -20,8 +20,9 @@ package archived
 import "github.com/apache/incubator-devlake/models/migrationscripts/archived"
 
 type GithubRepoCommit struct {
-	RepoId    int    `gorm:"primaryKey"`
-	CommitSha string `gorm:"primaryKey;type:varchar(40)"`
+	ConnectionId uint64 `gorm:"primaryKey"`
+	RepoId       int    `gorm:"primaryKey"`
+	CommitSha    string `gorm:"primaryKey;type:varchar(40)"`
 	archived.NoPKModel
 }
 
diff --git a/plugins/github/models/migrationscripts/archived/user.go b/plugins/github/models/migrationscripts/archived/user.go
index 0ce83053..ef9d0e6e 100644
--- a/plugins/github/models/migrationscripts/archived/user.go
+++ b/plugins/github/models/migrationscripts/archived/user.go
@@ -20,12 +20,13 @@ package archived
 import "github.com/apache/incubator-devlake/models/migrationscripts/archived"
 
 type GithubUser struct {
-	Id        int    `json:"id" gorm:"primaryKey"`
-	Login     string `json:"login" gorm:"type:varchar(255)"`
-	AvatarUrl string `json:"avatar_url" gorm:"type:varchar(255)"`
-	Url       string `json:"url" gorm:"type:varchar(255)"`
-	HtmlUrl   string `json:"html_url" gorm:"type:varchar(255)"`
-	Type      string `json:"type" gorm:"type:varchar(255)"`
+	ConnectionId uint64 `gorm:"primaryKey"`
+	Id           int    `json:"id" gorm:"primaryKey"`
+	Login        string `json:"login" gorm:"type:varchar(255)"`
+	AvatarUrl    string `json:"avatar_url" gorm:"type:varchar(255)"`
+	Url          string `json:"url" gorm:"type:varchar(255)"`
+	HtmlUrl      string `json:"html_url" gorm:"type:varchar(255)"`
+	Type         string `json:"type" gorm:"type:varchar(255)"`
 	archived.NoPKModel
 }
 
diff --git a/plugins/github/models/migrationscripts/init_schema_20220611.go b/plugins/github/models/migrationscripts/init_schema_20220615.go
similarity index 84%
rename from plugins/github/models/migrationscripts/init_schema_20220611.go
rename to plugins/github/models/migrationscripts/init_schema_20220615.go
index 6479284e..d1832a2c 100644
--- a/plugins/github/models/migrationscripts/init_schema_20220611.go
+++ b/plugins/github/models/migrationscripts/init_schema_20220615.go
@@ -27,7 +27,7 @@ import (
 	"gorm.io/gorm"
 )
 
-type GithubConnection20220609 struct {
+type GithubConnection20220615 struct {
 	commonArchived.Model
 	Name      string `gorm:"type:varchar(100);uniqueIndex" json:"name" validate:"required"`
 	Endpoint  string `mapstructure:"endpoint" env:"GITHUB_ENDPOINT" validate:"required"`
@@ -36,7 +36,7 @@ type GithubConnection20220609 struct {
 	Token     string `mapstructure:"token" env:"GITHUB_AUTH" validate:"required" encrypt:"yes"`
 }
 
-func (GithubConnection20220609) TableName() string {
+func (GithubConnection20220615) TableName() string {
 	return "_tool_github_connections"
 }
 
@@ -49,8 +49,8 @@ func (u *InitSchemas) SetConfigGetter(config core.ConfigGetter) {
 }
 
 func (u *InitSchemas) Up(ctx context.Context, db *gorm.DB) error {
-	if db.Migrator().HasTable(GithubConnection20220609{}) {
-		err := db.Migrator().DropTable(GithubConnection20220609{})
+	if db.Migrator().HasTable(GithubConnection20220615{}) {
+		err := db.Migrator().DropTable(GithubConnection20220615{})
 		if err != nil {
 			return err
 		}
@@ -87,26 +87,24 @@ func (u *InitSchemas) Up(ctx context.Context, db *gorm.DB) error {
 	if err != nil {
 		return err
 	}
-	err = db.Migrator().CreateTable(GithubConnection20220609{})
+	err = db.Migrator().CreateTable(GithubConnection20220615{})
 	if err != nil {
 		return err
 	}
-	connection := &GithubConnection20220609{}
+	encodeKey := u.config.GetString(core.EncodeKeyEnvStr)
+	connection := &GithubConnection20220615{}
 	connection.Endpoint = u.config.GetString(`GITHUB_ENDPOINT`)
 	connection.Proxy = u.config.GetString(`GITHUB_PROXY`)
 	connection.Token = u.config.GetString(`GITHUB_AUTH`)
 	connection.Name = `GitHub`
-	if err != nil {
-		return err
-	}
-	err = helper.UpdateEncryptFields(connection, func(plaintext string) (string, error) {
-		return core.Encrypt(u.config.GetString(core.EncodeKeyEnvStr), plaintext)
-	})
-	if err != nil {
-		return err
-	}
-	// update from .env and save to db
-	if connection.Endpoint != `` && connection.Token != `` {
+	if connection.Endpoint != `` && connection.Token != `` && encodeKey != `` {
+		err = helper.UpdateEncryptFields(connection, func(plaintext string) (string, error) {
+			return core.Encrypt(encodeKey, plaintext)
+		})
+		if err != nil {
+			return err
+		}
+		// update from .env and save to db
 		db.Create(connection)
 	}
 
@@ -131,7 +129,7 @@ func (u *InitSchemas) Up(ctx context.Context, db *gorm.DB) error {
 }
 
 func (*InitSchemas) Version() uint64 {
-	return 20220614000001
+	return 20220615000001
 }
 
 func (*InitSchemas) Name() string {
diff --git a/plugins/github/models/repo_commit.go b/plugins/github/models/repo_commit.go
index bb82a7c6..f893eaed 100644
--- a/plugins/github/models/repo_commit.go
+++ b/plugins/github/models/repo_commit.go
@@ -20,8 +20,9 @@ package models
 import "github.com/apache/incubator-devlake/models/common"
 
 type GithubRepoCommit struct {
-	RepoId    int    `gorm:"primaryKey"`
-	CommitSha string `gorm:"primaryKey;type:varchar(40)"`
+	ConnectionId uint64 `gorm:"primaryKey"`
+	RepoId       int    `gorm:"primaryKey"`
+	CommitSha    string `gorm:"primaryKey;type:varchar(40)"`
 	common.NoPKModel
 }
 
diff --git a/plugins/github/models/user.go b/plugins/github/models/user.go
index 56d00180..3be0454e 100644
--- a/plugins/github/models/user.go
+++ b/plugins/github/models/user.go
@@ -22,12 +22,13 @@ import (
 )
 
 type GithubUser struct {
-	Id        int    `json:"id" gorm:"primaryKey"`
-	Login     string `json:"login" gorm:"type:varchar(255)"`
-	AvatarUrl string `json:"avatar_url" gorm:"type:varchar(255)"`
-	Url       string `json:"url" gorm:"type:varchar(255)"`
-	HtmlUrl   string `json:"html_url" gorm:"type:varchar(255)"`
-	Type      string `json:"type" gorm:"type:varchar(255)"`
+	ConnectionId uint64 `gorm:"primaryKey"`
+	Id           int    `json:"id" gorm:"primaryKey"`
+	Login        string `json:"login" gorm:"type:varchar(255)"`
+	AvatarUrl    string `json:"avatar_url" gorm:"type:varchar(255)"`
+	Url          string `json:"url" gorm:"type:varchar(255)"`
+	HtmlUrl      string `json:"html_url" gorm:"type:varchar(255)"`
+	Type         string `json:"type" gorm:"type:varchar(255)"`
 	common.NoPKModel
 }
 
diff --git a/plugins/github/tasks/commit_collector.go b/plugins/github/tasks/commit_collector.go
index a61297e0..425bcfac 100644
--- a/plugins/github/tasks/commit_collector.go
+++ b/plugins/github/tasks/commit_collector.go
@@ -52,7 +52,7 @@ func CollectApiCommits(taskCtx core.SubTaskContext) error {
 			&latestUpdated,
 			dal.Join("left join _tool_github_repo_commits on _tool_github_commits.sha = _tool_github_repo_commits.commit_sha"),
 			dal.Join("left join _tool_github_repos on _tool_github_repo_commits.repo_id = _tool_github_repos.github_id"),
-			dal.Where("_tool_github_repo_commits.repo_id = ?", data.Repo.GithubId),
+			dal.Where("_tool_github_repo_commits.repo_id = ? AND _tool_github_repo_commits.connection_id = ?", data.Repo.GithubId, data.Repo.ConnectionId),
 			dal.Orderby("committed_date DESC"),
 			dal.Limit(1),
 		)
@@ -73,8 +73,9 @@ func CollectApiCommits(taskCtx core.SubTaskContext) error {
 				set of data to be process, for example, we process JiraCommits by Board
 			*/
 			Params: GithubApiParams{
-				Owner: data.Options.Owner,
-				Repo:  data.Options.Repo,
+				ConnectionId: data.Options.ConnectionId,
+				Owner:        data.Options.Owner,
+				Repo:         data.Options.Repo,
 			},
 			/*
 				Table store raw data
diff --git a/plugins/github/tasks/commit_convertor.go b/plugins/github/tasks/commit_convertor.go
index b7745bf3..d6d75d82 100644
--- a/plugins/github/tasks/commit_convertor.go
+++ b/plugins/github/tasks/commit_convertor.go
@@ -46,7 +46,7 @@ func ConvertCommits(taskCtx core.SubTaskContext) error {
 			grc.commit_sha = gc.sha
 		)`),
 		dal.Select("gc.*"),
-		dal.Where("grc.repo_id = ?", repoId),
+		dal.Where("grc.repo_id = ? AND grc.connection_id = ?", repoId, data.Options.ConnectionId),
 	)
 	if err != nil {
 		return err
@@ -61,8 +61,9 @@ func ConvertCommits(taskCtx core.SubTaskContext) error {
 		RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
 			Ctx: taskCtx,
 			Params: GithubApiParams{
-				Owner: data.Options.Owner,
-				Repo:  data.Options.Repo,
+				ConnectionId: data.Options.ConnectionId,
+				Owner:        data.Options.Owner,
+				Repo:         data.Options.Repo,
 			},
 			Table: RAW_COMMENTS_TABLE,
 		},
diff --git a/plugins/github/tasks/commit_extractor.go b/plugins/github/tasks/commit_extractor.go
index adcd8301..0ff36890 100644
--- a/plugins/github/tasks/commit_extractor.go
+++ b/plugins/github/tasks/commit_extractor.go
@@ -65,8 +65,9 @@ func ExtractApiCommits(taskCtx core.SubTaskContext) error {
 				set of data to be process, for example, we process JiraCommits by Board
 			*/
 			Params: GithubApiParams{
-				Owner: data.Options.Owner,
-				Repo:  data.Options.Repo,
+				ConnectionId: data.Options.ConnectionId,
+				Owner:        data.Options.Owner,
+				Repo:         data.Options.Repo,
 			},
 			/*
 				Table store raw data
@@ -107,8 +108,9 @@ func ExtractApiCommits(taskCtx core.SubTaskContext) error {
 			}
 
 			githubRepoCommit := &models.GithubRepoCommit{
-				RepoId:    data.Repo.GithubId,
-				CommitSha: commit.Sha,
+				ConnectionId: data.Options.ConnectionId,
+				RepoId:       data.Repo.GithubId,
+				CommitSha:    commit.Sha,
 			}
 
 			results = append(results, githubCommit)
diff --git a/plugins/github/tasks/commit_stats_collector.go b/plugins/github/tasks/commit_stats_collector.go
index bd3caad0..fa5fbba1 100644
--- a/plugins/github/tasks/commit_stats_collector.go
+++ b/plugins/github/tasks/commit_stats_collector.go
@@ -48,7 +48,7 @@ func CollectApiCommitStats(taskCtx core.SubTaskContext) error {
 	err := db.First(
 		&latestUpdated,
 		dal.Join("left join _tool_github_repo_commits on _tool_github_commit_stats.sha = _tool_github_repo_commits.commit_sha"),
-		dal.Where("_tool_github_repo_commits.repo_id = ?", data.Repo.GithubId),
+		dal.Where("_tool_github_repo_commits.repo_id = ? and _tool_github_repo_commits.connection_id = ?", data.Repo.GithubId, data.Repo.ConnectionId),
 		dal.Orderby("committed_date DESC"),
 		dal.Limit(1),
 	)
@@ -59,8 +59,8 @@ func CollectApiCommitStats(taskCtx core.SubTaskContext) error {
 	cursor, err := db.Cursor(
 		dal.Join("left join _tool_github_repo_commits on _tool_github_commits.sha = _tool_github_repo_commits.commit_sha"),
 		dal.From(models.GithubCommit{}.TableName()),
-		dal.Where("_tool_github_repo_commits.repo_id = ? and _tool_github_commits.committed_date >= ?",
-			data.Repo.GithubId, latestUpdated.CommittedDate.String()),
+		dal.Where("_tool_github_repo_commits.repo_id = ? and _tool_github_repo_commits.connection_id = ? and _tool_github_commits.committed_date >= ?",
+			data.Repo.GithubId, data.Repo.ConnectionId, latestUpdated.CommittedDate.String()),
 	)
 	if err != nil {
 		return err
@@ -78,8 +78,9 @@ func CollectApiCommitStats(taskCtx core.SubTaskContext) error {
 				set of data to be process, for example, we process JiraCommits by Board
 			*/
 			Params: GithubApiParams{
-				Owner: data.Options.Owner,
-				Repo:  data.Options.Repo,
+				ConnectionId: data.Options.ConnectionId,
+				Owner:        data.Options.Owner,
+				Repo:         data.Options.Repo,
 			},
 			/*
 				Table store raw data
diff --git a/plugins/github/tasks/commit_stats_extractor.go b/plugins/github/tasks/commit_stats_extractor.go
index 5df8077f..f2f65e4d 100644
--- a/plugins/github/tasks/commit_stats_extractor.go
+++ b/plugins/github/tasks/commit_stats_extractor.go
@@ -59,8 +59,9 @@ func ExtractApiCommitStats(taskCtx core.SubTaskContext) error {
 				set of data to be process, for example, we process JiraCommits by Board
 			*/
 			Params: GithubApiParams{
-				Owner: data.Options.Owner,
-				Repo:  data.Options.Repo,
+				ConnectionId: data.Options.ConnectionId,
+				Owner:        data.Options.Owner,
+				Repo:         data.Options.Repo,
 			},
 			/*
 				Table store raw data
@@ -88,6 +89,7 @@ func ExtractApiCommitStats(taskCtx core.SubTaskContext) error {
 			commit.Deletions = body.Stats.Deletions
 
 			commitStat := &models.GithubCommitStat{
+				ConnectionId:  data.Options.ConnectionId,
 				Additions:     body.Stats.Additions,
 				Deletions:     body.Stats.Deletions,
 				CommittedDate: body.Commit.Committer.Date.ToTime(),
diff --git a/plugins/github/tasks/issue_comment_convertor.go b/plugins/github/tasks/issue_comment_convertor.go
index 1503deee..3099f916 100644
--- a/plugins/github/tasks/issue_comment_convertor.go
+++ b/plugins/github/tasks/issue_comment_convertor.go
@@ -74,7 +74,7 @@ func ConvertIssueComments(taskCtx core.SubTaskContext) error {
 				},
 				IssueId:     issueIdGen.Generate(data.Options.ConnectionId, githubIssueComment.IssueId),
 				Body:        githubIssueComment.Body,
-				UserId:      userIdGen.Generate(githubIssueComment.AuthorUserId),
+				UserId:      userIdGen.Generate(data.Options.ConnectionId, githubIssueComment.AuthorUserId),
 				CreatedDate: githubIssueComment.GithubCreatedAt,
 			}
 			return []interface{}{
diff --git a/plugins/github/tasks/issue_convertor.go b/plugins/github/tasks/issue_convertor.go
index 477b3fa9..b5071cf9 100644
--- a/plugins/github/tasks/issue_convertor.go
+++ b/plugins/github/tasks/issue_convertor.go
@@ -78,9 +78,9 @@ func ConvertIssues(taskCtx core.SubTaskContext) error {
 				Description:     issue.Body,
 				Priority:        issue.Priority,
 				Type:            issue.Type,
-				AssigneeId:      userIdGen.Generate(issue.AssigneeId),
+				AssigneeId:      userIdGen.Generate(data.Options.ConnectionId, issue.AssigneeId),
 				AssigneeName:    issue.AssigneeName,
-				CreatorId:       userIdGen.Generate(issue.AuthorId),
+				CreatorId:       userIdGen.Generate(data.Options.ConnectionId, issue.AuthorId),
 				CreatorName:     issue.AuthorName,
 				LeadTimeMinutes: issue.LeadTimeMinutes,
 				Url:             issue.Url,
diff --git a/plugins/github/tasks/issue_extractor.go b/plugins/github/tasks/issue_extractor.go
index 6abbeffa..700e8e76 100644
--- a/plugins/github/tasks/issue_extractor.go
+++ b/plugins/github/tasks/issue_extractor.go
@@ -64,7 +64,7 @@ type IssuesResponse struct {
 
 func ExtractApiIssues(taskCtx core.SubTaskContext) error {
 	data := taskCtx.GetData().(*GithubTaskData)
-	config := data.Options.Config
+	config := data.Options.TransformationRules
 	var issueSeverityRegex *regexp.Regexp
 	var issueComponentRegex *regexp.Regexp
 	var issuePriorityRegex *regexp.Regexp
diff --git a/plugins/github/tasks/pr_comment_convertor.go b/plugins/github/tasks/pr_comment_convertor.go
index 0e3e0f9a..4538d92e 100644
--- a/plugins/github/tasks/pr_comment_convertor.go
+++ b/plugins/github/tasks/pr_comment_convertor.go
@@ -74,7 +74,7 @@ func ConvertPullRequestComments(taskCtx core.SubTaskContext) error {
 				},
 				PullRequestId: prIdGen.Generate(data.Options.ConnectionId, githubPullRequestComment.PullRequestId),
 				Body:          githubPullRequestComment.Body,
-				UserId:        userIdGen.Generate(githubPullRequestComment.AuthorUserId),
+				UserId:        userIdGen.Generate(data.Options.ConnectionId, githubPullRequestComment.AuthorUserId),
 				CreatedDate:   githubPullRequestComment.GithubCreatedAt,
 				CommitSha:     "",
 				Position:      0,
diff --git a/plugins/github/tasks/pr_commit_extractor.go b/plugins/github/tasks/pr_commit_extractor.go
index 92005b94..20c86090 100644
--- a/plugins/github/tasks/pr_commit_extractor.go
+++ b/plugins/github/tasks/pr_commit_extractor.go
@@ -118,7 +118,6 @@ func ExtractApiPullRequestCommits(taskCtx core.SubTaskContext) error {
 
 func convertPullRequestCommit(prCommit *PrCommitsResponse, connId uint64) (*models.GithubCommit, error) {
 	githubCommit := &models.GithubCommit{
-		ConnectionId:   connId,
 		Sha:            prCommit.Sha,
 		Message:        string(prCommit.Commit.Message),
 		AuthorId:       prCommit.Commit.Author.Id,
diff --git a/plugins/github/tasks/pr_convertor.go b/plugins/github/tasks/pr_convertor.go
index f7ddd058..07159fd8 100644
--- a/plugins/github/tasks/pr_convertor.go
+++ b/plugins/github/tasks/pr_convertor.go
@@ -76,7 +76,7 @@ func ConvertPullRequests(taskCtx core.SubTaskContext) error {
 				Status:         pr.State,
 				Title:          pr.Title,
 				Url:            pr.Url,
-				AuthorId:       userIdGen.Generate(pr.AuthorId),
+				AuthorId:       userIdGen.Generate(data.Options.ConnectionId, pr.AuthorId),
 				AuthorName:     pr.AuthorName,
 				Description:    pr.Body,
 				CreatedDate:    pr.GithubCreatedAt,
diff --git a/plugins/github/tasks/pr_extractor.go b/plugins/github/tasks/pr_extractor.go
index 771c41d8..00a58525 100644
--- a/plugins/github/tasks/pr_extractor.go
+++ b/plugins/github/tasks/pr_extractor.go
@@ -68,7 +68,7 @@ type GithubApiPullRequest struct {
 
 func ExtractApiPullRequests(taskCtx core.SubTaskContext) error {
 	data := taskCtx.GetData().(*GithubTaskData)
-	config := data.Options.Config
+	config := data.Options.TransformationRules
 	var labelTypeRegex *regexp.Regexp
 	var labelComponentRegex *regexp.Regexp
 	var prType = config.PrType
diff --git a/plugins/github/tasks/task_data.go b/plugins/github/tasks/task_data.go
index eb551dc1..6a7d6ad4 100644
--- a/plugins/github/tasks/task_data.go
+++ b/plugins/github/tasks/task_data.go
@@ -25,12 +25,12 @@ import (
 )
 
 type GithubOptions struct {
-	ConnectionId  uint64   `json:"connectionId"`
-	Tasks         []string `json:"tasks,omitempty"`
-	Since         string
-	Owner         string
-	Repo          string
-	models.Config `mapstructure:",squash"`
+	ConnectionId               uint64   `json:"connectionId"`
+	Tasks                      []string `json:"tasks,omitempty"`
+	Since                      string
+	Owner                      string
+	Repo                       string
+	models.TransformationRules `mapstructure:"transformationRules" json:"transformationRules"`
 }
 
 type GithubTaskData struct {
diff --git a/plugins/github/tasks/user_convertor.go b/plugins/github/tasks/user_convertor.go
index b14e6af1..b35ea21f 100644
--- a/plugins/github/tasks/user_convertor.go
+++ b/plugins/github/tasks/user_convertor.go
@@ -54,15 +54,16 @@ func ConvertUsers(taskCtx core.SubTaskContext) error {
 		RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
 			Ctx: taskCtx,
 			Params: GithubApiParams{
-				Owner: data.Options.Owner,
-				Repo:  data.Options.Repo,
+				ConnectionId: data.Options.ConnectionId,
+				Owner:        data.Options.Owner,
+				Repo:         data.Options.Repo,
 			},
 			Table: RAW_COMMIT_TABLE,
 		},
 		Convert: func(inputRow interface{}) ([]interface{}, error) {
 			githubUser := inputRow.(*githubModels.GithubUser)
 			domainUser := &user.User{
-				DomainEntity: domainlayer.DomainEntity{Id: userIdGen.Generate(githubUser.Id)},
+				DomainEntity: domainlayer.DomainEntity{Id: userIdGen.Generate(data.Options.ConnectionId, githubUser.Id)},
 				Name:         githubUser.Login,
 				AvatarUrl:    githubUser.AvatarUrl,
 			}