Symbol node testnet 構築でハマった


はじめに

Symbol、いいですよね。
XYMという表記もなんかかっこいいし、
公式のウォレットにも気合いが感じられて好印象。

テストネットを構築しようとしてハマったのでメモ。

Symbol node 構築

必要なもの

公式にもちゃんとまとまってるし、(しかも日本語もある)
色んな記事で紹介されているので割愛。
AWSで立てた。ひとまず最小スペックで問題なし。
symbol-bootstrapからdocker起動、素敵。

  • docker
  • docker-compose
  • nvm(node.js、npm)
  • symbol-bootstrap(この時点では1.0.7)

testnet 起動

必要なものは揃った、いざ起動。

$ symbol-bootstrap start -p testnet -a dual -d

同期確認

$ curl http://localhost:3000/chain/info | python3 -m json.tool

ハマった

同期が進まない

あとは、explorer上の最新ブロックまで同期されるのを同期確認APIでひたすら眺めるだけ。
どのぐらいかかるかな〜とのんびり待っていた。

半日経過、うむ、順調。
1日経過、"height": "130681"、うむ、まあそんなすぐには終わらないか。
2日経過、"height": "163081"、うむ、放置。
3日経過、"height": "163081"、、、むむ??
同期が進んでない。

スペック上げてみたり、apiノードだけで立ち上げてみたり、再起動してみても変わらず、結構お手上げ。
ログには怪しそうなerrorとwarningが大量に出てはいる。困った。

特にこれが一番怪しい。300MBより大きいブロックを取り込めていない??

<warning> (disruptor::ConsumerDispatcher.cpp@182) disruptor memory is full (max = 300MB, current = 0B)

設定変更

設定値blockDisruptorMaxMemorySizeが該当しそう。

custom-preset.yml
blockDisruptorMaxMemorySize: 1000MB

symbol-bootstrapの実行ディレクトリに上記ファイルを準備。

$ symbol-bootstrap stop
$ rm -rf target
$ vi custom-preset.yml
$ symbol-bootstrap start -p testnet -a dual -c custom-preset.yml --upgrade -d

こんな感じで停止してから、設定を読み込んで再起動。
(なんとなくtargetディレクトリは削除して初期化。1から同期した。)

しばらくしてから確認。

"height": "222058"、、、おお!!突破してる!!

<info> (disruptor::ConsumerDispatcher.cpp@44) completing processing of element 48 (10346 blocks (heights 130682 - 141027) [D564AA0F] from Remote_Pull with size 537MB 936KB 234B), last consumer is 0 elements behind

537MBとか同期しようとすると、デフォルトのblockDisruptorMaxMemorySize: 300MBでは無理だったってことね。

止まることなく最新ブロックまで同期が進んだ。よかった!

おまけ

nem2.slackに突撃して#helpチャンネルで叫んだら、みなさんすぐレスポンスくれた。優しい世界。
13万ブロックあたりで負荷テストがあって大量のトランザクションが発行されたらしく、
どうやらテストネットの同期が結構シビアらしい。

似たような現象が発生した時の対応を教えてくれた。
https://forum.nem.io/t/statuscode-404-when-try-to-obtain-account-profile-info/30652/14

確かにこっちだけでも少し同期が進んだけれど、今回は設定しなかった。
同期で詰まったら見てみるべきかも。