You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2005/12/06 00:35:25 UTC

svn commit: r354229 - in /incubator/roller/trunk/src/org/roller: business/ business/hibernate/ model/ presentation/ presentation/weblog/actions/

Author: snoopdave
Date: Mon Dec  5 15:35:12 2005
New Revision: 354229

URL: http://svn.apache.org/viewcvs?rev=354229&view=rev
Log:
Fixing ROL-911, referrer turnover very slow on large systems

Modified:
    incubator/roller/trunk/src/org/roller/business/RefererManagerImpl.java
    incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java
    incubator/roller/trunk/src/org/roller/model/RefererManager.java
    incubator/roller/trunk/src/org/roller/presentation/RollerContext.java
    incubator/roller/trunk/src/org/roller/presentation/TurnoverReferersTask.java
    incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ReferersAction.java

Modified: incubator/roller/trunk/src/org/roller/business/RefererManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/business/RefererManagerImpl.java?rev=354229&r1=354228&r2=354229&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/business/RefererManagerImpl.java (original)
+++ incubator/roller/trunk/src/org/roller/business/RefererManagerImpl.java Mon Dec  5 15:35:12 2005
@@ -76,13 +76,6 @@
     {
     }
 
-    //-----------------------------------------------------------------------
-    public synchronized void forceTurnover(String websiteId) throws RollerException
-    {
-        mLogger.debug("forceTurnover");
-        checkForTurnover(true, websiteId);
-    }
-
     //--------------------------------------------------------- Get hit counts
 
     public int getDayHits(WebsiteData website) throws RollerException

Modified: incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java?rev=354229&r1=354228&r2=354229&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java (original)
+++ incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java Mon Dec  5 15:35:12 2005
@@ -483,57 +483,45 @@
     }
     
     /**
-     * Purge referers at midnight. Zero out all dayHits and remove all
-     * referers that do not have excerpts.
+     * Clear referrer dayhits and remove referrers without excerpts.
      */
-    public void checkForTurnover( boolean forceTurnover, String websiteId )
-    throws RollerException {
-        // Note, this method doesn't need to be synchronized anymore since
-        // it's called from the timer task now, and will never be executed
-        // by two threads simultaneously.
+    public void clearReferrers() throws RollerException {
+
         if (mLogger.isDebugEnabled()) {
-            mLogger.debug("checkForTurnover");
+            mLogger.debug("clearReferrers");
+        }       
+        try {
+            Session session = ((HibernateStrategy)mStrategy).getSession();
+            String reset = "update RefererData set dayHits=0";
+            session.createQuery(reset).executeUpdate();
+            String delete = "delete RefererData where excerpt is null";
+            session.createQuery(delete).executeUpdate();
+        } catch (Exception e) {
+            mLogger.error("EXCEPTION resetting referers",e);
         }
-        
-        Date now = new Date();
-        
-        if (forceTurnover ||
-                !mDateFormat.format(now).equals(mDateFormat.format(mRefDate))) {
-            try {
-                if (websiteId == null) mRefDate = now;
-                
-                List refs;
-                try {
-                    Session session = ((HibernateStrategy)mStrategy).getSession();
-                    Criteria criteria = session.createCriteria(RefererData.class);
-                    criteria.add(Expression.gt("dayHits", new Integer(0)));
-                    if (websiteId != null) {
-                        criteria.add(Expression.eq("website.id", websiteId));
-                    }
-                    refs = criteria.list();
-                } catch (HibernateException e1) {
-                    throw new RollerException(e1);
-                }
-                
-                Integer zero = new Integer(0);
-                for (Iterator rdItr = refs.iterator(); rdItr.hasNext();) {
-                    RefererData referer = (RefererData) rdItr.next();
-                    
-                    if (   (referer.getExcerpt() != null) &&
-                            (referer.getExcerpt().trim().length() > 0)) {
-                        // Zero out dayHits of referers with excerpts
-                        referer.setDayHits(zero);
-                        storeReferer(referer);
-                    } else {
-                        // Throw away referers without excerpts
-                        removeReferer(referer.getId());
-                    }
-                }
-            } catch (RollerException e) {
-                mLogger.error("EXCEPTION resetting referers",e);
-            }
-        }
-    }
-    
+    }  
     
