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

feat(api-gateway): Async native query results transformations #8961

Open
wants to merge 128 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
128 commits
Select commit Hold shift + click to select a range
8e8a69f
create a basic cubeorchestrator project structure
KSDaemon Oct 24, 2024
5a89f42
wip
KSDaemon Oct 24, 2024
9db41a0
move flatbuffer schema/code to separate crate
KSDaemon Nov 14, 2024
ebb38a0
implement parse_cubestore_ws_result
KSDaemon Nov 15, 2024
6ecef1e
add cubeorchestrator/parse_cubestore_ws_result_message export
KSDaemon Nov 15, 2024
dcc29ea
use native parseCubestoreResultMessage
KSDaemon Nov 15, 2024
9a9a214
init hashmap with capacity
KSDaemon Nov 15, 2024
7abab9c
cargo fmt
KSDaemon Nov 15, 2024
0693990
some optimizations and improvements
KSDaemon Nov 15, 2024
d6879cd
a bit optimized version
KSDaemon Nov 18, 2024
ab8f85a
use cx.execute_scoped for optimization
KSDaemon Nov 18, 2024
2424c65
a bit more rust idiomatic code
KSDaemon Nov 18, 2024
8ab592e
put native parseCubestoreResultMessage behind the flag
KSDaemon Nov 20, 2024
85ef505
tiny improvement
KSDaemon Nov 21, 2024
de65e18
cargo fmt
KSDaemon Nov 25, 2024
1692bc4
cargo fmt
KSDaemon Nov 25, 2024
e7f564b
cargo clippy fix
KSDaemon Nov 25, 2024
9933459
update cubestore Dockerfile
KSDaemon Nov 25, 2024
7edca8c
cargo fmt
KSDaemon Nov 25, 2024
f2b08d1
update cubestore Docker builds
KSDaemon Nov 25, 2024
10ff7d0
introduce CubeStoreResult struct
KSDaemon Nov 27, 2024
aa5aebd
create CubeStoreResultWrapper class and switch to lazy evaluation of …
KSDaemon Nov 29, 2024
626bd8a
add resToRawResultFn in API GW
KSDaemon Nov 29, 2024
4efb345
cargo fmt
KSDaemon Nov 29, 2024
a5fb65d
update resToResultFn
KSDaemon Nov 29, 2024
583df2c
call prepareAnnotation later
KSDaemon Nov 29, 2024
a50f0e6
remove bytes
KSDaemon Dec 2, 2024
b41f30f
add cached flag to CubeStoreResultWrapper
KSDaemon Dec 2, 2024
15e2cb8
convert core data types from api gateway
KSDaemon Dec 2, 2024
1673b01
implement transformData and related helpers
KSDaemon Dec 2, 2024
47afe85
cargo fmt
KSDaemon Dec 2, 2024
f7230f1
down chrono to same version as in cubesql (0.4.31)
KSDaemon Dec 2, 2024
1dd449d
fail fast in api gw load()
KSDaemon Dec 2, 2024
8d7e403
update cargo.lock (syn crate)
KSDaemon Dec 2, 2024
e50ace5
linter fix
KSDaemon Dec 3, 2024
c95b9a0
implement get_query_granularities & get_pivot_query
KSDaemon Dec 9, 2024
7adb813
prepare transformQueryData native wrapper
KSDaemon Dec 9, 2024
a9c9e7b
small optimization: do not use native parsing for short messages
KSDaemon Dec 10, 2024
e751330
refactor transformValue and related
KSDaemon Dec 10, 2024
e2744c9
types restructure
KSDaemon Dec 10, 2024
8abdb6c
debug and fix native transform_data()
KSDaemon Dec 10, 2024
626a89f
lazy transformData evaluation
KSDaemon Dec 10, 2024
f0b1acf
omplement get_final_cubestore_result & get_final_cubestore_result_mul…
KSDaemon Dec 11, 2024
01859e1
cargo fmt
KSDaemon Dec 11, 2024
43ea91c
cargo clippy fix
KSDaemon Dec 11, 2024
d5f2760
refactor getVanillaRow
KSDaemon Dec 11, 2024
d5f4f1c
implement get_final_cubestore_result_array() native
KSDaemon Dec 11, 2024
29770bf
fix native response flow for sqlApiLoad
KSDaemon Dec 12, 2024
c5a02a8
add postgres with native cubestore results driver tests
KSDaemon Dec 12, 2024
6679d0a
Build native (without Python) in drivers tests
KSDaemon Dec 12, 2024
01cf73b
workaround for native build in testings-drivers
KSDaemon Dec 12, 2024
322c198
small improvements in CubeStoreResultWrapper
KSDaemon Dec 12, 2024
f5ef649
make parse_cubestore_ws_result_message async
KSDaemon Dec 13, 2024
fb3b307
make all native cubestore_result_transform functions async
KSDaemon Dec 13, 2024
71750d5
cargo fmt
KSDaemon Dec 13, 2024
256ac00
refactor results transformations
KSDaemon Dec 16, 2024
9c8adf9
yarn sync
KSDaemon Dec 16, 2024
83b16d8
implement custom deserializer from JS Value to rust
KSDaemon Dec 16, 2024
82d16e8
refactor json_to_array_buffer()
KSDaemon Dec 17, 2024
3f3540e
a bit of refactoring
KSDaemon Dec 17, 2024
76c96dc
code rearrangement
KSDaemon Dec 17, 2024
f6756a0
switch to use DBResponsePrimitive instead of just Strings
KSDaemon Dec 17, 2024
c9f0a6f
refactoring
KSDaemon Dec 17, 2024
2658a93
always use transform data native for all results
KSDaemon Dec 17, 2024
e8e4914
fix dtos for native query processing (thnx unit tests)
KSDaemon Dec 17, 2024
b377e97
cache loadNative
KSDaemon Dec 17, 2024
380da29
remove not needed anymore native.transformQueryData
KSDaemon Dec 17, 2024
9a0230f
add Build native for unit tests in CI
KSDaemon Dec 17, 2024
c4d8bff
refactor serde annotations
KSDaemon Dec 17, 2024
c828005
remove unused
KSDaemon Dec 17, 2024
aaf9b33
annotate native query results processing functions
KSDaemon Dec 17, 2024
a04f1f4
add Build native for unit tests in CI for Debian without pushing
KSDaemon Dec 17, 2024
5e305a3
add few unit tests
KSDaemon Dec 17, 2024
172c526
fix some tests
KSDaemon Dec 17, 2024
189f6b3
attempt to fix native build/test in docker-dev CI
KSDaemon Dec 17, 2024
b0418fd
fix empty result set issue
KSDaemon Dec 17, 2024
473f64f
another fix in datetime parsing
KSDaemon Dec 18, 2024
45b1ca4
another fix in deserialization
KSDaemon Dec 18, 2024
4983d14
another fix in datetime parsing
KSDaemon Dec 18, 2024
8a8dabc
update postgres-native-cubestore-response-full.test.ts.snap
KSDaemon Dec 18, 2024
5e0be30
another fix in deserialization
KSDaemon Dec 18, 2024
f99e804
cargo fmt
KSDaemon Dec 18, 2024
2401a89
another fix in datetime parsing
KSDaemon Dec 18, 2024
240e388
update postgres-native-cubestore-response-full.test.ts.snap
KSDaemon Dec 18, 2024
21f10c8
attempt to fix native build/test in docker-dev CI
KSDaemon Dec 18, 2024
8870e50
add some comments
KSDaemon Dec 18, 2024
751d6e4
edits in result processing when streaming
KSDaemon Dec 18, 2024
dd7f6b8
fix native response processing via websocket
KSDaemon Dec 18, 2024
677e5db
fix yarn lock
KSDaemon Dec 18, 2024
cfb2f45
attempt to fix native build/test in cloud integration tests in CI
KSDaemon Dec 19, 2024
fdaad92
recreated unit tests for transform data in native
KSDaemon Dec 19, 2024
23efa80
run rust unit tests on push
KSDaemon Dec 20, 2024
52d284f
commented out cargo fmt/build/test for cubesql, cubesqlplanner
KSDaemon Dec 20, 2024
8a11727
remove transformdata JS implementation
KSDaemon Dec 20, 2024
2198a63
refactor push CI jobs
KSDaemon Dec 20, 2024
fef607c
rename CubestoreResultWrapper → ResultWrapper
KSDaemon Jan 7, 2025
5c926c0
add isNative flag to ResultWrapper
KSDaemon Jan 7, 2025
d17df33
rename getResultInternal → prepareResultTransformData
KSDaemon Jan 7, 2025
0db0d06
use ResultWrapper for all results
KSDaemon Jan 7, 2025
4224f58
fix getArray in ResultWrapper
KSDaemon Jan 7, 2025
fadc3e9
lint fix
KSDaemon Jan 7, 2025
4e9a540
encapsulate rootResultObject into ResultWrapper
KSDaemon Jan 7, 2025
8b1cbf5
add DataResult interface + implement it in result wrappers
KSDaemon Jan 7, 2025
8e52d69
add isWrapper property to wrappers
KSDaemon Jan 7, 2025
86121a5
transform wrapped result later before returning the response
KSDaemon Jan 7, 2025
3ecc87f
fix lint warn
KSDaemon Jan 8, 2025
5877256
fix async request porcessing
KSDaemon Jan 8, 2025
5145660
some node version fix
KSDaemon Jan 9, 2025
a346d9a
weird yarn.lock change. Wtf?
KSDaemon Jan 9, 2025
4f595d5
full transition of result native-js-native
KSDaemon Jan 9, 2025
ef3e833
fix @cubejs-backend/native version ref
KSDaemon Jan 10, 2025
5d2b95c
refactor ResultWrapper constructor
KSDaemon Jan 10, 2025
52687b3
fix string deserialize in transport
KSDaemon Jan 10, 2025
744c03e
extend DataResult interface
KSDaemon Jan 10, 2025
f5e78e2
support iterative access in ResultWrapper
KSDaemon Jan 10, 2025
ff1a03d
refactor ResultWrapper classes
KSDaemon Jan 10, 2025
8d29729
pass ResultWrapper to native and offload transformData from the event…
KSDaemon Jan 10, 2025
6071647
remove obsolete getFinalQueryResultArray
KSDaemon Jan 10, 2025
b7a398e
fix ws api subscriptionServer results processing
KSDaemon Jan 10, 2025
9f6ee1b
pass SchemaRef to load methods.
KSDaemon Jan 10, 2025
98e4418
trying to fix flaky ws failing tests
KSDaemon Jan 10, 2025
d330d7f
remove cubeorchestrator dependency from cubesql
KSDaemon Jan 13, 2025
5f40798
rewrite all load api calls to return RecordBatch
KSDaemon Jan 13, 2025
1a3680c
fix @cubejs-backend/native version ref after rebase
KSDaemon Jan 13, 2025
26f0889
set prototype of ResultWrapper proxy to class prototype
KSDaemon Jan 14, 2025
96e19ba
fix linter warnings
KSDaemon Jan 14, 2025
4f7b9f9
fix yarn.lock
KSDaemon Jan 14, 2025
73b0bd9
linter fix
KSDaemon Jan 14, 2025
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
18 changes: 18 additions & 0 deletions .github/workflows/cloud.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,15 +59,31 @@ jobs:
matrix:
node-version: [ 20.x ]
db: [ 'athena', 'bigquery', 'snowflake' ]
target: [ "x86_64-unknown-linux-gnu" ]
fail-fast: false

steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: nightly-2024-07-15
# override: true # this is by default on
rustflags: ""
components: rustfmt
target: ${{ matrix.target }}
- name: Install Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install cargo-cp-artifact
run: npm install -g [email protected]
- uses: Swatinem/rust-cache@v2
with:
workspaces: ./packages/cubejs-backend-native
key: native-${{ runner.OS }}-${{ matrix.target }}
shared-key: native-${{ runner.OS }}-${{ matrix.target }}
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> "$GITHUB_OUTPUT"
Expand All @@ -87,6 +103,8 @@ jobs:
run: yarn build
- name: Lerna tsc
run: yarn tsc
- name: Build native (no python)
run: cd packages/cubejs-backend-native && npm run native:build-release
- name: Run Integration tests for ${{ matrix.db }} matrix
timeout-minutes: 30
env:
Expand Down
12 changes: 9 additions & 3 deletions .github/workflows/drivers-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,8 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
workspaces: ./packages/cubejs-backend-native
key: native-${{ runner.OS }}-x86_64-unknown-linux-gnu
shared-key: native-${{ runner.OS }}-x86_64-unknown-linux-gnu
key: native-${{ runner.OS }}-${{ matrix.target }}
shared-key: native-${{ runner.OS }}-${{ matrix.target }}
- name: Build native (fallback)
if: (matrix.python-version == 'fallback')
env:
Expand Down Expand Up @@ -165,7 +165,12 @@ jobs:
uses: actions/download-artifact@v4
with:
name: backend-native
path: packages/cubejs-backend-native/
path: packages/cubejs-backend-native
# current .dockerignore prevents use of native build
- name: Unignore native from .dockerignore
run: |
grep -v -E "packages/cubejs-backend-native/((native)|(index.node))" .dockerignore > .dockerignore.tmp
mv .dockerignore.tmp .dockerignore
- name: Build and push
uses: docker/build-push-action@v6
with:
Expand Down Expand Up @@ -225,6 +230,7 @@ jobs:
- mssql
- mysql
- postgres
- postgres-native-cubestore-response
- redshift
- redshift-export-bucket-s3
- snowflake
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -552,7 +552,7 @@ jobs:
- name: Push to Docker Hub
uses: docker/build-push-action@v6
with:
context: ./rust/cubestore/
context: ./rust/
file: ./rust/cubestore/Dockerfile
platforms: ${{ matrix.platforms }}
build-args: ${{ matrix.build-args }}
Expand Down
110 changes: 95 additions & 15 deletions .github/workflows/push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ on:
- 'packages/**'
- 'rust/cubestore/**'
- 'rust/cubesql/**'
- 'rust/cubenativeutils/**'
- 'rust/cubeorchestrator/**'
- 'rust/cubeshared/**'
- 'rust/cubesqlplanner/**'
- '.eslintrc.js'
- '.prettierrc'
- 'package.json'
Expand All @@ -24,6 +28,10 @@ on:
- 'packages/**'
- 'rust/cubestore/**'
- 'rust/cubesql/**'
- 'rust/cubenativeutils/**'
- 'rust/cubeorchestrator/**'
- 'rust/cubeshared/**'
- 'rust/cubesqlplanner/**'
- '.eslintrc.js'
- '.prettierrc'
- 'package.json'
Expand Down Expand Up @@ -95,14 +103,15 @@ jobs:
command: yarn install --frozen-lockfile
- name: Lerna tsc
run: yarn tsc
- name: Build native (no python)
run: cd packages/cubejs-backend-native && npm run native:build-release
- name: Build client
run: yarn build
- name: Build cubejs-backend-native (with Python)
run: yarn run native:build-release-python
working-directory: ./packages/cubejs-backend-native
env:
PYO3_PYTHON: python${{ matrix.python-version }}

- name: Lerna test
run: yarn lerna run --concurrency 1 --stream --no-prefix unit
# - uses: codecov/codecov-action@v1
Expand All @@ -111,6 +120,21 @@ jobs:
# files: ./packages/*/coverage/clover.xml
# flags: cube-backend
# verbose: true # optional (default = false)
- name: Cargo test cubeorchestrator
run: |
cargo test --manifest-path rust/cubeorchestrator/Cargo.toml -j 1
- name: Cargo test cubenativeutils
run: |
cargo test --manifest-path rust/cubenativeutils/Cargo.toml -j 1
- name: Cargo test cubeshared
run: |
cargo test --manifest-path rust/cubeshared/Cargo.toml -j 1
# - name: Cargo test cubesql
# run: |
# cargo test --manifest-path rust/cubesql/Cargo.toml -j 1
# - name: Cargo test cubesqlplanner
# run: |
# cargo test --manifest-path rust/cubesqlplanner/cubesqlplanner/Cargo.toml -j 1

lint:
runs-on: ubuntu-20.04
Expand Down Expand Up @@ -159,6 +183,21 @@ jobs:
run: yarn lint:npm
- name: Lerna lint
run: yarn lerna run --concurrency 1 lint
- name: Cargo fmt cubeorchestrator
run: |
cargo fmt --manifest-path rust/cubeorchestrator/Cargo.toml -- --check
- name: Cargo fmt cubenativeutils
run: |
cargo fmt --manifest-path rust/cubenativeutils/Cargo.toml -- --check
- name: Cargo fmt cubeshared
run: |
cargo fmt --manifest-path rust/cubeshared/Cargo.toml -- --check
# - name: Cargo fmt cubesql
# run: |
# cargo fmt --manifest-path rust/cubesql/Cargo.toml -- --check
# - name: Cargo fmt cubesqlplanner
# run: |
# cargo fmt --manifest-path rust/cubesqlplanner/cubesqlplanner/Cargo.toml -- --check

