Skip to content

Commit

Permalink
refactor: run order checker for bidengine in separate goroutine
Browse files Browse the repository at this point in the history
due to increased number of orders (over 500M)
querying via traditional way is ineffective due to
- original implementation does only one query with limit set to 10000
  which may put RPC into overloaded mode
- this leads to provider service restart followed by teardown of all
  leases

refs troian/pubsub#3
fixes akash-network/support#281

Signed-off-by: Artur Troian <[email protected]>
  • Loading branch information
troian committed Feb 5, 2025
1 parent 25bcb3a commit d98cdd2
Show file tree
Hide file tree
Showing 12 changed files with 322 additions and 219 deletions.
52 changes: 25 additions & 27 deletions .github/workflows/integration-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,13 @@ jobs:
- uses: actions/setup-go@v5
with:
go-version: "${{ env.GOVERSION }}"
- name: Setup direnv
uses: HatsuneMiku3939/direnv-action@v1
with:
masks: ''
- name: Install tools
run: |
curl -sfL https://direnv.net/install.sh | bash
go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest
- name: Hook direnv to bash
run: echo 'eval "$(direnv hook bash)"' >> $HOME/.bashrc
- name: Direnv allow
run: direnv allow ${{ env.GOPATH }}/src/github.com/akash-network/provider
- name: Checkout akash-api
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
run: |
Expand All @@ -60,19 +59,15 @@ jobs:
set-safe-directory: true
path: go/src/github.com/akash-network/akash-api
ref: ${{ env.AKASH_API_VERSION }}
- name: Setup akash-api
run: |
direnv allow ${{ env.GOPATH }}/src/github.com/akash-network/akash-api
cd ${{ env.GOPATH }}/src/github.com/akash-network/akash-api
cat "$GITHUB_ENV" > "$GITHUB_WORKSPACE/env.backup"
direnv export gha >> "$GITHUB_ENV"
- name: Run modvendor on akash-api
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/akash-api
run: |
make modvendor
cat "$GITHUB_WORKSPACE/env.backup" > "$GITHUB_ENV"
- name: Setup direnv for provider
run: direnv export gha >> "$GITHUB_ENV"
- uses: actions/setup-python@v5
with:
python-version: '3.13'
cache: 'pip'
- run: pip install tqdm
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
- name: Fetch kind version from go modules
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
Expand All @@ -95,50 +90,53 @@ jobs:
cluster_name: "${{ env.KIND_NAME }}"
config: ${{ env.GOPATH }}/src/github.com/akash-network/provider/_run/kube/kind-config.yaml
- name: Configure Kind cluster
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider/_run/kube
run: |
KUSTOMIZE_INSTALLS=akash-operator-inventory make -s -C _run/kube kube-cluster-setup-e2e-ci
KUSTOMIZE_INSTALLS=akash-operator-inventory make kube-cluster-setup-e2e-ci
- name: Setup K8S ingress
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider/_run/kube
run: |
make -s -C _run/kube kind-k8s-ip
make kind-k8s-ip
- name: K8S dump config
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider/_run/kube
run: |
kubectl config view
- name: K8S dump cluster info
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider/_run/kube
run: |
kubectl cluster-info
- name: K8S dump running pods
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider/_run/kube
run: |
kubectl get deployments,pods,ingress,svc -A
- name: K8S wait for operator inventory
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider/_run/kube
run: |
make -s -C _run/kube kube-deployment-rollout-operator-inventory
make kube-deployment-rollout-operator-inventory
env:
KUBE_ROLLOUT_TIMEOUT: 360
- name: Run modvendor on akash-api
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
run: cat "$GITHUB_WORKSPACE/env.backup" > "$GITHUB_ENV"
- name: Run E2E Tests
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
run: |
make test-e2e-integration
- name: Print operator inventory logs
if: always()
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider/_run/kube
run: |
kubectl -n akash-services logs -l app.kubernetes.io/part-of=provider,app.kubernetes.io/component=operator,app.kubernetes.io/instance=inventory-service,app.kubernetes.io/name=inventory
- name: Print operator inventory discovery logs
if: always()
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider/_run/kube
run: |
kubectl -n akash-services logs -l app.kubernetes.io/part-of=provider,app.kubernetes.io/component=operator,app.kubernetes.io/instance=inventory-hardware-discovery,app.kubernetes.io/name=inventory
- name: Run K8s Tests
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider/_run/kube
run: |
make test-k8s-integration
- name: Post-Run K8S environment
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider
working-directory: ${{ env.GOPATH }}/src/github.com/akash-network/provider/_run/kube
run: |
kubectl get ns,pods,ingress,svc -A
16 changes: 16 additions & 0 deletions _run/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
AKASH_KEYRING_BACKEND=test
AKASH_GAS_ADJUSTMENT=2
AKASH_CHAIN_ID=local
AKASH_YES=true
AKASH_GAS_PRICES=0.025uakt
AKASH_GAS=auto
AKASH_NODE=http://localhost:26657

