Skip to content

Add retries to configureIndex and update operations #318

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

Merged
merged 12 commits into from
Dec 23, 2024
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
368 changes: 184 additions & 184 deletions .github/workflows/testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,190 +26,190 @@ jobs:
SERVERLESS_INDEX_NAME=$(npx ts-node ./src/integration/setup.ts | grep "SERVERLESS_INDEX_NAME=" | cut -d'=' -f2)
echo "SERVERLESS_INDEX_NAME=$SERVERLESS_INDEX_NAME" >> $GITHUB_OUTPUT

unit-tests:
needs: setup
name: Run unit tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup
uses: ./.github/actions/setup

- name: Run tests
env:
CI: true
run: npm run test:unit -- --coverage

integration-tests:
needs: setup
name: Run integration tests
runs-on: ubuntu-latest
outputs:
serverlessIndexName: ${{ steps.runTests1.outputs.SERVERLESS_INDEX_NAME }}
strategy:
fail-fast: false
max-parallel: 2
matrix:
pinecone_env:
- prod
# - staging
node_version: [18.x, 20.x]
config:
[
{ runner: 'npm', jest_env: 'node' },
{ runner: 'npm', jest_env: 'edge' },
{ runner: 'bun', jest_env: 'node', bun_version: '1.0.0' },
{ runner: 'bun', jest_env: 'node', bun_version: '1.0.36' },
{ runner: 'bun', jest_env: 'node', bun_version: '1.1.11' },
]

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup
uses: ./.github/actions/setup
with:
node_version: ${{ matrix.node_version }}

- name: Setup bun
if: matrix.config.bun_version
uses: oven-sh/setup-bun@v1
with:
bun-version: ${{ matrix.config.bun_version }}

- name: Run integration tests (Prod)
id: runTests1
if: matrix.pinecone_env == 'prod'
env:
CI: true
PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }}
SERVERLESS_INDEX_NAME: ${{ needs.setup.outputs.serverlessIndexName}}
run: |
${{ matrix.config.runner }} run test:integration:${{ matrix.config.jest_env }}
echo "SERVERLESS_INDEX_NAME=${{ needs.setup.outputs.serverlessIndexName}}" >> $GITHUB_OUTPUT

- name: Run integration tests (Staging)
if: matrix.pinecone_env == 'staging'
env:
CI: true
PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }}
PINECONE_CONTROLLER_HOST: 'https://api-staging.pinecone.io'
run: ${{ matrix.config.runner }} run test:integration:${{ matrix.config.jest_env }}

teardown:
name: Teardown
needs: integration-tests # Ensure teardown only runs after test jobs
runs-on: ubuntu-latest
if: always() # Run teardown even if the tests fail
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install dependencies
run: npm ci

- name: Run teardown script
env:
PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }}
SERVERLESS_INDEX_NAME: ${{ needs.integration-tests.outputs.serverlessIndexName}}
run: |
npx ts-node ./src/integration/teardown.ts

typescript-compilation-tests:
name: TS compile
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
tsVersion:
[
'~4.1.0',
'~4.2.0',
'~4.3.0',
'~4.4.0',
'~4.5.0',
'~4.6.0',
'~4.7.0',
'~4.8.0',
'~4.9.0',
'~5.0.0',
'~5.1.0',
'~5.2.0',
'latest',
]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18.x
registry-url: 'https://registry.npmjs.org'
- name: Install npm packages
run: |
npm install --ignore-scripts
shell: bash
- name: Build TypeScript for Pinecone
run: npm run build
shell: bash
- name: install, compile, and run sample app
shell: bash
env:
PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }}
run: |
set -x
cd ..
cp -r pinecone-ts-client/ts-compilation-test ts-compilation-test
cd ts-compilation-test
npm install typescript@${{ matrix.tsVersion }} --no-cache
npm install '../pinecone-ts-client' --no-cache
cat package.json
cat package-lock.json
npm run tsc-version
npm run build
npm run start

example-app-semantic-search:
name: 'Example app: semantic search'
runs-on: ubuntu-latest
steps:
- name: Checkout pinecone-ts-client
uses: actions/checkout@v4
with:
path: pinecone-ts-client
- name: Checkout semantic-search-example
uses: actions/checkout@v4
with:
repository: pinecone-io/semantic-search-example
ref: spruce
path: semantic-search-example
- name: Install and build client
shell: bash
run: |
cd pinecone-ts-client
npm install --ignore-scripts
npm run build
- name: Install and build sample app
shell: bash
run: |
cd semantic-search-example
npm install --no-cache
npm install '../pinecone-ts-client'
cat package.json
- name: Run example tests with dev version of client
env:
CI: true
PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }}
PINECONE_INDEX: 'semantic-search'
PINECONE_CLOUD: 'aws'
PINECONE_REGION: 'us-west-2'
shell: bash
run: |
cd semantic-search-example
npm run test
unit-tests:
needs: setup
name: Run unit tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup
uses: ./.github/actions/setup

