Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Special pages
Open Simulator Technical Help
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
OpenSimulator Internals/Data Dictionaries
Page
Discussion
English
Read
Edit
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
View history
General
What links here
Related changes
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
= OpenSimulator Internals/Data Dictionaries = ROBUST and region databases share the same database server instance as separate databases. All tables verified against source code and MySQL migration files. Where the existing wiki disagrees with source, source takes priority. Discrepancies are noted. == assets == {| class="wikitable" ! Field !! Type !! Notesid-name-description-assetType-local-temporary-data-create_time-access_time-asset_flags-CreatorID-sha1} Assets are immutable by design -- no updates, only inserts. No built-in garbage collection. When an object is rezzed on a foreign HyperGrid grid, assets are copied to that grid's asset table -- same UUID, separate copy, no link between them, no cleanup on either end. === AssetFlags enum (asset_flags column) === {| class="wikitable" ! Value !! Name !! Notes0-1-2-4} === Asset type classification (computed, not stored) === IsBinaryAsset: Animation, Gesture, Simstate, Unknown, Object, Sound, SoundWAV, Texture, TextureTGA, Folder, ImageJPEG, ImageTGA, Mesh, LSLBytecode IsTextualAsset: everything else ContainsReferences: textual assets excluding Notecard, CallingCard, LSLText, Landmark == InventoryService == Unlike AssetService, the xinventory service is an RPC interface exposing a single URI (e.g. http://localhost:8003/xinventory). Different operations (add item, get item, etc.) are controlled via a METHOD parameter. === Inventory Item === {| class="wikitable" ! Field !! Type !! NotesID-Name-Description-AssetID-AssetType-InvType-Folder-Owner-CreatorId-CreatorData-CreationDate-BasePermissions-CurrentPermissions-NextPermissions-EveryOnePermissions-GroupPermissions-GroupID-GroupOwned-Flags-SalePrice-SaleType} === Inventory Folder === {| class="wikitable" ! Field !! Type !! NotesID-Name-Owner-ParentID-Type-Version} Note: where multiple folders are returned, the folder element may have an underscore and index appended (e.g. folder_0). This is for historical reasons. == inventoryfolders == {| class="wikitable" ! Field !! Type !! NotesfolderID-agentID-parentFolderID-folderName-type-version} == inventoryitems == {| class="wikitable" ! Field !! Type !! NotesinventoryID-assetID-assetType-invType-inventoryName-inventoryDescription-creatorID-avatarID-parentFolderID-groupID-groupOwned-inventoryBasePermissions-inventoryCurrentPermissions-inventoryNextPermissions-inventoryEveryOnePermissions-inventoryGroupPermissions-salePrice-saleType-creationDate-flags} Permissions live here, not in the asset table. The same underlying asset UUID can exist in multiple users' inventories with different permissions on each copy. == auth == {| class="wikitable" ! Field !! Type !! NotesUUID-passwordHash-passwordSalt-webLoginKey-accountType} == tokens == {| class="wikitable" ! Field !! Type !! NotesUUID-token-validity} Confirmed unused per wiki. == regions == {| class="wikitable" ! Field !! Type !! Notesuuid-regionHandle-regionName-serverIP-serverPort-serverHttpPort-serverURI-locX-locY-locZ-sizeX-sizeY-ScopeID-owner_uuid-PrincipalID-Token-access-flags-last_seen-regionMapTexture-parcelMapTexture-originUUID-eastOverrideHandle-westOverrideHandle-southOverrideHandle-northOverrideHandle-regionRecvKey-regionSendKey-regionSecret-regionDataURI-regionAssetURI-regionAssetRecvKey-regionAssetSendKey-regionUserURI-regionUserRecvKey-regionUserSendKey-serverRemotingPort} == PresenceService == RPC interface. Operations controlled via METHOD parameter. === getagents request === {| class="wikitable" ! Field !! Type !! Notesuuids[]-METHOD} If no online users are found, an empty result is returned. == Presence == {| class="wikitable" ! Field !! Type !! NotesUserID-RegionID-SessionID-SecureSessionID-LastSeen} == UserAccountService == === Account fields === {| class="wikitable" ! Field !! Type !! NotesPrincipalID-FirstName-LastName-Email-ScopeID-Created-UserLevel-UserFlags-UserTitle-LocalToGrid-ServiceURLs} Note: where multiple accounts are returned, the account element may have an underscore and index appended. Historical reasons. == UserAccounts == {| class="wikitable" ! Field !! Type !! NotesPrincipalID-ScopeID-FirstName-LastName-Email-ServiceURLs-Created-UserLevel-UserFlags-UserTitle-active} == GridUser == {| class="wikitable" ! Field !! Type !! NotesUserID-HomeRegionID-HomePosition-HomeLookAt-LastRegionID-LastPosition-LastLookAt-Online-Login-Logout} Records are added on first login but never removed. Online status less accurate than Presence table. Service ignores users marked online for more than 5 days. == hg_traveling_data == {| class="wikitable" ! Field !! Type !! NotesSessionID-UserID-GridExternalName-ServiceToken-ClientIPAddress-MyIPAddress-TMStamp} DeleteOld() called on UserAgentService startup -- one of the few places active cleanup occurs in the codebase. == Friends == {| class="wikitable" ! Field !! Type !! NotesPrincipalID-Friend-Flags-Offered} TheirFlags is not stored -- computed at query time via self-join. Returns -1 if reverse friendship record does not exist (friendship not yet reciprocated). == Avatars == {| class="wikitable" ! Field !! Type !! NotesPrincipalID-Name-Value} No fixed columns -- all appearance data stored as named key-value pairs. Each appearance attribute is a separate row. Schema is open-ended by design. Ghost fields in API responses (OpenSimulator 0.7.4 and before): MAXVERSION, MINVERSION, METHOD, and UserID were accidentally serialized into responses and may appear in data from old servers. All can be ignored. === Known attribute names (Name column values) === {| class="wikitable" ! Name !! Value format !! NotesAvatarHeight-AvatarType-Serial-VisualParams-Wearable <p>:<n>} == GroupsService == Core groups service is not enabled by default. The external XmlRpc/Flotsam groups service is the common alternative. {| class="wikitable" ! Field !! Type !! NotesGroupID-GroupName-Charter-FounderID-FounderUUI-InsigniaID-MembershipFee-OpenEnrollment-OwnerRoleID-AllowPublish-MaturePublish-ShownInList-ServiceLocation-MembershipCount-RoleCount} == os_groups_groups == {| class="wikitable" ! Field !! Type !! NotesGroupID-Name-Charter-Location-InsigniaID-FounderID-MembershipFee-OpenEnrollment-ShowInList-AllowPublish-MaturePublish-OwnerRoleID} == os_groups_membership == {| class="wikitable" ! Field !! Type !! NotesGroupID-PrincipalID-SelectedRoleID-Contribution-ListInProfile-AcceptNotices-AccessToken} == os_groups_roles == {| class="wikitable" ! Field !! Type !! NotesGroupID-RoleID-Name-Description-Title-Powers} Default role power sets: Everyone: AllowSetHome, Accountable, JoinChat, AllowVoiceChat, ReceiveNotices, StartProposal, VoteOnProposal Officers: Everyone powers plus land, object, and member management powers Owners: Officer powers plus CreateRole, DeleteRole, AssignMember, RemoveMember, GroupBanAccess, and others == os_groups_rolemembership == {| class="wikitable" ! Field !! Type !! NotesGroupID-RoleID-PrincipalID} Junction table only. Links principals to roles within a group. == os_groups_invites == {| class="wikitable" ! Field !! Type !! NotesInviteID-GroupID-RoleID-PrincipalID-TMStamp} A user can only have one pending invite per group at a time (GroupID+PrincipalID unique key). == os_groups_notices == {| class="wikitable" ! Field !! Type !! NotesNoticeID-GroupID-TMStamp-FromName-Subject-Message-HasAttachment-AttachmentType-AttachmentName-AttachmentItemID-AttachmentOwnerID} == os_groups_principals == {| class="wikitable" ! Field !! Type !! NotesPrincipalID-ActiveGroupID} Originally from Diva Distro (diva_groups_* tables). Migrated to os_groups_* in version 2 of the migration file. == Filesystem Storage == === MapImageService === Not stored in the database. All map tiles are JPEG files on the filesystem. Config key: TilesStoragePath in [MapImageService] section. Defaults to maptiles/ Directory structure: maptiles/{scopeID}/ File naming: map-{zoomLevel}-{x}-{y}-objects.jpg Zoom levels: 8 levels. Level 1 is full resolution (256x256 pixels). Levels 2-8 generated automatically by downsampling 4 adjacent tiles into 1. Multi-resolution tile generation is queued and asynchronous. Waits 60 seconds after a tile arrives before building zoom levels. Missing tile returns a pre-cached water-coloured JPEG (RGB 29, 72, 96) rather than an error. All file I/O uses a single mutex. Thread safe but potentially a bottleneck on busy grids. == Simulator Services == These are OpenSimulator internal services, not Second Life or viewer-facing services. Run per-simulator, not on ROBUST. All interfaces in OpenSim.Services.Interfaces. {| class="wikitable" ! Service !! DescriptionLand-Library-Simulation} == Simulator Database == Run per-simulator. Not yet fully documented. {| class="wikitable" ! Table !! Descriptionland-landaccesslist-primitems-prims-primshapes-regionban-regionsettings-regionwindlight-terrain} == Estate Database == Run per-simulator. Not yet fully documented. {| class="wikitable" ! Table !! Descriptionestate_groups-estate_managers-estate_map-estate_settings-estate_users-estateban} == See Also == [[OpenSimulator Internals/ROBUST Services]] [[OpenSimulator Internals/GridService]]
Summary:
Please note that all contributions to Open Simulator Technical Help may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Open Simulator Technical Help:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Search
Search
Editing
OpenSimulator Internals/Data Dictionaries
Add topic