Add ids to iar requests
Stop save iar test wrongly relying on thread pulsing (still disabled though)remotes/origin/0.6.7-post-fixes
parent
4c560df8ac
commit
7ca61e0174
|
@ -59,6 +59,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
|||
protected TarArchiveWriter m_archiveWriter;
|
||||
protected UuidGatherer m_assetGatherer;
|
||||
|
||||
/// <value>
|
||||
/// ID of this request
|
||||
/// </value>
|
||||
protected Guid m_id;
|
||||
|
||||
/// <value>
|
||||
/// Used to collect the uuids of the assets that we need to save into the archive
|
||||
/// </value>
|
||||
|
@ -78,8 +83,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
|||
/// Constructor
|
||||
/// </summary>
|
||||
public InventoryArchiveWriteRequest(
|
||||
InventoryArchiverModule module, CachedUserInfo userInfo, string invPath, string savePath)
|
||||
Guid id, InventoryArchiverModule module, CachedUserInfo userInfo, string invPath, string savePath)
|
||||
: this(
|
||||
id,
|
||||
module,
|
||||
userInfo,
|
||||
invPath,
|
||||
|
@ -91,8 +97,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
|||
/// Constructor
|
||||
/// </summary>
|
||||
public InventoryArchiveWriteRequest(
|
||||
InventoryArchiverModule module, CachedUserInfo userInfo, string invPath, Stream saveStream)
|
||||
Guid id, InventoryArchiverModule module, CachedUserInfo userInfo, string invPath, Stream saveStream)
|
||||
{
|
||||
m_id = id;
|
||||
m_module = module;
|
||||
m_userInfo = userInfo;
|
||||
m_invPath = invPath;
|
||||
|
@ -116,7 +123,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
|||
succeeded = false;
|
||||
}
|
||||
|
||||
m_module.TriggerInventoryArchiveSaved(succeeded, m_userInfo, m_invPath, m_saveStream, reportedException);
|
||||
m_module.TriggerInventoryArchiveSaved(
|
||||
m_id, succeeded, m_userInfo, m_invPath, m_saveStream, reportedException);
|
||||
}
|
||||
|
||||
protected void SaveInvItem(InventoryItemBase inventoryItem, string path)
|
||||
|
@ -272,7 +280,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
|||
// We couldn't find the path indicated
|
||||
m_saveStream.Close();
|
||||
m_module.TriggerInventoryArchiveSaved(
|
||||
false, m_userInfo, m_invPath, m_saveStream,
|
||||
m_id, false, m_userInfo, m_invPath, m_saveStream,
|
||||
new Exception(string.Format("Could not find inventory entry at path {0}", m_invPath)));
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -57,7 +57,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
|||
/// <summary>
|
||||
/// The file to load and save inventory if no filename has been specified
|
||||
/// </summary>
|
||||
protected const string DEFAULT_INV_BACKUP_FILENAME = "user-inventory_iar.tar.gz";
|
||||
protected const string DEFAULT_INV_BACKUP_FILENAME = "user-inventory_iar.tar.gz";
|
||||
|
||||
/// <value>
|
||||
/// Pending save completions initiated from the console
|
||||
/// </value>
|
||||
protected List<Guid> m_pendingConsoleSaves = new List<Guid>();
|
||||
|
||||
/// <value>
|
||||
/// All scenes that this module knows about
|
||||
|
@ -106,32 +111,33 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
|||
/// Trigger the inventory archive saved event.
|
||||
/// </summary>
|
||||
protected internal void TriggerInventoryArchiveSaved(
|
||||
bool succeeded, CachedUserInfo userInfo, string invPath, Stream saveStream, Exception reportedException)
|
||||
Guid id, bool succeeded, CachedUserInfo userInfo, string invPath, Stream saveStream,
|
||||
Exception reportedException)
|
||||
{
|
||||
InventoryArchiveSaved handlerInventoryArchiveSaved = OnInventoryArchiveSaved;
|
||||
if (handlerInventoryArchiveSaved != null)
|
||||
handlerInventoryArchiveSaved(succeeded, userInfo, invPath, saveStream, reportedException);
|
||||
handlerInventoryArchiveSaved(id, succeeded, userInfo, invPath, saveStream, reportedException);
|
||||
}
|
||||
|
||||
public void ArchiveInventory(string firstName, string lastName, string invPath, Stream saveStream)
|
||||
public void ArchiveInventory(Guid id, string firstName, string lastName, string invPath, Stream saveStream)
|
||||
{
|
||||
if (m_scenes.Count > 0)
|
||||
{
|
||||
CachedUserInfo userInfo = GetUserInfo(firstName, lastName);
|
||||
|
||||
if (userInfo != null)
|
||||
new InventoryArchiveWriteRequest(this, userInfo, invPath, saveStream).Execute();
|
||||
new InventoryArchiveWriteRequest(id, this, userInfo, invPath, saveStream).Execute();
|
||||
}
|
||||
}
|
||||
|
||||
public void ArchiveInventory(string firstName, string lastName, string invPath, string savePath)
|
||||
public void ArchiveInventory(Guid id, string firstName, string lastName, string invPath, string savePath)
|
||||
{
|
||||
if (m_scenes.Count > 0)
|
||||
{
|
||||
CachedUserInfo userInfo = GetUserInfo(firstName, lastName);
|
||||
|
||||
if (userInfo != null)
|
||||
new InventoryArchiveWriteRequest(this, userInfo, invPath, savePath).Execute();
|
||||
new InventoryArchiveWriteRequest(id, this, userInfo, invPath, savePath).Execute();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -215,13 +221,26 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
|||
m_log.InfoFormat(
|
||||
"[INVENTORY ARCHIVER]: Saving archive {0} from inventory path {1} for {2} {3}",
|
||||
savePath, invPath, firstName, lastName);
|
||||
|
||||
ArchiveInventory(firstName, lastName, invPath, savePath);
|
||||
}
|
||||
|
||||
Guid id = Guid.NewGuid();
|
||||
ArchiveInventory(id, firstName, lastName, invPath, savePath);
|
||||
|
||||
lock (m_pendingConsoleSaves)
|
||||
m_pendingConsoleSaves.Add(id);
|
||||
}
|
||||
|
||||
private void SaveInvConsoleCommandCompleted(
|
||||
bool succeeded, CachedUserInfo userInfo, string invPath, Stream saveStream, Exception reportedException)
|
||||
Guid id, bool succeeded, CachedUserInfo userInfo, string invPath, Stream saveStream,
|
||||
Exception reportedException)
|
||||
{
|
||||
lock (m_pendingConsoleSaves)
|
||||
{
|
||||
if (m_pendingConsoleSaves.Contains(id))
|
||||
m_pendingConsoleSaves.Remove(id);
|
||||
else
|
||||
return;
|
||||
}
|
||||
|
||||
if (succeeded)
|
||||
{
|
||||
m_log.InfoFormat("[INVENTORY ARCHIVER]: Saved archive for {0}", userInfo.UserProfile.Name);
|
||||
|
|
|
@ -55,6 +55,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
|||
[TestFixture]
|
||||
public class InventoryArchiverTests
|
||||
{
|
||||
protected ManualResetEvent mre = new ManualResetEvent(false);
|
||||
|
||||
private void InventoryReceived(UUID userId)
|
||||
{
|
||||
lock (this)
|
||||
|
@ -64,12 +66,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
|||
}
|
||||
|
||||
private void SaveCompleted(
|
||||
bool succeeded, CachedUserInfo userInfo, string invPath, Stream saveStream, Exception reportedException)
|
||||
Guid id, bool succeeded, CachedUserInfo userInfo, string invPath, Stream saveStream,
|
||||
Exception reportedException)
|
||||
{
|
||||
lock (this)
|
||||
{
|
||||
Monitor.PulseAll(this);
|
||||
}
|
||||
mre.Set();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -152,11 +152,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
|||
MemoryStream archiveWriteStream = new MemoryStream();
|
||||
archiverModule.OnInventoryArchiveSaved += SaveCompleted;
|
||||
|
||||
lock (this)
|
||||
{
|
||||
archiverModule.ArchiveInventory(userFirstName, userLastName, "Objects", archiveWriteStream);
|
||||
Monitor.Wait(this, 60000);
|
||||
}
|
||||
mre.Reset();
|
||||
archiverModule.ArchiveInventory(
|
||||
Guid.NewGuid(), userFirstName, userLastName, "Objects", archiveWriteStream);
|
||||
mre.WaitOne();
|
||||
|
||||
byte[] archive = archiveWriteStream.ToArray();
|
||||
MemoryStream archiveReadStream = new MemoryStream(archive);
|
||||
|
|
|
@ -34,13 +34,14 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
/// <summary>
|
||||
/// Used for the OnInventoryArchiveSaved event.
|
||||
/// </summary>
|
||||
/// <param name="id">Request id</param>
|
||||
/// <param name="succeeded">true if the save succeeded, false otherwise</param>
|
||||
/// <param name="userInfo">The user for whom the save was conducted</param>
|
||||
/// <param name="invPath">The inventory path saved</param>
|
||||
/// <param name="savePath">The stream to which the archive was saved</param>
|
||||
/// <param name="reportedException">Contains the exception generated if the save did not succeed</param>
|
||||
public delegate void InventoryArchiveSaved(
|
||||
bool succeeded, CachedUserInfo userInfo, string invPath, Stream saveStream, Exception reportedException);
|
||||
Guid id, bool succeeded, CachedUserInfo userInfo, string invPath, Stream saveStream, Exception reportedException);
|
||||
|
||||
public interface IInventoryArchiverModule
|
||||
{
|
||||
|
@ -61,10 +62,11 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
/// <summary>
|
||||
/// Archive a user's inventory folder to the given stream
|
||||
/// </summary>
|
||||
/// <param name="id">ID representing this request. This will later be returned in the save event</param>
|
||||
/// <param name="firstName"></param>
|
||||
/// <param name="lastName"></param>
|
||||
/// <param name="invPath">The inventory path from which the inventory should be saved.</param>
|
||||
/// <param name="saveStream">The stream to which the inventory archive will be saved</param>
|
||||
void ArchiveInventory(string firstName, string lastName, string invPath, Stream saveStream);
|
||||
/// <param name="saveStream">The stream to which the inventory archive will be saved</param>
|
||||
void ArchiveInventory(Guid id, string firstName, string lastName, string invPath, Stream saveStream);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue