this documentation에 따라 데이터 스토어 관리 콘솔을 사용하여 내 앱의 데이터 저장소를 다른 앱에 복사하려고합니다. 내 응용 프로그램은 Java 런타임을 사용하기 때문에 지침에 따라 datastore admin Python sample을 설치했습니다. 다른 앱 서버의 ID를 허용 목록에 추가하고 지시대로 설치했습니다. 몇 달 전에 데이터 저장소를 복사하는 데 이와 같은 방법을 사용했으며 프로세스가 완전히 원활하게 진행되지는 못했지만 작업이 끝났습니다.GAE 데이터 스토어 관리 복사가 MapReduce 모델에서 JSON으로 변환하지 못했습니다.
데이터 저장소 관리 복사 작업으로 생성 된 작업이 완료되지 않았습니다. 기본 대기열에는 9 개의 작업이 있습니다 (복사하려고하는 각 엔티티 유형마다 하나씩). 작업의 메소드/URL은 POST /_ah/mapreduce/kickoffjob_callback
입니다. 그들은 지속적으로 작업을 재 시도하지만 지속적으로 실패합니다. 대상 응용 프로그램에서
Dispatched time (UTC) 2013/05/26 08:02:47
Seconds late 0.00
Seconds to process task 0.50
Last http response code 500
Reason to retry App Error
, 내가 거기에 하나를가되는 받고 있어요 유일한 표시 : 이전 실행 결과와 같은 각 뭔가 같습니다 작업 '
X-AppEngine-Current-Namespace
content-type application/x-www-form-urlencoded
Referer https://ah-builtin-python-bundle-dot-mysourceappid.appspot.com/_ah/datastore_admin/copy.do
Content-Length 970
Host ah-builtin-python-bundle-dot-mysourceappid.appspot.com
User-Agent AppEngine-Google; (+http://code.google.com/appengine)
하는 작업
헤더는 같은 각 뭔가있다'를 들어오는 복사 작업이 로그입니다 :2013-05-26 01:55:37.798 /_ah/remote_api?rtok=66767762443
200 1832ms 0kb AppEngine-Google; (+http://code.google.com/appengine; appid: s~mysourceappid)
0.1.0.40 - - [26/May/2013:00:55:37 -0700] "GET /_ah/remote_api?rtok=66767762443 HTTP/1.1" 200 137 - "AppEngine-Google;
(+http://code.google.com/appengine; appid: s~mysourceappid)" "datastore-admin.mydestinationappid.appspot.com" ms=1833
cpu_ms=1120 cpm_usd=0.000015 loading_request=1 app_engine_release=1.8.0 instance=00c61b117c9beacd101ff92c542598f549f755cc
I 2013-05-26 01:55:37.797
This request caused a new process to be started for your application, and thus caused your application code to be loaded
for the first time. This request may thus take longer and use more CPU than a typical request for your application.
그래서 요청이 적어도 앱 인스턴스를 일으키는 스핀 업 될 수 있지만, 그 이외는 아무것도 발생되지 않고 소스 응용 프로그램은 단지 얻을 수있다 500 개의 서버 오류가 발생했습니다.
원본 및 대상 데이터 저장소에서 쓰기를 사용하거나 사용하지 않도록 설정했습니다. 필자는 Python 데이터 저장소 관리 샘플에 올바른 앱 ID가 등록되어 있고 두 서버에 코드를 업로드했음을 두 배, 세 배, 네 배로 확인했습니다. 대상 서버에서만 필요합니다 (각각 다른 ID를 허용). HTTPS 및 HTTP URL을 모두 시도했습니다.
ahbuildin-python-bundle-dot-mysourceappid.appspot.com/_ah/mapreduce/status는 작업에 진행이나 활동이 없다는 것 이외의 관련 정보를 제공하지 않습니다. 내가 여기에서 일자리를 중단하려고 시도하면, 그 일 또한 중단되지 않습니다. 작업을 중지하려면 작업을 대기열에서 직접 삭제해야합니다. 그런 다음 _AE_DatastoreAdmin_Operation 엔티티를 포함하여 뒤에 남겨진 엔티티를 정리해야합니다.이 엔티티는 데이터 스토어 관리자가 계속 복사 작업을 활성 상태로 표시하고 _GAE_MR_MapreduceControl, _GAE_MR_MapreduceState 및 _GAE_MR_ShardState 엔티티도 뒤에 남겨 둡니다.
무엇이 잘못 되었나요? 나는 더 이상 관련 로그 데이터 나 프로세스가 실패한 곳에 대한 정보가 없다고 믿을 수 없다.
UPDATE : 나는 지난 밤에 피곤되어 있어야하고, 데이터 저장소 관리 작업이 발생하는 곳이기 때문에, 소스 응용 프로그램 아 - 내장 - 파이썬 번들 인스턴스 버전에서 로그에보고 생각하지 않았다 . 이것은 내가 거기지고있어 로그 출력 :
입력 독자가DatastoreKeyInputReader
의 하위 유형이 아니기 때문에 JSON에 맵리 듀스 데이터 모델을 변환하는 동안 복사 작업이 충돌처럼
2013-05-27 00:49:11.967 /_ah/mapreduce/kickoffjob_callback 500 320ms 1kb AppEngine-Google; (+http://code.google.com/appengine)
0.1.0.2 - - [26/May/2013:23:49:11 -0700] "POST /_ah/mapreduce/kickoffjob_callback HTTP/1.1" 500 1608 "https://ah-builtin-
python-bundle-dot-mysourceappid.appspot.com/_ah/datastore_admin/copy.do" "AppEngine-Google;
(+http://code.google.com/appengine)" "ah-builtin-python-bundle-dot-mysourceappid.appspot.com" ms=320 cpu_ms=80
cpm_usd=0.000180 queue_name=default task_name=706762757133111420 app_engine_release=1.8.0
instance=00c61b117c5825670de2531f27693bdc2ffb71
E 2013-05-27 00:49:11.966
super(type, obj): obj must be an instance or subtype of type
Traceback (most recent call last):
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 716, in __call__
handler.post(*groups)
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/mapreduce/base_handler.py", line 83, in post
self.handle()
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/mapreduce/handlers.py", line 1087, in handle
spec, input_readers, queue_name, self.base_path(), state)
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/mapreduce/handlers.py", line 1159, in _schedule_shards
output_writer=output_writer))
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/mapreduce/handlers.py", line 718, in _state_to_task
params=tstate.to_dict(),
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/mapreduce/model.py", line 805, in to_dict
"input_reader_state": self.input_reader.to_json_str(),
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/mapreduce/model.py", line 165, in to_json_str
json = self.to_json()
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/mapreduce/input_readers.py", line 2148, in to_json
json_dict = super(DatastoreKeyInputReader, self).to_json()
TypeError: super(type, obj): obj must be an instance or subtype of type
보인다. 이는 데이터 저장소 복사 작업을 마지막으로 실행 한 현재 SDK 버전 인 1.7.5 이후 버전 1.8.0 또는 다른 버전에서 도입 된 버그 여야합니다.
가 [GAE의 버그 추적에서이 문제를보고 (https://code.google.com/p/googleappengine/issues/detail?id=9388). –