Package org.xmlBlaster.test.classtest.queue

Source Code of org.xmlBlaster.test.classtest.queue.EntrySize

package org.xmlBlaster.test.classtest.queue;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.xmlBlaster.client.key.SubscribeKey;
import org.xmlBlaster.client.qos.ConnectQos;
import org.xmlBlaster.client.qos.PublishQos;
import org.xmlBlaster.client.qos.SubscribeQos;
import org.xmlBlaster.client.queuemsg.MsgQueueConnectEntry;
import org.xmlBlaster.client.queuemsg.MsgQueuePublishEntry;
import org.xmlBlaster.client.queuemsg.MsgQueueSubscribeEntry;
import org.xmlBlaster.engine.MsgUnitWrapper;
import org.xmlBlaster.engine.ServerScope;
import org.xmlBlaster.engine.qos.PublishQosServer;
import org.xmlBlaster.engine.queuemsg.MsgQueueHistoryEntry;
import org.xmlBlaster.engine.queuemsg.MsgQueueUpdateEntry;
import org.xmlBlaster.util.MsgUnit;
import org.xmlBlaster.util.SessionName;
import org.xmlBlaster.util.XmlBlasterException;
import org.xmlBlaster.util.def.Constants;
import org.xmlBlaster.util.queue.StorageId;

/**
* Helper to find out size of Queue entries.
* Use it together with a profiling tool.
* @see org.xmlBlaster.engine.queuemsg.MsgQueueUpdateEntry
* @see org.xmlBlaster.engine.queuemsg.MsgQueueHistoryEntry
* @see org.xmlBlaster.engine.MsgUnitWrapper
*/
public class EntrySize {
   protected ServerScope glob;
   private static Logger log = Logger.getLogger(EntrySize.class.getName());

   public EntrySize(ServerScope glob) {
      this.glob = glob;

      String testcase = this.glob.getProperty().get("testcase", "subscribe");
      if ("update".equalsIgnoreCase(testcase)) {
         updateEntry();
      }
      else if ("history".equalsIgnoreCase(testcase)) {
         historyEntry();
      }
      else if ("msgUnitWrapper".equalsIgnoreCase(testcase)) {
         msgUnitWrapperEntry();
      }
      else if ("publish".equalsIgnoreCase(testcase)) {
         publishEntry();
      }
      else if ("subscribe".equalsIgnoreCase(testcase)) {
         subscribeEntry();
      }
      else if ("connect".equalsIgnoreCase(testcase)) {
         connectEntry();
      }
      else {
         log.severe("Unkonwn testcase '" + testcase + "' please provide e.g. 'publish'");
      }
   }

   /**
    * Sun JDK 1.4.1 b19 / Linux 2.4.19: 179 bytes/entry
    * IBM JDK 1.3.1 / Linux 2.4.19    : 172 bytes/entry
    * Created objects:
    * - Timestamp
    * - MsgQueueUpdateEntry
    */
   public void updateEntry() {
      log.info("************ Starting updateEntry " + System.getProperty("java.vm.vendor") + ": " + System.getProperty("java.vm.version"));
      StorageId storageId = new StorageId(glob, Constants.RELATING_CALLBACK, "updateEntry");
      try {
         SessionName receiver = new SessionName(glob, "receiver1");
         PublishQosServer publishQosServer = new PublishQosServer(glob, "<qos/>");
         MsgUnit msgUnit = new MsgUnit(glob, "<key oid='XX'/>", new byte[0], publishQosServer.toXml());
         org.xmlBlaster.engine.ServerScope global = new org.xmlBlaster.engine.ServerScope();
         MsgUnitWrapper msgWrapper = new MsgUnitWrapper(glob, msgUnit, storageId);

         int step = 1000;
         int numCreate = 1000000;
         MsgQueueUpdateEntry entryArr[] = new MsgQueueUpdateEntry[numCreate];
         for(int i=0; i<numCreate; i++) {
            entryArr[i] = new MsgQueueUpdateEntry(global, msgWrapper, storageId,
                                             receiver, "__subId", false);
            MsgUnitWrapper w = entryArr[i].getMsgUnitWrapper();
            if ((i % step) == 0) {
               log.info("Overall created #" + i + ": Created " + step + " new MsgQueueUpdateEntry instances, hit a key to create more ...");
               try { System.in.read(); } catch(java.io.IOException e) {}
            }
            if (log.isLoggable(Level.FINE)) log.fine("Dump meat: " + w.toXml());
         }
         //log.info("entry=" + entryArr[0].toXml());
         //log.info("sizeInBytes=" + entryArr[0].getSizeInBytes() + " msgUnit.size()=" + msgUnit.size());
         //log.info("Created " + numCreate + " MsgQueueUpdateEntry instances, hit a key to create more ...");
         //try { System.in.read(); } catch(java.io.IOException e) {}
      }
      catch (XmlBlasterException ex) {         
         ex.printStackTrace();
         log.severe("exception occured : " + ex.getMessage());
      }
   }

