[opensource-dev] Viewer changes for Premium changes

Henri Beauchamp sldev at hotmail.com
Tue Feb 25 12:17:10 PST 2020


On Tue, 25 Feb 2020 10:48:03 -0500, Oz Linden (Scott Lawrence) wrote:

> *As we mentioned at the last Third Party Viewer meeting,

Oh yes, those meetings a non-English speaking developer cannot follow
because they are held in voice chat... How nice and practical a way
of communication !

> the upcoming  changes to Premium levels will require some viewer
> updates to maintain full compatibility.*

This is not just "full compatibility", because sadly, the way you (LL)
chose to implement the "benefits" rendered many old viewers incapable
of login into SL. More on that below.

> Why are there changes?
> 
> The viewer currently has some messages and costs hard coded

They are _*NOT*_ hard-coded. The cost is modified after login on
receiving the EconomyData message (the process_economy_data() callback
is implemented in indra/newview/llviewermessage.cpp).
By the way, that's how OpenSIM grid can (and always could) deal with
different costs than in SL.

Granted, only the fixed upload cost (currently L$10 in SL) is transmitted
by the server and used by the viewers, but extending the message with
more costs (and/or changing that cost server side, based on the logged
in avatar account level) would have kept old viewers compatible with the
login process.

> that will need to be sensitive to the account type of the user. Rather
> than just  telling the viewer the users’ account level (which we will
> also do) and then putting code into the viewer to adjust based on that
> type, we have built a more general solution. A new key ('benefits') in
> the LLSD map returned by login identifies a map whose keys are "benefit
> tags" and whose values are what that benefit level is for the logged-in
> user.

Sadly, you used an LLSD sub-array into the LLSD map, and "old" viewers
(i.e. all viewers not based on LL's v3 viewer code for the XML RPC part)
do not know what to do with such an array (they can only deal with simple
key/value pairs, not with key/arrays); this was the case of my viewer
(but I thankfully and by pure "luck" noticed the issue a few weeks before
LL did stealthily modify the login server on the main grid, because the
beta grid already had the changes which caused me to fail to login in it
at that time, and I could diagnose and fix the issue).

> For example, one of the benefit tags is "texture_upload_cost"; its value 
> is the number of L$ required for this user to upload a texture. The 
> viewer displays that cost in the upload dialog so that dialog must be 
> modified to use the value returned in the tag rather than the L$10 that 
> is currently hard coded.

This particular usage is useless and redundant, since EconomyData/
process_economy_data() already can change that value in real time (and
in fact, it could even occur on a per-sim basis if needed, and not just
at login !).
 
> Where are the changes?
> 
> The changes are in the 'DRTVWR-481 
> <https://bitbucket.org/lindenlab/viewer/branch/DRTVWR-481>' branch in 
> the viewer git repository. A viewer built from that branch will be 
> available as a Release Candidate soon.

It would have been nice to give a sufficient forewarning to avoid breaking
the login process on the main grid for many viewers (or viewer versions):
Radegast, my viewer (all versions before v1.26.24.2 are unable to login
in SL any more), OMV, etc, etc, etc.

> When can we release these changes?
>
> We strongly encourage you to integrate these changes as soon as 
> possible. You are free to begin incorporating the changes and releasing 
> them any time (but please watch for updates to them).

We don't have any choice, because of a poor design of the said changes.

Beside the redundant aspect (with the EconomyData message), there was
no backward compatibility guard.

Even if you want to get rid of EconomyData (even if I don't see why),
it would have been dead easy to implement the following protocol:
- on login request by the viewer, the server looks at the
  requested_options map (see LLLoginInstance::constructAuthParams()).
- if the said map contains the "benefits" keyword, then the server
  sends the benefits array in its reply, else it omits it.

This way, old viewers (that don't know what to do with that array) are
still able to connect, and new viewers needing that array can request
it.

> What will happen with unmodified viewers when the Premium changes go 
> into effect?
> 
> Most Second Life usage should be fine without the updates, but there may 
> be subtle problems. For example, an unmodified viewer may have the wrong 
> cost for some action; if the viewer expects the cost to be lower than 
> the simulator does, the simulator will reject the request.

Which is NOT an issue for most old viewers; e.g. I was using OMV (that
just got broken), but never used paying services with it...

Another super-useful (actually pretty much *essential*) use case for
"deprecated" viewers is to find the origin of a bug: "what was the
last viewer version which did not have that bug ?" is the first question
I pose to myself whenever a regression bug is found.Was it pre-BOM, pre-
Animesh, pre-Materials, pre-whatever-shader-or-render-pipeline-change ?

As it is today, I cannot any more test old viewer versions in SL should
I have a regression to diagnose and fix ! >:-(

I am (yet again) extremely disappointed with LL:
- No communication (a message in this list should have been posted even
  before the change would have gone live on Aditi !),
- No forewarning (it's already too late for Agni as well !),
- No anticipation of the problems induced by the planed change,
- Not even a sane, simple, trivial precaution, such as respecting LL's
  own viewer protocols design (here via the requested_options mechanism)
  for something as essential as the login process !

Shame on you, LL !

A pissed off,

Henri.


More information about the opensource-dev mailing list