Search in sources :

Example 36 with Node

use of org.apache.asterix.event.schema.cluster.Node in project asterixdb by apache.

the class AsterixEventServiceUtil method getMetadataNode.

private static Node getMetadataNode(String asterixInstanceName, Cluster cluster) {
    Node metadataNode = null;
    if (cluster.getMetadataNode() != null) {
        for (Node node : cluster.getNode()) {
            if (node.getId().equals(cluster.getMetadataNode())) {
                metadataNode = node;
                break;
            }
        }
    } else {
        Random random = new Random();
        int nNodes = cluster.getNode().size();
        metadataNode = cluster.getNode().get(random.nextInt(nNodes));
    }
    return metadataNode;
}
Also used : Random(java.util.Random) Node(org.apache.asterix.event.schema.cluster.Node)

Example 37 with Node

use of org.apache.asterix.event.schema.cluster.Node in project asterixdb by apache.

the class ReplicationManager method sendShutdownNotifiction.

/**
     * Sends a shutdown event to remote replicas notifying them
     * no more logs/files will be sent from this local replica.
     *
     * @throws IOException
     */
private void sendShutdownNotifiction() throws IOException {
    Node node = new Node();
    node.setId(nodeId);
    node.setClusterIp(NetworkingUtil.getHostAddress(hostIPAddressFirstOctet));
    Replica replica = new Replica(node);
    ReplicaEvent event = new ReplicaEvent(replica, ClusterEventType.NODE_SHUTTING_DOWN);
    ByteBuffer buffer = ReplicationProtocol.writeReplicaEventRequest(event);
    Map<String, SocketChannel> replicaSockets = getActiveRemoteReplicasSockets();
    sendRequest(replicaSockets, buffer);
    closeReplicaSockets(replicaSockets);
}
Also used : SocketChannel(java.nio.channels.SocketChannel) Node(org.apache.asterix.event.schema.cluster.Node) Replica(org.apache.asterix.common.replication.Replica) ReplicaEvent(org.apache.asterix.common.replication.ReplicaEvent) ByteBuffer(java.nio.ByteBuffer)

Example 38 with Node

use of org.apache.asterix.event.schema.cluster.Node in project asterixdb by apache.

the class ValidateConfig method validateCluster.

public boolean validateCluster(String clusterPath) throws Exception {
    boolean valid = true;
    Cluster cluster = null;
    File f = new File(clusterPath);
    List<String> ipAddresses = new ArrayList<String>();
    if (!f.exists() || !f.isFile()) {
        LOGGER.error(" Invalid path " + f.getAbsolutePath() + ERROR);
        valid = false;
    } else {
        cluster = EventUtil.getCluster(clusterPath);
        valid = valid & validateClusterProperties(cluster);
        Set<String> servers = new HashSet<String>();
        Set<String> serverIds = new HashSet<String>();
        servers.add(cluster.getMasterNode().getClusterIp());
        serverIds.add(cluster.getMasterNode().getId());
        MasterNode masterNode = cluster.getMasterNode();
        Node master = new Node(masterNode.getId(), masterNode.getClusterIp(), masterNode.getJavaHome(), masterNode.getLogDir(), null, null, null, null);
        ipAddresses.add(masterNode.getClusterIp());
        valid = valid & validateNodeConfiguration(master, cluster);
        for (Node node : cluster.getNode()) {
            servers.add(node.getClusterIp());
            if (serverIds.contains(node.getId())) {
                valid = false;
                LOGGER.error("Duplicate node id :" + node.getId() + ERROR);
            } else {
                valid = valid & validateNodeConfiguration(node, cluster);
                if (!ipAddresses.contains(node.getClusterIp())) {
                    ipAddresses.add(node.getClusterIp());
                }
            }
        }
        valid = valid & validateReplicationProperties(cluster);
    }
    if (valid) {
        String username = cluster.getUsername();
        if (username == null) {
            username = System.getProperty("user.name");
        }
        valid = checkPasswordLessSSHLogin(username, ipAddresses);
    }
    return valid;
}
Also used : MasterNode(org.apache.asterix.event.schema.cluster.MasterNode) Node(org.apache.asterix.event.schema.cluster.Node) MasterNode(org.apache.asterix.event.schema.cluster.MasterNode) ArrayList(java.util.ArrayList) Cluster(org.apache.asterix.event.schema.cluster.Cluster) File(java.io.File) HashSet(java.util.HashSet)

Example 39 with Node

use of org.apache.asterix.event.schema.cluster.Node in project asterixdb by apache.

the class StartNodeConfig method execCommand.

