All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.aerospike.client.async.AsyncIndexTask Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2012-2021 Aerospike, Inc.
 *
 * Portions may be licensed to Aerospike, Inc. under one or more contributor
 * license agreements WHICH ARE COMPATIBLE WITH THE APACHE LICENSE, VERSION 2.0.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.aerospike.client.async;

import static com.aerospike.client.task.IndexTask.buildStatusCommand;
import static com.aerospike.client.task.IndexTask.parseStatusResponse;

import java.util.Map;

import com.aerospike.client.AerospikeException;
import com.aerospike.client.IAerospikeClient;
import com.aerospike.client.cluster.Node;
import com.aerospike.client.listener.InfoListener;
import com.aerospike.client.listener.TaskStatusListener;
import com.aerospike.client.policy.InfoPolicy;

/**
 * Async index task monitor.
 */
public class AsyncIndexTask {
	private final IAerospikeClient client;
	private final String namespace;
	private final String indexName;
	private final boolean isCreate;

	/**
	 * Initialize task with fields needed to query server nodes.
	 */
	public AsyncIndexTask(IAerospikeClient client, String namespace, String indexName, boolean isCreate) {
		this.client = client;
		this.namespace = namespace;
		this.indexName = indexName;
		this.isCreate = isCreate;
	}

	/**
	 * Asynchronously query node for task completion status.
	 * All nodes must respond with load_pct of 100 to be considered done.
	 */
	public void queryStatus(EventLoop eventLoop, InfoPolicy policy, Node node, TaskStatusListener listener) {
		if (client.getNodes().length == 0) {
			listener.onFailure(new AerospikeException("Cluster is empty"));
		}

		String command = buildStatusCommand(namespace, indexName);

		client.info(eventLoop, new InfoListener() {
			@Override
			public void onSuccess(Map map) {
				try {
					int status = parseStatusResponse(command, map.values().iterator().next(), isCreate);
					listener.onSuccess(status);
				}
				catch (AerospikeException ae) {
					listener.onFailure(ae);
				}
			}

			@Override
			public void onFailure(AerospikeException ae) {
				listener.onFailure(ae);
			}
		}, policy, node, command);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy