Search in sources :

Example 1 with IMQConnection

use of com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection in project openmq by eclipse-ee4j.

the class GetConsumersHandler method getConnectionInfo.

public static ConnectionInfo getConnectionInfo(long id) {
    ConnectionManager cm = Globals.getConnectionManager();
    ConnectionInfo cxnInfo = null;
    IMQConnection cxn = null;
    cxn = (IMQConnection) cm.getConnection(new ConnectionUID(id));
    if (cxn == null) {
        return (null);
    }
    cxnInfo = cxn.getConnectionInfo();
    return (cxnInfo);
}
Also used : ConnectionManager(com.sun.messaging.jmq.jmsserver.service.ConnectionManager) IMQConnection(com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection) ConnectionUID(com.sun.messaging.jmq.jmsserver.service.ConnectionUID) ConnectionInfo(com.sun.messaging.jmq.util.admin.ConnectionInfo)

Example 2 with IMQConnection

use of com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection in project openmq by eclipse-ee4j.

the class DebugHandler method getPktInfo.

private Hashtable getPktInfo(String target, String type, boolean full) throws Exception {
    Hashtable ht = new Hashtable();
    if (type == null || type.length() == 0 || type.equals("bkr")) {
        Hashtable dest = new Hashtable();
        Iterator[] itrs = DL.getAllDestinations(null);
        Iterator itr = itrs[0];
        while (itr.hasNext()) {
            Destination d = (Destination) itr.next();
            dest.put(d.getDestinationUID().toString(), d.getDebugMessages(full));
        }
        ht.put("Destinations", dest);
    // XXX LKS 1/8/2004
    // add entries for sessions, etc
    // 
    } else if (type.equals("q") || type.equals("t")) {
        boolean isQueue = false;
        if (type.equals("t")) {
            isQueue = false;
        } else if (type.equals("q")) {
            isQueue = true;
        }
        DestinationUID uid = DestinationUID.getUID(target, isQueue);
        Destination[] ds = DL.getDestination(null, uid);
        Destination d = ds[0];
        if (d == null) {
            throw new Exception("Unknown destination " + uid);
        } else {
            ht.putAll(d.getDebugMessages(full));
        }
    } else if (type.equals("con")) {
        if (target == null) {
            throw new Exception("Please specify consumerUID");
        } else {
            ConsumerUID uid = new ConsumerUID(Long.parseLong(target));
            Consumer c = Consumer.getConsumer(uid);
            if (c == null) {
                throw new Exception("Unknown consumer " + uid);
            } else {
                ht.put(uid.toString(), c.getDebugMessages(full));
            }
        }
    } else if (type.equals("cxn")) {
        if (target == null) {
            throw new Exception("Please specify connectionUID");
        }
        ConnectionUID uid = new ConnectionUID(Long.parseLong(target));
        IMQConnection cxn = (IMQConnection) Globals.getConnectionManager().getConnection(uid);
        if (cxn == null) {
            throw new Exception("Can not find connection " + uid);
        }
        ht.put(target, cxn.getDebugMessages(full));
    } else if (type.equals("ses")) {
        ht.put("Dump acks ", target);
        if (target == null) {
            throw new Exception("Please specify SessionUID");
        }
        SessionUID uid = new SessionUID(Long.parseLong(target));
        Session sess = Session.getSession(uid);
        if (sess == null) {
            throw new Exception("Can not find session " + uid);
        }
        ht.put(target, sess.getDebugMessages(full));
    } else {
        ht.put("Error", "Unknown pkt type " + type);
    }
    return ht;
}
Also used : Destination(com.sun.messaging.jmq.jmsserver.core.Destination) DestinationUID(com.sun.messaging.jmq.jmsserver.core.DestinationUID) Consumer(com.sun.messaging.jmq.jmsserver.core.Consumer) ConsumerUID(com.sun.messaging.jmq.jmsserver.core.ConsumerUID) IMQConnection(com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection) SessionUID(com.sun.messaging.jmq.jmsserver.core.SessionUID) Hashtable(java.util.Hashtable) Iterator(java.util.Iterator) ConnectionUID(com.sun.messaging.jmq.jmsserver.service.ConnectionUID) Session(com.sun.messaging.jmq.jmsserver.core.Session)

Example 3 with IMQConnection

use of com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection in project openmq by eclipse-ee4j.

the class ConnectionUtil method getProducerIDs.

public static List getProducerIDs(long cxnId) {
    ConnectionManager cm = Globals.getConnectionManager();
    IMQConnection cxn = null;
    List producerIDs;
    cxn = (IMQConnection) cm.getConnection(new ConnectionUID(cxnId));
    producerIDs = cxn.getProducerIDs();
    return (producerIDs);
}
Also used : ConnectionManager(com.sun.messaging.jmq.jmsserver.service.ConnectionManager) IMQConnection(com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection) List(java.util.List) ArrayList(java.util.ArrayList) ConnectionUID(com.sun.messaging.jmq.jmsserver.service.ConnectionUID)

Example 4 with IMQConnection

use of com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection in project openmq by eclipse-ee4j.

the class ConnectionUtil method destroyConnection.

public static void destroyConnection(long cxnId, String reasonString) {
    ConnectionManager cm = Globals.getConnectionManager();
    IMQConnection cxn = null;
    cxn = (IMQConnection) cm.getConnection(new ConnectionUID(cxnId));
    if (cxn != null) {
        cxn.destroyConnection(true, GoodbyeReason.ADMIN_KILLED_CON, reasonString);
    }
}
Also used : ConnectionManager(com.sun.messaging.jmq.jmsserver.service.ConnectionManager) IMQConnection(com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection) ConnectionUID(com.sun.messaging.jmq.jmsserver.service.ConnectionUID)

Example 5 with IMQConnection

use of com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection in project openmq by eclipse-ee4j.

the class MigrateStoreHandler method handle.

/**
 * Handle the incomming administration message.
 *
 * @param con The Connection the message came in on.
 * @param cmd_msg The administration message
 * @param cmd_props The properties from the administration message
 */
