Changeset 18

Show
Ignore:
Timestamp:
10/20/05 19:53:37 (5 years ago)
Author:
dsandler
Message:

New feature (request in ticket #13): Abandoned feeds (those which have not
been requested in a while, and are therefore probably removed from the user's
aggregator) are now cleaned up. The threshold for an abandoned feed is
currently fixed at 7 days.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • feedtree/trunk/src/net/feedtree/proxyapp/FeedInfo.java

    r17 r18  
    235235    protected Date          m_lastTaskDate; 
    236236    protected EventLog      m_eventLog; 
     237    protected Date          m_lastAccess = new Date(); 
    237238     
    238239    protected static String uriToTitle(String uri) { 
     
    356357        m_eventLog.add(e); 
    357358    } 
     359     
     360    public void touch() { m_lastAccess = new Date(); } 
     361    public Date getLastAccess() { return m_lastAccess; } 
    358362 
    359363    public SyndFeed getSyndFeed() { return m_syndFeedTemplate; } 
  • feedtree/trunk/src/net/feedtree/proxyapp/WebProxyClient.java

    r17 r18  
    5555    static float UNDERLOAD_UNSUB_PROB = 0.25f; 
    5656    static int DEFAULT_OVERLOAD_FACTOR = 3; 
     57     
     58    static long DEFAULT_STALE_FEED_AGE = 7 * DAYS; 
    5759 
    5860    static String FEEDTREE_CLIENT_FEED_TYPE = "atom_0.3"; 
     
    7981    protected Date m_startDate; 
    8082    protected SystemStats m_systemStats = new SystemStats(); 
     83    protected AbandonedFeedReaper m_feedReaper = new AbandonedFeedReaper(); 
    8184 
    8285    // ----------------------------------------------------------------- 
     86     
     87    protected class AbandonedFeedReaper { 
     88        protected Timer m_scheduler = new Timer(); 
     89        protected final long k_refresh = 60 * MINUTES; 
     90         
     91        public AbandonedFeedReaper() { 
     92            m_scheduler.scheduleAtFixedRate(new TimerTask() { 
     93                public void run() { 
     94                    long now = new Date().getTime(); 
     95                    Map feedMap = getFeeds(); 
     96                    Object[] feeds; 
     97                    synchronized(feedMap) { 
     98                        feeds = feedMap.values().toArray(); 
     99                    } 
     100                    for(int numFeeds=0; numFeeds<feeds.length; numFeeds++) { 
     101                        FeedInfo feed = (FeedInfo)(feeds[numFeeds]); 
     102                        Date lastAccess = feed.getLastAccess(); 
     103                        if ((now - lastAccess.getTime())  
     104                            > DEFAULT_STALE_FEED_AGE)  
     105                        { 
     106                            String url = feed.getUri(); 
     107                            Logger.global.info("Unsubscribing from feed (last access: " + lastAccess + "): " + url); 
     108                            unsubscribeFeed(url); 
     109                        } 
     110                    } 
     111                } 
     112            }, 0, k_refresh); 
     113        } 
     114    } 
    83115     
    84116    protected class SystemStats { 
     
    334366            if (feed != null) { 
    335367                Logger.global.fine("[proxy] generating response from feed cache"); 
    336                 // XXX: copy/paste 
     368 
     369                feed.touch(); // update the last access time 
     370 
    337371                SyndFeed generatedFeed = feed.generateSyndFeed(WebProxyClient.FEED_SIZE, m_appendEntryInfo); 
    338372