aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorJustin Clarke Casey2008-04-20 18:45:03 +0000
committerJustin Clarke Casey2008-04-20 18:45:03 +0000
commite755727a0ff4af37f5cbd074800a15144707b4a7 (patch)
treefa64516b34378bb288ade4c2c8c8bc41e7985b61 /OpenSim
parent* On grid mode, if the inventory service is responding but returning an empty... (diff)
downloadopensim-SC-e755727a0ff4af37f5cbd074800a15144707b4a7.zip
opensim-SC-e755727a0ff4af37f5cbd074800a15144707b4a7.tar.gz
opensim-SC-e755727a0ff4af37f5cbd074800a15144707b4a7.tar.bz2
opensim-SC-e755727a0ff4af37f5cbd074800a15144707b4a7.tar.xz
* Change lazy user inventory creation on first login to synchronous rather than async.
* Add more error checking so that we don't proceed if there has been a problem with inventory retrieval
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Framework/Communications/InventoryServiceBase.cs2
-rw-r--r--OpenSim/Grid/UserServer/UserLoginService.cs35
2 files changed, 21 insertions, 16 deletions
diff --git a/OpenSim/Framework/Communications/InventoryServiceBase.cs b/OpenSim/Framework/Communications/InventoryServiceBase.cs
index aedf4b3..d4e7539 100644
--- a/OpenSim/Framework/Communications/InventoryServiceBase.cs
+++ b/OpenSim/Framework/Communications/InventoryServiceBase.cs
@@ -83,7 +83,7 @@ namespace OpenSim.Framework.Communications
83 83
84 InventoryFolderBase rootFolder = RequestRootFolder(userId); 84 InventoryFolderBase rootFolder = RequestRootFolder(userId);
85 85
86 // Agent is completely new and has no inventory structure yet. 86 // Agent has no inventory structure yet.
87 if (null == rootFolder) 87 if (null == rootFolder)
88 { 88 {
89 return null; 89 return null;
diff --git a/OpenSim/Grid/UserServer/UserLoginService.cs b/OpenSim/Grid/UserServer/UserLoginService.cs
index a3bc9f0..e71a2cc 100644
--- a/OpenSim/Grid/UserServer/UserLoginService.cs
+++ b/OpenSim/Grid/UserServer/UserLoginService.cs
@@ -303,9 +303,8 @@ namespace OpenSim.Grid.UserServer
303 protected override InventoryData GetInventorySkeleton(LLUUID userID) 303 protected override InventoryData GetInventorySkeleton(LLUUID userID)
304 { 304 {
305 m_log.DebugFormat( 305 m_log.DebugFormat(
306 "[LOGIN]: Contacting inventory service at {0} for inventory skeleton of agent {1}", 306 "[LOGIN]: Contacting inventory service at {0} for inventory skeleton of user {1}",
307 m_config.InventoryUrl, userID); 307 m_config.InventoryUrl, userID);
308
309 308
310 List<InventoryFolderBase> folders 309 List<InventoryFolderBase> folders
311 = SynchronousRestObjectPoster.BeginPostObject<Guid, List<InventoryFolderBase>>( 310 = SynchronousRestObjectPoster.BeginPostObject<Guid, List<InventoryFolderBase>>(
@@ -316,22 +315,27 @@ namespace OpenSim.Grid.UserServer
316 // which does. 315 // which does.
317 if (null == folders || folders.Count == 0) 316 if (null == folders || folders.Count == 0)
318 { 317 {
319 m_log.Warn( 318 m_log.InfoFormat(
320 "[LOGIN]: " + 319 "[LOGIN]: A root inventory folder for user {0} was not found. Requesting creation.", userID);
321 "root inventory folder user " + userID + " not found. Creating.");
322
323 RestObjectPoster.BeginPostObject<Guid>(
324 m_config.InventoryUrl + "CreateInventory/", userID.UUID);
325 320
326 // A big delay should be okay here since the recreation of the user's root folders should 321 bool created =
327 // only ever happen once. We need to sleep to let the inventory server do its work - 322 SynchronousRestObjectPoster.BeginPostObject<Guid, bool>(
328 // previously 1000ms has been found to be too short. 323 "POST", m_config.InventoryUrl + "CreateInventory/", userID.UUID);
329 Thread.Sleep(10000); 324
325 if (!created)
326 {
327 throw new Exception(
328 String.Format(
329 "The inventory creation request for user {0} did not succeed."
330 + " Please contact your inventory service provider for more information.",
331 userID));
332 }
333
330 folders = SynchronousRestObjectPoster.BeginPostObject<Guid, List<InventoryFolderBase>>( 334 folders = SynchronousRestObjectPoster.BeginPostObject<Guid, List<InventoryFolderBase>>(
331 "POST", m_config.InventoryUrl + "RootFolders/", userID.UUID); 335 "POST", m_config.InventoryUrl + "RootFolders/", userID.UUID);
332 } 336 }
333 337
334 if (folders.Count > 0) 338 if (folders != null && folders.Count > 0)
335 { 339 {
336 LLUUID rootID = LLUUID.Zero; 340 LLUUID rootID = LLUUID.Zero;
337 ArrayList AgentInventoryArray = new ArrayList(); 341 ArrayList AgentInventoryArray = new ArrayList();
@@ -358,7 +362,8 @@ namespace OpenSim.Grid.UserServer
358 { 362 {
359 throw new Exception( 363 throw new Exception(
360 String.Format( 364 String.Format(
361 "A root inventory folder for {0} could not be retrieved from the inventory service", userID)); 365 "A root inventory folder for user {0} could not be retrieved from the inventory service",
366 userID));
362 } 367 }
363 } 368 }
364 } 369 }