1 2 Previous Next 15 Replies Latest reply on Jun 9, 2011 11:07 AM by Clebert Suconic

    Hornetq stops working just after use QueueControl.moveMessages()

    Dmitry Sukhovilin Newbie

      Hello,

       

      I got the following trouble using HornetQ:

      Just after calling QueueControl.moveMessages() queue of hornetq stops respond. This issue is reproducible when the parameter address-full-policy is set to "PAGE" and paging files contain some messages. The only way to return control over the queue is to reboot the server.

       

      Its important to pay your attention to steps 5 and 6. On these steps the queue size does't change (but must).

      Even more, its impossible to read any message from the queue although, at the step 7 you can see that the queue is not empty. Pause at step 3 is needed to make sure that moving messages from the queue in the queue is completed.

       

      My environment:

      OS: Linux 2.6.32

      Java: Oracle, version "1.6.0_24"

      HornetQ runs on my server as a standalone application.

       

      Attachments:

      POC1.java                          contains code sample.

      hornetq-users.xml               contains security data.

      hornetq-configuration.xml     hornetq configuration file.

       

       

      Thank you for any help.

        • 2. Hornetq stops working just after use QueueControl.moveMessages()
          Clebert Suconic Master

          What steps? It seems you missed typing something you meant to do?

          • 3. Re: Hornetq stops working just after use QueueControl.moveMessages()
            Dmitry Sukhovilin Newbie

            Thank you for your answer.

             

            I use HornetQ version 2.2.2.

            All steps are described in .java sample file. You could find the file in my attachments.

            • 5. Re: Hornetq stops working just after use QueueControl.moveMessages()
              Dmitry Sukhovilin Newbie

              Thanks for the answer.

              Clebert Suconic wrote:

               

              Which java file? which sample? (We have so many)

              You can see the file in my attachments. (http://community.jboss.org/servlet/JiveServlet/download/604954-32850/POC1.java.zip)

               

               

              package hornet.tests.bug1;

               

              import java.io.ByteArrayInputStream;

              import java.io.ByteArrayOutputStream;

              import java.io.IOException;

              import java.io.ObjectInputStream;

              import java.io.ObjectOutput;

              import java.io.ObjectOutputStream;

              import java.io.Serializable;

              import java.util.HashMap;

              import java.util.Map;

              import org.hornetq.api.core.HornetQException;

              import org.hornetq.api.core.SimpleString;

              import org.hornetq.api.core.TransportConfiguration;

              import org.hornetq.api.core.client.ClientConsumer;

              import org.hornetq.api.core.client.ClientMessage;

              import org.hornetq.api.core.client.ClientProducer;

              import org.hornetq.api.core.client.ClientRequestor;

              import org.hornetq.api.core.client.ClientSession;

              import org.hornetq.api.core.client.ClientSessionFactory;

              import org.hornetq.api.core.client.HornetQClient;

              import org.hornetq.api.core.client.ServerLocator;

              import org.hornetq.api.core.management.ManagementHelper;

              import org.hornetq.api.core.management.ResourceNames;

               

              class DummyObject implements Serializable {

                 

                  private static final long serialVersionUID = 8924860462157420217L;

               

                  private byte[] body = new byte[2000];

                 

                  public byte[] getBody() {

                      return body;

                  }

               

                  public void setBody(byte[] body) {

                      this.body = body;

                  }

              }

               

              public class POC1 {

                  private static final String Q1 = "queue.Test1";

                  private static final String Q2 = "queue.Test2";

                  private static final String MANAGEMENT_QUEUE = "jms.queue.hornetq.management";

                 

                  private static final int NUM_SEND = 1 * 60 * 1000;

               

                  private static final int PRINT_AFTER_X_MESSAGES_SEND = 10 * 1000;

                 

                  private static final String username = "foo";

                  private static final String password = "bar";

                 

                  private static final String SERVER_IP = "127.0.0.1";

                  private static final int SERVER_PORT = 5445;

                 

                  public static void sendOneMessage(DummyObject sms, ClientSession session, ClientProducer cp) {

                      ClientMessage cm;

                      try {

                          cm = session.createMessage(true);

               

                          ByteArrayOutputStream bos = new ByteArrayOutputStream() ;

                          ObjectOutput out;

                          out = new ObjectOutputStream(bos);

                          out.writeObject(sms);

                          out.close();

               

                          cm.getBodyBuffer().writeBytes( bos.toByteArray() );

                         

                          cp.send(cm);

                      } catch (IOException e) {

                          e.printStackTrace();

                      } catch (Exception e) {

                          e.printStackTrace();

                      }

                  }

               

                  public static void sendMessages(ClientSession session, ClientProducer cp, long num) {

                      for(int i=1; i <= num; i++) {

                          DummyObject msg = new DummyObject();

                          sendOneMessage(msg, session, cp);

               

                          if ( (i % PRINT_AFTER_X_MESSAGES_SEND) == 0 ) {

                              System.out.print(i / PRINT_AFTER_X_MESSAGES_SEND + " ");

                          }

                      }

                  }

                 

                  public static void receiveMessages(ClientSession session, ClientConsumer cc, long k) throws HornetQException, IOException, ClassNotFoundException {

                     

                      ClientMessage received;

                      long countMsg = 0;

               

                      while ( (received = cc.receive(1500)) != null ) {

                          ByteArrayOutputStream baos = new ByteArrayOutputStream();

                          received.saveToOutputStream(baos);

                         

                          ObjectInputStream in = new ObjectInputStream(

                                  new ByteArrayInputStream(baos.toByteArray()));

                         

                          DummyObject sms = (DummyObject) in.readObject();

                          in.close();

                          countMsg++;

                          if (countMsg >= k) {

                              break;

                          }

                      }

                  }

               

                  public static void main(String[] args) throws Exception {

                     

                      ServerLocator locator = null;

                      ClientSession session = null;

                      ClientSessionFactory csf = null;

                      try {

                          Map<String, Object> connectionParams = new HashMap<String, Object>();

                          connectionParams.put(org.hornetq.core.remoting.impl.netty.TransportConstants.PORT_PROP_NAME, SERVER_PORT);

                          connectionParams.put(org.hornetq.core.remoting.impl.netty.TransportConstants.HOST_PROP_NAME, SERVER_IP);

                         

               

                          TransportConfiguration transportConfiguration = new TransportConfiguration(

                                  "org.hornetq.core.remoting.impl.netty.NettyConnectorFactory", connectionParams);

               

                          locator = HornetQClient.createServerLocatorWithoutHA(transportConfiguration);

                         

                          csf = locator.createSessionFactory();

                         

                          session = csf.createSession(username, password, false, true, true, false, 1);

                          session.start();

               

                         

                          // step 1. send many msg (paging begin)

                          System.out.println("step 1");

                          ClientProducer cp = session.createProducer(Q1);

                          sendMessages(session, cp, NUM_SEND);

                         

                          // step 2. messageMove

                          System.out.println("step 2");

                          ClientRequestor requestor = new ClientRequestor(session, MANAGEMENT_QUEUE);

                         

                          String resource = ResourceNames.CORE_QUEUE + Q1;

                          ClientMessage message = session.createMessage(false);

                          ManagementHelper.putOperationInvocation(message, resource, "moveMessages", "", Q2);

                          ClientMessage reply = requestor.request(message);

                         

                          boolean success = ManagementHelper.hasOperationSucceeded(reply);

                          if (success) {

                              System.out.println("moveMessages SUCCESS");

                          } else {

                              System.out.println("moveMessages FAIL");

                          }

                         

                          // step3. wait some time

                          System.out.println("step 3");

                          System.out.println("Press 'enter'");

                          System.in.read();

                         

                          // step4. check query size

                          System.out.println("step 4");

                          ClientSession.QueueQuery qq1 = session.queueQuery(new SimpleString(Q1));

                          ClientSession.QueueQuery qq2 = session.queueQuery(new SimpleString(Q2));

                          System.out.println(Q1 + " size: " + qq1.getMessageCount());

                          System.out.println(Q2 + " size: " + qq2.getMessageCount());

               

                          // step5. try read from Q1

                          System.out.println("step 5");

                          ClientConsumer cc = session.createConsumer(Q1);

                          receiveMessages(session, cc, 3);

                         

                          // step6. try write from Q1

                          System.out.println("step 6");

                          sendMessages(session, cp, 7);

                         

                          // step7. check query size

                          System.out.println("step 7");

                          System.out.println(Q1 + " size: " + qq1.getMessageCount());

                          System.out.println(Q2 + " size: " + qq2.getMessageCount());

                         

                          cp.close();

                          requestor.close();

                      } catch (Exception e) {

                          e.printStackTrace();

                      } finally {

                          if(session != null) {

                              try {

                                  session.close();

                              } catch (HornetQException e) {

                                  e.printStackTrace();

                              }

                          }

               

                          if(csf != null) {

                              csf.close();

                          }

               

                          if (locator != null) {

                              locator.close();

                          }

                      }

                  }

              }

              • 6. Hornetq stops working just after use QueueControl.moveMessages()
                Dmitry Sukhovilin Newbie

                Hello there,

                 

                I am about to use HornetQ on my production server. Could any one help me?

                 

                Thank you.

                • 7. Hornetq stops working just after use QueueControl.moveMessages()
                  Clebert Suconic Master

                  You never described the error other than I have an issue...

                   

                   

                  Can you provide some logs? Exceptions?

                   

                  What exactly are you saying it's not working?

                  • 8. Hornetq stops working just after use QueueControl.moveMessages()
                    Clebert Suconic Master

                    Besides... This is not a paid support service ;-) First come, first serve!

                    • 9. Hornetq stops working just after use QueueControl.moveMessages()
                      Dmitry Sukhovilin Newbie

                      I moved all the messages from queue (queue.Test1) into queue (queue.Test2), API (method ManagementHelper.hasOperationSucceeded()) sad that my movement was SUCCESSFUL. but, all messages which was in paging files - left on their places in paging. Even more, I can't read from and write to queue.Test1 AT ALL. No exeption was thrown.

                       

                      But the way, I can't to buy a paid service so far, becouse I should be sure in quality of Hornetq.

                      • 10. Re: Hornetq stops working just after use QueueControl.moveMessages()
                        Leos Bitto Novice

                        Dmitry Sukhovilin wrote:

                         

                        But the way, I can't to buy a paid service so far, becouse I should be sure in quality of Hornetq.

                         

                        Unfortunatelly you most probably couldn't buy a paid support  for HornetQ even if you wanted to. It was promised to be available as a part of JBoss EAP 5.1.0, but that was withdrawn, and when I asked RedHat representative about the possibility of paid HornetQ support, I was promised that something should be available mid-February 2011, however there is still nothing. I hope that at least some kind of paid support will be available in JBoss EAP 5.1.1, but that is still a moving target - both the release date and the scope of HornetQ support.

                        • 11. Re: Hornetq stops working just after use QueueControl.moveMessages()
                          Clebert Suconic Master

                          There was a code change I've made around paging on deleteMessages as it wouldn't work with paged messages before.

                           

                          The messages should still be at the previous destination.

                           

                           

                          If you open a JIRA, I will make sure this will work with moveMessages also as I'm currently working on a few paging changes.

                           

                           

                          Can you try a new build from this branch: http://anonsvn.jboss.org/repos/hornetq/branches/Branch_2_2_EAP/

                          • 12. Re: Hornetq stops working just after use QueueControl.moveMessages()
                            Clebert Suconic Master

                            Leos Bitto wrote:

                             

                            Dmitry Sukhovilin wrote:

                             

                            But the way, I can't to buy a paid service so far, becouse I should be sure in quality of Hornetq.

                             

                            Unfortunatelly you most probably couldn't buy a paid support  for HornetQ even if you wanted to. It was promised to be available as a part of JBoss EAP 5.1.0, but that was withdrawn, and when I asked RedHat representative about the possibility of paid HornetQ support, I was promised that something should be available mid-February 2011, however there is still nothing. I hope that at least some kind of paid support will be available in JBoss EAP 5.1.1, but that is still a moving target - both the release date and the scope of HornetQ support.

                             

                             

                            All I can say is that we are working towards it. We have done a lot of QA on HornetQ to make it become a product. There are a few last requirements QA is asking us to fullfill what should happen by 5.1.2.

                            • 13. Re: Hornetq stops working just after use QueueControl.moveMessages()
                              Clebert Suconic Master

                              EAP 5.1.1 will already have HornetQ as tech preview.

                              • 14. Re: Hornetq stops working just after use QueueControl.moveMessages()
                                Dmitry Sukhovilin Newbie

                                Thank you for your information.

                                I refused to use persistent of hornetq.

                                 

                                Have a nice day.

                                1 2 Previous Next