def _wait_compaction_complete(client, params, bg): timeout = int(params['timeout']) if not params['wait-for-completion']: print "wait-for-completion option is not set so no need to check for compaction to complete" print "use --wait-for-completion to make this script wait for compaction to complete" return True wait_time = 10 #wait 10 seconds before checking again try_number = timeout / wait_time + 1 client.options.plugins = [common._AttributePlugin(buildGroup=bg)] for i in range(0, try_number): bg_status = client.service.getBuildGroupStatus() if not bg_status.IndexBuilderStatus._compacting: print "Compaction completed for build group {} after {} seconds".format(bg, i * wait_time) return True print "Compaction in progress. Waiting {} seconds before checking again".format(wait_time) print "Compaction progress per slice:" for stat in bg_status.IndexBuilderStatus.IndexSliceBuilderStatus: if stat._compacting: print " slice {}: Docs {}, {}% done (compacting {} {}%)".format(stat._indexSlice, stat._ndocs, stat.CompactingStatus._globalProgress, stat.CompactingStatus._component, stat.CompactingStatus._progress) else: print " slice {} finished compacting".format(stat._indexSlice) time.sleep(wait_time) client.options.plugins = [] print "Compaction didn't finish within timeout period of {} seconds. exiting ...".format(timeout) return False
def _fullCompactIndex(params): bg_slices = _get_bg_slices(params) #if the build-group parameter is not specified runs compaction for all build groups if params['build-group']: bg = params['build-group'] if bg not in bg_slices: common.print_usage("Invalid build group {}".format(bg)) bg_slices = {bg: bg_slices[bg]} url = "http://{}:{}/mami/indexing/soap".format(params['master'] , params['master-port']) wsdl_url = "{}?wsdl".format(url) imp = Import('exa:exa.bee', "{}?xsd=2".format(url)) client = Client(wsdl_url, plugins=[ImportDoctor(imp)]) for bg in bg_slices: nb_slices = int(bg_slices[bg]) slices = ','.join(str(i) for i in xrange(nb_slices)) print "Compacting slices ({}) for build group ({})".format(slices, bg) client.options.plugins = [common._AttributePlugin(buildGroup=bg, indexSlices=slices)] client.service.fullCompactIndex() client.options.plugins = [] _wait_compaction_complete(client, params, bg)