@Override
protected void execCommand() throws Exception {
    InstallerDriver.initConfig(true);
    String asterixInstanceName = ((StartNodeConfig) config).name;
    AsterixInstance instance = AsterixEventServiceUtil.validateAsterixInstanceExists(asterixInstanceName, State.INACTIVE, State.ACTIVE, State.UNUSABLE);
    Cluster cluster = instance.getCluster();
    List<Pattern> pl = new ArrayList<Pattern>();
    AsterixRuntimeState runtimeState = VerificationUtil.getAsterixRuntimeState(instance);
    String[] nodesToBeAdded = ((StartNodeConfig) config).nodes.split(",");
    List<String> aliveNodes = new ArrayList<String>();
    for (ProcessInfo p : runtimeState.getProcesses()) {
        aliveNodes.add(p.getNodeId());
    }
    List<Node> clusterNodes = cluster.getNode();
    for (String n : nodesToBeAdded) {
        if (aliveNodes.contains(n)) {
            throw new InstallerException("Node: " + n + " is already alive");
        }
        for (Node node : clusterNodes) {
            if (n.equals(node.getId())) {
                String iodevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
                Pattern createNC = PatternCreator.INSTANCE.createNCStartPattern(cluster.getMasterNode().getClusterIp(), node.getId(), asterixInstanceName + "_" + node.getId(), iodevices, false);
                pl.add(createNC);
                break;
            }
        }
    }
    Patterns patterns = new Patterns(pl);
    AsterixEventServiceClient client = AsterixEventService.getAsterixEventServiceClient(cluster);
    client.submit(patterns);
    runtimeState = VerificationUtil.getAsterixRuntimeState(instance);
    VerificationUtil.updateInstanceWithRuntimeDescription(instance, runtimeState, true);
    LOGGER.info(instance.getDescription(false));
    ServiceProvider.INSTANCE.getLookupService().updateAsterixInstance(instance);
}
Also used : Pattern(org.apache.asterix.event.schema.pattern.Pattern) Node(org.apache.asterix.event.schema.cluster.Node) ArrayList(java.util.ArrayList) Cluster(org.apache.asterix.event.schema.cluster.Cluster) ProcessInfo(org.apache.asterix.event.model.ProcessInfo) AsterixEventServiceClient(org.apache.asterix.event.management.AsterixEventServiceClient) AsterixInstance(org.apache.asterix.event.model.AsterixInstance) InstallerException(org.apache.asterix.installer.error.InstallerException) AsterixRuntimeState(org.apache.asterix.event.model.AsterixRuntimeState) Patterns(org.apache.asterix.event.schema.pattern.Patterns)

Example 40 with Node

use of org.apache.asterix.event.schema.cluster.Node in project asterixdb by apache.

the class StopConfig method execCommand.

@Override
protected void execCommand() throws Exception {
    InstallerDriver.initConfig(true);
    String asterixInstanceName = ((StopConfig) config).name;
    AsterixInstance asterixInstance = AsterixEventServiceUtil.validateAsterixInstanceExists(asterixInstanceName, State.ACTIVE, State.UNUSABLE);
    AsterixEventServiceClient client = AsterixEventService.getAsterixEventServiceClient(asterixInstance.getCluster());
    List<Pattern> ncKillPatterns = new ArrayList<Pattern>();
    for (Node node : asterixInstance.getCluster().getNode()) {
        ncKillPatterns.add(PatternCreator.INSTANCE.createNCStopPattern(node.getId(), asterixInstanceName + "_" + node.getId()));
    }
    List<Pattern> ccKillPatterns = new ArrayList<Pattern>();
    ccKillPatterns.add(PatternCreator.INSTANCE.createCCStopPattern(asterixInstance.getCluster().getMasterNode().getId()));
    try {
        client.submit(new Patterns(ncKillPatterns));
        client.submit(new Patterns(ccKillPatterns));
    } catch (Exception e) {
        // processes are already dead
        LOGGER.debug("Attempt to kill non-existing processess");
    }
    asterixInstance.setState(State.INACTIVE);
    asterixInstance.setStateChangeTimestamp(new Date());
    ServiceProvider.INSTANCE.getLookupService().updateAsterixInstance(asterixInstance);
    LOGGER.info("Stopped Asterix instance: " + asterixInstanceName);
}
Also used : Pattern(org.apache.asterix.event.schema.pattern.Pattern) AsterixEventServiceClient(org.apache.asterix.event.management.AsterixEventServiceClient) Node(org.apache.asterix.event.schema.cluster.Node) ArrayList(java.util.ArrayList) AsterixInstance(org.apache.asterix.event.model.AsterixInstance) Patterns(org.apache.asterix.event.schema.pattern.Patterns) Date(java.util.Date)

Aggregations

Node (org.apache.asterix.event.schema.cluster.Node)43 ArrayList (java.util.ArrayList)29 Pattern (org.apache.asterix.event.schema.pattern.Pattern)21 Patterns (org.apache.asterix.event.schema.pattern.Patterns)21 Cluster (org.apache.asterix.event.schema.cluster.Cluster)20 Nodeid (org.apache.asterix.event.schema.pattern.Nodeid)16 Value (org.apache.asterix.event.schema.pattern.Value)16 Event (org.apache.asterix.event.schema.pattern.Event)15 File (java.io.File)5 HashSet (java.util.HashSet)5 AsterixInstance (org.apache.asterix.event.model.AsterixInstance)5 FileOutputStream (java.io.FileOutputStream)3 JAXBContext (javax.xml.bind.JAXBContext)3 Marshaller (javax.xml.bind.Marshaller)3 AsterixEventServiceClient (org.apache.asterix.event.management.AsterixEventServiceClient)3 AsterixRuntimeState (org.apache.asterix.event.model.AsterixRuntimeState)3 ProcessInfo (org.apache.asterix.event.model.ProcessInfo)3 Date (java.util.Date)2 IClusterManagementWork (org.apache.asterix.common.api.IClusterManagementWork)2 AsterixException (org.apache.asterix.common.exceptions.AsterixException)2