メインコンテンツまでスキップ

IDE Setup

StarRocksの開発にIDEをセットアップする

StarRocksのコントリビューターになりたい人の中には、開発環境に悩んでいる人もいます。そこで、ここではその解決方法についてのチュートリアルを書きます。

理想的な開発ツールチェーンとは何でしょうか?

  • 一クリックでFEとBEをコンパイルできること。
  • ClionとIDEAでのコードジャンプをサポートすること。
  • IDE内のすべての変数が正常に解析され、赤い波線が表示されないこと。
  • Clionでの解析機能を正常に使用できること。
  • FEとBEのデバッグをサポートすること。

準備

私はMacBook(M1)を使ってローカルでコーディングを行い、リモートサーバーでStarRocksのコンパイルとテストを行っています(リモートサーバーはUbuntu 22を使用し、少なくとも16GBのRAMが必要です)。

全体的なアイデアは、MacBookでコードを書き、IDEを介してコードを自動的にサーバーに同期し、サーバーを使用してStarRocksをコンパイルおよび開発することです。

MacBookのセットアップ

Thrift 0.13

公式のbrewリポジトリには0.13のバージョンのThriftはありません。したがって、私たちのコミッターの一人が自分のリポジトリでバージョンを作成し、インストールする必要があります。

brew install alberttwong/thrift/thrift@0.13

Thriftが正常にインストールされているかどうかは、次のコマンドで確認できます。

$ thrift -version
Thrift version 0.13.0

Protobuf

最新バージョンのv3を直接使用してください。StarRocksのProtobufプロトコルのv2バージョンと互換性があります。

brew install protobuf

Maven

brew install maven

OpenJDK 1.8または11

brew install openjdk@11

Python3

MacOSには標準でインストールされていますので、インストールの必要はありません。

システム環境のセットアップ

export JAVA_HOME=xxxxx
export PYTHON=/usr/bin/python3

Ubuntu22サーバーのセットアップ

StarRocksコードのクローン

git clone https://github.com/StarRocks/starrocks.git

コンパイルに必要なツールのインストール

sudo apt update
sudo apt install gcc g++ maven openjdk-11-jdk python3 python-is-python3 unzip cmake bzip2 ccache byacc ccache flex automake libtool bison binutils-dev libiberty-dev build-essential ninja-build

JAVA_HOME環境変数のセットアップ

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

StarRocksのビルド

cd starrocks/
./build.sh

初回のコンパイルでは、thirdpartyをコンパイルする必要があるため、時間がかかります。

最初のコンパイルではgccを使用する必要があります。現在、thirdpartyはclangで正常にコンパイルできません。

IDEのセットアップ

FE

FEの開発は簡単です。MacOSで直接コンパイルできます。feフォルダに移動して、コマンドmvn install -DskipTestsを実行します。

その後、IDEAでfeフォルダを直接開くことができます。

ローカルデバッグ

他のJavaアプリケーションと同様です。

リモートデバッグ

Ubuntuサーバーで./start_fe.sh --debugと実行し、それに接続するためにIDEAのリモートデバッグを使用します。デフォルトのポートは5005ですが、start_fe.shスクリプトで変更することができます。

デバッグのためのJavaパラメーター:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005は、単にIDEAからコピーしたものです。

IDE

BE

まず、beフォルダでmvn install -DskipTestsを実行して、gensrcディレクトリ内のthriftおよびprotobufが正しくコンパイルされていることを確認することをおすすめします。

次に、gensrcフォルダに入り、make cleanmakeのコマンドをそれぞれ実行する必要があります。そうしないと、Clionがthriftの出力ファイルを検出できません。

Clionを使用してbeフォルダを開きます。

設定ツールチェーンを追加します。まずリモートサーバーを追加し、その後Build Tool、CとC++のコンパイラを個別に設定します。

IDE

設定 / デプロイメント で、フォルダのマッピングを変更します。

IDE

設定 / Cmake で、ツールチェーンをリモートツールチェーンに変更します。次の環境変数を追加します。

JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
STARROCKS_GCC_HOME=/usr/
STARROCKS_THIRDPARTY=/root/starrocks/thirdparty

注意: システムの環境変数を含めるをチェックしないでください。

IDE
IDE

ここまで、すべてのセットアップが完了しました。Clionとリモートサーバーがしばらく同期された後、コードジャンプは正常に機能します。

デバッグ

BEのデバッグは少し難しいですが、リモートサーバーでgdbを使用する必要があります。もちろん、gdb server + Clion remote gdbを使用することもできますが、おすすめしません。非常に重くなります。

start_backend.shスクリプトを次のように変更します。

if [ ${RUN_BE} -eq 1 ]; then
echo "start time: "$(date) >> $LOG_DIR/be.out
if [ ${RUN_DAEMON} -eq 1 ]; then
nohup ${STARROCKS_HOME}/lib/starrocks_be "$@" >> $LOG_DIR/be.out 2>&1 </dev/null &
else
gdb -tui ${STARROCKS_HOME}/lib/starrocks_be
fi
fi

その後、フラグなしで./bin/start_be.shを実行します。

Lakehouseのデバッグでエラーレポートが表示される場合は、~/.gdbinithandle SIGSEGV nostop noprint pass を追加してください。

LLVM

もちろん、LLVMツールを使用してBEを開発することもできます。

UbuntuでのLLVMのインストールについては、次のリンクを参照してください: https://apt.llvm.org/

次のコマンドを使用して、beをコンパイルします。 CC=clang-15 CXX=clang++-15 ./build.sh ただし、前提条件としてthirdpartyがgccでコンパイルされている必要があります。

最後に

StarRocksに自由にコードを貢献してください。 🫵

参考