2014-12-01 14 views
10

Klient Aerospike ma scanAll metodę odczytu wszystkich wierszy ze swojego magazynu. go używać w kodzie folowing:Aerospike: jak uzyskać klucz rekordu?

ScanPolicy policy = new ScanPolicy(); 
policy.concurrentNodes = true; 
policy.priority = Priority.DEFAULT; 
policy.includeBinData = true; 
policy.scanPercent = 100; 

client.scanAll(policy, "namespaceName", "setName", new ScanCallback() { 
    @Override 
    public void scanCallback(Key key, Record record) throws AerospikeException { 
     STORE.put(key.userKey.toLong(), record.getValue("binName").toString()); 
    } 
}); 

Ale to jest wykończony NullPointerException, ponieważ userKey jest null. Wszystkie pozostałe pola są zgodne z oczekiwaniami. klucz użytkownika jest długi stosunek, który był używany do zapisywania danych:

client.put(writePolicy, new Key("namespaceName", "setName", userKey), new Bin("binName", value)); 

Wszystko jest w porządku, jeśli to zrobię pojedynczego żądania takiego:

client.get(readPolicy, new Key("namespaceName", "setName", userKey)); 

Co może być nie tak? Dlaczego userKey ma wartość null?

Odpowiedz

15

Aerospike używa nazwy klucza i zestawu do wygenerowania unikalnego streszczenia, więc przechowuje tylko skrót.

Podczas wstawiania jednego rekordu po ustawieniu writePolicy.sendKey = true klucz zostanie zapisany jako metadane rekordu. Jeśli jeden rekord zostanie wstawiony z writePolicy.sendKey = true, tylko wtedy otrzymasz klucz w funkcji ScanCallback().

Domyślnie writePolicy.sendKey ma wartość false, więc domyślnie scanCallback() otrzymuje null jako klucz. To dlatego twój key.userKey.toLong() daje NullPointerException.

+1

Dziękuję bardzo za poświęcony czas i dobrą odpowiedź! – DmitryKanunnikoff

3

Ja też stawiam czoła temu problemowi, nawet w momencie pisania tego ustawienia ustawiliśmy WritePolicy.sendkeys = true.

Po 2-3 dniach debugowania stwierdzono, że wystąpił problem z wersją klienta aerospike. Początkowo używałem wersji 3.0.25, ale po aktualizacji do wersji 3.0.3 zaczęło działać poprawnie.

Powiązane problemy