diff options
author | Justin Clark-Casey (justincc) | 2013-02-08 21:21:20 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2013-02-08 21:21:20 +0000 |
commit | b08977ea7d9e35066e3cbf367fad58c2d8bc227e (patch) | |
tree | 6c9b1dd4ab3afba8ffb2c23ed59d6bd042203b8e /OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs | |
parent | If a component of a coalesced object fails to deserialization, do not add a n... (diff) | |
download | opensim-SC_OLD-b08977ea7d9e35066e3cbf367fad58c2d8bc227e.zip opensim-SC_OLD-b08977ea7d9e35066e3cbf367fad58c2d8bc227e.tar.gz opensim-SC_OLD-b08977ea7d9e35066e3cbf367fad58c2d8bc227e.tar.bz2 opensim-SC_OLD-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 '')
-rw-r--r-- | OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs | 89 |
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 | } |