+    /**
+     * Clear referrer dayhits and remove referrers without excerpts.
+     */
+    public void clearReferrers(WebsiteData website) throws RollerException {
+
+        if (mLogger.isDebugEnabled()) {
+            mLogger.debug("clearReferrers");
+        }       
+        try {
+            Session session = ((HibernateStrategy)mStrategy).getSession();
+            String reset = "update RefererData set dayHits=0 where website=:site";
+            session.createQuery(reset)
+                .setParameter("site",website).executeUpdate();
+            String delete = "delete RefererData where website=:site and excerpt is null";
+            session.createQuery(delete)
+                .setParameter("site",website).executeUpdate();
+        } catch (Exception e) {
+            mLogger.error("EXCEPTION resetting referers",e);
+        }
+    }  
 }
+
+
+

Modified: incubator/roller/trunk/src/org/roller/model/RefererManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/model/RefererManager.java?rev=354229&r1=354228&r2=354229&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/model/RefererManager.java (original)
+++ incubator/roller/trunk/src/org/roller/model/RefererManager.java Mon Dec  5 15:35:12 2005
@@ -106,16 +106,15 @@
     //---------------------------------------------- Referer tracking turnover
 
     /**
-     * Force refer of referer hit counts and deletes all referers that do nto have excerpts.
+     * Clear referrer dayhits and remove referrers without excerpts.
      */
-    public void forceTurnover(String websiteId) throws RollerException;
-
+    public void clearReferrers() throws RollerException;
+    
     /**
-     * Check to see if it's time for turnover.
+     * Clear referrer dayhits and remove referrers without excerpts.
      */
-    public void checkForTurnover(boolean forceTurnover, String websiteId)
-            throws RollerException;
-
+    public void clearReferrers(WebsiteData website) throws RollerException;
+    
     //----------------------------------------------- Standard manager methods
 
     /**

Modified: incubator/roller/trunk/src/org/roller/presentation/RollerContext.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/RollerContext.java?rev=354229&r1=354228&r2=354229&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/RollerContext.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/RollerContext.java Mon Dec  5 15:35:12 2005
@@ -193,7 +193,6 @@
             roller.getThemeManager();
             setupSpellChecker();
             setupIndexManager(roller);
-            setupRefererManager(roller);
             initializePingFeatures(roller);
             setupPingQueueTask(roller);
             setupScheduledTasks(mContext, roller);
@@ -373,30 +372,6 @@
         catch (SQLException e)
         {
             mLogger.warn(e);
-        }
-    }
-
-    //------------------------------------------------------------------------
-
-    /**
-     * Add TurnoverReferersTask to run on a schedule.
-     */
-    private void setupRefererManager(Roller roller)
-    {
-        try
-        {
-            // Check for turnover when we first start
-            final RefererManager refManager = roller.getRefererManager();
-            refManager.checkForTurnover(false, null);
-
-            // Schedule a check every day, starting at end of today
-            //TurnoverReferersTask task = new TurnoverReferersTask();
-            //task.init(roller, mContext.getRealPath("/"));
-            //roller.getThreadManager().scheduleDailyTimerTask(task);
-        }
-        catch (RollerException e)
-        {
-            mLogger.warn("Couldn't schedule referer turnover task", e);
         }
     }
 

Modified: incubator/roller/trunk/src/org/roller/presentation/TurnoverReferersTask.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/TurnoverReferersTask.java?rev=354229&r1=354228&r2=354229&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/TurnoverReferersTask.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/TurnoverReferersTask.java Mon Dec  5 15:35:12 2005
@@ -41,7 +41,7 @@
         try {
             Roller roller = RollerFactory.getRoller();
             roller.begin();
-            roller.getRefererManager().checkForTurnover(true, null);
+            roller.getRefererManager().clearReferrers();
             roller.commit();
             roller.release();
             mLogger.info("task completed");   

Modified: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ReferersAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ReferersAction.java?rev=354229&r1=354228&r2=354229&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ReferersAction.java (original)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ReferersAction.java Mon Dec  5 15:35:12 2005
@@ -101,7 +101,7 @@
             {
                 RefererManager refmgr = RollerFactory.getRoller().getRefererManager();
                 WebsiteData website = rreq.getWebsite();
-                refmgr.forceTurnover(website.getId());
+                refmgr.clearReferrers(website);
                 RollerFactory.getRoller().commit();
                 
                 CacheManager.invalidate(website);