aerospike / aerospike-client-java

Aerospike Java Client Library
Other
236 stars 212 forks source link

implement reactive index related methods #147

Closed kptfh closed 4 years ago

BrianNichols commented 4 years ago

We are working on integrating these changes.

BrianNichols commented 4 years ago

Some reactor-client tests are failing for me.

$ mvn clean
$ mvn install
$ cd extensions/reactor-client
$ ./run_tests -h <hostname>
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------< com.aerospike:aerospike-reactor-client >---------------
[INFO] Building aerospike-reactor-client 4.4.6
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ aerospike-reactor-client ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/bnichols/client-java/extensions/reactor-client/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ aerospike-reactor-client ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ aerospike-reactor-client ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ aerospike-reactor-client ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ aerospike-reactor-client ---
[INFO] Surefire report directory: /Users/bnichols/client-java/extensions/reactor-client/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.aerospike.client.reactor.BatchReactorFailTest
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.973 sec - in com.aerospike.client.reactor.BatchReactorFailTest
Running com.aerospike.client.reactor.BatchReactorTest
Tests run: 18, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.41 sec - in com.aerospike.client.reactor.BatchReactorTest
Running com.aerospike.client.reactor.CrudReactorFailTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.089 sec - in com.aerospike.client.reactor.CrudReactorFailTest
Running com.aerospike.client.reactor.CrudReactorTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.224 sec - in com.aerospike.client.reactor.CrudReactorTest
Running com.aerospike.client.reactor.OperateReactorFailTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.638 sec - in com.aerospike.client.reactor.OperateReactorFailTest
Running com.aerospike.client.reactor.OperateReactorTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.11 sec - in com.aerospike.client.reactor.OperateReactorTest
Running com.aerospike.client.reactor.QueryReactorFailTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.287 sec - in com.aerospike.client.reactor.QueryReactorFailTest
Running com.aerospike.client.reactor.QueryReactorTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.09 sec - in com.aerospike.client.reactor.QueryReactorTest
Running com.aerospike.client.reactor.ReactorIndexTest
Tests run: 6, Failures: 6, Errors: 0, Skipped: 0, Time elapsed: 0.044 sec <<< FAILURE! - in com.aerospike.client.reactor.ReactorIndexTest
shouldFailDropIndexIfNotExists[eventLoopType=DIRECT_NIO](com.aerospike.client.reactor.ReactorIndexTest)  Time elapsed: 0.012 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectNext(false)" failed (expected value: false; actual value: true)
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$addExpectedValue$10(DefaultStepVerifierBuilder.java:413)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onNext(DefaultStepVerifierBuilder.java:958)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:146)
    at com.aerospike.client.reactor.listeners.ReactorIndexExistsListener.onSuccess(ReactorIndexExistsListener.java:20)
    at com.aerospike.client.AerospikeClient$1.onSuccess(AerospikeClient.java:2105)
    at com.aerospike.client.async.AsyncInfoCommand.onSuccess(AsyncInfoCommand.java:97)
    at com.aerospike.client.async.NioCommand.finish(NioCommand.java:720)
    at com.aerospike.client.async.NioCommand.readSingleBody(NioCommand.java:483)
    at com.aerospike.client.async.NioCommand.readSingleHeader(NioCommand.java:472)
    at com.aerospike.client.async.NioCommand.read(NioCommand.java:409)
    at com.aerospike.client.async.NioCommand.processEvent(NioCommand.java:276)
    at com.aerospike.client.async.NioEventLoop.runCommands(NioEventLoop.java:205)
    at com.aerospike.client.async.NioEventLoop.run(NioEventLoop.java:163)
    at java.lang.Thread.run(Thread.java:748)

shouldCreateAndDropIndex[eventLoopType=DIRECT_NIO](com.aerospike.client.reactor.ReactorIndexTest)  Time elapsed: 0.005 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectNext(false)" failed (expected value: false; actual value: true)
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$addExpectedValue$10(DefaultStepVerifierBuilder.java:413)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onNext(DefaultStepVerifierBuilder.java:958)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:146)
    at com.aerospike.client.reactor.listeners.ReactorIndexExistsListener.onSuccess(ReactorIndexExistsListener.java:20)
    at com.aerospike.client.AerospikeClient$1.onSuccess(AerospikeClient.java:2105)
    at com.aerospike.client.async.AsyncInfoCommand.onSuccess(AsyncInfoCommand.java:97)
    at com.aerospike.client.async.NioCommand.finish(NioCommand.java:720)
    at com.aerospike.client.async.NioCommand.readSingleBody(NioCommand.java:483)
    at com.aerospike.client.async.NioCommand.readSingleHeader(NioCommand.java:472)
    at com.aerospike.client.async.NioCommand.read(NioCommand.java:409)
    at com.aerospike.client.async.NioCommand.processEvent(NioCommand.java:276)
    at com.aerospike.client.async.NioEventLoop.runCommands(NioEventLoop.java:205)
    at com.aerospike.client.async.NioEventLoop.run(NioEventLoop.java:163)
    at java.lang.Thread.run(Thread.java:748)

