Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
88bb83e
Cleaning up code
ldecheverz-split Oct 20, 2021
3c33207
Merge pull request #267 from splitio/cleaning-logs
ldecheverz-split Oct 20, 2021
32dfa91
Fixing Imports
ldecheverz-split Oct 27, 2021
c4e98b9
Fixing keys
ldecheverz-split Oct 27, 2021
ab8aa95
Fixing Keys
ldecheverz-split Oct 27, 2021
166cde9
Adding new modules
ldecheverz-split Oct 27, 2021
18289b3
Creating redis branch
ldecheverz-split Oct 27, 2021
59aab25
Changing RedisImp Constructor
ldecheverz-split Oct 27, 2021
0517367
Merge pull request #268 from splitio/adding-redis-modules
ldecheverz-split Oct 27, 2021
644e0ac
Redis wrapper Implementation and tests.
sanzmauro Oct 27, 2021
04b422d
Fix on telemetry and test.
ldecheverz-split Oct 27, 2021
63c48c8
Changing JedisPool instantiation and some changes on methods calls
ldecheverz-split Oct 28, 2021
d6a730c
Adding Builder for RedisInstance
ldecheverz-split Oct 28, 2021
07e85b3
Fixing SplitConsumerAdapter
ldecheverz-split Oct 29, 2021
ec2c5b2
Merge pull request #269 from splitio/redis-fix-on-split-consumer
ldecheverz-split Oct 29, 2021
35f2b40
Merge pull request #270 from splitio/redis
ldecheverz-split Oct 29, 2021
1746cb1
Releasing 4.4.0-beta
ldecheverz-split Oct 29, 2021
dc594a1
Merge pull request #271 from splitio/release-4.4.0-beta
ldecheverz-split Oct 29, 2021
2f16b81
redis-ci
mredolatti Oct 29, 2021
03a7dea
remove unnecessary chars
mredolatti Oct 29, 2021
2121684
Merge pull request #273 from splitio/redis_ci
mredolatti Oct 29, 2021
2909517
fix space
mredolatti Oct 29, 2021
549c546
Merge pull request #274 from splitio/redis_ci
ldecheverz-split Oct 29, 2021
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
5 changes: 5 additions & 0 deletions .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ jobs:
maven-install:
name: Build
runs-on: ubuntu-latest
services:
redis:
image: redis
ports:
- 6379:6379
steps:
- name: Checkout code
uses: actions/checkout@v2
Expand Down
3 changes: 3 additions & 0 deletions client/CHANGES.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
4.4.0 (Oct 29, 2021)
- Added support for Redis to keep consistency across multiple SDK instances.

4.3.0 (Oct 19, 2021)
- Added support for the SDK to run with a custom implementation of it's internal storage modules, enabling customers to implement this caching in any storage technology of choice and connect it to the SDK instance itself which will use it instead of the in-memory structures.
- Fixed a possible OOM when there were too many Streaming events being captured, applying the expected limit of 20.
Expand Down
13 changes: 12 additions & 1 deletion client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,17 @@
<parent>
<groupId>io.split.client</groupId>
<artifactId>java-client-parent</artifactId>
<version>4.3.0</version>
<version>4.4.0-beta</version>
</parent>
<artifactId>java-client</artifactId>
<packaging>jar</packaging>
<name>Java Client</name>
<description>Java SDK for Split</description>

<properties>
<pluggable.storage>1.0.0-beta</pluggable.storage>
</properties>

<build>
<plugins>
<plugin>
Expand Down Expand Up @@ -118,6 +123,12 @@
</resources>
</build>
<dependencies>
<dependency>
<groupId>io.split.client</groupId>
<artifactId>pluggable-storage</artifactId>
<version>${pluggable.storage}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
import io.split.integrations.IntegrationsConfig;
import io.split.storages.enums.OperationMode;
import io.split.storages.enums.StorageMode;
import io.split.storages.pluggable.CustomStorageWrapper;
import org.apache.hc.core5.http.HttpHost;
import pluggable.CustomStorageWrapper;

import java.io.IOException;
import java.util.Properties;
Expand Down
13 changes: 4 additions & 9 deletions client/src/main/java/io/split/client/SplitFactoryBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,13 @@ public static SplitFactory build(String apiToken) throws IOException, URISyntaxE
*/
public static synchronized SplitFactory build(String apiToken, SplitClientConfig config) throws IOException, URISyntaxException {
ApiKeyValidator.validate(apiToken);

if (LocalhostSplitFactory.LOCALHOST.equals(apiToken)) {
return LocalhostSplitFactory.createLocalhostSplitFactory(config);
} else {
if (StorageMode.PLUGGABLE.equals(config.storageMode())){
return new SplitFactoryImpl(apiToken, config, config.customStorageWrapper());
}
else {
return new SplitFactoryImpl(apiToken, config);
}

}
if (StorageMode.PLUGGABLE.equals(config.storageMode())){
return new SplitFactoryImpl(apiToken, config, config.customStorageWrapper());
}
return new SplitFactoryImpl(apiToken, config);
}