- name: Run tests
env:
CI: true
run: npm run test:unit -- --coverage

integration-tests:
needs: setup
name: Run integration tests
runs-on: ubuntu-latest
outputs:
serverlessIndexName: ${{ steps.runTests1.outputs.SERVERLESS_INDEX_NAME }}
strategy:
fail-fast: false
max-parallel: 2
matrix:
pinecone_env:
- prod
# - staging
node_version: [18.x, 20.x]
config:
[
{ runner: 'npm', jest_env: 'node' },
{ runner: 'npm', jest_env: 'edge' },
{ runner: 'bun', jest_env: 'node', bun_version: '1.0.0' },
{ runner: 'bun', jest_env: 'node', bun_version: '1.0.36' },
{ runner: 'bun', jest_env: 'node', bun_version: '1.1.11' },
]

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup
uses: ./.github/actions/setup
with:
node_version: ${{ matrix.node_version }}

- name: Setup bun
if: matrix.config.bun_version
uses: oven-sh/setup-bun@v1
with:
bun-version: ${{ matrix.config.bun_version }}

- name: Run integration tests (Prod)
id: runTests1
if: matrix.pinecone_env == 'prod'
env:
CI: true
PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }}
SERVERLESS_INDEX_NAME: ${{ needs.setup.outputs.serverlessIndexName}}
run: |
${{ matrix.config.runner }} run test:integration:${{ matrix.config.jest_env }}
echo "SERVERLESS_INDEX_NAME=${{ needs.setup.outputs.serverlessIndexName}}" >> $GITHUB_OUTPUT

- name: Run integration tests (Staging)
if: matrix.pinecone_env == 'staging'
env:
CI: true
PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }}
PINECONE_CONTROLLER_HOST: 'https://api-staging.pinecone.io'
run: ${{ matrix.config.runner }} run test:integration:${{ matrix.config.jest_env }}

teardown:
name: Teardown
needs: integration-tests # Ensure teardown only runs after test jobs
runs-on: ubuntu-latest
if: always() # Run teardown even if the tests fail
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install dependencies
run: npm ci

- name: Run teardown script
env:
PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }}
SERVERLESS_INDEX_NAME: ${{ needs.integration-tests.outputs.serverlessIndexName}}
run: |
npx ts-node ./src/integration/teardown.ts

typescript-compilation-tests:
name: TS compile
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
tsVersion:
[
'~4.1.0',
'~4.2.0',
'~4.3.0',
'~4.4.0',
'~4.5.0',
'~4.6.0',
'~4.7.0',
'~4.8.0',
'~4.9.0',
'~5.0.0',
'~5.1.0',
'~5.2.0',
'latest',
]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18.x
registry-url: 'https://registry.npmjs.org'
- name: Install npm packages
run: |
npm install --ignore-scripts
shell: bash
- name: Build TypeScript for Pinecone
run: npm run build
shell: bash
- name: install, compile, and run sample app
shell: bash
env:
PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }}
run: |
set -x
cd ..
cp -r pinecone-ts-client/ts-compilation-test ts-compilation-test
cd ts-compilation-test
npm install typescript@${{ matrix.tsVersion }} --no-cache
npm install '../pinecone-ts-client' --no-cache
cat package.json
cat package-lock.json
npm run tsc-version
npm run build
npm run start

example-app-semantic-search:
name: 'Example app: semantic search'
runs-on: ubuntu-latest
steps:
- name: Checkout pinecone-ts-client
uses: actions/checkout@v4
with:
path: pinecone-ts-client
- name: Checkout semantic-search-example
uses: actions/checkout@v4
with:
repository: pinecone-io/semantic-search-example
ref: spruce
path: semantic-search-example
- name: Install and build client
shell: bash
run: |
cd pinecone-ts-client
npm install --ignore-scripts
npm run build
- name: Install and build sample app
shell: bash
run: |
cd semantic-search-example
npm install --no-cache
npm install '../pinecone-ts-client'
cat package.json
- name: Run example tests with dev version of client
env:
CI: true
PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }}
PINECONE_INDEX: 'semantic-search'
PINECONE_CLOUD: 'aws'
PINECONE_REGION: 'us-west-2'
shell: bash
run: |
cd semantic-search-example
npm run test

external-app:
name: external-app
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ const pc = new Pinecone();

If you prefer to pass configuration in code, the constructor accepts a config object containing the `apiKey` value.
This is the object in which you would pass properties like `maxRetries` (defaults to `3`) for retryable operations
(e.g. `upsert`).
(`upsert`, `update`, and `configureIndex`).

```typescript
import { Pinecone } from '@pinecone-database/pinecone';
Expand Down
Loading
Loading