shouldFailCreateIndexIfAlreadyExists[eventLoopType=DIRECT_NIO](com.aerospike.client.reactor.ReactorIndexTest)  Time elapsed: 0.005 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectNext(false)" failed (expected value: false; actual value: true)
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$addExpectedValue$10(DefaultStepVerifierBuilder.java:413)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onNext(DefaultStepVerifierBuilder.java:958)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:146)
    at com.aerospike.client.reactor.listeners.ReactorIndexExistsListener.onSuccess(ReactorIndexExistsListener.java:20)
    at com.aerospike.client.AerospikeClient$1.onSuccess(AerospikeClient.java:2105)
    at com.aerospike.client.async.AsyncInfoCommand.onSuccess(AsyncInfoCommand.java:97)
    at com.aerospike.client.async.NioCommand.finish(NioCommand.java:720)
    at com.aerospike.client.async.NioCommand.readSingleBody(NioCommand.java:483)
    at com.aerospike.client.async.NioCommand.readSingleHeader(NioCommand.java:472)
    at com.aerospike.client.async.NioCommand.read(NioCommand.java:409)
    at com.aerospike.client.async.NioCommand.processEvent(NioCommand.java:276)
    at com.aerospike.client.async.NioEventLoop.runCommands(NioEventLoop.java:205)
    at com.aerospike.client.async.NioEventLoop.run(NioEventLoop.java:163)
    at java.lang.Thread.run(Thread.java:748)

shouldFailDropIndexIfNotExists[eventLoopType=NETTY_NIO](com.aerospike.client.reactor.ReactorIndexTest)  Time elapsed: 0.007 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectNext(false)" failed (expected value: false; actual value: true)
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$addExpectedValue$10(DefaultStepVerifierBuilder.java:413)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onNext(DefaultStepVerifierBuilder.java:958)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:146)
    at com.aerospike.client.reactor.listeners.ReactorIndexExistsListener.onSuccess(ReactorIndexExistsListener.java:20)
    at com.aerospike.client.AerospikeClient$1.onSuccess(AerospikeClient.java:2105)
    at com.aerospike.client.async.AsyncInfoCommand.onSuccess(AsyncInfoCommand.java:97)
    at com.aerospike.client.async.NettyCommand.finish(NettyCommand.java:735)
    at com.aerospike.client.async.NettyCommand.parseSingleBody(NettyCommand.java:523)
    at com.aerospike.client.async.NettyCommand.readSingleHeader(NettyCommand.java:504)
    at com.aerospike.client.async.NettyCommand.read(NettyCommand.java:391)
    at com.aerospike.client.async.NettyCommand.access$200(NettyCommand.java:57)
    at com.aerospike.client.async.NettyCommand$InboundHandler.channelRead(NettyCommand.java:938)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
    at java.lang.Thread.run(Thread.java:748)

shouldCreateAndDropIndex[eventLoopType=NETTY_NIO](com.aerospike.client.reactor.ReactorIndexTest)  Time elapsed: 0.005 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectNext(false)" failed (expected value: false; actual value: true)
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$addExpectedValue$10(DefaultStepVerifierBuilder.java:413)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onNext(DefaultStepVerifierBuilder.java:958)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:146)
    at com.aerospike.client.reactor.listeners.ReactorIndexExistsListener.onSuccess(ReactorIndexExistsListener.java:20)
    at com.aerospike.client.AerospikeClient$1.onSuccess(AerospikeClient.java:2105)
    at com.aerospike.client.async.AsyncInfoCommand.onSuccess(AsyncInfoCommand.java:97)
    at com.aerospike.client.async.NettyCommand.finish(NettyCommand.java:735)
    at com.aerospike.client.async.NettyCommand.parseSingleBody(NettyCommand.java:523)
    at com.aerospike.client.async.NettyCommand.readSingleHeader(NettyCommand.java:504)
    at com.aerospike.client.async.NettyCommand.read(NettyCommand.java:391)
    at com.aerospike.client.async.NettyCommand.access$200(NettyCommand.java:57)
    at com.aerospike.client.async.NettyCommand$InboundHandler.channelRead(NettyCommand.java:938)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
    at java.lang.Thread.run(Thread.java:748)

shouldFailCreateIndexIfAlreadyExists[eventLoopType=NETTY_NIO](com.aerospike.client.reactor.ReactorIndexTest)  Time elapsed: 0.008 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectNext(false)" failed (expected value: false; actual value: true)
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$addExpectedValue$10(DefaultStepVerifierBuilder.java:413)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onNext(DefaultStepVerifierBuilder.java:958)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:146)
    at com.aerospike.client.reactor.listeners.ReactorIndexExistsListener.onSuccess(ReactorIndexExistsListener.java:20)
    at com.aerospike.client.AerospikeClient$1.onSuccess(AerospikeClient.java:2105)
    at com.aerospike.client.async.AsyncInfoCommand.onSuccess(AsyncInfoCommand.java:97)
    at com.aerospike.client.async.NettyCommand.finish(NettyCommand.java:735)
    at com.aerospike.client.async.NettyCommand.parseSingleBody(NettyCommand.java:523)
    at com.aerospike.client.async.NettyCommand.readSingleHeader(NettyCommand.java:504)
    at com.aerospike.client.async.NettyCommand.read(NettyCommand.java:391)
    at com.aerospike.client.async.NettyCommand.access$200(NettyCommand.java:57)
    at com.aerospike.client.async.NettyCommand$InboundHandler.channelRead(NettyCommand.java:938)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
    at java.lang.Thread.run(Thread.java:748)

