Почему записи кэша на основе классов исчезли после остановки узла GridGain?

Код:

public static class Oya {
    String name;

    public Oya(String name) {
        super();
        this.name = name;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "Oya [name=" + name + "]";
    }

}

public static void main(String[] args) throws GridException {
    try (Grid grid = GridGain.start(
            System.getProperty("user.home") + "/gridgain-platform-os-6.1.9-nix/examples/config/example-cache.xml")) {
        GridCache<Integer, Oya> cache = grid.cache("partitioned");
        boolean success2 = cache.putxIfAbsent(3, new Oya("3"));
        log.info("Current 3 value = {}", cache.get(3));
        cache.transform(3, (it) -> new Oya(it.name + "-transformed"));
        log.info("Transformed 3 value = {}", cache.get(3));
    }
}
  1. Запустите другой узел GridGain.
  2. Запустите код. Он должен напечатать: 3-transformed
  3. Прокомментируйте код putxIfAbsent().
  4. Запустите код. Я ожидал, что он напечатает: 3-transformed, но вместо этого получил null

Код будет работать, если я изменю значение кэша на String (как в видео о базовых операциях GridGain) или встроенное значение Java, но не для моего собственного класса.


person Hendy Irawan    schedule 05.07.2014    source источник
comment
Я подозреваю, что это как-то связано с peerClassLoadingEnabled и/или режимы развертывания ?   -  person Hendy Irawan    schedule 05.07.2014
comment
Обходной путь: <property name="deploymentMode" value="CONTINUOUS"/> но я все еще не понимаю, почему SHARED по умолчанию не работает в моем случае (что очень похоже на пример видео)?   -  person Hendy Irawan    schedule 05.07.2014


Ответы (1)


Одноранговое развертывание для сетки данных — это функция, предназначенная только для разработки. Контракт режима SHARED заключается в том, что всякий раз, когда покидает последний узел с исходным определением класса, все классы не будут развернуты. Для Data Grid это означает, что кэш будет очищен. Это полезно для случаев, когда вы меняете определения классов.

В режиме CONTINUOUS классы кэша никогда не удаляются, но в этом случае вы должны быть осторожны, чтобы не изменить определения классов без перезапуска узлов сетки.

Дополнительные сведения см. в документации по Режимы развертывания.

person Dmitriy    schedule 06.07.2014