2017-02-10 4 views
0

So habe ich begegnet kürzlich einen Fehler während Ignite verwenden, das trieb mich verrückt Figur und dachte, dieser Beitrag kann für einige verlorene Seele dort helfen, so hier geht:Bug mit Karte als Cache-Schlüssel in Ignite

Das Szenario ist wie folgt: Ich habe eine Klasse A, die gerade ein java.util.Map Feld, das ich als ein Ignite-Cache-Schlüssel verwenden, um einen Wert zuordnen.

Ich habe 2 Instanzen desselben Service: S1 & S2, die jeweils einen Entzünden Knoten ausgeführt wird. Kommen wir zu den Ignite Knoten der Instanzen als Knoten beziehen N und M

Beide Dienste sind affinityCalls auf Ignite tun, so was auch immer Instanz des Dienstes verwendet wird, wird der Ignite Anruf mit dem gleichen Knoten gehen.

Das Szenario, das passiert ist, wie folgt: 1. Service S1 hat eine Affinität Anruf auf N und speichert in N ‚s-Cache eine Abbildung von A -> Wert V 2 Service S2 ruft den gleichen Affinitätsanruf auf und geht zu N, Wenn jedoch versucht wird, den Wert, N 's Cache von Schritt 1 abgerufen wurde, es nicht abrufen, als ob der Cache doesn' t enthalten es.

Um die Dinge klarer, den folgenden Pseudo-Code betrachten:

S1 führt Folgendes in Schritt 1.

IgniteCache igniteCache = ....;

Karte map1 = neue Karte(); map1.put ("irgendein Schlüssel", "irgendein Wert");

A cacheKey = neu A (Karte);

igniteCache.put (keyInCache, alles);

S2 führt Folgendes in Schritt 2

IgniteCache igniteCache = ....;

Karte map2 = neue Karte(); map2.put ("irgendein Schlüssel", "irgendein Wert");

A keyToRetrieve = neu A (map2);

igniteCache.contains (keyToRetrive) -> false.

obwohl keyToRetrieve.equals (cacheKey) ist wahr.

und der Cache enthält tatsächlich CacheKey.

Der Täter von der Frage, wie ich es zu sein, war die Verwendung von Map als ein Feld in der Tonart Typ A gefunden. Wie es scheint, hat sich entzünden Probleme mit mit Schlüsseln zu tun, die Karte Mitgliedern, wie auch hier erwähnt:

Ignite cache.containsKey returns false although keys are equal

Antwort

0

Antwort ist:

Verwenden etwas anderes als eine Karte als Schlüssel. Ich benutzte eine ganze Zahl und dann verschwanden alle Probleme.

Ich vermute, es könnte damit zusammenhängen, wie Karten überprüft werden, um gleich hinter den Kulissen in Ignite zu sein.