Running com.aerospike.client.reactor.ReactorInfoTest
Tests run: 4, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 1.02 sec <<< FAILURE! - in com.aerospike.client.reactor.ReactorInfoTest
shouldFailOnUnknownCommand[eventLoopType=DIRECT_NIO](com.aerospike.client.reactor.ReactorInfoTest)  Time elapsed: 0.006 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectErrorMatches" failed (predicate failed on exception: com.aerospike.client.AerospikeException: Error -1: Unknown info command: [XXX])
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$expectErrorMatches$8(DefaultStepVerifierBuilder.java:321)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onError(DefaultStepVerifierBuilder.java:941)
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:135)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:146)
    at com.aerospike.client.reactor.listeners.ReactorInfoListener.onSuccess(ReactorInfoListener.java:19)
    at com.aerospike.client.async.AsyncInfoCommand.onSuccess(AsyncInfoCommand.java:97)
    at com.aerospike.client.async.NioCommand.finish(NioCommand.java:720)
    at com.aerospike.client.async.NioCommand.readSingleBody(NioCommand.java:483)
    at com.aerospike.client.async.NioCommand.readSingleHeader(NioCommand.java:472)
    at com.aerospike.client.async.NioCommand.read(NioCommand.java:409)
    at com.aerospike.client.async.NioCommand.processEvent(NioCommand.java:276)
    at com.aerospike.client.async.NioEventLoop.runCommands(NioEventLoop.java:205)
    at com.aerospike.client.async.NioEventLoop.run(NioEventLoop.java:163)
    at java.lang.Thread.run(Thread.java:748)

shouldFailOnUnknownCommand[eventLoopType=NETTY_NIO](com.aerospike.client.reactor.ReactorInfoTest)  Time elapsed: 1.008 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectErrorMatches" failed (predicate failed on exception: com.aerospike.client.AerospikeException$Timeout: Client timeout: iteration=1 socket=1000 total=1000 maxRetries=2 node=BB96F695D290C00 172.16.70.185 3000 inDoubt=true)
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$expectErrorMatches$8(DefaultStepVerifierBuilder.java:321)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onError(DefaultStepVerifierBuilder.java:941)
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:165)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:166)
    at com.aerospike.client.reactor.listeners.ReactorInfoListener.onFailure(ReactorInfoListener.java:24)
    at com.aerospike.client.async.AsyncInfoCommand.onFailure(AsyncInfoCommand.java:104)
    at com.aerospike.client.async.NettyCommand.notifyFailure(NettyCommand.java:876)
    at com.aerospike.client.async.NettyCommand.totalTimeout(NettyCommand.java:713)
    at com.aerospike.client.async.NettyCommand.timeout(NettyCommand.java:622)
    at com.aerospike.client.async.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:161)
    at com.aerospike.client.async.HashedWheelTimer$HashedWheelTimeout.access$700(HashedWheelTimer.java:140)
    at com.aerospike.client.async.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:201)
    at com.aerospike.client.async.HashedWheelTimer.run(HashedWheelTimer.java:133)
    at com.aerospike.client.async.ScheduleTask.run(ScheduleTask.java:40)
    at io.netty.util.concurrent.PromiseTask$RunnableAdapter.call(PromiseTask.java:38)
    at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:120)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:462)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
    at java.lang.Thread.run(Thread.java:748)

Running com.aerospike.client.reactor.ScanReactorFailTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.227 sec - in com.aerospike.client.reactor.ScanReactorFailTest
Running com.aerospike.client.reactor.ScanReactorTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.123 sec - in com.aerospike.client.reactor.ScanReactorTest
Running com.aerospike.client.reactor.UdfReactorFailTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.126 sec - in com.aerospike.client.reactor.UdfReactorFailTest
Running com.aerospike.client.reactor.UdfReactorTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.019 sec - in com.aerospike.client.reactor.UdfReactorTest

Results :

Failed tests: 
  ReactorIndexTest.shouldCreateAndDropIndex[eventLoopType=DIRECT_NIO] expectation "expectNext(false)" failed (expected value: false; actual value: true)
  ReactorIndexTest.shouldCreateAndDropIndex[eventLoopType=NETTY_NIO] expectation "expectNext(false)" failed (expected value: false; actual value: true)
  ReactorIndexTest.shouldFailCreateIndexIfAlreadyExists[eventLoopType=DIRECT_NIO] expectation "expectNext(false)" failed (expected value: false; actual value: true)
  ReactorIndexTest.shouldFailCreateIndexIfAlreadyExists[eventLoopType=NETTY_NIO] expectation "expectNext(false)" failed (expected value: false; actual value: true)
  ReactorIndexTest.shouldFailDropIndexIfNotExists[eventLoopType=DIRECT_NIO] expectation "expectNext(false)" failed (expected value: false; actual value: true)
  ReactorIndexTest.shouldFailDropIndexIfNotExists[eventLoopType=NETTY_NIO] expectation "expectNext(false)" failed (expected value: false; actual value: true)
  ReactorInfoTest.shouldFailOnUnknownCommand[eventLoopType=DIRECT_NIO] expectation "expectErrorMatches" failed (predicate failed on exception: com.aerospike.client.AerospikeException: Error -1: Unknown info command: [XXX])
  ReactorInfoTest.shouldFailOnUnknownCommand[eventLoopType=NETTY_NIO] expectation "expectErrorMatches" failed (predicate failed on exception: com.aerospike.client.AerospikeException$Timeout: Client timeout: iteration=1 socket=1000 total=1000 maxRetries=2 node=BB96F695D290C00 172.16.70.185 3000 inDoubt=true)