@Override
public boolean handle(IMQConnection con, Packet cmd_msg, Hashtable cmd_props) {
    boolean noop = true;
    int status = Status.OK;
    String errMsg = "";
    if (DEBUG) {
        logger.log(Logger.INFO, this.getClass().getName() + ": " + "Request migrate this broker''s store: " + cmd_props);
    }
    String brokerID = (String) cmd_props.get(MessageType.JMQ_BROKER_ID);
    String partition = (String) cmd_props.get(MessageType.JMQ_MIGRATESTORE_PARTITION);
    if (partition == null) {
        if (brokerID != null) {
            logger.log(Logger.INFO, BrokerResources.I_ADMIN_MIGRATESTORE_TO, brokerID);
        } else {
            logger.log(Logger.INFO, BrokerResources.I_ADMIN_MIGRATESTORE);
        }
    } else {
        logger.log(Logger.INFO, "XXXAdmin request migrate this broker's store partition " + partition + " to broker " + brokerID);
    }
    HAMonitorService hamonitor = Globals.getHAMonitorService();
    if (hamonitor != null && hamonitor.inTakeover()) {
        status = Status.NOT_MODIFIED;
        errMsg = rb.getString(rb.E_CANNOT_PROCEED_TAKEOVER_IN_PROCESS);
        logger.log(Logger.ERROR, this.getClass().getName() + ": " + errMsg);
    }
    if (status == Status.OK) {
        if (partition == null && Globals.getHAEnabled()) {
            status = Status.NOT_MODIFIED;
            errMsg = rb.getKString(rb.E_OPERATION_NOT_SUPPORTED_IN_HA, MessageType.getString(MessageType.MIGRATESTORE_BROKER));
            logger.log(Logger.ERROR, errMsg);
        }
    }
    if (status == Status.OK) {
        if (Globals.isJMSRAManagedBroker()) {
            status = Status.NOT_MODIFIED;
            errMsg = "Can not process migration store request because this broker's life cycle is JMSRA managed";
            logger.log(Logger.ERROR, this.getClass().getName() + ": " + errMsg);
        }
    }
    UID partitionID = null;
    if (status == Status.OK) {
        if (partition != null) {
            try {
                long v = Long.parseLong(partition);
                partitionID = new UID(v);
            } catch (Exception e) {
                partitionID = null;
                status = Status.NOT_MODIFIED;
                errMsg = "XXXCan not process migration partition " + partition + " request because unable to parse " + partition + ": " + e;
                logger.log(Logger.ERROR, errMsg);
            }
        }
    }
    if (status == Status.OK) {
        if (partitionID != null && brokerID == null) {
            status = Status.NOT_MODIFIED;
            errMsg = "XXXCan not process migration partition " + partitionID + " request because brokerID not specified";
            logger.log(Logger.ERROR, errMsg);
        }
    }
    if (status == Status.OK) {
        if (partitionID != null && !(DL.isPartitionMode() && DL.isPartitionMigratable())) {
            status = Status.NOT_MODIFIED;
            errMsg = "XXXCan not process migration partition " + partitionID + " request because partition mode not enabled";
            logger.log(Logger.ERROR, errMsg);
        }
    }
    if (status == Status.OK) {
        if (partitionID != null) {
            DestinationList dl = DL.getDestinationList(partitionID);
            if (dl == null) {
                status = Status.NOT_MODIFIED;
                errMsg = "XXXCan not process migration partition " + partitionID + " request because partition " + partitionID + " not found";
                logger.log(Logger.ERROR, errMsg);
            } else if (dl.getPartitionedStore().isPrimaryPartition()) {
                status = Status.NOT_MODIFIED;
                errMsg = "XXXCan not process migration partition " + partitionID + " request because partition " + partitionID + " is the primary partition";
                logger.log(Logger.ERROR, errMsg);
            }
        }
    }
    if (status == Status.OK) {
        if (brokerID == null) {
            try {
                brokerID = getBrokerID();
            } catch (Throwable t) {
                status = Status.NOT_MODIFIED;
                errMsg = "Unable to get a connected broker to takeover this broker's store: " + t.getMessage();
                if ((t instanceof OperationNotAllowedException) && ((OperationNotAllowedException) t).getOperation().equals(MessageType.getString(MessageType.MIGRATESTORE_BROKER))) {
                    logger.log(logger.ERROR, errMsg);
                } else {
                    logger.logStack(logger.ERROR, errMsg, t);
                }
            }
        }
    }
    if (status != Status.OK) {
        sendReply(con, cmd_msg, brokerID, null, errMsg, status, null);
        return true;
    }
    try {
        BrokerStateHandler.setExclusiveRequestLock(ExclusiveRequest.MIGRATE_STORE);
    } catch (Throwable t) {
        status = Status.PRECONDITION_FAILED;
        if (t instanceof BrokerException) {
            status = ((BrokerException) t).getStatusCode();
        }
        errMsg = MessageType.getString(MessageType.MIGRATESTORE_BROKER) + ": " + Status.getString(status) + " - " + t.getMessage();
        logger.log(Logger.ERROR, errMsg);
        status = Status.NOT_MODIFIED;
    }
    try {
        if (partitionID != null) {
            migratePartition(con, cmd_msg, partitionID, brokerID);
            return true;
        }
        Long syncTimeout = null;
        final BrokerStateHandler bsh = Globals.getBrokerStateHandler();
        if (status == Status.OK) {
            try {
                syncTimeout = (Long) cmd_props.get(MessageType.JMQ_MIGRATESTORE_SYNC_TIMEOUT);
                ClusterManager cm = Globals.getClusterManager();
                BrokerMQAddress self = (BrokerMQAddress) cm.getMQAddress();
                BrokerMQAddress master = (cm.getMasterBroker() == null ? null : (BrokerMQAddress) cm.getMasterBroker().getBrokerURL());
                if (self.equals(master)) {
                    throw new BrokerException(rb.getKString(rb.E_CHANGE_MASTER_BROKER_FIRST, MessageType.getString(MessageType.MIGRATESTORE_BROKER)), Status.NOT_ALLOWED);
                }
            } catch (Throwable t) {
                status = Status.PRECONDITION_FAILED;
                if (t instanceof BrokerException) {
                    status = ((BrokerException) t).getStatusCode();
                }
                errMsg = MessageType.getString(MessageType.MIGRATESTORE_BROKER) + ": " + Status.getString(status) + " - " + t.getMessage();
                logger.log(Logger.ERROR, errMsg);
                status = Status.NOT_MODIFIED;
            }
        }
        SysMessageID replyMessageID = null;
        String replyStatusStr = null;
        try {
            // shutdown if !noop
            String hostport = null;
            if (status == Status.OK) {
                try {
                    noop = false;
                    hostport = bsh.takeoverME(brokerID, syncTimeout, con);
                } catch (BrokerException ex) {
                    status = ex.getStatusCode();
                    if (status == Status.BAD_REQUEST || status == Status.NOT_ALLOWED || status == Status.NOT_MODIFIED || status == Status.UNAVAILABLE || status == Status.PRECONDITION_FAILED) {
                        status = Status.PRECONDITION_FAILED;
                        if (ex instanceof OperationNotAllowedException) {
                            if (((OperationNotAllowedException) ex).getOperation().equals(MessageType.getString(MessageType.MIGRATESTORE_BROKER))) {
                                status = Status.NOT_MODIFIED;
                                noop = true;
                            }
                        }
                        errMsg = Globals.getBrokerResources().getKString(BrokerResources.E_FAIL_MIGRATESTORE_NOT_MIGRATED, ex.getMessage());
                        if (noop) {
                            logger.log(Logger.ERROR, errMsg);
                        } else {
                            logger.logStack(Logger.ERROR, errMsg, ex);
                        }
                    } else {
                        status = Status.EXPECTATION_FAILED;
                        errMsg = Globals.getBrokerResources().getKString(BrokerResources.E_FAIL_TAKEOVERME, brokerID, ex.getMessage());
                        logger.logStack(Logger.ERROR, errMsg, ex);
                    }
                }
            }
            if (status == Status.OK) {
                try {
                    Globals.getClusterBroadcast().stopClusterIO(false, true, null);
                } catch (Throwable t) {
                    logger.logStack(Logger.WARNING, "Failed to stop cluster IO", t);
                }
            }
            List ret = sendReply(con, cmd_msg, brokerID, hostport, errMsg, status, null);
            replyMessageID = (SysMessageID) ret.get(0);
            replyStatusStr = (String) ret.get(1);
        } finally {
            final SysMessageID mid = replyMessageID;
            final String statusStr = replyStatusStr;
            if (!noop) {
                try {
                    if (con instanceof IMQBasicConnection) {
                        IMQBasicConnection ipCon = (IMQBasicConnection) con;
                        ipCon.flushControl(1000);
                    }
                    try {
                        Globals.getServiceManager().stopNewConnections(ServiceType.NORMAL);
                    } catch (Exception e) {
                        logger.logStack(logger.WARNING, rb.getKString(rb.W_STOP_SERVICE_FAIL, ServiceType.getServiceTypeString(ServiceType.NORMAL), e.getMessage()), e);
                    }
                    try {
                        Globals.getServiceManager().stopNewConnections(ServiceType.ADMIN);
                    } catch (Exception e) {
                        logger.logStack(logger.WARNING, rb.getKString(rb.W_STOP_SERVICE_FAIL, ServiceType.getServiceTypeString(ServiceType.ADMIN), e.getMessage()), e);
                    }
                    BrokerStateHandler.setShuttingDown(true);
                    bsh.prepareShutdown(false, true);
                    waitForHandlersToComplete(20);
                    if (mid == null) {
                        logger.log(Logger.INFO, BrokerResources.I_ADMIN_SHUTDOWN_REQUEST);
                        bsh.initiateShutdown("admin", 0, false, 0, true);
                        return true;
                    }
                    final String waitstr = rb.getKString(rb.I_WAIT_ADMIN_RECEIVE_REPLY, MessageType.getString(MessageType.MIGRATESTORE_BROKER_REPLY) + "[" + statusStr + "]");
                    final long totalwait = Globals.getConfig().getIntProperty(MAX_WAIT_ADMIN_CLIENT_PROP, DEFAULT_MAX_WAIT_ADMIN_CLIENT) * 1000L;
                    final IMQConnection conn = con;
                    Executors.newSingleThreadExecutor().execute(new Runnable() {

                        @Override
                        public void run() {
                            try {
                                long waited = 0L;
                                while (conn.getConnectionState() < Connection.STATE_CLEANED && waited < totalwait) {
                                    logger.log(logger.INFO, waitstr);
                                    try {
                                        Thread.sleep(500);
                                        waited += 500L;
                                    } catch (Exception e) {
                                    /* ignore */
                                    }
                                }
                                logger.log(Logger.INFO, BrokerResources.I_ADMIN_SHUTDOWN_REQUEST);
                                bsh.initiateShutdown("admin-migratestore-shutdown", 0, false, 0, true);
                            } catch (Throwable t) {
                                bsh.initiateShutdown("admin-migratestore-shutdown::[" + t.toString() + "]", 0, false, 0, true);
                            }
                        }
                    });
                } catch (Throwable t) {
                    bsh.initiateShutdown("admin-migratestore-shutdown:[" + t.toString() + "]", 0, false, 0, true);
                }
            }
        }
    } finally {
        BrokerStateHandler.unsetExclusiveRequestLock(ExclusiveRequest.MIGRATE_STORE);
    }
    return true;
}
Also used : BrokerException(com.sun.messaging.jmq.jmsserver.util.BrokerException) BrokerStateHandler(com.sun.messaging.jmq.jmsserver.BrokerStateHandler) DestinationList(com.sun.messaging.jmq.jmsserver.core.DestinationList) IMQBasicConnection(com.sun.messaging.jmq.jmsserver.service.imq.IMQBasicConnection) OperationNotAllowedException(com.sun.messaging.jmq.jmsserver.util.OperationNotAllowedException) OperationNotAllowedException(com.sun.messaging.jmq.jmsserver.util.OperationNotAllowedException) BrokerException(com.sun.messaging.jmq.jmsserver.util.BrokerException) BrokerMQAddress(com.sun.messaging.jmq.jmsserver.core.BrokerMQAddress) UID(com.sun.messaging.jmq.util.UID) IMQConnection(com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection) SysMessageID(com.sun.messaging.jmq.io.SysMessageID) DestinationList(com.sun.messaging.jmq.jmsserver.core.DestinationList) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

