Subject: Somewhat excessive version checks

From: Magnus Hagander <[email-masked]>
Date: Mon, 11 Jan 2021 23:05:44 +0100

Hi!

If I read the code correctly, pgadmin will (unless turned off) hit the
website to check the version.json file for updates *every time it
starts*.

Wouldn't it make sense to rate limit that to checking say once per 24
hours maximum? Or even 48?

It seems nobody needs the update *that* quickly, and AFAICT it does
call out to make that check synchronously on startup which means the
user is waiting.

And if/when doing that, it would be useful to include an
If-Modified-Since header on the request, so the server can just
respond with a tiny 304 reply when there is no update, which is going
to be the majority of the time. Or possibly even more efficiently,
create a custom etag and use If-None-Matches. If you make that etag be
say the version that the client has, it becomes very cheap to check
and you don't need to track any extra data.

-- 
 Magnus Hagander
 Me: https://www.hagander.net/
 Work: https://www.redpill-linpro.com/

---

From: Khushboo Vashi <[email-masked]>
Date: Tue, 12 Jan 2021 10:29:24 +0530

On Tue, Jan 12, 2021 at 3:36 AM Magnus Hagander <[email-masked]> wrote:

> Agreed, we should have some mechanism in place to limit the server hit,
maybe an asynchronous call from the client while loading.

---

From: Dave Page <[email-masked]>
Date: Tue, 12 Jan 2021 08:56:59 +0000

> website to check the version.json file for updates *every time it

Every time the server starts, which is a little different, but still...

> hours maximum? Or even 48?

That certainly wouldn't be a bad idea.

> and you don't need to track any extra data.

Patches welcome!

-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EDB: http://www.enterprisedb.com

---

From: Magnus Hagander <[email-masked]>
Date: Tue, 12 Jan 2021 20:50:10 +0100

On Tue, Jan 12, 2021 at 9:57 AM Dave Page <[email-masked]> wrote:
>
> On Mon, Jan 11, 2021 at 10:06 PM Magnus Hagander <[email-masked]> wrote:
>>
>> Hi!
>>

Hmm. So one of us is definitely reading things wrong then :) I see it
in the index() method, which has an URL router for / -- isn't that
called for every time somebody somebody starts their browser to it?
I'm not saying for every reload, but with a server install with 10
users, won't it do it once for each?

Or when is that actually called?

>> and you don't need to track any extra data.

Hah, I clearly can't even figure out when the method is called :)

And presumably you'd also want some place to store the state between
calls, so you can keep showing the warnings about upgrades? Do you
have state storage for such things arleady=

---

From: Magnus Hagander <[email-masked]>
Date: Tue, 12 Jan 2021 20:50:40 +0100

On Tue, Jan 12, 2021 at 5:59 AM Khushboo Vashi
<[email-masked]> wrote:
> Agreed, we should have some mechanism in place to limit the server hit, maybe an asynchronous call from the client while loading.

Seems async front he server would be a better choice there, if you
have some ways for that? Otherwise, how to determine which user to
trust when storing the result etc?

---

From: Dave Page <[email-masked]>
Date: Wed, 13 Jan 2021 09:02:29 +0000

> Or when is that actually called?

Huh, no you're right. It's a long time since I wrote that code :-/

> have state storage for such things arleady=

Yes - the SQLite config database.  See pgadmin.model.