Hi

My use case scenario is a web app, where the OrientGraphFactory is 
instanced as a Singleton Provider using Google Guice, and each use of 
OrientGraph is bound to the ResuestScope, aka each request get a potential 
different graph thread instance. I am the only user at the moment.

All Vertexes and Edges extends ORestricted, and the OrientGraphFactory is 
created using a tenant user and password to limit visibility towards other 
tenants.

I have a GroupDAO that has a method updateRoles that takes a Group and a 
List of roles, and first remove all exiting edges between the Group and the 
Roles, and then re-add the Edges.

@Override
void updateRoles(IGroup group, List<String> roles) {
    try {
        // 1.) Remove old connections
        graph.getVertex(group.getId()).outE('member').remove()

        // 2.) Add all new
        Vertex vGroup = graph.getVertex(group.getId())

        roles.each { String role ->
            Vertex vRole = graph.getVertex(role)
            Edge member = graph.addEdge(null, vGroup, vRole, "member");
            log.info('log: role: {}, member: {}', role, member)
        }
        graph.commit()
    } catch( Exception e ) {
        log.error(e.getMessage(), e)
        graph.rollback();
        throw e
    }
}


Using the web-flow of POST->redirect->GET, the get call after the update 
will in turn call getRoles to get the updated list of Roles from the 
database

@Override
List<IRole> getRoles(IGroup group) {
    List<IRole> roles = []
    graph.commit()
    def result = graph.getVertex(group.getId()).outE('member').inV
    while(result.hasNext()){
        roles << OrientHelper.fromVertex(result.next(), Role.class)
    }

    return roles
}


OritentHelper.fromVertex is a helper class i use to reflect Vertex onto a 
bean instance.

So to my actual problem(s):

1.) The get request contains a result that is not consistent. As each 
request uses a different thread, and graph instance from the pool, it will 
sometimes get the updated result, and sometimes the old result. The old 
result does not go away until another update, but then the result reflect 
the new updates, with the same problem. It seems like a cache issue to me.

2.) Using the Gremlin shell, the Edges never gets updated. It will keep 
listing the old Edges until the graph is closed and reopened. The web 
interface shows the updated Edges.

I am using OrientDb 2.0.2, Java 8, Linux and Groovy 2.3.7 on a remote 
(localhost) connection. I am using Gremlin 2.6.0.

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to