in ambari-infra-solr-client/src/main/python/migrationHelper.py [0:0]
def monitor_solr_async_request(options, config, status_request, request_id):
request_status_json_cmd=create_solr_api_request_command(status_request, config)
logger.debug("Solr request: {0}".format(status_request))
async_request_success_msg = "Async Solr request (id: {0}) {1}COMPLETED{2}".format(request_id, colors.OKGREEN, colors.ENDC)
async_request_timeout_msg = "Async Solr request (id: {0}) {1}FAILED{2}".format(request_id, colors.FAIL, colors.ENDC)
async_request_fail_msg = "\nAsync Solr request (id: {0}) {1}TIMED OUT{2} (increase --solr-async-request-tries if required, default is 400)".format(request_id, colors.FAIL, colors.ENDC)
max_tries = options.solr_async_request_tries if options.solr_async_request_tries else 400
tries = 0
sys.stdout.write("Start monitoring Solr request with id {0} ...".format(request_id))
sys.stdout.flush()
async_request_finished = False
async_request_failed = False
async_request_timed_out = False
while not async_request_finished:
tries = tries + 1
process = Popen(request_status_json_cmd, stdout=PIPE, stderr=PIPE, shell=True)
out, err = process.communicate()
if process.returncode != 0:
raise Exception("{0} command failed: {1}".format(request_status_json_cmd, str(err)))
else:
response=json.loads(str(out))
logger.debug(response)
if 'status' in response:
async_state=response['status']['state']
async_msg=response['status']['msg']
if async_state == "completed":
async_request_finished = True
sys.stdout.write("\nSolr response message: {0}\n".format(async_msg))
sys.stdout.flush()
elif async_state == "failed":
async_request_finished = True
async_request_failed = True
sys.stdout.write("\nSolr response message: {0}\n".format(async_msg))
sys.stdout.flush()
else:
if not options.verbose:
sys.stdout.write(".")
sys.stdout.flush()
logger.debug(str(async_msg))
logger.debug("Sleep 5 seconds ...")
time.sleep(5)
else:
raise Exception("The 'status' field is missing from the response: {0}".format(response))
if tries == max_tries:
async_request_finished = True
async_request_timed_out = True
if async_request_failed:
if async_request_timed_out:
print(async_request_timeout_msg)
sys.exit(1)
else:
print(async_request_fail_msg)
sys.exit(1)
else:
print(async_request_success_msg)
return request_id