Exemple #1
0
static void kr_rebuild_index_del(T_KRIndexTable *ptIndextable, T_KRRecord *ptRecord)
{
    void *key = kr_field_get_value(ptRecord, ptIndextable->iIndexFieldId);
    T_KRHashTable *pHashTable = ptIndextable->ptIndex->pHashTable;

    T_KRIndexSolt *ptIndexSlot = kr_hashtable_lookup(pHashTable, key);
    if (ptIndexSlot != NULL) {
        /*modify statistical fields of external*/
        if (kr_get_proctime(ptRecord) > ptIndexSlot->tExtMaxProcTime) {
            ptIndexSlot->tExtMaxProcTime = kr_get_proctime(ptRecord);
        }
        if (kr_get_transtime(ptRecord) > ptIndexSlot->tExtMaxTransTime) {
            ptIndexSlot->tExtMaxTransTime = kr_get_transtime(ptRecord);
        }
        /*remove record from list*/
        kr_list_remove(ptIndexSlot->pRecList, ptRecord);

        /*free this slot if there is no records*/
        if (kr_list_length(ptIndexSlot->pRecList) == 0 ) {
            kr_hashtable_remove(pHashTable, ptIndexSlot->pKeyValue);
            kr_list_destroy(ptIndexSlot->pRecList);
            kr_free(ptIndexSlot->pKeyValue);
            kr_free(ptIndexSlot);
        }
    }
}
Exemple #2
0
static T_KRDataItem *kr_data_item_get(T_KRData *ptData, char kind, int id, T_KRContext *ptContext)
{
    char caDataItemId[20+1] = {0};
    snprintf(caDataItemId, sizeof(caDataItemId), "%c_%d", kind, id);

    T_KRDataItem *ptDataItem = kr_hashtable_lookup(ptData->ptItemTable, caDataItemId);
    if (ptDataItem == NULL) {
        KR_LOG(KR_LOGERROR, "kr_hashtable_lookup [%c]:[%d] failed!", kind, id);
        return NULL;
    }

    //check whether computed yet, that is record level cache
    T_KRRecord *ptCurrRec = kr_context_get_data(ptContext, "curr_rec");
    if (ptDataItem->ptCurrRec != ptCurrRec) {
        ptDataItem->ptCurrRec = ptCurrRec;
        if (ptDataItem->pfDataItemAggr != NULL) {
            if (ptDataItem->pfDataItemAggr(ptDataItem, ptContext) != 0) {
                KR_LOG(KR_LOGERROR, "pfDataItemAggr [%c]:[%d] failed!", 
                        kind, id);
                return NULL;
            }
        }
    } else {
        KR_LOG(KR_LOGDEBUG, "Get [%c]:[%d] record level cached!", kind, id);
    }
    
    return ptDataItem;
}
Exemple #3
0
static void kr_rebuild_index_ins(T_KRIndexTable *ptIndextable, T_KRRecord *ptRecord)
{
    void *key = kr_field_get_value(ptRecord, ptIndextable->iIndexFieldId);
    T_KRHashTable *pHashTable = ptIndextable->ptIndex->pHashTable;

    T_KRIndexSolt *ptIndexSlot = kr_hashtable_lookup(pHashTable, key);
    if (ptIndexSlot == NULL) {
        /*create slot if not found*/
        ptIndexSlot = kr_calloc(sizeof(*ptIndexSlot));
        ptIndexSlot->eKeyType = 
            kr_field_get_type(ptRecord, ptIndextable->iIndexFieldId);
        KRDupFunc pfKeyDup = kr_get_dup_func(ptIndexSlot->eKeyType);
        ptIndexSlot->pKeyValue = pfKeyDup(key);
        ptIndexSlot->tLocMinProcTime = kr_get_proctime(ptRecord);
        ptIndexSlot->tLocMinTransTime = kr_get_transtime(ptRecord);
        ptIndexSlot->tExtMaxProcTime = kr_get_proctime(ptRecord);
        ptIndexSlot->tExtMaxTransTime = kr_get_transtime(ptRecord);
        ptIndexSlot->pRecList = kr_list_new();
        kr_hashtable_insert(pHashTable, ptIndexSlot->pKeyValue, ptIndexSlot);
    }

    /*modify statistical fields of local*/
    if (kr_get_proctime(ptRecord) < ptIndexSlot->tLocMinProcTime) {
        ptIndexSlot->tLocMinProcTime = kr_get_proctime(ptRecord);
    }
    if (kr_get_transtime(ptRecord) < ptIndexSlot->tLocMinTransTime) {
        ptIndexSlot->tLocMinTransTime = kr_get_transtime(ptRecord);
    }

    /*add record to list*/
    kr_list_add_tail(ptIndexSlot->pRecList, ptRecord);
}
Exemple #4
0
/* search an element in a krset
 * return TURE while found, FALSE for else
 */
