tinkerpop-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "stephen mallette (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (TINKERPOP-2257) transaction itty may still be visited after commit
Date Mon, 08 Jul 2019 22:16:00 GMT

     [ 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)

Mime
View raw message