Tests run: 78, Failures: 8, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  14.772 s
[INFO] Finished at: 2019-11-15T17:47:53-08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test (default-test) on project aerospike-reactor-client: There are test failures.
[ERROR] 
[ERROR] Please refer to /Users/bnichols/client-java/extensions/reactor-client/target/surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
kptfh commented 4 years ago

fixed tests. They were sensitive to the order in witch they are run

BrianNichols commented 4 years ago

The tests are still failing. These are my steps to reproduce.

$ git checkout -b kptfh-master master
$ git pull git://github.com/kptfh/aerospike-client-java.git master
$ mvn clean
$ mvn install
$ cd extensions/reactor-client
$ ./run_tests -h <host>

Results:

[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------< com.aerospike:aerospike-reactor-client >---------------
[INFO] Building aerospike-reactor-client 4.4.6
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ aerospike-reactor-client ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/bnichols/aerospike-client-java/extensions/reactor-client/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ aerospike-reactor-client ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ aerospike-reactor-client ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ aerospike-reactor-client ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ aerospike-reactor-client ---
[INFO] Surefire report directory: /Users/bnichols/aerospike-client-java/extensions/reactor-client/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.aerospike.client.reactor.BatchReactorFailTest
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.926 sec - in com.aerospike.client.reactor.BatchReactorFailTest
Running com.aerospike.client.reactor.BatchReactorTest
Tests run: 18, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.367 sec - in com.aerospike.client.reactor.BatchReactorTest
Running com.aerospike.client.reactor.CrudReactorFailTest
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.972 sec - in com.aerospike.client.reactor.CrudReactorFailTest
Running com.aerospike.client.reactor.CrudReactorTest
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.101 sec - in com.aerospike.client.reactor.CrudReactorTest
Running com.aerospike.client.reactor.OperateReactorFailTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.533 sec - in com.aerospike.client.reactor.OperateReactorFailTest
Running com.aerospike.client.reactor.OperateReactorTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.113 sec - in com.aerospike.client.reactor.OperateReactorTest
Running com.aerospike.client.reactor.QueryReactorFailTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.316 sec - in com.aerospike.client.reactor.QueryReactorFailTest
Running com.aerospike.client.reactor.QueryReactorTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.116 sec - in com.aerospike.client.reactor.QueryReactorTest
Running com.aerospike.client.reactor.ReactorIndexTest
Tests run: 6, Failures: 4, Errors: 0, Skipped: 0, Time elapsed: 0.057 sec <<< FAILURE! - in com.aerospike.client.reactor.ReactorIndexTest
shouldCreateAndDropIndex[eventLoopType=DIRECT_NIO](com.aerospike.client.reactor.ReactorIndexTest)  Time elapsed: 0.013 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectComplete" failed (expected: onComplete(); actual: onError(com.aerospike.client.AerospikeException: Error 200: Create index failed: FAIL:200: Index with the same name already exists or this bin has already been indexed.))
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$expectComplete$4(DefaultStepVerifierBuilder.java:245)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onError(DefaultStepVerifierBuilder.java:941)
    at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onError(MonoIgnoreElements.java:75)
    at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onError(MonoFlatMapMany.java:193)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:166)
    at com.aerospike.client.reactor.listeners.ReactorIndexListener.onFailure(ReactorIndexListener.java:23)
    at com.aerospike.client.AerospikeClient$1.onSuccess(AerospikeClient.java:2020)
    at com.aerospike.client.async.AsyncInfoCommand.onSuccess(AsyncInfoCommand.java:97)
    at com.aerospike.client.async.NioCommand.finish(NioCommand.java:718)
    at com.aerospike.client.async.NioCommand.readSingleBody(NioCommand.java:482)
    at com.aerospike.client.async.NioCommand.readSingleHeader(NioCommand.java:471)
    at com.aerospike.client.async.NioCommand.read(NioCommand.java:409)
    at com.aerospike.client.async.NioCommand.processEvent(NioCommand.java:276)
    at com.aerospike.client.async.NioEventLoop.runCommands(NioEventLoop.java:205)
    at com.aerospike.client.async.NioEventLoop.run(NioEventLoop.java:163)
    at java.lang.Thread.run(Thread.java:748)

