From d810ad9e91930a152266aa92ed77a3a9d492ade4 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 4 Sep 2009 18:51:25 +0100 Subject: If a test dll fails when manually run, stop immediately rather than trying all the other test dlls --- .nant/local.include | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/.nant/local.include b/.nant/local.include index 58d1ad1..5401829 100644 --- a/.nant/local.include +++ b/.nant/local.include @@ -41,48 +41,47 @@ + + + + + + + + - - - - - - - - - -- cgit v1.1 From 4c560df8acbf374c73e5ccb882a6fd0a92cdf490 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 4 Sep 2009 19:22:09 +0100 Subject: If running tests manually, fail immediately on error --- .nant/local.include | 18 +++++++++--------- .../Inventory/Archiver/InventoryArchiveWriteRequest.cs | 2 -- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/.nant/local.include b/.nant/local.include index 5401829..8c72c80 100644 --- a/.nant/local.include +++ b/.nant/local.include @@ -38,47 +38,47 @@ the assembly here as an exec, and you add the fail clause later. This lets all the unit tests run and tells you if they fail at the end, instead of stopping short --> - + - + - + - + - + - + - + - + - + diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs index f73a7e3..12c9dcf 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs @@ -199,7 +199,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver InventoryFolderImpl inventoryFolder = null; InventoryItemBase inventoryItem = null; - /* if (!m_userInfo.HasReceivedInventory) { // If the region server has access to the user admin service (by which users are created), @@ -221,7 +220,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver m_userInfo.FetchInventory(); } } - */ bool foundStar = false; -- cgit v1.1 From 7ca61e01742b53033009f10c45e3ea0d0ef91315 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 4 Sep 2009 21:10:56 +0100 Subject: Add ids to iar requests Stop save iar test wrongly relying on thread pulsing (still disabled though) --- .../Archiver/InventoryArchiveWriteRequest.cs | 16 ++++++--- .../Inventory/Archiver/InventoryArchiverModule.cs | 41 ++++++++++++++++------ .../Archiver/Tests/InventoryArchiverTests.cs | 19 +++++----- .../Interfaces/IInventoryArchiverModule.cs | 8 +++-- 4 files changed, 56 insertions(+), 28 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs index 12c9dcf..18728c6 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs @@ -60,6 +60,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver protected UuidGatherer m_assetGatherer; /// + /// ID of this request + /// + protected Guid m_id; + + /// /// Used to collect the uuids of the assets that we need to save into the archive /// protected Dictionary m_assetUuids = new Dictionary(); @@ -78,8 +83,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver /// Constructor /// 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 /// 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; } diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs index c495e02..55d7997 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs @@ -57,7 +57,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver /// /// The file to load and save inventory if no filename has been specified /// - protected const string DEFAULT_INV_BACKUP_FILENAME = "user-inventory_iar.tar.gz"; + protected const string DEFAULT_INV_BACKUP_FILENAME = "user-inventory_iar.tar.gz"; + + /// + /// Pending save completions initiated from the console + /// + protected List m_pendingConsoleSaves = new List(); /// /// All scenes that this module knows about @@ -106,32 +111,33 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver /// Trigger the inventory archive saved event. /// 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); diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs index 066c5d3..a151c9d 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs @@ -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(); } /// @@ -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); diff --git a/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs b/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs index df6650f..457b5b8 100644 --- a/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IInventoryArchiverModule.cs @@ -34,13 +34,14 @@ namespace OpenSim.Region.Framework.Interfaces /// /// Used for the OnInventoryArchiveSaved event. /// + /// Request id /// true if the save succeeded, false otherwise /// The user for whom the save was conducted /// The inventory path saved /// The stream to which the archive was saved /// Contains the exception generated if the save did not succeed 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 /// /// Archive a user's inventory folder to the given stream /// + /// ID representing this request. This will later be returned in the save event /// /// /// The inventory path from which the inventory should be saved. - /// The stream to which the inventory archive will be saved - void ArchiveInventory(string firstName, string lastName, string invPath, Stream saveStream); + /// The stream to which the inventory archive will be saved + void ArchiveInventory(Guid id, string firstName, string lastName, string invPath, Stream saveStream); } } -- cgit v1.1