From 64eccd519d6127128e407f0a6a5a620ae1a98a82 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Fri, 10 Jun 2016 11:17:47 -0700 Subject: [PATCH] etcdserver: warn heavy apply --- etcdserver/apply.go | 3 +++ etcdserver/server.go | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/etcdserver/apply.go b/etcdserver/apply.go index 7143cd53e..03cb8ce75 100644 --- a/etcdserver/apply.go +++ b/etcdserver/apply.go @@ -18,6 +18,7 @@ import ( "bytes" "fmt" "sort" + "time" "github.com/coreos/etcd/auth" pb "github.com/coreos/etcd/etcdserver/etcdserverpb" @@ -33,6 +34,8 @@ const ( // To apply with independent Range, Put, Delete, you can pass noTxn // to apply functions instead of a valid txn ID. noTxn = -1 + + warnApplyDuration = 10 * time.Millisecond ) type applyResult struct { diff --git a/etcdserver/server.go b/etcdserver/server.go index ef38d6785..863c06807 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -594,7 +594,14 @@ func (s *EtcdServer) run() { func (s *EtcdServer) applyAll(ep *etcdProgress, apply *apply) { s.applySnapshot(ep, apply) + st := time.Now() s.applyEntries(ep, apply) + d := time.Since(st) + entriesNum := len(apply.entries) + if entriesNum != 0 && d > time.Duration(entriesNum)*warnApplyDuration { + plog.Warningf("apply entries took too long [%v for %d entries]", d, len(apply.entries)) + plog.Warningf("avoid queries with large range/delete range!") + } // wait for the raft routine to finish the disk writes before triggering a // snapshot. or applied index might be greater than the last index in raft // storage, since the raft routine might be slower than apply routine.