migrating redis from bloom filter to classic cache

Signed-off-by: chandresh pancholi <chandresh.pancholi@navi.com>
This commit is contained in:
chandresh pancholi
2021-10-22 01:00:32 +05:30
parent ae64ff22d0
commit 49f7ac5ba3
11 changed files with 34 additions and 22 deletions

View File

@@ -4,6 +4,7 @@ import com.navi.medici.command.CacheCommands;
import com.navi.medici.config.RedisConfiguration; import com.navi.medici.config.RedisConfiguration;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.redisson.api.RBloomFilter; import org.redisson.api.RBloomFilter;
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -39,4 +40,16 @@ public class RedisCache implements CacheCommands {
public Boolean delete(String bucket) { public Boolean delete(String bucket) {
return redissonClient.getBucket(bucket).delete(); return redissonClient.getBucket(bucket).delete();
} }
@Override
public String get(String map, String key) {
RMap<String, String> rm = redissonClient.getMap(map);
return rm.get(key);
}
@Override
public void put(String map, String key, String value) {
RMap<String, String> rm = redissonClient.getMap(map);
rm.put(key, value);
}
} }

View File

@@ -12,4 +12,8 @@ public interface CacheCommands {
Boolean contains(RBloomFilter<String> bf, String key); Boolean contains(RBloomFilter<String> bf, String key);
Boolean delete(String bucket); Boolean delete(String bucket);
String get(String map, String key);
void put(String map, String key, String value);
} }

View File

@@ -19,7 +19,6 @@ public class RedisContainer {
Config c = new Config(); Config c = new Config();
c.useSingleServer() c.useSingleServer()
.setAddress(String.format("redis://%s:%s", redisConfiguration.getRedisHost(), redisConfiguration.getRedisPort())); .setAddress(String.format("redis://%s:%s", redisConfiguration.getRedisHost(), redisConfiguration.getRedisPort()));
return Redisson.create(c); return Redisson.create(c);
} }

View File

@@ -139,16 +139,14 @@ public class DefaultLitmus implements Litmus {
experimentName, strategy.getName()); experimentName, strategy.getName());
} }
var result = configuredStrategy.isEnabled( return configuredStrategy.isEnabled(
strategy.getParameters(), strategy.getParameters(),
context, context,
strategy.getConstraints()); strategy.getConstraints());
this.eventDispatcher.publish(context, litmusExperiment, result);
return result;
}); });
} }
this.eventDispatcher.publish(context, litmusExperiment, enabled);
return enabled; return enabled;
} }

View File

@@ -31,7 +31,7 @@ public class DeviceWithIdStrategy implements Strategy {
var segmentName = parameters.get(SEGMENT); var segmentName = parameters.get(SEGMENT);
var result = experimentFetcher.segmentIdExists(segmentName, litmusContext.getDeviceId().orElse(null)); var result = experimentFetcher.segmentIdExists(segmentName, litmusContext.getDeviceId().orElse(null));
return result.getData() != null && result.getData(); return result.getData() != null && (Boolean) result.getData();
} }
} }

View File

@@ -31,7 +31,7 @@ public class UserWithIdStrategy implements Strategy {
var segmentName = parameters.get(SEGMENT); var segmentName = parameters.get(SEGMENT);
var result = experimentFetcher.segmentIdExists(segmentName, litmusContext.getUserId().orElse(null)); var result = experimentFetcher.segmentIdExists(segmentName, litmusContext.getUserId().orElse(null));
return result.getData() != null && result.getData(); return result.getData() != null && (Boolean) result.getData();
} }
} }

View File

