Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-30981

[GSS](8.0.z) Compressed large messages overflow consumer credits.

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Major Major
    • 8.0 Update 11
    • None
    • None
    • None
    • 1
    • False
    • Hide

      None

      Show
      None
    • False

      The consumers show negative credits (close to Integer.MAX_VALUE) even though the consumerWindowSize is set to 0.

      The following output shows that no messages are getting delivered despite the queue having several pending messages.

      {
      server = {
      queue = jms.queue.SomeQueue,
      messageCount = 234,
      Consumer with credits -2147420211 is delivering = 0,
      Consumer with credits -2147444004 is delivering = 0,
      Consumer with credits -2147382789 is delivering = 0,
      Consumer with credits -2147481980 is delivering = 0,
      Consumer with credits -2147423831 is delivering = 0,
      Consumer with credits -2147414127 is delivering = 0,
      Consumer with credits -2147457658 is delivering = 0,
      Consumer with credits -2147448987 is delivering = 0,
      Consumer with credits -2147437301 is delivering = 0,
      Consumer with credits -2147444717 is delivering = 0
      },
      Consumer# = ClientConsumer.buffer.size,
      client = {
      Consumer1 = 0,
      Consumer2 = 0,
      Consumer3 = 0,
      Consumer4 = 0,
      Consumer5 = 0,
      Consumer6 = 0,
      Consumer7 = 0,
      Consumer8 = 0,
      Consumer9 = 0,
      Consumer10 = 0
      }
      }
      

      VisualVM OQL script that fetched this data in the heap dump.

      var server = {};
      var client = {};
      var globalValue = {};
      heap.forEachObject(
        function(strObject) {
          var key = strObject.deliveringRefs.elements
          if (strObject.messageQueue.name.str.toString() == 'jms.queue.SomeQueue') {
               server['queue'] = strObject.messageQueue.name.str.toString();
               server['messageCount'] = strObject.messageQueue.pendingMetrics.messageCount;
          key = parse(strObject,key)
          Object.keys(key).forEach(function(xx){
          var count = key[xx];
          server[xx] = count ? count  : 0;
           });
          
      }
         
        },
        "org.apache.activemq.artemis.core.server.impl.ServerConsumerImpl",
        true
      );
      function parse(strObject,inputArray) {
          var count = 0;
          var map = {};
          for (var i=0; i<inputArray.length; i++) {
          
                 if (inputArray[i] != null) {
              count++;
              }
           }
          map['Consumer with credits '+strObject.availableCredits.value +' is delivering']=count;
          return map;
      }
      var x = 1;
      heap.forEachObject(
        function(clientObject) {
      if (clientObject.queueName.str.toString() == 'jms.queue.SomeQueue')  {
        client['Consumer'+x]=clientObject.buffer.size;
      x++;
      }
      },
      "org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl",
      true);
      globalValue['server']=server
      // Headers
      globalValue['Consumer#']='ClientConsumer.buffer.size'
      globalValue['client']=client
      globalValue
      

      The workaround is to not compress largeMessages or just restart the consumer.

              lvydra Lukas Vydra
              rhn-support-adongre Avinash Dongre
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated: