はじめに
Hyperledger Composerでbnaファイルをデプロイするコマンドcomposer network deploy
を実行してなかなか上手くいかず困ったときのことを書きました。
エラーの内容を調べると英語のページはいくつか見つかるのですが、日本語のページは見つからなかったので、少しまとめてみました。
↓のコマンドを実行してもエラーばかり出て頭を悩ませていました。
composer network deploy -a basic-sample-network.bna -p defaultProfile -i admin -s Xurw3yU9zI0l
この投稿を書く頃にはエラーを解消したいと思っていたのですが、できませんでした( ; ; )
Hyperledger ComposerについてはHyperledger Composer 使ってみた#1で分かりやすく説明がされています。
実行環境
OS:Ubuntu 16.04.2
composer:v0.8.1(※追記しました)
Hyperledger Fabric v0.6
前提条件はこちらに書いてあるものを満たしています。
https://hyperledger.github.io/composer/installing/development-tools.html
遭遇したエラー一覧
主に4つのエラーに遭遇していました。
上二つのエラーは原因と解決策が分かったのですが、下二つはそれが分からず未解決です。
- Error: Error: sql: no rows in result set(解決済み)
- Error: Identity or token does not match.(解決済み)
- FATAL ERROR: Committing semi space failed. Allocation failed process out of memory(原因不明、未解決)
- timed out waiting for transaction to complete(なんとなく原因はわかったような‥、未解決)
遭遇したエラーの詳細と解決策(一部)
Error: Error: sql: no rows in result set(解決策あり)
vagrant@ubuntu:~/composerPoCTool-master/tools/composer/bna$ composer network deploy -a basic-sample-network.bna -p defaultProfile -i admin -s Xurw3yU9zI0l
Deploying business network from archive: basic-sample-network.bna
Business network definition:
Identifier: basic-sample-network@0.0.10
Description: The Hello World of Hyperledger Composer samples
✖ Deploying business network definition. This may take a minute...
Error: Error: sql: no rows in result set
Command failed
〜原因〜
古いcertが合っていないこと
membershipサービスを再起動した場合、古いcertは削除しないとだめなようです。
〜解決策〜
.composer-connection-profiles
.composer-credentials
の二つのファイルを削除する
私の環境の場合、二つのファイルは/home/vagrantにあったので、
cd /home/vagrant
rm -rf .composer-connection-profiles
rm -rf .composer-credentials
を実行したところ、Error: Error: sql: no rows in result set
のエラーは出てこなくなりました。
Error: Identity or token does not match.(解決策あり)
vagrant@ubuntu:~/composerPoCTool-master/tools/composer/bna$ composer network deploy -a basic-sample-network.bna -p defaultProfile -i admin -s Xurw3yU9zI0l
Deploying business network from archive: basic-sample-network.bna
Business network definition:
Identifier: basic-sample-network@0.0.10
Description: The Hello World of Hyperledger Composer samples
Error: Identity or token does not match.
Command failed
〜原因〜
enrollId(-i)、enrollSecret(-s)の組み合わせが間違っていること
〜解決策〜
enrollId、enrollSecretを正しく入力する
enrollId、enrollSecretの組み合わせは特に設定していなければこちらの85行目あたりに書いてあるものが使えるはずです。
(https://github.com/hyperledger-archives/fabric/blob/master/membersrvc/membersrvc.yaml)
↓これらです(一部抜粋)
admin: 1 Xurw3yU9zI0l
WebAppAdmin: 1 DJY27pEnl16d
FATAL ERROR: Committing semi space failed. Allocation failed process out of memory(原因不明、未解決)
試行錯誤して色々とやっていたときに遭遇したエラーでどうして起きたのかがよく分かっていません。。
Nodeのメモリ不足が起きているようですが
vagrant@ubuntu:~/composerPoCTool-master/tools/composer/bna$ composer network deploy -a basic-sample-network.bna -p defaultProfile -i admin -s Xurw3yU9zI0l
<--- Last few GCs --->
27376 ms: Scavenge 3.2 (10.0) -> 2.9 (872.0) MB, 112.8 / 4.6 ms [allocation failure].
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 0x2d1f574cfb39 <JS Object>
1: realpathSync [fs.js:1667] [pc=0x3a9e85838ee0] (this=0x123e0d083c71 <an Object with map 0x12727321a9e9>,p=0x2df6d25042d1 <String[102]: /home/vagrant/.nvm/versions/node/v6.11.0/lib/node_modules/composer-cli/node_modules/yargs/lib/usage.js>,options=0x2df6d2504419 <an Object with map 0x12727321b229>)
2: toRealPath(aka toRealPath) [module.js:133] [pc=0x3a9e85838450] (this=0x2d1f57404381 <...
FATAL ERROR: Committing semi space failed. Allocation failed - process out of memory
1: node::Abort() [node]
2: 0x109bf8c [node]
3: v8::Utils::ReportApiFailure(char const*, char const*) [node]
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [node]
5: v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [node]
6: v8::internal::Heap::CollectGarbage(v8::internal::GarbageCollector, char const*, char const*, v8::GCCallbackFlags) [node]
7: v8::internal::Factory::NewInternalizedStringImpl(v8::internal::Handle<v8::internal::String>, int, unsigned int) [node]
8: v8::internal::StringTable::LookupString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>) [node]
9: v8::internal::LookupIterator::PropertyOrElement(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, bool*, v8::internal::LookupIterator::Configuration) [node]
10: v8::internal::Runtime::GetObjectProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>) [node]
11: 0xed3501 [node]
12: v8::internal::Runtime_KeyedGetProperty(int, v8::internal::Object**, v8::internal::Isolate*) [node]
13: 0x3a9e857092a7
Aborted
timed out waiting for transaction to complete(未解決)
このタイムアウトでデプロイに失敗するエラーが一番遭遇しています。これまでに紹介したエラーが解決しても結局このエラーに行き着きます。。
vagrant@ubuntu:~/composerPoCTool-master/tools/composer/bna$ composer network deploy -a basic-sample-network.bna -p defaultProfile -i admin -s Xurw3yU9zI0l
Deploying business network from archive: basic-sample-network.bna
Business network definition:
Identifier: basic-sample-network@0.0.10
Description: The Hello World of Hyperledger Composer samples
✖ Deploying business network definition. This may take a minute...
timed out waiting for transaction to complete
Command failed
○エラー解消のためにやったこと
・connection.jsonがあるかを確認
vagrant@ubuntu:~/.composer-connection-profiles/defaultProfile$ ls
connection.json
ありました
・ぐぐる
docker logs <CONTAINER ID>
でログを見るといいという投稿を見つけました。
まずはdocker ps
でCONTAINER IDを確認
vagrant@ubuntu:~/composer/bna$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
180a05ba4a66 hyperledger/composer-playground "pm2-docker compos..." 6 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp fabricconfig_composer_1
47525938ac95 hyperledger/fabric-peer:x86_64-0.6.1-preview "sh -c 'sleep 5; p..." 6 minutes ago Up 2 minutes 0.0.0.0:7150->7050/tcp, 0.0.0.0:7151->7051/tcp, 0.0.0.0:7152->7052/tcp, 0.0.0.0:7153->7053/tcp fabricconfig_vp1_1
962df523b480 hyperledger/fabric-peer:x86_64-0.6.1-preview "sh -c 'sleep 5; p..." 6 minutes ago Up 2 minutes 0.0.0.0:7350->7050/tcp, 0.0.0.0:7351->7051/tcp, 0.0.0.0:7352->7052/tcp, 0.0.0.0:7353->7053/tcp fabricconfig_vp3_1
6ea2ec92d454 hyperledger/fabric-peer:x86_64-0.6.1-preview "sh -c 'sleep 5; p..." 6 minutes ago Up 2 minutes 0.0.0.0:7250->7050/tcp, 0.0.0.0:7251->7051/tcp, 0.0.0.0:7252->7052/tcp, 0.0.0.0:7253->7053/tcp fabricconfig_vp2_1
fb09850fba53 hyperledger/fabric-peer:x86_64-0.6.1-preview "sh -c 'sleep 5; p..." 6 minutes ago Up 2 minutes 0.0.0.0:7050-7053->7050-7053/tcp fabricconfig_vp0_1
1e5d14cacb02 hyperledger/fabric-membersrvc:x86_64-0.6.1-preview "membersrvc" 6 minutes ago Up 2 minutes 0.0.0.0:7054->7054/tcp fabricconfig_membersrvc_1
docker logs <CONTAINER ID>
を実行。(一部抜粋)
vagrant@ubuntu:~/composer/bna$ docker logs 47525938ac95
:
04:59:24.290 [dockercontroller] deployImage -> ERRO 117 Error building images: manifest for hyperledger/fabric-baseimage:latest not found
04:59:24.290 [dockercontroller] deployImage -> ERRO 118 Image Output:
********************
Step 1/4 : FROM hyperledger/fabric-baseimage
********************
vagrant@ubuntu:~/composer/bna$ docker logs 962df523b480
:
02:51:31.563 [peer] chatWithPeer -> ERRO 15aa Error creating connection to peer address 172.18.0.5:7051: grpc: timed out when dialing
:
vagrant@ubuntu:~/composer/bna$ docker logs 6ea2ec92d454
:
02:54:25.298 [peer] chatWithPeer -> ERRO 1a05 Error creating connection to peer address 172.18.0.5:7051: grpc: timed out when dialing
:
vagrant@ubuntu:~/composerPoCTool-master/tools/composer/bna$ docker logs fb09850fba53
:
02:55:48.718 [peer] chatWithPeer -> ERRO 1c33 Error creating connection to peer address 172.18.0.5:7051: grpc: timed out when dialing
:
主に二つのエラーが起きていることでタイムアウトが起きているのではと推測できました。
Error building images: manifest for hyperledger/fabric-baseimage:latest not found
Error creating connection to peer address 172.18.0.5:7051: grpc: timed out when dialing
次に、
Error building images: manifest for hyperledger/fabric-baseimage:latest not found
についてググってみると、
base imageのpullとタグの設定が必要だということで、以下のコマンドを実行してみました。
docker pull hyperledger/fabric-baseimage:x86_64-0.1.0 (or whatever baseimage version you prefer).
docker tag hyperledger/fabric-baseimage:x86_64-0.1.0 hyperledger/fabric-baseimage:latest
再度、composer network deploy
を実行してみましたが、結果は変わらず。。
その後も情報収集をしましたが、解決しませんでした。
環境を作り直しても上手くいかず、少し時間を置いてからもう一度チャレンジしたときになんとなくdocker-compose up
を実行しました。(普段はログが出ないようにdocker-compose up -d
を実行しています)
ログをよく見てみると
vp0_1 | 06:28:45.268 [peer] chatWithPeer -> ERRO 158 Error creating connection to peer address 172.18.0.5:7051: grpc: timed out when dialing
vp2_1 | 06:28:45.778 [peer] chatWithPeer -> ERRO 151 Error creating connection to peer address 172.18.0.5:7051: grpc: timed out when dialing
vp1_1 | 06:28:45.966 [peer] chatWithPeer -> ERRO 145 Error creating connection to peer address 172.18.0.5:7051: grpc: timed out when dialing
のようなエラーが出ていることがわかりました。
そもそもdocker-compose up
した直後から上手くいっていなかったみたいです。。
「Error creating connection to peer address 172.18.0.5:7051: grpc: timed out when dialing」などでググってみるとこちらの投稿を見つけました。https://github.com/IBM-Blockchain-Archive/fabric-images/issues/25
同じ現象に遭遇している人がいるそうで、OSは同じubuntu16.04。
昨日までは完璧に動いていたのに今日から動かなくなってしまったそう。
同じ現象にあっている人がいるんだということが分かりました。
最後に
私と同じようなタイムアウトでデプロイに失敗する現象に遭遇して解決された方がいらっしゃいましたらどのようなことを行ったのか教えていただければと思います。