Uploaded image for project: 'TinkerPop'
  1. TinkerPop
  2. TINKERPOP-2257

transaction itty may still be visited after commit

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Critical
    • Resolution: Fixed
    • 3.4.0
    • 3.4.3, 3.5.0
    • server
    • None

    Description

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

      Attachments

        Activity

          People

            spmallette Stephen Mallette
            Stark Arya Stark Arya
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: