Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add thrift server #203

Merged
merged 7 commits into from
Oct 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/workflows/sc-client-server-deb10.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ env:
DOCKER_CLIENT: 'dockerfiles/buster/Dockerfile.client'
DOCKER_SERVER_BASE: 'dockerfiles/buster/Dockerfile.server'
DOCKER_SERVER: 'npu/broadcom/BCM56850/saivs/Dockerfile.server'
DOCKER_THRIFT_SERVER: 'dockerfiles/buster/Dockerfile.saithrift-server'
REDIS_CLIENT: 0
REDIS_SERVER: 0
THRIFT_SERVER: 0


jobs:
Expand Down Expand Up @@ -54,6 +56,11 @@ jobs:
echo "REDIS_SERVER=1" >> $GITHUB_ENV
fi
done
for file in "$DOCKER_THRIFT_SERVER" "sai.env"; do
if [[ "${{ steps.check_changes.outputs.changed_files }}" == *"$file"* ]]; then
echo "THRIFT_SERVER=1" >> $GITHUB_ENV
fi
done

- name: Build server Docker image
run: ./build.sh -i server -o deb10
Expand All @@ -70,6 +77,10 @@ jobs:
with:
name: Server Image
path: sc-server.tar

- name: Build Thrift server Docker image
yuriilisovskyi marked this conversation as resolved.
Show resolved Hide resolved
run: ./build.sh -i server -o deb10 -s thrift
if: ${{ env.THRIFT_SERVER == '1' }}

build-sc-client:
name: Build SAI Challenger client image
Expand Down
11 changes: 11 additions & 0 deletions .github/workflows/sc-client-server-deb11.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ env:
DOCKER_CLIENT: 'dockerfiles/bullseye/Dockerfile.client'
DOCKER_SERVER_BASE: 'dockerfiles/bullseye/Dockerfile.server'
DOCKER_SERVER: 'npu/broadcom/BCM56850/saivs/Dockerfile.server'
DOCKER_THRIFT_SERVER: 'dockerfiles/buster/Dockerfile.saithrift-server'
REDIS_CLIENT: 0
REDIS_SERVER: 0
THRIFT_SERVER: 0

jobs:
build-sc-server:
Expand All @@ -53,6 +55,11 @@ jobs:
echo "REDIS_SERVER=1" >> $GITHUB_ENV
fi
done
for file in "$DOCKER_THRIFT_SERVER" "sai.env"; do
if [[ "${{ steps.check_changes.outputs.changed_files }}" == *"$file"* ]]; then
echo "THRIFT_SERVER=1" >> $GITHUB_ENV
fi
done

- name: Build server Docker image
run: ./build.sh -i server -o deb11
Expand All @@ -70,6 +77,10 @@ jobs:
name: Server Image
path: sc-server.tar

- name: Build Thrift server Docker image
run: ./build.sh -i server -o deb11 -s thrift
if: ${{ env.THRIFT_SERVER == '1' }}

build-sc-client:
name: Build SAI Challenger client image
runs-on: ubuntu-20.04
Expand Down
13 changes: 11 additions & 2 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -149,13 +149,18 @@ if [ "${IMAGE_TYPE}" = "standalone" ]; then
elif [ "${IMAGE_TYPE}" = "server" ]; then
find ${ASIC_PATH}/../ -type f -name \*.py -exec install -D {} .build/{} \;
find ${ASIC_PATH}/../ -type f -name \*.json -exec install -D {} .build/{} \;
docker build -f dockerfiles/${BASE_OS}/Dockerfile.server -t sc-server-base:${BASE_OS} .
if [ "${SAI_INTERFACE}" = "thrift" ]; then
docker build -f dockerfiles/${BASE_OS}/Dockerfile.saithrift-server -t sc-thrift-server-base:${BASE_OS} .
else
docker build -f dockerfiles/${BASE_OS}/Dockerfile.server -t sc-server-base:${BASE_OS} .
fi
rm -rf .build/
else
docker build -f dockerfiles/${BASE_OS}/Dockerfile.client --build-arg NOSNAPPI=${NOSNAPPI} -t sc-client:${BASE_OS} .
if [ "${SAI_INTERFACE}" = "thrift" ]; then
docker build -f dockerfiles/${BASE_OS}/Dockerfile.saithrift-client -t sc-thrift-client:${BASE_OS} .
fi
exit 0
fi

