aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2013-02-08 21:21:20 +0000
committerJustin Clark-Casey (justincc)2013-02-08 21:21:20 +0000
commitb08977ea7d9e35066e3cbf367fad58c2d8bc227e (patch)
tree6c9b1dd4ab3afba8ffb2c23ed59d6bd042203b8e /OpenSim
parentIf a component of a coalesced object fails to deserialization, do not add a n... (diff)
downloadopensim-SC-b08977ea7d9e35066e3cbf367fad58c2d8bc227e.zip
opensim-SC-b08977ea7d9e35066e3cbf367fad58c2d8bc227e.tar.gz
opensim-SC-b08977ea7d9e35066e3cbf367fad58c2d8bc227e.tar.bz2
opensim-SC-b08977ea7d9e35066e3cbf367fad58c2d8bc227e.tar.xz
Don't allow exceptions to propogate from FlotsamAssetCache which may occur when deleting expired files or stamping the region status file.
Changes various error level log lines to warn since these are not fatal to the operation of OpenSimulator
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs89
1 files changed, 57 insertions, 32 deletions
diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
index 00af175..3cba9b4 100644
--- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
+++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
@@ -299,7 +299,7 @@ namespace OpenSim.Region.CoreModules.Asset
299 } 299 }
300 catch (Exception e) 300 catch (Exception e)
301 { 301 {
302 m_log.ErrorFormat( 302 m_log.WarnFormat(
303 "[FLOTSAM ASSET CACHE]: Failed to update cache for asset {0}. Exception {1} {2}", 303 "[FLOTSAM ASSET CACHE]: Failed to update cache for asset {0}. Exception {1} {2}",
304 asset.ID, e.Message, e.StackTrace); 304 asset.ID, e.Message, e.StackTrace);
305 } 305 }
@@ -339,12 +339,13 @@ namespace OpenSim.Region.CoreModules.Asset
339 /// Try to get an asset from the file cache. 339 /// Try to get an asset from the file cache.
340 /// </summary> 340 /// </summary>
341 /// <param name="id"></param> 341 /// <param name="id"></param>
342 /// <returns></returns> 342 /// <returns>An asset retrieved from the file cache. null if there was a problem retrieving an asset.</returns>
343 private AssetBase GetFromFileCache(string id) 343 private AssetBase GetFromFileCache(string id)
344 { 344 {
345 AssetBase asset = null; 345 AssetBase asset = null;
346 346
347 string filename = GetFileName(id); 347 string filename = GetFileName(id);
348
348 if (File.Exists(filename)) 349 if (File.Exists(filename))
349 { 350 {
350 FileStream stream = null; 351 FileStream stream = null;
@@ -359,7 +360,7 @@ namespace OpenSim.Region.CoreModules.Asset
359 } 360 }
360 catch (System.Runtime.Serialization.SerializationException e) 361 catch (System.Runtime.Serialization.SerializationException e)
361 { 362 {
362 m_log.ErrorFormat( 363 m_log.WarnFormat(
363 "[FLOTSAM ASSET CACHE]: Failed to get file {0} for asset {1}. Exception {2} {3}", 364 "[FLOTSAM ASSET CACHE]: Failed to get file {0} for asset {1}. Exception {2} {3}",
364 filename, id, e.Message, e.StackTrace); 365 filename, id, e.Message, e.StackTrace);
365 366
@@ -371,7 +372,7 @@ namespace OpenSim.Region.CoreModules.Asset
371 } 372 }
372 catch (Exception e) 373 catch (Exception e)
373 { 374 {
374 m_log.ErrorFormat( 375 m_log.WarnFormat(
375 "[FLOTSAM ASSET CACHE]: Failed to get file {0} for asset {1}. Exception {2} {3}", 376 "[FLOTSAM ASSET CACHE]: Failed to get file {0} for asset {1}. Exception {2} {3}",
376 filename, id, e.Message, e.StackTrace); 377 filename, id, e.Message, e.StackTrace);
377 } 378 }
@@ -469,7 +470,7 @@ namespace OpenSim.Region.CoreModules.Asset
469 } 470 }
470 catch (Exception e) 471 catch (Exception e)
471 { 472 {
472 m_log.ErrorFormat( 473 m_log.WarnFormat(
473 "[FLOTSAM ASSET CACHE]: Failed to expire cached file {0}. Exception {1} {2}", 474 "[FLOTSAM ASSET CACHE]: Failed to expire cached file {0}. Exception {1} {2}",
474 id, e.Message, e.StackTrace); 475 id, e.Message, e.StackTrace);
475 } 476 }
@@ -520,29 +521,39 @@ namespace OpenSim.Region.CoreModules.Asset
520 /// <param name="purgeLine"></param> 521 /// <param name="purgeLine"></param>
521 private void CleanExpiredFiles(string dir, DateTime purgeLine) 522 private void CleanExpiredFiles(string dir, DateTime purgeLine)
522 { 523 {
523 foreach (string file in Directory.GetFiles(dir)) 524 try
524 { 525 {
525 if (File.GetLastAccessTime(file) < purgeLine) 526 foreach (string file in Directory.GetFiles(dir))
526 { 527 {
527 File.Delete(file); 528 if (File.GetLastAccessTime(file) < purgeLine)
529 {
530 File.Delete(file);
531 }
528 } 532 }
529 }
530 533
531 // Recurse into lower tiers 534 // Recurse into lower tiers
532 foreach (string subdir in Directory.GetDirectories(dir)) 535 foreach (string subdir in Directory.GetDirectories(dir))
533 { 536 {
534 CleanExpiredFiles(subdir, purgeLine); 537 CleanExpiredFiles(subdir, purgeLine);
535 } 538 }
536 539
537 // Check if a tier directory is empty, if so, delete it 540 // Check if a tier directory is empty, if so, delete it
538 int dirSize = Directory.GetFiles(dir).Length + Directory.GetDirectories(dir).Length; 541 int dirSize = Directory.GetFiles(dir).Length + Directory.GetDirectories(dir).Length;
539 if (dirSize == 0) 542 if (dirSize == 0)
540 { 543 {
541 Directory.Delete(dir); 544 Directory.Delete(dir);
545 }
546 else if (dirSize >= m_CacheWarnAt)
547 {
548 m_log.WarnFormat(
549 "[FLOTSAM ASSET CACHE]: Cache folder exceeded CacheWarnAt limit {0} {1}. Suggest increasing tiers, tier length, or reducing cache expiration",
550 dir, dirSize);
551 }
542 } 552 }
543 else if (dirSize >= m_CacheWarnAt) 553 catch (Exception e)
544 { 554 {
545 m_log.WarnFormat("[FLOTSAM ASSET CACHE]: Cache folder exceeded CacheWarnAt limit {0} {1}. Suggest increasing tiers, tier length, or reducing cache expiration", dir, dirSize); 555 m_log.Warn(
556 string.Format("[FLOTSAM ASSET CACHE]: Could not complete clean of expired files in {0}, exception ", dir), e);
546 } 557 }
547 } 558 }
548 559
@@ -601,7 +612,7 @@ namespace OpenSim.Region.CoreModules.Asset
601 } 612 }
602 catch (IOException e) 613 catch (IOException e)
603 { 614 {
604 m_log.ErrorFormat( 615 m_log.WarnFormat(
605 "[FLOTSAM ASSET CACHE]: Failed to write asset {0} to temporary location {1} (final {2}) on cache in {3}. Exception {4} {5}.", 616 "[FLOTSAM ASSET CACHE]: Failed to write asset {0} to temporary location {1} (final {2}) on cache in {3}. Exception {4} {5}.",
606 asset.ID, tempname, filename, directory, e.Message, e.StackTrace); 617 asset.ID, tempname, filename, directory, e.Message, e.StackTrace);
607 618
@@ -680,17 +691,31 @@ namespace OpenSim.Region.CoreModules.Asset
680 /// <summary> 691 /// <summary>
681 /// This notes the last time the Region had a deep asset scan performed on it. 692 /// This notes the last time the Region had a deep asset scan performed on it.
682 /// </summary> 693 /// </summary>
683 /// <param name="RegionID"></param> 694 /// <param name="regionID"></param>
684 private void StampRegionStatusFile(UUID RegionID) 695 private void StampRegionStatusFile(UUID regionID)
685 { 696 {
686 string RegionCacheStatusFile = Path.Combine(m_CacheDirectory, "RegionStatus_" + RegionID.ToString() + ".fac"); 697 string RegionCacheStatusFile = Path.Combine(m_CacheDirectory, "RegionStatus_" + regionID.ToString() + ".fac");
687 if (File.Exists(RegionCacheStatusFile)) 698
699 try
688 { 700 {
689 File.SetLastWriteTime(RegionCacheStatusFile, DateTime.Now); 701 if (File.Exists(RegionCacheStatusFile))
702 {
703 File.SetLastWriteTime(RegionCacheStatusFile, DateTime.Now);
704 }
705 else
706 {
707 File.WriteAllText(
708 RegionCacheStatusFile,
709 "Please do not delete this file unless you are manually clearing your Flotsam Asset Cache.");
710 }
690 } 711 }
691 else 712 catch (Exception e)
692 { 713 {
693 File.WriteAllText(RegionCacheStatusFile, "Please do not delete this file unless you are manually clearing your Flotsam Asset Cache."); 714 m_log.Warn(
715 string.Format(
716 "[FLOTSAM ASSET CACHE]: Could not stamp region status file for region {0}. Exception ",
717 regionID),
718 e);
694 } 719 }
695 } 720 }
696 721
@@ -759,7 +784,7 @@ namespace OpenSim.Region.CoreModules.Asset
759 } 784 }
760 catch (Exception e) 785 catch (Exception e)
761 { 786 {
762 m_log.ErrorFormat( 787 m_log.WarnFormat(
763 "[FLOTSAM ASSET CACHE]: Couldn't clear asset cache directory {0} from {1}. Exception {2} {3}", 788 "[FLOTSAM ASSET CACHE]: Couldn't clear asset cache directory {0} from {1}. Exception {2} {3}",
764 dir, m_CacheDirectory, e.Message, e.StackTrace); 789 dir, m_CacheDirectory, e.Message, e.StackTrace);
765 } 790 }
@@ -773,7 +798,7 @@ namespace OpenSim.Region.CoreModules.Asset
773 } 798 }
774 catch (Exception e) 799 catch (Exception e)
775 { 800 {
776 m_log.ErrorFormat( 801 m_log.WarnFormat(
777 "[FLOTSAM ASSET CACHE]: Couldn't clear asset cache file {0} from {1}. Exception {1} {2}", 802 "[FLOTSAM ASSET CACHE]: Couldn't clear asset cache file {0} from {1}. Exception {1} {2}",
778 file, m_CacheDirectory, e.Message, e.StackTrace); 803 file, m_CacheDirectory, e.Message, e.StackTrace);
779 } 804 }