Browse Source

Relations cache fix.

pull/725/head
Igor Kulikov 9 years ago
parent
commit
5b03e45fcb
  1. 52
      dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java

52
dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java

@ -211,9 +211,9 @@ public class BaseRelationService implements RelationService {
private void checkFromDeleteSync(Cache cache, List<Boolean> results, EntityRelation relation, boolean isRemove) { private void checkFromDeleteSync(Cache cache, List<Boolean> results, EntityRelation relation, boolean isRemove) {
if (isRemove) { if (isRemove) {
results.add(relationDao.deleteRelation(relation)); results.add(relationDao.deleteRelation(relation));
cacheEviction(relation, relation.getTo(), cache); cacheEviction(relation, false, cache);
} else { } else {
cacheEviction(relation, relation.getFrom(), cache); cacheEviction(relation, true, cache);
} }
} }
@ -262,25 +262,43 @@ public class BaseRelationService implements RelationService {
private void checkFromDeleteAsync(Cache cache, List<ListenableFuture<Boolean>> results, EntityRelation relation, boolean isRemove) { private void checkFromDeleteAsync(Cache cache, List<ListenableFuture<Boolean>> results, EntityRelation relation, boolean isRemove) {
if (isRemove) { if (isRemove) {
results.add(relationDao.deleteRelationAsync(relation)); results.add(relationDao.deleteRelationAsync(relation));
cacheEviction(relation, relation.getTo(), cache); cacheEviction(relation, false, cache);
} else { } else {
cacheEviction(relation, relation.getFrom(), cache); cacheEviction(relation, true, cache);
} }
} }
private void cacheEviction(EntityRelation relation, EntityId entityId, Cache cache) { private void cacheEviction(EntityRelation relation, boolean outboundOnly, Cache cache) {
cache.evict(entityId); List<Object> fromToTypeAndTypeGroup = new ArrayList<>();
fromToTypeAndTypeGroup.add(relation.getFrom());
List<Object> toAndType = new ArrayList<>(); fromToTypeAndTypeGroup.add(relation.getTo());
toAndType.add(entityId); fromToTypeAndTypeGroup.add(relation.getType());
toAndType.add(relation.getType()); fromToTypeAndTypeGroup.add(relation.getTypeGroup());
cache.evict(toAndType); cache.evict(fromToTypeAndTypeGroup);
List<Object> fromToAndType = new ArrayList<>(); List<Object> fromTypeAndTypeGroup = new ArrayList<>();
fromToAndType.add(relation.getFrom()); fromTypeAndTypeGroup.add(relation.getFrom());
fromToAndType.add(relation.getTo()); fromTypeAndTypeGroup.add(relation.getType());
fromToAndType.add(relation.getType()); fromTypeAndTypeGroup.add(relation.getTypeGroup());
cache.evict(fromToAndType); cache.evict(fromTypeAndTypeGroup);
List<Object> fromAndTypeGroup = new ArrayList<>();
fromAndTypeGroup.add(relation.getFrom());
fromAndTypeGroup.add(relation.getTypeGroup());
cache.evict(fromAndTypeGroup);
if (!outboundOnly) {
List<Object> toAndTypeGroup = new ArrayList<>();
toAndTypeGroup.add(relation.getTo());
toAndTypeGroup.add(relation.getTypeGroup());
cache.evict(toAndTypeGroup);
List<Object> toTypeAndTypeGroup = new ArrayList<>();
fromTypeAndTypeGroup.add(relation.getTo());
fromTypeAndTypeGroup.add(relation.getType());
fromTypeAndTypeGroup.add(relation.getTypeGroup());
cache.evict(toTypeAndTypeGroup);
}
} }
@Cacheable(cacheNames = RELATIONS_CACHE, key = "{#from, #typeGroup}") @Cacheable(cacheNames = RELATIONS_CACHE, key = "{#from, #typeGroup}")

Loading…
Cancel
Save