shouldFailCreateIndexIfAlreadyExists[eventLoopType=DIRECT_NIO](com.aerospike.client.reactor.ReactorIndexTest)  Time elapsed: 0.005 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectNext(false)" failed (expected value: false; actual value: true)
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$addExpectedValue$10(DefaultStepVerifierBuilder.java:413)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onNext(DefaultStepVerifierBuilder.java:958)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:146)
    at com.aerospike.client.reactor.listeners.ReactorIndexExistsListener.onSuccess(ReactorIndexExistsListener.java:20)
    at com.aerospike.client.AerospikeClient$2.onSuccess(AerospikeClient.java:2168)
    at com.aerospike.client.async.AsyncInfoCommand.onSuccess(AsyncInfoCommand.java:97)
    at com.aerospike.client.async.NioCommand.finish(NioCommand.java:718)
    at com.aerospike.client.async.NioCommand.readSingleBody(NioCommand.java:482)
    at com.aerospike.client.async.NioCommand.readSingleHeader(NioCommand.java:471)
    at com.aerospike.client.async.NioCommand.read(NioCommand.java:409)
    at com.aerospike.client.async.NioCommand.processEvent(NioCommand.java:276)
    at com.aerospike.client.async.NioEventLoop.runCommands(NioEventLoop.java:205)
    at com.aerospike.client.async.NioEventLoop.run(NioEventLoop.java:163)
    at java.lang.Thread.run(Thread.java:748)

shouldCreateAndDropIndex[eventLoopType=NETTY_NIO](com.aerospike.client.reactor.ReactorIndexTest)  Time elapsed: 0.008 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectComplete" failed (expected: onComplete(); actual: onError(com.aerospike.client.AerospikeException: Error 200: Create index failed: FAIL:200: Index with the same name already exists or this bin has already been indexed.))
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$expectComplete$4(DefaultStepVerifierBuilder.java:245)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onError(DefaultStepVerifierBuilder.java:941)
    at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onError(MonoIgnoreElements.java:75)
    at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onError(MonoFlatMapMany.java:193)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:166)
    at com.aerospike.client.reactor.listeners.ReactorIndexListener.onFailure(ReactorIndexListener.java:23)
    at com.aerospike.client.AerospikeClient$1.onSuccess(AerospikeClient.java:2020)
    at com.aerospike.client.async.AsyncInfoCommand.onSuccess(AsyncInfoCommand.java:97)
    at com.aerospike.client.async.NettyCommand.finish(NettyCommand.java:737)
    at com.aerospike.client.async.NettyCommand.parseSingleBody(NettyCommand.java:526)
    at com.aerospike.client.async.NettyCommand.readSingleHeader(NettyCommand.java:507)
    at com.aerospike.client.async.NettyCommand.read(NettyCommand.java:391)
    at com.aerospike.client.async.NettyCommand.access$200(NettyCommand.java:57)
    at com.aerospike.client.async.NettyCommand$InboundHandler.channelRead(NettyCommand.java:940)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
    at java.lang.Thread.run(Thread.java:748)

shouldFailCreateIndexIfAlreadyExists[eventLoopType=NETTY_NIO](com.aerospike.client.reactor.ReactorIndexTest)  Time elapsed: 0.007 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectComplete" failed (expected: onComplete(); actual: onError(com.aerospike.client.AerospikeException: Error 200: Create index failed: FAIL:200: Index with the same name already exists or this bin has already been indexed.))
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$expectComplete$4(DefaultStepVerifierBuilder.java:245)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onError(DefaultStepVerifierBuilder.java:941)
    at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onError(MonoIgnoreElements.java:75)
    at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onError(MonoFlatMapMany.java:193)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:166)
    at com.aerospike.client.reactor.listeners.ReactorIndexListener.onFailure(ReactorIndexListener.java:23)
    at com.aerospike.client.AerospikeClient$1.onSuccess(AerospikeClient.java:2020)
    at com.aerospike.client.async.AsyncInfoCommand.onSuccess(AsyncInfoCommand.java:97)
    at com.aerospike.client.async.NettyCommand.finish(NettyCommand.java:737)
    at com.aerospike.client.async.NettyCommand.parseSingleBody(NettyCommand.java:526)
    at com.aerospike.client.async.NettyCommand.readSingleHeader(NettyCommand.java:507)
    at com.aerospike.client.async.NettyCommand.read(NettyCommand.java:391)
    at com.aerospike.client.async.NettyCommand.access$200(NettyCommand.java:57)
    at com.aerospike.client.async.NettyCommand$InboundHandler.channelRead(NettyCommand.java:940)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
    at java.lang.Thread.run(Thread.java:748)

Running com.aerospike.client.reactor.ReactorInfoTest
Tests run: 4, Failures: 3, Errors: 0, Skipped: 0, Time elapsed: 0.034 sec <<< FAILURE! - in com.aerospike.client.reactor.ReactorInfoTest
shouldFailOnUnknownCommand[eventLoopType=DIRECT_NIO](com.aerospike.client.reactor.ReactorInfoTest)  Time elapsed: 0.007 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectErrorMatches" failed (predicate failed on exception: com.aerospike.client.AerospikeException: Error -1: Unknown info command: [XXX])
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$expectErrorMatches$8(DefaultStepVerifierBuilder.java:321)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onError(DefaultStepVerifierBuilder.java:941)
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:135)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.success(MonoCreate.java:146)
    at com.aerospike.client.reactor.listeners.ReactorInfoListener.onSuccess(ReactorInfoListener.java:19)
    at com.aerospike.client.async.AsyncInfoCommand.onSuccess(AsyncInfoCommand.java:97)
    at com.aerospike.client.async.NioCommand.finish(NioCommand.java:718)
    at com.aerospike.client.async.NioCommand.readSingleBody(NioCommand.java:482)
    at com.aerospike.client.async.NioCommand.readSingleHeader(NioCommand.java:471)
    at com.aerospike.client.async.NioCommand.read(NioCommand.java:409)
    at com.aerospike.client.async.NioCommand.processEvent(NioCommand.java:276)
    at com.aerospike.client.async.NioEventLoop.runCommands(NioEventLoop.java:205)
    at com.aerospike.client.async.NioEventLoop.run(NioEventLoop.java:163)
    at java.lang.Thread.run(Thread.java:748)

