kaistshadow / blockchain-sim

Scalable blockchain simulator/emulator running on shadow simulator
MIT License
9 stars 1 forks source link

Fix error before merging develop branch to master #315

Closed ygnkim closed 3 years ago

ygnkim commented 3 years ago

develop branch를 release 0.2.0을 위해 master로 병합하기 전에 테스트하는 과정에서 생기는 오류를 수정하는 중.

  1. CMake error for MONERO_OPT Monero를 빌드 및 컴파일하고 싶어서 build option에 MONERO_OPT를 주거나 ALL_OPT를 주면 cmake build error 가 여러 군데에서 발생한다. 위키링크의 표참고. 이는 TPS adapter 및 test 환경을 새로 추가한 부분에서 bitcoin 관련 target 들은 MONERO_OPT 변수를 체크하지 않고 사용했기 때문이다. 따라서 이 문제를 해결하는 패치를 추가함.

  2. bitcoin submodule의 branch를 master 로 병합

  3. 몇몇 test 가 실패함

    mkdir build
    cd build; cmake -DALL_OPT=ON -DTEST_OPT=ON -DCMAKE_BUILD_TYPE=Release ../
    make
    make test

    issue/315 branch에서 위와 같이 테스트를 동작시켰을 때에, 아래와 같이 테스트가 7개 실패함.

image

이중 4개는 monero 관련 테스트이고, 3개는 비트코인 관련 새로 추가한 테스트. monero 관련 테스트는 제가 내일 디버깅하겠습니다. @tkdlqm2 , @hyojin5658 , 근데 비트코인 테스트 실패하는건 확인해주세요 Setup.py 에서 startdump.sh 를 실행시켜주는 것과 관련이 있는건지? (위처럼 command line으로 빌드하면 안해서 생기는 이슈?) 그리고 비트코인 관련 테스트 로그에 아래와 같은 cp 명령 실패가 뜨는데 괜찮은건지요?

image

ygnkim commented 3 years ago
  1. shadow submodule commit이 master가 아닌 문제가 있어서 수정함
ygnkim commented 3 years ago

Monero 관련 이슈는 모두 해결하여 push 한 상황. (모든 monero 관련 regression test 통과함)

위의 4번 이슈랑 regression test를 위한 python script module 바뀐 것 때문이었고, 바뀐 대로 test script를 수정해서 해결함.

ygnkim commented 3 years ago

