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