shouldQueryInfoCommand[eventLoopType=NETTY_NIO](com.aerospike.client.reactor.ReactorInfoTest)  Time elapsed: 0.007 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectNext(test)" failed (expected: onNext(test); actual: onError(com.aerospike.client.AerospikeException$Parse: Error -2,1,1000,1000,2,inDoubt,BB96F695D290C00 172.16.70.185 3000: Invalid receive size: 16))
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$addExpectedValue$10(DefaultStepVerifierBuilder.java:410)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onError(DefaultStepVerifierBuilder.java:941)
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:165)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:166)
    at com.aerospike.client.reactor.listeners.ReactorInfoListener.onFailure(ReactorInfoListener.java:24)
    at com.aerospike.client.async.AsyncInfoCommand.onFailure(AsyncInfoCommand.java:104)
    at com.aerospike.client.async.NettyCommand.notifyFailure(NettyCommand.java:878)
    at com.aerospike.client.async.NettyCommand.onApplicationError(NettyCommand.java:864)
    at com.aerospike.client.async.NettyCommand$InboundHandler.exceptionCaught(NettyCommand.java:977)
    at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:285)
    at io.netty.channel.AbstractChannelHandlerContext.notifyHandlerException(AbstractChannelHandlerContext.java:850)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:364)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
    at java.lang.Thread.run(Thread.java:748)

shouldFailOnUnknownCommand[eventLoopType=NETTY_NIO](com.aerospike.client.reactor.ReactorInfoTest)  Time elapsed: 0.008 sec  <<< FAILURE!
java.lang.AssertionError: expectation "expectErrorMatches" failed (predicate failed on exception: com.aerospike.client.AerospikeException$Parse: Error -2,1,1000,1000,2,inDoubt,BB96F695D290C00 172.16.70.185 3000: Invalid receive size: 0)
    at reactor.test.DefaultStepVerifierBuilder.failPrefix(DefaultStepVerifierBuilder.java:2235)
    at reactor.test.DefaultStepVerifierBuilder.fail(DefaultStepVerifierBuilder.java:2231)
    at reactor.test.DefaultStepVerifierBuilder.lambda$expectErrorMatches$8(DefaultStepVerifierBuilder.java:321)
    at reactor.test.DefaultStepVerifierBuilder$SignalEvent.test(DefaultStepVerifierBuilder.java:1973)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1326)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1274)
    at reactor.test.DefaultStepVerifierBuilder$DefaultVerifySubscriber.onError(DefaultStepVerifierBuilder.java:941)
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:165)
    at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:166)
    at com.aerospike.client.reactor.listeners.ReactorInfoListener.onFailure(ReactorInfoListener.java:24)
    at com.aerospike.client.async.AsyncInfoCommand.onFailure(AsyncInfoCommand.java:104)
    at com.aerospike.client.async.NettyCommand.notifyFailure(NettyCommand.java:878)
    at com.aerospike.client.async.NettyCommand.onApplicationError(NettyCommand.java:864)
    at com.aerospike.client.async.NettyCommand$InboundHandler.exceptionCaught(NettyCommand.java:977)
    at io.netty.channel.AbstractChannelHandlerContext.invokeExceptionCaught(AbstractChannelHandlerContext.java:285)
    at io.netty.channel.AbstractChannelHandlerContext.notifyHandlerException(AbstractChannelHandlerContext.java:850)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:364)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
    at java.lang.Thread.run(Thread.java:748)

Running com.aerospike.client.reactor.ScanReactorFailTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.231 sec - in com.aerospike.client.reactor.ScanReactorFailTest
Running com.aerospike.client.reactor.ScanReactorTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.176 sec - in com.aerospike.client.reactor.ScanReactorTest
Running com.aerospike.client.reactor.UdfReactorFailTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.223 sec - in com.aerospike.client.reactor.UdfReactorFailTest
Running com.aerospike.client.reactor.UdfReactorTest
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.021 sec - in com.aerospike.client.reactor.UdfReactorTest

Results :

