You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ti...@apache.org on 2020/03/26 12:55:22 UTC

[servicecomb-kie] branch master updated: modify the return body format of kv and history (#126)

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

tianxiaoliang 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 44d413f  modify the return body format of kv and history (#126)
44d413f is described below

commit 44d413f85881f498df8cd2dfb9c6b558c72844ab
Author: zhulijian <zh...@huawei.com>
AuthorDate: Thu Mar 26 20:55:15 2020 +0800

    modify the return body format of kv and history (#126)
    
    * fix doc
    
    * kv response use timestamp
---
 deployments/db.js                           |  4 ++--
 docs/api.yaml                               |  4 ++--
 pkg/model/db_schema.go                      |  4 ++--
 server/resource/v1/doc_struct.go            |  2 +-
 server/resource/v1/history_resource.go      |  6 +-----
 server/resource/v1/history_resource_test.go |  8 ++++----
 server/service/mongo/history/dao.go         | 18 ++++++++++++------
 server/service/mongo/history/service.go     |  2 +-
 server/service/mongo/kv/kv_dao.go           |  9 +++++----
 server/service/service.go                   |  2 +-
 10 files changed, 31 insertions(+), 28 deletions(-)

diff --git a/deployments/db.js b/deployments/db.js
index fd4479d..9f11118 100644
--- a/deployments/db.js
+++ b/deployments/db.js
@@ -44,10 +44,10 @@ db.createCollection( "kv", {
                     bsonType: "object"
                 },
                 create_time: {
-                    bsonType: "string",
+                    bsonType: "long",
                 },
                 update_time: {
-                    bsonType: "string",
+                    bsonType: "long",
                 },
                 status: {
                     bsonType: "string",
diff --git a/docs/api.yaml b/docs/api.yaml
index 753dba6..4171d65 100644
--- a/docs/api.yaml
+++ b/docs/api.yaml
@@ -20,7 +20,7 @@ paths:
         - name: wait
           in: query
           description: wait until any kv changed. for example wait=5s, server will not
-            response until 5 seconds during that time window, if any kv changed, server
+            response until 5 seconds, during that time window, if any kv changed, server
             will return 200 and kv list, otherwise return 304 and empty body
           type: string
         - name: match
@@ -109,7 +109,7 @@ paths:
         - name: wait
           in: query
           description: wait until any kv changed. for example wait=5s, server will not
-            response until 5 seconds during that time window, if any kv changed, server
+            response until 5 seconds, during that time window, if any kv changed, server
             will return 200 and kv list, otherwise return 304 and empty body
           type: string
         - name: match
diff --git a/pkg/model/db_schema.go b/pkg/model/db_schema.go
index c2fb6ad..ede75ee 100644
--- a/pkg/model/db_schema.go
+++ b/pkg/model/db_schema.go
@@ -39,8 +39,8 @@ type KVDoc struct {
 	UpdateRevision int64  `json:"update_revision,omitempty" bson:"update_revision," yaml:"update_revision,omitempty"`
 	Project        string `json:"project,omitempty" yaml:"project,omitempty"`
 	Status         string `json:"status,omitempty" yaml:"status,omitempty"`
-	CreateTime     string `json:"create_time,omitempty" bson:"create_time," yaml:"create_time,omitempty"`
-	UpdateTime     string `json:"update_time,omitempty" bson:"update_time," yaml:"update_time,omitempty"`
+	CreateTime     int64  `json:"create_time,omitempty" bson:"create_time," yaml:"create_time,omitempty"`
+	UpdateTime     int64  `json:"update_time,omitempty" bson:"update_time," yaml:"update_time,omitempty"`
 
 	Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"` //redundant
 	Domain string            `json:"domain,omitempty" yaml:"domain,omitempty"` //redundant
diff --git a/server/resource/v1/doc_struct.go b/server/resource/v1/doc_struct.go
index 92a7df1..a56ec08 100644
--- a/server/resource/v1/doc_struct.go
+++ b/server/resource/v1/doc_struct.go
@@ -67,7 +67,7 @@ var (
 		ParamType: goRestful.QueryParameterKind,
 		Required:  false,
 		Desc: "wait until any kv changed. " +
-			"for example wait=5s, server will not response until 5 seconds during that time window, " +
+			"for example wait=5s, server will not response until 5 seconds, during that time window, " +
 			"if any kv changed, server will return 200 and kv list, otherwise return 304 and empty body",
 	}
 	DocQueryRev = &restful.Parameters{
diff --git a/server/resource/v1/history_resource.go b/server/resource/v1/history_resource.go
index 9b6269a..0e0ff97 100644
--- a/server/resource/v1/history_resource.go
+++ b/server/resource/v1/history_resource.go
@@ -54,7 +54,7 @@ func (r *HistoryResource) GetRevisions(context *restful.Context) {
 		return
 	}
 	key := context.ReadQueryParameter("key")
-	revisions, _, err := service.HistoryService.GetHistory(context.Ctx, keyID,
+	revisions, err := service.HistoryService.GetHistory(context.Ctx, keyID,
 		service.WithKey(key),
 		service.WithOffset(offset),
 		service.WithLimit(limit))
@@ -66,10 +66,6 @@ func (r *HistoryResource) GetRevisions(context *restful.Context) {
 		WriteErrResponse(context, http.StatusInternalServerError, err.Error(), common.ContentTypeText)
 		return
 	}
-	if len(revisions) == 0 {
-		WriteErrResponse(context, http.StatusNotFound, "no revisions found", common.ContentTypeText)
-		return
-	}
 	err = writeResponse(context, revisions)
 	if err != nil {
 		openlogging.Error(err.Error())
diff --git a/server/resource/v1/history_resource_test.go b/server/resource/v1/history_resource_test.go
index 63614a9..e46ab06 100644
--- a/server/resource/v1/history_resource_test.go
+++ b/server/resource/v1/history_resource_test.go
@@ -58,10 +58,10 @@ func TestHistoryResource_GetRevisions(t *testing.T) {
 	c.ServeHTTP(resp, r)
 	body, err := ioutil.ReadAll(resp.Body)
 	assert.NoError(t, err)
-	data := make([]*model.KVDoc, 0)
+	var data model.KVResponse
 	err = json.Unmarshal(body, &data)
 	assert.NoError(t, err)
-	before := len(data)
+	before := len(data.Data)
 	assert.GreaterOrEqual(t, before, 1)
 
 	t.Run("put again, should has 2 revision", func(t *testing.T) {
@@ -79,9 +79,9 @@ func TestHistoryResource_GetRevisions(t *testing.T) {
 		c.ServeHTTP(resp, r)
 		body, err := ioutil.ReadAll(resp.Body)
 		assert.NoError(t, err)
-		data := make([]*model.KVDoc, 0)
+		var data model.KVResponse
 		err = json.Unmarshal(body, &data)
-		assert.Equal(t, before+1, len(data))
+		assert.Equal(t, before+1, len(data.Data))
 	})
 
 }
diff --git a/server/service/mongo/history/dao.go b/server/service/mongo/history/dao.go
index 414908d..486aedb 100644
--- a/server/service/mongo/history/dao.go
+++ b/server/service/mongo/history/dao.go
@@ -35,7 +35,7 @@ const (
 	maxHistoryNum = 100
 )
 
-func getHistoryByKeyID(ctx context.Context, filter bson.M, offset, limit int64) ([]*model.KVDoc, int, error) {
+func getHistoryByKeyID(ctx context.Context, filter bson.M, offset, limit int64) (*model.KVResponse, error) {
 	collection := session.GetDB().Collection(session.CollectionKVRevision)
 	opt := options.Find().SetSort(map[string]interface{}{
 		"revision": -1,
@@ -46,11 +46,11 @@ func getHistoryByKeyID(ctx context.Context, filter bson.M, offset, limit int64)
 	}
 	curTotal, err := collection.CountDocuments(ctx, filter)
 	if err != nil {
-		return nil, 0, err
+		return nil, err
 	}
 	cur, err := collection.Find(ctx, filter, opt)
 	if err != nil {
-		return nil, 0, err
+		return nil, err
 	}
 	kvs := make([]*model.KVDoc, 0)
 	var exist bool
@@ -59,15 +59,21 @@ func getHistoryByKeyID(ctx context.Context, filter bson.M, offset, limit int64)
 		err := cur.Decode(&elem)
 		if err != nil {
 			openlogging.Error("decode error: " + err.Error())
-			return nil, 0, err
+			return nil, err
 		}
 		exist = true
+		elem.Domain = ""
+		elem.Project = ""
 		kvs = append(kvs, &elem)
 	}
 	if !exist {
-		return nil, 0, service.ErrRevisionNotExist
+		return nil, service.ErrRevisionNotExist
 	}
-	return kvs, int(curTotal), nil
+	result := &model.KVResponse{
+		Data:  kvs,
+		Total: int(curTotal),
+	}
+	return result, nil
 }
 
 //AddHistory add kv history
diff --git a/server/service/mongo/history/service.go b/server/service/mongo/history/service.go
index 8767d80..f6e13c1 100644
--- a/server/service/mongo/history/service.go
+++ b/server/service/mongo/history/service.go
@@ -30,7 +30,7 @@ type Service struct {
 }
 
 //GetHistory get all history by label id
-func (s *Service) GetHistory(ctx context.Context, kvID string, options ...service.FindOption) ([]*model.KVDoc, int, error) {
+func (s *Service) GetHistory(ctx context.Context, kvID string, options ...service.FindOption) (*model.KVResponse, error) {
 	var filter primitive.M
 	opts := service.FindOptions{}
 	for _, o := range options {
diff --git a/server/service/mongo/kv/kv_dao.go b/server/service/mongo/kv/kv_dao.go
index 0b3a49c..c7fbd07 100644
--- a/server/service/mongo/kv/kv_dao.go
+++ b/server/service/mongo/kv/kv_dao.go
@@ -48,8 +48,9 @@ func createKey(ctx context.Context, kv *model.KVDoc) (*model.KVDoc, error) {
 	}
 	kv.UpdateRevision = revision
 	kv.CreateRevision = revision
-	kv.CreateTime = time.Now().String()
-	kv.UpdateTime = time.Now().String()
+	now := time.Now().Unix()
+	kv.CreateTime = now
+	kv.UpdateTime = now
 	_, err = collection.InsertOne(ctx, kv)
 	if err != nil {
 		openlogging.Error("create error", openlogging.WithTags(openlogging.Tags{
@@ -73,7 +74,7 @@ func createKey(ctx context.Context, kv *model.KVDoc) (*model.KVDoc, error) {
 //updateKeyValue update key value and add new revision
 func updateKeyValue(ctx context.Context, kv *model.KVDoc) error {
 	var err error
-	kv.UpdateTime = time.Now().String()
+	kv.UpdateTime = time.Now().Unix()
 	kv.UpdateRevision, err = counter.ApplyRevision(ctx, kv.Domain)
 	if err != nil {
 		return err
@@ -239,7 +240,7 @@ func findKVByLabelID(ctx context.Context, domain, labelID, key string, project s
 
 }
 
-//findKVByID get kvs by kv id
+//findKVDocByID get kvs by kv id
 func findKVDocByID(ctx context.Context, domain, project, kvID string) (*model.KVDoc, error) {
 	filter := bson.M{"id": kvID, "domain": domain, "project": project}
 	kvs, err := findOneKey(ctx, filter)
diff --git a/server/service/service.go b/server/service/service.go
index a0d238d..d7fa613 100644
--- a/server/service/service.go
+++ b/server/service/service.go
@@ -52,7 +52,7 @@ type KV interface {
 
 //History provide api of History entity
 type History interface {
-	GetHistory(ctx context.Context, keyID string, options ...FindOption) ([]*model.KVDoc, int, error)
+	GetHistory(ctx context.Context, keyID string, options ...FindOption) (*model.KVResponse, error)
 }
 
 //Revision is global revision number management