From d015309ceb35f1fb3492c1f90c0f2377652868dc Mon Sep 17 00:00:00 2001 From: Jen Hamon Date: Thu, 15 Jan 2026 11:56:21 -0500 Subject: [PATCH 1/4] Fix test cleanup --- .cursor/commands/create-improvement.md | 2 +- .env.example | 5 ++++ .github/workflows/cleanup-test-resources.yml | 6 +++-- .github/workflows/pr.yml | 2 +- .gitignore | 6 +++++ .../pinecone/helpers/IndexCleanupUtility.java | 24 +++++++++++++++---- 6 files changed, 36 insertions(+), 9 deletions(-) create mode 100644 .env.example diff --git a/.cursor/commands/create-improvement.md b/.cursor/commands/create-improvement.md index d89e327a..3411a64b 100644 --- a/.cursor/commands/create-improvement.md +++ b/.cursor/commands/create-improvement.md @@ -21,7 +21,7 @@ When the planned code changes are complete, the agent should take the following - Ensure changes are adequately tested 2. **Create Pull Request** - - Create a PR in draft mode + - Create a PR - Rename the PR with a title that follows the Conventional Commits 1.0.0 format - Update the PR description with: - A clear description of the problem and solution diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..27c2330b --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +# Pinecone API Configuration +# Copy this file to .env and fill in your actual API key +# The .env file is gitignored and will not be committed + +PINECONE_API_KEY=your-api-key-here diff --git a/.github/workflows/cleanup-test-resources.yml b/.github/workflows/cleanup-test-resources.yml index 6d405cb5..60df354b 100644 --- a/.github/workflows/cleanup-test-resources.yml +++ b/.github/workflows/cleanup-test-resources.yml @@ -14,7 +14,7 @@ on: age_threshold_days: description: 'Minimum age in days for resources to be deleted' required: false - default: '1' + default: 1 type: number dry_run: description: 'Preview deletions without executing (dry-run mode)' @@ -63,7 +63,9 @@ jobs: echo "Running cleanup with: $ARGS" # Run the cleanup utility - java -cp "build/libs/*:build/classes/java/main" \ + # Use only the shadow JAR (-all.jar) which contains all dependencies + # This avoids classpath conflicts from mixing regular JAR, shadow JAR, and other artifacts + java -cp "build/libs/*-all.jar" \ io.pinecone.helpers.IndexCleanupUtility $ARGS - name: Summary diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 9acfb84c..8113c1c4 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -108,6 +108,6 @@ jobs: continue-on-error: true run: | echo "Running IndexCleanupUtility to clean up test indexes..." - java -cp "build/libs/*" io.pinecone.helpers.IndexCleanupUtility + java -cp "build/libs/*-all.jar" io.pinecone.helpers.IndexCleanupUtility env: PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 018ae61d..70872e65 100644 --- a/.gitignore +++ b/.gitignore @@ -81,4 +81,10 @@ nb-configuration.xml ############################## .DS_Store +############################## +## Environment Variables +############################## +.env +.env.local + gen diff --git a/src/main/java/io/pinecone/helpers/IndexCleanupUtility.java b/src/main/java/io/pinecone/helpers/IndexCleanupUtility.java index def32496..e9ca4dda 100644 --- a/src/main/java/io/pinecone/helpers/IndexCleanupUtility.java +++ b/src/main/java/io/pinecone/helpers/IndexCleanupUtility.java @@ -1,6 +1,7 @@ package io.pinecone.helpers; import io.pinecone.clients.Pinecone; +import okhttp3.OkHttpClient; import org.openapitools.db_control.client.model.CollectionList; import org.openapitools.db_control.client.model.CollectionModel; import org.openapitools.db_control.client.model.IndexList; @@ -8,6 +9,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; /** * Utility for cleaning up Pinecone indexes and collections. @@ -65,7 +67,17 @@ public static void main(String[] args) { System.exit(1); } - Pinecone pinecone = new Pinecone.Builder(apiKey).build(); + // Configure OkHttpClient with longer timeouts for delete operations + // Delete operations can take longer, especially for large indexes + OkHttpClient httpClient = new OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(120, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build(); + + Pinecone pinecone = new Pinecone.Builder(apiKey) + .withOkHttpClient(httpClient) + .build(); IndexCleanupUtility utility = new IndexCleanupUtility( pinecone, parsedArgs.ageThresholdDays, @@ -243,8 +255,9 @@ private boolean cleanupIndex(IndexModel index) throws Exception { pinecone.deleteIndex(indexName); logInfo("Successfully initiated deletion of index: %s", indexName); - // Add small delay to avoid rate limiting - Thread.sleep(1000); + // Add delay to avoid overwhelming the backend + logInfo("Waiting 30 seconds before next deletion..."); + Thread.sleep(30000); return true; } @@ -279,8 +292,9 @@ private boolean cleanupCollection(CollectionModel collection) throws Exception { pinecone.deleteCollection(collectionName); logInfo("Successfully initiated deletion of collection: %s", collectionName); - // Add small delay to avoid rate limiting - Thread.sleep(1000); + // Add delay to avoid overwhelming the backend + logInfo("Waiting 30 seconds before next deletion..."); + Thread.sleep(30000); return true; } From b8099dd71fe8093dbaf9d8a0298202480740d847 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Thu, 15 Jan 2026 17:45:23 +0000 Subject: [PATCH 2/4] Fix classpath glob in cleanup workflows Co-authored-by: jhamon --- .github/workflows/cleanup-test-resources.yml | 2 +- .github/workflows/pr.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cleanup-test-resources.yml b/.github/workflows/cleanup-test-resources.yml index 60df354b..09b940eb 100644 --- a/.github/workflows/cleanup-test-resources.yml +++ b/.github/workflows/cleanup-test-resources.yml @@ -65,7 +65,7 @@ jobs: # Run the cleanup utility # Use only the shadow JAR (-all.jar) which contains all dependencies # This avoids classpath conflicts from mixing regular JAR, shadow JAR, and other artifacts - java -cp "build/libs/*-all.jar" \ + java -cp build/libs/*-all.jar \ io.pinecone.helpers.IndexCleanupUtility $ARGS - name: Summary diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 8113c1c4..6ef70a67 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -108,6 +108,6 @@ jobs: continue-on-error: true run: | echo "Running IndexCleanupUtility to clean up test indexes..." - java -cp "build/libs/*-all.jar" io.pinecone.helpers.IndexCleanupUtility + java -cp build/libs/*-all.jar io.pinecone.helpers.IndexCleanupUtility env: PINECONE_API_KEY: ${{ secrets.PINECONE_API_KEY }} \ No newline at end of file From 0ea5e9c8ff841b7c999063f5dfeef1a157797a75 Mon Sep 17 00:00:00 2001 From: Jen Hamon Date: Fri, 16 Jan 2026 14:22:09 -0500 Subject: [PATCH 3/4] Adjust failing tests --- .../helpers/TestResourcesManager.java | 11 +++++++++ .../CreateDescribeListAndDeleteIndexTest.java | 24 +++++++++++++++---- .../serverless/ReadCapacityAndSchemaTest.java | 2 +- .../dataPlane/UpsertAndSearchRecordsTest.java | 14 ++++++++++- 4 files changed, 45 insertions(+), 6 deletions(-) diff --git a/src/integration/java/io/pinecone/helpers/TestResourcesManager.java b/src/integration/java/io/pinecone/helpers/TestResourcesManager.java index 15ffe7c3..e5d8f029 100644 --- a/src/integration/java/io/pinecone/helpers/TestResourcesManager.java +++ b/src/integration/java/io/pinecone/helpers/TestResourcesManager.java @@ -5,6 +5,7 @@ import io.pinecone.clients.Pinecone; import io.pinecone.exceptions.PineconeException; import io.pinecone.proto.DescribeIndexStatsResponse; +import okhttp3.OkHttpClient; import org.openapitools.db_control.client.model.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -12,6 +13,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.concurrent.TimeUnit; import static io.pinecone.helpers.BuildUpsertRequest.buildRequiredUpsertRequestByDimension; import static io.pinecone.helpers.TestUtilities.*; @@ -74,9 +76,18 @@ public class TestResourcesManager { private TestResourcesManager() { + // Configure OkHttpClient with longer timeouts for index creation operations + // Index creation can take longer, especially for serverless indexes + OkHttpClient httpClient = new OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(120, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build(); + pineconeClient = new Pinecone .Builder(apiKey) .withSourceTag("pinecone_test") + .withOkHttpClient(httpClient) .build(); } diff --git a/src/integration/java/io/pinecone/integration/controlPlane/pod/CreateDescribeListAndDeleteIndexTest.java b/src/integration/java/io/pinecone/integration/controlPlane/pod/CreateDescribeListAndDeleteIndexTest.java index 7b45d252..8b731d20 100644 --- a/src/integration/java/io/pinecone/integration/controlPlane/pod/CreateDescribeListAndDeleteIndexTest.java +++ b/src/integration/java/io/pinecone/integration/controlPlane/pod/CreateDescribeListAndDeleteIndexTest.java @@ -4,19 +4,35 @@ import io.pinecone.exceptions.PineconeBadRequestException; import io.pinecone.helpers.RandomStringBuilder; import io.pinecone.helpers.TestResourcesManager; +import okhttp3.OkHttpClient; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.openapitools.db_control.client.model.*; +import java.util.concurrent.TimeUnit; + import static org.junit.jupiter.api.Assertions.*; public class CreateDescribeListAndDeleteIndexTest { private static final TestResourcesManager indexManager = TestResourcesManager.getInstance(); - private static final Pinecone controlPlaneClient = new Pinecone - .Builder(System.getenv("PINECONE_API_KEY")) - .withSourceTag("pinecone_test") - .build(); + private static final Pinecone controlPlaneClient; + + static { + // Configure OkHttpClient with longer timeouts for index operations + // Index creation and deletion can take longer than default timeouts + OkHttpClient httpClient = new OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(120, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build(); + + controlPlaneClient = new Pinecone + .Builder(System.getenv("PINECONE_API_KEY")) + .withSourceTag("pinecone_test") + .withOkHttpClient(httpClient) + .build(); + } private static String indexName; private static int indexDimension; private static String indexPodType; diff --git a/src/integration/java/io/pinecone/integration/controlPlane/serverless/ReadCapacityAndSchemaTest.java b/src/integration/java/io/pinecone/integration/controlPlane/serverless/ReadCapacityAndSchemaTest.java index 24e8c19a..16399b17 100644 --- a/src/integration/java/io/pinecone/integration/controlPlane/serverless/ReadCapacityAndSchemaTest.java +++ b/src/integration/java/io/pinecone/integration/controlPlane/serverless/ReadCapacityAndSchemaTest.java @@ -64,7 +64,7 @@ public void createServerlessIndexWithDedicatedReadCapacity() throws InterruptedE tags.put("read-capacity", "dedicated"); // Create index with Dedicated read capacity - ScalingConfigManual manual = new ScalingConfigManual().shards(2).replicas(2); + ScalingConfigManual manual = new ScalingConfigManual().shards(1).replicas(1); ReadCapacityDedicatedConfig dedicated = new ReadCapacityDedicatedConfig() .nodeType("t1") .scaling("Manual") diff --git a/src/integration/java/io/pinecone/integration/dataPlane/UpsertAndSearchRecordsTest.java b/src/integration/java/io/pinecone/integration/dataPlane/UpsertAndSearchRecordsTest.java index 2a82b20a..bcad0c11 100644 --- a/src/integration/java/io/pinecone/integration/dataPlane/UpsertAndSearchRecordsTest.java +++ b/src/integration/java/io/pinecone/integration/dataPlane/UpsertAndSearchRecordsTest.java @@ -3,6 +3,7 @@ import io.pinecone.clients.Index; import io.pinecone.clients.Pinecone; import io.pinecone.helpers.RandomStringBuilder; +import okhttp3.OkHttpClient; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openapitools.db_control.client.model.CreateIndexForModelRequestEmbed; @@ -12,11 +13,22 @@ import org.openapitools.db_data.client.model.SearchRecordsResponse; import java.util.*; +import java.util.concurrent.TimeUnit; public class UpsertAndSearchRecordsTest { @Test public void upsertAndSearchRecordsTest() throws ApiException, org.openapitools.db_control.client.ApiException, InterruptedException { - Pinecone pinecone = new Pinecone.Builder(System.getenv("PINECONE_API_KEY")).build(); + // Configure OkHttpClient with longer timeouts for index operations + // Index creation and deletion can take longer than default timeouts + OkHttpClient httpClient = new OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(120, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .build(); + + Pinecone pinecone = new Pinecone.Builder(System.getenv("PINECONE_API_KEY")) + .withOkHttpClient(httpClient) + .build(); String indexName = RandomStringBuilder.build("inf", 8); HashMap fieldMap = new HashMap<>(); fieldMap.put("text", "chunk_text"); From ca731c670571ef6a15d998b723935446c5ff1542 Mon Sep 17 00:00:00 2001 From: Jen Hamon Date: Fri, 16 Jan 2026 16:17:25 -0500 Subject: [PATCH 4/4] Adjust default connection timeouts --- CHANGELOG.md | 2 ++ README.md | 18 ++++++++++---- .../helpers/TestResourcesManager.java | 11 --------- .../controlPlane/pod/ConfigureIndexTest.java | 8 ------- .../CreateDescribeListAndDeleteIndexTest.java | 24 ++++--------------- .../serverless/ReadCapacityAndSchemaTest.java | 7 ------ .../dataPlane/UpsertAndSearchRecordsTest.java | 14 +---------- .../java/io/pinecone/clients/Pinecone.java | 24 ++++++++++++++++++- .../pinecone/helpers/IndexCleanupUtility.java | 14 +---------- 9 files changed, 45 insertions(+), 77 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15580a5b..fa35cb45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ [comment]: <> (When bumping [pc:VERSION_LATEST_RELEASE] create a new entry below) ### Unreleased version +- Improve default HTTP timeout configuration: Set default timeouts to 30s connect, 120s read, and 30s write to accommodate long-running control plane operations like index creation/deletion. Users can still override with custom OkHttpClient if needed. + ### 6.1.0 - Add ResponseMetadataListener for dataplane operation observability diff --git a/README.md b/README.md index 4b07f152..bdf29a6e 100644 --- a/README.md +++ b/README.md @@ -63,9 +63,18 @@ public class InitializeClientExample { } ``` +#### Default HTTP Timeout Configuration + +The Pinecone client uses default HTTP timeouts that are suitable for most operations: +- **Connect timeout**: 30 seconds +- **Read timeout**: 120 seconds (accommodates long-running operations like index creation/deletion) +- **Write timeout**: 30 seconds + +These defaults are designed to handle operations that may take longer than typical HTTP requests, such as creating or deleting indexes which can take 30-120+ seconds. + #### Passing OkHttpClient for control plane operations -If you need to provide a custom `OkHttpClient`, you can do so by using the `withOkHttpClient()` method of the +If you need to provide a custom `OkHttpClient` with different timeout values or other custom configuration, you can do so by using the `withOkHttpClient()` method of the `Pinecone.Builder` class to pass in your `OkHttpClient` object. ```java @@ -74,10 +83,11 @@ import okhttp3.OkHttpClient; public class InitializeClientExample { public static void main(String[] args) { + // Example: Custom timeout configuration for specific use cases OkHttpClient.Builder builder = new OkHttpClient.Builder() - .connectTimeout(10, java.util.concurrent.TimeUnit.SECONDS) - .readTimeout(30, java.util.concurrent.TimeUnit.SECONDS) - .writeTimeout(30, java.util.concurrent.TimeUnit.SECONDS); + .connectTimeout(60, java.util.concurrent.TimeUnit.SECONDS) + .readTimeout(180, java.util.concurrent.TimeUnit.SECONDS) + .writeTimeout(60, java.util.concurrent.TimeUnit.SECONDS); OkHttpClient httpClient = builder.build(); diff --git a/src/integration/java/io/pinecone/helpers/TestResourcesManager.java b/src/integration/java/io/pinecone/helpers/TestResourcesManager.java index e5d8f029..15ffe7c3 100644 --- a/src/integration/java/io/pinecone/helpers/TestResourcesManager.java +++ b/src/integration/java/io/pinecone/helpers/TestResourcesManager.java @@ -5,7 +5,6 @@ import io.pinecone.clients.Pinecone; import io.pinecone.exceptions.PineconeException; import io.pinecone.proto.DescribeIndexStatsResponse; -import okhttp3.OkHttpClient; import org.openapitools.db_control.client.model.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,7 +12,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.concurrent.TimeUnit; import static io.pinecone.helpers.BuildUpsertRequest.buildRequiredUpsertRequestByDimension; import static io.pinecone.helpers.TestUtilities.*; @@ -76,18 +74,9 @@ public class TestResourcesManager { private TestResourcesManager() { - // Configure OkHttpClient with longer timeouts for index creation operations - // Index creation can take longer, especially for serverless indexes - OkHttpClient httpClient = new OkHttpClient.Builder() - .connectTimeout(30, TimeUnit.SECONDS) - .readTimeout(120, TimeUnit.SECONDS) - .writeTimeout(30, TimeUnit.SECONDS) - .build(); - pineconeClient = new Pinecone .Builder(apiKey) .withSourceTag("pinecone_test") - .withOkHttpClient(httpClient) .build(); } diff --git a/src/integration/java/io/pinecone/integration/controlPlane/pod/ConfigureIndexTest.java b/src/integration/java/io/pinecone/integration/controlPlane/pod/ConfigureIndexTest.java index dac812f6..158de0d6 100644 --- a/src/integration/java/io/pinecone/integration/controlPlane/pod/ConfigureIndexTest.java +++ b/src/integration/java/io/pinecone/integration/controlPlane/pod/ConfigureIndexTest.java @@ -5,7 +5,6 @@ import io.pinecone.exceptions.PineconeForbiddenException; import io.pinecone.exceptions.PineconeNotFoundException; import io.pinecone.helpers.TestResourcesManager; -import okhttp3.OkHttpClient; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -14,8 +13,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.concurrent.TimeUnit; - import static io.pinecone.helpers.AssertRetry.assertWithRetry; import static org.junit.jupiter.api.Assertions.*; @@ -25,11 +22,6 @@ public class ConfigureIndexTest { private static final Pinecone controlPlaneClient = new Pinecone .Builder(System.getenv("PINECONE_API_KEY")) .withSourceTag("pinecone_test") - .withOkHttpClient(new OkHttpClient.Builder() - .connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(60, TimeUnit.SECONDS) - .writeTimeout(30, TimeUnit.SECONDS) - .build()) .build(); private static String indexName; diff --git a/src/integration/java/io/pinecone/integration/controlPlane/pod/CreateDescribeListAndDeleteIndexTest.java b/src/integration/java/io/pinecone/integration/controlPlane/pod/CreateDescribeListAndDeleteIndexTest.java index 8b731d20..7b45d252 100644 --- a/src/integration/java/io/pinecone/integration/controlPlane/pod/CreateDescribeListAndDeleteIndexTest.java +++ b/src/integration/java/io/pinecone/integration/controlPlane/pod/CreateDescribeListAndDeleteIndexTest.java @@ -4,35 +4,19 @@ import io.pinecone.exceptions.PineconeBadRequestException; import io.pinecone.helpers.RandomStringBuilder; import io.pinecone.helpers.TestResourcesManager; -import okhttp3.OkHttpClient; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.openapitools.db_control.client.model.*; -import java.util.concurrent.TimeUnit; - import static org.junit.jupiter.api.Assertions.*; public class CreateDescribeListAndDeleteIndexTest { private static final TestResourcesManager indexManager = TestResourcesManager.getInstance(); - private static final Pinecone controlPlaneClient; - - static { - // Configure OkHttpClient with longer timeouts for index operations - // Index creation and deletion can take longer than default timeouts - OkHttpClient httpClient = new OkHttpClient.Builder() - .connectTimeout(30, TimeUnit.SECONDS) - .readTimeout(120, TimeUnit.SECONDS) - .writeTimeout(30, TimeUnit.SECONDS) - .build(); - - controlPlaneClient = new Pinecone - .Builder(System.getenv("PINECONE_API_KEY")) - .withSourceTag("pinecone_test") - .withOkHttpClient(httpClient) - .build(); - } + private static final Pinecone controlPlaneClient = new Pinecone + .Builder(System.getenv("PINECONE_API_KEY")) + .withSourceTag("pinecone_test") + .build(); private static String indexName; private static int indexDimension; private static String indexPodType; diff --git a/src/integration/java/io/pinecone/integration/controlPlane/serverless/ReadCapacityAndSchemaTest.java b/src/integration/java/io/pinecone/integration/controlPlane/serverless/ReadCapacityAndSchemaTest.java index 16399b17..20fc1a72 100644 --- a/src/integration/java/io/pinecone/integration/controlPlane/serverless/ReadCapacityAndSchemaTest.java +++ b/src/integration/java/io/pinecone/integration/controlPlane/serverless/ReadCapacityAndSchemaTest.java @@ -2,14 +2,12 @@ import io.pinecone.clients.Pinecone; import io.pinecone.helpers.RandomStringBuilder; -import okhttp3.OkHttpClient; import org.junit.jupiter.api.*; import org.openapitools.db_control.client.ApiException; import org.openapitools.db_control.client.model.*; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.TimeUnit; import static io.pinecone.helpers.TestUtilities.waitUntilIndexIsReady; import static io.pinecone.helpers.TestUtilities.waitUntilReadCapacityIsReady; @@ -20,11 +18,6 @@ public class ReadCapacityAndSchemaTest { private static final Pinecone controlPlaneClient = new Pinecone .Builder(System.getenv("PINECONE_API_KEY")) .withSourceTag("pinecone_test") - .withOkHttpClient(new OkHttpClient.Builder() - .connectTimeout(30, TimeUnit.SECONDS) - .readTimeout(120, TimeUnit.SECONDS) - .writeTimeout(30, TimeUnit.SECONDS) - .build()) .build(); @Test diff --git a/src/integration/java/io/pinecone/integration/dataPlane/UpsertAndSearchRecordsTest.java b/src/integration/java/io/pinecone/integration/dataPlane/UpsertAndSearchRecordsTest.java index bcad0c11..2a82b20a 100644 --- a/src/integration/java/io/pinecone/integration/dataPlane/UpsertAndSearchRecordsTest.java +++ b/src/integration/java/io/pinecone/integration/dataPlane/UpsertAndSearchRecordsTest.java @@ -3,7 +3,6 @@ import io.pinecone.clients.Index; import io.pinecone.clients.Pinecone; import io.pinecone.helpers.RandomStringBuilder; -import okhttp3.OkHttpClient; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.openapitools.db_control.client.model.CreateIndexForModelRequestEmbed; @@ -13,22 +12,11 @@ import org.openapitools.db_data.client.model.SearchRecordsResponse; import java.util.*; -import java.util.concurrent.TimeUnit; public class UpsertAndSearchRecordsTest { @Test public void upsertAndSearchRecordsTest() throws ApiException, org.openapitools.db_control.client.ApiException, InterruptedException { - // Configure OkHttpClient with longer timeouts for index operations - // Index creation and deletion can take longer than default timeouts - OkHttpClient httpClient = new OkHttpClient.Builder() - .connectTimeout(30, TimeUnit.SECONDS) - .readTimeout(120, TimeUnit.SECONDS) - .writeTimeout(30, TimeUnit.SECONDS) - .build(); - - Pinecone pinecone = new Pinecone.Builder(System.getenv("PINECONE_API_KEY")) - .withOkHttpClient(httpClient) - .build(); + Pinecone pinecone = new Pinecone.Builder(System.getenv("PINECONE_API_KEY")).build(); String indexName = RandomStringBuilder.build("inf", 8); HashMap fieldMap = new HashMap<>(); fieldMap.put("text", "chunk_text"); diff --git a/src/main/java/io/pinecone/clients/Pinecone.java b/src/main/java/io/pinecone/clients/Pinecone.java index 9d7cc082..6147326f 100644 --- a/src/main/java/io/pinecone/clients/Pinecone.java +++ b/src/main/java/io/pinecone/clients/Pinecone.java @@ -17,6 +17,7 @@ import java.util.Arrays; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; /** * The Pinecone class is the main entry point for interacting with Pinecone via the Java SDK. @@ -1798,8 +1799,29 @@ public Pinecone build() { } } + /** + * Builds an OkHttpClient with default timeout configuration suitable for Pinecone operations. + *

