Добавить временную вершину в новый Tx - PullRequest
0 голосов
/ 12 апреля 2019

Мне нужно добавить временную вершину из одной передачи в другую. Поскольку время между созданием временной вершины и окончательным коммитом слишком велико, я хочу отключить первый tx, а когда наступит время сохранения, запустить новый tx и сохранить все измененные вершины. Это прекрасно работает с существующей вершиной, но не работает с временной.

Посмотрите на этот код:

private void testAttach() {
        OrientGraphFactory factory = new OrientGraphFactory("remote:localhost/Test", "root", "toor").setupPool(10, 50);
        OrientGraph tx = factory.getTx();
        HashMap<String,String> hm = new HashMap<>();

        long ls = System.currentTimeMillis();
        System.out.println("timestamp: "+ls);
        hm.put("s", "test temporal "+ls);

        OrientVertex onew = tx.addVertex("SimpleVertex", hm);
        System.out.println("onew RID: "+onew.getId() + " isDetached: "+onew.isDetached() + " isLocked: "+onew.isLocked());
        System.out.println("detach...");
        onew.detach();
        System.out.println("onew RID: "+onew.getId() + " isDetached: "+onew.isDetached() + " isLocked: "+onew.isLocked());

        OrientVertex onew1 = tx.addVertex("SimpleVertex", hm);
        OrientVertex onew2 = tx.addVertex("SimpleVertex", hm);
        System.out.println(""+onew.getId()+" - "+onew1.getId()+" - "+onew2.getId());

        System.out.println("recupearndo existente ");
        OrientVertex oEx = tx.getVertex("#33:1665");
        System.out.println("Existente: "+oEx.getId().toString());

        System.out.println("cerrando la tx...");
        tx.shutdown(true, false);

        System.out.println("post shutdown tx: ");
        System.out.println("onew RID: "+onew.getId() + " isDetached: "+onew.isDetached() + " isLocked: "+onew.isLocked());

        System.out.println("abriendo tx...");
        tx = factory.getTx();

        OrientVertex onew3 = tx.addVertex("SimpleVertex", hm);
        OrientVertex onew4 = tx.addVertex("SimpleVertex", hm);
        System.out.println(""+onew.getId()+" - "+onew1.getId()+" - "+onew2.getId()+" - "+onew3.getId()+" - "+onew4.getId());


        System.out.println("oEx RID: "+oEx.getId() + " isDetached: "+oEx.isDetached() + " isLocked: "+oEx.isLocked());
        oEx.setProperty("s", oEx.getProperty("s")+"-");

        tx.attach(onew);
        System.out.println("onew RID: "+onew.getId() + " isDetached: "+onew.isDetached() + " isLocked: "+onew.isLocked());
        tx.commit();
        System.out.println("onew RID: "+onew.getId() + " isDetached: "+onew.isDetached() + " isLocked: "+onew.isLocked());

    }

Это производит этот вывод:

timestamp: 1555066533622
onew RID: #-1:-2 isDetached: false isLocked: false
detach...
onew RID: #-1:-2 isDetached: true isLocked: false
#-1:-2 - #-1:-3 - #-1:-4
recuperando existente 
Existente: #33:1665
cerrando la tx...
post shutdown tx: 
onew RID: #-1:-2 isDetached: true isLocked: false
abriendo tx...
#-1:-2 - #-1:-3 - #-1:-4 - #-1:-2 - #-1:-3
oEx RID: #33:1665 isDetached: false isLocked: false
onew RID: #-1:-2 isDetached: false isLocked: false
onew RID: #-1:-2 isDetached: false isLocked: false

То, что я вижу, это временные идентификаторы, генерируемые за Tx.

Существующий объект автоматически присоединяется к новому открытому Tx и корректно сохраняется при фиксации.

Я не нашел способа прикрепить временную вершину к новому Tx, и она игнорируется при фиксации tx.

Есть ли способ сделать это?

...