Skip to content

Commit e8186db

Browse files
committed
refactor: adjust saveAll Doc failures to work with Java 17
1 parent 9a23260 commit e8186db

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

redis-om-spring/src/main/java/com/redis/om/spring/repository/support/SimpleRedisDocumentRepository.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import com.redis.om.spring.serialization.gson.GsonListOfType;
2525
import com.redis.om.spring.util.ObjectUtils;
2626
import com.redis.om.spring.vectorize.Embedder;
27+
import org.slf4j.Logger;
28+
import org.slf4j.LoggerFactory;
2729
import org.springframework.beans.BeanWrapper;
2830
import org.springframework.beans.BeanWrapperImpl;
2931
import org.springframework.beans.PropertyAccessor;
@@ -51,6 +53,7 @@
5153
import org.springframework.util.ReflectionUtils;
5254
import redis.clients.jedis.Jedis;
5355
import redis.clients.jedis.Pipeline;
56+
import redis.clients.jedis.exceptions.JedisDataException;
5457
import redis.clients.jedis.json.Path2;
5558
import redis.clients.jedis.search.Query;
5659
import redis.clients.jedis.search.SearchResult;
@@ -64,8 +67,10 @@
6467
import java.nio.file.Paths;
6568
import java.util.*;
6669
import java.util.concurrent.TimeUnit;
70+
import java.util.concurrent.atomic.AtomicInteger;
6771
import java.util.function.Function;
6872
import java.util.stream.Collectors;
73+
import java.util.stream.IntStream;
6974
import java.util.stream.StreamSupport;
7075

7176
import static com.redis.om.spring.util.ObjectUtils.*;
@@ -74,6 +79,8 @@
7479
public class SimpleRedisDocumentRepository<T, ID> extends SimpleKeyValueRepository<T, ID>
7580
implements RedisDocumentRepository<T, ID> {
7681

82+
private final static Logger logger = LoggerFactory.getLogger(SimpleRedisDocumentRepository.class);
83+
7784
protected final RedisModulesOperations<String> modulesOperations;
7885
protected final EntityInformation<T, ID> metadata;
7986
protected final KeyValueOperations operations;
@@ -172,6 +179,7 @@ public boolean setExpiration(ID id, Long expiration, TimeUnit timeUnit) {
172179
public <S extends T> List<S> saveAll(Iterable<S> entities) {
173180
Assert.notNull(entities, "The given Iterable of entities must not be null!");
174181
List<S> saved = new ArrayList<>();
182+
List<Object> entityIds = new ArrayList<>();
175183

176184
try (Jedis jedis = modulesOperations.client().getJedis().get()) {
177185
Pipeline pipeline = jedis.pipelined();
@@ -188,6 +196,8 @@ public <S extends T> List<S> saveAll(Iterable<S> entities) {
188196
.getProperty(Objects.requireNonNull(keyValueEntity.getIdProperty()));
189197
keyValueEntity.getPropertyAccessor(entity).setProperty(keyValueEntity.getIdProperty(), id);
190198

199+
entityIds.add(id);
200+
191201
String keyspace = keyValueEntity.getKeySpace();
192202
byte[] objectKey = createKey(keyspace, Objects.requireNonNull(id).toString());
193203

@@ -215,7 +225,22 @@ public <S extends T> List<S> saveAll(Iterable<S> entities) {
215225

216226
saved.add(entity);
217227
}
218-
pipeline.sync();
228+
229+
List<Object> responses = pipeline.syncAndReturnAll();
230+
231+
// Process responses using streams to avoid iterator issues
232+
if (responses != null && !responses.isEmpty()) {
233+
long failedCount = IntStream.range(0, Math.min(responses.size(), entityIds.size()))
234+
.filter(i -> responses.get(i) instanceof JedisDataException)
235+
.peek(i -> logger.warn("Failed JSON.SET command for entity with id: {} Error: {}",
236+
entityIds.get(i),
237+
((JedisDataException) responses.get(i)).getMessage()))
238+
.count();
239+
240+
if (failedCount > 0) {
241+
logger.warn("Total failed JSON.SET commands: {}", failedCount);
242+
}
243+
}
219244
}
220245

221246
return saved;

0 commit comments

Comments
 (0)