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 2021/08/24 09:50:59 UTC

[servicecomb-kie] branch bug updated (783c070 -> 4d8fcf5)

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

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


 discard 783c070  Fix: Can not page the kvs
     add 76ed881  Fix: Can not page the kvs (#209)
     new 4d8fcf5  Fix: Can not page the kvs

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (783c070)
            \
             N -- N -- N   refs/heads/bug (4d8fcf5)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:

[servicecomb-kie] 01/01: Fix: Can not page the kvs

Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 4d8fcf580919fd8ea6202a20668c7b8821d24925
Author: little-cui <su...@qq.com>
AuthorDate: Fri Aug 20 23:05:44 2021 +0800

    Fix: Can not page the kvs
---
 pkg/validator/rule.go                  |  2 +-
 server/datasource/etcd/kv/kv_dao.go    | 38 ++++++++++++++--------------
 server/resource/v1/kv_resource_test.go | 45 +++++++++++++++++++++++++++++++++-
 3 files changed, 63 insertions(+), 22 deletions(-)

diff --git a/pkg/validator/rule.go b/pkg/validator/rule.go
index 401c1b7..eb32ba3 100644
--- a/pkg/validator/rule.go
+++ b/pkg/validator/rule.go
@@ -24,7 +24,7 @@ const (
 	commonNameRegexString = `^[a-zA-Z0-9]*$|^[a-zA-Z0-9][a-zA-Z0-9_\-.]*[a-zA-Z0-9]$`
 	labelKeyRegexString   = `^[a-zA-Z0-9]{1,32}$|^[a-zA-Z0-9][a-zA-Z0-9_\-.]{1,30}[a-zA-Z0-9]$`
 	labelValueRegexString = `^[a-zA-Z0-9]{0,160}$|^[a-zA-Z0-9][a-zA-Z0-9_\-.]{0,158}[a-zA-Z0-9]$`
-	getKeyRegexString     = `^[a-zA-Z0-9]*$|^[a-zA-Z0-9][a-zA-Z0-9_\-.]*[a-zA-Z0-9]$|^beginWith\([a-zA-Z0-9][a-zA-Z0-9_\-.]*\)$|^wildcard\([a-zA-Z0-9][a-zA-Z0-9_\-.*]*\)$`
+	getKeyRegexString     = `^[a-zA-Z0-9]*$|^[a-zA-Z0-9][a-zA-Z0-9_\-.]*[a-zA-Z0-9]$|^beginWith\([a-zA-Z0-9][a-zA-Z0-9_\-.]*\)$|^wildcard\([a-zA-Z0-9*][a-zA-Z0-9_\-.*]*\)$`
 	asciiRegexString      = `^[\x00-\x7F]*$`
 	allCharString         = `.*`
 )
diff --git a/server/datasource/etcd/kv/kv_dao.go b/server/datasource/etcd/kv/kv_dao.go
index 67a639d..48c2eb0 100644
--- a/server/datasource/etcd/kv/kv_dao.go
+++ b/server/datasource/etcd/kv/kv_dao.go
@@ -251,26 +251,24 @@ func IsUniqueFind(opts datasource.FindOptions) bool {
 }
 
 func toRegex(opts datasource.FindOptions) (*regexp.Regexp, error) {
-	var (
-		regex *regexp.Regexp
-		value string
-	)
-	if opts.Key != "" {
-		switch {
-		case strings.HasPrefix(opts.Key, "beginWith("):
-			value = "^" + strings.ReplaceAll(getValue(opts.Key), ".", "\\.") + ".*"
-		case strings.HasPrefix(opts.Key, "wildcard("):
-			value = strings.ReplaceAll(getValue(opts.Key), ".", "\\.")
-			value = strings.ReplaceAll(value, "*", ".*")
-		default:
-			value = "^" + strings.ReplaceAll(opts.Key, ".", "\\.") + "$"
-		}
-		var err error
-		regex, err = regexp.Compile(value)
-		if err != nil {
-			openlog.Error("invalid wildcard expr: " + err.Error())
-			return nil, err
-		}
+	var value string
+	if opts.Key == "" {
+		return nil, nil
+	}
+	switch {
+	case strings.HasPrefix(opts.Key, "beginWith("):
+		value = strings.ReplaceAll(getValue(opts.Key), ".", "\\.") + ".*"
+	case strings.HasPrefix(opts.Key, "wildcard("):
+		value = strings.ReplaceAll(getValue(opts.Key), ".", "\\.")
+		value = strings.ReplaceAll(value, "*", ".*")
+	default:
+		value = strings.ReplaceAll(opts.Key, ".", "\\.")
+	}
+	value = "(?i)^" + value + "$"
+	regex, err := regexp.Compile(value)
+	if err != nil {
+		openlog.Error("invalid wildcard expr: " + value + ", error: " + err.Error())
+		return nil, err
 	}
 	return regex, nil
 }
diff --git a/server/resource/v1/kv_resource_test.go b/server/resource/v1/kv_resource_test.go
index b11ffe0..bd44725 100644
--- a/server/resource/v1/kv_resource_test.go
+++ b/server/resource/v1/kv_resource_test.go
@@ -429,7 +429,7 @@ func TestKVResource_List(t *testing.T) {
 		assert.Equal(t, 1, len(result.Data))
 	})
 	t.Run("get one key, fuzzy match,should return 2 kv", func(t *testing.T) {
-		r, _ := http.NewRequest("GET", "/v1/kv_test/kie/kv?key=beginWith(time)", nil)
+		r, _ := http.NewRequest("GET", "/v1/kv_test/kie/kv?key=beginWith(TIME)", nil)
 		r.Header.Set("Content-Type", "application/json")
 		kvr := &v1.KVResource{}
 		c, err := restfultest.New(kvr, nil)
@@ -442,6 +442,49 @@ func TestKVResource_List(t *testing.T) {
 		err = json.Unmarshal(body, result)
 		assert.NoError(t, err)
 		assert.Equal(t, 2, len(result.Data))
+
+		r, _ = http.NewRequest("GET", "/v1/kv_test/kie/kv?key=beginWith(IME)", nil)
+		r.Header.Set("Content-Type", "application/json")
+		kvr = &v1.KVResource{}
+		c, err = restfultest.New(kvr, nil)
+		assert.NoError(t, err)
+		resp = httptest.NewRecorder()
+		c.ServeHTTP(resp, r)
+		body, err = ioutil.ReadAll(resp.Body)
+		assert.NoError(t, err)
+		result = &model.KVResponse{}
+		err = json.Unmarshal(body, result)
+		assert.NoError(t, err)
+		assert.Equal(t, 0, len(result.Data))
+	})
+	t.Run("get one key, wildcard match,should return 2 kv", func(t *testing.T) {
+		r, _ := http.NewRequest("GET", "/v1/kv_test/kie/kv?key=wildcard(*IME*)", nil)
+		r.Header.Set("Content-Type", "application/json")
+		kvr := &v1.KVResource{}
+		c, err := restfultest.New(kvr, nil)
+		assert.NoError(t, err)
+		resp := httptest.NewRecorder()
+		c.ServeHTTP(resp, r)
+		body, err := ioutil.ReadAll(resp.Body)
+		assert.NoError(t, err)
+		result := &model.KVResponse{}
+		err = json.Unmarshal(body, result)
+		assert.NoError(t, err)
+		assert.Equal(t, 2, len(result.Data))
+
+		r, _ = http.NewRequest("GET", "/v1/kv_test/kie/kv?key=wildcard(TIME)", nil)
+		r.Header.Set("Content-Type", "application/json")
+		kvr = &v1.KVResource{}
+		c, err = restfultest.New(kvr, nil)
+		assert.NoError(t, err)
+		resp = httptest.NewRecorder()
+		c.ServeHTTP(resp, r)
+		body, err = ioutil.ReadAll(resp.Body)
+		assert.NoError(t, err)
+		result = &model.KVResponse{}
+		err = json.Unmarshal(body, result)
+		assert.NoError(t, err)
+		assert.Equal(t, 0, len(result.Data))
 	})
 	t.Run("get one key by service label should return 2 kv,delete one", func(t *testing.T) {
 		r, _ := http.NewRequest("GET", "/v1/kv_test/kie/kv?key=timeout&label=service:utService", nil)