   /**
    * Object creation RAM without payload:<br />
    * <pre>
    * Sun JDK 1.4.1 b19 / Linux 2.4.19: 176 bytes/entry
    * IBM JDK 1.3.1 / Linux 2.4.19    : 164 bytes/entry
    * Created objects:
    * - Timestamp
    * - MsgQueueUpdateEntry
    * </pre>
    */
   public void historyEntry() {
      log.info("************ Starting historyEntry " + System.getProperty("java.vm.vendor") + ": " + System.getProperty("java.vm.version"));
      StorageId storageId = new StorageId(glob, Constants.RELATING_HISTORY, "historyEntry");
      try {
         PublishQosServer publishQosServer = new PublishQosServer(glob, "<qos/>");
         MsgUnit msgUnit = new MsgUnit(glob, "<key oid='XX'/>", new byte[0], publishQosServer.toXml());
         org.xmlBlaster.engine.ServerScope global = new org.xmlBlaster.engine.ServerScope();
         MsgUnitWrapper msgWrapper = new MsgUnitWrapper(glob, msgUnit, storageId);

         int step = 1000;
         int numCreate = 1000000;
         MsgQueueHistoryEntry entryArr[] = new MsgQueueHistoryEntry[numCreate];
         for(int i=0; i<numCreate; i++) {
            entryArr[i] = new MsgQueueHistoryEntry(global, msgWrapper, storageId);
            MsgUnitWrapper w = entryArr[i].getMsgUnitWrapper();
            if ((i % step) == 0) {
               log.info("Overall created #" + i + ": Created " + step + " new MsgQueueHistoryEntry instances, hit a key to create more ...");
               try { System.in.read(); } catch(java.io.IOException e) {}
            }
            if (log.isLoggable(Level.FINE)) log.fine("Dump meat: " + w.toXml());
         }
      }
      catch (XmlBlasterException ex) {         
         ex.printStackTrace();
         log.severe("exception occured : " + ex.getMessage());
      }
   }

   /**
    * Object creation RAM without payload (the payload here is additional 78 bytes):<br />
    * <pre>
    * Sun JDK 1.4.1 b19 / Linux 2.4.19: 3214 bytes/entry
    * IBM JDK 1.3.1 / Linux 2.4.19    : 2920 bytes/entry
    *
    * Estimated calculation of used memory by one MsgUnitWrapper instance
    * = Object memory + payload(=msgUnit.size())
    *
    * Where following objects need to be created:
    * 5 PropBoolean
    * 1 PropLong
    * 1 RcvTimestamp
    * 1 MsgQosData
    * 1 MsgKeyData
    * 1 MsgUnit
    * 1 MsgUnitWrapper
    * </pre>
    */
   public void msgUnitWrapperEntry() {
      log.info("************ Starting msgUnitWrapperEntry " + System.getProperty("java.vm.vendor") + ": " + System.getProperty("java.vm.version"));
      try {
         PublishQosServer publishQosServer = new PublishQosServer(glob, "<qos/>");
         StorageId storageId = new StorageId(glob, Constants.RELATING_MSGUNITSTORE, "msgUnitWrapperEntry");

         int step = 1000;
         int numCreate = 1000000;
         MsgUnitWrapper entryArr[] = new MsgUnitWrapper[numCreate];
         log.info("Hit a key for new MsgUnitWrapper RAM size test ...");
         try { System.in.read(); } catch(java.io.IOException e) {}
         for(int i=0; i<numCreate; i++) {
            MsgUnit msgUnit = new MsgUnit(glob, "<key oid='XX'/>", new byte[0], publishQosServer.toXml());
            entryArr[i] = new MsgUnitWrapper(glob, msgUnit, storageId);
            if (i > 0 && (i % step) == 0) {
               log.info("Overall created #" + i + ": Created " + step + " new MsgUnitWrapper instances, msgUnitSize=" + msgUnit.size() + ", hit a key to create more ...");
               try { System.in.read(); } catch(java.io.IOException e) {}
            }
         }
      }
      catch (XmlBlasterException ex) {         
         ex.printStackTrace();
         log.severe("exception occured : " + ex.getMessage());
      }
   }

