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