Yup Von meinem iPhone gesendet
> Am 28.09.2016 um 09:22 schrieb Michał Sitarz <[email protected]>: > > Sure, I guess you meant javascript driver? > > W dniu środa, 28 września 2016 02:25:32 UTC+2 użytkownik Michael Hunger > napisał: >> >> Could you please paste this as an github issue for the java driver? >> >>> On Tue, Sep 27, 2016 at 11:23 PM, Michał Sitarz <[email protected]> wrote: >>> Hi! >>> >>> While I was writing unit tests for my app I noticed this exception when >>> testing more concurrent sessions than connectionPoolSize in javascript >>> neo4j-driver. >>> >>> Versions: >>> neo4j - dockerized 3.0.1, image neo4j:3.0 >>> neo4j-driver - 1.0.1 >>> nodejs - tested on 6.6.0 and 6.2.1 >>> >>> Error: >>> 2016-09-27 19:21:41.296+0000 ERROR [o.n.b.v.t.BoltProtocolV1] Failed to >>> write response to driver >>> java.lang.NullPointerException >>> at >>> org.neo4j.bolt.v1.transport.ChunkedOutput.ensure(ChunkedOutput.java:156) >>> at >>> org.neo4j.bolt.v1.transport.ChunkedOutput.writeShort(ChunkedOutput.java:90) >>> at >>> org.neo4j.bolt.v1.packstream.PackStream$Packer.packStructHeader(PackStream.java:304) >>> at >>> org.neo4j.bolt.v1.messaging.PackStreamMessageFormatV1$Writer.handleSuccessMessage(PackStreamMessageFormatV1.java:145) >>> at >>> org.neo4j.bolt.v1.messaging.msgprocess.MessageProcessingCallback.completed(MessageProcessingCallback.java:102) >>> at >>> org.neo4j.bolt.v1.messaging.msgprocess.MessageProcessingCallback.completed(MessageProcessingCallback.java:31) >>> at >>> org.neo4j.bolt.v1.runtime.internal.SessionStateMachine.after(SessionStateMachine.java:823) >>> at >>> org.neo4j.bolt.v1.runtime.internal.SessionStateMachine.reset(SessionStateMachine.java:699) >>> at >>> org.neo4j.bolt.v1.runtime.internal.concurrent.SessionWorkerFacade.lambda$reset$6(SessionWorkerFacade.java:87) >>> at >>> org.neo4j.bolt.v1.runtime.internal.concurrent.SessionWorker.execute(SessionWorker.java:116) >>> at >>> org.neo4j.bolt.v1.runtime.internal.concurrent.SessionWorker.run(SessionWorker.java:77) >>> at java.lang.Thread.run(Thread.java:745) >>> >>> >>> I can reproduce this error on fresh DB using this code: >>> const _ = require('lodash'), >>> neo4j = require('neo4j-driver').v1; >>> >>> const driver = neo4j.driver('bolt://localhost:7687', >>> neo4j.auth.basic('neo4j', >>> 'neo4j'), >>> {connectionPoolSize: 1}); >>> >>> for (let i = 0; i < 100; i++) { >>> let session = driver.session(); >>> >>> session >>> .run('create (u:User {id: {id}}) return u', {id: _.random(100000)}) >>> .then(records => { >>> >>> console.log('=====================NUMBER'+i+'======================='); >>> console.log(records) >>> console.log('=============================================='); >>> session.close(); >>> }) >>> .catch(err => { >>> console.error(err); >>> session.close(); >>> }); >>> >>> } >>> >>> >>> The same problem appears using observer: >>> const _ = require('lodash'), >>> neo4j = require('neo4j-driver').v1; >>> >>> const driver = neo4j.driver('bolt://localhost:7687', >>> neo4j.auth.basic('neo4j', >>> 'neo4j'), >>> {connectionPoolSize: 1}); >>> >>> for (let i = 0; i < 100; i++) { >>> let session = driver.session(); >>> >>> session >>> .run('create (u:User {id: {id}}) return u', {id: _.random(100000)}) >>> .subscribe({ >>> onNext(record) { >>> >>> }, >>> onCompleted(summary) { >>> console.log('finished number ' + i); >>> session.close(); >>> }, >>> onError(err) { >>> console.error(err, 'itaration number' + i); >>> } >>> }); >>> } >>> >>> >>> >>> After removing session.close() this problem disappears in both cases. >>> >>> When using lower number of session e.g. 5, then the same problem appears >>> after few scripts run. However, all records are returned properly. >>> I wouldn't notice this if next test in my suite sometimes didn't strangely >>> fail with timeout or even exception shown below when using "match >>> (u:Testing) detach delete u" on afterEach hook. >>> >>> 2016-09-27 20:19:32.868+0000 ERROR [o.n.b.v.r.i.ErrorReporter] Client >>> triggered an unexpected error [UnknownError]: >>> Property[1075,used=false,prev=-1,next=-1] not in use. See debug.log for >>> more details, reference 4c0fb1ed-ee5b-4036-a156-828a206cfc2e. >>> 2016-09-27 20:19:32.868+0000 ERROR [o.n.b.v.r.i.ErrorReporter] Client >>> triggered an unexpected error [UnknownError]: >>> Property[1075,used=false,prev=-1,next=-1] not in use, reference >>> 4c0fb1ed-ee5b-4036-a156-828a206cfc2e. >>> Property[1075,used=false,prev=-1,next=-1] not in use >>> org.neo4j.kernel.impl.store.InvalidRecordException: >>> Property[1075,used=false,prev=-1,next=-1] not in use >>> at >>> org.neo4j.kernel.impl.store.record.RecordLoad$1.verify(RecordLoad.java:55) >>> at >>> org.neo4j.kernel.impl.store.CommonAbstractStore.verifyAfterReading(CommonAbstractStore.java:1240) >>> at >>> org.neo4j.kernel.impl.store.CommonAbstractStore.readIntoRecord(CommonAbstractStore.java:1064) >>> at >>> org.neo4j.kernel.impl.store.CommonAbstractStore.getRecord(CommonAbstractStore.java:1042) >>> at >>> org.neo4j.kernel.impl.transaction.state.Loaders$2.load(Loaders.java:165) >>> at >>> org.neo4j.kernel.impl.transaction.state.Loaders$2.load(Loaders.java:145) >>> at >>> org.neo4j.kernel.impl.transaction.state.RecordChanges.getOrLoad(RecordChanges.java:72) >>> at >>> org.neo4j.kernel.impl.transaction.state.PropertyDeleter.deletePropertyChain(PropertyDeleter.java:45) >>> at >>> org.neo4j.kernel.impl.transaction.state.TransactionRecordState.getAndDeletePropertyChain(TransactionRecordState.java:336) >>> at >>> org.neo4j.kernel.impl.transaction.state.TransactionRecordState.nodeDelete(TransactionRecordState.java:322) >>> at >>> org.neo4j.kernel.impl.storageengine.impl.recordstorage.TransactionToRecordStateVisitor.visitDeletedNode(TransactionToRecordStateVisitor.java:89) >>> at >>> org.neo4j.storageengine.api.txstate.TxStateVisitor$Delegator.visitDeletedNode(TxStateVisitor.java:220) >>> at >>> org.neo4j.kernel.api.txstate.TransactionCountingStateVisitor.visitDeletedNode(TransactionCountingStateVisitor.java:100) >>> at >>> org.neo4j.kernel.impl.api.state.TxState$12.visitRemoved(TxState.java:339) >>> at >>> org.neo4j.kernel.impl.api.state.TxState$12.visitRemoved(TxState.java:335) >>> at >>> org.neo4j.kernel.impl.util.diffsets.SuperDiffSets.accept(SuperDiffSets.java:70) >>> at org.neo4j.kernel.impl.util.diffsets.DiffSets.accept(DiffSets.java:41) >>> at org.neo4j.kernel.impl.api.state.TxState.accept(TxState.java:274) >>> at >>> org.neo4j.kernel.impl.storageengine.impl.recordstorage.RecordStorageEngine.createCommands(RecordStorageEngine.java:304) >>> at >>> org.neo4j.kernel.impl.api.KernelTransactionImplementation.commit(KernelTransactionImplementation.java:431) >>> at >>> org.neo4j.kernel.impl.api.KernelTransactionImplementation.close(KernelTransactionImplementation.java:380) >>> at >>> org.neo4j.bolt.v1.runtime.internal.SessionStateMachine$State$3.commitTransaction(SessionStateMachine.java:187) >>> at >>> org.neo4j.bolt.v1.runtime.internal.SessionStateMachine$State$4.discardAll(SessionStateMachine.java:258) >>> at >>> org.neo4j.bolt.v1.runtime.internal.SessionStateMachine$State$4.pullAll(SessionStateMachine.java:237) >>> at >>> org.neo4j.bolt.v1.runtime.internal.SessionStateMachine.pullAll(SessionStateMachine.java:664) >>> at >>> org.neo4j.bolt.v1.runtime.internal.concurrent.SessionWorkerFacade.lambda$pullAll$4(SessionWorkerFacade.java:74) >>> at >>> org.neo4j.bolt.v1.runtime.internal.concurrent.SessionWorker.execute(SessionWorker.java:116) >>> at >>> org.neo4j.bolt.v1.runtime.internal.concurrent.SessionWorker.executeBatch(SessionWorker.java:102) >>> at >>> org.neo4j.bolt.v1.runtime.internal.concurrent.SessionWorker.run(SessionWorker.java:82) >>> at java.lang.Thread.run(Thread.java:745) >>> >>> And error returned to client: >>> Structure { >>> signature: 127, >>> fields: >>> [ { code: 'Neo.DatabaseError.General.UnknownError', >>> message: 'An unexpected failure occurred, see details in the >>> database logs, reference number 4c0fb1ed-ee5b-4036-a156-828a206cfc2e.' } ] } >>> >>> >>> >>> When I don't use tests that runs more sessions than connectionPoolSize and >>> without afterEach hook, then everything is OK. >>> >>> So to summarize: >>> 1) I hit NullPointerException in DB when running more sessions than >>> connectionPoolSize >>> 2) After hitting NullPointerException, next test which is simple >>> transaction will timeout. >>> 3) using afterEach hook that deletes all test nodes, sometimes I get >>> UnknownError on client and InvalidRecordException in DB >>> >>> So how can I make sure that this sort of problems doesn't occur on my >>> server when requests will increase so much that there will be more sessions >>> than connectionPoolSize? >>> >>> Thanks! >>> Michal >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "Neo4j" 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. > > -- > You received this message because you are subscribed to the Google Groups > "Neo4j" 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. -- You received this message because you are subscribed to the Google Groups "Neo4j" 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.
