[mapguide-commits] r4735 - in trunk/MgDev: Common/MapGuideCommon/System Common/PlatformBase/MapLayer Server/src/Core

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Apr 1 16:37:17 EDT 2010


Author: brucedechant
Date: 2010-04-01 16:37:16 -0400 (Thu, 01 Apr 2010)
New Revision: 4735

Modified:
   trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.cpp
   trunk/MgDev/Common/PlatformBase/MapLayer/SelectionBase.cpp
   trunk/MgDev/Server/src/Core/serverconfig.ini
Log:
Fix for trac ticket 1303 - Selection of large number of features causes server to crash
http://trac.osgeo.org/mapguide/ticket/1303

Notes:
- Updated the GenerateFilters() API to restrict the filter text size when creating the collection of filters.


Modified: trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.cpp
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.cpp	2010-04-01 20:04:21 UTC (rev 4734)
+++ trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.cpp	2010-04-01 20:37:16 UTC (rev 4735)
@@ -64,6 +64,9 @@
 #define MG_CONFIG_MIN_JOIN_QUERY_BATCH_SIZE             1
 #define MG_CONFIG_MAX_JOIN_QUERY_BATCH_SIZE             10000
 
+#define MG_CONFIG_MIN_RENDER_SELECTION_SIZE             1000
+#define MG_CONFIG_MAX_RENDER_SELECTION_SIZE             100000
+
 ///////////////////////////////////////////////////////////////////////////////
 /// Length ranges of string properties
 ///
@@ -293,7 +296,7 @@
 const STRING MgConfigProperties::RenderingServicePropertyRasterGridSizeOverrideRatioForPlot = L"RasterGridSizeOverrideRatioForPlot";
 const double MgConfigProperties::DefaultRenderingServicePropertyRasterGridSizeOverrideRatioForPlot = 0.10;
 const STRING MgConfigProperties::RenderingServicePropertyRenderSelectionBatchSize           = L"RenderSelectionBatchSize";
-const INT32  MgConfigProperties::DefaultRenderingServicePropertyRenderSelectionBatchSize    = 10000;
+const INT32  MgConfigProperties::DefaultRenderingServicePropertyRenderSelectionBatchSize    = 50000;
 const STRING MgConfigProperties::RenderingServicePropertyClampPoints                        = L"ClampPoints";
 const bool   MgConfigProperties::DefaultRenderingServicePropertyClampPoints                 = false;
 const STRING MgConfigProperties::RenderingServicePropertyGeneralizeData                     = L"GeneralizeData";
@@ -609,7 +612,7 @@
     { MgConfigProperties::RenderingServicePropertyRasterGridSizeForPlot             , MgPropertyType::Int32     , 1                                     , MG_CONFIG_MAX_INT32                   , L""                                       },
     { MgConfigProperties::RenderingServicePropertyMinRasterGridSizeForPlot          , MgPropertyType::Int32     , 1                                     , MG_CONFIG_MAX_INT32                   , L""                                       },
     { MgConfigProperties::RenderingServicePropertyRasterGridSizeOverrideRatioForPlot, MgPropertyType::Double    , 0.0                                   , 1.0                                   , L""                                       },
-    { MgConfigProperties::RenderingServicePropertyRenderSelectionBatchSize          , MgPropertyType::Int32     , 0                                     , MG_CONFIG_MAX_INT32                   , L""                                       },
+    { MgConfigProperties::RenderingServicePropertyRenderSelectionBatchSize          , MgPropertyType::Int32     , MG_CONFIG_MIN_RENDER_SELECTION_SIZE   , MG_CONFIG_MAX_RENDER_SELECTION_SIZE   , L""                                    },
     { L""                                                                           , 0                         , 0.0                                   , 0.0                                   , L""                                       }
 };
 

Modified: trunk/MgDev/Common/PlatformBase/MapLayer/SelectionBase.cpp
===================================================================
--- trunk/MgDev/Common/PlatformBase/MapLayer/SelectionBase.cpp	2010-04-01 20:04:21 UTC (rev 4734)
+++ trunk/MgDev/Common/PlatformBase/MapLayer/SelectionBase.cpp	2010-04-01 20:37:16 UTC (rev 4735)
@@ -518,8 +518,8 @@
 MgStringCollection* MgSelectionBase::GenerateFilters(MgLayerBase* layer,
     CREFSTRING className, INT32 selectionSize)
 {
+    const INT32 OR_TEXT_SIZE = 4; // ie: " OR "
     Ptr<MgStringCollection> filters;
-    INT32 selectionCount = 0;
     STRING filter;
     bool filterReserved = false;
 
@@ -542,14 +542,7 @@
         {
             m_stream->FromBase64(*sIter);
 
-            if (bFirstSel)
-            {
-                selText = L"(";
-            }
-            else
-            {
-                selText = L" OR (";
-            }
+            selText = L"(";
 
             bool bFirstProp = true;
             MgLayerBase::IdPropertyList::iterator idIter;
@@ -686,20 +679,24 @@
                 filterReserved = true;
             }
 
-            filter.append(selText);
-            ++selectionCount;
-
-            if (selectionSize > 0 && selectionCount >= selectionSize)
+            if ((selectionSize > 0) && ((filter.length() + selText.length() + OR_TEXT_SIZE) >= selectionSize))
             {
-                bFirstSel = true;
                 filters->Add(filter);
                 filter.clear();
-                selectionCount = 0;
             }
             else
             {
+                // Check if the "OR" needs to be added
+                if (!bFirstSel)
+                {
+                    filter.append(L" OR ");
+                }
+
                 bFirstSel = false;
             }
+
+            // Add the selection
+            filter.append(selText);
         }
 
         if (!filter.empty())

Modified: trunk/MgDev/Server/src/Core/serverconfig.ini
===================================================================
--- trunk/MgDev/Server/src/Core/serverconfig.ini	2010-04-01 20:04:21 UTC (rev 4734)
+++ trunk/MgDev/Server/src/Core/serverconfig.ini	2010-04-01 20:37:16 UTC (rev 4735)
@@ -333,7 +333,7 @@
 RasterGridSizeForPlot              = 50
 MinRasterGridSizeForPlot           = 5
 RasterGridSizeOverrideRatioForPlot = 0.10
-RenderSelectionBatchSize           = 10000
+RenderSelectionBatchSize           = 50000
 ClampPoints                        = 0
 GeneralizeData                     = 0
 



More information about the mapguide-commits mailing list