AP_HOME=${AKASH_HOME}
AP_KEYRING_BACKEND=${AKASH_KEYRING_BACKEND}
AP_GAS_ADJUSTMENT=${AKASH_GAS_ADJUSTMENT}
AP_CHAIN_ID=${AKASH_CHAIN_ID}
AP_YES=${AKASH_YES}
AP_GAS_PRICES=${AKASH_GAS_PRICES}
AP_GAS=${AKASH_GAS}
AP_NODE=${AKASH_NODE}
2 changes: 0 additions & 2 deletions _run/.envrc
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,3 @@ fi
if ! has tqdm ; then
echo -e "\033[31mtqdm is not installed. https://github.com/tqdm/tqdm"; exit 1
fi

export AKASH_KEYRING_BACKEND=test
6 changes: 6 additions & 0 deletions _run/.envrc_run
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
AP_RUN_NAME=$(basename "$(pwd)")
AP_RUN_DIR="${DEVCACHE_RUN}/${AP_RUN_NAME}"

export AKASH_HOME="${AP_RUN_DIR}/.akash"

dotenv .env
11 changes: 8 additions & 3 deletions _run/common-base.mk
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
include $(abspath $(CURDIR)/../../make/init.mk)

AP_RUN_NAME := $(notdir $(CURDIR))
AP_RUN_DIR := $(DEVCACHE_RUN)/$(AP_RUN_NAME)
ifeq ($(AP_RUN_NAME),)
$(error "AP_RUN_NAME is not set")
endif

ifeq ($(AP_RUN_DIR),)
$(error "AP_RUN_DIR is not set")
endif

ifneq ($(AKASH_HOME),)
ifneq ($(DIRENV_FILE),$(CURDIR)/.envrc)
Expand All @@ -11,7 +16,7 @@ Ensure direnv is installed and hooked to your shell profile. Refer to the docume
")
endif
else
export AKASH_HOME = $(DEVCACHE_RUN)/$(AP_RUN_NAME)/.akash
$(error "AKASH_HOME is not set")
endif

.PHONY: bins
Expand Down
1 change: 1 addition & 0 deletions _run/kube/.envrc
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
source_up .envrc
source_up .envrc_run

export AKASH_HOME=$DEVCACHE_RUN/kube/.akash
7 changes: 6 additions & 1 deletion bidengine/order_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ package bidengine
import (
"context"
"errors"
"os"
"testing"
"time"

sdkclient "github.com/cosmos/cosmos-sdk/client"
tpubsub "github.com/troian/pubsub"

"github.com/akash-network/provider/operator/waiter"
Expand Down Expand Up @@ -95,10 +97,13 @@ func makeMocks(s *orderTestScaffold) {

groupResult.Group.GroupSpec.Resources[0] = resource

homeDir, _ := os.MkdirTemp("", "akash-network-test-*")

queryClientMock := &clientmocks.QueryClient{}
queryClientMock.On("Group", mock.Anything, mock.Anything).Return(groupResult, nil)
queryClientMock.On("Orders", mock.Anything, mock.Anything).Return(&mtypes.QueryOrdersResponse{}, nil)
queryClientMock.On("Provider", mock.Anything, mock.Anything).Return(&ptypes.QueryProviderResponse{}, nil)
queryClientMock.On("ClientContext").Return(sdkclient.Context{HomeDir: homeDir}, nil)

txMocks := &clientmocks.TxClient{}
s.broadcasts = make(chan []sdk.Msg, 1)
Expand Down Expand Up @@ -187,7 +192,7 @@ func makeOrderForTest(

ctx := context.Background()
ctx = context.WithValue(ctx, fromctx.CtxKeyPubSub, tpubsub.New(ctx, 1000))
myService, err := NewService(ctx, mySession, scaffold.cluster, scaffold.testBus, waiter.NewNullWaiter(), cfg)
myService, err := NewService(ctx, scaffold.queryClient, mySession, scaffold.cluster, scaffold.testBus, waiter.NewNullWaiter(), cfg)
require.NoError(t, err)
require.NotNil(t, myService)

Expand Down
Loading

0 comments on commit d98cdd2

Please sign in to comment.