2015-08-31 2 views
0

Удаление вершин из Титана приводит к непоследовательному поведению чтения. Я проверяю это на одной машине с Кассандрой, вот мои 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.

После перезапуска программы он никогда не возвращает удаленную вершину. Как я могу исправить это непоследовательное поведение?

ответ

1

Проблема заключается в том, что на некоторых потоков, транзакции были открыты для графа уже. Чтение с графика открывает транзакцию, даже если ничего не изменилось. Эти транзакции должны быть закрыты, чтобы обеспечить постоянство поведения.

+0

Это правильно. Узнайте больше об этом в 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 –

+0

Еще одна ссылка для чтения с форума Titan https://groups.google.com/d/msg/aureliusgraphs/WMpcbqVECd8/Tvg1iRKDvhcJ –

0

По http://s3.thinkaurelius.com/docs/titan/0.9.0-M2/tx.html#tx-config вы должны установить checkInternalVertexExistence

+0

Я пытался это сделать - он все еще имеет такое же непоследовательное поведение. Самое странное, что кассандра просто работает на одном компьютере - призрачные края или вершины не должны быть проблемой здесь. – cscan

Смежные вопросы