带有托管特性层的间歇性504网关超时

14501
34
2017年7月12日08:02
JohnFannon”id=
通过
临时贡献者III

我们有一个客户,我们已经发布了一些数据作为ArcGIS在线托管功能服务。我们有一个过程,可以根据托管层数据库的变化对其应用更改,包括添加、更新和删除。该过程是用python编写的,代码将http请求发送到层的REST端点(即addFeatures, updateFeatures, deleteFeatures)。

代码正常工作了几个月了,但是我们越来越多地在进程日志中看到与http请求相关的间歇性错误,特别是错误504(网关超时)。我已经调查了错误504,这表明在ArcGIS在线内部服务器之间发生了超时。当更新一个特定的层(使用updateFeatures)时,这个错误似乎最常发生,它有大约。4500个特征,但偶尔会发生更新请求的其他层较少的特征(大约。500)。它完全是间歇性的,因此在一次运行期间,一个请求可能失败,但随后下一个请求将成功。

我们已经采取了一些变通措施,例如在请求失败时对请求进行多次尝试,并限制每个请求更新的特性数量。但是,我们仍然看到一些错误504的实例。

我只是想知道是否有人在应用AGOL托管功能服务的定期更新时有类似的经验?

问候

约翰

GIS4BUSINESS

34个回复
PaulDavidson1”id=
通过
定期撰稿人

嗨凯莉:

是的,我可以确认我们正在读写AGOL中的(2)托管功能服务,它们是托管功能层的一部分。它们是1:多关系的一部分。

这基本上是一个消防栓检查项目。

我们正在使用一个Python脚本。

我的解决方案是循环脚本7次。

对于每个循环,读取一个检查表,确定自上一个循环以来的新检查的检查状态,将状态写入检查表(许多)和该资产的Feature Class承载层记录(1 of 1:许多)。这可以一次写入多个记录。

然后再睡两分钟,等待更多的检查。

7个循环后,它就消失了。

Task Scheduler是用来每隔15分钟启动一次,所以如果它崩溃了,我们的准实时地图最多只能运行15分钟。

这个过程很有效,但当然感觉像一个hack,但它有效,所以我很喜欢它。

在我看来,我们正在使用edit_features而不是append:

下面是我们更新这两个表的地方
如果len(inspectionedit) > 0:
EditInspectionResult = featurettable .edit_features(updates= inspectioneditits)
EditHydrantResult = FeatureLayer.edit_features(updates=HydrantEdits)

我将仔细研读如何使用append。

对编辑进行追加并不直观,但如果是BP,我们会这样做。

我发现我们有时会因为阅读Feature Layer信息而崩溃,这是非常随机的。

我倾向于把它看成是网络。

谢谢你的追加指针。我找个机会解决一下再回来报告。

可能是一段时间,因为我们在一起(它没有坏…)

0荣誉
PaulDavidson1”id=
通过
定期撰稿人

嗨凯莉:

看起来帖子实际上只是使用附加工具与托管层。我们的问题是代码崩溃,我很确定是由于超时。就像查克下面说的,我还没有找到设定这些价值观的方法。

正如保罗·巴克(Paul Barker)在他的著作中所述,我们基本上是在做颠覆。我认为数据库中的大多数更新都是更新。

所以我认为append在这里不适用,但我会挖掘ArcGIS python库,当我可以。

0荣誉
JohnFannon”id=
通过
临时贡献者III

我们的问题不是由于使用了追加。我们通过python直接向REST端点发送请求(因为代码是在ArcGIS python API之前开发的),并得到504网关超时错误。通过ArcGIS Python API使用的任何方法最终都会导致使用applyEdits, updateFeatures, addFeatures或deleteFeatures操作向服务的REST端点发出http请求,这些操作与我们直接通过Python使用的操作完全相同。

此外,在客户端请求上设置任何超时选项都没有什么区别,因为这些选项只涉及客户端超时,而错误(504网关超时)来自服务器端的内部超时。

在我们的代码中,我们捕获http错误并多次重新发送相同的请求。在大多数情况下,这是有效的,但偶尔我们仍然会在多次尝试后失败。这些不会导致崩溃,因为我们只是记录错误并继续。

ChuckBenton”id=
通过
偶然的因素

我看到类似的超时问题时,追加或删除内容从一个功能层,托管在ArcGIS Online。虽然不是100%一致,但它只发生在大文件中。我正在处理的feature层非常大,超过40M个包,所以执行的工作需要一些时间,这是可以接受的。我一直在寻找一个可以设置的超时值,以适应这种情况。欢迎提出任何建议!

0荣誉
PhilLarkin1”id=
通过
定期撰稿人

我也经历过这种行为。在4个月的完美性能之后,由于超时,覆盖函数开始间歇性地失败。我使用python API(1.4.1),如下所示。这些是我正在更新的托管特征数据集:
http://spokanecounty.maps.arcgis.com/home/item.html?id=5805ca391e5f4c1ca6f0e58aee0d46a6
http://spokanecounty.maps.arcgis.com/home/item.html?id=b6b1e7f8e12c4a9ba78af72076aee7af
http://spokanecounty.maps.arcgis.com/home/item.html?id=848144f660a741f4b274360d494f15a1


