diff --git a/proxy/pom.xml b/proxy/pom.xml
index 84c64ea2d..319cb25cc 100644
--- a/proxy/pom.xml
+++ b/proxy/pom.xml
@@ -22,7 +22,7 @@
com.aerospike
aerospike-proxy-stub
- 1.0.1
+ 1.0.2-SNAPSHOT
diff --git a/proxy/src/com/aerospike/client/proxy/AerospikeClientProxy.java b/proxy/src/com/aerospike/client/proxy/AerospikeClientProxy.java
index 889e1c502..eaef8d072 100644
--- a/proxy/src/com/aerospike/client/proxy/AerospikeClientProxy.java
+++ b/proxy/src/com/aerospike/client/proxy/AerospikeClientProxy.java
@@ -2536,7 +2536,11 @@ public void dropIndex(
*/
@Override
public void info(EventLoop eventLoop, InfoListener listener, InfoPolicy policy, Node node, String... commands) {
- throw new AerospikeException(NotSupported + "info");
+ if (policy == null) {
+ policy = infoPolicyDefault;
+ }
+ InfoCommandProxy infoCommand = new InfoCommandProxy(executor, listener, policy, commands);
+ infoCommand.execute();
}
//-----------------------------------------------------------------
diff --git a/proxy/src/com/aerospike/client/proxy/InfoCommandProxy.java b/proxy/src/com/aerospike/client/proxy/InfoCommandProxy.java
new file mode 100644
index 000000000..a5e352d4f
--- /dev/null
+++ b/proxy/src/com/aerospike/client/proxy/InfoCommandProxy.java
@@ -0,0 +1,86 @@
+package com.aerospike.client.proxy;
+
+import com.aerospike.client.AerospikeException;
+import com.aerospike.client.Info;
+import com.aerospike.client.ResultCode;
+import com.aerospike.client.cluster.Node;
+import com.aerospike.client.command.Command;
+import com.aerospike.client.listener.InfoListener;
+import com.aerospike.client.policy.InfoPolicy;
+import com.aerospike.client.policy.Policy;
+import com.aerospike.client.policy.ScanPolicy;
+import com.aerospike.client.proxy.grpc.GrpcCallExecutor;
+import com.aerospike.client.proxy.grpc.GrpcConversions;
+import com.aerospike.proxy.client.Kvs;
+import com.aerospike.proxy.client.InfoGrpc;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class InfoCommandProxy extends SingleCommandProxy {
+
+ private final InfoListener listener;
+ private final String[] commands;
+ private Map map;
+
+ private final InfoPolicy infoPolicy;
+
+ public InfoCommandProxy(GrpcCallExecutor executor, InfoListener listener, InfoPolicy policy, String... commands) {
+ super(InfoGrpc.getInfoMethod(), executor, createPolicy(policy));
+ this.infoPolicy = policy;
+ this.listener = listener;
+ this.commands = commands;
+ }
+
+ private static Policy createPolicy(InfoPolicy policy) {
+ Policy p = new Policy();
+
+ if (policy == null) {
+ p.setTimeout(1000);
+ }
+ else {
+ p.setTimeout(policy.timeout);
+ }
+ return p;
+ }
+
+ @Override
+ Kvs.AerospikeRequestPayload.Builder getRequestBuilder() {
+ Kvs.AerospikeRequestPayload.Builder builder = Kvs.AerospikeRequestPayload.newBuilder();
+ Kvs.InfoRequest.Builder infoRequestBuilder = Kvs.InfoRequest.newBuilder();
+
+ if(commands != null){
+ for(String command: commands){
+ infoRequestBuilder.addCommands(command);
+ }
+ }
+ infoRequestBuilder.setInfoPolicy(GrpcConversions.toGrpc(infoPolicy));
+ builder.setInfoRequest(infoRequestBuilder.build());
+ return builder;
+ }
+
+ @Override
+ void writeCommand(Command command) {
+ // Nothing to do since there is no Aerospike payload.
+ }
+
+ @Override
+ void onFailure(AerospikeException ae) {
+ listener.onFailure(ae);
+ }
+
+ @Override
+ void parseResult(Parser parser) {
+ int resultCode = parser.parseResultCode();
+ if (resultCode != ResultCode.OK) {
+ throw new AerospikeException(resultCode);
+ }
+ Map infoCommandResponse = parser.parseInfoResult();
+ try {
+ listener.onSuccess(infoCommandResponse);
+ }
+ catch (Throwable t) {
+ logOnSuccessError(t);
+ }
+ }
+}
diff --git a/proxy/src/com/aerospike/client/proxy/Parser.java b/proxy/src/com/aerospike/client/proxy/Parser.java
index 940c6f82d..dd3a47c59 100644
--- a/proxy/src/com/aerospike/client/proxy/Parser.java
+++ b/proxy/src/com/aerospike/client/proxy/Parser.java
@@ -16,18 +16,16 @@
*/
package com.aerospike.client.proxy;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.zip.DataFormatException;
import java.util.zip.Inflater;
+import com.aerospike.client.*;
+import com.aerospike.client.Record;
import org.luaj.vm2.LuaValue;
-import com.aerospike.client.AerospikeException;
-import com.aerospike.client.Key;
-import com.aerospike.client.Record;
-import com.aerospike.client.ResultCode;
-import com.aerospike.client.Value;
import com.aerospike.client.command.Buffer;
import com.aerospike.client.command.Command;
import com.aerospike.client.command.Command.OpResults;
@@ -172,6 +170,15 @@ public Key parseKey(BVal bVal) {
return new Key(namespace, digest, setName, userKey);
}
+ public Map parseInfoResult(){
+ HashMap responses;
+ Info info = new Info(buffer, receiveSize);
+ responses = info.parseMultiResponse();
+ return responses;
+ }
+
+
+
public Record parseRecord(boolean isOperation) {
Map bins = new LinkedHashMap<>();
diff --git a/proxy/src/com/aerospike/client/proxy/grpc/GrpcConversions.java b/proxy/src/com/aerospike/client/proxy/grpc/GrpcConversions.java
index 33c7fa1c3..6f1c6e140 100644
--- a/proxy/src/com/aerospike/client/proxy/grpc/GrpcConversions.java
+++ b/proxy/src/com/aerospike/client/proxy/grpc/GrpcConversions.java
@@ -20,11 +20,7 @@
import com.aerospike.client.Operation;
import com.aerospike.client.ResultCode;
import com.aerospike.client.Value;
-import com.aerospike.client.policy.Policy;
-import com.aerospike.client.policy.QueryDuration;
-import com.aerospike.client.policy.QueryPolicy;
-import com.aerospike.client.policy.ScanPolicy;
-import com.aerospike.client.policy.WritePolicy;
+import com.aerospike.client.policy.*;
import com.aerospike.client.query.Filter;
import com.aerospike.client.query.PartitionFilter;
import com.aerospike.client.query.PartitionStatus;
@@ -139,6 +135,12 @@ public static Kvs.QueryPolicy toGrpc(QueryPolicy queryPolicy) {
return queryPolicyBuilder.build();
}
+ public static Kvs.InfoPolicy toGrpc(InfoPolicy infoPolicy){
+ Kvs.InfoPolicy.Builder infoPolicyBuilder = Kvs.InfoPolicy.newBuilder();
+ infoPolicyBuilder.setTimeout(infoPolicy.timeout);
+ return infoPolicyBuilder.build();
+ }
+
/**
* Convert a value to packed bytes.
*