Aerospike spikify - вставка запроса для сброса значений бина в 0, не происходящих периодически, но поле метки времени обновляется тем же запросом - PullRequest
0 голосов
/ 27 апреля 2018

У нас около 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 при каком-либо сценарии?

...