@@ -31,14 +31,11 @@ public class SegmentServiceImpl implements SegmentService {
s3Service.upload(file, destinationBucketName); s3Service.upload(file, destinationBucketName);
List<SegmentCsv> segmentCsvList = csvUtil.csvToList(file); List<SegmentCsv> segmentCsvList = csvUtil.csvToList(file);
var bfCreated = cacheCommands.reserveBF(segmentRequest.getName()); // var bfCreated = cacheCommands.reserveBF(segmentRequest.getName());
var bloomFilter = cacheCommands.getBf(segmentRequest.getName()); // var bloomFilter = cacheCommands.getBf(segmentRequest.getName());
log.info("ingesting data to bloom filter. segment_name: {}", segmentRequest.getName()); log.info("ingesting data to bloom filter. segment_name: {}", segmentRequest.getName());
segmentCsvList.forEach(segment ->{ segmentCsvList.forEach(segment ->cacheCommands.put(segmentRequest.getName(), segment.getSegmentId(), "true"));
var temp = cacheCommands.add(bloomFilter, segment.getSegmentId());
log.info("key: {}, result: {}", segment.getSegmentId(), temp);
});
var segmentEntity = SegmentEntity.builder() var segmentEntity = SegmentEntity.builder()
.segmentId(UUID.randomUUID().toString()) .segmentId(UUID.randomUUID().toString())
@@ -53,10 +50,10 @@ public class SegmentServiceImpl implements SegmentService {
@Override @Override
public Boolean segmentIdExist(String segmentName, String id) { public Boolean segmentIdExist(String segmentName, String id) {
var bloomFilter = cacheCommands.getBf(segmentName); // var bloomFilter = cacheCommands.getBf(segmentName);
var result = cacheCommands.contains(bloomFilter, id); var result = cacheCommands.get(segmentName, id);
return result; return result != null;
} }
} }

View File

@@ -1,3 +1,4 @@
server.port = ${PORT:12000}
spring.datasource.hikari.maximum-pool-size=${DB_POOL_MAX_SIZE:2} spring.datasource.hikari.maximum-pool-size=${DB_POOL_MAX_SIZE:2}
spring.datasource.hikari.minimum-idle=${DB_POOL_MIN_IDLE:1} spring.datasource.hikari.minimum-idle=${DB_POOL_MIN_IDLE:1}
spring.datasource.hikari.idle-timeout=${DB_POOL_IDLE_TIMEOUT_IN_MS:30000} spring.datasource.hikari.idle-timeout=${DB_POOL_IDLE_TIMEOUT_IN_MS:30000}
@@ -18,12 +19,12 @@ kafka.auditlog.topic=${AUDIT_LOG_TOPIC:audit-logs}
kms.base-url=${KMS_BASE_URL:http://google.com} kms.base-url=${KMS_BASE_URL:http://google.com}
redis.host=127.0.0.1 redis.host=${REDIS_HOST:127.0.0.1}
redis.port=6379 redis.port=6379
redis.expected.insertions=99999 redis.expected.insertions=99999
redis.false.probability=0.001 redis.false.probability=0.001
server.port = 12000
segment.s3.bucket=navi-test segment.s3.bucket=navi-test
report.s3.region=temp report.s3.region=temp

View File

@@ -18,8 +18,7 @@ public class MockController {
@GetMapping("/mock") @GetMapping("/mock")
public String test(@RequestParam("experiment") String experiment) { public String test(@RequestParam("experiment") String experiment) {
var context = LitmusContext.builder().addProperty("cc", "5").build(); var result = litmus.isEnabled(experiment);
var result = litmus.isEnabled(experiment, context);
log.info("result ----> {}", result); log.info("result ----> {}", result);
return "result ==> " + result; return "result ==> " + result;

View File

@@ -1,4 +1,4 @@
server.port=13000 server.port=${PORT:13000}
spring.datasource.hikari.maximum-pool-size=${DB_POOL_MAX_SIZE:2} spring.datasource.hikari.maximum-pool-size=${DB_POOL_MAX_SIZE:2}
spring.datasource.hikari.minimum-idle=${DB_POOL_MIN_IDLE:1} spring.datasource.hikari.minimum-idle=${DB_POOL_MIN_IDLE:1}

View File

@@ -1,3 +1,4 @@
DATASOURCE_URL=jdbc:postgresql://dev-db-service-db.np.navi-tech.in:5432/litmus DATASOURCE_URL=jdbc:postgresql://dev-db-service-db.np.navi-tech.in:5432/litmus
DATASOURCE_USERNAME=service_user DATASOURCE_USERNAME=service_user
DATASOURCE_PASSWORD=JRCFCMXUXBJHGZVTPBNTXHYCCFVMWN DATASOURCE_PASSWORD=JRCFCMXUXBJHGZVTPBNTXHYCCFVMWN
REDIS_HOST=dev-env-redis.twod4l.0001.aps1.cache.amazonaws.com