You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2022/08/10 07:14:54 UTC

[servicecomb-kie] branch master updated: [feat]upgrade go-chassis (#254)

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

littlecui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-kie.git


The following commit(s) were added to refs/heads/master by this push:
     new 87189ee  [feat]upgrade go-chassis (#254)
87189ee is described below

commit 87189ee9bf2577f7ffbc9c68e85360b47ffadbc7
Author: little-cui <su...@qq.com>
AuthorDate: Wed Aug 10 15:14:49 2022 +0800

    [feat]upgrade go-chassis (#254)
---
 .github/workflows/golangci-lint.yml                |  4 ++--
 go.mod                                             |  8 ++++----
 go.sum                                             |  8 ++++++++
 pkg/common/common.go                               |  8 ++++----
 pkg/concurrency/semaphore.go                       |  6 +++---
 pkg/iputil/ip_util.go                              |  2 +-
 pkg/model/db_schema.go                             |  8 ++++----
 pkg/model/kv.go                                    | 22 ++++++++++----------
 pkg/stringutil/string_util.go                      |  2 +-
 pkg/util/util.go                                   |  4 ++--
 server/cache/long_polling.go                       |  6 +++---
 server/config/config.go                            |  8 ++++----
 server/config/struct.go                            |  6 +++---
 server/config/tlsutil/tlsutil.go                   |  4 ++--
 server/datasource/dao.go                           | 18 ++++++++--------
 server/datasource/etcd/counter/revision.go         |  6 +++---
 server/datasource/etcd/history/history_dao.go      | 12 +++++------
 server/datasource/etcd/kv/kv_dao.go                | 18 ++++++++--------
 server/datasource/etcd/track/polling_detail_dao.go |  8 ++++----
 server/datasource/mongo/counter/revision.go        |  6 +++---
 server/datasource/mongo/counter/struct.go          |  2 +-
 server/datasource/mongo/history/history_dao.go     | 12 +++++------
 server/datasource/mongo/kv/kv_dao.go               | 24 +++++++++++-----------
 .../datasource/mongo/track/polling_detail_dao.go   |  8 ++++----
 server/datasource/options.go                       | 24 +++++++++++-----------
 server/handler/track_handler.go                    |  8 ++++----
 server/plugin/qms/quota.go                         | 10 ++++-----
 server/pubsub/bus.go                               | 12 +++++------
 server/pubsub/event_handler.go                     |  4 ++--
 server/pubsub/notifier/kv.go                       |  2 +-
 server/pubsub/options.go                           |  2 +-
 server/pubsub/struct.go                            | 20 +++++++++---------
 server/rbac/rbac.go                                | 10 ++++-----
 server/resource/v1/admin_resource.go               |  4 ++--
 server/resource/v1/common.go                       | 14 ++++++-------
 server/resource/v1/doc_struct.go                   | 20 +++++++++---------
 server/resource/v1/history_resource.go             |  8 ++++----
 server/resource/v1/kv_resource.go                  | 20 +++++++++---------
 server/service/kv/kv_svc.go                        |  8 ++++----
 39 files changed, 192 insertions(+), 184 deletions(-)

diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml
index 91e59ae..fea97e3 100644
--- a/.github/workflows/golangci-lint.yml
+++ b/.github/workflows/golangci-lint.yml
@@ -15,8 +15,8 @@ jobs:
       - name: golangci-lint
         uses: golangci/golangci-lint-action@v2
         with:
-          version: v1.45.2
-          args: --enable gofmt,gocyclo,goimports,dupl,gosec --skip-dirs=examples,test --skip-files=.*_test.go$
+          version: v1.48.0
+          args: --enable gofmt,gocyclo,goimports,dupl,gosec --timeout 5m --skip-dirs=examples,test --skip-files=.*_test.go$
   static-checks:
     runs-on: ubuntu-latest
     env:
diff --git a/go.mod b/go.mod
index 6096bcd..df8d377 100644
--- a/go.mod
+++ b/go.mod
@@ -2,11 +2,11 @@ module github.com/apache/servicecomb-kie
 
 require (
 	github.com/apache/servicecomb-service-center/eventbase v0.0.0-20220120070230-26997eb876ca
-	github.com/emicklei/go-restful v2.12.0+incompatible
+	github.com/emicklei/go-restful v2.15.1-0.20220703112237-d9c71e118c95+incompatible
 	github.com/go-chassis/cari v0.5.1-0.20220216075429-46c79de3311f
 	github.com/go-chassis/foundation v0.4.0
 	github.com/go-chassis/go-archaius v1.5.2-0.20210301074935-e4694f6b077b
-	github.com/go-chassis/go-chassis/v2 v2.3.1-0.20211217084436-360a6a6a0ef3
+	github.com/go-chassis/go-chassis/v2 v2.5.2
 	github.com/go-chassis/openlog v1.1.3
 	github.com/go-chassis/seclog v1.3.1-0.20210917082355-52c40864f240
 	github.com/gofrs/uuid v4.0.0+incompatible
@@ -39,7 +39,7 @@ require (
 	github.com/fatih/color v1.9.0 // indirect
 	github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect
 	github.com/fsnotify/fsnotify v1.4.9 // indirect
-	github.com/go-chassis/go-restful-swagger20 v1.0.3 // indirect
+	github.com/go-chassis/go-restful-swagger20 v1.0.4-0.20220704025524-9243cbee26b7 // indirect
 	github.com/go-chassis/kie-client v0.1.1-0.20210926011742-97eed4281056 // indirect
 	github.com/go-chassis/sc-client v0.6.1-0.20210918130508-2b9daad232da // indirect
 	github.com/go-playground/locales v0.13.0 // indirect
@@ -125,7 +125,7 @@ require (
 	golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 // indirect
 	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
 	golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 // indirect
-	golang.org/x/text v0.3.5 // indirect
+	golang.org/x/text v0.3.7 // indirect
 	golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect
 	google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c // indirect
 	google.golang.org/grpc v1.40.0 // indirect
diff --git a/go.sum b/go.sum
index 8686eb8..a24292e 100644
--- a/go.sum
+++ b/go.sum
@@ -119,6 +119,8 @@ github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkg
 github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/emicklei/go-restful v2.12.0+incompatible h1:SIvoTSbsMEwuM3dzFirLwKc4BH6VXP5CNf+G1FfJVr4=
 github.com/emicklei/go-restful v2.12.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/emicklei/go-restful v2.15.1-0.20220703112237-d9c71e118c95+incompatible h1:o87Jf90Yb9ZvrdJKy2jYAdzosa7MtC2H214tJxJx7As=
+github.com/emicklei/go-restful v2.15.1-0.20220703112237-d9c71e118c95+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@@ -160,8 +162,12 @@ github.com/go-chassis/go-archaius v1.5.2-0.20210301074935-e4694f6b077b/go.mod h1
 github.com/go-chassis/go-chassis/v2 v2.3.0/go.mod h1:iyJ2DWSkqfnCmad/0Il9nXWHaob7RcwPGlIDRNxccH0=
 github.com/go-chassis/go-chassis/v2 v2.3.1-0.20211217084436-360a6a6a0ef3 h1:Ctxgyo/gc5sogcCJLoIvIKj9kEUzJOlbENpYO/nSPWA=
 github.com/go-chassis/go-chassis/v2 v2.3.1-0.20211217084436-360a6a6a0ef3/go.mod h1:oMnRaz2P+OPTtEfh2HEuiF9YzdYHQrNVPXdnbKzKO9w=
+github.com/go-chassis/go-chassis/v2 v2.5.2 h1:Au+rNk3ZYoYHp73HHWMVrI5FIIOBVlt12SyXZjDnC2Q=
+github.com/go-chassis/go-chassis/v2 v2.5.2/go.mod h1:Ru3kB+ndcxxFZl3clnuihKVv+gOi7lOVR9Ghhtw8jaQ=
 github.com/go-chassis/go-restful-swagger20 v1.0.3 h1:kWfeLwMwJZVkXP1zNyFpkmR41UZ55UTcOptTteXhvEs=
 github.com/go-chassis/go-restful-swagger20 v1.0.3/go.mod h1:eW62fYuzlNFDvIacB6AV8bhUDCTy4myfTCv0bT9Gbb0=
+github.com/go-chassis/go-restful-swagger20 v1.0.4-0.20220704025524-9243cbee26b7 h1:EOIGW+inOz52zh6vgr9EQHvvgL2w/VghAeCQIFOVUSE=
+github.com/go-chassis/go-restful-swagger20 v1.0.4-0.20220704025524-9243cbee26b7/go.mod h1:pSGkT+ksxlMgytyJb4IAz8aZih6OLE1++d9CE6aO9Hg=
 github.com/go-chassis/kie-client v0.0.0-20201210060018-938c7680a9ab/go.mod h1:UTdbtyN5ge/v9DmQzdVRxQP7z51Q4z6hyl+W6ZpUHFM=
 github.com/go-chassis/kie-client v0.1.0/go.mod h1:UTdbtyN5ge/v9DmQzdVRxQP7z51Q4z6hyl+W6ZpUHFM=
 github.com/go-chassis/kie-client v0.1.1-0.20210926011742-97eed4281056 h1:Y8CyErFNg4d1dPYXvNWxpyzzLQ/kuyuxJF2/7My7qLc=
@@ -764,6 +770,8 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
 golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
diff --git a/pkg/common/common.go b/pkg/common/common.go
index 205f2ef..5188d32 100644
--- a/pkg/common/common.go
+++ b/pkg/common/common.go
@@ -19,7 +19,7 @@ package common
 
 import "time"
 
-//match mode
+// match mode
 const (
 	QueryParamQ            = "q"
 	QueryByLabelsCon       = "&"
@@ -41,7 +41,7 @@ const (
 	QueryParamOverride     = "override"
 )
 
-//http headers
+// http headers
 const (
 	HeaderDepth       = "X-Depth"
 	HeaderRevision    = "X-Kie-Revision"
@@ -49,14 +49,14 @@ const (
 	HeaderAccept      = "Accept"
 )
 
-//ContentType
+// ContentType
 const (
 	ContentTypeText = "application/text"
 	ContentTypeJSON = "application/json"
 	ContentTypeYaml = "text/yaml"
 )
 
-//const of server
+// const of server
 const (
 	PatternExact            = "exact"
 	StatusEnabled           = "enabled"
diff --git a/pkg/concurrency/semaphore.go b/pkg/concurrency/semaphore.go
index 1dbf671..75445c8 100644
--- a/pkg/concurrency/semaphore.go
+++ b/pkg/concurrency/semaphore.go
@@ -7,12 +7,12 @@ const (
 	MaxConcurrency     = math.MaxUint16
 )
 
-//Semaphore ctl the max concurrency
+// Semaphore ctl the max concurrency
 type Semaphore struct {
 	tickets chan bool
 }
 
-//NewSemaphore accept concurrency number, not more than 65535
+// NewSemaphore accept concurrency number, not more than 65535
 func NewSemaphore(concurrency int) *Semaphore {
 	if concurrency >= math.MaxUint16 {
 		concurrency = MaxConcurrency
@@ -29,7 +29,7 @@ func (b *Semaphore) Acquire() {
 	<-b.tickets
 }
 
-//Release return back signal
+// Release return back signal
 func (b *Semaphore) Release() {
 	b.tickets <- true
 }
diff --git a/pkg/iputil/ip_util.go b/pkg/iputil/ip_util.go
index 7e21854..06ba60d 100644
--- a/pkg/iputil/ip_util.go
+++ b/pkg/iputil/ip_util.go
@@ -6,7 +6,7 @@ import (
 	"strings"
 )
 
-//ClientIP try to get ip from http header
+// ClientIP try to get ip from http header
 func ClientIP(r *http.Request) string {
 	xForwardedFor := r.Header.Get("X-Forwarded-For")
 	ip := strings.TrimSpace(strings.Split(xForwardedFor, ",")[0])
diff --git a/pkg/model/db_schema.go b/pkg/model/db_schema.go
index 3298634..7e4be22 100644
--- a/pkg/model/db_schema.go
+++ b/pkg/model/db_schema.go
@@ -19,7 +19,7 @@ package model
 
 import "time"
 
-//LabelDoc is database struct to store labels
+// LabelDoc is database struct to store labels
 type LabelDoc struct {
 	ID      string            `json:"id,omitempty" bson:"id,omitempty" yaml:"id,omitempty" swag:"string"`
 	Labels  map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
@@ -29,7 +29,7 @@ type LabelDoc struct {
 	Alias   string            `json:"alias,omitempty" yaml:"alias,omitempty"`
 }
 
-//KVDoc is database struct to store kv
+// KVDoc is database struct to store kv
 type KVDoc struct {
 	ID             string `json:"id,omitempty" bson:"id,omitempty" yaml:"id,omitempty" swag:"string"`
 	LabelFormat    string `json:"label_format,omitempty" bson:"label_format,omitempty" yaml:"label_format,omitempty"`
@@ -48,7 +48,7 @@ type KVDoc struct {
 	Domain string            `json:"domain,omitempty" yaml:"domain,omitempty" validate:"min=1,max=256,commonName"`              //redundant
 }
 
-//ViewDoc is db struct, it saves user's custom view name and criteria
+// ViewDoc is db struct, it saves user's custom view name and criteria
 type ViewDoc struct {
 	ID       string `json:"id,omitempty" bson:"id,omitempty" yaml:"id,omitempty" swag:"string"`
 	Display  string `json:"display,omitempty" yaml:"display,omitempty"`
@@ -57,7 +57,7 @@ type ViewDoc struct {
 	Criteria string `json:"criteria,omitempty" yaml:"criteria,omitempty"`
 }
 
-//PollingDetail is db struct, it record operation history
+// PollingDetail is db struct, it record operation history
 type PollingDetail struct {
 	ID           string                 `json:"id,omitempty" yaml:"id,omitempty"`
 	SessionID    string                 `json:"session_id,omitempty" bson:"session_id," yaml:"session_id,omitempty"`
diff --git a/pkg/model/kv.go b/pkg/model/kv.go
index f29186b..c7e3c00 100644
--- a/pkg/model/kv.go
+++ b/pkg/model/kv.go
@@ -17,7 +17,7 @@
 
 package model
 
-//KVRequest is http request body
+// KVRequest is http request body
 type KVRequest struct {
 	Key       string            `json:"key" yaml:"key"`
 	Value     string            `json:"value,omitempty" yaml:"value,omitempty"`
@@ -26,31 +26,31 @@ type KVRequest struct {
 	Labels    map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`                                     //redundant
 }
 
-//KVResponse represents the key value list
+// KVResponse represents the key value list
 type KVResponse struct {
 	Total int      `json:"total"`
 	Data  []*KVDoc `json:"data"`
 }
 
-//LabelDocResponse is label struct
+// LabelDocResponse is label struct
 type LabelDocResponse struct {
 	Labels map[string]string `json:"labels,omitempty"`
 }
 
-//LabelHistoryResponse is label history revision struct
+// LabelHistoryResponse is label history revision struct
 type LabelHistoryResponse struct {
 	Labels   map[string]string `json:"labels,omitempty"`
 	KVs      []*KVDoc          `json:"data,omitempty"`
 	Revision int               `json:"revision"`
 }
 
-//ViewResponse represents the view list
+// ViewResponse represents the view list
 type ViewResponse struct {
 	Total int        `json:"total,omitempty"`
 	Data  []*ViewDoc `json:"data,omitempty"`
 }
 
-//DocResponseSingleKey is response doc
+// DocResponseSingleKey is response doc
 type DocResponseSingleKey struct {
 	CreateRevision int64             `json:"create_revision"`
 	CreateTime     string            `json:"create_time"`
@@ -64,19 +64,19 @@ type DocResponseSingleKey struct {
 	ValueType      string            `json:"value_type"`
 }
 
-//DocResponseGetKey is response doc
+// DocResponseGetKey is response doc
 type DocResponseGetKey struct {
 	Data  []*DocResponseSingleKey `json:"data"`
 	Total int64                   `json:"total"`
 }
 
-//DocRespOfUpload is response doc
+// DocRespOfUpload is response doc
 type DocRespOfUpload struct {
 	Success []*KVDoc             `json:"success"`
 	Failure []*DocFailedOfUpload `json:"failure"`
 }
 
-//DocFailedOfUpload is reponse doc
+// DocFailedOfUpload is reponse doc
 type DocFailedOfUpload struct {
 	Key     string            `json:"key"`
 	Labels  map[string]string `json:"labels"`
@@ -84,13 +84,13 @@ type DocFailedOfUpload struct {
 	ErrMsg  string            `json:"error_message"`
 }
 
-//PollingDataResponse  is response doc
+// PollingDataResponse  is response doc
 type PollingDataResponse struct {
 	Data  []*PollingDetail `json:"data"`
 	Total int              `json:"total"`
 }
 
-//DocHealthCheck is response doc
+// DocHealthCheck is response doc
 type DocHealthCheck struct {
 	Version   string `json:"version"`
 	Revision  string `json:"revision"`
diff --git a/pkg/stringutil/string_util.go b/pkg/stringutil/string_util.go
index 0e0ab86..3ed0789 100644
--- a/pkg/stringutil/string_util.go
+++ b/pkg/stringutil/string_util.go
@@ -27,7 +27,7 @@ const (
 	LabelNone = "none"
 )
 
-//FormatMap format map to string
+// FormatMap format map to string
 func FormatMap(m map[string]string) string {
 	if len(m) == 0 {
 		return LabelNone
diff --git a/pkg/util/util.go b/pkg/util/util.go
index bd83a89..fba4f51 100644
--- a/pkg/util/util.go
+++ b/pkg/util/util.go
@@ -19,8 +19,8 @@ package util
 
 import "reflect"
 
-//IsEquivalentLabel compares whether two labels are equal.
-//In particular, if one is nil and another is an empty map, it return true
+// IsEquivalentLabel compares whether two labels are equal.
+// In particular, if one is nil and another is an empty map, it return true
 func IsEquivalentLabel(x, y map[string]string) bool {
 	if len(x) == 0 && len(y) == 0 {
 		return true
diff --git a/server/cache/long_polling.go b/server/cache/long_polling.go
index b1162ce..2032478 100644
--- a/server/cache/long_polling.go
+++ b/server/cache/long_polling.go
@@ -9,7 +9,7 @@ import (
 
 var pollingCache = &LongPollingCache{}
 
-//LongPollingCache exchange space for time
+// LongPollingCache exchange space for time
 type LongPollingCache struct {
 	m sync.Map
 }
@@ -23,8 +23,8 @@ func CachedKV() *LongPollingCache {
 	return pollingCache
 }
 
-//Read reads the cached query result
-//only need to filter by labels if match pattern is exact
+// Read reads the cached query result
+// only need to filter by labels if match pattern is exact
 func (c *LongPollingCache) Read(topic string) (int64, *model.KVResponse, *errsvc.Error) {
 	value, ok := c.m.Load(topic)
 	if !ok {
diff --git a/server/config/config.go b/server/config/config.go
index 3fc852c..cb8db17 100644
--- a/server/config/config.go
+++ b/server/config/config.go
@@ -25,10 +25,10 @@ import (
 	"gopkg.in/yaml.v2"
 )
 
-//Configurations is kie config items
+// Configurations is kie config items
 var Configurations = &Config{}
 
-//Init initiate config files
+// Init initiate config files
 func Init() error {
 	if err := archaius.AddFile(Configurations.ConfigFile, archaius.WithFileHandler(util.UseFileNameAsKeyContentAsValue)); err != nil {
 		return err
@@ -38,12 +38,12 @@ func Init() error {
 	return yaml.Unmarshal([]byte(content), Configurations)
 }
 
-//GetDB return db configs
+// GetDB return db configs
 func GetDB() DB {
 	return Configurations.DB
 }
 
-//GetRBAC return rbac config
+// GetRBAC return rbac config
 func GetRBAC() RBAC {
 	return Configurations.RBAC
 }
diff --git a/server/config/struct.go b/server/config/struct.go
index 6cc4e74..8526030 100644
--- a/server/config/struct.go
+++ b/server/config/struct.go
@@ -17,7 +17,7 @@
 
 package config
 
-//Config is yaml file struct
+// Config is yaml file struct
 type Config struct {
 	DB   DB   `yaml:"db"`
 	RBAC RBAC `yaml:"rbac"`
@@ -39,7 +39,7 @@ type TLS struct {
 	VerifyPeer  bool   `yaml:"verifyPeer"`
 }
 
-//DB is yaml file struct to set persistent config
+// DB is yaml file struct to set persistent config
 type DB struct {
 	TLS      `yaml:",inline" json:",inline"`
 	URI      string `yaml:"uri" json:"uri,omitempty"`
@@ -48,7 +48,7 @@ type DB struct {
 	Timeout  string `yaml:"timeout" json:"timeout,omitempty"`
 }
 
-//RBAC is rbac config
+// RBAC is rbac config
 type RBAC struct {
 	Enabled    bool   `yaml:"enabled"`
 	PubKeyFile string `yaml:"rsaPublicKeyFile"`
diff --git a/server/config/tlsutil/tlsutil.go b/server/config/tlsutil/tlsutil.go
index 059336a..662c923 100644
--- a/server/config/tlsutil/tlsutil.go
+++ b/server/config/tlsutil/tlsutil.go
@@ -20,7 +20,7 @@ package tlsutil
 import (
 	"crypto/tls"
 	"errors"
-	"io/ioutil"
+	"os"
 
 	"github.com/apache/servicecomb-kie/pkg/cipherutil"
 	"github.com/apache/servicecomb-kie/server/config"
@@ -34,7 +34,7 @@ var ErrRootCAMissing = errors.New("rootCAFile is empty in config file")
 func Config(c *config.TLS) (*tls.Config, error) {
 	var password string
 	if c.CertPwdFile != "" {
-		pwdBytes, err := ioutil.ReadFile(c.CertPwdFile)
+		pwdBytes, err := os.ReadFile(c.CertPwdFile)
 		if err != nil {
 			openlog.Error("read cert password file failed: " + err.Error())
 			return nil, err
diff --git a/server/datasource/dao.go b/server/datasource/dao.go
index ffd5510..7a4870e 100644
--- a/server/datasource/dao.go
+++ b/server/datasource/dao.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-//package dao supply pure persistence layer access
+// package dao supply pure persistence layer access
 package datasource
 
 import (
@@ -48,14 +48,14 @@ const (
 	ConfigResource = "config"
 )
 
-//New init db session
+// New init db session
 type New func(c *Config) (Broker, error)
 
 func RegisterPlugin(name string, f New) {
 	plugins[name] = f
 }
 
-//Broker avoid directly depend on one kind of persistence solution
+// Broker avoid directly depend on one kind of persistence solution
 type Broker interface {
 	GetRevisionDao() RevisionDao
 	GetHistoryDao() HistoryDao
@@ -67,7 +67,7 @@ func GetBroker() Broker {
 	return b
 }
 
-//KVDao provide api of KV entity
+// KVDao provide api of KV entity
 type KVDao interface {
 	// Create Update List are usually for admin console
 	Create(ctx context.Context, kv *model.KVDoc, options ...WriteOption) (*model.KVDoc, error)
@@ -85,26 +85,26 @@ type KVDao interface {
 	Total(ctx context.Context, project, domain string) (int64, error)
 }
 
-//HistoryDao provide api of History entity
+// HistoryDao provide api of History entity
 type HistoryDao interface {
 	AddHistory(ctx context.Context, kv *model.KVDoc) error
 	GetHistory(ctx context.Context, keyID, project, domain string, options ...FindOption) (*model.KVResponse, error)
 	DelayDeletionTime(ctx context.Context, kvIDs []string, project, domain string) error
 }
 
-//TrackDao provide api of Track entity
+// TrackDao provide api of Track entity
 type TrackDao interface {
 	CreateOrUpdate(ctx context.Context, detail *model.PollingDetail) (*model.PollingDetail, error)
 	GetPollingDetail(ctx context.Context, detail *model.PollingDetail) ([]*model.PollingDetail, error)
 }
 
-//RevisionDao is global revision number management
+// RevisionDao is global revision number management
 type RevisionDao interface {
 	GetRevision(ctx context.Context, domain string) (int64, error)
 	ApplyRevision(ctx context.Context, domain string) (int64, error)
 }
 
-//ViewDao create update and get view data
+// ViewDao create update and get view data
 type ViewDao interface {
 	Create(ctx context.Context, viewDoc *model.ViewDoc, options ...FindOption) error
 	Update(ctx context.Context, viewDoc *model.ViewDoc) error
@@ -128,7 +128,7 @@ func Init(kind string) error {
 	return nil
 }
 
-//ClearPart remove domain and project of kv
+// ClearPart remove domain and project of kv
 func ClearPart(kv *model.KVDoc) {
 	kv.Domain = ""
 	kv.Project = ""
diff --git a/server/datasource/etcd/counter/revision.go b/server/datasource/etcd/counter/revision.go
index d1471cc..6788da4 100644
--- a/server/datasource/etcd/counter/revision.go
+++ b/server/datasource/etcd/counter/revision.go
@@ -28,11 +28,11 @@ import (
 
 const revision = "revision_counter"
 
-//Dao is the implementation
+// Dao is the implementation
 type Dao struct {
 }
 
-//GetRevision return current revision number
+// GetRevision return current revision number
 func (s *Dao) GetRevision(ctx context.Context, domain string) (int64, error) {
 	kv, err := etcdadpt.Get(ctx, key.Counter(revision, domain))
 	if err != nil {
@@ -45,7 +45,7 @@ func (s *Dao) GetRevision(ctx context.Context, domain string) (int64, error) {
 	return kv.Version, nil
 }
 
-//ApplyRevision increase revision number and return modified value
+// ApplyRevision increase revision number and return modified value
 func (s *Dao) ApplyRevision(ctx context.Context, domain string) (int64, error) {
 	resp, err := etcdadpt.PutBytesAndGet(ctx, key.Counter(revision, domain), nil)
 	if err != nil {
diff --git a/server/datasource/etcd/history/history_dao.go b/server/datasource/etcd/history/history_dao.go
index feec630..4139684 100644
--- a/server/datasource/etcd/history/history_dao.go
+++ b/server/datasource/etcd/history/history_dao.go
@@ -29,11 +29,11 @@ import (
 	"github.com/apache/servicecomb-kie/server/datasource/etcd/key"
 )
 
-//Dao is the implementation
+// Dao is the implementation
 type Dao struct {
 }
 
-//GetHistory get all history by label id
+// GetHistory get all history by label id
 func (s *Dao) GetHistory(ctx context.Context, kvID, project, domain string, options ...datasource.FindOption) (*model.KVResponse, error) {
 	opts := datasource.FindOptions{}
 	for _, o := range options {
@@ -78,7 +78,7 @@ func pagingResult(histories []*model.KVDoc, offset, limit int64) []*model.KVDoc
 	return histories[offset:end]
 }
 
-//AddHistory add kv history
+// AddHistory add kv history
 func (s *Dao) AddHistory(ctx context.Context, kv *model.KVDoc) error {
 	bytes, err := json.Marshal(kv)
 	if err != nil {
@@ -98,8 +98,8 @@ func (s *Dao) AddHistory(ctx context.Context, kv *model.KVDoc) error {
 	return nil
 }
 
-//DelayDeletionTime add delete time to all revisions of the kv,
-//thus these revisions will be automatically deleted by TTL index.
+// DelayDeletionTime add delete time to all revisions of the kv,
+// thus these revisions will be automatically deleted by TTL index.
 // TODO support delay deletion
 func (s *Dao) DelayDeletionTime(ctx context.Context, kvIDs []string, project, domain string) error {
 	var opts []etcdadpt.OpOptions
@@ -114,7 +114,7 @@ func (s *Dao) DelayDeletionTime(ctx context.Context, kvIDs []string, project, do
 	return nil
 }
 
-//historyRotate delete historical versions for a key that exceeds the limited number
+// historyRotate delete historical versions for a key that exceeds the limited number
 func (s *Dao) historyRotate(ctx context.Context, kvID, project, domain string) error {
 	resp, err := s.GetHistory(ctx, kvID, project, domain)
 	if err != nil {
diff --git a/server/datasource/etcd/kv/kv_dao.go b/server/datasource/etcd/kv/kv_dao.go
index d7e317a..93cfc39 100644
--- a/server/datasource/etcd/kv/kv_dao.go
+++ b/server/datasource/etcd/kv/kv_dao.go
@@ -33,7 +33,7 @@ import (
 	"github.com/apache/servicecomb-kie/server/datasource/etcd/key"
 )
 
-//Dao operate data in mongodb
+// Dao operate data in mongodb
 type Dao struct {
 }
 
@@ -99,7 +99,7 @@ func txnCreate(ctx context.Context, kv *model.KVDoc) (bool, error) {
 	return resp.Succeeded, nil
 }
 
-//Update update key value
+// Update update key value
 func (s *Dao) Update(ctx context.Context, kv *model.KVDoc, options ...datasource.WriteOption) error {
 	keyKV := key.KV(kv.Domain, kv.Project, kv.ID)
 	resp, err := etcdadpt.Get(ctx, keyKV)
@@ -169,14 +169,14 @@ func update(ctx context.Context, kv *model.KVDoc, options ...datasource.WriteOpt
 	return etcdadpt.PutBytes(ctx, keyKV, kvBytes)
 }
 
-//Extract key values
+// Extract key values
 func getValue(str string) string {
 	rex := regexp.MustCompile(`\(([^)]+)\)`)
 	res := rex.FindStringSubmatch(str)
 	return res[len(res)-1]
 }
 
-//Exist supports you query a key value by label map or labels id
+// Exist supports you query a key value by label map or labels id
 func (s *Dao) Exist(ctx context.Context, key, project, domain string, options ...datasource.FindOption) (bool, error) {
 	opts := datasource.FindOptions{Key: key}
 	for _, o := range options {
@@ -200,8 +200,8 @@ func (s *Dao) Exist(ctx context.Context, key, project, domain string, options ..
 	return true, nil
 }
 
-//FindOneAndDelete deletes one kv by id and return the deleted kv as these appeared before deletion
-//domain=tenant
+// FindOneAndDelete deletes one kv by id and return the deleted kv as these appeared before deletion
+// domain=tenant
 func (s *Dao) FindOneAndDelete(ctx context.Context, kvID, project, domain string, options ...datasource.WriteOption) (*model.KVDoc, error) {
 	opts := datasource.NewWriteOptions(options...)
 	if opts.SyncEnable {
@@ -287,7 +287,7 @@ func getKVDoc(ctx context.Context, domain, project, kvID string) (*model.KVDoc,
 	return curKV, nil
 }
 
-//FindManyAndDelete deletes multiple kvs and return the deleted kv list as these appeared before deletion
+// FindManyAndDelete deletes multiple kvs and return the deleted kv list as these appeared before deletion
 func (s *Dao) FindManyAndDelete(ctx context.Context, kvIDs []string, project, domain string, options ...datasource.WriteOption) ([]*model.KVDoc, int64, error) {
 	opts := datasource.NewWriteOptions(options...)
 	if opts.SyncEnable {
@@ -395,7 +395,7 @@ func txnFindManyAndDelete(ctx context.Context, kvIDs []string, project, domain s
 	return docs, int64(successKVNum), nil
 }
 
-//Get get kv by kv id
+// Get get kv by kv id
 func (s *Dao) Get(ctx context.Context, req *model.GetKVRequest) (*model.KVDoc, error) {
 	resp, err := etcdadpt.Get(ctx, key.KV(req.Domain, req.Project, req.ID))
 	if err != nil {
@@ -423,7 +423,7 @@ func (s *Dao) Total(ctx context.Context, project, domain string) (int64, error)
 	return total, err
 }
 
-//List get kv list by key and criteria
+// List get kv list by key and criteria
 func (s *Dao) List(ctx context.Context, project, domain string, options ...datasource.FindOption) (*model.KVResponse, error) {
 	opts := datasource.NewDefaultFindOpts()
 	for _, o := range options {
diff --git a/server/datasource/etcd/track/polling_detail_dao.go b/server/datasource/etcd/track/polling_detail_dao.go
index 8e29083..58bd183 100644
--- a/server/datasource/etcd/track/polling_detail_dao.go
+++ b/server/datasource/etcd/track/polling_detail_dao.go
@@ -28,12 +28,12 @@ import (
 	"github.com/little-cui/etcdadpt"
 )
 
-//Dao is the implementation
+// Dao is the implementation
 type Dao struct {
 }
 
-//CreateOrUpdate create a record or update exist record
-//If revision and session_id exists then update else insert
+// CreateOrUpdate create a record or update exist record
+// If revision and session_id exists then update else insert
 func (s *Dao) CreateOrUpdate(ctx context.Context, detail *model.PollingDetail) (*model.PollingDetail, error) {
 	bytes, err := json.Marshal(detail)
 	if err != nil {
@@ -48,7 +48,7 @@ func (s *Dao) CreateOrUpdate(ctx context.Context, detail *model.PollingDetail) (
 	return detail, nil
 }
 
-//GetPollingDetail is to get a track data
+// GetPollingDetail is to get a track data
 func (s *Dao) GetPollingDetail(ctx context.Context, detail *model.PollingDetail) ([]*model.PollingDetail, error) {
 	kvs, n, err := etcdadpt.List(ctx, key.TrackList(detail.Domain, detail.Project))
 	if err != nil {
diff --git a/server/datasource/mongo/counter/revision.go b/server/datasource/mongo/counter/revision.go
index 1fb42bb..1a2c9e8 100644
--- a/server/datasource/mongo/counter/revision.go
+++ b/server/datasource/mongo/counter/revision.go
@@ -31,11 +31,11 @@ import (
 
 const revision = "revision_counter"
 
-//Dao is the implementation
+// Dao is the implementation
 type Dao struct {
 }
 
-//GetRevision return current revision number
+// GetRevision return current revision number
 func (s *Dao) GetRevision(ctx context.Context, domain string) (int64, error) {
 	collection := mongo.GetClient().GetDB().Collection(model.CollectionCounter)
 	filter := bson.M{"name": revision, "domain": domain}
@@ -59,7 +59,7 @@ func (s *Dao) GetRevision(ctx context.Context, domain string) (int64, error) {
 	return c.Count, nil
 }
 
-//ApplyRevision increase revision number and return modified value
+// ApplyRevision increase revision number and return modified value
 func (s *Dao) ApplyRevision(ctx context.Context, domain string) (int64, error) {
 	collection := mongo.GetClient().GetDB().Collection(model.CollectionCounter)
 	filter := bson.M{"name": revision, "domain": domain}
diff --git a/server/datasource/mongo/counter/struct.go b/server/datasource/mongo/counter/struct.go
index 07ed5bf..87f5505 100644
--- a/server/datasource/mongo/counter/struct.go
+++ b/server/datasource/mongo/counter/struct.go
@@ -17,7 +17,7 @@
 
 package counter
 
-//Counter is db schema
+// Counter is db schema
 type Counter struct {
 	Name  string `bson:"name,omitempty"`
 	Count int64  `bson:"count,omitempty"`
diff --git a/server/datasource/mongo/history/history_dao.go b/server/datasource/mongo/history/history_dao.go
index b8906f4..b8b3252 100644
--- a/server/datasource/mongo/history/history_dao.go
+++ b/server/datasource/mongo/history/history_dao.go
@@ -33,11 +33,11 @@ import (
 	mmodel "github.com/apache/servicecomb-kie/server/datasource/mongo/model"
 )
 
-//Dao is the implementation
+// Dao is the implementation
 type Dao struct {
 }
 
-//GetHistory get all history by label id
+// GetHistory get all history by label id
 func (s *Dao) GetHistory(ctx context.Context, kvID, project, domain string, options ...datasource.FindOption) (*model.KVResponse, error) {
 	var filter primitive.M
 	opts := datasource.FindOptions{}
@@ -94,7 +94,7 @@ func getHistoryByKeyID(ctx context.Context, filter bson.M, offset, limit int64)
 	return result, nil
 }
 
-//AddHistory add kv history
+// AddHistory add kv history
 func (s *Dao) AddHistory(ctx context.Context, kv *model.KVDoc) error {
 	collection := mongo.GetClient().GetDB().Collection(mmodel.CollectionKVRevision)
 	_, err := collection.InsertOne(ctx, kv)
@@ -110,8 +110,8 @@ func (s *Dao) AddHistory(ctx context.Context, kv *model.KVDoc) error {
 	return nil
 }
 
-//DelayDeletionTime add delete time to all revisions of the kv,
-//thus these revisions will be automatically deleted by TTL index.
+// DelayDeletionTime add delete time to all revisions of the kv,
+// thus these revisions will be automatically deleted by TTL index.
 func (s *Dao) DelayDeletionTime(ctx context.Context, kvIDs []string, project, domain string) error {
 	collection := mongo.GetClient().GetDB().Collection(mmodel.CollectionKVRevision)
 	now := time.Now()
@@ -132,7 +132,7 @@ func (s *Dao) DelayDeletionTime(ctx context.Context, kvIDs []string, project, do
 	return nil
 }
 
-//historyRotate delete historical versions for a key that exceeds the limited number
+// historyRotate delete historical versions for a key that exceeds the limited number
 func historyRotate(ctx context.Context, kvID, project, domain string) error {
 	filter := bson.M{"id": kvID, "domain": domain, "project": project}
 	collection := mongo.GetClient().GetDB().Collection(mmodel.CollectionKVRevision)
diff --git a/server/datasource/mongo/kv/kv_dao.go b/server/datasource/mongo/kv/kv_dao.go
index 1338fae..5f70e51 100644
--- a/server/datasource/mongo/kv/kv_dao.go
+++ b/server/datasource/mongo/kv/kv_dao.go
@@ -41,7 +41,7 @@ const (
 	FmtErrFindKvFailed = "can not find kv in %s"
 )
 
-//Dao operate data in mongodb
+// Dao operate data in mongodb
 type Dao struct {
 }
 
@@ -133,7 +133,7 @@ func txnCreate(ctx context.Context, kv *model.KVDoc) (*model.KVDoc, error) {
 	return kv, nil
 }
 
-//Update update key value
+// Update update key value
 func (s *Dao) Update(ctx context.Context, kv *model.KVDoc, options ...datasource.WriteOption) error {
 	opts := datasource.NewWriteOptions(options...)
 	// if syncEnable is true, will create kv with task
@@ -246,7 +246,7 @@ func txnUpdate(ctx context.Context, kv *model.KVDoc) error {
 	return nil
 }
 
-//Extract key values
+// Extract key values
 func getValue(str string) string {
 	rex := regexp.MustCompile(`\(([^)]+)\)`)
 	res := rex.FindStringSubmatch(str)
@@ -326,7 +326,7 @@ func findOneKey(ctx context.Context, filter bson.M) ([]*model.KVDoc, error) {
 	return []*model.KVDoc{curKV}, nil
 }
 
-//Exist supports you query a key value by label map or labels id
+// Exist supports you query a key value by label map or labels id
 func (s *Dao) Exist(ctx context.Context, key, project, domain string, options ...datasource.FindOption) (bool, error) {
 	opts := datasource.FindOptions{}
 	for _, o := range options {
@@ -359,8 +359,8 @@ func (s *Dao) Exist(ctx context.Context, key, project, domain string, options ..
 
 }
 
-//FindOneAndDelete deletes one kv by id and return the deleted kv as these appeared before deletion
-//domain=tenant
+// FindOneAndDelete deletes one kv by id and return the deleted kv as these appeared before deletion
+// domain=tenant
 func (s *Dao) FindOneAndDelete(ctx context.Context, kvID, project, domain string, options ...datasource.WriteOption) (*model.KVDoc, error) {
 	opts := datasource.NewWriteOptions(options...)
 	if opts.SyncEnable {
@@ -486,7 +486,7 @@ func txnFindOneAndDelete(ctx context.Context, kvID, project, domain string) (*mo
 	return curKV, nil
 }
 
-//FindManyAndDelete deletes multiple kvs and return the deleted kv list as these appeared before deletion
+// FindManyAndDelete deletes multiple kvs and return the deleted kv list as these appeared before deletion
 func (s *Dao) FindManyAndDelete(ctx context.Context, kvIDs []string, project, domain string, options ...datasource.WriteOption) ([]*model.KVDoc, int64, error) {
 	opts := datasource.NewWriteOptions(options...)
 	if opts.SyncEnable {
@@ -642,9 +642,9 @@ func findKeys(ctx context.Context, filter interface{}, withoutLabel bool) ([]*mo
 	return kvs, nil
 }
 
-//findKVByLabel get kvs by key and label
-//key can be empty, then it will return all key values
-//if key is given, will return 0-1 key value
+// findKVByLabel get kvs by key and label
+// key can be empty, then it will return all key values
+// if key is given, will return 0-1 key value
 func findKVByLabel(ctx context.Context, domain, labelFormat, key string, project string) ([]*model.KVDoc, error) {
 	filter := bson.M{"label_format": labelFormat, "domain": domain, "project": project}
 	if key != "" {
@@ -655,7 +655,7 @@ func findKVByLabel(ctx context.Context, domain, labelFormat, key string, project
 
 }
 
-//Get get kv by kv id
+// Get get kv by kv id
 func (s *Dao) Get(ctx context.Context, req *model.GetKVRequest) (*model.KVDoc, error) {
 	filter := bson.M{"id": req.ID, "domain": req.Domain, "project": req.Project}
 	kvs, err := findOneKey(ctx, filter)
@@ -677,7 +677,7 @@ func (s *Dao) Total(ctx context.Context, project, domain string) (int64, error)
 	return total, err
 }
 
-//List get kv list by key and criteria
+// List get kv list by key and criteria
 func (s *Dao) List(ctx context.Context, project, domain string, options ...datasource.FindOption) (*model.KVResponse, error) {
 	opts := datasource.NewDefaultFindOpts()
 	for _, o := range options {
diff --git a/server/datasource/mongo/track/polling_detail_dao.go b/server/datasource/mongo/track/polling_detail_dao.go
index 27ceae8..1deadce 100644
--- a/server/datasource/mongo/track/polling_detail_dao.go
+++ b/server/datasource/mongo/track/polling_detail_dao.go
@@ -31,12 +31,12 @@ import (
 	mmodel "github.com/apache/servicecomb-kie/server/datasource/mongo/model"
 )
 
-//Dao is the implementation
+// Dao is the implementation
 type Dao struct {
 }
 
-//CreateOrUpdate create a record or update exist record
-//If revision and session_id exists then update else insert
+// CreateOrUpdate create a record or update exist record
+// If revision and session_id exists then update else insert
 func (s *Dao) CreateOrUpdate(ctx context.Context, detail *model.PollingDetail) (*model.PollingDetail, error) {
 	collection := dmongo.GetClient().GetDB().Collection(mmodel.CollectionPollingDetail)
 	queryFilter := bson.M{"revision": detail.Revision, "domain": detail.Domain, "session_id": detail.SessionID}
@@ -63,7 +63,7 @@ func (s *Dao) CreateOrUpdate(ctx context.Context, detail *model.PollingDetail) (
 	return detail, nil
 }
 
-//Get is to get a track data
+// Get is to get a track data
 func (s *Dao) GetPollingDetail(ctx context.Context, detail *model.PollingDetail) ([]*model.PollingDetail, error) {
 	collection := dmongo.GetClient().GetDB().Collection(mmodel.CollectionPollingDetail)
 	queryFilter := bson.M{"domain": detail.Domain}
diff --git a/server/datasource/options.go b/server/datasource/options.go
index 5d80af0..086dd01 100644
--- a/server/datasource/options.go
+++ b/server/datasource/options.go
@@ -26,7 +26,7 @@ const DefaultTimeout = 60 * time.Second
 type Config struct {
 }
 
-//NewDefaultFindOpts return default options
+// NewDefaultFindOpts return default options
 func NewDefaultFindOpts() FindOptions {
 	return FindOptions{
 		Timeout: DefaultTimeout,
@@ -56,7 +56,7 @@ type WriteOptions struct {
 	SyncEnable bool
 }
 
-//FindOptions is option to find key value
+// FindOptions is option to find key value
 type FindOptions struct {
 	ExactLabels bool
 	Status      string
@@ -76,7 +76,7 @@ type FindOptions struct {
 // WriteOption is functional option to create, update and delete kv
 type WriteOption func(*WriteOptions)
 
-//FindOption is functional option to find key value
+// FindOption is functional option to find key value
 type FindOption func(*FindOptions)
 
 // WithSync indicates that the synchronization function is on
@@ -86,63 +86,63 @@ func WithSync(enabled bool) WriteOption {
 	}
 }
 
-//WithExactLabels tell model service to return only one kv matches the labels
+// WithExactLabels tell model service to return only one kv matches the labels
 func WithExactLabels() FindOption {
 	return func(o *FindOptions) {
 		o.ExactLabels = true
 	}
 }
 
-//WithID find by kvID
+// WithID find by kvID
 func WithID(id string) FindOption {
 	return func(o *FindOptions) {
 		o.ID = id
 	}
 }
 
-//WithKey find by key
+// WithKey find by key
 func WithKey(key string) FindOption {
 	return func(o *FindOptions) {
 		o.Key = key
 	}
 }
 
-//WithStatus enabled/disabled
+// WithStatus enabled/disabled
 func WithStatus(status string) FindOption {
 	return func(o *FindOptions) {
 		o.Status = status
 	}
 }
 
-//WithTimeout will return err if execution take too long
+// WithTimeout will return err if execution take too long
 func WithTimeout(d time.Duration) FindOption {
 	return func(o *FindOptions) {
 		o.Timeout = d
 	}
 }
 
-//WithLabels find kv by labels
+// WithLabels find kv by labels
 func WithLabels(labels map[string]string) FindOption {
 	return func(o *FindOptions) {
 		o.Labels = labels
 	}
 }
 
-//WithLabelFormat find kv by label string
+// WithLabelFormat find kv by label string
 func WithLabelFormat(label string) FindOption {
 	return func(o *FindOptions) {
 		o.LabelFormat = label
 	}
 }
 
-//WithLimit tells service paging limit
+// WithLimit tells service paging limit
 func WithLimit(l int64) FindOption {
 	return func(o *FindOptions) {
 		o.Limit = l
 	}
 }
 
-//WithOffset tells service paging offset
+// WithOffset tells service paging offset
 func WithOffset(os int64) FindOption {
 	return func(o *FindOptions) {
 		o.Offset = os
diff --git a/server/handler/track_handler.go b/server/handler/track_handler.go
index 30e2f8a..29328e1 100644
--- a/server/handler/track_handler.go
+++ b/server/handler/track_handler.go
@@ -34,15 +34,15 @@ import (
 	"github.com/go-chassis/openlog"
 )
 
-//const of noop auth handler
+// const of noop auth handler
 const (
 	TrackHandlerName = "track-handler"
 )
 
-//TrackHandler tracks polling data
+// TrackHandler tracks polling data
 type TrackHandler struct{}
 
-//Handle set local attribute to http request
+// Handle set local attribute to http request
 func (h *TrackHandler) Handle(chain *handler.Chain, inv *invocation.Invocation, cb invocation.ResponseCallBack) {
 	req, ok := inv.Args.(*restful.Request)
 	if !ok {
@@ -105,7 +105,7 @@ func newTrackHandler() handler.Handler {
 	return &TrackHandler{}
 }
 
-//Name is handler name
+// Name is handler name
 func (h *TrackHandler) Name() string {
 	return TrackHandlerName
 }
diff --git a/server/plugin/qms/quota.go b/server/plugin/qms/quota.go
index 14aff5b..303775f 100644
--- a/server/plugin/qms/quota.go
+++ b/server/plugin/qms/quota.go
@@ -26,13 +26,13 @@ import (
 	"github.com/go-chassis/openlog"
 )
 
-//const
+// const
 const (
 	DefaultQuota   = 10000
 	QuotaConfigKey = "QUOTA_CONFIG"
 )
 
-//BuildInManager read env config to max config item number, and db total usage
+// BuildInManager read env config to max config item number, and db total usage
 // it is not a centralized QMS.
 type BuildInManager struct {
 }
@@ -45,7 +45,7 @@ func (m *BuildInManager) GetQuota(domain, project, resource string) (*quota.Quot
 	panic("implement me")
 }
 
-//GetQuotas get usage and quota
+// GetQuotas get usage and quota
 func (m *BuildInManager) GetQuotas(domain, project string) ([]*quota.Quota, error) {
 	max := archaius.GetInt64(QuotaConfigKey, DefaultQuota)
 	total, err := datasource.GetBroker().GetKVDao().Total(context.TODO(), project, domain)
@@ -59,12 +59,12 @@ func (m *BuildInManager) GetQuotas(domain, project string) ([]*quota.Quota, erro
 	}}, nil
 }
 
-//IncreaseUsed no use
+// IncreaseUsed no use
 func (m *BuildInManager) IncreaseUsed(domain, project, resource string, used int64) error {
 	return nil
 }
 
-//DecreaseUsed no use
+// DecreaseUsed no use
 func (m *BuildInManager) DecreaseUsed(domain, project, resource string, used int64) error {
 	return nil
 }
diff --git a/server/pubsub/bus.go b/server/pubsub/bus.go
index 45a3118..7210369 100644
--- a/server/pubsub/bus.go
+++ b/server/pubsub/bus.go
@@ -34,7 +34,7 @@ import (
 var once sync.Once
 var bus *Bus
 
-//const
+// const
 const (
 	EventKVChange             = "kv-chg"
 	DefaultEventBatchSize     = 5000
@@ -47,12 +47,12 @@ func Topics() *sync.Map {
 	return &topics
 }
 
-//Bus is message bug
+// Bus is message bug
 type Bus struct {
 	agent *agent.Agent
 }
 
-//Init create serf agent
+// Init create serf agent
 func Init() {
 	once.Do(func() {
 		ac := agent.DefaultConfig()
@@ -98,7 +98,7 @@ func splitHostPort(advertiseAddr string, defaultHost string, defaultPort int) (s
 	return host, p
 }
 
-//Start start serf agent
+// Start start serf agent
 func Start() {
 	err := bus.agent.Start()
 	if err != nil {
@@ -125,7 +125,7 @@ func join(addresses []string) error {
 	return nil
 }
 
-//Publish send event
+// Publish send event
 func Publish(event *KVChangeEvent) error {
 	b, err := json.Marshal(event)
 	if err != nil {
@@ -135,7 +135,7 @@ func Publish(event *KVChangeEvent) error {
 
 }
 
-//AddObserver observe key changes by (key or labels) or (key and labels)
+// AddObserver observe key changes by (key or labels) or (key and labels)
 func AddObserver(o *Observer, topic *Topic) (string, error) {
 	t, err := topic.Encode()
 	if err != nil {
diff --git a/server/pubsub/event_handler.go b/server/pubsub/event_handler.go
index e6ecdb7..afa95fe 100644
--- a/server/pubsub/event_handler.go
+++ b/server/pubsub/event_handler.go
@@ -32,11 +32,11 @@ func RegisterHandler(typ string, h agent.EventHandler) {
 	openlog.Info("register handler for:" + typ)
 }
 
-//ClusterEventHandler handler serf custom event, it is singleton
+// ClusterEventHandler handler serf custom event, it is singleton
 type ClusterEventHandler struct {
 }
 
-//HandleEvent send event to subscribers
+// HandleEvent send event to subscribers
 func (h *ClusterEventHandler) HandleEvent(e serf.Event) {
 	openlog.Debug("receive event:" + e.EventType().String())
 	switch e.EventType().String() {
diff --git a/server/pubsub/notifier/kv.go b/server/pubsub/notifier/kv.go
index 634f1c3..889941d 100644
--- a/server/pubsub/notifier/kv.go
+++ b/server/pubsub/notifier/kv.go
@@ -13,7 +13,7 @@ import (
 	"github.com/hashicorp/serf/serf"
 )
 
-//KVHandler handler serf custom event, it is singleton
+// KVHandler handler serf custom event, it is singleton
 type KVHandler struct {
 	BatchSize          int
 	BatchInterval      time.Duration
diff --git a/server/pubsub/options.go b/server/pubsub/options.go
index 87e7757..14e2541 100644
--- a/server/pubsub/options.go
+++ b/server/pubsub/options.go
@@ -17,7 +17,7 @@
 
 package pubsub
 
-//Options is serf options
+// Options is serf options
 type Options struct {
 	BindAddr      string
 	AdvertiseAddr string
diff --git a/server/pubsub/struct.go b/server/pubsub/struct.go
index 5ec65cd..d4ed789 100644
--- a/server/pubsub/struct.go
+++ b/server/pubsub/struct.go
@@ -33,7 +33,7 @@ const (
 	ActionDelete = "del"
 )
 
-//KVChangeEvent is event between kie nodes, and broadcast by serf
+// KVChangeEvent is event between kie nodes, and broadcast by serf
 type KVChangeEvent struct {
 	Key      string
 	Action   string //include: put,delete
@@ -46,14 +46,14 @@ func (e *KVChangeEvent) String() string {
 	return strings.Join([]string{e.Key, e.Action, stringutil.FormatMap(e.Labels), e.DomainID, e.Project}, ";;")
 }
 
-//NewKVChangeEvent create a struct base on event payload
+// NewKVChangeEvent create a struct base on event payload
 func NewKVChangeEvent(payload []byte) (*KVChangeEvent, error) {
 	ke := &KVChangeEvent{}
 	err := json.Unmarshal(payload, ke)
 	return ke, err
 }
 
-//Topic can be subscribe
+// Topic can be subscribe
 type Topic struct {
 	Labels       map[string]string `json:"-"`
 	LabelsFormat string            `json:"labels,omitempty"`
@@ -71,7 +71,7 @@ func (t *Topic) Encode() (string, error) {
 	return string(b), nil
 }
 
-//ParseTopic parse topic string to topic struct
+// ParseTopic parse topic string to topic struct
 func ParseTopic(s string) (*Topic, error) {
 	t := &Topic{
 		Labels: make(map[string]string),
@@ -96,12 +96,12 @@ func ParseTopic(s string) (*Topic, error) {
 	return t, err
 }
 
-//Match compare event with topic
-//If the match type is set to exact in long pulling request, only update request with exactly
-//the same label of pulling request will match the request and will trigger an immediate return.
+// Match compare event with topic
+// If the match type is set to exact in long pulling request, only update request with exactly
+// the same label of pulling request will match the request and will trigger an immediate return.
 //
-//If the match type is not set, it will be matched when pulling request labels is equal to
-//update request labels or a subset of it.
+// If the match type is not set, it will be matched when pulling request labels is equal to
+// update request labels or a subset of it.
 func (t *Topic) Match(event *KVChangeEvent) bool {
 	match := false
 	if t.MatchType == common.PatternExact {
@@ -121,7 +121,7 @@ func (t *Topic) Match(event *KVChangeEvent) bool {
 	return match
 }
 
-//Observer represents a client polling request
+// Observer represents a client polling request
 type Observer struct {
 	UUID  string
 	Event chan *KVChangeEvent
diff --git a/server/rbac/rbac.go b/server/rbac/rbac.go
index 659cfd9..b7614fa 100644
--- a/server/rbac/rbac.go
+++ b/server/rbac/rbac.go
@@ -18,8 +18,8 @@
 package rbac
 
 import (
-	"io/ioutil"
 	"net/http"
+	"os"
 	"path/filepath"
 	"strings"
 
@@ -36,7 +36,7 @@ const (
 	pubContentKey = "rbac.publicKey"
 )
 
-//Init initialize the rbac module
+// Init initialize the rbac module
 func Init() {
 	if !config.GetRBAC().Enabled {
 		openlog.Info("rbac is disabled")
@@ -74,10 +74,10 @@ func Init() {
 	openlog.Info("rbac is enabled")
 }
 
-//loadPublicKey read key to memory
+// loadPublicKey read key to memory
 func loadPublicKey() {
 	pf := config.GetRBAC().PubKeyFile
-	content, err := ioutil.ReadFile(filepath.Clean(pf))
+	content, err := os.ReadFile(filepath.Clean(pf))
 	if err != nil {
 		openlog.Fatal(err.Error())
 		return
@@ -88,7 +88,7 @@ func loadPublicKey() {
 	}
 }
 
-//PublicKey get public key to verify a token
+// PublicKey get public key to verify a token
 func PublicKey() string {
 	return archaius.GetString(pubContentKey, "")
 }
diff --git a/server/resource/v1/admin_resource.go b/server/resource/v1/admin_resource.go
index 0edb732..4d79eb1 100644
--- a/server/resource/v1/admin_resource.go
+++ b/server/resource/v1/admin_resource.go
@@ -34,7 +34,7 @@ import (
 type AdminResource struct {
 }
 
-//URLPatterns defined config operations
+// URLPatterns defined config operations
 func (r *AdminResource) URLPatterns() []restful.Route {
 	return []restful.Route{
 		{
@@ -55,7 +55,7 @@ func (r *AdminResource) URLPatterns() []restful.Route {
 	}
 }
 
-//HealthCheck provider version info and time info
+// HealthCheck provider version info and time info
 func (r *AdminResource) HealthCheck(context *restful.Context) {
 	domain := ReadDomain(context.Ctx)
 	resp := &model.DocHealthCheck{}
diff --git a/server/resource/v1/common.go b/server/resource/v1/common.go
index 4baff07..2f19140 100644
--- a/server/resource/v1/common.go
+++ b/server/resource/v1/common.go
@@ -43,7 +43,7 @@ import (
 	"gopkg.in/yaml.v2"
 )
 
-//const of server
+// const of server
 const (
 	HeaderUserAgent    = "User-Agent"
 	HeaderSessionID    = "X-Session-Id"
@@ -65,7 +65,7 @@ func NewObserver() (*pubsub.Observer, error) {
 	}, nil
 }
 
-//err
+// err
 var (
 	ErrInvalidRev = errors.New(common.MsgInvalidRev)
 
@@ -74,7 +74,7 @@ var (
 	ErrIDIsNil        = errors.New("id is empty")
 )
 
-//ReadClaims get auth info
+// ReadClaims get auth info
 func ReadClaims(ctx context.Context) map[string]interface{} {
 	c, err := rbac.FromContext(ctx)
 	if err != nil {
@@ -83,7 +83,7 @@ func ReadClaims(ctx context.Context) map[string]interface{} {
 	return c
 }
 
-//ReadDomain get domain info
+// ReadDomain get domain info
 func ReadDomain(ctx context.Context) string {
 	c := ReadClaims(ctx)
 	if c != nil {
@@ -92,8 +92,8 @@ func ReadDomain(ctx context.Context) string {
 	return "default"
 }
 
-//ReadLabelCombinations get query combination from url
-//q=app:default+service:payment&q=app:default
+// ReadLabelCombinations get query combination from url
+// q=app:default+service:payment&q=app:default
 func ReadLabelCombinations(req *goRestful.Request) ([]map[string]string, error) {
 	queryCombinations := req.QueryParameters(common.QueryParamQ)
 	labelCombinations := make([]map[string]string, 0)
@@ -119,7 +119,7 @@ func ReadLabelCombinations(req *goRestful.Request) ([]map[string]string, error)
 	return labelCombinations, nil
 }
 
-//WriteErrResponse write error message to client
+// WriteErrResponse write error message to client
 func WriteErrResponse(context *restful.Context, code int32, msg string) {
 	configErr := config.NewError(code, msg)
 	context.Resp.Header().Set(goRestful.HEADER_ContentType, goRestful.MIME_JSON)
diff --git a/server/resource/v1/doc_struct.go b/server/resource/v1/doc_struct.go
index 8a3ddac..6241738 100644
--- a/server/resource/v1/doc_struct.go
+++ b/server/resource/v1/doc_struct.go
@@ -25,7 +25,7 @@ import (
 	"github.com/go-chassis/go-chassis/v2/server/restful"
 )
 
-//swagger doc request header params
+// swagger doc request header params
 var (
 	DocHeaderDepth = &restful.Parameters{
 		DataType:  "string",
@@ -49,7 +49,7 @@ var (
 	}
 )
 
-//swagger doc response header params
+// swagger doc response header params
 var (
 	DocHeaderRevision = goRestful.Header{
 		Items: &goRestful.Items{
@@ -59,7 +59,7 @@ var (
 	}
 )
 
-//swagger doc query params
+// swagger doc query params
 var (
 	DocQueryCombination = &restful.Parameters{
 		DataType:  "string",
@@ -154,7 +154,7 @@ var (
 	}
 )
 
-//swagger doc path params
+// swagger doc path params
 var (
 	DocPathProject = &restful.Parameters{
 		DataType:  "string",
@@ -170,7 +170,7 @@ var (
 	}
 )
 
-//KVCreateBody is open api doc
+// KVCreateBody is open api doc
 type KVCreateBody struct {
 	Key       string            `json:"key"`
 	Labels    map[string]string `json:"labels"`
@@ -179,13 +179,13 @@ type KVCreateBody struct {
 	ValueType string            `json:"value_type"`
 }
 
-//KVUploadBody is open api doc
+// KVUploadBody is open api doc
 type KVUploadBody struct {
 	MetaData MetaData       `json:"metadata"`
 	Data     []*model.KVDoc `json:"data"`
 }
 
-//MetaData is extra info
+// MetaData is extra info
 type MetaData struct {
 	Version     string      `json:"version"`
 	Annotations Annotations `json:"annotations"`
@@ -194,18 +194,18 @@ type MetaData struct {
 type Annotations struct {
 }
 
-//KVUpdateBody is open api doc
+// KVUpdateBody is open api doc
 type KVUpdateBody struct {
 	Status string `json:"status"`
 	Value  string `json:"value"`
 }
 
-//DeleteBody is the request body struct of delete multiple kvs interface
+// DeleteBody is the request body struct of delete multiple kvs interface
 type DeleteBody struct {
 	IDs []string `json:"ids"`
 }
 
-//ErrorMsg is open api doc
+// ErrorMsg is open api doc
 type ErrorMsg struct {
 	Msg string `json:"error_msg"`
 }
diff --git a/server/resource/v1/history_resource.go b/server/resource/v1/history_resource.go
index 3a4b016..09cd019 100644
--- a/server/resource/v1/history_resource.go
+++ b/server/resource/v1/history_resource.go
@@ -30,11 +30,11 @@ import (
 	"github.com/go-chassis/openlog"
 )
 
-//HistoryResource TODO
+// HistoryResource TODO
 type HistoryResource struct {
 }
 
-//GetRevisions search key only by label
+// GetRevisions search key only by label
 func (r *HistoryResource) GetRevisions(context *restful.Context) {
 	var err error
 	kvID := context.ReadPathParameter(common.PathParamKVID)
@@ -69,7 +69,7 @@ func (r *HistoryResource) GetRevisions(context *restful.Context) {
 	}
 }
 
-//GetPollingData get the record of the get or list history
+// GetPollingData get the record of the get or list history
 func (r *HistoryResource) GetPollingData(context *restful.Context) {
 	query := &model.PollingDetail{}
 	sessionID := context.ReadQueryParameter(common.QueryParamSessionID)
@@ -121,7 +121,7 @@ func (r *HistoryResource) GetPollingData(context *restful.Context) {
 	}
 }
 
-//URLPatterns defined config operations
+// URLPatterns defined config operations
 func (r *HistoryResource) URLPatterns() []restful.Route {
 	return []restful.Route{
 		{
diff --git a/server/resource/v1/kv_resource.go b/server/resource/v1/kv_resource.go
index a017022..1fc087a 100644
--- a/server/resource/v1/kv_resource.go
+++ b/server/resource/v1/kv_resource.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-//Package v1 hold http rest v1 API
+// Package v1 hold http rest v1 API
 package v1
 
 import (
@@ -38,11 +38,11 @@ import (
 	kvsvc "github.com/apache/servicecomb-kie/server/service/kv"
 )
 
-//KVResource has API about kv operations
+// KVResource has API about kv operations
 type KVResource struct {
 }
 
-//Upload upload kvs
+// Upload upload kvs
 func (r *KVResource) Upload(rctx *restful.Context) {
 	if rctx.ReadQueryParameter(common.QueryParamOverride) == "" {
 		WriteErrResponse(rctx, config.ErrInvalidParams, "Query parameter 'override' is required")
@@ -66,7 +66,7 @@ func (r *KVResource) Upload(rctx *restful.Context) {
 	}
 }
 
-//Post create a kv
+// Post create a kv
 func (r *KVResource) Post(rctx *restful.Context) {
 	var err error
 	kv := new(model.KVDoc)
@@ -88,7 +88,7 @@ func (r *KVResource) Post(rctx *restful.Context) {
 	}
 }
 
-//Put update a kv
+// Put update a kv
 func (r *KVResource) Put(rctx *restful.Context) {
 	var err error
 	kvID := rctx.ReadPathParameter(common.PathParamKVID)
@@ -136,7 +136,7 @@ func (r *KVResource) Put(rctx *restful.Context) {
 
 }
 
-//Get search key by kv id
+// Get search key by kv id
 func (r *KVResource) Get(rctx *restful.Context) {
 	request := &model.GetKVRequest{
 		Project: rctx.ReadPathParameter(common.PathParameterProject),
@@ -166,7 +166,7 @@ func (r *KVResource) Get(rctx *restful.Context) {
 	}
 }
 
-//List response kv list
+// List response kv list
 func (r *KVResource) List(rctx *restful.Context) {
 	var err error
 	request := &model.ListKVRequest{
@@ -277,7 +277,7 @@ func watch(rctx *restful.Context, request *model.ListKVRequest, wait string) boo
 	return false
 }
 
-//Delete deletes one kv by id
+// Delete deletes one kv by id
 func (r *KVResource) Delete(rctx *restful.Context) {
 	project := rctx.ReadPathParameter(common.PathParameterProject)
 	domain := ReadDomain(rctx.Ctx)
@@ -313,7 +313,7 @@ func (r *KVResource) Delete(rctx *restful.Context) {
 	rctx.WriteHeader(http.StatusNoContent)
 }
 
-//DeleteList deletes multiple kvs by ids
+// DeleteList deletes multiple kvs by ids
 func (r *KVResource) DeleteList(rctx *restful.Context) {
 	project := rctx.ReadPathParameter(common.PathParameterProject)
 	domain := ReadDomain(rctx.Ctx)
@@ -355,7 +355,7 @@ func (r *KVResource) DeleteList(rctx *restful.Context) {
 	rctx.WriteHeader(http.StatusNoContent)
 }
 
-//URLPatterns defined config operations
+// URLPatterns defined config operations
 func (r *KVResource) URLPatterns() []restful.Route {
 	return []restful.Route{
 		{
diff --git a/server/service/kv/kv_svc.go b/server/service/kv/kv_svc.go
index 57c6f41..ec49ea2 100644
--- a/server/service/kv/kv_svc.go
+++ b/server/service/kv/kv_svc.go
@@ -66,9 +66,9 @@ func ListKV(ctx context.Context, request *model.ListKVRequest) (int64, *model.KV
 	return rev, kv, nil
 }
 
-//Create get latest revision from history
-//and increase revision of label
-//and insert key
+// Create get latest revision from history
+// and increase revision of label
+// and insert key
 func Create(ctx context.Context, kv *model.KVDoc) (*model.KVDoc, *errsvc.Error) {
 	if kv.Status == "" {
 		kv.Status = common.StatusDisabled
@@ -209,7 +209,7 @@ func Publish(kv *model.KVDoc) {
 	openlog.Info(fmt.Sprintf("post [%s] success", kv.ID))
 }
 
-//Update update key value and add new revision
+// Update update key value and add new revision
 func Update(ctx context.Context, kv *model.UpdateKVRequest) (*model.KVDoc, error) {
 	oldKV, err := datasource.GetBroker().GetKVDao().Get(ctx, &model.GetKVRequest{
 		Domain:  kv.Domain,