use of ai.grakn.util.Schema in project grakn by graknlabs.
the class GraknTxTest method checkThatMainCentralCacheIsNotAffectedByTransactionModifications.
@Test
public void checkThatMainCentralCacheIsNotAffectedByTransactionModifications() throws InvalidKBException, ExecutionException, InterruptedException {
// Check Central cache is empty
assertCacheOnlyContainsMetaTypes();
Role r1 = tx.putRole("r1");
Role r2 = tx.putRole("r2");
EntityType e1 = tx.putEntityType("e1").plays(r1).plays(r2);
RelationshipType rel1 = tx.putRelationshipType("rel1").relates(r1).relates(r2);
// Purge the above concepts into the main cache
tx.commit();
tx = EmbeddedGraknSession.create(tx.keyspace(), Grakn.IN_MEMORY).open(GraknTxType.WRITE);
// Check cache is in good order
Collection<SchemaConcept> cachedValues = tx.getGlobalCache().getCachedTypes().values();
assertTrue("Type [" + r1 + "] was not cached", cachedValues.contains(r1));
assertTrue("Type [" + r2 + "] was not cached", cachedValues.contains(r2));
assertTrue("Type [" + e1 + "] was not cached", cachedValues.contains(e1));
assertTrue("Type [" + rel1 + "] was not cached", cachedValues.contains(rel1));
assertThat(e1.plays().collect(toSet()), containsInAnyOrder(r1, r2));
ExecutorService pool = Executors.newSingleThreadExecutor();
// Mutate Schema in a separate thread
pool.submit(() -> {
GraknTx innerGraph = Grakn.session(Grakn.IN_MEMORY, tx.keyspace()).open(GraknTxType.WRITE);
EntityType entityType = innerGraph.getEntityType("e1");
Role role = innerGraph.getRole("r1");
entityType.deletePlays(role);
}).get();
// Check the above mutation did not affect central repo
SchemaConcept foundE1 = tx.getGlobalCache().getCachedTypes().get(e1.getLabel());
assertTrue("Main cache was affected by transaction", foundE1.asType().plays().anyMatch(role -> role.equals(r1)));
}
Aggregations