From 134f86e8d5c414409631b25b8c6f0ee45fbd8631 Mon Sep 17 00:00:00 2001
From: David Walter Seikel
Date: Thu, 3 Nov 2016 21:44:39 +1000
Subject: Initial update to OpenSim 0.8.2.1 source code.
---
OpenSim/Services/AssetService/AssetService.cs | 51 +++++++-------
.../AssetService/Properties/AssemblyInfo.cs | 4 +-
OpenSim/Services/AssetService/XAssetService.cs | 77 +++++++++++++++-------
OpenSim/Services/AssetService/XAssetServiceBase.cs | 47 +++++++++----
4 files changed, 117 insertions(+), 62 deletions(-)
(limited to 'OpenSim/Services/AssetService')
diff --git a/OpenSim/Services/AssetService/AssetService.cs b/OpenSim/Services/AssetService/AssetService.cs
index e7eb6fe..0aefa16 100644
--- a/OpenSim/Services/AssetService/AssetService.cs
+++ b/OpenSim/Services/AssetService/AssetService.cs
@@ -123,53 +123,54 @@ namespace OpenSim.Services.AssetService
public virtual AssetMetadata GetMetadata(string id)
{
// m_log.DebugFormat("[ASSET SERVICE]: Get asset metadata for {0}", id);
-
- UUID assetID;
- if (!UUID.TryParse(id, out assetID))
- return null;
+ AssetBase asset = Get(id);
- AssetBase asset = m_Database.GetAsset(assetID);
if (asset != null)
return asset.Metadata;
-
- return null;
+ else
+ return null;
}
public virtual byte[] GetData(string id)
{
// m_log.DebugFormat("[ASSET SERVICE]: Get asset data for {0}", id);
-
- UUID assetID;
- if (!UUID.TryParse(id, out assetID))
- return null;
+ AssetBase asset = Get(id);
- AssetBase asset = m_Database.GetAsset(assetID);
- return asset.Data;
+ if (asset != null)
+ return asset.Data;
+ else
+ return null;
}
public virtual bool Get(string id, Object sender, AssetRetrieved handler)
{
//m_log.DebugFormat("[AssetService]: Get asset async {0}", id);
-
- UUID assetID;
- if (!UUID.TryParse(id, out assetID))
- return false;
-
- AssetBase asset = m_Database.GetAsset(assetID);
-
- //m_log.DebugFormat("[AssetService]: Got asset {0}", asset);
-
- handler(id, sender, asset);
+ handler(id, sender, Get(id));
return true;
}
+ public virtual bool[] AssetsExist(string[] ids)
+ {
+ try
+ {
+ UUID[] uuid = Array.ConvertAll(ids, id => UUID.Parse(id));
+ return m_Database.AssetsExist(uuid);
+ }
+ catch (Exception e)
+ {
+ m_log.Error("[ASSET SERVICE]: Exception getting assets ", e);
+ return new bool[ids.Length];
+ }
+ }
+
public virtual string Store(AssetBase asset)
{
- if (!m_Database.ExistsAsset(asset.FullID))
+ bool exists = m_Database.AssetsExist(new[] { asset.FullID })[0];
+ if (!exists)
{
// m_log.DebugFormat(
// "[ASSET SERVICE]: Storing asset {0} {1}, bytes {2}", asset.Name, asset.FullID, asset.Data.Length);
@@ -200,4 +201,4 @@ namespace OpenSim.Services.AssetService
return m_Database.Delete(id);
}
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Services/AssetService/Properties/AssemblyInfo.cs b/OpenSim/Services/AssetService/Properties/AssemblyInfo.cs
index 1509400..63654a6 100644
--- a/OpenSim/Services/AssetService/Properties/AssemblyInfo.cs
+++ b/OpenSim/Services/AssetService/Properties/AssemblyInfo.cs
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
-[assembly: AssemblyVersion("0.7.5.*")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyVersion("0.8.3.*")]
+
diff --git a/OpenSim/Services/AssetService/XAssetService.cs b/OpenSim/Services/AssetService/XAssetService.cs
index a1d10ed..b1e5184 100644
--- a/OpenSim/Services/AssetService/XAssetService.cs
+++ b/OpenSim/Services/AssetService/XAssetService.cs
@@ -39,16 +39,18 @@ using OpenMetaverse;
namespace OpenSim.Services.AssetService
{
///
- /// This will be developed into a de-duplicating asset service.
- /// XXX: Currently it's a just a copy of the existing AssetService. so please don't attempt to use it.
+ /// A de-duplicating asset service.
///
+ [Obsolete]
public class XAssetService : XAssetServiceBase, IAssetService
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected static XAssetService m_RootInstance;
- public XAssetService(IConfigSource config) : base(config)
+ public XAssetService(IConfigSource config) : this(config, "AssetService") {}
+
+ public XAssetService(IConfigSource config, string configName) : base(config, configName)
{
if (m_RootInstance == null)
{
@@ -56,22 +58,21 @@ namespace OpenSim.Services.AssetService
if (m_AssetLoader != null)
{
- IConfig assetConfig = config.Configs["AssetService"];
+ IConfig assetConfig = config.Configs[configName];
if (assetConfig == null)
throw new Exception("No AssetService configuration");
- string loaderArgs = assetConfig.GetString("AssetLoaderArgs",
- String.Empty);
+ string loaderArgs = assetConfig.GetString("AssetLoaderArgs", String.Empty);
bool assetLoaderEnabled = assetConfig.GetBoolean("AssetLoaderEnabled", true);
- if (assetLoaderEnabled)
+ if (assetLoaderEnabled && !HasChainedAssetService)
{
m_log.DebugFormat("[XASSET SERVICE]: Loading default asset set from {0}", loaderArgs);
m_AssetLoader.ForEachDefaultXmlAsset(
loaderArgs,
- delegate(AssetBase a)
+ a =>
{
AssetBase existingAsset = Get(a.ID);
// AssetMetadata existingMetadata = GetMetadata(a.ID);
@@ -85,6 +86,7 @@ namespace OpenSim.Services.AssetService
}
m_log.Debug("[XASSET SERVICE]: Local asset service enabled");
+ m_log.Error("[XASSET SERVICE]: THIS ASSET SERVICE HAS BEEN MARKED OBSOLETE. PLEASE USE FSAssetService");
}
}
}
@@ -103,7 +105,23 @@ namespace OpenSim.Services.AssetService
try
{
- return m_Database.GetAsset(assetID);
+ AssetBase asset = m_Database.GetAsset(assetID);
+
+ if (asset != null)
+ {
+ return asset;
+ }
+ else if (HasChainedAssetService)
+ {
+ asset = m_ChainedAssetService.Get(id);
+
+ if (asset != null)
+ MigrateFromChainedService(asset);
+
+ return asset;
+ }
+
+ return null;
}
catch (Exception e)
{
@@ -120,30 +138,25 @@ namespace OpenSim.Services.AssetService
public virtual AssetMetadata GetMetadata(string id)
{
// m_log.DebugFormat("[XASSET SERVICE]: Get asset metadata for {0}", id);
-
- UUID assetID;
- if (!UUID.TryParse(id, out assetID))
- return null;
+ AssetBase asset = Get(id);
- AssetBase asset = m_Database.GetAsset(assetID);
if (asset != null)
return asset.Metadata;
-
- return null;
+ else
+ return null;
}
public virtual byte[] GetData(string id)
{
// m_log.DebugFormat("[XASSET SERVICE]: Get asset data for {0}", id);
- UUID assetID;
+ AssetBase asset = Get(id);
- if (!UUID.TryParse(id, out assetID))
+ if (asset != null)
+ return asset.Data;
+ else
return null;
-
- AssetBase asset = m_Database.GetAsset(assetID);
- return asset.Data;
}
public virtual bool Get(string id, Object sender, AssetRetrieved handler)
@@ -155,7 +168,7 @@ namespace OpenSim.Services.AssetService
if (!UUID.TryParse(id, out assetID))
return false;
- AssetBase asset = m_Database.GetAsset(assetID);
+ AssetBase asset = Get(id);
//m_log.DebugFormat("[XASSET SERVICE]: Got asset {0}", asset);
@@ -164,9 +177,16 @@ namespace OpenSim.Services.AssetService
return true;
}
+ public virtual bool[] AssetsExist(string[] ids)
+ {
+ UUID[] uuid = Array.ConvertAll(ids, id => UUID.Parse(id));
+ return m_Database.AssetsExist(uuid);
+ }
+
public virtual string Store(AssetBase asset)
{
- if (!m_Database.ExistsAsset(asset.FullID))
+ bool exists = m_Database.AssetsExist(new[] { asset.FullID })[0];
+ if (!exists)
{
// m_log.DebugFormat(
// "[XASSET SERVICE]: Storing asset {0} {1}, bytes {2}", asset.Name, asset.FullID, asset.Data.Length);
@@ -194,7 +214,16 @@ namespace OpenSim.Services.AssetService
if (!UUID.TryParse(id, out assetID))
return false;
+ if (HasChainedAssetService)
+ m_ChainedAssetService.Delete(id);
+
return m_Database.Delete(id);
}
+
+ private void MigrateFromChainedService(AssetBase asset)
+ {
+ Store(asset);
+ m_ChainedAssetService.Delete(asset.ID);
+ }
}
-}
\ No newline at end of file
+}
diff --git a/OpenSim/Services/AssetService/XAssetServiceBase.cs b/OpenSim/Services/AssetService/XAssetServiceBase.cs
index 0c5c2c3..c118c9d 100644
--- a/OpenSim/Services/AssetService/XAssetServiceBase.cs
+++ b/OpenSim/Services/AssetService/XAssetServiceBase.cs
@@ -27,9 +27,11 @@
using System;
using System.Reflection;
+using log4net;
using Nini.Config;
using OpenSim.Framework;
using OpenSim.Data;
+using OpenSim.Server.Base;
using OpenSim.Services.Interfaces;
using OpenSim.Services.Base;
@@ -37,10 +39,15 @@ namespace OpenSim.Services.AssetService
{
public class XAssetServiceBase : ServiceBase
{
- protected IXAssetDataPlugin m_Database = null;
- protected IAssetLoader m_AssetLoader = null;
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
- public XAssetServiceBase(IConfigSource config) : base(config)
+ protected IXAssetDataPlugin m_Database;
+ protected IAssetLoader m_AssetLoader;
+ protected IAssetService m_ChainedAssetService;
+
+ protected bool HasChainedAssetService { get { return m_ChainedAssetService != null; } }
+
+ public XAssetServiceBase(IConfigSource config, string configName) : base(config)
{
string dllName = String.Empty;
string connString = String.Empty;
@@ -48,7 +55,7 @@ namespace OpenSim.Services.AssetService
//
// Try reading the [AssetService] section first, if it exists
//
- IConfig assetConfig = config.Configs["AssetService"];
+ IConfig assetConfig = config.Configs[configName];
if (assetConfig != null)
{
dllName = assetConfig.GetString("StorageProvider", dllName);
@@ -77,17 +84,35 @@ namespace OpenSim.Services.AssetService
if (m_Database == null)
throw new Exception("Could not find a storage interface in the given module");
- m_Database.Initialise(connString);
+ string chainedAssetServiceDesignator = assetConfig.GetString("ChainedServiceModule", null);
+
+ if (chainedAssetServiceDesignator != null)
+ {
+ m_log.InfoFormat(
+ "[XASSET SERVICE BASE]: Loading chained asset service from {0}", chainedAssetServiceDesignator);
- string loaderName = assetConfig.GetString("DefaultAssetLoader",
- String.Empty);
+ Object[] args = new Object[] { config, configName };
+ m_ChainedAssetService = ServerUtils.LoadPlugin(chainedAssetServiceDesignator, args);
- if (loaderName != String.Empty)
+ if (!HasChainedAssetService)
+ throw new Exception(
+ String.Format("Failed to load ChainedAssetService from {0}", chainedAssetServiceDesignator));
+ }
+
+ m_Database.Initialise(connString);
+
+ if (HasChainedAssetService)
{
- m_AssetLoader = LoadPlugin(loaderName);
+ string loaderName = assetConfig.GetString("DefaultAssetLoader",
+ String.Empty);
+
+ if (loaderName != String.Empty)
+ {
+ m_AssetLoader = LoadPlugin(loaderName);
- if (m_AssetLoader == null)
- throw new Exception("Asset loader could not be loaded");
+ if (m_AssetLoader == null)
+ throw new Exception("Asset loader could not be loaded");
+ }
}
}
}
--
cgit v1.1