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

warren 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 ec7ffffb1 fix(sonarqube): fix data loss (#4477)
ec7ffffb1 is described below

commit ec7ffffb1bf3ae8406631fb39198d001525c8127
Author: Warren Chen <[email protected]>
AuthorDate: Tue Feb 21 22:11:02 2023 +0800

    fix(sonarqube): fix data loss (#4477)
---
 backend/plugins/sonarqube/impl/impl.go             | 38 +++++++++-------------
 .../plugins/sonarqube/tasks/issues_collector.go    |  1 -
 .../plugins/sonarqube/tasks/issues_extractor.go    |  7 ++--
 devops/releases/lake-v0.14.0/docker-compose.yml    |  3 ++
 devops/releases/lake-v0.15.0/docker-compose.yml    |  4 +++
 docker-compose.yml                                 |  4 +++
 6 files changed, 28 insertions(+), 29 deletions(-)

diff --git a/backend/plugins/sonarqube/impl/impl.go 
b/backend/plugins/sonarqube/impl/impl.go
index e4655274d..c3be0ba08 100644
--- a/backend/plugins/sonarqube/impl/impl.go
+++ b/backend/plugins/sonarqube/impl/impl.go
@@ -123,30 +123,22 @@ func (p Sonarqube) PrepareTaskData(taskCtx 
plugin.TaskContext, options map[strin
                Options:   op,
                ApiClient: apiClient,
        }
-       if op.ProjectKey != "" {
-               var scope *models.SonarqubeProject
-               var apiProject *tasks.SonarqubeApiProject
-               // support v100 & advance mode
-               // If we still cannot find the record in db, we have to request 
from remote server and save it to db
-               db := taskCtx.GetDal()
-               err = db.First(&scope, dal.Where("connection_id = ? AND 
project_key = ?", op.ConnectionId, op.ProjectKey))
-               if err != nil && db.IsErrorNotFound(err) {
-                       apiProject, err = api.GetApiProject(op.ProjectKey, 
apiClient)
-                       if err != nil {
-                               return nil, err
-                       }
-                       logger.Debug(fmt.Sprintf("Current project: %s", 
apiProject.ProjectKey))
-                       scope = tasks.ConvertProject(apiProject)
-                       scope.ConnectionId = op.ConnectionId
-                       err = taskCtx.GetDal().CreateIfNotExist(&scope)
-                       if err != nil {
-                               return nil, err
-                       }
-               }
-               if err != nil {
-                       return nil, errors.Default.Wrap(err, fmt.Sprintf("fail 
to find project: %s", op.ProjectKey))
-               }
+       // even we have project in _tool_sonaqube_projects, we still need to 
collect project to update LastAnalysisDate
+       var scope *models.SonarqubeProject
+       var apiProject *tasks.SonarqubeApiProject
+       apiProject, err = api.GetApiProject(op.ProjectKey, apiClient)
+       if err != nil {
+               return nil, err
        }
+       logger.Debug(fmt.Sprintf("Current project: %s", apiProject.ProjectKey))
+       scope = tasks.ConvertProject(apiProject)
+       scope.ConnectionId = op.ConnectionId
+       err = taskCtx.GetDal().CreateOrUpdate(&scope)
+       if err != nil {
+               return nil, err
+       }
+       taskData.LastAnalysisDate = scope.LastAnalysisDate.ToNullableTime()
+
        var createdDateAfter time.Time
        if op.CreatedDateAfter != "" {
                createdDateAfter, err = 
errors.Convert01(time.Parse(time.RFC3339, op.CreatedDateAfter))
diff --git a/backend/plugins/sonarqube/tasks/issues_collector.go 
b/backend/plugins/sonarqube/tasks/issues_collector.go
index 4c12a4fb3..8e937e7d3 100644
--- a/backend/plugins/sonarqube/tasks/issues_collector.go
+++ b/backend/plugins/sonarqube/tasks/issues_collector.go
@@ -35,7 +35,6 @@ func CollectIssues(taskCtx plugin.SubTaskContext) (err 
errors.Error) {
        rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, 
RAW_ISSUES_TABLE)
        logger := taskCtx.GetLogger()
        logger.Info("collect issues")
-
        collectorWithState, err := 
helper.NewApiCollectorWithState(*rawDataSubTaskArgs, data.CreatedDateAfter)
        if err != nil {
                return err
diff --git a/backend/plugins/sonarqube/tasks/issues_extractor.go 
b/backend/plugins/sonarqube/tasks/issues_extractor.go
index 2670910ad..3facf5ead 100644
--- a/backend/plugins/sonarqube/tasks/issues_extractor.go
+++ b/backend/plugins/sonarqube/tasks/issues_extractor.go
@@ -22,13 +22,12 @@ import (
        "encoding/hex"
        "encoding/json"
        "fmt"
-       "hash"
-       "strings"
-
        "github.com/apache/incubator-devlake/core/errors"
        "github.com/apache/incubator-devlake/core/plugin"
        helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
        "github.com/apache/incubator-devlake/plugins/sonarqube/models"
+       "hash"
+       "strings"
 )
 
 var _ plugin.SubTaskEntryPoint = ExtractIssues
@@ -45,7 +44,6 @@ func ExtractIssues(taskCtx plugin.SubTaskContext) 
errors.Error {
                        if err != nil {
                                return nil, err
                        }
-
                        sonarqubeIssue := &models.SonarqubeIssue{
                                ConnectionId: data.Options.ConnectionId,
                                IssueKey:     body.Key,
@@ -91,7 +89,6 @@ func ExtractIssues(taskCtx plugin.SubTaskContext) 
errors.Error {
                                        results = append(results, codeBlock)
                                }
                        }
-
                        return results, nil
                },
        })
diff --git a/devops/releases/lake-v0.14.0/docker-compose.yml 
b/devops/releases/lake-v0.14.0/docker-compose.yml
index f912a4307..e9b4d79b9 100644
--- a/devops/releases/lake-v0.14.0/docker-compose.yml
+++ b/devops/releases/lake-v0.14.0/docker-compose.yml
@@ -27,6 +27,9 @@ services:
       MYSQL_DATABASE: lake
       MYSQL_USER: merico
       MYSQL_PASSWORD: merico
+    command:
+      --character-set-server=utf8mb4
+      --collation-server=utf8mb4_bin
 
   grafana:
     image: apache/devlake-dashboard:v0.14.0
diff --git a/devops/releases/lake-v0.15.0/docker-compose.yml 
b/devops/releases/lake-v0.15.0/docker-compose.yml
index 956602f46..32dac09f2 100644
--- a/devops/releases/lake-v0.15.0/docker-compose.yml
+++ b/devops/releases/lake-v0.15.0/docker-compose.yml
@@ -27,6 +27,10 @@ services:
       MYSQL_DATABASE: lake
       MYSQL_USER: merico
       MYSQL_PASSWORD: merico
+    command:
+      --character-set-server=utf8mb4
+      --collation-server=utf8mb4_bin
+
 
   grafana:
     image: apache/devlake-dashboard:v0.15.0
diff --git a/docker-compose.yml b/docker-compose.yml
index 1183b17c5..5fe61e7a0 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -27,6 +27,10 @@ services:
       MYSQL_DATABASE: lake
       MYSQL_USER: merico
       MYSQL_PASSWORD: merico
+    command:
+      --character-set-server=utf8mb4
+      --collation-server=utf8mb4_bin
+
 
   # postgres:
   #   image: postgres:14.2

Reply via email to