Commit Graph

5097 Commits

Author SHA1 Message Date
829342a82d make StartPrometheusServer func private
we don't really need to export it
2018-06-20 12:40:25 +04:00
84812145cb friendly apis for constructors 2018-06-20 12:40:25 +04:00
cd11a54f7a add since column to list of available metrics table 2018-06-20 12:40:25 +04:00
d8fea3ec9d separate http server for metrics 2018-06-20 12:40:23 +04:00
b10b0da3fd bundle imports 2018-06-20 12:40:11 +04:00
bba2862498 add one useful query 2018-06-20 12:40:11 +04:00
e90cb4f5fa add docs 2018-06-20 12:40:11 +04:00
1bdff076ad add config option 2018-06-20 12:40:08 +04:00
c958b5319c update ADR 2018-06-20 12:38:45 +04:00
7efb73aa18 mempool size metric 2018-06-20 12:38:45 +04:00
19699d644f p2p metric, make height and totalTxs gauges 2018-06-20 12:38:45 +04:00
0cb50c05fc add rounds metric 2018-06-20 12:38:45 +04:00
e58d674f4c add validators power gauges 2018-06-20 12:38:45 +04:00
fad76e103b extract metrics to provider, remove height label 2018-06-20 12:38:45 +04:00
489d9b9184 more metrics 2018-06-20 12:38:45 +04:00
3cdf3b670d serve metrics under /metrics 2018-06-20 12:38:45 +04:00
5c869b5888 validator metrics 2018-06-20 12:38:45 +04:00
9e14dc21a9 add labels column 2018-06-20 12:38:45 +04:00
5c7093cc9f go-kit metrics plus prometheus: one metric 2018-06-20 12:38:45 +04:00
03079185d4 metrics ADR
Refs #986
2018-06-20 12:38:45 +04:00
63e2f43b72 updates to docs for vuepress (#1763)
* fix docs for vue, #1640

* docs: clean up re-install instructions
2018-06-20 11:51:16 +04:00
d220a1ef13 changelog 2018-06-20 00:22:07 -07:00
c6c468c341 update changelog 2018-06-20 00:13:23 -07:00
1d86270e20 version 2018-06-20 00:09:55 -07:00
43745c83db Merge branch 'release/v0.20.1' into develop 2018-06-20 00:08:51 -07:00
c793a72ac5 Merge pull request #1769 from tendermint/1755-possible-memory-leak
Memory leak in Websocket
2018-06-19 23:57:29 -07:00
fed8807a32 Switch xchachapoly to hkdfchachapoly (#135)
* Switch from xchachapoly to hkdfchachapoly
2018-06-19 22:18:36 -07:00
cfff83fa3d update changelog 2018-06-19 20:20:30 +04:00
4fc06e9d2a [libs/pubsub] fix memory leak
Refs #1755

I started with writing a test for wsConnection (WebsocketManager) where
I:

- create a WS connection
- do a simple echo call
- close it

No leaking goroutines, nor any leaking memory were detected.

For useful shortcuts see my blog post
https://blog.cosmos.network/debugging-the-memory-leak-in-tendermint-210186711420

Then I went to the rpc tests to see if calling Subscribe results in
memory growth. It did.

I used a slightly modified version of TestHeaderEvents function:

```
func TestHeaderEvents(t *testing.T) {
	// memory heap before
	f, err := os.Create("/tmp/mem1.mprof")
	if err != nil {
		t.Fatal(err)
	}
	pprof.WriteHeapProfile(f)
	f.Close()

	for i := 0; i < 100; i++ {
		c := getHTTPClient()
		err = c.Start()
		require.Nil(t, err)

		evtTyp := types.EventNewBlockHeader
		evt, err := client.WaitForOneEvent(c, evtTyp, waitForEventTimeout)
		require.Nil(t, err)
		_, ok := evt.(types.EventDataNewBlockHeader)
		require.True(t, ok)

		c.Stop()
		c = nil
	}

	runtime.GC()

	// memory heap before
	f, err = os.Create("/tmp/mem2.mprof")
	if err != nil {
		t.Fatal(err)
	}
	pprof.WriteHeapProfile(f)
	f.Close()

	// dump all running goroutines
	time.Sleep(10 * time.Second)
	pprof.Lookup("goroutine").WriteTo(os.Stdout, 1)
}
```

```
Showing nodes accounting for 35159.16kB, 100% of 35159.16kB total
Showing top 10 nodes out of 48
      flat  flat%   sum%        cum   cum%
32022.23kB 91.08% 91.08% 32022.23kB 91.08%  github.com/tendermint/tendermint/libs/pubsub/query.(*QueryParser).Init
 1056.33kB  3.00% 94.08%  1056.33kB  3.00%  bufio.NewReaderSize
  528.17kB  1.50% 95.58%   528.17kB  1.50%  bufio.NewWriterSize
  528.17kB  1.50% 97.09%   528.17kB  1.50%  github.com/tendermint/tendermint/consensus.NewConsensusState
  512.19kB  1.46% 98.54%   512.19kB  1.46%  runtime.malg
  512.08kB  1.46%   100%   512.08kB  1.46%  syscall.ByteSliceFromString
         0     0%   100%   512.08kB  1.46%  github.com/tendermint/tendermint/consensus.(*ConsensusState).(github.com/tendermint/tendermint/consensus.defaultDecideProposal)-fm
         0     0%   100%   512.08kB  1.46%  github.com/tendermint/tendermint/consensus.(*ConsensusState).addVote
         0     0%   100%   512.08kB  1.46%  github.com/tendermint/tendermint/consensus.(*ConsensusState).defaultDecideProposal
         0     0%   100%   512.08kB  1.46%  github.com/tendermint/tendermint/consensus.(*ConsensusState).enterNewRound
```

100 subscriptions produce 32MB.

Again, no additional goroutines are running after the end of the test
(wsConnection readRoutine and writeRoutine both finishes). **It means
that some exiting goroutine or object is holding a reference to the
*Query objects, which are leaking.**

One of them is pubsub#loop. It's using state.queries to map queries to
clients and state.clients to map clients to queries.

Before this commit, we're not thoroughly cleaning state.queries, which
was the reason for memory leakage.
2018-06-19 19:59:21 +04:00
aaddf5d32f set pubsub default capacity to 0
Refs #951

Jae: I don't know a good way to catch these errors in general, but
forcing pubsub's internal channel to have a capacity of 0 will reveal
bugs sooner, if the subscriber also has a 0 or small capacity ch to pull
from.
2018-06-19 17:07:21 +04:00
26b2e808f7 [rpc/lib/server] wrote a basic test for WebsocketManager 2018-06-19 17:06:48 +04:00
3d30a42943 add config to issue template 2018-06-19 11:59:14 +04:00
4f5492c831 add nopTxCache (Nil Object Pattern)
to better handle zero cache size
2018-06-19 11:59:07 +04:00
70d973016e output msg only once during start 2018-06-19 11:40:40 +04:00
4b2348f697 mempool: fix cache_size==0. closes #1761 v0.20.1-rc0 2018-06-18 18:21:19 -07:00
6a324764ac fix circle 2018-06-18 17:18:35 -07:00
3470e5d7b3 changelog and version 2018-06-18 17:15:41 -07:00
a519825bf8 consensus: fixes #1754
* updateToState exits early if the state isn't new, which happens after
* fast syncing. This results in not sending a NewRoundStep message. The mempool
* reactor depends on PeerState, which is updated by NewRoundStep
* messages. If the peer never sends a NewRoundStep, the mempool reactor
* will think they're behind, and never forward transactions. Note this
* only happens when `create_empty_blocks = false`, because otherwise
* peers will move through the consensus state and send a NewRoundStep
* for a new step soon anyways. Simple fix is just to send the
* NewRoundStep message during updateToState even if exit early
2018-06-18 17:08:09 -07:00
d457887dd6 Merge pull request #1759 from tendermint/bucky/readme
update README
2018-06-16 22:56:35 -07:00
adb6a94f18 contact us at riot 2018-06-16 23:05:24 -07:00
b8bfc041d3 update README 2018-06-16 19:00:42 -07:00
9bad770f21 Merge pull request #1757 from tendermint/bucky/update-spec
docs/spec: some organizational cleanup
2018-06-16 13:03:00 -07:00
d3b53e62a5 fix circle 2018-06-15 23:46:43 -07:00
506cf6c9c7 docs/spec: DuplicateVoteEvidence 2018-06-15 23:19:42 -07:00
b8f340afd0 docs/spec: some organizational cleanup 2018-06-15 22:56:26 -07:00
1a2f468695 fix circleci 2.0 config (#139) 2018-06-15 15:17:40 -07:00
c84be3b8dd Merge pull request #1751 from tendermint/bucky/codeowner-alex
add xla as codeowner
v0.21.0-rc0
2018-06-14 20:22:04 -07:00
050636d5ce add xla as codeowner 2018-06-14 17:04:45 -07:00
ia
b5775b56c6 all: gofmt (#1743)
* all: gofmt

Run 'gofmt -w .' from project root.

* Update changelog to say that I ran gofmt

* Revert "Update changelog to say that I ran gofmt"

This reverts commit 956f133ff0354fd7338e7df7c823e6f98b655da6.
2018-06-15 02:03:50 +02:00
19af3e9733 Merge pull request #1738 from tendermint/zarko/add-blockchain-reactor-algorithm-spec
Add algorithm for Blockchain Reactor
2018-06-15 01:47:36 +02:00