Change expires column to expires_ts

This commit is contained in:
Erik Johnston 2017-09-28 12:37:53 +01:00
parent 77f1d24de3
commit ae79764fe5
3 changed files with 29 additions and 10 deletions

View File

@ -137,7 +137,7 @@ class PreviewUrlResource(Resource):
cache_result = yield self.store.get_url_cache(url, ts) cache_result = yield self.store.get_url_cache(url, ts)
if ( if (
cache_result and cache_result and
cache_result["download_ts"] + cache_result["expires"] > ts and cache_result["expires_ts"] > ts and
cache_result["response_code"] / 100 == 2 cache_result["response_code"] / 100 == 2
): ):
respond_with_json_bytes( respond_with_json_bytes(
@ -246,7 +246,7 @@ class PreviewUrlResource(Resource):
url, url,
media_info["response_code"], media_info["response_code"],
media_info["etag"], media_info["etag"],
media_info["expires"], media_info["expires"] + media_info["created_ts"],
json.dumps(og), json.dumps(og),
media_info["filesystem_id"], media_info["filesystem_id"],
media_info["created_ts"], media_info["created_ts"],

View File

@ -62,7 +62,7 @@ class MediaRepositoryStore(SQLBaseStore):
def get_url_cache_txn(txn): def get_url_cache_txn(txn):
# get the most recently cached result (relative to the given ts) # get the most recently cached result (relative to the given ts)
sql = ( sql = (
"SELECT response_code, etag, expires, og, media_id, download_ts" "SELECT response_code, etag, expires_ts, og, media_id, download_ts"
" FROM local_media_repository_url_cache" " FROM local_media_repository_url_cache"
" WHERE url = ? AND download_ts <= ?" " WHERE url = ? AND download_ts <= ?"
" ORDER BY download_ts DESC LIMIT 1" " ORDER BY download_ts DESC LIMIT 1"
@ -74,7 +74,7 @@ class MediaRepositoryStore(SQLBaseStore):
# ...or if we've requested a timestamp older than the oldest # ...or if we've requested a timestamp older than the oldest
# copy in the cache, return the oldest copy (if any) # copy in the cache, return the oldest copy (if any)
sql = ( sql = (
"SELECT response_code, etag, expires, og, media_id, download_ts" "SELECT response_code, etag, expires_ts, og, media_id, download_ts"
" FROM local_media_repository_url_cache" " FROM local_media_repository_url_cache"
" WHERE url = ? AND download_ts > ?" " WHERE url = ? AND download_ts > ?"
" ORDER BY download_ts ASC LIMIT 1" " ORDER BY download_ts ASC LIMIT 1"
@ -86,14 +86,14 @@ class MediaRepositoryStore(SQLBaseStore):
return None return None
return dict(zip(( return dict(zip((
'response_code', 'etag', 'expires', 'og', 'media_id', 'download_ts' 'response_code', 'etag', 'expires_ts', 'og', 'media_id', 'download_ts'
), row)) ), row))
return self.runInteraction( return self.runInteraction(
"get_url_cache", get_url_cache_txn "get_url_cache", get_url_cache_txn
) )
def store_url_cache(self, url, response_code, etag, expires, og, media_id, def store_url_cache(self, url, response_code, etag, expires_ts, og, media_id,
download_ts): download_ts):
return self._simple_insert( return self._simple_insert(
"local_media_repository_url_cache", "local_media_repository_url_cache",
@ -101,7 +101,7 @@ class MediaRepositoryStore(SQLBaseStore):
"url": url, "url": url,
"response_code": response_code, "response_code": response_code,
"etag": etag, "etag": etag,
"expires": expires, "expires_ts": expires_ts,
"og": og, "og": og,
"media_id": media_id, "media_id": media_id,
"download_ts": download_ts, "download_ts": download_ts,
@ -242,8 +242,8 @@ class MediaRepositoryStore(SQLBaseStore):
def get_expired_url_cache(self, now_ts): def get_expired_url_cache(self, now_ts):
sql = ( sql = (
"SELECT media_id FROM local_media_repository_url_cache" "SELECT media_id FROM local_media_repository_url_cache"
" WHERE download_ts + expires < ?" " WHERE expires_ts < ?"
" ORDER BY download_ts + expires ASC" " ORDER BY expires_ts ASC"
" LIMIT 100" " LIMIT 100"
) )

View File

@ -14,4 +14,23 @@
*/ */
CREATE INDEX local_media_repository_url_idx ON local_media_repository(created_ts) WHERE url_cache IS NOT NULL; CREATE INDEX local_media_repository_url_idx ON local_media_repository(created_ts) WHERE url_cache IS NOT NULL;
CREATE INDEX local_media_repository_url_cache_expires_idx ON local_media_repository_url_cache((download_ts + expires));
-- we need to change `expires` to `expires_ts` so that we can index on it. SQLite doesn't support
-- indices on expressions until 3.9.
CREATE TABLE local_media_repository_url_cache_new(
url TEXT,
response_code INTEGER,
etag TEXT,
expires_ts BIGINT,
og TEXT,
media_id TEXT,
download_ts BIGINT
);
INSERT INTO local_media_repository_url_cache_new
SELECT url, response_code, etag, expires + download_ts, og, media_id, download_ts FROM local_media_repository_url_cache;
DROP TABLE local_media_repository_url_cache;
ALTER TABLE local_media_repository_url_cache_new RENAME TO local_media_repository_url_cache;
CREATE INDEX local_media_repository_url_cache_expires_idx ON local_media_repository_url_cache(expires_ts);