time.After -> time.NewTimer

time.After is expensive under high QPS situations because the
timer keeps running till the event fires. So, the number of channels
and timers can accumulate.
Merge branch 'vtocc'
Merge branch 'replication'