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 2018/12/29 11:31:16 UTC

[servicecomb-service-center] branch master updated: SCB-1092 Use a simple time struct to save memory (#522)

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-service-center.git


The following commit(s) were added to refs/heads/master by this push:
     new aa040fe  SCB-1092 Use a simple time struct to save memory (#522)
aa040fe is described below

commit aa040feae7459ee2b517fb72499dfa290953970a
Author: little-cui <su...@qq.com>
AuthorDate: Sat Dec 29 19:31:12 2018 +0800

    SCB-1092 Use a simple time struct to save memory (#522)
---
 pkg/notify/notice.go              | 11 +++++++----
 pkg/notify/notification_test.go   |  3 ++-
 pkg/time/time.go                  | 40 +++++++++++++++++++++++++++++++++++++++
 pkg/time/time_test.go             | 34 +++++++++++++++++++++++++++++++++
 server/core/backend/lease.go      | 10 ++++------
 server/core/backend/lease_test.go |  5 ++---
 6 files changed, 89 insertions(+), 14 deletions(-)

diff --git a/pkg/notify/notice.go b/pkg/notify/notice.go
index 87c0862..e5ac265 100644
--- a/pkg/notify/notice.go
+++ b/pkg/notify/notice.go
@@ -16,7 +16,10 @@
  */
 package notify
 
-import "time"
+import (
+	simple "github.com/apache/servicecomb-service-center/pkg/time"
+	"time"
+)
 
 type Event interface {
 	Type() Type
@@ -29,7 +32,7 @@ type baseEvent struct {
 	nType    Type
 	subject  string
 	group    string
-	createAt time.Time
+	createAt simple.Time
 }
 
 func (s *baseEvent) Type() Type {
@@ -45,9 +48,9 @@ func (s *baseEvent) Group() string {
 }
 
 func (s *baseEvent) CreateAt() time.Time {
-	return s.createAt
+	return s.createAt.Local()
 }
 
 func NewEvent(t Type, s string, g string) Event {
-	return &baseEvent{t, s, g, time.Now()}
+	return &baseEvent{t, s, g, simple.FromTime(time.Now())}
 }
diff --git a/pkg/notify/notification_test.go b/pkg/notify/notification_test.go
index 9b6a06c..c1b3c5d 100644
--- a/pkg/notify/notification_test.go
+++ b/pkg/notify/notification_test.go
@@ -17,6 +17,7 @@
 package notify
 
 import (
+	simple "github.com/apache/servicecomb-service-center/pkg/time"
 	"testing"
 	"time"
 )
@@ -59,7 +60,7 @@ func TestGetNotifyService(t *testing.T) {
 	if err != nil {
 		t.Fatalf("TestGetNotifyService failed, %v", err)
 	}
-	j := &baseEvent{INSTANCE, "s", "g", time.Now()}
+	j := &baseEvent{INSTANCE, "s", "g", simple.FromTime(time.Now())}
 	err = notifyService.Publish(j)
 	if err != nil {
 		t.Fatalf("TestGetNotifyService failed")
diff --git a/pkg/time/time.go b/pkg/time/time.go
new file mode 100644
index 0000000..a0524b6
--- /dev/null
+++ b/pkg/time/time.go
@@ -0,0 +1,40 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package time
+
+import "time"
+
+type Time struct {
+	sec  int64
+	nsec int64
+}
+
+func (t Time) String() string {
+	return t.Local().String()
+}
+
+func (t Time) UTC() time.Time {
+	return time.Unix(t.sec, t.nsec).UTC()
+}
+
+func (t Time) Local() time.Time {
+	return time.Unix(t.sec, t.nsec).Local()
+}
+
+func FromTime(t time.Time) Time {
+	utc := t.UTC()
+	return Time{utc.Unix(), int64(utc.Nanosecond())}
+}
diff --git a/pkg/time/time_test.go b/pkg/time/time_test.go
new file mode 100644
index 0000000..887c676
--- /dev/null
+++ b/pkg/time/time_test.go
@@ -0,0 +1,34 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package time
+
+import (
+	"fmt"
+	"testing"
+	"time"
+)
+
+func TestNewTime(t *testing.T) {
+	now := time.Now().Local()
+	tt := FromTime(now)
+	if tt.String() != now.String() {
+		t.Fatal("TestNewTime failed", tt, "!=", now)
+	}
+	if tt.UTC().String() != now.UTC().String() {
+		t.Fatal("TestNewTime failed", tt, "!=", now)
+	}
+	fmt.Println("local:", tt, "utc:", tt.UTC())
+}
diff --git a/server/core/backend/lease.go b/server/core/backend/lease.go
index 5c6c2b3..f31737e 100644
--- a/server/core/backend/lease.go
+++ b/server/core/backend/lease.go
@@ -19,6 +19,7 @@ package backend
 import (
 	errorsEx "github.com/apache/servicecomb-service-center/pkg/errors"
 	"github.com/apache/servicecomb-service-center/pkg/log"
+	simple "github.com/apache/servicecomb-service-center/pkg/time"
 	"github.com/apache/servicecomb-service-center/pkg/util"
 	"github.com/apache/servicecomb-service-center/server/plugin/pkg/registry"
 	"golang.org/x/net/context"
@@ -32,8 +33,7 @@ type LeaseTask struct {
 	LeaseID int64
 	TTL     int64
 
-	recvSec  int64
-	recvNsec int64
+	recvTime simple.Time
 	err      error
 }
 
@@ -78,17 +78,15 @@ func (lat *LeaseTask) Err() error {
 }
 
 func (lat *LeaseTask) ReceiveTime() time.Time {
-	return time.Unix(lat.recvSec, lat.recvNsec).Local()
+	return lat.recvTime.Local()
 }
 
 func NewLeaseAsyncTask(op registry.PluginOp) *LeaseTask {
-	now := time.Now().UTC()
 	return &LeaseTask{
 		Client:   Registry(),
 		key:      ToLeaseAsyncTaskKey(util.BytesToStringWithNoCopy(op.Key)),
 		LeaseID:  op.Lease,
-		recvSec:  now.Unix(),
-		recvNsec: int64(now.Nanosecond()),
+		recvTime: simple.FromTime(time.Now()),
 	}
 }
 
diff --git a/server/core/backend/lease_test.go b/server/core/backend/lease_test.go
index cc8538d..863063b 100644
--- a/server/core/backend/lease_test.go
+++ b/server/core/backend/lease_test.go
@@ -19,6 +19,7 @@ package backend
 import (
 	"fmt"
 	errorsEx "github.com/apache/servicecomb-service-center/pkg/errors"
+	simple "github.com/apache/servicecomb-service-center/pkg/time"
 	"github.com/apache/servicecomb-service-center/server/plugin/pkg/registry/buildin"
 	"golang.org/x/net/context"
 	"testing"
@@ -38,14 +39,12 @@ func (c *mockRegistry) LeaseRenew(ctx context.Context, leaseID int64) (TTL int64
 }
 
 func TestLeaseTask_Do(t *testing.T) {
-	now := time.Now().UTC()
 	c := &mockRegistry{}
 	lt := &LeaseTask{
 		Client:   c,
 		key:      ToLeaseAsyncTaskKey("/a"),
 		LeaseID:  1,
-		recvSec:  now.Unix(),
-		recvNsec: int64(now.Nanosecond()),
+		recvTime: simple.FromTime(time.Now()),
 	}
 
 	c.LeaseErr = errorsEx.InternalError("lease not found")