diff --git a/pkg/log/logrotate.go b/pkg/log/logrotate.go
index 3bc9571..bf7e906 100644
--- a/pkg/log/logrotate.go
+++ b/pkg/log/logrotate.go
@@ -284,7 +284,8 @@
 		return err
 	}
 	defer file.Close()
-	dest, err := os.Create(destFile)
+
+	dest, err := os.OpenFile(destFile, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0600)
 	if err != nil {
 		return err
 	}
diff --git a/scctl/pkg/cmd/cmd.go b/scctl/pkg/cmd/cmd.go
index dd56006..4de89dd 100644
--- a/scctl/pkg/cmd/cmd.go
+++ b/scctl/pkg/cmd/cmd.go
@@ -41,7 +41,9 @@
 	rootCmd.PersistentFlags().BoolP("verbose", "v", false, "make the operation more talkative")
 	rootCmd.PersistentPreRun = func(cmd *cobra.Command, args []string) {
 		if v, _ := cmd.Flags().GetBool("verbose"); v {
-			os.Setenv("DEBUG_MODE", "1")
+			if err := os.Setenv("DEBUG_MODE", "1"); err != nil {
+				StopAndExit(ExitError, err)
+			}
 		}
 		if d, err := time.ParseDuration(timeout); err == nil && d > 0 {
 			ScClientConfig.RequestTimeout = d
diff --git a/scctl/pkg/cmd/help.go b/scctl/pkg/cmd/help.go
index 7efbbfc..d36df6a 100644
--- a/scctl/pkg/cmd/help.go
+++ b/scctl/pkg/cmd/help.go
@@ -145,7 +145,7 @@
 func UsageFunc(cmd *cobra.Command) error {
 	subCommands := getSubCommands(cmd)
 	tabOut := getTabOutWithWriter(os.Stdout)
-	commandUsageTemplate.Execute(tabOut, struct {
+	if err := commandUsageTemplate.Execute(tabOut, struct {
 		Cmd         *cobra.Command
 		LocalFlags  string
 		GlobalFlags string
@@ -157,9 +157,10 @@
 		toolFlagUsages(cmd.InheritedFlags()),
 		subCommands,
 		version.Ver().Version,
-	})
-	tabOut.Flush()
-	return nil
+	}); err != nil {
+		return err
+	}
+	return tabOut.Flush()
 }
 
 func getTabOutWithWriter(writer io.Writer) *tabwriter.Writer {
diff --git a/server/broker/controller.go b/server/broker/controller.go
index 1146346..055ad2e 100644
--- a/server/broker/controller.go
+++ b/server/broker/controller.go
@@ -106,6 +106,8 @@
 	resp, err := BrokerServiceAPI.GetAllProviderPacts(r.Context(), request /*, href*/)
 	linksObj, err := json.Marshal(resp)
 	if err != nil {
+		PactLogger.Errorf(err, "invalid ProviderPacts")
+		controller.WriteError(w, scerr.ErrInternal, "Marshal error")
 		return
 	}
 	PactLogger.Infof("Pact info: %s\n", string(linksObj))
diff --git a/server/broker/service.go b/server/broker/service.go
index 80e765a..fb7e637 100644
--- a/server/broker/service.go
+++ b/server/broker/service.go
@@ -699,6 +699,11 @@
 	verificationDate := time.Now().Format(time.RFC3339)
 	verificationKey := GenerateBrokerVerificationKey(tenant, pactVersion.Id, lastNumber)
 	id, err := GetData(ctx, GetBrokerLatestVerificationIDKey())
+	if err != nil {
+		return &brokerpb.PublishVerificationResponse{
+			Response: pb.CreateResponse(scerr.ErrInternal, "get data error."),
+		}, err
+	}
 	verification := &brokerpb.Verification{
 		Id:               int32(id) + 1,
 		Number:           lastNumber,
@@ -786,6 +791,11 @@
 	}
 	if providerParticipant == nil {
 		id, err := GetData(ctx, GetBrokerLatestParticipantIDKey())
+		if err != nil {
+			return &brokerpb.PublishPactResponse{
+				Response: pb.CreateResponse(scerr.ErrInternal, "get data error."),
+			}, err
+		}
 		providerParticipant = &brokerpb.Participant{Id: int32(id) + 1, AppId: provider.AppId, ServiceName: provider.ServiceName}
 		response, err := CreateParticipant(PactLogger, ctx, providerParticipantKey, *providerParticipant)
 		if err != nil {
@@ -804,6 +814,11 @@
 	}
 	if consumerParticipant == nil {
 		id, err := GetData(ctx, GetBrokerLatestParticipantIDKey())
+		if err != nil {
+			return &brokerpb.PublishPactResponse{
+				Response: pb.CreateResponse(scerr.ErrInternal, "get data error."),
+			}, err
+		}
 		consumerParticipant = &brokerpb.Participant{Id: int32(id) + 1, AppId: consumer.AppId, ServiceName: consumer.ServiceName}
 		response, err := CreateParticipant(PactLogger, ctx, consumerParticipantKey, *consumerParticipant)
 		if err != nil {
@@ -825,6 +840,11 @@
 		PactLogger.Infof("Old version order: %d", order)
 		order++
 		id, err := GetData(ctx, GetBrokerLatestVersionIDKey())
+		if err != nil {
+			return &brokerpb.PublishPactResponse{
+				Response: pb.CreateResponse(scerr.ErrInternal, "get data error."),
+			}, err
+		}
 		version = &brokerpb.Version{Id: int32(id) + 1, Number: in.Version, ParticipantId: consumerParticipant.Id, Order: order}
 		response, err := CreateVersion(PactLogger, ctx, versionKey, *version)
 		if err != nil {
@@ -845,6 +865,11 @@
 	}
 	if pact == nil {
 		id, err := GetData(ctx, GetBrokerLatestPactIDKey())
+		if err != nil {
+			return &brokerpb.PublishPactResponse{
+				Response: pb.CreateResponse(scerr.ErrInternal, "get data error."),
+			}, err
+		}
 		pact = &brokerpb.Pact{Id: int32(id) + 1, ConsumerParticipantId: consumerParticipant.Id,
 			ProviderParticipantId: providerParticipant.Id, Sha: sha, Content: in.Pact}
 		response, err := CreatePact(PactLogger, ctx, pactKey, *pact)
@@ -864,6 +889,11 @@
 	}
 	if pactVersion == nil {
 		id, err := GetData(ctx, GetBrokerLatestPactVersionIDKey())
+		if err != nil {
+			return &brokerpb.PublishPactResponse{
+				Response: pb.CreateResponse(scerr.ErrInternal, "get data error."),
+			}, err
+		}
 		pactVersion = &brokerpb.PactVersion{Id: int32(id) + 1, VersionId: version.Id, PactId: pact.Id, ProviderParticipantId: providerParticipant.Id}
 		response, err := CreatePactVersion(PactLogger, ctx, pactVersionKey, *pactVersion)
 		if err != nil {
diff --git a/server/core/backend/defer_instance.go b/server/core/backend/defer_instance.go
index 3dd79e3..ffba31d 100644
--- a/server/core/backend/defer_instance.go
+++ b/server/core/backend/defer_instance.go
@@ -62,7 +62,7 @@
 	return true
 }
 
-func (iedh *InstanceEventDeferHandler) recoverOrDefer(evt discovery.KvEvent) error {
+func (iedh *InstanceEventDeferHandler) recoverOrDefer(evt discovery.KvEvent) {
 	kv := evt.KV
 	key := util.BytesToStringWithNoCopy(kv.Key)
 	_, ok := iedh.items[key]
@@ -75,7 +75,7 @@
 		iedh.recover(evt)
 	case pb.EVT_DELETE:
 		if ok {
-			return nil
+			return
 		}
 
 		instance := kv.Value.(*pb.MicroServiceInstance)
@@ -88,7 +88,6 @@
 			event: evt,
 		}
 	}
-	return nil
 }
 
 func (iedh *InstanceEventDeferHandler) HandleChan() <-chan discovery.KvEvent {
diff --git a/server/core/backend/registry.go b/server/core/backend/registry.go
index 4534d33..09a88d2 100644
--- a/server/core/backend/registry.go
+++ b/server/core/backend/registry.go
@@ -131,7 +131,9 @@
 	s.goroutine.Close(true)
 
 	ctx, _ := context.WithTimeout(context.Background(), 3*time.Second)
-	s.unregisterInstance(ctx)
+	if err := s.unregisterInstance(ctx); err != nil {
+		log.Error("stop registry engine failed", err)
+	}
 }
 
 func (s *registryEngine) selfRegister(ctx context.Context) error {
diff --git a/server/notify/websocket.go b/server/notify/websocket.go
index 6eaac0c..16e8d21 100644
--- a/server/notify/websocket.go
+++ b/server/notify/websocket.go
@@ -200,9 +200,14 @@
 			return
 		}
 
+		if err := wh.heartbeat(websocket.PingMessage); err != nil {
+			log.Errorf(err, "send 'Ping' message to watcher[%s] failed, subject: %s, group: %s",
+				remoteAddr, wh.watcher.Subject(), wh.watcher.Group())
+			return
+		}
+
 		log.Debugf("send 'Ping' message to watcher[%s], subject: %s, group: %s",
 			remoteAddr, wh.watcher.Subject(), wh.watcher.Group())
-		wh.heartbeat(websocket.PingMessage)
 		return
 	case *InstanceEvent:
 		job = o.(*InstanceEvent)
diff --git a/server/server.go b/server/server.go
index d84ee90..72ea40b 100644
--- a/server/server.go
+++ b/server/server.go
@@ -88,7 +88,10 @@
 	if s.needUpgrade() {
 		core.ServerInfo.Version = version.Ver().Version
 
-		UpgradeServerVersion()
+		if err := UpgradeServerVersion(); err != nil {
+			log.Errorf(err, "upgrade server version failed")
+			os.Exit(1)
+		}
 	}
 	lock.Unlock()
 }