@tkdlqm2, @hyojin5658 버그 수정한 PR (https://github.com/kaistshadow/blockchain-sim/pull/316) 이 모든 테스트를 통과하는 것을 보면, setup.py로는 제대로 되는데, cmake, make test 명령어를 직접썼을 때만 안되는것 같습니다. 즉, 위에서 말한 setup.py 에서만 쉘스크립트 수행해주는 부분을 cmake 내에서도 test 해주기 전에, 혹은 test를 빌드하기 전에 수행하도록 업데이트만 하면 되지 않을까 싶네요.

별도의 이슈 만들 필요없이 그냥 issue/315 브랜치에 바로 작업해서 체크하시면 될듯합니다.

hyojin5658 commented 3 years ago

네, 항상 setup.py 를 사용해서 실행 하여서, 지금 cmake 와 make 사용해서 실행 해보고 있습니다. 실행 되는대로 comment 남기겠습니다.

hyojin5658 commented 3 years ago

기존에 setup.py 에서 빌드할때 실행하던 startdump.sh 를 삭제하였고, 테스트 마다 dumpfile의 존재유무를 파악하여 없을시에만 startdump.sh 실행 하도록 하였습니다.

cmake,make와 같이 cli로 실행하였을때, 문제 없도록 수정 하였습니다.

PR #315번 merge 한 후에 커밋하도록 하겠습니다.

hyojin5658 commented 3 years ago

@ygnkim 박사님, bitcoin 관련 테스트는 수정 완료해서 315브랜치에 commit 했습니다. 그중에서도 test10번 shadow_log_test는 bitcoin dump 가 없으면, 생성하고 실행 하므로, 총 시뮬레이션 시간이 60 초 정도 되는경우가 있습니다.(dump를 생성하기 위하여 총 시뮬레이션 2번 실행)

그러나, 제가 cli로 실행 했을 때에는 박사님이 위에 올려주신 그림과 같이 27, 28, 29, 36 번 테스트가 Fail이 납니다. 브랜치 316번은 merge 완료한 상태 입니다. 따로 실행 해보면, cmake에서 traget file을 파라미터로 넘겨주는데, monero에서 파라미터로 전달 받지 못합니다. image

image

테스트 27 28 29 36번 위와 같은 이유로 실행이 안되는데, 확인 부탁드립니다.

ygnkim commented 3 years ago

@hyojin5658 음 이상하네요. 혹시 CMake 버젼이 어떻게 되나요?

hyojin5658 commented 3 years ago

cmake version 3.10.2 입니다!

ygnkim commented 3 years ago

@hyojin5658 혹시 git submodule update --init --recursive 해도 그대로인가요?

hyojin5658 commented 3 years ago

네 fail 그대로 입니다. setup.py --test 로 실행 했을 때도 cmake 동작 했을때와 같은 문제로 fail이 발생 합니다.. 박사님이 실행하셨을때는, 문제 없었나요?ㅠ

ygnkim commented 3 years ago

네 저는 잘 되는데요. 그냥 아예 새로 받아도 잘되고. 원래 사용하던 repository에서 하는건가요? make test 하기 전에 make install 한번 해보시고 테스트해보세요. 그래도 안되면 build 폴더 지우고 하거나 아예 새로 clone해서 해보세요.

hyojin5658 commented 3 years ago

@ygnkim 박사님, 왜 Fail이 발생하는 이유는 cmake에서 파라미터 전달에서 문제가 있었던게 아니라, Monero 실행중 segfault가 발생하기 때문입니다.

파라미터는 그림과 같이 잘 전달합니다. image

monero가 xml에 따라서 동작을 해야하는데 executeMain 함수 내에서 segfault가 납니다. monero와 tester(libVERACK_MONERO_TESTER.so)에 관한 log file은 생성되지 않은 걸 보니 monero main 함수가 실행되지 않은 것 같습니다.
참고로, 빌드시에는 정상적으로 빌드 되었고, Install/bin 에 libmonerod.so 파일도 정상적으로 생성되었습니다.

디버깅 했을때, segfault가 발생하면 vprinf.c 파일이 없다고 하는데, 이게 어떠한 연관이 있는지 모르겠습니다. image

@tkdlqm2 혹시 모네로 실행시에 가장 먼저 실행 되는 main 함수가 어느파일에 있는지 알려주실 수 있나요? 아니면, 혹시 모네로 설치/실행시에 별도로 필요한 환경변수 설정이 있나요?

ygnkim commented 3 years ago

이상한 일이네요! 한번 직접 봐야 알수 있을것 같습니다.

완전 새로 clone한 다음에 해도 저런 상황이 나오나요? 그리고 혹시 shadow 를 별도로 실행시켰나요? monero 같은 경우 tls 관련 이슈가 있어서 동작시킬 때, turn_off_tls_fix=0 option을 줘야 합니다. shadow --turn_off_tls_fix=0 topologyd.xml 그래서 저는 CLion에 monero 돌리는 build configuration을 별도로 만들었었고, monero regression test를 돌리는 python에도 저 옵션을 넣어줬어요.

Monero main 함수는 src/daemon/main.cpp 안에 있습니다.

hyojin5658 commented 3 years ago

네ㅠ 디렉터리 다 삭제하고 다시 clone하고 다시 빌드해도 똑같은 에러가 나네요.. 여러번 실행해도 동일한 에러 발생합니다.

Tls관련 로그를 shadow로그에서 보긴 했는데, 옵션은 따로 넣어주지 않았던거같아요. 지금은 퇴근해서ㅠ 월요일날 출근하자마자 해보겠습니다!

ygnkim commented 3 years ago

넵 저도 담주에 같이 볼게요~~

tkdlqm2 commented 3 years ago

@hyojin5658 월요일에 출근해서 저 부분은 제가 보겠습니다! 고생하셨어요!

hyojin5658 commented 3 years ago

[Resolved] 이 문제는 monero의 extenral library 중 unbound를 monero extenral에 정의 되어 있는걸 사용하는 것이 아닌, 시스템에 설치되어 있는 libunbound-dev 를 사용하기 때문에, spinlock 사용하는 중 segfault가 났던 것이다.

monero external /CMakelist.txt 에서는 설치된 unbound가 있으면, 새로 설치 하지 않고 해당 라이브러리를 include 하여 사용한다 . image

따라서, 이미 설치되어 있던 코드와 상관 없이 monero external 에서 사용하는 unbound로 사용하도록 코드를 수정해 주었다. image