<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://osimdev.org/wiki/index.php?action=history&amp;feed=atom&amp;title=OpenSimulator_Internals%2FWalkthroughs%2FBring_Up_Grid</id>
	<title>OpenSimulator Internals/Walkthroughs/Bring Up Grid - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://osimdev.org/wiki/index.php?action=history&amp;feed=atom&amp;title=OpenSimulator_Internals%2FWalkthroughs%2FBring_Up_Grid"/>
	<link rel="alternate" type="text/html" href="http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Walkthroughs/Bring_Up_Grid&amp;action=history"/>
	<updated>2026-08-04T16:06:08Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Walkthroughs/Bring_Up_Grid&amp;diff=53&amp;oldid=prev</id>
		<title>Jwbshaw: first</title>
		<link rel="alternate" type="text/html" href="http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Walkthroughs/Bring_Up_Grid&amp;diff=53&amp;oldid=prev"/>
		<updated>2026-06-30T09:07:31Z</updated>

		<summary type="html">&lt;p&gt;first&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= OpenSimulator Internals/Walkthroughs/Bring Up Grid =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Traces what happens from running the ROBUST executable to the grid being ready to accept simulator registrations and logins.&lt;br /&gt;
&lt;br /&gt;
See [[OpenSimulator Internals/Code Map/ROBUST]] for the component reference this walkthrough is built from.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Process starts ===&lt;br /&gt;
&lt;br /&gt;
 OpenSim/Server/ServerMain.cs -- OpenSimServer.Main()&lt;br /&gt;
&lt;br /&gt;
Culture set, .NET HTTP client defaults configured (connection limit 64, Nagle off, certificate validation callback installed).&lt;br /&gt;
&lt;br /&gt;
=== 2. Config loaded ===&lt;br /&gt;
&lt;br /&gt;
 OpenSim/Server/Base/HttpServerBase.cs (constructor)&lt;br /&gt;
&lt;br /&gt;
Robust.ini loaded, Include-* files merged, environment variables merged, command line args applied last. Variable substitution expands ${Section|Key} references. [Network] section read for port and SSL settings -- port is mandatory, startup throws if missing.&lt;br /&gt;
&lt;br /&gt;
No database activity yet.&lt;br /&gt;
&lt;br /&gt;
=== 3. HTTP server starts ===&lt;br /&gt;
&lt;br /&gt;
Main HTTP server bound to the port from [Network] (8002 on osimdev). Optional SSL listener if configured. Server is running but has no handlers registered yet.&lt;br /&gt;
&lt;br /&gt;
=== 4. Connector list assembled ===&lt;br /&gt;
&lt;br /&gt;
[Startup].ServiceConnectors and all keys in [ServiceList] are merged into one list.&lt;br /&gt;
&lt;br /&gt;
=== 5. Connectors loaded one at a time ===&lt;br /&gt;
&lt;br /&gt;
For each entry (format configName@port/dll:class):&lt;br /&gt;
&lt;br /&gt;
# Port parsed -- if specified, MainServer.GetHttpServer(port) creates or retrieves a server on that port. T1&amp;#039;s GatekeeperServiceInConnector, LLLoginServiceInConnector, GridInfoServerInConnector etc. run on the public port (8002). GridServiceConnector, AssetServiceConnector etc. run on the private port (8003).&lt;br /&gt;
# ServerUtils.LoadPlugin&amp;lt;IServiceConnector&amp;gt;() instantiates the class via reflection&lt;br /&gt;
# Each connector&amp;#039;s constructor:&lt;br /&gt;
#* Reads its own config section (e.g. [GridService], [AssetService])&lt;br /&gt;
#* Loads its LocalServiceModule -- the actual service implementation (e.g. GridService.cs)&lt;br /&gt;
#* The service implementation&amp;#039;s constructor opens a MySQL connection and runs schema migrations (MIGRATIONS log lines -- &amp;quot;GridStore data tables already up to date at revision 10&amp;quot; etc.)&lt;br /&gt;
#* Registers its HTTP handlers on the server for that port&lt;br /&gt;
&lt;br /&gt;
This is the step where the database tables are created or verified for every service: regions, UserAccounts, Avatars, GridUser, auth, tokens, inventoryfolders, inventoryitems, assets, Friends, AgentPrefs, Presence, hg_traveling_data.&lt;br /&gt;
&lt;br /&gt;
Special case: LLLoginServiceInConnector gets an IndexPHPHandler added to its server before its own handlers are registered.&lt;br /&gt;
&lt;br /&gt;
=== 6. GridService specifically ===&lt;br /&gt;
&lt;br /&gt;
See [[OpenSimulator Internals/Code Map/ROBUST]] service table and [[OpenSimulator Internals/GridService]] for full detail.&lt;br /&gt;
&lt;br /&gt;
GridService constructor:&lt;br /&gt;
# Reads DeleteOnUnregister, AllowDuplicateNames, AllowHypergridMapSearch from [GridService]&lt;br /&gt;
# Loads AuthenticationService if configured&lt;br /&gt;
# Registers console commands (show regions, set region flags, etc.) -- only the first instance does this&lt;br /&gt;
# Calls SetExtraServiceURLs() -- populates m_ExtraFeatures from [LoginService] and Hypergrid config (search URL, map tile URL, grid name, grid nick, gatekeeper URI)&lt;br /&gt;
# Creates HypergridLinker if HypergridLinker = true -- throws if HyperGrid config section missing&lt;br /&gt;
&lt;br /&gt;
No regions are registered in the database yet at this point -- the regions table is empty (or holds stale entries from a previous run that have not yet timed out).&lt;br /&gt;
&lt;br /&gt;
=== 7. Platform DLL fixup ===&lt;br /&gt;
&lt;br /&gt;
System.Drawing.Common.dll is copied for the current OS (Windows vs Linux) before the rest of startup completes.&lt;br /&gt;
&lt;br /&gt;
=== 8. Startup logo, plugin loader ===&lt;br /&gt;
&lt;br /&gt;
robuststartuplogo.txt printed if present. PluginLoader created for registry-based plugins (not used in a typical setup).&lt;br /&gt;
&lt;br /&gt;
=== 9. Main loop ===&lt;br /&gt;
&lt;br /&gt;
m_Server.Run() enters the console prompt loop. ROBUST is now up and listening on both ports, with every service&amp;#039;s database schema verified, but no simulator has registered yet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Database State After This Walkthrough ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Table !! State&lt;br /&gt;
|-&lt;br /&gt;
| regions || Empty (fresh grid) or stale entries from previous run&lt;br /&gt;
|-&lt;br /&gt;
| UserAccounts || GRID SERVICES system account only (UserLevel 240)&lt;br /&gt;
|-&lt;br /&gt;
| auth || Empty&lt;br /&gt;
|-&lt;br /&gt;
| assets || ~2600 library assets loaded by AssetService on its own startup path&lt;br /&gt;
|-&lt;br /&gt;
| All other tables || Empty&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== What Happens Next ==&lt;br /&gt;
&lt;br /&gt;
A simulator process starting up and calling RegisterRegion() is the next walkthrough -- see [[OpenSimulator Internals/Walkthroughs/Bring Up Region]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[OpenSimulator Internals/Code Map/ROBUST]]&lt;br /&gt;
* [[OpenSimulator Internals/GridService]]&lt;br /&gt;
* [[OpenSimulator Internals/Databases]]&lt;br /&gt;
* [[OpenSimulator Internals/Walkthroughs/Bring Up Region]]&lt;/div&gt;</summary>
		<author><name>Jwbshaw</name></author>
	</entry>
</feed>