Failed tests: 
  ReactorIndexTest.shouldCreateAndDropIndex[eventLoopType=DIRECT_NIO] expectation "expectComplete" failed (expected: onComplete(); actual: onError(com.aerospike.client.AerospikeException: Error 200: Create index failed: FAIL:200: Index with the same name already exists or this bin has already been indexed.))
  ReactorIndexTest.shouldCreateAndDropIndex[eventLoopType=NETTY_NIO] expectation "expectComplete" failed (expected: onComplete(); actual: onError(com.aerospike.client.AerospikeException: Error 200: Create index failed: FAIL:200: Index with the same name already exists or this bin has already been indexed.))
  ReactorIndexTest.shouldFailCreateIndexIfAlreadyExists[eventLoopType=DIRECT_NIO] expectation "expectNext(false)" failed (expected value: false; actual value: true)
  ReactorIndexTest.shouldFailCreateIndexIfAlreadyExists[eventLoopType=NETTY_NIO] expectation "expectComplete" failed (expected: onComplete(); actual: onError(com.aerospike.client.AerospikeException: Error 200: Create index failed: FAIL:200: Index with the same name already exists or this bin has already been indexed.))
  ReactorInfoTest.shouldFailOnUnknownCommand[eventLoopType=DIRECT_NIO] expectation "expectErrorMatches" failed (predicate failed on exception: com.aerospike.client.AerospikeException: Error -1: Unknown info command: [XXX])
  ReactorInfoTest.shouldFailOnUnknownCommand[eventLoopType=NETTY_NIO] expectation "expectErrorMatches" failed (predicate failed on exception: com.aerospike.client.AerospikeException$Parse: Error -2,1,1000,1000,2,inDoubt,BB96F695D290C00 172.16.70.185 3000: Invalid receive size: 0)
  ReactorInfoTest.shouldQueryInfoCommand[eventLoopType=NETTY_NIO] expectation "expectNext(test)" failed (expected: onNext(test); actual: onError(com.aerospike.client.AerospikeException$Parse: Error -2,1,1000,1000,2,inDoubt,BB96F695D290C00 172.16.70.185 3000: Invalid receive size: 16))

Tests run: 78, Failures: 7, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  13.607 s
[INFO] Finished at: 2019-11-19T13:45:36-08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test (default-test) on project aerospike-reactor-client: There are test failures.
[ERROR] 
[ERROR] Please refer to /Users/bnichols/aerospike-client-java/extensions/reactor-client/target/surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
kptfh commented 4 years ago

Hi @BrianNichols . Can't fix ReactorInfoTest. It passes on DIRECT_NIO and fails on NETTY_NIO. Seems to be some low level error related to the command encoding. Can you help with it?

BrianNichols commented 4 years ago

The issues are:

1) Changing the index name on each test does not solve anything because it's illegal to have multiple indexes (with different names) on the same bin name.

2) The tests assume the index does not exist at first which may not be true. It's safer to always call dropIndex() at the beginning of each test and ignore the error if the index does not exist.

3) shouldFailCreateIndexIfAlreadyExists() does not drop the index at the end of the test. This causes the problem identified in #2.

4) There is a timing issue where dropIndex() says it's complete and then createIndex() complains that index already exists. If a sleep is added after the initial dropIndex(), the ReactorIndexTest tests run fine.

The sleep helps identify the problem, but the underlying timing problem still needs to be resolved. Either AsyncIndexTask.queryStatus() is not being called, or it returns incorrect or misinterpreted results.

Here is the current working ReactorIndexTest file (with sleep):

package com.aerospike.client.reactor;

import org.junit.Test;

import com.aerospike.client.AerospikeException;
import com.aerospike.client.query.IndexCollectionType;
import com.aerospike.client.query.IndexType;
import com.aerospike.client.reactor.util.Args;
import com.aerospike.client.util.Util;

import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;

public class ReactorIndexTest extends ReactorTest{

    public ReactorIndexTest(Args args) {
        super(args);
    }

    private static final String indexName = "test_index";

    @Test
    public void shouldCreateAndDropIndex() {
        reset();

        Mono<Boolean> indexExists = reactorClient.indexExists(null, args.namespace, indexName);
        StepVerifier.create(indexExists)
                .expectNext(false)
                .verifyComplete();

        Mono<Void> created = reactorClient.createIndex(null, args.namespace, args.set, indexName,
                args.getBinName("test"), IndexType.NUMERIC, IndexCollectionType.DEFAULT);

        StepVerifier.create(created)
                .verifyComplete();

        indexExists = reactorClient.indexExists(null, args.namespace, indexName);
        StepVerifier.create(indexExists)
                .expectNext(true)
                .verifyComplete();

        Mono<Void> dropped = reactorClient.dropIndex(null, args.namespace, args.set, indexName);
        StepVerifier.create(dropped)
                .verifyComplete();

        indexExists = reactorClient.indexExists(null, args.namespace, indexName);
        StepVerifier.create(indexExists)
                .expectNext(false)
                .verifyComplete();
    }

    @Test
    public void shouldFailCreateIndexIfAlreadyExists() {
        reset();

        Mono<Boolean> indexExists = reactorClient.indexExists(null, args.namespace, indexName);
        StepVerifier.create(indexExists)
                .expectNext(false)
                .verifyComplete();

        Mono<Void> created = reactorClient.createIndex(null, args.namespace, args.set, indexName,
                args.getBinName("test"), IndexType.NUMERIC, IndexCollectionType.DEFAULT);

        StepVerifier.create(created)
                .verifyComplete();

        created = reactorClient.createIndex(null, args.namespace, args.set, indexName,
                args.getBinName("test"), IndexType.NUMERIC, IndexCollectionType.DEFAULT);

        StepVerifier.create(created)
                .expectErrorMatches(throwable -> throwable instanceof AerospikeException
                        && throwable.getMessage().equals("Error 200: Create index failed: FAIL:200: Index with the same name already exists or this bin has already been indexed."))
                .verify();

        Mono<Void> dropped = reactorClient.dropIndex(null, args.namespace, args.set, indexName);
        StepVerifier.create(dropped)
                .verifyComplete();
    }

