Skip to content
This repository has been archived by the owner on Mar 28, 2024. It is now read-only.

[BUG-231876] llRequestSimulatorData() frequently and silently fails. #9252

Closed
1 task
sl-service-account opened this issue Mar 2, 2022 · 1 comment
Closed
1 task

Comments

@sl-service-account
Copy link

sl-service-account commented Mar 2, 2022

What just happened?

For an element of a scripted game that I host, I poll region status and region coordinates for over a decade. Ever since the most recent server release ( https://releasenotes.secondlife.com/simulator/2022-02-10.568388.html ), there have been intermittent failures using llRequestSimulatorData() where requests for data are silently dropped.

I have made changes to my system to address the issue, in case I was running up against new undocumented throttles; and because it was a decade old. The errors still persist. Here is a much simpler sample of my script that produces the same errors.

---- Sample Script ----

integer check_index;
integer check_mode  = 1;key reg_online;
key reg_location;list region_names   = [
    "The Rot",
    "Cormac",
    "Hambone Slough",
    "Fort Stygian",
    "The Great Fissure",
    "The Wastelands",
    "The Junkyard",
    "The Sand Seas",
    "North Yard",
    "Burnt Oak"
];
    
list region_coords  = [
    <201472., 265216., 0.>, //  The Rot
    <201216., 265216., 0.>, //  Cormac
    <200960., 265472., 0.>, //  Hambone Slough
    <201472., 265472., 0.>, //  Fort Stygian
    <201216., 265472., 0.>, //  The Great Fissure
    <201216., 265728., 0.>, //  The Wastelands
    <201472., 265728., 0.>, //  The Junkyard
    <200960., 265216., 0.>, //  The Sand Seas
    <201472., 265984., 0.>, //  North Yard
    <201216., 265984., 0.>  //  Burnt Oak
];default {
    state_entry() {
        check_mode      = 1;
        check_index     = llGetListLength(region_names);
        reg_online      = llRequestSimulatorData(llList2String(region_names, --check_index), DATA_SIM_STATUS);
        llResetTime();
        llSetTimerEvent(10.);
    }    dataserver(key queryid, string data) {
        llSleep(1. / 45.);
        if (queryid == reg_online) {
            llSetTimerEvent(10.);
            if (~check_index) {
                llSetText(llList2String(region_names, check_index) + ": " + data + "\n" + (string)llGetTime(), <0.0, 1.0, 1.0>, 1.0);
                if (llToLower(data) != "up") {
                    //  I do error stuff here.
                }
                --check_index;
            }            if (~check_index) {
                reg_online      = llRequestSimulatorData(llList2String(region_names, check_index), DATA_SIM_STATUS);
            } else {
                check_mode      = 2;
                check_index     = llGetListLength(region_names);
                reg_location    = llRequestSimulatorData(llList2String(region_names, --check_index), DATA_SIM_POS);
            }
        } else if (queryid == reg_location) {
            llSetTimerEvent(10.);
            if (~check_index) {
                llSetText(llList2String(region_names, check_index) + ": " + data + "\n" + (string)llGetTime(), <0.0, 1.0, 1.0>, 1.0);
                if ((vector)data == ZERO_VECTOR) {
                    llInstantMessage(llGetOwner(), llList2String(region_names, check_index) + " is reporting as ZERO_VECTOR");
                    //  I do error stuff here.
                } else {
                    region_coords  = llListReplaceList(region_coords, [(vector)data], check_index, check_index);
                }                
            }
            --check_index;
            if (~check_index) {
                reg_location    = llRequestSimulatorData(llList2String(region_names, check_index), DATA_SIM_POS);
            } else {
                //  We're All Done  Pause for a Bit, go again.
                llSetTimerEvent(0.);
                llSleep(5.);
                check_mode      = 1;
                check_index     = llGetListLength(region_names);
                reg_online      = llRequestSimulatorData(llList2String(region_names, --check_index), DATA_SIM_STATUS);
                llResetTime();
                llSetTimerEvent(10.);
            }
        } else {
            llInstantMessage(llGetOwner(), "Dataserver (unknown key): " + (string)queryid + " Data: " + data );
        }
        llResetTime();
    }    timer() {
        //  An Error, but we keep going
        if (check_mode == 1) {
            llInstantMessage(llGetOwner(), "Dataserver Timeout (Online check): " + llList2String(region_names, check_index));
            reg_online      = llRequestSimulatorData(llList2String(region_names, check_index), DATA_SIM_STATUS);
        } else if (check_mode == 2) {
            llInstantMessage(llGetOwner(), "Dataserver Timeout (Vector check): " + llList2String(region_names, check_index));
            reg_location    = llRequestSimulatorData(llList2String(region_names, check_index), DATA_SIM_POS);
        }
    }
}

What were you doing when it happened?

Here's some object names and SLT timestamps for objects that detected failures on the region "The Wastelands" on March 1st:

Object - Time:
Spawn.Navigator.4.common - 2:58pm
Spawn.Navigator.4.common - 3:10pm
Spawn.Navigator.4.uncommon - 3:11pm
Spawn.Navigator.4.uncommon - 3:11pm
Spawn.Navigator.4.common - 3:21pm
Spawn.Navigator.4.common - 3:25pm
– Region Restart at 3:32 –
Spawn.Navigator.4.common - 3:32pm
Spawn.Navigator.4.common - 3:41pm
Spawn.Navigator.4.common - 4:11pm
Spawn.Navigator.4.common - 4:16pm
Spawn.Navigator.4.common - 4:17pm
Spawn.Navigator.4.common - 4:28pm - Two Unresolved
Spawn.Navigator.4.common - 4:28pm - Two Unresolved
Spawn.Navigator.4.common - 4:28pm - Two Unresolved
Spawn.Navigator.4.rare- 4:29pm - Two Unresolved
Spawn.Navigator.4.common - 4:31pm
Spawn.Navigator.4.common - 4:36pm
Spawn.Navigator.4.common - 4:37pm
Spawn.Navigator.4.rare- 4:50pm
Spawn.Navigator.4.common - 4:52pm
Spawn.Navigator.4.common - 5:00pm
Spawn.Navigator.4.common - 5:17pm - Two Unresolved
Spawn.Navigator.4.uncommon - 5:26pm
Spawn.Navigator.4.uncommon - 5:28pm
Spawn.Navigator.4.common - 5:30pm - Three Unresolved
Spawn.Navigator.4.common - 5:33pm
Spawn.Navigator.4.uncommon - 5:36pm
Spawn.Navigator.4.common - 5:39pm - Three Unresolved
Spawn.Navigator.4.common - 5:42pm
Spawn.Navigator.4.uncommon - 5:42pm
Spawn.Navigator.4.common - 5:46pm
Spawn.Navigator.4.common - 5:57pm
Spawn.Navigator.4.common - 5:57pm
Spawn.Navigator.4.uncommon - 6:03pm

What were you expecting to happen instead?

Things to work.

Other information

Links

Related

Original Jira Fields
Field Value
Issue BUG-231876
Summary llRequestSimulatorData() frequently and silently fails.
Type Bug
Priority Unset
Status Closed
Resolution Triaged
Reporter NeoBokrug Elytis (neobokrug.elytis)
Created at 2022-03-02T20:35:53Z
Updated at 2022-04-21T21:43:49Z
{
  'Build Id': 'unset',
  'Business Unit': ['Platform'],
  'ReOpened Count': 0.0,
  'Severity': 'Unset',
  'System': 'SL Simulator',
  'Target Viewer Version': 'viewer-development',
  'What just happened?': 'For an element of a scripted game that I host, I poll region status and region coordinates for over a decade.  Ever since the most recent server release ( https://releasenotes.secondlife.com/simulator/2022-02-10.568388.html ), there have been intermittent failures using llRequestSimulatorData() where requests for data are silently dropped.  \r\n\r\nI have made changes to my system to address the issue, in case I was running up against new undocumented throttles; and because it was a decade old.  The errors still persist.  Here is a much simpler sample of my script that produces the same errors.\r\n\r\n---- Sample Script ----\r\n\r\ninteger check_index;\r\ninteger check_mode  = 1;\r\n\r\nkey reg_online;\r\nkey reg_location;\r\n\r\nlist region_names   = [\r\n    "The Rot",\r\n    "Cormac",\r\n    "Hambone Slough",\r\n    "Fort Stygian",\r\n    "The Great Fissure",\r\n    "The Wastelands",\r\n    "The Junkyard",\r\n    "The Sand Seas",\r\n    "North Yard",\r\n    "Burnt Oak"\r\n];\r\n    \r\nlist region_coords  = [\r\n    <201472., 265216., 0.>, //  The Rot\r\n    <201216., 265216., 0.>, //  Cormac\r\n    <200960., 265472., 0.>, //  Hambone Slough\r\n    <201472., 265472., 0.>, //  Fort Stygian\r\n    <201216., 265472., 0.>, //  The Great Fissure\r\n    <201216., 265728., 0.>, //  The Wastelands\r\n    <201472., 265728., 0.>, //  The Junkyard\r\n    <200960., 265216., 0.>, //  The Sand Seas\r\n    <201472., 265984., 0.>, //  North Yard\r\n    <201216., 265984., 0.>  //  Burnt Oak\r\n];\r\n\r\ndefault {\r\n    state_entry() {\r\n        check_mode      = 1;\r\n        check_index     = llGetListLength(region_names);\r\n        reg_online      = llRequestSimulatorData(llList2String(region_names, --check_index), DATA_SIM_STATUS);\r\n        llResetTime();\r\n        llSetTimerEvent(10.);\r\n    }\r\n\r\n    dataserver(key queryid, string data) {\r\n        llSleep(1. / 45.);\r\n        if (queryid == reg_online) {\r\n            llSetTimerEvent(10.);\r\n            if (~check_index) {\r\n                llSetText(llList2String(region_names, check_index) + ": " + data + "\\n" + (string)llGetTime(), <0.0, 1.0, 1.0>, 1.0);\r\n                if (llToLower(data) != "up") {\r\n                    //  I do error stuff here.\r\n                }\r\n                --check_index;\r\n            }\r\n\r\n            if (~check_index) {\r\n                reg_online      = llRequestSimulatorData(llList2String(region_names, check_index), DATA_SIM_STATUS);\r\n            } else {\r\n                check_mode      = 2;\r\n                check_index     = llGetListLength(region_names);\r\n                reg_location    = llRequestSimulatorData(llList2String(region_names, --check_index), DATA_SIM_POS);\r\n            }\r\n        } else if (queryid == reg_location) {\r\n            llSetTimerEvent(10.);\r\n            if (~check_index) {\r\n                llSetText(llList2String(region_names, check_index) + ": " + data + "\\n" + (string)llGetTime(), <0.0, 1.0, 1.0>, 1.0);\r\n                if ((vector)data == ZERO_VECTOR) {\r\n                    llInstantMessage(llGetOwner(), llList2String(region_names, check_index) + " is reporting as ZERO_VECTOR");\r\n                    //  I do error stuff here.\r\n                } else {\r\n                    region_coords  = llListReplaceList(region_coords, [(vector)data], check_index, check_index);\r\n                }                \r\n            }\r\n            --check_index;\r\n            if (~check_index) {\r\n                reg_location    = llRequestSimulatorData(llList2String(region_names, check_index), DATA_SIM_POS);\r\n            } else {\r\n                //  We\'re All Done  Pause for a Bit, go again.\r\n                llSetTimerEvent(0.);\r\n                llSleep(5.);\r\n                check_mode      = 1;\r\n                check_index     = llGetListLength(region_names);\r\n                reg_online      = llRequestSimulatorData(llList2String(region_names, --check_index), DATA_SIM_STATUS);\r\n                llResetTime();\r\n                llSetTimerEvent(10.);\r\n            }\r\n        } else {\r\n            llInstantMessage(llGetOwner(), "Dataserver (unknown key): " + (string)queryid + " Data: " + data );\r\n        }\r\n        llResetTime();\r\n    }\r\n\r\n    timer() {\r\n        //  An Error, but we keep going\r\n        if (check_mode == 1) {\r\n            llInstantMessage(llGetOwner(), "Dataserver Timeout (Online check): " + llList2String(region_names, check_index));\r\n            reg_online      = llRequestSimulatorData(llList2String(region_names, check_index), DATA_SIM_STATUS);\r\n        } else if (check_mode == 2) {\r\n            llInstantMessage(llGetOwner(), "Dataserver Timeout (Vector check): " + llList2String(region_names, check_index));\r\n            reg_location    = llRequestSimulatorData(llList2String(region_names, check_index), DATA_SIM_POS);\r\n        }\r\n    }\r\n}',
  'What were you doing when it happened?': "Here's some object names and SLT timestamps for the region The Wastelands on March 1st:\r\n\r\nObject - Time:\r\nSpawn.Navigator.4.common    - 2:58pm\r\nSpawn.Navigator.4.common    - 3:10pm\r\nSpawn.Navigator.4.uncommon - 3:11pm\r\nSpawn.Navigator.4.uncommon - 3:11pm\r\nSpawn.Navigator.4.common    - 3:21pm\r\nSpawn.Navigator.4.common    - 3:25pm\r\n-- Region Restart at 3:32 --\r\nSpawn.Navigator.4.common    - 3:32pm\r\nSpawn.Navigator.4.common    - 3:41pm\r\nSpawn.Navigator.4.common    - 4:11pm\r\nSpawn.Navigator.4.common    - 4:16pm\r\nSpawn.Navigator.4.common    - 4:17pm\r\nSpawn.Navigator.4.common    - 4:28pm  - Two Unresolved\r\nSpawn.Navigator.4.common    - 4:28pm  - Two Unresolved\r\nSpawn.Navigator.4.common    - 4:28pm  - Two Unresolved\r\nSpawn.Navigator.4.rare- 4:29pm  - Two Unresolved\r\nSpawn.Navigator.4.common    - 4:31pm\r\nSpawn.Navigator.4.common    - 4:36pm\r\nSpawn.Navigator.4.common    - 4:37pm\r\nSpawn.Navigator.4.rare- 4:50pm\r\nSpawn.Navigator.4.common    - 4:52pm\r\nSpawn.Navigator.4.common    - 5:00pm\r\nSpawn.Navigator.4.common    - 5:17pm - Two Unresolved\r\nSpawn.Navigator.4.uncommon    - 5:26pm\r\nSpawn.Navigator.4.uncommon    - 5:28pm\r\nSpawn.Navigator.4.common    - 5:30pm - Three Unresolved\r\nSpawn.Navigator.4.common    - 5:33pm\r\nSpawn.Navigator.4.uncommon    - 5:36pm\r\nSpawn.Navigator.4.common    - 5:39pm - Three Unresolved\r\nSpawn.Navigator.4.common    - 5:42pm\r\nSpawn.Navigator.4.uncommon    - 5:42pm\r\nSpawn.Navigator.4.common    - 5:46pm\r\nSpawn.Navigator.4.common    - 5:57pm\r\nSpawn.Navigator.4.common    - 5:57pm\r\nSpawn.Navigator.4.uncommon    - 6:03pm ",
  'What were you expecting to happen instead?': 'Things to work.',
}
@sl-service-account
Copy link
Author

NeoBokrug Elytis commented at 2022-03-04T17:37:37Z

There are far more failures during peak concurrency.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

1 participant