diff options
Diffstat (limited to 'OpenSim/Region/Communications/OGS1/OGS1GridServices.cs')
-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 |