+ * Default timeout values: + *

    + *
  • Connect timeout: 30 seconds - sufficient for network connection establishment
  • + *
  • Read timeout: 120 seconds - accommodates long-running control plane operations like index creation/deletion
  • + *
  • Write timeout: 30 seconds - sufficient for request payload transmission
  • + *
+ *

+ * These defaults are designed to handle operations that may take longer than typical HTTP requests, + * such as creating or deleting indexes which can take 30-120+ seconds. For operations requiring + * different timeout values, users can provide a custom OkHttpClient via {@link Builder#withOkHttpClient(OkHttpClient)}. + * + * @param proxyConfig Optional proxy configuration. If provided, the client will route requests through the specified proxy. + * @return A configured OkHttpClient instance with default timeouts suitable for Pinecone operations. + */ static OkHttpClient buildOkHttpClient(ProxyConfig proxyConfig) { - OkHttpClient.Builder builder = new OkHttpClient.Builder(); + OkHttpClient.Builder builder = new OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(120, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS); + if(proxyConfig != null) { Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyConfig.getHost(), proxyConfig.getPort())); builder.proxy(proxy); diff --git a/src/main/java/io/pinecone/helpers/IndexCleanupUtility.java b/src/main/java/io/pinecone/helpers/IndexCleanupUtility.java index e9ca4dda..ca0a42e6 100644 --- a/src/main/java/io/pinecone/helpers/IndexCleanupUtility.java +++ b/src/main/java/io/pinecone/helpers/IndexCleanupUtility.java @@ -1,7 +1,6 @@ package io.pinecone.helpers; import io.pinecone.clients.Pinecone; -import okhttp3.OkHttpClient; import org.openapitools.db_control.client.model.CollectionList; import org.openapitools.db_control.client.model.CollectionModel; import org.openapitools.db_control.client.model.IndexList; @@ -9,7 +8,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.concurrent.TimeUnit; /** * Utility for cleaning up Pinecone indexes and collections. @@ -67,17 +65,7 @@ public static void main(String[] args) { System.exit(1); } - // Configure OkHttpClient with longer timeouts for delete operations - // Delete operations can take longer, especially for large indexes - OkHttpClient httpClient = new OkHttpClient.Builder() - .connectTimeout(30, TimeUnit.SECONDS) - .readTimeout(120, TimeUnit.SECONDS) - .writeTimeout(30, TimeUnit.SECONDS) - .build(); - - Pinecone pinecone = new Pinecone.Builder(apiKey) - .withOkHttpClient(httpClient) - .build(); + Pinecone pinecone = new Pinecone.Builder(apiKey).build(); IndexCleanupUtility utility = new IndexCleanupUtility( pinecone, parsedArgs.ageThresholdDays,