   /**
    * Object creation RAM without payload (the payload here is additional 23 bytes):<br />
    * <pre>
    * Sun JDK 1.4.1 b19 / Linux 2.4.19: 659 bytes/entry
    * IBM JDK 1.3.1 / Linux 2.4.19    : 627 bytes/entry
    *
    * Estimated calculation of used memory by one MsgUnitWrapper instance
    * = Object memory + payload(=msgUnit.size() here is 23 bytes)
    *
    * Where following objects need to be created:
    * 6 PropBoolean
    * 1 PropLong
    * 1 Timestamp
    * 1 MsgQosData
    * 1 MsgKeyData
    * 1 MsgUnit
    * 1 MsgQueuePublishEntry
    *
    * Performance: Most performance is consumed here for SAX parsing of key and qos
    * </pre>
    */
   public void publishEntry() {
      log.info("************ Starting publishEntry " + System.getProperty("java.vm.vendor") + ": " + System.getProperty("java.vm.version"));
      try {
         PublishQos publishQos = new PublishQos(glob);
         StorageId storageId = new StorageId(glob, Constants.RELATING_CLIENT, "publishEntry");

         int step = 1000;
         int numCreate = 1000000;
         MsgQueuePublishEntry entryArr[] = new MsgQueuePublishEntry[numCreate];
         log.info("Hit a key for new MsgQueuePublishEntry RAM size test ...");
         try { System.in.read(); } catch(java.io.IOException e) {}
         for(int i=0; i<numCreate; i++) {
            MsgUnit msgUnit = new MsgUnit(glob, "<key oid='XX'/>", new byte[0], publishQos.toXml());
            entryArr[i] = new MsgQueuePublishEntry(glob, msgUnit, storageId);
            if (i > 0 && (i % step) == 0) {
               log.info("Overall created #" + i + ": Created " + step + " new MsgQueuePublishEntry instances, msgUnitSize=" + msgUnit.size() + ", hit a key to create more ...");
               try { System.in.read(); } catch(java.io.IOException e) {}
            }
            if (log.isLoggable(Level.FINE)) log.fine("Dump publish meat: " + entryArr[i].toXml());
         }
      }
      catch (XmlBlasterException ex) {         
         ex.printStackTrace();
         log.severe("exception occured : " + ex.getMessage());
      }
   }