IMQConnection (com.sun.messaging.jmq.jmsserver.service.imq.IMQConnection)20 ConnectionUID (com.sun.messaging.jmq.jmsserver.service.ConnectionUID)13 ConnectionManager (com.sun.messaging.jmq.jmsserver.service.ConnectionManager)8 Iterator (java.util.Iterator)7 List (java.util.List)7 ArrayList (java.util.ArrayList)6 Service (com.sun.messaging.jmq.jmsserver.service.Service)4 ConnectionInfo (com.sun.messaging.jmq.util.admin.ConnectionInfo)4 Consumer (com.sun.messaging.jmq.jmsserver.core.Consumer)3 Destination (com.sun.messaging.jmq.jmsserver.core.Destination)3 IMQBasicConnection (com.sun.messaging.jmq.jmsserver.service.imq.IMQBasicConnection)3 BrokerException (com.sun.messaging.jmq.jmsserver.util.BrokerException)3 Hashtable (java.util.Hashtable)3 HAMonitorService (com.sun.messaging.jmq.jmsserver.cluster.api.ha.HAMonitorService)2 ConsumerUID (com.sun.messaging.jmq.jmsserver.core.ConsumerUID)2 DestinationList (com.sun.messaging.jmq.jmsserver.core.DestinationList)2 DestinationUID (com.sun.messaging.jmq.jmsserver.core.DestinationUID)2 Session (com.sun.messaging.jmq.jmsserver.core.Session)2 SessionUID (com.sun.messaging.jmq.jmsserver.core.SessionUID)2 Connection (com.sun.messaging.jmq.jmsserver.service.Connection)2