    @Test
    public void shouldFailDropIndexIfNotExists() {
        reset();

        Mono<Boolean> indexExists = reactorClient.indexExists(null, args.namespace, indexName);
        StepVerifier.create(indexExists)
                .expectNext(false)
                .verifyComplete();

        Mono<Void> dropped = reactorClient.dropIndex(null, args.namespace, args.set, indexName);

        StepVerifier.create(dropped)
                .expectErrorMatches(throwable -> throwable instanceof AerospikeException
                        && throwable.getMessage().equals("Error 201: Drop index failed: FAIL:201: Index does not exist on the system."))
                .verify();
    }

    private void reset() {
        Mono<Void> dropped = reactorClient.dropIndex(null, args.namespace, args.set, indexName);
        try {
            dropped.block();
        }
        catch (Exception e) {
        }
        Util.sleep(2000);  // TODO: Fix timing issue so this sleep can be removed.
    }
}
kptfh commented 4 years ago

Thank you for detailed answer. As for know all tests passes successfully. But there is still issue with ReactorInfoTest. It passes on DIRECT_NIO and fails on NETTY_NIO with

Error -2,1,1000,1000,2,inDoubt,BB9020011AC4202 127.0.0.1 3000: Invalid receive size: 16

And I can't figure out why.

BrianNichols commented 4 years ago

The problem is the index status info command "sindex/\<namespace>/\<indexname>" returns "FAIL:201" (index not found) when an existing index has been marked inactive, but not yet fully removed. sindex-create subsequently fails because the server is expecting the index to be fully removed.

I'm discussing possible solutions with the server team. This pull request will need to be delayed until the server issue is resolved.

kptfh commented 4 years ago

Quite strange. ReacorInfoTest that calls "namespaces" info command. It fails only on NETTY_NIO and passes on DIRECT_NIO. Can you have a look at ReacorInfoTest?

kptfh commented 4 years ago

In last commit I tried to fix issue with

Error -2,1,1000,1000,2,inDoubt,BB9020011AC4202 127.0.0.1 3000: Invalid receive size: 16

Please check it. I'm not 100% sure that it's an appropriate fix. As for now all tests pass locally.

BrianNichols commented 4 years ago

The tests may be passing for you, but the underlying index drop/create timing issue still exists and still occasionally fails for both DIRECT_NIO and NETTY_NIO.

The new "namespaces" info call breaks the current response size sanity check because it can return less than 22 bytes. This needs to be fixed in a way that preserves the sanity check for other responses while allowing small info responses.

I'm out next week. I will address both of these issues when I return.

BrianNichols commented 4 years ago

Further inspection has uncovered an issue. AsyncIndexTask queryStatus() seems to be called immediately after the create/drop index command and is then repeated without delay until all nodes are complete. This will spam the server with too many status checks for large indexes.

IndexTask queryStatus() is called after a default 1 second delay and can be repeated only after another default 1 second delay.

The server timing issue is far more prevalent in AsyncIndexTask because the initial delay does not exist. I couldn't even duplicate the server timing issue using IndexTask with the default delay. Only when having no delay will IndexTask expose the server timing issue.

The next server release will contain a new sindex-exists info command that the next client release will use to eliminate to server drop/create timing issue. Index tests have also been added to the AerospikeClient unit tests. The message size check will also be fixed in the next client release.

After the next client release, a modified pull request may be considered for the release after that. I have to ask this question: Why is it necessary to support async create/drop index?

It's my understanding that most indexes are created by admins in AQL and this is not part of the normal async workflow. Async create/drop index will not run any faster than the sync version.

kptfh commented 4 years ago

The only reason to have reactive methods to create/drop/status index is to eliminate the usage of blocking client at all in reactive code. I'd like to have an option to not have blocking client field at all so developer can't accidentally use blocking methods. Regarding delays (initial and on retries) it can be easily fixed.

kptfh commented 4 years ago

Please, tell me if I should add this fix (delays) in code.

BrianNichols commented 4 years ago

Go ahead and add the delays to the async index create/drop status tasks only. Drop the standalone indexExists code.

kptfh commented 4 years ago

Drop the standalone indexExists code.

This part is not clear for me

BrianNichols commented 4 years ago

Your pull request included new "AerospikeClient.indexExists()" methods. We have decided to not support those methods.

kptfh commented 4 years ago

@BrianNichols updated pr. But there is an issue with inconsistency between Netty and Nio while running unknown Info command Can you check it?

BrianNichols commented 4 years ago

In NettyCommand.java line 494, remove these lines:

    if (readableBytes <= 0) {
        command.dataOffset = 0;
        return;
    }

The server returns an empty string for an unknown info command. That size check does not work with the new async info command functionality. Empty responses are already allowed in sync and async NIO, so async Netty needs to be changed as well.

kptfh commented 4 years ago

Thank you. Done. All tests have successfully passed

BrianNichols commented 4 years ago

We will try to include this functionality in the next client release.

kptfh commented 4 years ago

Hi @BrianNichols. Please, update me when you will merge the pull request so I can continue with reactive query engine. Actually I have finished reactive query engine and just waiting for this pull request to be merged

BrianNichols commented 4 years ago

Java client 4.4.8 has been released with async index support.

https://www.aerospike.com/download/client/java/4.4.8/