Revision: 395
Author: bslatkin
Date: Fri Nov  5 18:35:52 2010
Log: hub: fix bug in KnownFeedIdentity topic expansion
http://code.google.com/p/pubsubhubbub/source/detail?r=395

Modified:
 /trunk/hub/main.py
 /trunk/hub/main_test.py

=======================================
--- /trunk/hub/main.py  Fri Nov  5 17:57:42 2010
+++ /trunk/hub/main.py  Fri Nov  5 18:35:52 2010
@@ -1784,7 +1784,7 @@

   feed_id = db.TextProperty(required=True)
   topics = db.ListProperty(db.Text)
-  last_update = db.DateTimeProperty(auto_now=True)
+  last_update = db.DateTimeProperty()

   @classmethod
   def create_key(cls, feed_id):
@@ -1817,9 +1817,15 @@
known_feed = cls(feed_id=feed_id, key_name=get_hash_key_name(feed_id))
       if topic not in known_feed.topics:
         known_feed.topics.append(db.Text(topic))
+      known_feed.last_update = datetime.datetime.now()
       known_feed.put()
       return known_feed
-    return db.run_in_transaction(txn)
+    try:
+      return db.run_in_transaction(txn)
+    except (db.BadRequestError, apiproxy_errors.RequestTooLargeError):
+      logging.exception(
+          'Could not update feed_id=%r; expansion is already too large',
+          feed_id)

   @classmethod
   def remove(cls, feed_id, topic):
@@ -1847,6 +1853,7 @@
         known_feed.delete()
         return None
       else:
+        known_feed.last_update = datetime.datetime.now()
         known_feed.put()
         return known_feed
     return db.run_in_transaction(txn)
=======================================
--- /trunk/hub/main_test.py     Fri Nov  5 17:57:42 2010
+++ /trunk/hub/main_test.py     Fri Nov  5 18:35:52 2010
@@ -372,6 +372,16 @@
     }
     self.assertEquals(expected, result)

+  def testKnownFeedIdentityTooLarge(self):
+ """Tests when the fan-out expansion of the KnownFeedIdentity is too big."""
+    feed = KnownFeedIdentity.update(self.feed_id, self.topic)
+    KnownFeedIdentity.update(
+        self.feed_id,
+        'http://super-extra-long-topic/' + ('a' * 10000000))
+    # Doesn't explode and the update time stays the same.
+    new_feed = db.get(feed.key())
+    self.assertEquals(feed.last_update, new_feed.last_update)
+
################################################################################

 Subscription = main.Subscription

Reply via email to