[JBoss-dev] CVS update: jbossmq/src/main/org/jboss/mq/server MessageCache.java MessageReference.java

2002-02-17 Thread Peter Antman

  User: pra 
  Date: 02/02/17 09:55:08

  Modified:src/main/org/jboss/mq/server MessageCache.java
MessageReference.java
  Log:
  * Corrected several bugs in LRUCache and in usage of it.
  * Corrected thread locks. All access in both MessageCache and MessageReference now 
sync on MessageCache. Any changes to this must be tested on at least a dual CPU and 
with 100 000 messages or more, to be shure no threading locks are reintrioduced.
  
  Revision  ChangesPath
  1.16  +61 -26jbossmq/src/main/org/jboss/mq/server/MessageCache.java
  
  Index: MessageCache.java
  ===
  RCS file: /cvsroot/jboss/jbossmq/src/main/org/jboss/mq/server/MessageCache.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- MessageCache.java 15 Feb 2002 20:59:53 -  1.15
  +++ MessageCache.java 17 Feb 2002 17:55:08 -  1.16
  @@ -4,7 +4,6 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
  -
   package org.jboss.mq.server;
   
   import java.io.File;
  @@ -32,15 +31,14 @@
*
* @author mailto:[EMAIL PROTECTED]";>Hiram Chirino
* @author mailto:[EMAIL PROTECTED]";>David Maplesden
  - * @version$Revision: 1.15 $
  + * @author mailto:[EMAIL PROTECTED]";>Peter Antman
  + * @version$Revision: 1.16 $
*/
  -public class MessageCache
  -   extends ServiceMBeanSupport
  -   implements MessageCacheMBean, MBeanRegistration, Runnable
  +public class MessageCache extends ServiceMBeanSupport implements MessageCacheMBean, 
