티스토리 뷰

반응형

blockchain-explorer: Invalid results returned ::NOT_FOUND 오류 해결 방법

오류 발생

Hyperledger Fabric v1.2 네트워크를 구성하고 blockchain-explorer v0.3.7을 실행해 정상적으로 작동되는 것을 확인했다.

그런데 며칠이 지난 뒤, 갑자기 어느 순간부터 다음과 같은 오류가 뜨면서 blockchain-explorer가 실행되지 않았다.

네트워크를 아예 down하고 다시 up한 다음 blockchain-explorer를 실행하면 또 정상적으로 수행되다가 어느 순간부터 동일한 오류가 발생하기 시작했다.

최신 버전의 blockchain-explorer로 실행해도 마찬가지였다.

blockchain-explorer console 로그

postgres://hppoc:password@127.0.0.1:5432/fabricexplorer

error: [Orderer.js]: sendDeliver - rejecting - status:NOT_FOUND
<<<<<<<<<<<<<<<<<<<<<<<<<< Explorer Error >>>>>>>>>>>>>>>>>>>>>
Error: Invalid results returned ::NOT_FOUND
    at ClientDuplexStream.<anonymous> (/opt/gopath/src/github.com/hyperledger/blockchain-explorer/node_modules/fabric-client/lib/Orderer.js:230:23)
    at emitOne (events.js:116:13)
    at ClientDuplexStream.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
    at ClientDuplexStream.Readable.push (_stream_readable.js:208:10)
    at readCallback (/opt/gopath/src/github.com/hyperledger/blockchain-explorer/node_modules/grpc/src/client.js:312:14)
Received kill signal, shutting down gracefully
Closed out connections


orderer 컨테이너 로그

2019-01-21 02:08:17.134 UTC [common/deliver] deliverBlocks -> ERRO 6d74 [channel: honeybeechannel] Error reading from channel, cause was: NOT_FOUND



오류 해결

당장 blockchain-explorer 화면을 보여줘야 하는 상황에서 blockchain-explorer가 실행되지 않아 매우 난감한 입장이 되었고, 하나하나 분석을 해가며 어느 부분이 문제인지를 찾아보았다.

알아본 바로는, Orderer에서 해당 채널에 대한 블록을 찾을 수 없어서 발생하는 오류였다.

기존의 byfn 네트워크에서는 이런 오류가 발생하지 않았기 때문에, byfn 네트워크와 비교/분석을 해 보았더니 ORDERER_GENERAL_LEDGERTYPE이 달랐다.

멀티 호스트를 사용해 네트워크를 구성하면서, ORDERER_GENERAL_LEDGERTYPEram으로 설정해놓았는데 ram 유형은 프로세스가 다시 시작될 경우, 원장이 기성 블록으로 재설정되기 때문에 해당 오류가 발생한 것으로 추정된다.

ORDERER_GENERAL_LEDGERTYPE의 default 값이 file이기 때문에 해당 환경변수 설정 자체를 주석처리하고 네트워크를 재시작(restart)했더니 오류가 해결되었다.


※ Orderer 노드의 원장 유형

  • file : 운영환경용. 블록을 파일 시스템에 직접 저장. 디스크의 블록 위치는 Lightweight LevelDB 데이터베이스에서 번호로 '인덱싱'되어 클라이언트가 효율적으로 번호별 블록 검색이 가능. (default)

  • ram : 개발환경용. 메모리에 배치를 보존하고 구성 가능한 히스토리 크기를 보존. 프로세스를 다시 시작하면 원장이 기성 블록으로 재설정됨

  • json : 개발환경용. JSON 인코딩 파일로 파일 시스템에 일괄 처리를 저장. 원장을 쉽게 검사하고 충돌 방지 기능을 허용하기 위한 것


반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함