kr_bool kr_hashset_search(T_KRHashSet *krset, const void *element)
{
    void *entry = kr_hashtable_lookup(krset->set, element);
    if (entry != NULL) {
        return TRUE;
    }
    return FALSE;
}
E_KRType kr_set_get_type(int aid, T_KRData *ptData)
{
    if (ptData == NULL) return KR_TYPE_UNKNOWN;
        
    long lAid = (long )aid;
    T_KRSetTable *ptSetTable = ptData->ptSetTable;
    if (ptSetTable == NULL) {
        KR_LOG(KR_LOGERROR, "ptSetTable is null");
        return KR_TYPE_UNKNOWN;
    }
    T_KRSet *ptSet = kr_hashtable_lookup(ptSetTable->ptSetTable, &lAid);
    if (ptSet == NULL) return KR_TYPE_UNKNOWN;
    
    return ptSet->eValueType;
}
void *kr_set_get_value(int aid, T_KRData *ptData)
{
    if (ptData == NULL) return NULL;
        
    long lAID = (long )aid;
    T_KRSetTable *ptSetTable = ptData->ptSetTable;
    if (ptSetTable == NULL) {
        KR_LOG(KR_LOGERROR, "ptSetTable is null");
        return NULL;
    }
    T_KRSet *ptSet = kr_hashtable_lookup(ptSetTable->ptSetTable, &lAID);
    if (ptSet == NULL) return NULL;
    
    return ptSet->ptHashSet;
}
Exemple #7
0
static void kr_rebuild_index_ins(T_KRIndex *krindex, T_KRRecord *krrecord)
{
    void *key = kr_get_field_value(krrecord, krindex->iIndexFieldId);
    
    T_KRList *pRecList = kr_hashtable_lookup(krindex->pHashTable, key);
    if (pRecList == NULL) {
        pRecList = kr_list_new();
        kr_list_set_compare(pRecList, (KRCompareDataFunc)kr_db_field_compare);
    }

    if (krindex->iSortFieldId >= 0) {
        kr_list_add_sorted(pRecList, krrecord, &krindex->iSortFieldId);
    } else {
        kr_list_add_tail(pRecList, krrecord);
    }
        
    kr_hashtable_replace(krindex->pHashTable, key, pRecList);
}
T_KRHdiCacheValue *kr_hdi_cache_get(T_KRCache *cache, void *key, long hid)
{
    T_KRHdiCacheValue *hdi_cache_val = NULL;
    T_KRHashTable *node = kr_cache_get(cache, key);
    if (node != NULL) {
        hdi_cache_val = kr_hashtable_lookup(node, &hid);
    } else {
        node = kr_hashtable_new_full(kr_long_hash, kr_long_equal, \
                            NULL, (KRDestroyNotify )kr_hdi_cache_value_free);
        kr_cache_set(cache, key, node);
    }
    
    if (hdi_cache_val == NULL) {
        hdi_cache_val = kr_hdi_cache_value_new(hid);
        kr_hashtable_replace(node, &hdi_cache_val->lHDIId, hdi_cache_val);
    }

    return hdi_cache_val;
}
static void 
kr_coordi_read_handler(T_KREventLoop *el, int fd, void *priv, int mask) 
{
    int ret = 0;
    T_KRMessage stMsg = {0};

    /** read message */
    T_KRMessage *ptMsg = kr_message_read(fd);
    if (ptMsg == NULL) {
        /* read message failure */
        KR_LOG(KR_LOGERROR, "read message error[%s]!", krcoordi.neterr);
        T_KRCoordiConnector *ptConn = NULL;
        
        /* find server or client with fd, then free it */
        ptConn = kr_hashtable_lookup(krcoordi.fdtable, &fd);
        if (ptConn == NULL) {
            kr_event_file_delete(el, fd, KR_EVENT_READABLE);
            close(fd);
            return;
        }
        
        /* handle it as connector offline */
        if (ptConn->role == KR_COORDI_SERVER) {
            stMsg.msgtype = KR_MSGTYPE_SVROFF;
            strcpy(stMsg.serverid, ptConn->id);
        } else {
            stMsg.msgtype = KR_MSGTYPE_CLIOFF;
            strcpy(stMsg.clientid, ptConn->id);
        }
        ptMsg = &stMsg;
    }
            
    /** handle message */
    ret = kr_coordi_handle_message(el, fd, ptMsg);
    if (ret != 0) {/* handle message failure */
        KR_LOG(KR_LOGERROR, "handle message [%d], [%s]error!", \
               ptMsg->msgtype, ptMsg->msgbuf);
        return;
    }
}
Exemple #10
0
static void kr_rebuild_index_del(T_KRIndex *krindex, T_KRRecord *krrecord)
{
    void *key = kr_get_field_value(krrecord, krindex->iIndexFieldId);

    T_KRList *pRecList = kr_hashtable_lookup(krindex->pHashTable, key);
    if (pRecList != NULL) kr_list_remove(pRecList, krrecord);
            
    if (kr_list_length(pRecList) != 0 ) {
        T_KRRecord *ptRecord = kr_list_value(kr_list_last(pRecList));
        T_KRIndex *newIndex = krindex;
        /* the dropped record and the last record of current list 
         * belongs to different tables 
         */
        if (krrecord->ptTable != ptRecord->ptTable) {
            newIndex = kr_get_table_index(ptRecord->ptTable, krindex->iIndexId);
        }
        key = kr_get_field_value(ptRecord, newIndex->iIndexFieldId);
        kr_hashtable_replace(newIndex->pHashTable, key, pRecList);
    } else {
        kr_list_destroy(pRecList);
        kr_hashtable_remove(krindex->pHashTable, key);
    }
}
Exemple #11
0
T_KRList* kr_get_record_list(T_KRIndex *krindex, void *key)
{
    T_KRList *pRecList = kr_hashtable_lookup(krindex->pHashTable, key);
    return pRecList;
}
Exemple #12
0
T_KRHDI *kr_hdi_lookup(T_KRHDITable *ptHdiTable, int id)
{
    long lHID = (long )id;
    return kr_hashtable_lookup(ptHdiTable->ptHDITable, &lHID);
}
Exemple #13
0
T_KRDDI *kr_ddi_lookup(T_KRDDITable *ptDdiTable, int id)
{
    long lDID = (long )id;
    return kr_hashtable_lookup(ptDdiTable->ptDDITable, &lDID);
}