use of org.apache.asterix.event.schema.cluster.Node in project asterixdb by apache.
the class AsterixInstance method addDetailedInformation.
private void addDetailedInformation(StringBuilder buffer) {
buffer.append("Master node:" + cluster.getMasterNode().getId() + ":" + cluster.getMasterNode().getClusterIp() + "\n");
for (Node node : cluster.getNode()) {
buffer.append(node.getId() + ":" + node.getClusterIp() + "\n");
}
if (backupInfo != null && backupInfo.size() > 0) {
for (BackupInfo info : backupInfo) {
buffer.append(info + "\n");
}
}
buffer.append("\n");
buffer.append("Asterix version:" + asterixVersion + "\n");
buffer.append("Metadata Node:" + metadataNodeId + "\n");
buffer.append("Processes" + "\n");
for (ProcessInfo pInfo : runtimeState.getProcesses()) {
buffer.append(pInfo + "\n");
}
buffer.append("\n");
buffer.append("Asterix Configuration\n");
int lenMax = 0;
for (Property property : asterixConfiguration.getProperty()) {
int nextLen = property.getName().length();
if (nextLen > lenMax) {
lenMax = nextLen;
}
}
for (Property property : asterixConfiguration.getProperty()) {
buffer.append(property.getName() + getIndentation(property.getName(), lenMax) + ":" + property.getValue() + "\n");
}
}
use of org.apache.asterix.event.schema.cluster.Node in project asterixdb by apache.
the class AsterixEventServiceUtil method createAsterixInstance.
public static AsterixInstance createAsterixInstance(String asterixInstanceName, Cluster cluster, AsterixConfiguration asterixConfiguration) throws IOException {
Node metadataNode = getMetadataNode(asterixInstanceName, cluster);
String asterixZipName = asterixZipName();
String asterixVersion = asterixZipName.substring("asterix-server-".length(), asterixZipName.indexOf("-binary-assembly"));
return new AsterixInstance(asterixInstanceName, cluster, asterixConfiguration, metadataNode.getId(), asterixVersion);
}
use of org.apache.asterix.event.schema.cluster.Node in project asterixdb by apache.
the class NCApplication method updateOnNodeJoin.
private void updateOnNodeJoin() {
MetadataProperties metadataProperties = runtimeContext.getMetadataProperties();
if (!metadataProperties.getNodeNames().contains(nodeId)) {
Cluster cluster = ClusterProperties.INSTANCE.getCluster();
if (cluster == null) {
throw new IllegalStateException("No cluster configuration found for this instance");
}
NCConfig ncConfig = ((NodeControllerService) ncServiceCtx.getControllerService()).getConfiguration();
ncConfig.getConfigManager().registerVirtualNode(nodeId);
String asterixInstanceName = metadataProperties.getInstanceName();
TransactionProperties txnProperties = runtimeContext.getTransactionProperties();
Node self = null;
List<Node> nodes;
if (cluster.getSubstituteNodes() != null) {
nodes = cluster.getSubstituteNodes().getNode();
} else {
throw new IllegalStateException("Unknown node joining the cluster");
}
for (Node node : nodes) {
String ncId = asterixInstanceName + "_" + node.getId();
if (ncId.equalsIgnoreCase(nodeId)) {
String storeDir = ClusterProperties.INSTANCE.getStorageDirectoryName();
String nodeIoDevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
String[] ioDevicePaths = nodeIoDevices.trim().split(",");
for (int i = 0; i < ioDevicePaths.length; i++) {
// construct full store path
ioDevicePaths[i] += File.separator + storeDir;
}
metadataProperties.getStores().put(nodeId, ioDevicePaths);
String coredumpPath = node.getLogDir() == null ? cluster.getLogDir() : node.getLogDir();
metadataProperties.getCoredumpPaths().put(nodeId, coredumpPath);
String txnLogDir = node.getTxnLogDir() == null ? cluster.getTxnLogDir() : node.getTxnLogDir();
txnProperties.getLogDirectories().put(nodeId, txnLogDir);
if (LOGGER.isLoggable(Level.INFO)) {
LOGGER.info("Store set to : " + storeDir);
LOGGER.info("Coredump dir set to : " + coredumpPath);
LOGGER.info("Transaction log dir set to :" + txnLogDir);
}
self = node;
break;
}
}
if (self != null) {
cluster.getSubstituteNodes().getNode().remove(self);
cluster.getNode().add(self);
} else {
throw new IllegalStateException("Unknown node joining the cluster");
}
}
}
use of org.apache.asterix.event.schema.cluster.Node in project asterixdb by apache.
the class ClusterLifecycleListener method executeWorkSet.
private void executeWorkSet(Set<IClusterManagementWork> workSet) {
int nodesToAdd = 0;
Set<String> nodesToRemove = new HashSet<>();
Set<AddNodeWork> nodeAdditionRequests = new HashSet<>();
Set<IClusterManagementWork> nodeRemovalRequests = new HashSet<>();
for (IClusterManagementWork w : workSet) {
switch(w.getClusterManagementWorkType()) {
case ADD_NODE:
if (nodesToAdd < ((AddNodeWork) w).getNumberOfNodesRequested()) {
nodesToAdd = ((AddNodeWork) w).getNumberOfNodesRequested();
}
nodeAdditionRequests.add((AddNodeWork) w);
break;
case REMOVE_NODE:
nodesToRemove.addAll(((RemoveNodeWork) w).getNodesToBeRemoved());
nodeRemovalRequests.add(w);
RemoveNodeWorkResponse response = new RemoveNodeWorkResponse((RemoveNodeWork) w, Status.IN_PROGRESS);
pendingWorkResponses.add(response);
break;
}
}
List<String> addedNodes = new ArrayList<>();
String asterixInstanceName = ClusterProperties.INSTANCE.getCluster().getInstanceName();
for (int i = 0; i < nodesToAdd; i++) {
Node node = ClusterStateManager.INSTANCE.getAvailableSubstitutionNode();
if (node != null) {
try {
ClusterManagerProvider.getClusterManager().addNode(appCtx, node);
addedNodes.add(asterixInstanceName + "_" + node.getId());
if (LOGGER.isLoggable(Level.INFO)) {
LOGGER.info("Added NC at:" + node.getId());
}
} catch (AsterixException e) {
if (LOGGER.isLoggable(Level.WARNING)) {
LOGGER.warning("Unable to add NC at:" + node.getId());
}
e.printStackTrace();
}
} else {
if (LOGGER.isLoggable(Level.WARNING)) {
LOGGER.warning("Unable to add NC: no more available nodes");
}
}
}
for (AddNodeWork w : nodeAdditionRequests) {
int n = w.getNumberOfNodesRequested();
List<String> nodesToBeAddedForWork = new ArrayList<>();
for (int i = 0; i < n && i < addedNodes.size(); i++) {
nodesToBeAddedForWork.add(addedNodes.get(i));
}
if (nodesToBeAddedForWork.isEmpty()) {
if (LOGGER.isLoggable(Level.INFO)) {
LOGGER.info("Unable to satisfy request by " + w);
}
AddNodeWorkResponse response = new AddNodeWorkResponse(w, nodesToBeAddedForWork);
response.setStatus(Status.FAILURE);
w.getSourceSubscriber().notifyRequestCompletion(response);
} else {
AddNodeWorkResponse response = new AddNodeWorkResponse(w, nodesToBeAddedForWork);
pendingWorkResponses.add(response);
}
}
}
use of org.apache.asterix.event.schema.cluster.Node in project asterixdb by apache.
the class EventUtil method getEventLocation.
public static Node getEventLocation(Pattern pattern, List<Node> candidateLocations, Cluster cluster) {
ValueType value = new ValueType(pattern.getEvent().getNodeid().getValue());
Node location = null;
Type vtype = value.getType();
switch(vtype) {
case ABS:
location = getNodeFromId(value.getAbsoluteValue(), cluster);
break;
case RANDOM_RANGE:
int nodeIndex = Randomizer.getInstance().getRandomInt(0, candidateLocations.size() - 1);
location = candidateLocations.get(nodeIndex);
break;
case RANDOM_MIN_MAX:
throw new IllegalStateException(" Canont configure a min max value range for location");
}
return location;
}
Aggregations