# Build target Docker image
Expand All @@ -168,6 +173,10 @@ if [ "${IMAGE_TYPE}" = "standalone" ]; then
docker build -f Dockerfile --build-arg BASE_OS=${BASE_OS} -t sc-${IMG_NAME}:${BASE_OS} .
fi
elif [ "${IMAGE_TYPE}" = "server" ]; then
docker build -f Dockerfile.server --build-arg BASE_OS=${BASE_OS} -t sc-server-${IMG_NAME}:${BASE_OS} .
if [ "${SAI_INTERFACE}" = "thrift" ]; then
docker build -f Dockerfile.saithrift-server --build-arg BASE_OS=${BASE_OS} -t sc-thrift-server-${IMG_NAME}:${BASE_OS} .
else
docker build -f Dockerfile.server --build-arg BASE_OS=${BASE_OS} -t sc-server-${IMG_NAME}:${BASE_OS} .
fi
fi
popd
32 changes: 32 additions & 0 deletions configs/server/supervisord.conf.thrift
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
[supervisord]
logfile_maxbytes=1MB
logfile_backups=2
nodaemon=true

[eventlistener:dependent-startup]
command=python3 -m supervisord_dependent_startup
autostart=true
autorestart=unexpected
startretries=0
exitcodes=0,3
events=PROCESS_STATE
buffer_size=1024

[program:rsyslogd]
command=/usr/sbin/rsyslogd -n -iNONE
priority=1
autostart=false
autorestart=false
stdout_logfile=syslog
stderr_logfile=syslog
dependent_startup=true

[program:saiserver]
command=/usr/sbin/saiserver -f /usr/share/sonic/hwsku/port_config.ini -p /usr/share/sonic/hwsku/sai.profile
priority=3
autostart=true
autorestart=true
stdout_logfile=syslog
stderr_logfile=syslog
dependent_startup_wait_for=rsyslogd:running

79 changes: 79 additions & 0 deletions dockerfiles/bullseye/Dockerfile.saithrift-server
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
FROM debian:buster-slim

## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive

COPY sai.env /

# Install generic packages
RUN apt-get -o Acquire::Check-Valid-Until=false update && apt-get install -y \
apt-utils \
vim \
curl \
wget \
iproute2 \
unzip \
git \
procps \
build-essential \
graphviz \
doxygen \
aspell \
python3-pip \
rsyslog \
supervisor

# Add support for supervisord to handle startup dependencies
RUN pip3 install supervisord-dependent-startup==1.4.0

# Install generic packages
RUN apt-get install -y \
libtemplate-perl \
libconst-fast-perl \
libmoosex-aliases-perl \
libnamespace-autoclean-perl \
libgetopt-long-descriptive-perl \
aspell-en bison flex g++ \
libboost-all-dev libevent-dev libssl-dev \
libpython3-dev libpcap-dev

WORKDIR /sai

RUN apt-get install -y pkg-config \
&& wget "http://archive.apache.org/dist/thrift/0.11.0/thrift-0.11.0.tar.gz" \
&& tar -xf thrift-0.11.0.tar.gz \
&& cd thrift-0.11.0 \
&& ./bootstrap.sh \
&& ./configure --prefix=/usr --with-cpp --with-python \
--with-qt4=no --with-qt5=no --with-csharp=no --with-java=no --with-erlang=no \
--with-nodejs=no --with-lua=no --with-per=no --with-php=no --with-dart=no \
--with-ruby=no --with-haskell=no --with-go=no --with-rs=no --with-haxe=no \
--with-dotnetcore=no --with-d=no \
&& make && make install \
&& pip3 install ctypesgen lib/py \
&& cd /sai \
&& rm -rf thrift-0.11.0 thrift-0.11.0.tar.gz ;

ENV SAITHRIFTV2=y
ENV GEN_SAIRPC_OPTS="-cve"
ENV SAIRPC_EXTRA_LIBS="-L/usr/local/lib/ -lpthread"

RUN git clone https://github.com/opencomputeproject/SAI.git \
&& cd SAI && git fetch origin \
&& . /sai.env \
&& git checkout ${SAI_ID} \
&& cd meta \
&& make all libsaimetadata.so libsai.so \
&& cp libsaimetadata.so /usr/lib \
&& cp libsai.so /usr/lib \
&& cd .. \
&& mkdir /usr/include/sai/ \
&& cp ./inc/sai*.h /usr/include/sai/ \
&& cp ./experimental/sai*.h /usr/include/sai/ \
&& make saithrift-install

