[
https://issues.apache.org/jira/browse/TINKERPOP-2257?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
stephen mallette updated TINKERPOP-2257:
----------------------------------------
Description:
Branch: 3.4.0-rc2
File: org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor.java
Function: handleIterator
Wherence:
{code}
// we have an empty iterator - happens on stuff like: g.V().iterate()
if (!itty.hasNext()) \{
// as there is nothing left to iterate if we are transaction managed
then we should execute a
// commit here before we send back a NO_CONTENT which implies success
if (managedTransactionsForRequest) attemptCommit(msg,
context.getGraphManager(), settings.strictTransactionManagement);
rhc.writeAndFlush(ResponseMessage.build(msg)
.code(ResponseStatusCode.NO_CONTENT)
.statusAttributes(generateStatusAttributes(ctx, msg,
ResponseStatusCode.NO_CONTENT, itty, settings))
.create());
return;
}
{code}
when attemptCommit called, the transaction finished and the itty handle will
Invalid,but
generateStatusAttributes will try to invoke itty.hasNext() again
this will cause some problems and could recurrent when doing follow testing:
1.test data
g.addV('gdb_sample_person').property(id, 'gdb_sample_marko').property('age',
28).property('name', 'marko') g.addV('gdb_sample_person').property(id,
'gdb_sample_vadas').property('age', 27).property('name', 'vadas')
g.addV('gdb_sample_person').property(id, 'gdb_sample_josh').property('age',
32).property('name', 'josh') g.addV('gdb_sample_person').property(id,
'gdb_sample_peter').property('age', 35).property('name', 'peter')
g.addV('gdb_sample_software').property(id, 'gdb_sample_lop').property('lang',
'java').property('name', 'lop') g.addV('gdb_sample_software').property(id,
'gdb_sample_ripple').property('lang', 'java').property('name', 'ripple')
g.addE('gdb_sample_knows').from(V('gdb_sample_marko')).to(V('gdb_sample_vadas')).property('weight',
0.5f)
g.addE('gdb_sample_knows').from(V('gdb_sample_marko')).to(V('gdb_sample_josh')).property('weight',
1.0f)
g.addE('gdb_sample_created').from(V('gdb_sample_marko')).to(V('gdb_sample_lop')).property('weight',
0.4f)
g.addE('gdb_sample_created').from(V('gdb_sample_josh')).to(V('gdb_sample_lop')).property('weight',
0.4f)
g.addE('gdb_sample_created').from(V('gdb_sample_josh')).to(V('gdb_sample_ripple')).property('weight',
1.0f)
g.addE('gdb_sample_created').from(V('gdb_sample_peter')).to(V('gdb_sample_lop')).property('weight',
0.2f)
2. test dsl:
g.V().has("gdb_sample_person","name","marko").out("gdb_sample_knows").barrier().both().count().is(lt(1l))
was:
Branch: 3.4.0-rc2
File: org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor.java
Function: handleIterator
Wherence:
// we have an empty iterator - happens on stuff like: g.V().iterate()
if (!itty.hasNext()) \{
// as there is nothing left to iterate if we are transaction managed
then we should execute a
// commit here before we send back a NO_CONTENT which implies success
if (managedTransactionsForRequest) attemptCommit(msg,
context.getGraphManager(), settings.strictTransactionManagement);
rhc.writeAndFlush(ResponseMessage.build(msg)
.code(ResponseStatusCode.NO_CONTENT)
.statusAttributes(generateStatusAttributes(ctx, msg,
ResponseStatusCode.NO_CONTENT, itty, settings))
.create());
return;
}
when attemptCommit called, the transaction finished and the itty handle will
Invalid,but
generateStatusAttributes will try to invoke itty.hasNext() again
this will cause some problems and could recurrent when doing follow testing:
1.test data
g.addV('gdb_sample_person').property(id, 'gdb_sample_marko').property('age',
28).property('name', 'marko') g.addV('gdb_sample_person').property(id,
'gdb_sample_vadas').property('age', 27).property('name', 'vadas')
g.addV('gdb_sample_person').property(id, 'gdb_sample_josh').property('age',
32).property('name', 'josh') g.addV('gdb_sample_person').property(id,
'gdb_sample_peter').property('age', 35).property('name', 'peter')
g.addV('gdb_sample_software').property(id, 'gdb_sample_lop').property('lang',
'java').property('name', 'lop') g.addV('gdb_sample_software').property(id,
'gdb_sample_ripple').property('lang', 'java').property('name', 'ripple')
g.addE('gdb_sample_knows').from(V('gdb_sample_marko')).to(V('gdb_sample_vadas')).property('weight',
0.5f)
g.addE('gdb_sample_knows').from(V('gdb_sample_marko')).to(V('gdb_sample_josh')).property('weight',
1.0f)
g.addE('gdb_sample_created').from(V('gdb_sample_marko')).to(V('gdb_sample_lop')).property('weight',
0.4f)
g.addE('gdb_sample_created').from(V('gdb_sample_josh')).to(V('gdb_sample_lop')).property('weight',
0.4f)
g.addE('gdb_sample_created').from(V('gdb_sample_josh')).to(V('gdb_sample_ripple')).property('weight',
1.0f)
g.addE('gdb_sample_created').from(V('gdb_sample_peter')).to(V('gdb_sample_lop')).property('weight',
0.2f)
2. test dsl:
g.V().has("gdb_sample_person","name","marko").out("gdb_sample_knows").barrier().both().count().is(lt(1l))
> transaction itty may still be visited after commit
> ---------------------------------------------------
>
> Key: TINKERPOP-2257
> URL: https://issues.apache.org/jira/browse/TINKERPOP-2257
> Project: TinkerPop
> Issue Type: Bug
> Components: server
> Affects Versions: 3.4.0
> Reporter: Stark Arya
> Priority: Critical
>
> Branch: 3.4.0-rc2
> File: org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor.java
> Function: handleIterator
> Wherence:
> {code}
> // we have an empty iterator - happens on stuff like: g.V().iterate()
> if (!itty.hasNext()) \{
> // as there is nothing left to iterate if we are transaction managed
> then we should execute a
> // commit here before we send back a NO_CONTENT which implies success
> if (managedTransactionsForRequest) attemptCommit(msg,
> context.getGraphManager(), settings.strictTransactionManagement);
> rhc.writeAndFlush(ResponseMessage.build(msg)
> .code(ResponseStatusCode.NO_CONTENT)
> .statusAttributes(generateStatusAttributes(ctx, msg,
> ResponseStatusCode.NO_CONTENT, itty, settings))
> .create());
> return;
> }
> {code}
> when attemptCommit called, the transaction finished and the itty handle will
> Invalid,but
> generateStatusAttributes will try to invoke itty.hasNext() again
> this will cause some problems and could recurrent when doing follow testing:
> 1.test data
> g.addV('gdb_sample_person').property(id, 'gdb_sample_marko').property('age',
> 28).property('name', 'marko') g.addV('gdb_sample_person').property(id,
> 'gdb_sample_vadas').property('age', 27).property('name', 'vadas')
> g.addV('gdb_sample_person').property(id, 'gdb_sample_josh').property('age',
> 32).property('name', 'josh') g.addV('gdb_sample_person').property(id,
> 'gdb_sample_peter').property('age', 35).property('name', 'peter')
> g.addV('gdb_sample_software').property(id, 'gdb_sample_lop').property('lang',
> 'java').property('name', 'lop') g.addV('gdb_sample_software').property(id,
> 'gdb_sample_ripple').property('lang', 'java').property('name', 'ripple')
> g.addE('gdb_sample_knows').from(V('gdb_sample_marko')).to(V('gdb_sample_vadas')).property('weight',
> 0.5f)
> g.addE('gdb_sample_knows').from(V('gdb_sample_marko')).to(V('gdb_sample_josh')).property('weight',
> 1.0f)
> g.addE('gdb_sample_created').from(V('gdb_sample_marko')).to(V('gdb_sample_lop')).property('weight',
> 0.4f)
> g.addE('gdb_sample_created').from(V('gdb_sample_josh')).to(V('gdb_sample_lop')).property('weight',
> 0.4f)
> g.addE('gdb_sample_created').from(V('gdb_sample_josh')).to(V('gdb_sample_ripple')).property('weight',
> 1.0f)
> g.addE('gdb_sample_created').from(V('gdb_sample_peter')).to(V('gdb_sample_lop')).property('weight',
> 0.2f)
> 2. test dsl:
> g.V().has("gdb_sample_person","name","marko").out("gdb_sample_knows").barrier().both().count().is(lt(1l))
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)