From 2e735282ec7ff9e563e99e42c114361ffd04945e Mon Sep 17 00:00:00 2001 From: Robin Malley Date: Tue, 19 May 2020 20:11:11 -0400 Subject: [PATCH] Fix cacheing Fix some cache invalidation bugs that would cause the index and author pages to not update correctly when new pastes were made. --- src/lua/init.lua | 62 +++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/src/lua/init.lua b/src/lua/init.lua index 4e2d932..3506508 100644 --- a/src/lua/init.lua +++ b/src/lua/init.lua @@ -1,7 +1,9 @@ local et = require("etlua") local sql = require("lsqlite3") local zlib = require("zlib") -local function print() end --squash prints +if PRODUCTION then + local function print() end --squash prints +end local parser_names = {"plain","imageboard"} local parsers = {} for _,v in pairs(parser_names) do @@ -231,7 +233,7 @@ end local function dirty_cache(url) stmnt_dirty_cache:bind_names{ - path = string.format("%s/%s",domain,url) + path = url } err = do_sql(stmnt_dirty_cache) stmnt_dirty_cache:reset() @@ -330,7 +332,7 @@ function home(req) local text if host == domain then --Default home page - text = render(host..path,function() + text = render(string.format("%s",domain),function() print("Cache miss, rendering index") stmnt_index:bind_names{} local err = do_sql(stmnt_index) @@ -417,7 +419,7 @@ function claim(req) local text if method == "GET" then --Get the page to claim a name - text = render(host..path,function() + text = render(string.format("%s/_claim",domain),function() print("cache miss, rendering claim page") return pages.claim{} end) @@ -474,10 +476,11 @@ function paste(req) --Get the paste page if host == domain then --For an anonymous user - ret = render(host..path,function() + ret = render(string.format("%s/_paste",host),function() print("Cache missing, rendering post page") return pages.paste{ domain = domain, + err = "", } end) else @@ -508,6 +511,7 @@ function paste(req) domain = domain, user = author, text = "", + err = "", } end elseif method == "POST" then @@ -615,6 +619,7 @@ function paste(req) http_response(req,303,"") stmnt_paste:reset() stmnt_raw:reset() + dirty_cache(string.format("%s.%s",author,domain)) dirty_cache(string.format("%s/%s",domain,url)) dirty_cache(string.format("%s",domain)) return @@ -632,7 +637,7 @@ end --A helper function for below local function read_story(host,path,idp) - return render(host..path,function() + return render(string.format("%s%s",host,path),function() print("Trying to read, id is",idp,":",decode_id(idp)) local id = decode_id(idp) print("id:",id,type(id)) @@ -679,29 +684,32 @@ function read(req) if err == sql.DONE then --We got no story stmnt_read:reset() - return pages.nostory{ + text = pages.nostory{ path = path } - end - assert(err == sql.ROW) - local title, storytext, tauthor, isanon, authorname = unpack(stmnt_read:get_values()) - storytext = zlib.decompress(storytext) - stmnt_read:reset() - if tauthor == authorid then - --The story exists and we're logged in as the - --owner, display the edit button - text = pages.read{ - domain = domain, - title = title, - text = storytext, - idp = idp, - isanon = isanon == 1, - author = authorname, - owner = true - } - else - text = read_story(host,path,idp) + assert(err == sql.ROW) + local title, storytext, tauthor, isanon, authorname = unpack(stmnt_read:get_values()) + storytext = zlib.decompress(storytext) + stmnt_read:reset() + if tauthor == authorid then + print("we're the author!") + --The story exists and we're logged in as the + --owner, display the edit button + text = pages.read{ + domain = domain, + title = title, + text = storytext, + idp = idp, + isanon = isanon == 1, + author = authorname, + owner = true + } + + else + print("we're not the author!") + text = read_story(host,path,idp) + end end else text = read_story(host,path,idp) @@ -723,7 +731,7 @@ function login(req) local text if method == "GET" then --Just give them the login page - text = render(host..path,function() + text = render(string.format("%s/_login",domain),function() return pages.login{ err = "", }