   /**
    * Object creation RAM without payload (the payload here is additional 23 bytes):<br />
    * <pre>
    * Sun JDK 1.4.1 b19 / Linux 2.4.19: 567 bytes/entry
    *
    * Where following objects need to be created:
    * 7 PropBoolean
    * 1 Timestamp
    * 1 QueryQosData
    * 1 SubscribeQos
    * 1 QueryKeyData
    * 1 SubscribeKey
    * 1 HistoryQos
    * 1 MsgQueueSubscribeEntry
    * </pre>
    */
   public void subscribeEntry() {
      log.info("************ Starting subscribeEntry " + System.getProperty("java.vm.vendor") + ": " + System.getProperty("java.vm.version"));
      try {
         StorageId storageId = new StorageId(glob, Constants.RELATING_CLIENT, "subscribeEntry");

         int step = 1000;
         int numCreate = 1000000;
         MsgQueueSubscribeEntry entryArr[] = new MsgQueueSubscribeEntry[numCreate];
         log.info("Hit a key for new MsgQueueSubscribeEntry RAM size test ...");
         try { System.in.read(); } catch(java.io.IOException e) {}
         for(int i=0; i<numCreate; i++) {
            SubscribeKey sk = new SubscribeKey(glob, "XX");
            SubscribeQos sq = new SubscribeQos(glob);
            entryArr[i] = new MsgQueueSubscribeEntry(glob, storageId, sk.getData(), sq.getData());
            if (i > 0 && (i % step) == 0) {
               int loadSize = sk.toXml().length() + sq.toXml().length();
               log.info("Overall created #" + i + ": Created " + step + " new MsgQueueSubscribeEntry instances, key+qos size=" + loadSize + ", hit a key to create more ...");
               try { System.in.read(); } catch(java.io.IOException e) {}
            }
            if (log.isLoggable(Level.FINE)) log.fine("Dump meat: " + entryArr[i].toXml());
         }
      }
      catch (XmlBlasterException ex) {         
         ex.printStackTrace();
         log.severe("exception occured : " + ex.getMessage());
      }
   }

   /**
    * Object creation RAM of MsgQueueConnectEntry without payload (the payload here is additional 456 bytes):<br />
    * <pre>
    * Sun JDK 1.4.1 b19 / Linux 2.4.19: 2400 bytes/entry
    *
    * Almost everything is consumed by the expensive ConnectQos object creation.
    * 6 PropBoolean
    * 5 PropLong
    * 4 PropString
    * 1 NodeId
    * 1 SessionName
    * 1 SecurityQos
    * 1 ConnectQos
    * 1 SessionQos
    * 1 MsgQueueConnectEntry
    * 1 QueueProperty
    * 1 PropInt
    * 1 ConnectQosData
    * 1 Timestamp
    *
    * The toXml() size is 456 bytes
    * </pre>
    */
   public void connectEntry() {
      log.info("************ Starting connectEntry " + System.getProperty("java.vm.vendor") + ": " + System.getProperty("java.vm.version"));
      try {
         StorageId storageId = new StorageId(glob, Constants.RELATING_CLIENT, "connectEntry");

         int step = 1000;
         int numCreate = 1000000;
         MsgQueueConnectEntry entryArr[] = new MsgQueueConnectEntry[numCreate];
         log.info("Hit a key for new MsgQueueConnectEntry RAM size test ...");
         try { System.in.read(); } catch(java.io.IOException e) {}
         for(int i=0; i<numCreate; i++) {
            ConnectQos connectQos = new ConnectQos(glob);
            entryArr[i] = new MsgQueueConnectEntry(glob, storageId, connectQos.getData());
            if (i > 0 && (i % step) == 0) {
               log.info("Overall created #" + i + ": Created " + step + " new MsgQueueConnectEntry instances, connectQosSize=" + connectQos.size() + ", hit a key to create more ...");
               try { System.in.read(); } catch(java.io.IOException e) {}
            }
            if (log.isLoggable(Level.FINE)) log.fine("Dump publis meat: " + entryArr[i].toXml());
         }
      }
      catch (XmlBlasterException ex) {         
         ex.printStackTrace();
         log.severe("exception occured : " + ex.getMessage());
      }
   }

    /**
    * <pre>
    *  java org.xmlBlaster.test.classtest.queue.EntrySize
    * </pre>
    */
   public static void main(String args[]) {
      ServerScope glob = new ServerScope(args);
      new EntrySize(glob);
      //   long startTime = System.currentTimeMillis();
      //   long usedTime = System.currentTimeMillis() - startTime;
      //   testSub.log.info("time used for tests: " + usedTime/1000 + " seconds");
   }
}
TOP

Related Classes of org.xmlBlaster.test.classtest.queue.EntrySize

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.