Simplify delta recording in DeltaCapableGemFireSessionAttributes.

Existing tests cover the changes.

Resolves gh-19.
This commit is contained in:
John Blum
2018-12-14 03:27:54 -08:00
parent 53ccac533e
commit f8c8e5d912

View File

@@ -27,6 +27,7 @@ import java.util.AbstractMap;
import java.util.AbstractSet;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Optional;
@@ -968,7 +969,7 @@ public abstract class AbstractGemFireOperationsSessionRepository
@SuppressWarnings("unused")
public static class DeltaCapableGemFireSessionAttributes extends GemFireSessionAttributes implements Delta {
private transient final Map<String, Object> sessionAttributeDeltas = new HashMap<>();
private transient final Set<String> sessionAttributeDeltas = new HashSet<>();
public DeltaCapableGemFireSessionAttributes() { }
@@ -976,7 +977,7 @@ public abstract class AbstractGemFireOperationsSessionRepository
super(lock);
}
protected Map<String, Object> getSessionAttributeDeltas() {
protected Set<String> getSessionAttributeDeltas() {
synchronized (getLock()) {
return this.sessionAttributeDeltas;
@@ -993,7 +994,7 @@ public abstract class AbstractGemFireOperationsSessionRepository
Object previousAttributeValue = super.setAttribute(attributeName, attributeValue);
if (!attributeValue.equals(previousAttributeValue)) {
getSessionAttributeDeltas().put(attributeName, attributeValue);
getSessionAttributeDeltas().add(attributeName);
}
return previousAttributeValue;
@@ -1011,7 +1012,7 @@ public abstract class AbstractGemFireOperationsSessionRepository
return Optional.ofNullable(super.removeAttribute(attributeName))
.map(previousAttributeValue -> {
getSessionAttributeDeltas().put(attributeName, null);
getSessionAttributeDeltas().add(attributeName);
return previousAttributeValue;
})
.orElse(null);
@@ -1022,13 +1023,13 @@ public abstract class AbstractGemFireOperationsSessionRepository
synchronized (getLock()) {
Map<String, Object> sessionAttributeDeltas = getSessionAttributeDeltas();
Set<String> sessionAttributeDeltas = getSessionAttributeDeltas();
out.writeInt(sessionAttributeDeltas.size());
for (Entry<String, Object> entry : sessionAttributeDeltas.entrySet()) {
out.writeUTF(entry.getKey());
writeObject(entry.getValue(), out);
for (String attributeName : sessionAttributeDeltas) {
out.writeUTF(attributeName);
writeObject(getAttribute(attributeName), out);
}
}
}
@@ -1058,7 +1059,7 @@ public abstract class AbstractGemFireOperationsSessionRepository
deltas.put(in.readUTF(), readObject(in));
}
Map<String, Object> sessionAttributeDeltas = getSessionAttributeDeltas();
Set<String> sessionAttributeDeltas = getSessionAttributeDeltas();
deltas.forEach((key, value) -> {
setAttribute(key, value);