示例#1
0
def migrate(custIds,islandId,sourceIslandId,minRange,maxRange,showAndExitOnly=False):
    global QUEUE,MsgsProcessed,StartCount,TotSearchTime
    mc = ManagementContainer.getInstance()
    ism = mc.getIndexSearchManager()
    im = mc.getIslandManager()
    sourceIsland = im.getIsland(int(sourceIslandId))
    sourceType = sourceIsland.getIndexPlatformVersion()

    # search for documents 
    isc = IndexSearchConstraint(None,None)
    isc.sortBy('storageid',True)
    isc.constrainByMinimumStorageId(minRange)
    isc.constrainByIsland(mc.getIslandManager().getIsland(sourceIslandId))

    if IndexPlatformVersion.SOLR_x == sourceType :
        query = buildSolrQuery(custIds, maxRange)
    else:
        query = buildFastQuery(custIds, maxRange)
    start = time.time()
    sr = search(query,isc,ism)
    StartCount = sr.getDocCount()
    elapsed = time.time() - start
    TotSearchTime = TotSearchTime + elapsed
    log('PERF: search',StartCount,'msgs, time',elapsed,'s','total',TotSearchTime,'s')
    if showAndExitOnly:
        return
    hitsRemaining = ism.getMaxIndextHits()
    lastStorageId = 0
    iter = sr.documents().iterator()
    
    while checkSearchIter(iter):
        doc = iter.next()
        hitsRemaining -= 1

        storageId   = doc.getStorageID()

        # only process each EMS message ID one time
        if storageId != lastStorageId:
            QUEUE.put(doc)
            lastStorageId = storageId

        if hitsRemaining <= 0 or not checkSearchIter(iter):
            log('STAT: getting new search results beyond storageId',storageId)
            isc.constrainByMinimumStorageId(storageId)
            start = time.time()
            sr = search(query + ' and isattachment:0',isc,ism)
            elapsed = time.time() - start
            TotSearchTime = TotSearchTime + elapsed
            log('PERF: search time',elapsed,'s','total',TotSearchTime,'s')
            hitsRemaining = ism.getMaxIndextHits()
            iter = sr.documents().iterator()

    log('STAT: search work complete')
示例#2
0
def test(islandId, numMessages, esHosts):
    mc = ManagementContainer.getInstance()
    lastVal = None
    custId = None
    service = Service("storageimporter")
    msgs = None

    try:
        lastVal, nextVal = setMessageId(mc, Integer.MAX_VALUE - 2)
        print "lastVal,nextVal", lastVal, nextVal
        print "restart storageimporters", esHosts
        service.invoke("restart", esHosts)
        custId = setupCustomer(mc, islandId)
        msgs = findMessages(mc, custId, numMessages)
        print "created messages", msgs
        checkSearchStatus(mc, msgs, custId)

        ism = mc.getIndexSearchManager()
        isc = IndexSearchConstraint(None, None)
        isc.sortBy("storageid", True)
        isc.constrainByMinimumStorageId(0)
        isc.constrainByIsland(mc.getIslandManager().getIsland(islandId))
        print "DBG min", 0
        query = "customerid:" + str(custId)
        sr = ism.searchAndWrap(query, isc, CallerApp.INTERNAL)
        if sr.getDocCount() != 10:
            print >> sys.stderr, "Failed to find 10 documents when minStorageId = 0, found", sr.getDocCount()
            return 1
        print "DBG min", Integer.MAX_VALUE - 1
        isc.constrainByMinimumStorageId(Integer.MAX_VALUE - 1)
        sr = ism.searchAndWrap(query, isc, CallerApp.INTERNAL)
        if sr.getDocCount() != 9:
            print >> sys.stderr, "Failed to find 9 documents when minStorageId = ", Integer.MAX_VALUE - 1, ",found", sr.getDocCount()
            return 1
        print "DBG min", Integer.MAX_VALUE + 1
        isc.constrainByMinimumStorageId(Integer.MAX_VALUE + 1)
        sr = ism.searchAndWrap(query, isc, CallerApp.INTERNAL)
        if sr.getDocCount() != 7:
            print >> sys.stderr, "Failed to find 7 documents when minStorageId = ", Integer.MAX_VALUE + 1, ",found", sr.getDocCount()
            return 1
    finally:
        if msgs is not None:
            for msg in msgs:
                purgeMessage(mc, msg, custId)
        if custId is not None:
            mc.getCustomerManager().deleteCustomers([custId])
        if lastVal is not None:
            lastVal, nextVal = setMessageId(mc, lastVal)
            print "lastVal,nextVal", lastVal, nextVal
            print "restart storageimporters", esHosts
            service.invoke("restart", esHosts)
    return 0
示例#3
0
def search(isle, term):
    mc = ManagementContainer.getInstance()
    sm = mc.getIndexSearchManager()
    im = mc.getIslandManager()
    pm = mc.getPartitionManager()

    fIS = IndexSearchConstraint(None, None)
    fIS.constrainByIsland(isle)
    fIS.constrainByNumberOfHitsToReturn(10)
    fIS.constrainByMinimumStorageId(0)
    fIS.setOutputFields(["storageid", "partitionid"])
    fIS.sortBy("storageid", True)

    done = False
    cnt = 0
    lastID = 0
    while not done:
        ok = False
        while not ok:
            try:
                fQR = sm.search(term, fIS, None, CallerApp.INTERNAL)
                ok = True
            except Throwable, t:
                print "Exception caught during search, retry = true", t
                t.printStackTrace()

        numDocs = fQR.getDocCount()
        print "Found numDocs", numDocs

        done = fQR.getDocCount() == 0

        print "Preview some data"
        for doc in fQR.documents():
            # print doc.getPartitionID(),pm.getPartition(doc.getPartitionID()).isReadOnly(),doc.getStorageID(),doc.getReceivedDate()
            print doc.getPartitionID(), doc.getStorageID()
            lastID = doc.getStorageID()
            cnt += 1
        fIS.constrainByMinimumStorageId(lastID)

        # just loop once
        done = True