build:
runs-on: ubuntu-20.04
Expand Down Expand Up @@ -211,6 +250,21 @@ jobs:
run: yarn lerna run --concurrency 1 build
env:
NODE_OPTIONS: --max_old_space_size=4096
- name: Cargo build cubeorchestrator
run: |
cargo build --manifest-path rust/cubeorchestrator/Cargo.toml -j 4
- name: Cargo build cubenativeutils
run: |
cargo build --manifest-path rust/cubenativeutils/Cargo.toml -j 4
- name: Cargo build cubeshared
run: |
cargo build --manifest-path rust/cubeshared/Cargo.toml -j 4
# - name: Cargo build cubesql
# run: |
# cargo build --manifest-path rust/cubesql/Cargo.toml -j 4
# - name: Cargo build cubesqlplanner
# run: |
# cargo build --manifest-path rust/cubesqlplanner/cubesqlplanner/Cargo.toml -j 4

build-cubestore:
needs: [latest-tag-sha]
Expand Down Expand Up @@ -539,6 +593,8 @@ jobs:
- 5000:5000
strategy:
matrix:
node-version: [ 20 ]
target: [ "x86_64-unknown-linux-gnu" ]
dockerfile:
- dev.Dockerfile
include:
Expand All @@ -565,21 +621,29 @@ jobs:
df -h
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Build image
uses: docker/build-push-action@v6
timeout-minutes: 30
- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
context: .
file: ./packages/cubejs-docker/${{ matrix.dockerfile }}
platforms: linux/amd64
push: true
tags: localhost:5000/cubejs/cube:${{ matrix.tag }}
- name: Use Node.js 20.x
toolchain: nightly-2024-07-15
# override: true # this is by default on
rustflags: ""
components: rustfmt
target: ${{ matrix.target }}
- name: Install Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: 20.x
node-version: ${{ matrix.node-version }}
- name: Install Yarn
run: npm install -g yarn
- name: Set Yarn version
run: yarn policies set-version v1.22.22
- name: Install cargo-cp-artifact
run: npm install -g [email protected]
- uses: Swatinem/rust-cache@v2
with:
workspaces: ./packages/cubejs-backend-native
key: native-${{ runner.OS }}-${{ matrix.target }}
shared-key: native-${{ runner.OS }}-${{ matrix.target }}
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> "$GITHUB_OUTPUT"
Expand All @@ -591,8 +655,6 @@ jobs:
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Set Yarn version
run: yarn policies set-version v1.22.22
- name: Yarn install
uses: nick-fields/retry@v3
env:
Expand All @@ -607,6 +669,24 @@ jobs:
run: yarn build
- name: Lerna tsc
run: yarn tsc
- name: Build native (no python)
run: cd packages/cubejs-backend-native && npm run native:build-release
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
# current .dockerignore prevents use of native build
- name: Unignore native from .dockerignore
run: |
grep -v -E "packages/cubejs-backend-native/((native)|(index.node))" .dockerignore > .dockerignore.tmp
mv .dockerignore.tmp .dockerignore
- name: Build image
uses: docker/build-push-action@v6
timeout-minutes: 30
with:
context: .
file: ./packages/cubejs-docker/${{ matrix.dockerfile }}
platforms: linux/amd64
push: true
tags: localhost:5000/cubejs/cube:${{ matrix.tag }}
- name: Testing CubeJS (container mode) via BirdBox
run: |
cd packages/cubejs-testing/
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/rust-cubestore-master.yml
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ jobs:
- name: Push to Docker Hub
uses: docker/build-push-action@v6
with:
context: ./rust/cubestore
context: ./rust
file: ./rust/cubestore/Dockerfile
platforms: ${{ matrix.platforms }}
build-args: ${{ matrix.build-args }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/rust-cubestore.yml
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ jobs:
- name: Build only
uses: docker/build-push-action@v6
with:
context: ./rust/cubestore/
context: ./rust/
file: ./rust/cubestore/Dockerfile
platforms: ${{ matrix.platforms }}
build-args: ${{ matrix.build-args }}
Expand Down
4 changes: 2 additions & 2 deletions packages/cubejs-api-gateway/src/SubscriptionServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const calcMessageLength = (message: unknown) => Buffer.byteLength(
typeof message === 'string' ? message : JSON.stringify(message)
);

export type WebSocketSendMessageFn = (connectionId: string, message: any) => void;
export type WebSocketSendMessageFn = (connectionId: string, message: any) => Promise<void>;

export class SubscriptionServer {
public constructor(
Expand All @@ -31,7 +31,7 @@ export class SubscriptionServer {
}

public resultFn(connectionId: string, messageId: string, requestId: string | undefined) {
return (message, { status } = { status: 200 }) => {
return async (message, { status } = { status: 200 }) => {
this.apiGateway.log({
type: 'Outgoing network usage',
service: 'api-ws',
Expand Down
Loading
Loading