MBeanRegistration, Runnable
   {
  // The cached messages are orded in a LRU linked list
  private LRUCache lruCache = new LRUCache();
  -   
  +  
  // Provides a Unique ID to MessageHanles
  private long messageCounter = 0;
  int cacheHits = 0;
  @@ -72,18 +70,25 @@
   */
  public MessageReference add(SpyMessage message) throws javax.jms.JMSException
  {
  -  log.trace("add lock aquire");
  +  boolean trace = log.isTraceEnabled();
  +  if (trace)
  + log.trace("add lock aquire");
  +  
  +  MessageReference mh = null;
 synchronized (this)
 {
  - MessageReference mh = new MessageReference();
  + mh = new MessageReference();
mh.init(this, messageCounter++, message);
lruCache.addMostRecent(mh);
totalCacheSize++;
validateSoftReferenceDepth();
  +  
  + if(trace)
  +log.trace("add lock release");
   
  - log.trace("add lock release");
  - return mh;
 }
  +
  +  return mh;
  }
   
  /**
  @@ -91,13 +96,19 @@
   */
  public void remove(MessageReference mr) throws JMSException
  {
  -  log.trace("remove lock aquire");
  +  boolean trace = log.isTraceEnabled();
  +  if (trace)
  + log.trace("remove lock aquire");
  +
 synchronized (this)
 {
  - mr.clear();
  - lruCache.remove(mr);
  + mr.clear();//Will remove it from storage if soft
  + if (mr.hardReference != null)//If message is not hard, dont do lru stuff
  +lruCache.remove(mr);
totalCacheSize--;
  - log.trace("remove lock release");
  +  
  + if (trace)
  +log.trace("remove lock release");
 }
  }
   
  @@ -152,10 +163,16 @@
  /**
   * This method is in charge of determining if it time to convert some
   * hard references over to soft references.
  +*
  +* It must NOT be called by a thread holding a lock on a reference wich
  +* in its turn holds a lock on cache. It WILL lead to deadlocks!!!
   */
  public void validateSoftReferenceDepth() throws JMSException
  {
  -  //log.trace("run lock aquire");
  +  boolean trace = log.isTraceEnabled();
  +  if (trace)
  + log.trace("run lock aquire");
  +  
 synchronized (this)
 {
   
  @@ -180,35 +197,42 @@
if (chnageCount > 1)
{
   if (log.isDebugEnabled())
  -  log.debug("Converting " + chnageCount + " hard ref to to soft refs");
  +   log.debug("Converting " + chnageCount + " hard ref to to soft refs");
   Node leastRecent = lruCache.getLeastRecent();
   for (int i = 0; i < chnageCount && leastRecent != null; i++)
   {
  +   // This is tricky, make soft should really be done outside
  +   // sync on cache
  MessageReference mr = (MessageReference) leastRecent.data;
  mr.makeSoft();
  -   lruCache.remove(leastRecent);
  +   lruCache.remove(mr);
  leastRecent = lruCache.getLeastRecent();
   }
}
  - //log.trace("run lock release");
  + if (trace)
  +log.trace("run lock release");

[JBoss-dev] CVS update: jbossmq/src/main/org/jboss/mq/server MessageCache.java MessageCacheMBean.java StateManager.java StateManagerMBean.java

2002-02-12 Thread Jason Dillon

  User: user57  
  Date: 02/02/12 20:26:38

  Modified:src/main/org/jboss/mq/server MessageCache.java
MessageCacheMBean.java StateManager.java
StateManagerMBean.java
  Log:
   o These are all kinda related, so I am commiting them together
   o This is the second half of the migration to using ObjectName OBJECT_NAME
   o Not using jboss.system.* properties anywhere (one place in testsuite
 which I am ignoring for now)
   o StateManager will now read its config from a url (configURL), and only
 attempt to write it back out if that is a file URL.  Need to fix this
 to not need to write back to a config file.
   o Still setting jboss.home & jboss.system.home, but use ServerConfigMBean
 to get the proper bits, will eventually abstract all file access out
   o Added a simple locator to find a mbean server.  This is trivial code,
 but helps clean up client code and makes it obvious what it does.
  
  Revision  ChangesPath
  1.14  +5 -3  jbossmq/src/main/org/jboss/mq/server/MessageCache.java
  
  Index: MessageCache.java
  ===
  RCS file: /cvsroot/jboss/jbossmq/src/main/org/jboss/mq/server/MessageCache.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- MessageCache.java 2 Feb 2002 03:54:21 -   1.13
  +++ MessageCache.java 13 Feb 2002 04:26:38 -  1.14
  @@ -4,6 +4,7 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
  +
   package org.jboss.mq.server;
   
   import java.io.File;
  @@ -31,9 +32,11 @@
*
* @author mailto:[EMAIL PROTECTED]";>Hiram Chirino
* @author mailto:[EMAIL PROTECTED]";>David Maplesden
  - * @version$Revision: 1.13 $
  + * @version$Revision: 1.14 $
*/
  -public class MessageCache extends ServiceMBeanSupport implements MessageCacheMBean, 
MBeanRegistration, Runnable
  +public class MessageCache
  +   extends ServiceMBeanSupport
  +   implements MessageCacheMBean, MBeanRegistration, Runnable
   {
  // The cached messages are orded in a LRU linked list
  private LRUCache lruCache = new LRUCache();
  @@ -373,7 +376,6 @@
   */
  public void testBigLoad() throws Exception
  {
  -
 MessageCache cache = new MessageCache();
 File tempDir = new File("Temp-" + System.currentTimeMillis());
 tempDir.mkdirs();
  
  
  
  1.4   +36 -25jbossmq/src/main/org/jboss/mq/server/MessageCacheMBean.java
  
  Index: MessageCacheMBean.java
  ===
  RCS file: 
/cvsroot/jboss/jbossmq/src/main/org/jboss/mq/server/MessageCacheMBean.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- MessageCacheMBean.java14 Nov 2001 04:23:27 -  1.3
  +++ MessageCacheMBean.java13 Feb 2002 04:26:38 -  1.4
  @@ -4,76 +4,87 @@
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
  +
   package org.jboss.mq.server;
  +
   import org.jboss.system.ServiceMBean;
   import javax.management.ObjectName;
  -
  +
   /**
* Defines the managment interface that is exposed to the MessageCache
*
* @author mailto:[EMAIL PROTECTED]";>Hiram Chirino
  - * @version$Revision: 1.3 $
  + * @version$Revision: 1.4 $
*/
  -public interface MessageCacheMBean extends ServiceMBean {
  -
   /**
  +public interface MessageCacheMBean
  +   extends ServiceMBean
  +{
  +   /**
   * Gets the hardRefCacheSize
  +* 
   * @return Returns a int
   */
  -   public int getHardRefCacheSize();
  -
  +   int getHardRefCacheSize();
  +
  /**
   * Gets the softRefCacheSize
  +* 
   * @return Returns a int
   */
  -   public int getSoftRefCacheSize();
  -
  +   int getSoftRefCacheSize();
  +
  /**
   * Gets the totalCacheSize
  +* 
   * @return Returns a int
   */
  -   public int getTotalCacheSize();
  +   int getTotalCacheSize();

  -  
  /**
   * Gets the cacheMisses
  +* 
   * @return Returns a int
   */
  -   public int getCacheMisses();
  -
  +   int getCacheMisses();
  +
  /**
   * Gets the cacheHits
  +* 
   * @return Returns a int
   */
  -   public int getCacheHits();
  +   int getCacheHits();
  
  /**
   * Gets the highMemoryMark
  +* 
   * @return Returns a long
   */
  -   public long getHighMemoryMark();
  -
  +   long getHighMemoryMark();
  +
  /**
   * Sets the highMemoryMark
  +* 
   * @param highMemoryMark The highMemoryMark to set
   */
  -   public void setHighMemoryMark(long highMemoryMark);
  -
  +   void setHighMemoryMark(long highMemoryMark);
  +
  /**
   * Gets the maxMemoryMark
  +* 
   * @return Returns a long
   */
  -   public long getMaxMemoryMark();
  -
  +   long getMaxMemoryMark();
  +
  /**
   * Set

[JBoss-dev] CVS update: jbossmq/src/main/org/jboss/mq/server MessageCache.java

2002-01-02 Thread Adrian Brock

  User: ejort   
  Date: 02/01/02 09:06:54

  Modified:src/main/org/jboss/mq/server MessageCache.java
  Log:
  Removed some unguarded trace statements.
  
  Revision  ChangesPath
  1.11  +17 -9 jbossmq/src/main/org/jboss/mq/server/MessageCache.java
  
  Index: MessageCache.java
  ===
  RCS file: /cvsroot/jboss/jbossmq/src/main/org/jboss/mq/server/MessageCache.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- MessageCache.java 2001/12/13 22:22:43 1.10
  +++ MessageCache.java 2002/01/02 17:06:53 1.11
  @@ -25,7 +25,7 @@
*
* @author mailto:[EMAIL PROTECTED]";>Hiram Chirino
* @author mailto:[EMAIL PROTECTED]";>David Maplesden
  - * @version$Revision: 1.10 $
  + * @version$Revision: 1.11 $
*/
   public class MessageCache extends ServiceMBeanSupport implements MessageCacheMBean, 
MBeanRegistration, Runnable
   {
  @@ -63,7 +63,8 @@
   */
  public MessageReference add(SpyMessage message) throws javax.jms.JMSException
  {
  -  log.trace("add lock aquire");
  +  if (log.isTraceEnabled())
  +log.trace("add lock aquire");
 synchronized (this)
 {
MessageReference mh = new MessageReference();
  @@ -72,7 +73,8 @@
totalCacheSize++;
validateSoftReferenceDepth();
   
  - log.trace("add lock release");
  + if (log.isTraceEnabled())
  +   log.trace("add lock release");
return mh;
 }
  }
  @@ -82,13 +84,15 @@
   */
  public void remove(MessageReference mr) throws JMSException
  {
  -  log.trace("remove lock aquire");
  +  if (log.isTraceEnabled())
  +log.trace("remove lock aquire");
 synchronized (this)
 {
mr.clear();
lruCache.remove(mr);
totalCacheSize--;
  - log.trace("remove lock release");
  + if (log.isTraceEnabled())
  +   log.trace("remove lock release");
 }
  }
   
  @@ -137,7 +141,8 @@
 {
// Signal to exit the thread.
 }
  -  log.debug("Thread exiting.");
  +  if (log.isDebugEnabled())
  +log.debug("Thread exiting.");
  }
   
  /**
  @@ -170,7 +175,8 @@
// if the serverity is low since it will round up.
if (chnageCount > 1)
{
  -log.debug("Converting " + chnageCount + " hard ref to to soft refs");
  +if (log.isDebugEnabled())
  +  log.debug("Converting " + chnageCount + " hard ref to to soft refs");
   Node leastRecent = lruCache.getLeastRecent();
   for (int i = 0; i < chnageCount && leastRecent != null; i++)
   {
  @@ -191,14 +197,16 @@
   */
  synchronized public void messageReferenceUsedEvent(MessageReference mh, boolean 
wasHard)
  {
  -  log.trace("messageReferenceUsedEvent lock aquire");
  +  if (log.isTraceEnabled())
  +log.trace("messageReferenceUsedEvent lock aquire");
 synchronized (this)
 {
if (wasHard)
   lruCache.makeMostRecent(mh);
else
   lruCache.addMostRecent(mh);
  - log.trace("messageReferenceUsedEvent lock released");
  + if (log.isTraceEnabled())
  +   log.trace("messageReferenceUsedEvent lock released");
 }
  }
   
  
  
  

___
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development



[JBoss-dev] CVS update: jbossmq/src/main/org/jboss/mq/server MessageCache.java

2001-12-11 Thread David Maplesden

  User: dmaplesden
  Date: 01/12/11 19:24:58

  Modified:src/main/org/jboss/mq/server MessageCache.java
  Log:
  Undo my object pooling code, it causes a number of bugs when server is under high 
load.
  
  Revision  ChangesPath
  1.9   +4 -28 jbossmq/src/main/org/jboss/mq/server/MessageCache.java
  
  Index: MessageCache.java
  ===
  RCS file: /cvsroot/jboss/jbossmq/src/main/org/jboss/mq/server/MessageCache.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- MessageCache.java 2001/12/09 05:50:31 1.8
  +++ MessageCache.java 2001/12/12 03:24:58 1.9
  @@ -24,14 +24,10 @@
* later.
*
* @author mailto:[EMAIL PROTECTED]";>Hiram Chirino
  - * @version$Revision: 1.8 $
  + * @version$Revision: 1.9 $
*/
   public class MessageCache extends ServiceMBeanSupport implements MessageCacheMBean, 
MBeanRegistration, Runnable
   {
  -   //pool of message ref objects
  -   public static final int MAX_POOL_SIZE = 100*1000;
  -   protected ArrayList pool = new ArrayList(MAX_POOL_SIZE);
  -
  // The cached messages are orded in a LRU linked list
  private LinkedList lruCache = new LinkedList();
   
  @@ -61,25 +57,6 @@
 return this;
  }
   
  -   //this method is only called from within synchronized block, so don't need to 
sync
  -   protected MessageReference getMessageReference(MessageCache messageCache, Long 
referenceId, SpyMessage message) {
  -  MessageReference ref = null;
  -  if(!pool.isEmpty())
  - ref = (MessageReference)pool.remove(pool.size()-1);
  -  else
  - ref = new MessageReference();
  -  ref.init(messageCache,referenceId,message);
  -  return ref;
  -   }
  -
  -   //this method is only called from within synchronized block, so don't need to 
sync
  -   protected void releaseMessageReference(MessageReference ref){
  -  if(pool.size() < MAX_POOL_SIZE){
  - ref.reset();
  - pool.add(ref);
  -  }
  -   }
  -
  /**
   * Adds a message to the cache
   */
  @@ -88,7 +65,8 @@
 log.trace("add lock aquire");
 synchronized (this)
 {
  - MessageReference mh = getMessageReference(this, new 
Long(messageCounter++), message);
  + MessageReference mh = new MessageReference();
  + mh.init(this, new Long(messageCounter++), message);
lruCache.addLast(mh);
totalCacheSize++;
validateSoftReferenceDepth();
  @@ -108,7 +86,6 @@
 {
mr.clear();
lruCache.remove(mr);
  - releaseMessageReference(mr);
totalCacheSize--;
log.trace("remove lock release");
 }
  @@ -443,5 +420,4 @@
  public void setCacheStore(ObjectName cacheStore) {
 cacheStoreObjectName = cacheStore;
  }
  -
  -}
  + }
  
  
  

___
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development



[JBoss-dev] CVS update: jbossmq/src/main/org/jboss/mq/server MessageCache.java

2001-12-08 Thread Hiram Chirino

  User: chirino 
  Date: 01/12/08 21:50:31

  Modified:src/main/org/jboss/mq/server MessageCache.java
  Log:
  Reduced the verbosity of the logging.  Was getting 4 lines in the logs per second 
even is nothing was happening.
  
  Revision  ChangesPath
  1.8   +10 -7 jbossmq/src/main/org/jboss/mq/server/MessageCache.java
  
  Index: MessageCache.java
  ===
  RCS file: /cvsroot/jboss/jbossmq/src/main/org/jboss/mq/server/MessageCache.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- MessageCache.java 2001/11/14 04:23:27 1.7
  +++ MessageCache.java 2001/12/09 05:50:31 1.8
  @@ -24,7 +24,7 @@
* later.
*
* @author mailto:[EMAIL PROTECTED]";>Hiram Chirino
  - * @version$Revision: 1.7 $
  + * @version$Revision: 1.8 $
*/
   public class MessageCache extends ServiceMBeanSupport implements MessageCacheMBean, 
MBeanRegistration, Runnable
   {
  @@ -132,9 +132,9 @@
 {
while (true)
{
  -log.trace("Waiting for a reference to get GCed.");
  + // 
  +//log.trace("Waiting for a reference to get GCed.");
   // Get the next soft reference that was canned by the GC
  -
   Reference r = referenceQueue.remove(1000);
   if (r != null)
   {
  @@ -145,9 +145,12 @@
  {
 softRefCacheSize--;
  }
  +   if( log.isTraceEnabled() )
  +  log.trace("soft reference cache size is now: "+softRefCacheSize);
  +
  +   //log.trace("Validating soft reference count.");
  +   validateSoftReferenceDepth();
   }
  -log.trace("Validating soft reference count.");
  -validateSoftReferenceDepth();
}
 } catch (JMSException e)
 {
  @@ -165,7 +168,7 @@
   */
  public void validateSoftReferenceDepth() throws JMSException
  {
  -  log.trace("run lock aquire");
  +  //log.trace("run lock aquire");
 synchronized (this)
 {
   
  @@ -198,7 +201,7 @@
  iter.remove();
   }
}
  - log.trace("run lock release");
  + //log.trace("run lock release");
 }
   
  }
  
  
  

___
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development



[JBoss-dev] CVS update: jbossmq/src/main/org/jboss/mq/server MessageCache.java MessageCacheMBean.java MessageReference.java

2001-11-13 Thread Hiram Chirino

  User: chirino 
  Date: 01/11/13 20:23:27

  Modified:src/main/org/jboss/mq/server MessageCache.java
MessageCacheMBean.java MessageReference.java
  Log:
  Factored out a CacheStore object from the message store.  This should lay the
  ground work needed so that the MessageCache can use a PM for saving and loading
  messages.
  
  Also fixed a small bug in the file PM.  It was not properly restoring the message
  after a server restart.
  
  Revision  ChangesPath
  1.7   +25 -52jbossmq/src/main/org/jboss/mq/server/MessageCache.java
  
  Index: MessageCache.java
  ===
  RCS file: /cvsroot/jboss/jbossmq/src/main/org/jboss/mq/server/MessageCache.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- MessageCache.java 2001/11/14 01:53:40 1.6
  +++ MessageCache.java 2001/11/14 04:23:27 1.7
  @@ -15,6 +15,7 @@
   import org.jboss.system.ServiceMBeanSupport;
   import org.jboss.mq.SpyMessage;
   import javax.jms.JMSException;
  +import org.jboss.mq.pm.CacheStore;
   
   /**
* This class implements a Message cache so that larger amounts of messages
  @@ -23,7 +24,7 @@
* later.
*
* @author mailto:[EMAIL PROTECTED]";>Hiram Chirino
  - * @version$Revision: 1.6 $
  + * @version$Revision: 1.7 $
*/
   public class MessageCache extends ServiceMBeanSupport implements MessageCacheMBean, 
MBeanRegistration, Runnable
   {
  @@ -39,8 +40,9 @@
  int cacheHits = 0;
  int cacheMisses = 0;
   
  -   private File dataFile;
  -   private String dataDirectory;
  +   CacheStore cacheStore;
  +   ObjectName cacheStoreObjectName;
  +
  private Thread referenceSoftner;
   
  private long highMemoryMark = 1024L * 1000 * 16;
  @@ -219,29 +221,20 @@
   
  
//
  // Perisitence methods used by the MessageReference.
  -   // TODO: delegate this work to a PM.
  
//
  -   SpyMessage loadFromStorage(MessageReference mh) throws IOException, 
ClassNotFoundException
  +   SpyMessage loadFromStorage(MessageReference mh) throws JMSException
  {
  -  File f = new File(dataFile, "Message-" + mh.referenceId);
  -  ObjectInputStream is = new ObjectInputStream(new BufferedInputStream(new 
FileInputStream(f)));
  -  Object rc = is.readObject();
  -  is.close();
  -  return (SpyMessage) rc;
  +  return (SpyMessage)cacheStore.loadFromStorage(mh);
  }
   
  -   void saveToStorage(MessageReference mh, SpyMessage message) throws IOException
  +   void saveToStorage(MessageReference mh, SpyMessage message) throws JMSException
  {
  -  File f = new File(dataFile, "Message-" + mh.referenceId);
  -  ObjectOutputStream os = new ObjectOutputStream(new BufferedOutputStream(new 
FileOutputStream(f)));
  -  os.writeObject(message);
  -  os.close();
  +  cacheStore.saveToStorage(mh, message);
  }
   
  -   void removeFromStorage(MessageReference mh) throws IOException
  +   void removeFromStorage(MessageReference mh) throws JMSException
  {
  -  File f = new File(dataFile, "Message-" + mh.referenceId);
  -  f.delete();
  +  cacheStore.removeFromStorage(mh);
  }
   
  
//
  @@ -256,29 +249,15 @@
   */
  protected void startService() throws Exception
  {
  -  File jbossHome = new File(System.getProperty("jboss.system.home"));
  -  dataFile = new File(jbossHome, dataDirectory);
  -  log.debug("Data directory set to: " + dataFile.getCanonicalPath());
  -
  -  dataFile.mkdirs();
  -  if (!dataFile.isDirectory())
  - throw new Exception("The configured data directory is not valid: " + 
dataDirectory);
  -
  -  // Clean out the directory of any previous files.
  -  File files[] = dataFile.listFiles();
  -  log.debug("Removing " + files.length + " file(s) from: " + 
dataFile.getCanonicalPath());
  -  for (int i = 0; i < files.length; i++)
  -  {
  - files[i].delete();
  -  }
  -
  + 
  +  cacheStore = (CacheStore)getServer().invoke(cacheStoreObjectName, 
"getInstance", new Object[] {}, new String[] {});
  + 
 if (getState() == ServiceMBeanSupport.STARTED)
throw new Exception("Cannot be initialized from the current state");
   
 referenceSoftner = new Thread(this, "JBossMQ Cache Reference Softner");
 referenceSoftner.setDaemon(true);
 referenceSoftner.start();
  -
  }
   
  /**
  @@ -293,22 +272,6 @@
 referenceSoftner = null;
  }
   
  -   /**
  -* Gets the dataDirectory
  -* @return Returns a String
  -*/
  -   public String getDataDirectory()
  -   {
  -  return dataDirectory;
  -   }
  -   /**

[JBoss-dev] CVS update: jbossmq/src/main/org/jboss/mq/server MessageCache.java

2001-10-30 Thread Scott M Stark

  User: starksm 
  Date: 01/10/30 17:51:10

  Modified:src/main/org/jboss/mq/server MessageCache.java
  Log:
  Use the ServiceMBeanSupport.log to for logging and change the
  debug msgs to trace to avoid the excessive logging to server.log
  
  Revision  ChangesPath
  1.3   +173 -133  jbossmq/src/main/org/jboss/mq/server/MessageCache.java
  
  Index: MessageCache.java
  ===
  RCS file: /cvsroot/jboss/jbossmq/src/main/org/jboss/mq/server/MessageCache.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MessageCache.java 2001/10/28 04:07:36 1.2
  +++ MessageCache.java 2001/10/31 01:51:10 1.3
  @@ -23,342 +23,380 @@
* later.
*
* @author mailto:[EMAIL PROTECTED]";>Hiram Chirino
  - * @version$Revision: 1.2 $
  + * @version$Revision: 1.3 $
*/
  -public class MessageCache extends ServiceMBeanSupport implements MessageCacheMBean, 
MBeanRegistration, Runnable {
  -
  -   org.apache.log4j.Category cat = 
org.apache.log4j.Category.getInstance(MessageCache.class);
  -
  +public class MessageCache extends ServiceMBeanSupport implements MessageCacheMBean, 
MBeanRegistration, Runnable
  +{
  // The cached messages are orded in a LRU linked list
  private LinkedList lruCache = new LinkedList();
  -
  -   // Provides a Unique ID to MessageHanles 
  +   
  +   // Provides a Unique ID to MessageHanles
  private long messageCounter = 0;
  int cacheHits = 0;
  int cacheMisses = 0;
  -
  +   
  private File dataFile;
  private String dataDirectory;
  private Thread referenceSoftner;
  -
  +   
  private long highMemoryMark = 1024L * 1000 * 16;
  private long maxMemoryMark = 1024L * 1000 * 32;
  public static final long ONE_MEGABYTE = 1024L * 1000;
  -
  +   
  int softRefCacheSize = 0;
  int totalCacheSize = 0;
  -
  +   
  // Used to get notified when message are being deleted by GC
  ReferenceQueue referenceQueue = new ReferenceQueue();
  -
  +   
  /**
   * Adds a message to the cache
   */
  -   public MessageReference add(SpyMessage message) throws javax.jms.JMSException {
  -  cat.debug("add lock aquire");
  -  synchronized (this) {
  +   public MessageReference add(SpyMessage message) throws javax.jms.JMSException
  +   {
  +  log.trace("add lock aquire");
  +  synchronized (this)
  +  {
MessageReference mh = new MessageReference(this, new 
Long(messageCounter++), message);
lruCache.addLast(mh);
totalCacheSize++;
validateSoftReferenceDepth();
  -
  - cat.debug("add lock release");
  + 
  + log.trace("add lock release");
return mh;
 }
  }
  -
  +   
  /**
   * removes a message from the cache
   */
  -   public void remove(MessageReference mr) throws JMSException {
  -  cat.debug("remove lock aquire");
  -  synchronized (this) {
  +   public void remove(MessageReference mr) throws JMSException
  +   {
  +  log.trace("remove lock aquire");
  +  synchronized (this)
  +  {
mr.clear();
lruCache.remove(mr);
totalCacheSize--;
  - cat.debug("remove lock release");
  + log.trace("remove lock release");
 }
  }
  -
  +   
  /**
   * The strategy is that we keep the most recently used messages as
  -* Hard references.  Then we make the older ones soft references.  Making 
  +* Hard references.  Then we make the older ones soft references.  Making
   * something a soft reference stores it to disk so we need to avoid making
   * soft references if we can avoid it.  But once it is made a soft reference does
   * not mean that it is removed from memory.  Depending on how agressive the JVM's
   * GC is, it may stay around long enough for it to be used by a client doing a 
read,
   * saving us read from the file system.  If memory gets tight the GC will remove
  -* the soft references.  What we want to do is make sure there are at least some 
  +* the soft references.  What we want to do is make sure there are at least some
   * soft references available so that the GC can reclaim memory.
   * @see Runnable#run()
   */
  -   public void run() {
  -  try {
  - while (true) {
  -cat.debug("Waiting for a reference to get GCed.");
  +   public void run()
  +   {
  +  try
  +  {
  + while (true)
  + {
  +log.trace("Waiting for a reference to get GCed.");
   // Get the next soft reference that was canned by the GC
  -
  +
   Reference r = referenceQueue.remove(1000);
  -if (r != null) {
  +if (r != null)
  +{
  softRefCacheSize--;
  // the GC will free a set of messages together, so we poll them