Skip to content

Commit 9dd446b

Browse files
authored
call fallback only when theres missing keys (#1009)
1 parent 3ec1cc2 commit 9dd446b

2 files changed

Lines changed: 11 additions & 2 deletions

File tree

storage/connectors/redis/src/main/java/feast/storage/connectors/redis/retriever/RedisClusterOnlineRetriever.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,10 @@ private List<byte[]> sendMultiGet(List<RedisKey> keys) {
228228
.boxed()
229229
.collect(Collectors.toList());
230230

231+
if (indexMissingValue.isEmpty()) {
232+
return redisValues;
233+
}
234+
231235
byte[][] fallbackBinaryKeys =
232236
indexMissingValue.stream()
233237
.map(i -> fallbackSerializer.serialize(keys.get(i)))

storage/connectors/redis/src/test/java/feast/storage/connectors/redis/retriever/RedisClusterOnlineRetrieverTest.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import static org.hamcrest.MatcherAssert.assertThat;
2020
import static org.hamcrest.Matchers.equalTo;
21-
import static org.mockito.Mockito.when;
21+
import static org.mockito.Mockito.*;
2222
import static org.mockito.MockitoAnnotations.initMocks;
2323

2424
import com.google.common.collect.ImmutableList;
@@ -147,7 +147,9 @@ public void shouldReturnResponseWithValuesIfKeysPresent() {
147147
List<KeyValue<byte[], byte[]>> featureRowBytes = Lists.newArrayList(keyValue1, keyValue2);
148148

149149
OnlineRetriever redisClusterOnlineRetriever =
150-
new RedisClusterOnlineRetriever.Builder(connection, serializer).build();
150+
new RedisClusterOnlineRetriever.Builder(connection, serializer)
151+
.withFallbackSerializer(fallbackSerializer)
152+
.build();
151153
when(syncCommands.mget(serializedKey1, serializedKey2)).thenReturn(featureRowBytes);
152154

153155
List<Optional<FeatureRow>> expected =
@@ -174,6 +176,9 @@ public void shouldReturnResponseWithValuesIfKeysPresent() {
174176
List<Optional<FeatureRow>> actual =
175177
redisClusterOnlineRetriever.getOnlineFeatures(entityRows, featureSetRequest);
176178
assertThat(actual, equalTo(expected));
179+
180+
// check that fallback is used only when there's something to fallback
181+
verify(syncCommands, never()).mget();
177182
}
178183

179184
@Test

0 commit comments

Comments
 (0)