У нас около 32 корзин в этом наборе для аэроспайков. Не уверен, что это слишком много. После примерно 9 или 10 нечетных запросов вставки через приложение, чтобы установить для 10 значений bin значение 0, наряду с изменением поля datetime lastUpdated
, наблюдался этот сценарий, в котором числовые поля не сбрасываются, а lastUpdated
обновляется.
Вот класс DetailsSet.class (модель для набора)
@SetName("details_set")
public class PrepaidAccountDetails {
@UserKey
@BinName("owner")
protected String owner;
@BinName("bin")
protected Double setBin;
..
32 bins
@BinName("lastUpdated")
protected Date lastUpdated;
//getters and setters
}
Мы попытались добавить некоторую логику повторения в код приложения, если числовые поля не найдены 0 сразу после этого запроса. Однако и это не удалось.
Вот код приложения, использующий библиотеку spikify -
boolean valuesReset = false;
try {
DetailsSet DetailsSet = sfy.transact(3, new Work<DetailsSet>() {
public DetailsSet run() {
Key key = new Key(asconf.getNamespace(), "details_set", account.owner());
DetailsSet pa = sfy.get(DetailsSet.class).key(key).now();
logger.info("resetting values");
if (pa != null) {
pa.setBin(BigDecimal.ZERO.doubleValue());
//setting 10 other bins to zero similarly
// reset counts
pa.setLastUpdated(new Date());
sfy.update(key, pa).now();
logger.info("reset done successfully");
}
return pa;
}
});
if (DetailsSet != null) {
valuesReset = true;
}
Key key = new Key(asconf.getNamespace(), "details_set", account.owner());
DetailsSet pa = sfy.get(DetailsSet.class).key(key).now();
logger.info("checking if values have been reset");
logger.info(
"limits set to value : {}",
new Object[] { pa.getBin() });
if (pa.getBin() != 0) {
//this prints out
logger.error("Values for owner {} has not been reset, so retrying !", new Object[] { account.owner() });
valuesReset = false;
}
return valuesReset;
} catch (AerospikeException ae) {
//exception is not thrown
logger.error("Error while resetting values for owner {}",
new Object[] { account.owner() }, ae);
return false;
}
Вывод показывает -
reset done successfully
limits set to value : <Old Non zero value>
Values for owner <owner> has not been reset, so retrying !
Есть ли такая известная проблема с aerospike / spikify при каком-либо сценарии?