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

transaction itty may still be visited after commit

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 3.4.0
    • Fix Version/s: 3.4.3, 3.5.0
    • Component/s: server
    • Labels:
      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

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

              Dates

              • Created:
                Updated:
                Resolved: