Some fixes to make the notice stream class work

This commit is contained in:
Evan Prodromou 2011-03-23 11:59:01 -04:00
parent efb6a7b441
commit 2b901894c2
4 changed files with 21 additions and 9 deletions

View File

@ -87,6 +87,16 @@ class Fave extends Memcached_DataObject
return $stream->getNotices($offset, $limit, $since_id, $max_id);
}
function idStream($user_id, $offset=0, $limit=NOTICES_PER_PAGE, $own=false, $since_id=0, $max_id=0)
{
$stream = new NoticeStream(array('Fave', '_streamDirect'),
array($user_id, $own),
($own) ? 'fave:ids_by_user_own:'.$user_id :
'fave:ids_by_user:'.$user_id);
return $stream->getNoticeIds($offset, $limit, $since_id, $max_id);
}
/**
* Note that the sorting for this is by order of *fave* not order of *notice*.
*

View File

@ -45,7 +45,7 @@ require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
/* We keep 200 notices, the max number of notices available per API request,
* in the memcached cache. */
define('NOTICE_CACHE_WINDOW', 200);
define('NOTICE_CACHE_WINDOW', NoticeStream::CACHE_WINDOW);
define('MAX_BOXCARS', 128);
@ -548,7 +548,7 @@ class Notice extends Memcached_DataObject
if (empty($profile)) {
return false;
}
$notice = $profile->getNotices(0, NOTICE_CACHE_WINDOW);
$notice = $profile->getNotices(0, NoticeStream::CACHE_WINDOW);
if (!empty($notice)) {
$last = 0;
while ($notice->fetch()) {
@ -1656,7 +1656,7 @@ class Notice extends Memcached_DataObject
}
}
return Notice::getStreamByIds($ids);
return NoticeStream::getStreamByIds($ids);
}
function _repeatStreamDirect($limit)

View File

@ -550,7 +550,7 @@ class Profile extends Memcached_DataObject
// This is the stream of favorite notices, in rev chron
// order. This forces it into cache.
$ids = Fave::stream($this->id, 0, NOTICE_CACHE_WINDOW);
$ids = Fave::idStream($this->id, 0, NoticeStream::CACHE_WINDOW);
// If it's in the list, then it's a fave
@ -562,7 +562,7 @@ class Profile extends Memcached_DataObject
// then the cache has all available faves, so this one
// is not a fave.
if (count($ids) < NOTICE_CACHE_WINDOW) {
if (count($ids) < NoticeStream::CACHE_WINDOW) {
return false;
}

View File

@ -47,6 +47,8 @@ if (!defined('STATUSNET')) {
class NoticeStream
{
const CACHE_WINDOW = 200;
public $generator = null;
public $args = null;
public $cachekey = null;
@ -71,13 +73,13 @@ class NoticeStream
{
$cache = Cache::instance();
// We cache NOTICE_CACHE_WINDOW elements at the tip of the stream.
// We cache self::CACHE_WINDOW elements at the tip of the stream.
// If the cache won't be hit, just generate directly.
if (empty($cache) ||
$sinceId != 0 || $maxId != 0 ||
is_null($limit) ||
($offset + $limit) > NOTICE_CACHE_WINDOW) {
($offset + $limit) > self::CACHE_WINDOW) {
return $this->generate($offset, $limit, $sinceId, $maxId);
}
@ -105,7 +107,7 @@ class NoticeStream
if ($laststr !== false) {
$window = explode(',', $laststr);
$last_id = $window[0];
$new_ids = $this->generate(0, NOTICE_CACHE_WINDOW, $last_id, 0);
$new_ids = $this->generate(0, self::CACHE_WINDOW, $last_id, 0);
$new_window = array_merge($new_ids, $window);
@ -122,7 +124,7 @@ class NoticeStream
// No cache hits :( Generate directly and stick the results
// into the cache. Note we generate the full cache window.
$window = $this->generate(0, NOTICE_CACHE_WINDOW, 0, 0);
$window = $this->generate(0, self::CACHE_WINDOW, 0, 0);
$windowstr = implode(',', $window);