WORKDIR /sai-challenger

COPY configs/server/supervisord.conf.thrift /etc/supervisor/conf.d/supervisord.conf

CMD ["/usr/bin/supervisord"]
73 changes: 73 additions & 0 deletions dockerfiles/buster/Dockerfile.saithrift-server
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
FROM debian:buster-slim

RUN echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ buster main contrib non-free" >> /etc/apt/sources.list && \
echo "deb-src [arch=amd64] http://debian-archive.trafficmanager.net/debian/ buster main contrib non-free" >> /etc/apt/sources.list && \
echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian-security/ buster/updates main contrib non-free" >> /etc/apt/sources.list && \
echo "deb-src [arch=amd64] http://debian-archive.trafficmanager.net/debian-security/ buster/updates main contrib non-free" >> /etc/apt/sources.list && \
echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian buster-backports main" >> /etc/apt/sources.list

## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive

COPY sai.env /

# Install generic packages
RUN apt-get -o Acquire::Check-Valid-Until=false update && apt-get install -y \
apt-utils \
vim \
curl \
wget \
iproute2 \
unzip \
git \
procps \
build-essential \
graphviz \
doxygen \
aspell \
python3-pip \
rsyslog \
supervisor

# Add support for supervisord to handle startup dependencies
RUN pip3 install supervisord-dependent-startup==1.4.0

# Install generic packages
RUN apt-get install -y \
libtemplate-perl \
libconst-fast-perl \
libmoosex-aliases-perl \
libnamespace-autoclean-perl \
libgetopt-long-descriptive-perl \
aspell-en bison flex g++ \
libboost-all-dev libevent-dev libssl-dev \
libpython3-dev libpcap-dev

WORKDIR /sai

RUN apt-get install -y thrift-compiler libthrift-dev libthrift-0.11.0 \
&& pip3 install ctypesgen thrift==0.11.0 ;

ENV SAITHRIFTV2=y
ENV GEN_SAIRPC_OPTS="-cve"
ENV SAIRPC_EXTRA_LIBS="-L/usr/local/lib/ -lpthread"

RUN git clone https://github.com/opencomputeproject/SAI.git \
&& cd SAI && git fetch origin \
&& . /sai.env \
&& git checkout ${SAI_ID} \
&& cd meta \
&& make all libsaimetadata.so libsai.so \
&& cp libsaimetadata.so /usr/lib \
&& cp libsai.so /usr/lib \
&& cd .. \
&& mkdir /usr/include/sai/ \
&& cp ./inc/sai*.h /usr/include/sai/ \
&& cp ./experimental/sai*.h /usr/include/sai/ \
&& make saithrift-install

WORKDIR /sai-challenger

COPY configs/server/supervisord.conf.thrift /etc/supervisor/conf.d/supervisord.conf

CMD ["/usr/bin/supervisord"]
10 changes: 10 additions & 0 deletions npu/broadcom/BCM56850/saivs/Dockerfile.saithrift-server
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
ARG BASE_OS
FROM sc-thrift-server-base:$BASE_OS

COPY configs/sai.profile /usr/share/sonic/hwsku/
COPY configs/port_config.ini /usr/share/sonic/hwsku/
COPY configs/lanemap.ini /usr/share/sonic/hwsku/

WORKDIR /

CMD ["/usr/bin/supervisord"]
2 changes: 1 addition & 1 deletion run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ if [ "${IMAGE_TYPE}" = "standalone" ]; then
IMG_NAME=$(echo "${PREFIX}-${ASIC_TYPE}-${TARGET}" | tr '[:upper:]' '[:lower:]')
OPTS="$OPTS -v $(pwd):/sai-challenger"
elif [ "${IMAGE_TYPE}" = "server" ]; then
IMG_NAME=$(echo "sc-server-${ASIC_TYPE}-${TARGET}" | tr '[:upper:]' '[:lower:]')
IMG_NAME=$(echo "${PREFIX}-server-${ASIC_TYPE}-${TARGET}" | tr '[:upper:]' '[:lower:]')
else
IMG_NAME=${PREFIX}-client
OPTS="$OPTS -v $(pwd):/sai-challenger"
Expand Down