Удаление вершин из Титана приводит к непоследовательному поведению чтения. Я проверяю это на одной машине с Кассандрой, вот мои conf.properties:Titan Cassandra - Вершины призраков и непоследовательное поведение чтения до перезапуска
storage.backend=cassandra
storage.hostname=localhost
storage.cassandra.keyspace=test
Следующий метод удаляет соответствующую вершину:
public void deleteProfile(String uuid, String puuid) {
for(Person person : this.graph.getVertices("uuid", uuid, Person.class)) {
if (person != null) {
for (Profile profile : this.graph.getVertices("uuid", puuid, Profile.class)) {
person.removeProfile(profile);
graph.removeVertex(profile.asVertex());
}
}
}
this.graph.getBaseGraph().commit();
}
Когда следующий метод вызывается она возвращает два различных наборы результатов:
public Iterable<ProfileImpl> getProfiles(String uuid) {
List<ProfileImpl> profiles = new ArrayList<>();
for(Person person : this.graph.getVertices("uuid", uuid, Person.class)) {
if (person != null) {
for (Profile profile : person.getProfiles()) {
profiles.add(profile.toImpl());
}
}
}
return profiles;
}
Один результат будет таким, как ожидалось - он не будет содержать удаленный профиль. Однако, когда я запускаю его достаточно времени - он иногда будет содержать один дополнительный профиль - тот, который был удален.
Попытка удалить одну и ту же вершину снова показывает, что не существует вершины с этим «uuid», итератор hasNext() возвращает false.
После перезапуска программы он никогда не возвращает удаленную вершину. Как я могу исправить это непоследовательное поведение?
Это правильно. Узнайте больше об этом в Titan http://s3.thinkaurelius.com/docs/titan/0.9.0-M2/tx.html#_transaction_handling и TinkerPop http://tinkerpop.incubator.apache.org/docs/3.0.0 -incubating/# transaction –
Еще одна ссылка для чтения с форума Titan https://groups.google.com/d/msg/aureliusgraphs/WMpcbqVECd8/Tvg1iRKDvhcJ –