我相信错误- 000115253可能是相关联的。这在1.4.2中已经确定。

虫简介:当使用arcgis.features.managers中的overwrite方法时。FeatureLayerCollectionManager, ArcGIS API for Python returns the error "Exception: Job Failed.''

例子:

进口arcgis gis=arcgis地理信息系统地理信息系统https://spokanecounty.maps.arcgis.com<usr><pw>=地理信息系统内容得到itemIDdataPath公司=“\ \ \ \ <路径> \ \ Parcels.zip”状态=arcgis特性FeatureLayerCollectionfromitem经理覆盖dataPath公司


错误日志:

回溯(最近一次调用):文件"C:\Automation\Python\Jobs-ISD\AGOLUpdate\Code\AGOLUpdate.py",第117行,在 overwriteStatus = overwriteAGOLfeature(dataName,data.get('itemID'),data.get('zipData'))文件"C:\Automation\Python\Jobs-ISD\AGOLUpdate\Code\AGOLUpdate.py",第87行,在overwriteAGOLfeature status = ArcGIS . featurelayercollection .fromitem(item).manager.overwrite(dataPath)文件"C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\ ArcGIS -1.3.0-py3.5.egg\ ArcGIS\ features\managers.py",第771行,in overwrite if related_data_item.update(data=data_file):文件"C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\ ArcGIS -1.3.0-py3.5 egg\ ArcGIS\ gis\__init__.py",第4994行,在update_item resp = self.con中。(路径、postdata文件)文件“C: \ Program files \ ArcGIS \ Pro \ bin \ Python \ env \ arcgispro-py3 \ lib \网站\ arcgis-1.3.0-py3.5.egg \ ArcGIS \ _impl \ connection.py”,1076行,在岗位职责= opener.open(点播)文件“C: \ Program files \ ArcGIS \ Pro \ bin \ Python \ env \ arcgispro-py3 \ lib \ urllib \ request.py”,472行,在公开回应=冰毒(请求、响应)文件“C: \ Program files \ ArcGIS \ Pro \ bin \ Python \ env \ arcgispro-py3 \ lib \ urllib \ request.py”,582行,在http_response“http”,请求,响应代码,味精,文件"C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\urllib\request.py",第510行,在错误中返回self._call_chain(*args)文件"C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\urllib\request.py",第444行,在_call_chain result = func(*args)文件"C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\urllib\request.py",第590行,在http_error_default中引发HTTPError(req. py)。full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP错误504:网关超时
PhilLarkin1”id=
通过
定期撰稿人

这实际上与bug有关。严重程度记录为低。

BUG-000115253:当使用arcgis.features.managers中的overwrite方法时。FeatureLayerCollectionManager, ArcGIS API for Python returns the error "Exception: Job Failed.''

BUG-000115253:当使用arcgis.features中的overwrite方法时…

PhilLarkin1”id=
通过
定期撰稿人

负责我案例的分析师建议使用arcpy。在arcgis python api中使用Sharing代替overwrite函数。

建筑学概论。共享共享模块| ArcGIS桌面

0荣誉
MichaelVolz”id=
通过
尊敬的贡献者

OP说他正在使用http请求和AGOL。当基于TLS安全更新的下一个更新应用于2月份的AGOL时,这是否会成为一个问题?

0荣誉
JohnFannon”id=
通过
临时贡献者III

如上所述,我们通过Python使用http请求。因此,2月份的TLS 1.2更新是否需要进行任何更改取决于ArcGIS的版本,因此也取决于所安装的Python。在本例中,我们的客户使用的是ArcGIS 10.4。它安装Python 2.7.10,默认使用TLS 1.2,因此不应该需要任何更改。

python版本是否使用TLS 1.2可以按照这里提到的步骤来确定如何检查你的Python应用是否支持TLS 1.2 | Calazan.com。

但是,如果您使用ArcGIS Desktop连接到ArcGIS Online或其他连接方法,那么您可能需要采取一些操作。这里有更多的信息Esri支持ArcGIS平台和传输层安全(TLS)协议S的重要更新…

0荣誉
DavidRunneals2”id=
偶然的因素

这是一个持续存在的错误,esri的解决方案基本上是不断尝试,直到它工作……我们已经得到了500、502、503和504个错误。我被告知,500和504错误被合并到502错误中。我们的过程尝试了3次,但仍然失败。希望esri能意识到多次重试不是一个有效的“变通方法”。甚至在查看地图上的数据和查看数据表时,我也遇到过这些错误。在去年与UC的一些人交谈后,听起来这可能是他们的后端扩展和缓存错误响应的症状。凯利Gerrow

重新提交请求以解决间歇性错误。脚本或工具可以设置失败后重试逻辑。”

BUG-000124290向ArcGIS在线托管功能服务发出“query”和“applyEdits”请求

BUG-000123780向ArcGIS Online hosting feature service发出query和applyEdits请求…