diff options
author | Teravus Ovares | 2008-01-22 08:52:51 +0000 |
---|---|---|
committer | Teravus Ovares | 2008-01-22 08:52:51 +0000 |
commit | 5cf96daaf29209e065b852a0eefeb7f5dbd88b48 (patch) | |
tree | 34518c3c3609fbe6654a651d6ad357d257f60f26 /OpenSim/Region/Communications/OGS1 | |
parent | * Renamed a number of TerrainEngine functions to conform naming standards bet... (diff) | |
download | opensim-SC-5cf96daaf29209e065b852a0eefeb7f5dbd88b48.zip opensim-SC-5cf96daaf29209e065b852a0eefeb7f5dbd88b48.tar.gz opensim-SC-5cf96daaf29209e065b852a0eefeb7f5dbd88b48.tar.bz2 opensim-SC-5cf96daaf29209e065b852a0eefeb7f5dbd88b48.tar.xz |
* Enabled dead region tracking for ChildAgentDataUpdates
** If the region fails 3 times, then ChildAgentDataUpdates no longer get sent to that region
* Enabled Child_Get_Tasks in grid mode.
* When Child_Get_Tasks is enabled on neighbor regions, the neighbor region uses the client's draw distance to send out prim. This is a lot less likely to flood the client now since the ChildAgentDataUpdate contains both the throttle settings and the draw distance. This means that with this enabled, you can see prim in other regions in grid mode. Very experimental.
Diffstat (limited to 'OpenSim/Region/Communications/OGS1')
-rw-r--r-- | OpenSim/Region/Communications/OGS1/OGS1GridServices.cs | 198 |
1 files changed, 133 insertions, 65 deletions
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs index 73cd061..8429d00 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs | |||
@@ -50,6 +50,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
50 | private LocalBackEndServices m_localBackend = new LocalBackEndServices(); | 50 | private LocalBackEndServices m_localBackend = new LocalBackEndServices(); |
51 | private Dictionary<ulong, RegionInfo> m_remoteRegionInfoCache = new Dictionary<ulong, RegionInfo>(); | 51 | private Dictionary<ulong, RegionInfo> m_remoteRegionInfoCache = new Dictionary<ulong, RegionInfo>(); |
52 | private List<SimpleRegionInfo> m_knownRegions = new List<SimpleRegionInfo>(); | 52 | private List<SimpleRegionInfo> m_knownRegions = new List<SimpleRegionInfo>(); |
53 | private Dictionary<ulong, int> m_deadRegionCache = new Dictionary<ulong, int>(); | ||
53 | private Dictionary<string, string> m_queuedGridSettings = new Dictionary<string, string>(); | 54 | private Dictionary<string, string> m_queuedGridSettings = new Dictionary<string, string>(); |
54 | 55 | ||
55 | public BaseHttpServer httpListener; | 56 | public BaseHttpServer httpListener; |
@@ -499,79 +500,99 @@ namespace OpenSim.Region.Communications.OGS1 | |||
499 | 500 | ||
500 | public bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) | 501 | public bool ChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) |
501 | { | 502 | { |
502 | RegionInfo regInfo = null; | 503 | int failures = 0; |
503 | try | 504 | lock (m_deadRegionCache) |
504 | { | 505 | { |
505 | if (m_localBackend.ChildAgentUpdate(regionHandle, cAgentData)) | 506 | if (m_deadRegionCache.ContainsKey(regionHandle)) |
506 | { | 507 | { |
507 | return true; | 508 | failures = m_deadRegionCache[regionHandle]; |
508 | } | 509 | } |
509 | 510 | } | |
510 | regInfo = RequestNeighbourInfo(regionHandle); | 511 | if (failures <= 3) |
511 | if (regInfo != null) | 512 | { |
513 | RegionInfo regInfo = null; | ||
514 | try | ||
512 | { | 515 | { |
513 | //don't want to be creating a new link to the remote instance every time like we are here | 516 | if (m_localBackend.ChildAgentUpdate(regionHandle, cAgentData)) |
514 | bool retValue = false; | ||
515 | |||
516 | |||
517 | OGS1InterRegionRemoting remObject = (OGS1InterRegionRemoting) Activator.GetObject( | ||
518 | typeof (OGS1InterRegionRemoting), | ||
519 | "tcp://" + regInfo.RemotingAddress + | ||
520 | ":" + regInfo.RemotingPort + | ||
521 | "/InterRegions"); | ||
522 | |||
523 | if (remObject != null) | ||
524 | { | 517 | { |
525 | retValue = remObject.ChildAgentUpdate(regionHandle, cAgentData); | 518 | return true; |
526 | } | 519 | } |
527 | else | 520 | |
521 | regInfo = RequestNeighbourInfo(regionHandle); | ||
522 | if (regInfo != null) | ||
528 | { | 523 | { |
529 | Console.WriteLine("remoting object not found"); | 524 | //don't want to be creating a new link to the remote instance every time like we are here |
525 | bool retValue = false; | ||
526 | |||
527 | |||
528 | OGS1InterRegionRemoting remObject = (OGS1InterRegionRemoting)Activator.GetObject( | ||
529 | typeof(OGS1InterRegionRemoting), | ||
530 | "tcp://" + regInfo.RemotingAddress + | ||
531 | ":" + regInfo.RemotingPort + | ||
532 | "/InterRegions"); | ||
533 | |||
534 | if (remObject != null) | ||
535 | { | ||
536 | retValue = remObject.ChildAgentUpdate(regionHandle, cAgentData); | ||
537 | } | ||
538 | else | ||
539 | { | ||
540 | Console.WriteLine("remoting object not found"); | ||
541 | } | ||
542 | remObject = null; | ||
543 | //MainLog.Instance.Verbose("INTER", | ||
544 | //gdebugRegionName + | ||
545 | //": OGS1 tried to Update Child Agent data on outside region and got " + | ||
546 | //retValue.ToString()); | ||
547 | |||
548 | return retValue; | ||
530 | } | 549 | } |
531 | remObject = null; | 550 | NoteDeadRegion(regionHandle); |
532 | MainLog.Instance.Verbose("INTER", | ||
533 | gdebugRegionName + | ||
534 | ": OGS1 tried to Update Child Agent data on outside region and got " + | ||
535 | retValue.ToString()); | ||
536 | 551 | ||
537 | return retValue; | 552 | return false; |
553 | } | ||
554 | catch (RemotingException e) | ||
555 | { | ||
556 | NoteDeadRegion(regionHandle); | ||
557 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + | ||
558 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
559 | MainLog.Instance.Debug(e.ToString()); | ||
560 | return false; | ||
561 | } | ||
562 | catch (SocketException e) | ||
563 | { | ||
564 | NoteDeadRegion(regionHandle); | ||
565 | MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + " " + | ||
566 | regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
567 | MainLog.Instance.Debug(e.ToString()); | ||
568 | return false; | ||
569 | } | ||
570 | catch (InvalidCredentialException e) | ||
571 | { | ||
572 | NoteDeadRegion(regionHandle); | ||
573 | MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + | ||
574 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
575 | MainLog.Instance.Debug(e.ToString()); | ||
576 | return false; | ||
577 | } | ||
578 | catch (AuthenticationException e) | ||
579 | { | ||
580 | NoteDeadRegion(regionHandle); | ||
581 | MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " + | ||
582 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
583 | MainLog.Instance.Debug(e.ToString()); | ||
584 | return false; | ||
585 | } | ||
586 | catch (Exception e) | ||
587 | { | ||
588 | NoteDeadRegion(regionHandle); | ||
589 | MainLog.Instance.Debug(e.ToString()); | ||
590 | return false; | ||
538 | } | 591 | } |
539 | |||
540 | return false; | ||
541 | } | ||
542 | catch (RemotingException e) | ||
543 | { | ||
544 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + | ||
545 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
546 | MainLog.Instance.Debug(e.ToString()); | ||
547 | return false; | ||
548 | } | ||
549 | catch (SocketException e) | ||
550 | { | ||
551 | MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " + | ||
552 | regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
553 | MainLog.Instance.Debug(e.ToString()); | ||
554 | return false; | ||
555 | } | ||
556 | catch (InvalidCredentialException e) | ||
557 | { | ||
558 | MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + regInfo.RegionName + | ||
559 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
560 | MainLog.Instance.Debug(e.ToString()); | ||
561 | return false; | ||
562 | } | ||
563 | catch (AuthenticationException e) | ||
564 | { | ||
565 | MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " + | ||
566 | regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
567 | MainLog.Instance.Debug(e.ToString()); | ||
568 | return false; | ||
569 | } | 592 | } |
570 | catch (Exception e) | 593 | else |
571 | { | 594 | { |
572 | MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region: " + regInfo.RegionName + | 595 | //MainLog.Instance.Verbose("INTERREGION", "Skipped Sending Child Update to a region because it failed too many times:" + regionHandle.ToString()); |
573 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | ||
574 | MainLog.Instance.Debug(e.ToString()); | ||
575 | return false; | 596 | return false; |
576 | } | 597 | } |
577 | } | 598 | } |
@@ -622,11 +643,12 @@ namespace OpenSim.Region.Communications.OGS1 | |||
622 | return retValue; | 643 | return retValue; |
623 | 644 | ||
624 | } | 645 | } |
625 | 646 | NoteDeadRegion(regionHandle); | |
626 | return false; | 647 | return false; |
627 | } | 648 | } |
628 | catch (RemotingException e) | 649 | catch (RemotingException e) |
629 | { | 650 | { |
651 | NoteDeadRegion(regionHandle); | ||
630 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + | 652 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + |
631 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | 653 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); |
632 | MainLog.Instance.Debug(e.ToString()); | 654 | MainLog.Instance.Debug(e.ToString()); |
@@ -634,6 +656,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
634 | } | 656 | } |
635 | catch (SocketException e) | 657 | catch (SocketException e) |
636 | { | 658 | { |
659 | NoteDeadRegion(regionHandle); | ||
637 | MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " + | 660 | MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " + |
638 | regInfo.RegionLocX + "," + regInfo.RegionLocY); | 661 | regInfo.RegionLocX + "," + regInfo.RegionLocY); |
639 | MainLog.Instance.Debug(e.ToString()); | 662 | MainLog.Instance.Debug(e.ToString()); |
@@ -641,6 +664,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
641 | } | 664 | } |
642 | catch (InvalidCredentialException e) | 665 | catch (InvalidCredentialException e) |
643 | { | 666 | { |
667 | NoteDeadRegion(regionHandle); | ||
644 | MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + regInfo.RegionName + | 668 | MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + regInfo.RegionName + |
645 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | 669 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); |
646 | MainLog.Instance.Debug(e.ToString()); | 670 | MainLog.Instance.Debug(e.ToString()); |
@@ -648,6 +672,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
648 | } | 672 | } |
649 | catch (AuthenticationException e) | 673 | catch (AuthenticationException e) |
650 | { | 674 | { |
675 | NoteDeadRegion(regionHandle); | ||
651 | MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " + | 676 | MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " + |
652 | regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | 677 | regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); |
653 | MainLog.Instance.Debug(e.ToString()); | 678 | MainLog.Instance.Debug(e.ToString()); |
@@ -655,6 +680,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
655 | } | 680 | } |
656 | catch (Exception e) | 681 | catch (Exception e) |
657 | { | 682 | { |
683 | NoteDeadRegion(regionHandle); | ||
658 | MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region: " + regInfo.RegionName + | 684 | MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region: " + regInfo.RegionName + |
659 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | 685 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); |
660 | MainLog.Instance.Debug(e.ToString()); | 686 | MainLog.Instance.Debug(e.ToString()); |
@@ -813,11 +839,12 @@ namespace OpenSim.Region.Communications.OGS1 | |||
813 | 839 | ||
814 | return retValue; | 840 | return retValue; |
815 | } | 841 | } |
816 | 842 | NoteDeadRegion(regionHandle); | |
817 | return false; | 843 | return false; |
818 | } | 844 | } |
819 | catch (RemotingException e) | 845 | catch (RemotingException e) |
820 | { | 846 | { |
847 | NoteDeadRegion(regionHandle); | ||
821 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + | 848 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + |
822 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | 849 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); |
823 | MainLog.Instance.Debug(e.ToString()); | 850 | MainLog.Instance.Debug(e.ToString()); |
@@ -825,6 +852,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
825 | } | 852 | } |
826 | catch (SocketException e) | 853 | catch (SocketException e) |
827 | { | 854 | { |
855 | NoteDeadRegion(regionHandle); | ||
828 | MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " + | 856 | MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region: " + regInfo.RegionName + " " + |
829 | regInfo.RegionLocX + "," + regInfo.RegionLocY); | 857 | regInfo.RegionLocX + "," + regInfo.RegionLocY); |
830 | MainLog.Instance.Debug(e.ToString()); | 858 | MainLog.Instance.Debug(e.ToString()); |
@@ -832,6 +860,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
832 | } | 860 | } |
833 | catch (InvalidCredentialException e) | 861 | catch (InvalidCredentialException e) |
834 | { | 862 | { |
863 | NoteDeadRegion(regionHandle); | ||
835 | MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + regInfo.RegionName + | 864 | MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region: " + regInfo.RegionName + |
836 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | 865 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); |
837 | MainLog.Instance.Debug(e.ToString()); | 866 | MainLog.Instance.Debug(e.ToString()); |
@@ -839,6 +868,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
839 | } | 868 | } |
840 | catch (AuthenticationException e) | 869 | catch (AuthenticationException e) |
841 | { | 870 | { |
871 | NoteDeadRegion(regionHandle); | ||
842 | MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " + | 872 | MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region: " + |
843 | regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | 873 | regInfo.RegionName + " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); |
844 | MainLog.Instance.Debug(e.ToString()); | 874 | MainLog.Instance.Debug(e.ToString()); |
@@ -846,6 +876,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
846 | } | 876 | } |
847 | catch (Exception e) | 877 | catch (Exception e) |
848 | { | 878 | { |
879 | NoteDeadRegion(regionHandle); | ||
849 | MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region: " + regInfo.RegionName + | 880 | MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region: " + regInfo.RegionName + |
850 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | 881 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); |
851 | MainLog.Instance.Debug(e.ToString()); | 882 | MainLog.Instance.Debug(e.ToString()); |
@@ -895,10 +926,12 @@ namespace OpenSim.Region.Communications.OGS1 | |||
895 | } | 926 | } |
896 | //TODO need to see if we know about where this region is and use .net remoting | 927 | //TODO need to see if we know about where this region is and use .net remoting |
897 | // to inform it. | 928 | // to inform it. |
929 | NoteDeadRegion(regionHandle); | ||
898 | return false; | 930 | return false; |
899 | } | 931 | } |
900 | catch (RemotingException e) | 932 | catch (RemotingException e) |
901 | { | 933 | { |
934 | NoteDeadRegion(regionHandle); | ||
902 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + | 935 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + |
903 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | 936 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); |
904 | MainLog.Instance.Debug(e.ToString()); | 937 | MainLog.Instance.Debug(e.ToString()); |
@@ -906,6 +939,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
906 | } | 939 | } |
907 | catch | 940 | catch |
908 | { | 941 | { |
942 | NoteDeadRegion(regionHandle); | ||
909 | return false; | 943 | return false; |
910 | } | 944 | } |
911 | } | 945 | } |
@@ -945,10 +979,12 @@ namespace OpenSim.Region.Communications.OGS1 | |||
945 | } | 979 | } |
946 | //TODO need to see if we know about where this region is and use .net remoting | 980 | //TODO need to see if we know about where this region is and use .net remoting |
947 | // to inform it. | 981 | // to inform it. |
982 | NoteDeadRegion(regionHandle); | ||
948 | return false; | 983 | return false; |
949 | } | 984 | } |
950 | catch (RemotingException e) | 985 | catch (RemotingException e) |
951 | { | 986 | { |
987 | NoteDeadRegion(regionHandle); | ||
952 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + | 988 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region: " + regInfo.RegionName + |
953 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | 989 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); |
954 | MainLog.Instance.Debug(e.ToString()); | 990 | MainLog.Instance.Debug(e.ToString()); |
@@ -956,6 +992,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
956 | } | 992 | } |
957 | catch | 993 | catch |
958 | { | 994 | { |
995 | NoteDeadRegion(regionHandle); | ||
959 | return false; | 996 | return false; |
960 | } | 997 | } |
961 | } | 998 | } |
@@ -994,10 +1031,12 @@ namespace OpenSim.Region.Communications.OGS1 | |||
994 | } | 1031 | } |
995 | //TODO need to see if we know about where this region is and use .net remoting | 1032 | //TODO need to see if we know about where this region is and use .net remoting |
996 | // to inform it. | 1033 | // to inform it. |
1034 | NoteDeadRegion(regionHandle); | ||
997 | return false; | 1035 | return false; |
998 | } | 1036 | } |
999 | catch (RemotingException e) | 1037 | catch (RemotingException e) |
1000 | { | 1038 | { |
1039 | NoteDeadRegion(regionHandle); | ||
1001 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region to tell it to close child agents: " + regInfo.RegionName + | 1040 | MainLog.Instance.Warn("Remoting Error: Unable to connect to adjacent region to tell it to close child agents: " + regInfo.RegionName + |
1002 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); | 1041 | " " + regInfo.RegionLocX + "," + regInfo.RegionLocY); |
1003 | //MainLog.Instance.Debug(e.ToString()); | 1042 | //MainLog.Instance.Debug(e.ToString()); |
@@ -1006,6 +1045,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
1006 | 1045 | ||
1007 | catch (SocketException e) | 1046 | catch (SocketException e) |
1008 | { | 1047 | { |
1048 | NoteDeadRegion(regionHandle); | ||
1009 | MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region using tcp://" + | 1049 | MainLog.Instance.Warn("Socket Error: Unable to connect to adjacent region using tcp://" + |
1010 | regInfo.RemotingAddress + | 1050 | regInfo.RemotingAddress + |
1011 | ":" + regInfo.RemotingPort + | 1051 | ":" + regInfo.RemotingPort + |
@@ -1016,6 +1056,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
1016 | } | 1056 | } |
1017 | catch (InvalidCredentialException e) | 1057 | catch (InvalidCredentialException e) |
1018 | { | 1058 | { |
1059 | NoteDeadRegion(regionHandle); | ||
1019 | MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region using tcp://" + | 1060 | MainLog.Instance.Warn("Invalid Credentials: Unable to connect to adjacent region using tcp://" + |
1020 | regInfo.RemotingAddress + | 1061 | regInfo.RemotingAddress + |
1021 | ":" + regInfo.RemotingPort + | 1062 | ":" + regInfo.RemotingPort + |
@@ -1025,6 +1066,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
1025 | } | 1066 | } |
1026 | catch (AuthenticationException e) | 1067 | catch (AuthenticationException e) |
1027 | { | 1068 | { |
1069 | NoteDeadRegion(regionHandle); | ||
1028 | MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region using tcp://" + | 1070 | MainLog.Instance.Warn("Authentication exception: Unable to connect to adjacent region using tcp://" + |
1029 | regInfo.RemotingAddress + | 1071 | regInfo.RemotingAddress + |
1030 | ":" + regInfo.RemotingPort + | 1072 | ":" + regInfo.RemotingPort + |
@@ -1034,6 +1076,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
1034 | } | 1076 | } |
1035 | catch (WebException e) | 1077 | catch (WebException e) |
1036 | { | 1078 | { |
1079 | NoteDeadRegion(regionHandle); | ||
1037 | MainLog.Instance.Warn("WebException exception: Unable to connect to adjacent region using tcp://" + | 1080 | MainLog.Instance.Warn("WebException exception: Unable to connect to adjacent region using tcp://" + |
1038 | regInfo.RemotingAddress + | 1081 | regInfo.RemotingAddress + |
1039 | ":" + regInfo.RemotingPort + | 1082 | ":" + regInfo.RemotingPort + |
@@ -1043,6 +1086,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
1043 | } | 1086 | } |
1044 | catch (Exception e) | 1087 | catch (Exception e) |
1045 | { | 1088 | { |
1089 | NoteDeadRegion(regionHandle); | ||
1046 | // This line errors with a Null Reference Exception.. Why? @.@ | 1090 | // This line errors with a Null Reference Exception.. Why? @.@ |
1047 | //MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region using tcp://" + regInfo.RemotingAddress + | 1091 | //MainLog.Instance.Warn("Unknown exception: Unable to connect to adjacent region using tcp://" + regInfo.RemotingAddress + |
1048 | // ":" + regInfo.RemotingPort + | 1092 | // ":" + regInfo.RemotingPort + |
@@ -1091,11 +1135,21 @@ namespace OpenSim.Region.Communications.OGS1 | |||
1091 | { | 1135 | { |
1092 | MainLog.Instance.Verbose("INTER", | 1136 | MainLog.Instance.Verbose("INTER", |
1093 | gdebugRegionName + "Incoming OGS1 RegionUpReport: " + "(" + regionData.RegionLocX + | 1137 | gdebugRegionName + "Incoming OGS1 RegionUpReport: " + "(" + regionData.RegionLocX + |
1094 | "," + regionData.RegionLocY + ")"); | 1138 | "," + regionData.RegionLocY + "). Giving this region a fresh set of 'dead' tries"); |
1095 | 1139 | ||
1096 | try | 1140 | try |
1097 | { | 1141 | { |
1142 | lock (m_deadRegionCache) | ||
1143 | { | ||
1144 | if (m_deadRegionCache.ContainsKey(regionData.RegionHandle)) | ||
1145 | { | ||
1146 | |||
1147 | m_deadRegionCache.Remove(regionData.RegionHandle); | ||
1148 | } | ||
1149 | } | ||
1150 | |||
1098 | return m_localBackend.TriggerRegionUp(new RegionInfo(regionData), regionhandle); | 1151 | return m_localBackend.TriggerRegionUp(new RegionInfo(regionData), regionhandle); |
1152 | |||
1099 | } | 1153 | } |
1100 | 1154 | ||
1101 | catch (RemotingException e) | 1155 | catch (RemotingException e) |
@@ -1107,7 +1161,7 @@ namespace OpenSim.Region.Communications.OGS1 | |||
1107 | 1161 | ||
1108 | public bool TriggerChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) | 1162 | public bool TriggerChildAgentUpdate(ulong regionHandle, ChildAgentDataUpdate cAgentData) |
1109 | { | 1163 | { |
1110 | MainLog.Instance.Verbose("INTER", "Incoming OGS1 Child Agent Data Update"); | 1164 | //MainLog.Instance.Verbose("INTER", "Incoming OGS1 Child Agent Data Update"); |
1111 | 1165 | ||
1112 | try | 1166 | try |
1113 | { | 1167 | { |
@@ -1227,6 +1281,20 @@ namespace OpenSim.Region.Communications.OGS1 | |||
1227 | } | 1281 | } |
1228 | socket.Close(); | 1282 | socket.Close(); |
1229 | } | 1283 | } |
1284 | public void NoteDeadRegion(ulong regionhandle) | ||
1285 | { | ||
1286 | lock (m_deadRegionCache) | ||
1287 | { | ||
1288 | if (m_deadRegionCache.ContainsKey(regionhandle)) | ||
1289 | { | ||
1290 | m_deadRegionCache[regionhandle] = m_deadRegionCache[regionhandle] + 1; | ||
1291 | } | ||
1292 | else | ||
1293 | { | ||
1294 | m_deadRegionCache.Add(regionhandle, 1); | ||
1295 | } | ||
1296 | } | ||
1297 | } | ||
1230 | } | 1298 | } |
1231 | 1299 | ||
1232 | } \ No newline at end of file | 1300 | } \ No newline at end of file |