Создание пользовательской цепочки кодов Hyperledger Fabric: как исправить «превышение сроков контекста» - PullRequest
0 голосов
/ 11 апреля 2019

Я работаю с примером "первой сети" платформы Hyperledger Fabric, который найден здесь , но я не могу успешно создать экземпляр пользовательского файла цепочки кода Java. Вот команда, которую я выполняю, которая является слегка измененной версией команды, которую запускает сценарий успешного запуска:

peer chaincode instantiate -o orderer.example.com:7050 --tls false --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n javacc -l java -v 1.4 -c '{"Args":["init","a","{10}","b","{20}"]}' --connTimeout 600s -P 'AND ('\''Org1MSP.peer'\'','\''Org2MSP.peer'\'')'

Когда я запускаю эту команду, я получаю следующую ошибку:

Error: error getting broadcast client: orderer client failed to connect to orderer.example.com:7050: failed to create new connection: context deadline exceeded

После некоторого поиска в Google ошибка кажется довольно простой: по какой-то причине используемый клиентский контейнер не может подключиться к моему контейнеру заказа. Однако это не имеет смысла для меня по следующим причинам:

Первое: Мне удалось запустить ./byfn.sh up -v -c mychannel -s couchdb, который первоначально установил и создал некоторый цепной код golang из клиентского контейнера с помощью следующих команд (-v 1.0 был позже обновлен с помощью byfn.sh скрипт до версии 1.4):

peer chaincode install -n mycc -v 1.0 -l golang -p github.com/chaincode/chaincode_example02/go/
peer chaincode instantiate -o orderer.example.com:7050 --tls false --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -l golang -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P 'AND ('\''Org1MSP.peer'\'','\''Org2MSP.peer'\'')'

Второе: Мне удалось установить (но не создать экземпляр) мой пользовательский цепной код Java из того же клиентского контейнера: peer chaincode install -n javacc -v 1.4 -l java -p /chaincode-application (/chaincode-application - это местоположение моего источника цепочечного кода Java)

Я уже рассмотрел несколько возможных путей. На упомянутом выше веб-сайте есть примечание о продолжительности времени: «Обратите внимание, что создание цепочки кода Java может занять некоторое время, поскольку она компилирует цепочку кода и загружает Docker-контейнер со средой Java.» Поэтому я использовал --connTimeout 600s (600 секунд = 10 минут) как часть моей команды, но я все еще получаю сообщение об ошибке после ожидания указанного количества времени. Кроме того, действительно ли это займет столько времени в одноранговом контейнере, когда для создания моего локального IntelliJ потребуется около 3 секунд? *

Я также пытался попасть в узел-заказчик внутри моего клиентского контейнера: root@7bbadf11e755:/opt/gopath/src/github.com/hyperledger/fabric/peer# curl orderer.example.com:7050, который завершается ошибкой со следующим сообщением: curl: (56) Recv failure: Connection reset by peer. Кажется, это указывает на то, что мой клиентский контейнер может подключаться к контейнеру orderer, но контейнер orderer не знает, как обрабатывать пустой путь запроса. Насколько я знаю, этого следует ожидать, что, вероятно, означает, что проблема не в моей настройке Docker Compose. Единственное, что я изменил в своих файлах Docker Compose, - это отключение TLS.

Наконец, я также последовал примеру установки проекта Maven для файла пользовательского цепного кода Java, расположенного внутри моего клиента. У меня есть файл pom.xml, в котором указывается имя моего основного класса, и несколько исходных файлов Java внутри каталога 'src', включая класс Java, который implements имеет правильный Chaincode интерфейс, как указано в документации Hyperledger Fabric. Эти файлы прекрасно работают, когда я запускаю сборку с maven вне контейнера.

Интересно, что я вижу следующее сообщение только на одном из равноправных узлов:

2019-04-11 02:11:36.056 UTC [endorser] callChaincode -> INFO 119 [][dc951a0d] Entry chaincode: name:"cscc" 
2019-04-11 02:11:36.060 UTC [endorser] callChaincode -> INFO 11a [][dc951a0d] Exit chaincode: name:"cscc"  (3ms)
2019-04-11 02:11:36.060 UTC [comm.grpc.server] 1 -> INFO 11b unary call completed {"grpc.start_time": "2019-04-11T02:11:36.055Z", "grpc.service": "protos.Endorser", "grpc.method": "ProcessProposal", "grpc.peer_address": "172.27.0.11:42744", "grpc.code": "OK", "grpc.call_duration": "5.7837ms"}

Другой равноправный узел не имеет записи с сегодняшнего дня, равно как и узел-заказчик, что мне кажется странным.

Я пытался найти в поиске ошибки. Я обнаружил эту проблему, которая, кажется, является именно моей проблемой, но есть только один ответ, который не решает проблему, и мне не разрешено комментировать или голосовать за нее. Я также нашел this , но не смог найти какой-либо информации о моей собственной проблеме, так как я запускаю все узлы Hyperledger Fabric локально. У меня нет идей, как решить эту проблему. У кого-нибудь есть идеи, почему я все еще получаю сообщение «превышен крайний срок контекста»?

1 Ответ

0 голосов
/ 24 апреля 2019

Я снова включил TLS в своей сети, и ошибка исчезла (вместо этого произошла другая ошибка, но это выходит за рамки моего вопроса :)).Кажется, возможно, я не отключил все настройки TLS, как я думал.

Спасибо @Gari Singh за то, что поставили меня на правильный путь!

...