change iar load to make discrete inventory service requests rather than the cache
parent
5640cac8e0
commit
61c286f5d6
|
@ -100,6 +100,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
int successfulItemRestores = 0;
|
int successfulItemRestores = 0;
|
||||||
List<InventoryNodeBase> nodesLoaded = new List<InventoryNodeBase>();
|
List<InventoryNodeBase> nodesLoaded = new List<InventoryNodeBase>();
|
||||||
|
|
||||||
|
/*
|
||||||
if (!m_userInfo.HasReceivedInventory)
|
if (!m_userInfo.HasReceivedInventory)
|
||||||
{
|
{
|
||||||
// If the region server has access to the user admin service (by which users are created),
|
// If the region server has access to the user admin service (by which users are created),
|
||||||
|
@ -127,8 +128,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
InventoryFolderImpl rootDestinationFolder = m_userInfo.RootFolder.FindFolderByPath(m_invPath);
|
//InventoryFolderImpl rootDestinationFolder = m_userInfo.RootFolder.FindFolderByPath(m_invPath);
|
||||||
|
InventoryFolderBase rootDestinationFolder
|
||||||
|
= InventoryArchiveUtils.FindFolderByPath(
|
||||||
|
m_scene.InventoryService, m_userInfo.UserProfile.ID, m_invPath);
|
||||||
|
|
||||||
if (null == rootDestinationFolder)
|
if (null == rootDestinationFolder)
|
||||||
{
|
{
|
||||||
|
@ -142,7 +147,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
|
|
||||||
// In order to load identically named folders, we need to keep track of the folders that we have already
|
// In order to load identically named folders, we need to keep track of the folders that we have already
|
||||||
// created
|
// created
|
||||||
Dictionary <string, InventoryFolderImpl> foldersCreated = new Dictionary<string, InventoryFolderImpl>();
|
Dictionary <string, InventoryFolderBase> foldersCreated = new Dictionary<string, InventoryFolderBase>();
|
||||||
|
|
||||||
byte[] data;
|
byte[] data;
|
||||||
TarArchiveReader.TarEntryType entryType;
|
TarArchiveReader.TarEntryType entryType;
|
||||||
|
@ -157,7 +162,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
}
|
}
|
||||||
else if (filePath.StartsWith(ArchiveConstants.INVENTORY_PATH))
|
else if (filePath.StartsWith(ArchiveConstants.INVENTORY_PATH))
|
||||||
{
|
{
|
||||||
InventoryFolderImpl foundFolder
|
InventoryFolderBase foundFolder
|
||||||
= ReplicateArchivePathToUserInventory(
|
= ReplicateArchivePathToUserInventory(
|
||||||
filePath, TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType,
|
filePath, TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType,
|
||||||
rootDestinationFolder, foldersCreated, nodesLoaded);
|
rootDestinationFolder, foldersCreated, nodesLoaded);
|
||||||
|
@ -178,7 +183,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
// Reset folder ID to the one in which we want to load it
|
// Reset folder ID to the one in which we want to load it
|
||||||
item.Folder = foundFolder.ID;
|
item.Folder = foundFolder.ID;
|
||||||
|
|
||||||
m_userInfo.AddItem(item);
|
//m_userInfo.AddItem(item);
|
||||||
|
m_scene.InventoryService.AddItem(item);
|
||||||
successfulItemRestores++;
|
successfulItemRestores++;
|
||||||
|
|
||||||
// If we're loading an item directly into the given destination folder then we need to record
|
// If we're loading an item directly into the given destination folder then we need to record
|
||||||
|
@ -211,11 +217,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
/// chain, only the root node needs to be recorded
|
/// chain, only the root node needs to be recorded
|
||||||
/// </param>
|
/// </param>
|
||||||
/// <returns>The last user inventory folder created or found for the archive path</returns>
|
/// <returns>The last user inventory folder created or found for the archive path</returns>
|
||||||
public InventoryFolderImpl ReplicateArchivePathToUserInventory(
|
public InventoryFolderBase ReplicateArchivePathToUserInventory(
|
||||||
string fsPath,
|
string fsPath,
|
||||||
bool isDir,
|
bool isDir,
|
||||||
InventoryFolderImpl rootDestinationFolder,
|
InventoryFolderBase rootDestFolder,
|
||||||
Dictionary <string, InventoryFolderImpl> foldersCreated,
|
Dictionary <string, InventoryFolderBase> foldersCreated,
|
||||||
List<InventoryNodeBase> nodesLoaded)
|
List<InventoryNodeBase> nodesLoaded)
|
||||||
{
|
{
|
||||||
fsPath = fsPath.Substring(ArchiveConstants.INVENTORY_PATH.Length);
|
fsPath = fsPath.Substring(ArchiveConstants.INVENTORY_PATH.Length);
|
||||||
|
@ -228,17 +234,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
|
|
||||||
m_log.DebugFormat("[INVENTORY ARCHIVER]: Loading to folder {0}", fsPath);
|
m_log.DebugFormat("[INVENTORY ARCHIVER]: Loading to folder {0}", fsPath);
|
||||||
|
|
||||||
InventoryFolderImpl foundFolder = null;
|
InventoryFolderBase destFolder = null;
|
||||||
|
|
||||||
// XXX: Nasty way of dealing with a path that has no directory component
|
// XXX: Nasty way of dealing with a path that has no directory component
|
||||||
if (fsPath.Length > 0)
|
if (fsPath.Length > 0)
|
||||||
{
|
{
|
||||||
while (null == foundFolder && fsPath.Length > 0)
|
while (null == destFolder && fsPath.Length > 0)
|
||||||
{
|
{
|
||||||
if (foldersCreated.ContainsKey(fsPath))
|
if (foldersCreated.ContainsKey(fsPath))
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[INVENTORY ARCHIVER]: Found previously created fs path {0}", fsPath);
|
m_log.DebugFormat("[INVENTORY ARCHIVER]: Found previously created fs path {0}", fsPath);
|
||||||
foundFolder = foldersCreated[fsPath];
|
destFolder = foldersCreated[fsPath];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -255,14 +261,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
"[INVENTORY ARCHIVER]: Found no previously created fs path for {0}",
|
"[INVENTORY ARCHIVER]: Found no previously created fs path for {0}",
|
||||||
originalFsPath);
|
originalFsPath);
|
||||||
fsPath = string.Empty;
|
fsPath = string.Empty;
|
||||||
foundFolder = rootDestinationFolder;
|
destFolder = rootDestFolder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
foundFolder = rootDestinationFolder;
|
destFolder = rootDestFolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
string fsPathSectionToCreate = originalFsPath.Substring(fsPath.Length);
|
string fsPathSectionToCreate = originalFsPath.Substring(fsPath.Length);
|
||||||
|
@ -277,30 +283,39 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
int identicalNameIdentifierIndex
|
int identicalNameIdentifierIndex
|
||||||
= rawDirsToCreate[i].LastIndexOf(
|
= rawDirsToCreate[i].LastIndexOf(
|
||||||
ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR);
|
ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR);
|
||||||
string folderName = rawDirsToCreate[i].Remove(identicalNameIdentifierIndex);
|
|
||||||
|
|
||||||
|
string newFolderName = rawDirsToCreate[i].Remove(identicalNameIdentifierIndex);
|
||||||
UUID newFolderId = UUID.Random();
|
UUID newFolderId = UUID.Random();
|
||||||
m_userInfo.CreateFolder(
|
|
||||||
folderName, newFolderId, (ushort)AssetType.Folder, foundFolder.ID);
|
|
||||||
|
|
||||||
m_log.DebugFormat("[INVENTORY ARCHIVER]: Retrieving newly created folder {0}", folderName);
|
destFolder
|
||||||
foundFolder = foundFolder.GetChildFolder(newFolderId);
|
= new InventoryFolderBase(
|
||||||
m_log.DebugFormat(
|
newFolderId, newFolderName, m_userInfo.UserProfile.ID,
|
||||||
"[INVENTORY ARCHIVER]: Retrieved newly created folder {0} with ID {1}",
|
(short)AssetType.Folder, destFolder.ID, 0);
|
||||||
foundFolder.Name, foundFolder.ID);
|
m_scene.InventoryService.AddFolder(destFolder);
|
||||||
|
|
||||||
|
// UUID newFolderId = UUID.Random();
|
||||||
|
// m_scene.InventoryService.AddFolder(
|
||||||
|
// m_userInfo.CreateFolder(
|
||||||
|
// folderName, newFolderId, (ushort)AssetType.Folder, foundFolder.ID);
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[INVENTORY ARCHIVER]: Retrieving newly created folder {0}", folderName);
|
||||||
|
// foundFolder = foundFolder.GetChildFolder(newFolderId);
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[INVENTORY ARCHIVER]: Retrieved newly created folder {0} with ID {1}",
|
||||||
|
// foundFolder.Name, foundFolder.ID);
|
||||||
|
|
||||||
// Record that we have now created this folder
|
// Record that we have now created this folder
|
||||||
fsPath += rawDirsToCreate[i] + "/";
|
fsPath += rawDirsToCreate[i] + "/";
|
||||||
m_log.DebugFormat("[INVENTORY ARCHIVER]: Recording creation of fs path {0}", fsPath);
|
m_log.DebugFormat("[INVENTORY ARCHIVER]: Recording creation of fs path {0}", fsPath);
|
||||||
foldersCreated[fsPath] = foundFolder;
|
foldersCreated[fsPath] = destFolder;
|
||||||
|
|
||||||
if (0 == i)
|
if (0 == i)
|
||||||
nodesLoaded.Add(foundFolder);
|
nodesLoaded.Add(destFolder);
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return foundFolder;
|
return destFolder;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
string[] rawFolders = filePath.Split(new char[] { '/' });
|
string[] rawFolders = filePath.Split(new char[] { '/' });
|
||||||
|
|
|
@ -378,9 +378,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
Monitor.Wait(this, 60000);
|
Monitor.Wait(this, 60000);
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("userInfo.RootFolder 1: {0}", userInfo.RootFolder);
|
//Console.WriteLine("userInfo.RootFolder 1: {0}", userInfo.RootFolder);
|
||||||
|
|
||||||
Dictionary <string, InventoryFolderImpl> foldersCreated = new Dictionary<string, InventoryFolderImpl>();
|
Dictionary <string, InventoryFolderBase> foldersCreated = new Dictionary<string, InventoryFolderBase>();
|
||||||
List<InventoryNodeBase> nodesLoaded = new List<InventoryNodeBase>();
|
List<InventoryNodeBase> nodesLoaded = new List<InventoryNodeBase>();
|
||||||
|
|
||||||
string folder1Name = "a";
|
string folder1Name = "a";
|
||||||
|
@ -398,16 +398,19 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
"{0}{1}/{2}/{3}",
|
"{0}{1}/{2}/{3}",
|
||||||
ArchiveConstants.INVENTORY_PATH, folder1ArchiveName, folder2ArchiveName, itemName);
|
ArchiveConstants.INVENTORY_PATH, folder1ArchiveName, folder2ArchiveName, itemName);
|
||||||
|
|
||||||
Console.WriteLine("userInfo.RootFolder 2: {0}", userInfo.RootFolder);
|
//Console.WriteLine("userInfo.RootFolder 2: {0}", userInfo.RootFolder);
|
||||||
|
|
||||||
new InventoryArchiveReadRequest(scene, userInfo, null, (Stream)null)
|
new InventoryArchiveReadRequest(scene, userInfo, null, (Stream)null)
|
||||||
.ReplicateArchivePathToUserInventory(
|
.ReplicateArchivePathToUserInventory(
|
||||||
itemArchivePath, false, userInfo.RootFolder, foldersCreated, nodesLoaded);
|
itemArchivePath, false, scene.InventoryService.GetRootFolder(userInfo.UserProfile.ID),
|
||||||
|
foldersCreated, nodesLoaded);
|
||||||
|
|
||||||
Console.WriteLine("userInfo.RootFolder 3: {0}", userInfo.RootFolder);
|
//Console.WriteLine("userInfo.RootFolder 3: {0}", userInfo.RootFolder);
|
||||||
InventoryFolderImpl folder1 = userInfo.RootFolder.FindFolderByPath("a");
|
//InventoryFolderImpl folder1 = userInfo.RootFolder.FindFolderByPath("a");
|
||||||
|
InventoryFolderBase folder1
|
||||||
|
= InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, userInfo.UserProfile.ID, "a");
|
||||||
Assert.That(folder1, Is.Not.Null, "Could not find folder a");
|
Assert.That(folder1, Is.Not.Null, "Could not find folder a");
|
||||||
InventoryFolderImpl folder2 = folder1.FindFolderByPath("b");
|
InventoryFolderBase folder2 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, "b");
|
||||||
Assert.That(folder2, Is.Not.Null, "Could not find folder b");
|
Assert.That(folder2, Is.Not.Null, "Could not find folder b");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue