Be notified of new releases
Create your free GitHub account today to subscribe to this repository for new releases and build software alongside 28 million developers.Sign up
This version rolled out to the InWorldz grid on 2016-01-07. This is the second public release version of Halcyon.
InWorldz Halcyon 0.9.19 R5848
This update provides many significant fixes and enhancements. It provides a more complete implementation of parcel access checks, improvements to user profile caching, performance improvements to region crossings and parcel crossings, and cross-region access checks entering a parcel across a region border. It also includes a few goodies for LSL scripters, although mostly this is related to the environment in which the scripts are running, InWorldz and other Halcyon servers:
Crossing Performance and Parcel Entry Checks
- Made the initial object crossing communications aware of seated avatars. This allows additional crossing pre-checks previously only done on the object owner UUID, to also be performed on any avatars seated on the object. This resolves problems crossing into a region, into a no-access parcel, by sitting on an object, but after crossing, parcel access error handling was very ugly. This also resolves some cases of ending up "in the sky" while seated, or at 0,0,0. Also consolidated region and parcel checks, removing duplicate specific code (that was sometimes different/incomplete).
- Removed a redundant parcel change trigger that was forcing two groups membership requests on any crossing to a group parcel. Then changed the parcel entry test to use the group info from the avatar in memory if there is one. This avoids a group membership lookup on each border/region crossing where there's already a presence. (This should improve performance of regions crossings and parcel crossings.)
- Some additional fixes for avatars attempting to enter parcels they cannot enter.
- Entry from one parcel, into another parcel in the same region, now properly enforces parcel restrictions, preventing the object from entering no-access parcels. This changes how avatars and objects are dealt with on restricted parcels: For restricted parcels, or avatars, owners of objects, and passengers that are banned from a parcel, both avatars and non-physical objects are just stopped dead at the parcel border. For physical objects, we cannot prevent entry so they are instead returned to the owner after unseating the riders at the parcel border. This fixes lots of problems where the avatars were allowed in if they pushed hard enough, physical objects (including vehicles) were always allowed in, and sometimes only the objects were tested rather than objects and their passengers. Also some problems with using the seated avatar position (near 0,0,0) as an absolute position. This is all separate from the region crossing pre-checks mentioned above, which never unseats an avatar or returns the object, just prevents the crossing into a banned/restricted region or even parcel.
- Also included an optimization in updating the object position to do nothing if the object hasn't moved.
- Added a performance improvement to delay or avoid the estate-wide access check in most cases, since it may require an EO partner profile lookup, which may not be cached. This may provide a slight improvement in the performance of all region and parcel crossings.
Other Performance and Reliability
- Fixed a problem where there were some cases where no-mod objects could be modified, that was supposed to be fixed in the previous update but did not make it. Fixes Mantis #3115.
- Replaced object sale pre-checks with warning messages. Fixes problems with IW3 and other viewers that don't have an Apply button in the Edit window, that prevent checking For Sale checkbox for no-copy or no-trans objects to reach valid object settings. Also a usability improvement in other viewers such as IW2. Fixes the catch-22 problem reported here.
- Added an unloaded script cache to the Phlox loader, to prevent disk thrashing when scripts are rapidly loaded and unloaded during rez/derez, e.g. temporary objects.
- Fixed forced group membership database queries to be optimized, if possible, to only check if a user was a member, especially for the crossings case. Uses the client connection groups list if there is one, rather than fetching from the database.
- Added aging support as well as maintaining a reserve size to the LRU (least-recently used) caches, although this is not presently used in any of the queues yet, however will keep memory usage low (no "leaks") while allowing these caches to support much larger burst usage limits.
- Significant rework of user profiles to separate network and database operations from the actual profile management (caching). This provides more selective operations (e.g. such as not forcing a profile fetch just because the code needs to translate a UUID to a name). Fixed some places the wrong locks were used, many other small fixes. Replaced many heavier profile calls with lighter ones where possible. Transitions to or from local user are now done as conversion rather than a purge and forced refresh, for an increase in cache hits and reduction of I/O blocking.
- Force a user profile to be refreshed when the user enters the region, so that changes in other regions are visible. This is completely async now so that it does not impact crossing speed.
- Removed the redundant low-level cache for user profiles in in the user data plugin, since it was already fully cached in the user profile manager code.
- Replaced the more complex "generic" object permissions code with a simple direct series of tests. The generic tests still had bugs in not returning the result after each in a series of override tests (not overriding). For example, the locked status of objects could be ignored.
- [R5816] This update addresses region server deadlock problems seen on the Diamond Haven and Clothes regions, and possibly others, that would appear to be a down region to users.
- [R5819] This update address a problem loading region environment (Windlight) settings.
- [R5820] This update includes a fix to avoid repeating the more costly parcel entry checks when an avatar has not moved in such a way that the user may have changed parcels.
- [R5825] This update fixes problems with user connection caching which could find stale connection info, which caused the last login location / online presence problems referred to in update 4 at the top of this message.
- [R5835] Updates to address the problems reported with online status and last logoff/logon location.
- [R5835] Adds serve-side prevention protecting against the many many repeated duplicate calling cards being created due to a viewer bug. It won't fix the viewer problem or clean any existing cases, but it won't allow new duplicates to be created. (This could be very important both to users and to grid hosts.)
- [R5844] Resolves the problems with "temp profiles" used by bots. This problem made it impossible to load a bot profile, which meant checking for existence and checking for duplicate names and many of the bot functions were failing.
- [R5848] Fixes a problem with the region caching of avatar connection info. It caused quite a bit of laggy response when terraforming, and probably a few other cases, and was hard on servers performance.
- A special nod to the new Halcyon open-source developers, taking care of many of the loose ends we don't usually get enough time for, and several cleanup jobs have been addressed.
- More Halcyon naming cleanup, including any remaining references to OpenSim.ini, dead code removal, added some helpful documentation for Halcyon developers.
- Lots of updates to the .gitignores, for both Windows and Linux builds.
- Many useful and constructive suggestions, including much of the environment additions and changes below.
Halcyon Environment, Versioning and LSL Updates
- Added separate software name and channel texts so that these can be differentiated in the different usage cases.
- Startup messages, show info command, and some viewer-visible cases now show the "normal" version in x.y.z.r format rathar than x.y.z Rnnnn. A couple of cases where the server version is arbitrary and we now x.y.z.r format now. This includes llRequestSimulatorData(DATA_SIM_RELEASE) and AgentMovementComplete packets back to the viewer.
- llGetEnv has been updated for other Halcyon variants, as well as other convenient enhancements.
- llGetEnv is no longer case-sensitive.
- llGetEnv("sim_channel") returns the longer software channel text, "Halcyon Server". (This is the longer form of llGetEnv("platform") which would be "Halcyon".) Does not change across grids as this is about the simulator software.
- llGetEnv("sim_version") returns the region's numeric version in a "x.y.z.r" form, for example "0.9.18.9999". Does not change across grids, as this is about the simulator software.
- llGetEnv("long_version") returns the region's full version text, such as "Halcyon 1.2.3 R9999". Does not change across grids, as this is about the simulator software.
- llGetEnv("short_version") returns the region's short version text, such as "Halcyon 1.2.3" (without revision info). Does not change across grids, as this is about the simulator software.
- llGetEnv("simulator_hostname") returns the external (TCP/IP) hostname.
- llGetSimulatorHostname also now just calls llGetEnv("simulator_hostname") for factored consistency.
- llGetEnv("simulator_netname") returns the former result from "simulator_hostname", the Windows machine name (not very useful).
- Some llGetEnv tags return values that indicate the InWorldz main grid values by default; other Halcyon installations can simply add the INI option to override.
- llGetEnv("grid_name") returns the [GridInfo] gridname= value from the Halcyon.ini file, or "InWorldz" if there is none.
- llGetEnv("grid_nick") returns the [GridInfo] gridnick= value from the Halcyon.ini file, or "InWorldz" if there is none.
- llGetEnv("grid_management") returns the [GridInfo] gridmanagement= value from the Halcyon.ini file, or "InWorldz" if there is none. This field allows scripts to differentiate between servers administered by InWorldz LLC and other non-IW Halcyon grids and servers.
- llGetEnv("InWorldz") returns "1" in the cases where "grid_management" returns "InWorldz" (which is the default, see above).
- llGetEnv("Halcyon") returns "1" in the cases where the software name is "Halcyon" (currently all Halcyon builds).
- The short software name is "Halcyon", while the software channel is the longer "Halcyon Server" text that is sometimes needed.
- llGetEnv("platform") returns the software name, and is used in the "platform" entry in the GridInfo returned to viewers. This previously returned "OpenSim" and thus may have some viewer-side effects, but where different, these should be positive changes, such as possible changing export rules to match SL rather than just checking permissions (like OpenSim), although some viewers will already use the grid name for that. (This may bring other viewers more in line with the IW viewer, if it has any effect at all.)
- llGetEnv("shard") returns the [Network] shard= value from the Halcyon.ini file, or "" if there is none. The purpose of this field is to allow viewers to distinguish beta vs main grid, etc. However it may be simpler and more reliable to use the "grid_nick" value instead, as "shard" is probably incorrectly set to "InWorldz" in most cases currently.