/**
Expand Down
28 changes: 12 additions & 16 deletions client/src/main/java/io/split/client/SplitFactoryImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,37 +18,33 @@
import io.split.client.interceptors.GzipEncoderRequestInterceptor;
import io.split.client.interceptors.SdkMetadataInterceptorFilter;
import io.split.client.utils.SDKMetadata;
import io.split.storages.SegmentCacheConsumer;
import io.split.storages.SegmentCacheProducer;
import io.split.storages.SplitCacheConsumer;
import io.split.storages.SplitCacheProducer;
import io.split.storages.enums.OperationMode;
import io.split.storages.enums.StorageMode;
import io.split.storages.memory.InMemoryCacheImp;
import io.split.storages.SplitCache;
import io.split.engine.evaluator.Evaluator;
import io.split.engine.evaluator.EvaluatorImp;
import io.split.engine.SDKReadinessGates;
import io.split.engine.common.SyncManager;
import io.split.engine.common.SyncManagerImp;
import io.split.engine.evaluator.Evaluator;
import io.split.engine.evaluator.EvaluatorImp;
import io.split.engine.experiments.SplitChangeFetcher;
import io.split.engine.experiments.SplitFetcher;
import io.split.engine.experiments.SplitFetcherImp;
import io.split.engine.experiments.SplitParser;
import io.split.engine.experiments.SplitSynchronizationTask;
import io.split.engine.segments.SegmentChangeFetcher;
import io.split.storages.SegmentCache;
import io.split.storages.memory.SegmentCacheInMemoryImpl;
import io.split.engine.segments.SegmentSynchronizationTaskImp;
import io.split.integrations.IntegrationsConfig;
import io.split.storages.pluggable.CustomStorageWrapper;
import io.split.storages.SegmentCache;
import io.split.storages.SegmentCacheConsumer;
import io.split.storages.SegmentCacheProducer;
import io.split.storages.SplitCache;
import io.split.storages.SplitCacheConsumer;
import io.split.storages.SplitCacheProducer;
import io.split.storages.enums.OperationMode;
import io.split.storages.memory.InMemoryCacheImp;
import io.split.storages.memory.SegmentCacheInMemoryImpl;
import io.split.storages.pluggable.adapters.UserCustomEventAdapterProducer;
import io.split.storages.pluggable.adapters.UserCustomImpressionAdapterConsumer;
import io.split.storages.pluggable.adapters.UserCustomImpressionAdapterProducer;
import io.split.storages.pluggable.adapters.UserCustomSegmentAdapterConsumer;
import io.split.storages.pluggable.adapters.UserCustomSegmentAdapterProducer;
import io.split.storages.pluggable.adapters.UserCustomSplitAdapterConsumer;
import io.split.storages.pluggable.adapters.UserCustomSplitAdapterProducer;
import io.split.storages.pluggable.adapters.UserCustomTelemetryAdapterProducer;
import io.split.storages.pluggable.domain.SafeUserStorageWrapper;
import io.split.storages.pluggable.synchronizer.TelemetryConsumerSubmitter;
Expand Down Expand Up @@ -79,12 +75,12 @@
import org.apache.hc.core5.util.Timeout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pluggable.CustomStorageWrapper;

import java.io.IOException;
import java.net.InetAddress;
import java.net.URI;
import java.net.URISyntaxException;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
import io.split.client.dtos.Metadata;
import io.split.client.events.EventsStorageProducer;
import io.split.client.utils.Json;
import io.split.storages.pluggable.CustomStorageWrapper;
import io.split.storages.pluggable.domain.EventConsumer;
import io.split.storages.pluggable.domain.PrefixAdapter;
import io.split.storages.pluggable.domain.SafeUserStorageWrapper;
import pluggable.CustomStorageWrapper;

import java.util.List;
import java.util.stream.Collectors;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
import io.split.client.dtos.KeyImpression;
import io.split.client.dtos.Metadata;
import io.split.client.impressions.ImpressionsStorageProducer;
import io.split.storages.pluggable.CustomStorageWrapper;
import io.split.storages.pluggable.domain.ImpressionConsumer;
import io.split.storages.pluggable.domain.PrefixAdapter;
import io.split.storages.pluggable.domain.SafeUserStorageWrapper;
import pluggable.CustomStorageWrapper;

import java.lang.reflect.Modifier;
import java.util.Collections;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package io.split.storages.pluggable.adapters;

import io.split.storages.SegmentCacheConsumer;
import io.split.storages.pluggable.CustomStorageWrapper;
import io.split.storages.pluggable.domain.PrefixAdapter;
import io.split.storages.pluggable.domain.SafeUserStorageWrapper;
import io.split.storages.pluggable.utils.Helper;
import pluggable.CustomStorageWrapper;

import java.util.Set;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

import io.split.client.utils.Json;
import io.split.storages.SegmentCacheProducer;
import io.split.storages.pluggable.CustomStorageWrapper;
import io.split.storages.pluggable.domain.PrefixAdapter;
import io.split.storages.pluggable.domain.SafeUserStorageWrapper;
import io.split.storages.pluggable.utils.Helper;
import pluggable.CustomStorageWrapper;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
import io.split.engine.experiments.ParsedSplit;
import io.split.engine.experiments.SplitParser;
import io.split.storages.SplitCacheConsumer;
import io.split.storages.pluggable.CustomStorageWrapper;
import io.split.storages.pluggable.domain.SafeUserStorageWrapper;
import io.split.storages.pluggable.domain.PrefixAdapter;
import io.split.storages.pluggable.utils.Helper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pluggable.CustomStorageWrapper;

import java.util.ArrayList;
import java.util.Collection;
Expand Down Expand Up @@ -59,7 +59,6 @@ public Collection<ParsedSplit> getAll() {
if(keys == null) {
return new ArrayList<>();
}
keys = keys.stream().map(k -> k = PrefixAdapter.buildSplitKey(k)).collect(Collectors.toSet());
List<String> wrapperResponse = _safeUserStorageWrapper.getMany(new ArrayList<>(keys));
if(wrapperResponse == null) {
return new ArrayList<>();
Expand All @@ -70,18 +69,17 @@ public Collection<ParsedSplit> getAll() {
@Override
public boolean trafficTypeExists(String trafficTypeName) {
String wrapperResponse = _safeUserStorageWrapper.get(PrefixAdapter.buildTrafficTypeExists(trafficTypeName));
boolean response = false;
if(wrapperResponse == null) {
return response;
return false;
}
try {
response = Json.fromJson(wrapperResponse, Boolean.class);
return response;
Long value = Json.fromJson(wrapperResponse, Long.class);
return value != null && value > 0;
}
catch(Exception e) {
_log.info("Error getting boolean from String.");
}
return response;
return false;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
import io.split.client.utils.Json;
import io.split.engine.experiments.ParsedSplit;
import io.split.storages.SplitCacheProducer;
import io.split.storages.pluggable.CustomStorageWrapper;
import io.split.storages.pluggable.domain.PrefixAdapter;
import io.split.storages.pluggable.domain.SafeUserStorageWrapper;
import io.split.storages.pluggable.utils.Helper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pluggable.CustomStorageWrapper;

import java.util.HashSet;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.split.storages.pluggable.adapters;

import io.split.client.utils.SDKMetadata;
import io.split.storages.pluggable.CustomStorageWrapper;
import io.split.storages.pluggable.domain.PrefixAdapter;
import io.split.storages.pluggable.domain.SafeUserStorageWrapper;
import io.split.telemetry.domain.StreamingEvent;
Expand All @@ -13,6 +12,7 @@
import io.split.telemetry.domain.enums.ResourceEnum;
import io.split.telemetry.storage.TelemetryStorageProducer;
import io.split.telemetry.utils.BucketCalculator;
import pluggable.CustomStorageWrapper;

import static com.google.common.base.Preconditions.checkNotNull;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,25 +19,25 @@ public class PrefixAdapter {
private static final String INIT = "init";

public static String buildSplitKey(String name) {
return String.format(DEFAULT_PREFIX+ SPLIT_PREFIX +"{%s}", name);
return String.format(DEFAULT_PREFIX+ SPLIT_PREFIX +"%s", name);
}

public static String buildSplitChangeNumber() {
return DEFAULT_PREFIX+SPLITS_PREFIX+"till";
}

public static String buildGetAllSplit() {
return DEFAULT_PREFIX+SPLITS_PREFIX+"*";
return DEFAULT_PREFIX+SPLIT_PREFIX+"*";
}

public static String buildTrafficTypeExists(String trafficType) {
return String.format(DEFAULT_PREFIX+TRAFFIC_TYPE_PREFIX+"{%s}", trafficType);
return String.format(DEFAULT_PREFIX+TRAFFIC_TYPE_PREFIX+"%s", trafficType);
}

public static List<String> buildFetchManySplits(List<String> names) {
List<String> prefixes = new ArrayList<>();
for(String name : names) {
prefixes.add(String.format(DEFAULT_PREFIX+ SPLIT_PREFIX +"{%s}", name));
prefixes.add(String.format(DEFAULT_PREFIX+ SPLIT_PREFIX +"%s", name));
}
return prefixes;
}
Expand All @@ -51,26 +51,26 @@ public static String buildImpressions() {
}

public static String buildSegment(String segmentName) {
return String.format(DEFAULT_PREFIX+SEGMENT+"{%s}", segmentName);
return String.format(DEFAULT_PREFIX+SEGMENT+"%s", segmentName);
}

public static String buildSegmentAll() {
return String.format(DEFAULT_PREFIX+SEGMENT+"*");
}

public static String buildSegmentTill(String segmentName) {
return String.format(DEFAULT_PREFIX+SEGMENT+"{%s}."+TILL, segmentName);
return String.format(DEFAULT_PREFIX+SEGMENT+"%s."+TILL, segmentName);
}

public static String buildTelemetryLatenciesPrefix(String method, int bucketForLatency, String sdkVersion, String machineIp, String machineName) {
return String.format(DEFAULT_PREFIX+TELEMETRY+LATENCIES+"::{%s}/{%s}/{%s}/"+"{%s}/{%d}", sdkVersion, machineName, machineIp, method, bucketForLatency);
return String.format(DEFAULT_PREFIX+TELEMETRY+LATENCIES+"::%s/%s/%s/"+"%s/%d", sdkVersion, machineName, machineIp, method, bucketForLatency);
}

public static String buildTelemetryExceptionsPrefix(String method, String sdkVersion, String machineIp, String machineName) {
return String.format(DEFAULT_PREFIX+TELEMETRY+EXCEPTIONS+"::{%s}/{%s}/{%s}/"+"{%s}", sdkVersion, machineName, machineIp, method);
return String.format(DEFAULT_PREFIX+TELEMETRY+EXCEPTIONS+"::%s/%s/%s/"+"%s", sdkVersion, machineName, machineIp, method);
}

public static String buildTelemetryInit(String sdkVersion, String machineIp, String machineName) {
return String.format(DEFAULT_PREFIX+TELEMETRY+INIT+"::{%s}/{%s}/{%s}", sdkVersion, machineName, machineIp);
return String.format(DEFAULT_PREFIX+TELEMETRY+INIT+"::%s/%s/%s", sdkVersion, machineName, machineIp);
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package io.split.storages.pluggable.domain;

import io.split.storages.pluggable.CustomStorageWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pluggable.CustomStorageWrapper;

import java.util.List;
import java.util.Map;
import java.util.Set;

import static com.google.common.base.Preconditions.checkNotNull;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
import io.split.client.utils.Json;
import io.split.client.utils.SDKMetadata;
import io.split.storages.enums.OperationMode;
import io.split.storages.pluggable.CustomStorageWrapper;
import io.split.storages.pluggable.domain.ConfigConsumer;
import io.split.storages.pluggable.domain.PrefixAdapter;
import io.split.storages.pluggable.domain.SafeUserStorageWrapper;
import io.split.telemetry.synchronizer.TelemetrySynchronizer;
import pluggable.CustomStorageWrapper;

import java.util.List;
import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import io.split.integrations.IntegrationsConfig;
import io.split.storages.enums.OperationMode;
import io.split.storages.enums.StorageMode;
import io.split.storages.pluggable.CustomStorageWrapper;
import io.split.storages.pluggable.CustomStorageWrapperImp;
import io.split.storages.pluggable.domain.EventConsumer;
import io.split.storages.pluggable.domain.ImpressionConsumer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@
import io.split.client.impressions.ImpressionsManager;
import io.split.integrations.IntegrationsConfig;
import io.split.storages.enums.OperationMode;
import io.split.storages.enums.StorageMode;
import io.split.storages.pluggable.CustomStorageWrapper;
import io.split.storages.pluggable.domain.SafeUserStorageWrapper;
import io.split.telemetry.storage.TelemetryStorage;
import io.split.telemetry.synchronizer.TelemetrySynchronizer;
import junit.framework.TestCase;
import org.junit.Test;
import org.mockito.Mockito;
import pluggable.CustomStorageWrapper;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import io.split.client.dtos.TestImpressions;

import io.split.storages.enums.OperationMode;
import io.split.storages.pluggable.CustomStorageWrapper;
import io.split.telemetry.domain.enums.ImpressionsDataTypeEnum;
import io.split.telemetry.storage.InMemoryTelemetryStorage;
import io.split.telemetry.storage.TelemetryStorage;
Expand All @@ -18,6 +17,7 @@
import org.mockito.Captor;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import pluggable.CustomStorageWrapper;

import java.net.URISyntaxException;
import java.util.AbstractMap;
Expand Down
Loading