DATAREDIS-1191 - Guard calls to RedisConverter.read(…) to avoid empty objects.

We now check if the RedisBucket is empty to avoid empty objects being materialized from EntityReader.
This commit is contained in:
Mark Paluch
2020-07-28 14:42:51 +02:00
parent 5440bea5c0
commit c57b13ce4a
2 changed files with 10 additions and 4 deletions

View File

@@ -301,6 +301,10 @@ public class RedisKeyValueAdapter extends AbstractKeyValueAdapter
Map<byte[], byte[]> raw = redisOps
.execute((RedisCallback<Map<byte[], byte[]>>) connection -> connection.hGetAll(binId));
if (CollectionUtils.isEmpty(raw)) {
return null;
}
RedisData data = new RedisData(raw);
data.setId(stringId);
data.setKeyspace(stringKeyspace);
@@ -802,7 +806,7 @@ public class RedisKeyValueAdapter extends AbstractKeyValueAdapter
return hash1;
});
Object value = converter.read(Object.class, new RedisData(hash));
Object value = CollectionUtils.isEmpty(hash) ? null : converter.read(Object.class, new RedisData(hash));
String channel = !ObjectUtils.isEmpty(message.getChannel())
? converter.getConversionService().convert(message.getChannel(), String.class)

View File

@@ -129,15 +129,17 @@ class RedisQueryEngine extends QueryEngine<RedisKeyValueAdapter, RedisOperationC
List<T> result = new ArrayList<>(raw.size());
for (Map.Entry<byte[], Map<byte[], byte[]>> entry : raw.entrySet()) {
if (CollectionUtils.isEmpty(entry.getValue())) {
continue;
}
RedisData data = new RedisData(entry.getValue());
data.setId(getAdapter().getConverter().getConversionService().convert(entry.getKey(), String.class));
data.setKeyspace(keyspace);
T converted = this.getAdapter().getConverter().read(type, data);
if (converted != null) {
result.add(converted);
}
result.add(converted);
}
return result;
}