Skip to content

Commit

Permalink
Refactor to improve user-experience and delete support for endpoint c…
Browse files Browse the repository at this point in the history
…onstruction for data plane operations using projectId, env, and indexName (#72)

## Problem

Currently the user has to create multiple config objects before they can
call data plane operations.

## Solution

I have added PineconeConnection() constructor that takes apiKey and
indexName as input parameters, and internally creates the config objects
to provide a connection object directly without having the need to
create the config objects. I have also refactored the classes especially
PineconeConnection class as a part of this PR. Lastly, the endpoint
construction for gRPC calls using projectName, indexName, and
environment is discontinued, and will only use host parameter to get the
endpoint. The host parameter is obtained by calling describeIndex().

Refactored the following:
1. Removed PineconePackageInfo since it wasn't used anywhere
2. Moved PineconeClient, PineconeConnection, PineconeConnectionConfig,
and PineconeClientConfig under configs. I'll eventually like to cut down
all dependencies to PineconeClient class and delete it but currently
some of the test classes do rely on it and we can take care of it in
future PR's. Also I'll like to keep PineconeClient out of clients
package since I don't want users to think that it's one of the top level
clients that will be useful to them.
3. Moved PineconeControlPlaneClient, PineconeBlockingDataPlaneClient,
and PineconeFutureDataPlaneClient under clients package.
4. Removed ServerSideTimeout field from PineconeClientConfig since the
values were not set correctly.

## Type of Change

- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] This change requires a documentation update
- [ ] Infrastructure change (CI configs, etc)
- [ ] Non-code change (docs, etc)
- [X] None of the above: (explain here)
Refactored existing codebase so no new functionalities were added. 

## Test Plan

Describe specific steps for validating this change.
  • Loading branch information
rohanshah18 authored Mar 5, 2024
1 parent 31036f0 commit 5d087cc
Show file tree
Hide file tree
Showing 19 changed files with 84 additions and 126 deletions.
18 changes: 7 additions & 11 deletions src/integration/java/io/pinecone/helpers/IndexManager.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package io.pinecone.helpers;

import io.pinecone.*;
import io.pinecone.clients.PineconeControlPlaneClient;
import io.pinecone.configs.PineconeClient;
import io.pinecone.configs.PineconeClientConfig;
import io.pinecone.configs.PineconeConnection;
import io.pinecone.configs.PineconeConnectionConfig;
import io.pinecone.exceptions.PineconeException;
import org.openapitools.client.model.*;
import org.slf4j.Logger;
Expand All @@ -14,13 +18,10 @@
import static org.junit.jupiter.api.Assertions.fail;

