Help please related to java plugin eclipse, Executor class under aerospike.client.command package, waitTillComplete method

Some recommendation to help you with what to check -

  • Have you run the examples/src/com/aerospike/examples/AsyncScan.java?
  • Is that successful consistently?
  • Does your code follow the example?
  • Does it capture success/failure and do a notifyComplete()?

Good luck!

I understand this with an AsyncClient but I am trying to do it with a syncClient

am I suppose to use the AsyncClient?

could you please advise me on when to use the two different clients

regards

I am not able to run the AsyncScan.java!!!

AsyncScan isn’t really relevant here. I suggest setting “ScanPolicy.concurrentNodes = false” for your synchronous scan.

You do not need to run the AsyncClient. Best for you to stay using the syncClient.

Maybe you want to send your source code, and we can spot if there is anything incorrect with the source code.

okay Brian,

but now the control doesn’t proceed beyond the read

while (pos < length) {
			int count = bis.read(dataBuffer, pos, length - pos);

Please find the code below:

		// TODO Auto-generated method stub
		try {
			ScanPolicy policy = new ScanPolicy();
			policy.concurrentNodes = false;
			policy.priority = Priority.LOW;
			policy.includeBinData = true;
			pageTitlesSet = new HashSet<String>();
			pagesPerCount = new HashMap<Integer, Integer>();
			client.register(null, "udf/first.lua", "first.lua", Language.LUA);
			LuaConfig.SourceDirectory = "udf";
			client.scanAll(policy, "test", null, this);

		} finally {
			client.close();
		}

		System.out.println(pagesPerCount);

and as the class implements ScanCallback

	@Override
	public void scanCallback(Key key, Record record) throws AerospikeException {
		// TODO Auto-generated method stub
		// Query for the total count of page hits if the page_title(2nd Bin) of
		// the scanned record is not present in a local HashSet

		boolean added = pageTitlesSet.add(record.getString("page_title"));
		if (added == true) {
			getCount(sets, clienT, record.getString("page_title"));
		} else {
			System.out.println();
		}

	}

The buferf of bis (BufferedInputStream) has all values equal to 0

The server is not responding to the scan request. Are there any messages regarding the scan in the server log?

Also, it’s not clear why you are opening/closing the client just to run a scan. A single client instance should remain open for the duration of the program.

Do the scan examples in the examples directory work for you?

The server is not responding to the scan request. Are there any messages regarding the scan in the server log?

There are no messages regarding the scan in the server log

Also, it’s not clear why you are opening/closing the client just to run a scan.

I am just trying to scan all the records and in the scanCallBack function I am trying to output the records whose bin 2 starts with a specific sequence of characters

A single client instance should remain open for the duration of the program.

Sure, I am maintaining only a single instance of the client and the program ends after the scanAll, so I close the client at the end

Do the scan examples in the examples directory work for you?

NO!!!, they are stuck just like this program

Please find below a screen shot

Is the client on the same operating system instance as the server?

Is the server listening on port 3000?

Which server version are you using?

What type of data in located in namespace “test”/ set “zu”?

Can you send server configuration in “aerospike.conf”?

Is the client on the same operating system instance as the server?

yes

Is the server listening on port 3000?

yes

3.8.1

The data is as below

# Aerospike database configuration file.

# This stanza must come first.
service {
        user root
        group root
        paxos-single-replica-limit 1 # Number of nodes where the replica count is automatically reduced to 1.
        pidfile /var/run/aerospike/asd.pid
        service-threads 4
        transaction-queues 4
        transaction-threads-per-queue 4
        proto-fd-max 15000
}

logging {
        # Log file must be an absolute path.
        file /var/log/aerospike/aerospike.log {
                context any warning
                context any info
                context migrate debug
        }
        file /var/log/aerospike/udf.log {
                context any critical
                context udf info
                context aggr info
        }
}

network {
        service {
                address any
                port 3000
#                access-address 192.168.120.118
                access-address 127.0.0.1 virtual
        }

        heartbeat {
                mode multicast
                address 239.1.99.222
                port 9918

                # To use unicast-mesh heartbeats, comment out the 3 lines above and
                # use the following 4 lines instead.
#               mode mesh
#               port 3002
#               mesh-address 10.1.1.1
#               mesh-port 3002

                interval 150
                timeout 10
        }

        fabric {
                port 3001
        }

        info {
                port 3003
        }
}

#namespace test {
#       replication-factor 2
#       memory-size 4G
#       default-ttl 30d # 30 days, use 0 to never expire/evict.
#
#       storage-engine memory
#}

namespace test {
        replication-factor 2
        memory-size 2G
        default-ttl 5d # 5 days, use 0 to never expire/evict.

#       storage-engine memory

        # To use file storage backing, comment out the line above and use the
        # following lines instead.
        storage-engine device {
                file /opt/aerospike/data/test.dat
                filesize 5G
                data-in-memory true # Store data in memory in addition to file.
        }
}

Try the following command in aql:

aql> select * from test.zu 

This command will result in a scan from the C client. I assume this fails as well?

Are you using the server in a Docker container?

yes: I am using a vagrant box with CentOS/aerospike-6.5

Another command you can use to help you troubleshoot is to do “show scans”, which will give the state of the scan done by the database, weather done through java or aql.

Do any java client examples in the demo application work?

Yes all the others except for these scans

guidance please

I am still stuck at

The control doesnt come out of

while (pos < length) {
			int count = bis.read(dataBuffer, pos, length - pos);

!!!

It’s not clear what is really happening in your case. There is some sort of networking issue going on. I suggest adding logging statements in the client code to obtain more information about cause of failure and run packaged scan example.

For example:

MultiCommand.java: in readBytes() add

    Log.info("readBytes " + length);

Connection.java: right before socket.connect() add

    Log.info("Connect " + address);

Node.java: in getConnection() change first block to following:

    Log.info("getConnection " + timeoutMillis);
    while ((conn = connectionQueue.poll()) != null) {        
        if (conn.isValid()) {
            try {
                conn.setTimeout(timeoutMillis);
                Log.info("found connection " + conn);
                return conn;
            }
            catch (Exception e) {
                // Set timeout failed. Something is probably wrong with timeout
                // value itself, so don't empty queue retrying.  Just get out.
                Log.info("connection failed " + conn);
                closeConnection(conn);
                throw new AerospikeException.Connection(e);
            }
        }
        Log.info("connection not valid " + conn);
        closeConnection(conn);
    }
    Log.info("create connection");