-
Notifications
You must be signed in to change notification settings - Fork 10
Updated object store with Filtering and Pagination #287
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
Changes from all commits
3ebee57
6c21044
b10aa57
f1dc350
ddcdf31
e838560
6a3bdaa
81f49d8
091c95f
b09be4d
1065b9d
0f24551
9529563
7b276c3
272b144
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,111 @@ | ||
| package org.hypertrace.config.objectstore; | ||
|
|
||
| import io.grpc.Status; | ||
| import java.util.List; | ||
| import java.util.Optional; | ||
| import java.util.stream.Collectors; | ||
| import javax.annotation.Nullable; | ||
| import org.hypertrace.config.service.change.event.api.ConfigChangeEventGenerator; | ||
| import org.hypertrace.config.service.v1.ConfigServiceGrpc; | ||
| import org.hypertrace.config.service.v1.Filter; | ||
| import org.hypertrace.config.service.v1.GetAllConfigsRequest; | ||
| import org.hypertrace.config.service.v1.Pagination; | ||
| import org.hypertrace.config.service.v1.SortBy; | ||
| import org.hypertrace.core.grpcutils.context.RequestContext; | ||
|
|
||
| public abstract class IdentifiedFilterPushedDownObjectStore<T, F, S> | ||
| extends IdentifiedObjectStore<T> { | ||
|
|
||
| private final ConfigServiceGrpc.ConfigServiceBlockingStub configServiceBlockingStub; | ||
| private final String resourceNamespace; | ||
| private final String resourceName; | ||
|
|
||
| protected IdentifiedFilterPushedDownObjectStore( | ||
| ConfigServiceGrpc.ConfigServiceBlockingStub configServiceBlockingStub, | ||
| String resourceNamespace, | ||
| String resourceName, | ||
| ConfigChangeEventGenerator configChangeEventGenerator, | ||
| ClientConfig clientConfig) { | ||
| super( | ||
|
Check warning on line 29 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| configServiceBlockingStub, | ||
| resourceNamespace, | ||
| resourceName, | ||
| configChangeEventGenerator, | ||
| clientConfig); | ||
| this.configServiceBlockingStub = configServiceBlockingStub; | ||
| this.resourceNamespace = resourceNamespace; | ||
| this.resourceName = resourceName; | ||
| } | ||
|
Check warning on line 38 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
|
|
||
| public List<ContextualConfigObject<T>> getMatchingObjects( | ||
| RequestContext context, F filterInput, List<S> sortInput, @Nullable Pagination pagination) { | ||
| Filter filter = buildFilter(filterInput); | ||
| List<SortBy> sortByList = sortInput.stream().map(this::buildSort).collect(Collectors.toList()); | ||
| return getMatchingObjects(context, filter, sortByList, pagination); | ||
|
Check warning on line 44 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| } | ||
|
|
||
| public List<ContextualConfigObject<T>> getMatchingObjects( | ||
| RequestContext context, F filterInput, List<S> sortInput) { | ||
| return getMatchingObjects(context, filterInput, sortInput, null); | ||
|
Check warning on line 49 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| } | ||
|
|
||
| public List<T> getMatchingData( | ||
| RequestContext context, F filterInput, List<S> sortInput, @Nullable Pagination pagination) { | ||
| return getMatchingObjects(context, filterInput, sortInput, pagination).stream() | ||
| .map(ConfigObject::getData) | ||
| .collect(Collectors.toUnmodifiableList()); | ||
|
Check warning on line 56 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| } | ||
|
|
||
| public Optional<ContextualConfigObject<T>> getMatchingObject( | ||
| RequestContext context, F filterInput, List<S> sortInput) { | ||
| List<ContextualConfigObject<T>> results = getMatchingObjects(context, filterInput, sortInput); | ||
|
Check warning on line 61 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| if (results.size() > 1) { | ||
| throw Status.FAILED_PRECONDITION | ||
| .withDescription("Multiple objects found when expecting at most one") | ||
| .asRuntimeException(); | ||
|
Check warning on line 65 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| } | ||
| return results.stream().findFirst(); | ||
|
Check warning on line 67 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| } | ||
|
|
||
| public Optional<T> getMatchingData(RequestContext context, F filterInput, List<S> sortInput) { | ||
| return getMatchingObject(context, filterInput, sortInput).map(ConfigObject::getData); | ||
|
Check warning on line 71 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| } | ||
|
|
||
| List<ContextualConfigObject<T>> getMatchingObjects( | ||
| RequestContext context, Filter filter, List<SortBy> sortByList, Pagination pagination) { | ||
| return context | ||
| .call( | ||
|
Check warning on line 77 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| () -> | ||
| this.configServiceBlockingStub | ||
| .withDeadline(getDeadline()) | ||
| .getAllConfigs(buildGetAllConfigsRequest(filter, sortByList, pagination))) | ||
| .getContextSpecificConfigsList() | ||
| .stream() | ||
| .map( | ||
|
Check warning on line 84 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| contextSpecificConfig -> | ||
| ContextualConfigObjectImpl.tryBuild( | ||
|
Check warning on line 86 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| contextSpecificConfig, this::buildDataFromValue)) | ||
| .flatMap(Optional::stream) | ||
| .collect( | ||
| Collectors.collectingAndThen( | ||
| Collectors.toUnmodifiableList(), this::orderFetchedObjects)); | ||
|
Check warning on line 91 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| } | ||
|
|
||
| private GetAllConfigsRequest buildGetAllConfigsRequest( | ||
| Filter filter, List<SortBy> sortByList, Pagination pagination) { | ||
| GetAllConfigsRequest.Builder getAllConfigsRequest = | ||
| GetAllConfigsRequest.newBuilder() | ||
| .setResourceName(this.resourceName) | ||
| .setResourceNamespace(this.resourceNamespace) | ||
| .setFilter(filter) | ||
| .addAllSortBy(sortByList); | ||
|
Check warning on line 101 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| if (pagination != null) { | ||
| getAllConfigsRequest.setPagination(pagination); | ||
|
Check warning on line 103 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| } | ||
| return getAllConfigsRequest.build(); | ||
|
Check warning on line 105 in config-object-store/src/main/java/org/hypertrace/config/objectstore/IdentifiedFilterPushedDownObjectStore.java
|
||
| } | ||
|
|
||
| protected abstract SortBy buildSort(S sortInput); | ||
|
|
||
| protected abstract Filter buildFilter(F filterInput); | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.