public class IndexManager {
private static PineconeClientConfig config;
private static final Logger logger = LoggerFactory.getLogger(IndexManager.class);

public static PineconeConnection createIndexIfNotExistsDataPlane(int dimension, String indexType) throws IOException, InterruptedException {
String apiKey = System.getenv("PINECONE_API_KEY");
String environment = System.getenv("PINECONE_ENVIRONMENT");
config = new PineconeClientConfig().withApiKey(apiKey).withEnvironment(environment);
PineconeControlPlaneClient controlPlaneClient = new PineconeControlPlaneClient(apiKey);
IndexList indexList = controlPlaneClient.listIndexes();

Expand All @@ -29,13 +30,7 @@ public static PineconeConnection createIndexIfNotExistsDataPlane(int dimension,

// Do not proceed until the newly created index is ready
isIndexReady(indexName, controlPlaneClient);
// ToDo: Update the constructor by removing dependency on PineconeClientConfig
PineconeClient dataPlaneClient = new PineconeClient(config);
String host = controlPlaneClient.describeIndex(indexName).getHost();

return dataPlaneClient.connect(
new PineconeConnectionConfig()
.withConnectionUrl("https://" + host));
return new PineconeConnection(apiKey, indexName);
}

public static String createIndexIfNotExistsControlPlane(PineconeControlPlaneClient controlPlaneClient, int dimension, String indexType) throws IOException, InterruptedException {
Expand Down Expand Up @@ -113,6 +108,7 @@ public static IndexModel waitUntilIndexIsReady(PineconeControlPlaneClient contro
}

public static PineconeConnection createNewIndexAndConnect(PineconeControlPlaneClient controlPlaneClient, String indexName, int dimension, IndexMetric metric, CreateIndexRequestSpec spec) throws InterruptedException, PineconeException {
String apiKey = System.getenv("PINECONE_API_KEY");
CreateIndexRequest createIndexRequest = new CreateIndexRequest().name(indexName).dimension(dimension).metric(metric).spec(spec);
controlPlaneClient.createIndex(createIndexRequest);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package io.pinecone.integration.controlPlane.pod;

import io.pinecone.PineconeConnection;
import io.pinecone.PineconeControlPlaneClient;
import io.pinecone.configs.PineconeConnection;
import io.pinecone.clients.PineconeControlPlaneClient;
import io.pinecone.exceptions.PineconeException;
import io.pinecone.helpers.RandomStringBuilder;
import io.pinecone.proto.VectorServiceGrpc;
import org.junit.Ignore;
import org.openapitools.client.model.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package io.pinecone.integration.controlPlane.pod;

import io.pinecone.*;
import io.pinecone.clients.PineconeControlPlaneClient;
import io.pinecone.configs.PineconeClient;
import io.pinecone.configs.PineconeClientConfig;
import io.pinecone.configs.PineconeConnection;
import io.pinecone.configs.PineconeConnectionConfig;
import io.pinecone.helpers.RandomStringBuilder;
import io.pinecone.proto.*;
import org.junit.Ignore;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -195,5 +198,4 @@ public void testIndexFromDifferentMetricCollection() throws InterruptedException

dataPlaneConnection.close();
}

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package io.pinecone.integration.controlPlane.pod;

import io.pinecone.PineconeControlPlaneClient;
import io.pinecone.clients.PineconeControlPlaneClient;
import io.pinecone.exceptions.PineconeException;
import io.pinecone.exceptions.PineconeForbiddenException;
import io.pinecone.exceptions.PineconeBadRequestException;
import io.pinecone.exceptions.PineconeNotFoundException;
import org.junit.Ignore;
import org.junit.jupiter.api.*;
import org.openapitools.client.model.*;
import org.slf4j.Logger;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.pinecone.integration.controlPlane.pod;

import io.pinecone.PineconeControlPlaneClient;
import io.pinecone.clients.PineconeControlPlaneClient;
import io.pinecone.helpers.RandomStringBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.pinecone.integration.controlPlane.serverless;

import io.pinecone.PineconeControlPlaneClient;
import io.pinecone.clients.PineconeControlPlaneClient;
import io.pinecone.helpers.RandomStringBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package io.pinecone.integration.dataPlane;

import io.grpc.StatusRuntimeException;
import io.pinecone.PineconeBlockingDataPlaneClient;
import io.pinecone.PineconeConnection;
import io.pinecone.PineconeFutureDataPlaneClient;
import io.pinecone.clients.PineconeBlockingDataPlaneClient;
import io.pinecone.configs.PineconeConnection;
import io.pinecone.clients.PineconeFutureDataPlaneClient;
import io.pinecone.exceptions.PineconeValidationException;
import io.pinecone.helpers.RandomStringBuilder;
import io.pinecone.proto.*;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import io.grpc.StatusRuntimeException;
import io.pinecone.PineconeConnection;
import io.pinecone.PineconeBlockingDataPlaneClient;
import io.pinecone.PineconeFutureDataPlaneClient;
import io.pinecone.configs.PineconeConnection;
import io.pinecone.clients.PineconeBlockingDataPlaneClient;
import io.pinecone.clients.PineconeFutureDataPlaneClient;
import io.pinecone.exceptions.PineconeException;
import io.pinecone.exceptions.PineconeValidationException;
import io.pinecone.helpers.RandomStringBuilder;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package io.pinecone.integration.dataPlane;

import com.google.protobuf.Struct;
import io.pinecone.*;
import io.pinecone.clients.PineconeBlockingDataPlaneClient;
import io.pinecone.clients.PineconeFutureDataPlaneClient;
import io.pinecone.configs.PineconeConnection;
import io.pinecone.exceptions.PineconeValidationException;
import io.pinecone.helpers.RandomStringBuilder;
import io.pinecone.proto.*;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import io.pinecone.PineconeConnection;
import io.pinecone.PineconeBlockingDataPlaneClient;
import io.pinecone.PineconeFutureDataPlaneClient;
import io.pinecone.configs.PineconeConnection;
import io.pinecone.clients.PineconeBlockingDataPlaneClient;
import io.pinecone.clients.PineconeFutureDataPlaneClient;
import io.pinecone.helpers.RandomStringBuilder;
import io.pinecone.proto.*;
import org.junit.jupiter.api.AfterAll;
Expand Down
21 changes: 0 additions & 21 deletions src/main/java/io/pinecone/PineconePackageInfo.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.pinecone;
package io.pinecone.clients;

import com.google.protobuf.Struct;
import io.pinecone.exceptions.PineconeValidationException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.pinecone;
package io.pinecone.clients;

import io.pinecone.exceptions.FailedRequestInfo;
import io.pinecone.exceptions.HttpErrorMapper;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.pinecone;
package io.pinecone.clients;

import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.pinecone;
package io.pinecone.configs;

import io.pinecone.exceptions.PineconeValidationException;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.pinecone;
package io.pinecone.configs;

import io.pinecone.exceptions.PineconeValidationException;

Expand All @@ -23,11 +23,6 @@ public class PineconeClientConfig {

private String environment;

/**
* Optional server-side timeout in seconds for all operations. Default: 20 seconds.
*/
private int serverSideTimeoutSec = 20;

private String usageContext;
/**
* Creates a new default config.
Expand All @@ -39,7 +34,6 @@ protected PineconeClientConfig(PineconeClientConfig other) {
apiKey = other.apiKey;
projectName = other.projectName;
environment = other.environment;
serverSideTimeoutSec = other.serverSideTimeoutSec;
usageContext = other.usageContext;
}

Expand Down Expand Up @@ -82,22 +76,6 @@ public PineconeClientConfig withEnvironment(String environment) {
return config;
}

/**
* @return See {@link PineconeClientConfig#serverSideTimeoutSec}.
*/
public int getServerSideTimeoutSec() {
return serverSideTimeoutSec;
}

/**
* @return A copy of this object with a new value for {@link PineconeClientConfig#serverSideTimeoutSec}.
*/
public PineconeClientConfig withServerSideTimeoutSec(int serverSideTimeout) {
PineconeClientConfig config = new PineconeClientConfig(this);
config.serverSideTimeoutSec = serverSideTimeout;
return config;
}

public String getUsageContext() {
return usageContext;
}
Expand All @@ -119,7 +97,6 @@ public String toString() {
+ "apiKey=" + maskedApiKey()
+ ", projectName=" + projectName
+ ", environment=" + environment
+ ", serverSideTimeoutSec=" + getServerSideTimeoutSec()
+ ")";
}

Expand Down
Loading

0 comments on commit 5d087cc

Please sign in to comment.