From: Robert W. <wrw...@us...> - 2006-11-06 18:04:48
|
Update of /cvsroot/linuxisns/isnsNT/isnsserver/src In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv27583/src Modified Files: iSNSdb.c iSNSdereg.c iSNSesi.c iSNSquery.c iSNSreg.c iSNSresponse.c iSNSscn.c Log Message: convert idx hashin memory to database read and makewrite Index: iSNSquery.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSquery.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** iSNSquery.c 3 Nov 2006 20:22:29 -0000 1.3 --- iSNSquery.c 6 Nov 2006 18:04:38 -0000 1.4 *************** *** 91,101 **** extern dbStats iSNS_stats; - #define MAX_HASH 1024 - #define HASH_MARK 0x3FF - #define MAP_HASH(a) (a & HASH_MARK) - extern IDX_HASH_ENTRY *entityIdxHashTbl[MAX_HASH]; - extern IDX_HASH_ENTRY *iscsiIdxHashTbl[MAX_HASH]; - extern IDX_HASH_ENTRY *portalIdxHashTbl[MAX_HASH]; - static int SNSdbGetAttrNode (char **attr_indx, char **key_indx, ISNS_Msg_Descp * md, --- 91,94 ---- *************** *** 277,280 **** --- 270,274 ---- iSCSINodeIdxKeyFlag = -1; + DEBUG_0 (isns_db_debug &1,(GetAttrEntity)); memset (dlist_src, 0, MAX_DD_PER_LIST*sizeof(uint32_t)); *************** *** 371,375 **** /* Entity ID found in key */ key = (ISNS_Key *)(key_indx[entityKeyFlag]); ! ptr = (char *)ISNSGetDataFromIdxHashTable(entityIdxHashTbl, key->val.index); if (!ptr) --- 365,379 ---- /* Entity ID found in key */ key = (ISNS_Key *)(key_indx[entityKeyFlag]); ! DEBUG_1 (isns_db_debug &1,(Find Entity Index:%i),key->val.index); ! ISNS_Key read_key; ! read_key.tag = ENTITY_IDX_KEY; ! read_key.val.idx.index = key->val.index; ! read_key.val.idx.index_type = ENTITY_IDX_KEY; ! rval = ISNSdbRead(&read_key,&entry3); ! if (rval != SUCCESS) ! return rval; ! ! ptr = (char *)&entry3.data.entity_idx.id; ! DEBUG_1 (isns_db_debug &1,(entity_idx.id:%s),ptr); if (!ptr) *************** *** 512,516 **** { key = (ISNS_Key *)(key_indx[iSCSINodeIdxKeyFlag]); ! ptr = ISNSGetDataFromIdxHashTable(iscsiIdxHashTbl, key->val.index); if ( !ptr ) --- 516,528 ---- { key = (ISNS_Key *)(key_indx[iSCSINodeIdxKeyFlag]); ! ISNS_Key read_key; ! read_key.tag = ISCSI_IDX_KEY; ! read_key.val.idx.index = key->val.index; ! read_key.val.idx.index_type = ISCSI_IDX_KEY; ! rval = ISNSdbRead(&read_key,&entry3); ! if (rval != SUCCESS) ! return rval; ! ! ptr = &entry3.data.iscsi_idx; if ( !ptr ) *************** *** 1273,1277 **** attr = (ISNS_Attr *) key_indx[portalIdxKeyFlag]; ! ptr = ISNSGetDataFromIdxHashTable(portalIdxHashTbl, attr->val.index); if (!ptr) { --- 1285,1298 ---- attr = (ISNS_Attr *) key_indx[portalIdxKeyFlag]; ! ISNS_Key idx_key; ! idx_key.tag = PORTAL_IDX_KEY; ! idx_key.val.idx.index = attr->val.index; ! idx_key.val.idx.index_type = PORTAL_IDX_KEY; ! rval = ISNSdbRead(&idx_key,&entry3); ! if (rval != SUCCESS) ! return rval; ! ! ptr = &entry3.data.portal_idx; ! if (!ptr) { *************** *** 1987,1991 **** void *ptr; key = (ISNS_Key *)(key_indx[nodeIdxKeyIndex]); ! ptr = ISNSGetDataFromIdxHashTable(iscsiIdxHashTbl, key->val.index); if ( !ptr ) --- 2008,2020 ---- void *ptr; key = (ISNS_Key *)(key_indx[nodeIdxKeyIndex]); ! ISNS_Key idx_key; ! idx_key.tag = ISCSI_IDX_KEY; ! idx_key.val.idx.index = key->val.index; ! idx_key.val.idx.index_type = ISCSI_IDX_KEY; ! rval = ISNSdbRead(&idx_key,&entry3); ! if (rval != SUCCESS) ! return rval; ! ! ptr = &entry3.data.iscsi_idx; if ( !ptr ) *************** *** 2456,2460 **** if (key->len && key->val.index) { ! ptr = ISNSGetDataFromIdxHashTable(iscsiIdxHashTbl, key->val.index); if (!ptr) { --- 2485,2497 ---- if (key->len && key->val.index) { ! ISNS_Key read_key; ! read_key.tag = ISCSI_IDX_KEY; ! read_key.val.idx.index = key->val.index; ! read_key.val.idx.index_type = ISCSI_IDX_KEY; ! rval = ISNSdbRead(&read_key,&entry3); ! if (rval != SUCCESS) ! return rval; ! ! ptr = &entry3.data.iscsi_idx; if (!ptr) { *************** *** 2536,2540 **** if (key->len && key->val.index) { ! ptr = ISNSGetDataFromIdxHashTable(entityIdxHashTbl, key->val.index); if (!ptr) { --- 2573,2585 ---- if (key->len && key->val.index) { ! ISNS_Key read_key; ! read_key.tag = ENTITY_IDX_KEY; ! read_key.val.idx.index = key->val.index; ! read_key.val.idx.index_type = ENTITY_IDX_KEY; ! rval = ISNSdbRead(&read_key,&entry3); ! if (rval != SUCCESS) ! return rval; ! ! ptr = &entry3.data.entity_idx; if (!ptr) { *************** *** 2649,2653 **** if (key->len && key->val.index) { ! ptr = ISNSGetDataFromIdxHashTable(portalIdxHashTbl, key->val.index); if (!ptr) { --- 2694,2706 ---- if (key->len && key->val.index) { ! ISNS_Key read_key; ! read_key.tag = PORTAL_IDX_KEY; ! read_key.val.idx.index = key->val.index; ! read_key.val.idx.index_type = PORTAL_IDX_KEY; ! rval = ISNSdbRead(&read_key,&entry3); ! if (rval != SUCCESS) ! return rval; ! ! ptr = &entry3.data.portal_idx; if (!ptr) { *************** *** 2818,2821 **** --- 2871,2875 ---- SOIP_Entity *p_entity; PORTAL_LIST_ENTRY *p_portalListEntry; + int rval; ISNSParseMsg( &p_md->msg, attr_indx, key_indx, (char **) &src_attr ); *************** *** 2830,2834 **** /* Entity ID found in key */ p_attr = (ISNS_Attr *)(key_indx[entityKeyIndex]); ! ptr = (char *)ISNSGetDataFromIdxHashTable(entityIdxHashTbl, p_attr->val.index); if (!ptr) { --- 2884,2896 ---- /* Entity ID found in key */ p_attr = (ISNS_Attr *)(key_indx[entityKeyIndex]); ! ISNS_Key read_key; ! read_key.tag = ENTITY_IDX_KEY; ! read_key.val.idx.index = p_attr->val.index; ! read_key.val.idx.index_type = ENTITY_IDX_KEY; ! rval = ISNSdbRead(&read_key,&entry3); ! if (rval != SUCCESS) ! return rval; ! ! ptr = &entry3.data.entity_idx; if (!ptr) { Index: iSNSresponse.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSresponse.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** iSNSresponse.c 3 Nov 2006 20:22:29 -0000 1.2 --- iSNSresponse.c 6 Nov 2006 18:04:38 -0000 1.3 *************** *** 82,93 **** dbStats iSNS_stats; - #define MAX_HASH 1024 - #define HASH_MARK 0x3FF - #define MAP_HASH(a) (a & HASH_MARK) - IDX_HASH_ENTRY *entityIdxHashTbl[MAX_HASH]; - IDX_HASH_ENTRY *iscsiIdxHashTbl[MAX_HASH]; - IDX_HASH_ENTRY *portalIdxHashTbl[MAX_HASH]; - - /********************************************************************* _ISNSAppendAttr --- 82,85 ---- Index: iSNSesi.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSesi.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** iSNSesi.c 3 Nov 2006 20:22:29 -0000 1.2 --- iSNSesi.c 6 Nov 2006 18:04:38 -0000 1.3 *************** *** 79,89 **** ISNS_Msg_Descp *p_rspMd; - #define MAX_HASH 1024 - #define HASH_MARK 0x3FF - #define MAP_HASH(a) (a & HASH_MARK) - IDX_HASH_ENTRY *entityIdxHashTbl[MAX_HASH]; - IDX_HASH_ENTRY *iscsiIdxHashTbl[MAX_HASH]; - IDX_HASH_ENTRY *portalIdxHashTbl[MAX_HASH]; - /********************************************************************* Sends out one or more ESI(s). --- 79,82 ---- Index: iSNSdereg.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSdereg.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** iSNSdereg.c 3 Nov 2006 20:22:29 -0000 1.3 --- iSNSdereg.c 6 Nov 2006 18:04:38 -0000 1.4 *************** *** 93,104 **** extern dbStats iSNS_stats; - #define MAX_HASH 1024 - #define HASH_MARK 0x3FF - #define MAP_HASH(a) (a & HASH_MARK) - extern IDX_HASH_ENTRY *entityIdxHashTbl[MAX_HASH]; - extern IDX_HASH_ENTRY *iscsiIdxHashTbl[MAX_HASH]; - extern IDX_HASH_ENTRY *portalIdxHashTbl[MAX_HASH]; - - /********************************************************************* _SNSdbRemoveAttr --- 93,96 ---- *************** *** 724,728 **** } ! ISNSRemoveFromIdxHashTable(entityIdxHashTbl, p_entity->entity_index); /* Remove Self */ --- 716,724 ---- } ! ISNS_Key remove_key; ! remove_key.tag = ENTITY_IDX_KEY; ! remove_key.val.idx.index = p_entity->entity_index; ! remove_key.val.idx.index_type = ENTITY_IDX_KEY; ! ISNSdbDelete(&remove_key); /* Remove Self */ *************** *** 1311,1315 **** /* Delete the iSCSI Node */ ! ISNSRemoveFromIdxHashTable( iscsiIdxHashTbl, p_node->iscsi_index ); iSNS_stats.num_iscsi--; RemoveCert (&p_node->ptr_cert); --- 1307,1315 ---- /* Delete the iSCSI Node */ ! ISNS_Key remove_key; ! remove_key.tag = ISCSI_IDX_KEY; ! remove_key.val.idx.index = p_node->iscsi_index; ! remove_key.val.idx.index_type = ISCSI_IDX_KEY; ! ISNSdbDelete(&remove_key); iSNS_stats.num_iscsi--; RemoveCert (&p_node->ptr_cert); *************** *** 1481,1485 **** iSNS_stats.num_portals--; ! ISNSRemoveFromIdxHashTable(portalIdxHashTbl, p_portal->portal_index); pnode2 = NULL; --- 1481,1489 ---- iSNS_stats.num_portals--; ! ISNS_Key remove_key; ! remove_key.tag = PORTAL_IDX_KEY; ! remove_key.val.idx.index = p_portal->portal_index; ! remove_key.val.idx.index_type = PORTAL_IDX_KEY; ! ISNSdbDelete(&remove_key); pnode2 = NULL; Index: iSNSreg.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSreg.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** iSNSreg.c 3 Nov 2006 20:22:29 -0000 1.3 --- iSNSreg.c 6 Nov 2006 18:04:38 -0000 1.4 *************** *** 88,98 **** extern dbStats iSNS_stats; - #define MAX_HASH 1024 - #define HASH_MARK 0x3FF - #define MAP_HASH(a) (a & HASH_MARK) - extern IDX_HASH_ENTRY *entityIdxHashTbl[MAX_HASH]; - extern IDX_HASH_ENTRY *iscsiIdxHashTbl[MAX_HASH]; - extern IDX_HASH_ENTRY *portalIdxHashTbl[MAX_HASH]; - /********************************************************************* _SNSdbAddAttr --- 88,91 ---- *************** *** 422,427 **** DEBUG_1 (isns_db_debug & 1, (Obtain Portal ip_port:%i),p_portal->ip_port); p_portal->portal_index = ISNSGetNewPortalIdx(); ! ISNSAddToIdxHashTable( portalIdxHashTbl, p_portal->portal_index, ! &db_portal, sizeof(db_portal) ); InitList(&p_portal->entity_list); /* Update Entity's portal Bitmap */ --- 415,430 ---- DEBUG_1 (isns_db_debug & 1, (Obtain Portal ip_port:%i),p_portal->ip_port); p_portal->portal_index = ISNSGetNewPortalIdx(); ! ! ISNS_Key idx_key; ! idx_key.tag = PORTAL_IDX_KEY; ! idx_key.val.idx.index_type = PORTAL_IDX_KEY; ! idx_key.val.idx.index = p_portal->portal_index; ! SOIP_DB_Portal *p_idx; ! memset (&entry3, 0, sizeof(SOIP_DB_Entry)); ! entry3.data_type = PORTAL_IDX_KEY; ! p_idx = &entry3.data.portal_idx; ! memcpy(p_idx,&db_portal,sizeof(SOIP_DB_Portal)); ! rval = ISNSdbWrite(&idx_key,entry3); ! InitList(&p_portal->entity_list); /* Update Entity's portal Bitmap */ *************** *** 1414,1441 **** if ( rval != SUCCESS) { ! /* Create New INDEX */ ! new_member.node_idx = ISNSGetIdxFromIdxHashTableByData(iscsiIdxHashTbl, ptr, strlen(ptr)); ! if ( index && new_member.node_idx && index != new_member.node_idx) ! { ! DEBUG_0(isns_db_debug & 1, (Warning Index ID mismatch)); ! } ! else if ( index ) ! { ! new_member.node_idx = index; ! } ! if (!new_member.node_idx) ! { ! new_member.node_idx = ISNSGetNewISCSIIdx(); ! ISNSAddToIdxHashTable( iscsiIdxHashTbl, new_member.node_idx, ! ptr, strlen(ptr)); ! } } - else if (entry2.data_type != ISCSI_ID_KEY) - { - DEBUG_2 (isns_db_debug & 1, (Database key mismatch %u %u), - entry2.data_type, ISCSI_ID_KEY); - return ( ISNS_UNKNOWN_ERR ); - } else { --- 1417,1435 ---- if ( rval != SUCCESS) { ! new_member.node_idx = index; if (!new_member.node_idx) ! ! new_member.node_idx = ISNSGetNewISCSIIdx(); ! ISNS_Key idx_key; ! idx_key.tag = ISCSI_IDX_KEY; ! idx_key.val.idx.index_type = ISCSI_IDX_KEY; ! idx_key.val.idx.index = new_member.node_idx; ! SOIP_ISCSI_Node_Id *p_idx; ! memset (&entry3, 0, sizeof(SOIP_ISCSI_Node_Id)); ! entry3.data_type = ISCSI_IDX_KEY; ! p_idx = &entry3.data.iscsi_idx; ! memcpy(p_idx,&ptr,strlen(ptr)); ! rval = ISNSdbWrite(&idx_key,entry3); } else { *************** *** 1558,1563 **** p_entity->entity_index = ISNSGetNewEntityIdx(); ! ISNSAddToIdxHashTable( entityIdxHashTbl, p_entity->entity_index, ! db_entity_id.id, PAD4(strlen(db_entity_id.id))); strncpy (p_entity->eid.id, db_entity_id.id, sizeof(p_entity->eid.id) ); --- 1552,1566 ---- p_entity->entity_index = ISNSGetNewEntityIdx(); ! ! ISNS_Key idx_key; ! idx_key.tag = ENTITY_IDX_KEY; ! idx_key.val.idx.index_type = ENTITY_IDX_KEY; ! idx_key.val.idx.index = p_entity->entity_index; ! SOIP_Entity_Id *p_idx; ! memset (&entry3, 0, sizeof(SOIP_Entity_Id)); ! entry3.data_type = ENTITY_IDX_KEY; ! p_idx = &entry3.data.entity_idx; ! memcpy(p_idx,&db_entity_id.id,sizeof(SOIP_Entity_Id)); ! rval = ISNSdbWrite(&idx_key,entry3); strncpy (p_entity->eid.id, db_entity_id.id, sizeof(p_entity->eid.id) ); *************** *** 2336,2345 **** strncpy ( p_node->id.v, db_node_name.v, sizeof(p_node->id.v) ); p_node->iscsi_id_len = PAD4(strlen(p_node->id.v)); ! if (!(p_node->iscsi_index = ISNSGetIdxFromIdxHashTableByData( iscsiIdxHashTbl, p_node->id.v, strlen(p_node->id.v))) ) ! { ! p_node->iscsi_index = ISNSGetNewISCSIIdx(); ! ISNSAddToIdxHashTable( iscsiIdxHashTbl, p_node->iscsi_index, ! p_node->id.v, p_node->iscsi_id_len); ! } strncpy ( p_node->entity_id.id, db_entity.id, sizeof(p_node->entity_id.id) ); InitList( &p_node->dd_id_list ); --- 2339,2354 ---- strncpy ( p_node->id.v, db_node_name.v, sizeof(p_node->id.v) ); p_node->iscsi_id_len = PAD4(strlen(p_node->id.v)); ! ! p_node->iscsi_index = ISNSGetNewISCSIIdx(); ! ISNS_Key idx_key; ! idx_key.tag = ISCSI_IDX_KEY; ! idx_key.val.idx.index_type = ISCSI_IDX_KEY; ! idx_key.val.idx.index = p_node->iscsi_index; ! SOIP_ISCSI_Node_Id *p_idx; ! memset (&entry3, 0, sizeof(SOIP_ISCSI_Node_Id)); ! entry3.data_type = ISCSI_IDX_KEY; ! p_idx = &entry3.data.iscsi_idx; ! memcpy(p_idx,&p_node->id.v,sizeof(SOIP_ISCSI_Node_Id)); ! rval = ISNSdbWrite(&idx_key,entry3); strncpy ( p_node->entity_id.id, db_entity.id, sizeof(p_node->entity_id.id) ); InitList( &p_node->dd_id_list ); Index: iSNSdb.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSdb.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** iSNSdb.c 3 Nov 2006 20:22:29 -0000 1.10 --- iSNSdb.c 6 Nov 2006 18:04:38 -0000 1.11 *************** *** 87,97 **** dbStats iSNS_stats; - #define MAX_HASH 1024 - #define HASH_MARK 0x3FF - #define MAP_HASH(a) (a & HASH_MARK) - IDX_HASH_ENTRY *entityIdxHashTbl[MAX_HASH]; - IDX_HASH_ENTRY *iscsiIdxHashTbl[MAX_HASH]; - IDX_HASH_ENTRY *portalIdxHashTbl[MAX_HASH]; - /* * Local function prototypes --- 87,90 ---- *************** *** 101,112 **** ISNSExceptionHdlr (void); - int - ISNSdbRead (ISNS_Key *key, SOIP_DB_Entry *entry); - - int - ISNSdbWrite (ISNS_Key *key, SOIP_DB_Entry entry); - - int - ISNSdbDelete (ISNS_Key *key); /********************************************************************* --- 94,97 ---- *************** *** 209,212 **** --- 194,214 ---- return (ISNS_UNKNOWN_ERR); break; + case ENTITY_IDX_KEY: + case ISCSI_IDX_KEY: + case PORTAL_IDX_KEY: + k.dptr = (char *)&key->val; + k.dsize = sizeof(SOIP_IDX_Key); + d = ndb_fetch_sns (key->tag, k, (char *)entry); + if (d.dptr == NULL) + { + DEBUG_1 (isns_db_debug & 1, (read failed index:%i),(int)&key->val); + return (ISNS_NO_SUCH_ENTRY_ERR); + } + if (entry->data_type != key->tag) + return (ISNS_UNKNOWN_ERR); + break; + default: + return ERROR; + break; } return SUCCESS; *************** *** 283,286 **** --- 285,297 ---- DEBUG_0 (isns_db_debug &1,PORTAL Name Write failed); break; + case ENTITY_IDX_KEY: + case ISCSI_IDX_KEY: + case PORTAL_IDX_KEY: + k.dptr = (char *)&key->val; + k.dsize = sizeof(SOIP_IDX_Key); + rc = ndb_store (dbfp, k, d, 0); + if (rc == ERROR) + DEBUG_0 (isns_db_debug &1,Index Write failed); + break; } return SUCCESS; *************** *** 352,521 **** DEBUG_0 (isns_db_debug &1,PORTAL Name Delete failed); break; } return SUCCESS; } - - /********************************************************************* - Adds an index to the hash table. - *********************************************************************/ - void - ISNSAddToIdxHashTable(IDX_HASH_ENTRY **table, uint32_t index, void *p_data, int size) - { - int key; - IDX_HASH_ENTRY *hashEntry; - - key = MAP_HASH(index); - hashEntry = (IDX_HASH_ENTRY *) ISNSAllocBuffer(sizeof(IDX_HASH_ENTRY)); - memset(hashEntry, 0, sizeof(IDX_HASH_ENTRY)); - - hashEntry->index = index; - memcpy(hashEntry->buffer, p_data, size>HASH_MAX_BUFFER?HASH_MAX_BUFFER:size); - - /* Always insert at the begining. */ - hashEntry->next = table[key]; - table[key] = hashEntry; - } - - /********************************************************************* - Removes an index from a hash table. - *********************************************************************/ - void - ISNSRemoveFromIdxHashTable(IDX_HASH_ENTRY **table, uint32_t index) - { - int found; - int key; - IDX_HASH_ENTRY *curEntry, *prevEntry; - - key = MAP_HASH(index); - - /* Find Entry */ - found = FALSE; - curEntry = table[key]; - prevEntry = NULL; - while ( curEntry ) - { - if (curEntry->index == index) - { - found = TRUE; - break; - } - - prevEntry = curEntry; - curEntry = curEntry->next; - } - - if ( found ) - { - if ( prevEntry ) - prevEntry->next = curEntry->next; - else - table[key] = curEntry->next; - - ISNSFreeBuffer((char *)curEntry); - } - } - /******************************************************************** - Gets the data from a hash table given an index. - ********************************************************************/ - void * - ISNSGetDataFromIdxHashTable(IDX_HASH_ENTRY **table, uint32_t index) - { - int key; - IDX_HASH_ENTRY *curEntry; - - key = MAP_HASH( index ); - - /* Find Entry */ - curEntry = table[key]; - while ( curEntry ) - { - if (curEntry->index == index) - { - return (curEntry->buffer); - } - - curEntry = curEntry->next; - } - - return ( NULL ); - } - - /******************************************************************** - Gets an index given a data ptr. - ********************************************************************/ - uint32_t - ISNSGetIdxFromIdxHashTableByData(IDX_HASH_ENTRY **table, void *ptr, int len) - { - int key; - IDX_HASH_ENTRY *curEntry; - - for ( key = 0; key < MAX_HASH; key++ ) - { - /* Find Entry */ - curEntry = table[ key ]; - while ( curEntry ) - { - if (!memcmp(curEntry->buffer, ptr, len)) - { - return ( curEntry->index ); - } - - curEntry = curEntry->next; - } - } - - return ( 0 ); - } - - /******************************************************************** - Dumps the contents of all the index hash table. - ********************************************************************/ - void - ISNSDumpIdxHashTable( void ) - { - int i; - IDX_HASH_ENTRY *p_entry; - SOIP_DB_Portal *p_db_portal; - - printf("Dumping Index Hash Table [BIN:INDEX]\n"); - /* Dump Entity Hash Table */ - printf("Entity:\n"); - for (i = 0; i<MAX_HASH; i++) - { - if (!entityIdxHashTbl[i]) - continue; - p_entry = entityIdxHashTbl[i]; - - printf("[%d:%u] Entity ID = %s\n", i, p_entry->index, p_entry->buffer); - } - - /* Dump iSCSI Hash Table */ - printf("iSCSI:\n"); - for (i = 0; i<MAX_HASH; i++) - { - if (!iscsiIdxHashTbl[i]) - continue; - p_entry = iscsiIdxHashTbl[i]; - - printf("[%d:%u] Entity ID = %s\n", i, p_entry->index, p_entry->buffer); - } - - /* Dump Portal Hash Table */ - printf("Portal:\n"); - for (i = 0; i<MAX_HASH; i++) - { - if (!portalIdxHashTbl[i]) - continue; - p_entry = portalIdxHashTbl[i]; - p_db_portal = (SOIP_DB_Portal *)p_entry->buffer; - #if 0 - printf( "[%d:%lu] IP = %s, Port = %lu\n", i, p_entry->index, - inet_ntoa(p_db_portal->ip_addr.v+12), - p_db_portal->ip_port); - #endif - } - } - /********************************************************************* Returns a new entity Index. --- 363,379 ---- DEBUG_0 (isns_db_debug &1,PORTAL Name Delete failed); break; + case ENTITY_IDX_KEY: + case ISCSI_IDX_KEY: + case PORTAL_IDX_KEY: + k.dptr = (char *)&key->val; + k.dsize = sizeof(SOIP_IDX_Key); + rc = ndb_delete (key->tag, k); + if (rc == ERROR) + DEBUG_0 (isns_db_debug &1, Index Delete failed); + break; } return SUCCESS; } /********************************************************************* Returns a new entity Index. *************** *** 535,545 **** { static uint32_t indx = 1; ! ! while (ISNSGetDataFromIdxHashTable(iscsiIdxHashTbl, indx)) ! { ! indx++; ! } ! ! return ( indx ); } --- 393,397 ---- { static uint32_t indx = 1; ! return ( indx++ ); } *************** *** 650,655 **** } - - /********************************************************************* Gets the next object after the passed in key. --- 502,505 ---- *************** *** 835,1159 **** } - #ifndef SNS_LINUX - - #define FILE_MEMORY_SIZE (1024*10) - - typedef enum { - - DDS_ID_FILE_REC=1, - DDS_SYM_FILE_REC, - DDS_MEMBER_FILE_REC, - DDS_STATUS_FILE_REC, - DD_ID_FILE_REC, - DD_SYM_FILE_REC, - DD_MEMBER_DDS_FILE_REC, - DD_MEMBER_NODE_TYPE_FILE_REC, - DD_MEMBER_NODE_NAME_FILE_REC, - DD_MEMBER_STATUS_FILE_REC - - } ISNS_FILE_REC; - - /********************************************************************* - _ISNSdbSave - - Saves the DDS and DD information into the database. - *********************************************************************/ - int - ISNSdbSave(ISNS_Msg *p_msg) - { - ISNS_Key key = { 0 }; - void *p_mem; - int total_size = 0; - SOIP_Dd *p_dd; - SOIP_Dds *p_dds; - ISNS_LIST_NODE *pnode; - SOIP_Dd_Member *p_member; - - p_mem = malloc( FILE_MEMORY_SIZE ); - memset ( p_mem, 0, FILE_MEMORY_SIZE ); - - /* retrieve all DDS */ - /* Get first entity id */ - memset(&key, 0, sizeof(key)); - key.tag = ISNS_DDS_ID; - key.len = DDS_KEY_SIZE; - - while ( SNSdbGetNextOfKey ( &key ) == SUCCESS ) - { - if ( ISNS_NO_ERR != SNSdbFetchDDS ( key.val.dd_key.id, &p_dds, &entry ) ) - { - free(p_mem); - printf("Fatal error.\n"); - return (ERROR); - } - - ISNSAppendTLV( p_mem, &total_size, DDS_ID_FILE_REC, - ISNS_DDS_ID_SIZE, NULL, p_dds->id ); - - ISNSAppendTLV( p_mem, &total_size, DDS_SYM_FILE_REC, - PAD4(strlen(p_dds->sym_name)), p_dds->sym_name, 0 ); - - ISNSAppendTLV( p_mem, &total_size, DDS_STATUS_FILE_REC, - ISNS_DDS_STATUS_SIZE, NULL, p_dds->status ); - - pnode=NULL; - while ((pnode=GetNextNode(&p_dds->dd_list, pnode))) - { - ISNSAppendTLV(p_mem, &total_size, DDS_MEMBER_FILE_REC, - ISNS_DD_ID_SIZE, NULL, *(uint32_t *)GetNodeData(pnode)); - } - - } - - /* retrieve all DD */ - - /* Get first entity id */ - memset(&key, 0, sizeof(key)); - key.tag = ISNS_DD_ID; - key.len = DD_KEY_SIZE; - - while (SNSdbGetNextOfKey ( &key ) == SUCCESS) - { - if (ISNS_NO_ERR != SNSdbFetchDD( key.val.dd_key.id, &p_dd, &entry )) - { - printf("Fatal error.\n"); - free(p_mem); - } - - ISNSAppendTLV( p_mem, &total_size, DD_ID_FILE_REC, - ISNS_DDS_ID_SIZE, NULL, p_dd->id ); - - ISNSAppendTLV( p_mem, &total_size, DD_SYM_FILE_REC, - PAD4(strlen(p_dd->sym_name)), p_dd->sym_name, 0 ); - - pnode=NULL; - while ((pnode=GetNextNode(&p_dd->dds_list, pnode))) - { - ISNSAppendTLV( p_mem, &total_size, DD_MEMBER_DDS_FILE_REC, - ISNS_DD_ID_SIZE, NULL, *(uint32_t *)GetNodeData(pnode) ); - } - - pnode=NULL; - while ((pnode=GetNextNode(&p_dd->member_list, pnode))) - { - p_member=(SOIP_Dd_Member *)GetNodeData(pnode); - - ISNSAppendTLV( p_mem, &total_size, DD_MEMBER_NODE_TYPE_FILE_REC, - 4, NULL, p_member->type ); - - ISNSAppendTLV( p_mem, &total_size, DD_MEMBER_NODE_NAME_FILE_REC, - PAD4 (strlen (p_member->node_id)), p_member->node_id, 0 ); - - } - - } - - /* Write memory to file */ - NTWriteToFile( total_size, p_mem ); - free( p_mem ); - #if 0 - p_msg->hdr.msg_len = 0; - ISNSAppendKey(p_msg, ISNS_COMPANY_OUI, ISNS_COMPANY_OUI_SIZE, NULL, NISHAN_OUI); - #endif - return (SUCCESS); - } - - /********************************************************************* - _ISNSdbLoad - - Loads the DD and DDS information from the database. - *********************************************************************/ - - int - ISNSdbLoad(void) - { - #if 0 - int ii; - #endif - void *p_mem; - int total_size=0; - ISNS_Attr *attr; - int parsed_size=0; - int firstTimeFlag; - int recType; - SOIP_Dd *p_dd; - SOIP_Dds *p_dds; - SOIP_DD_Key dd_key; - SOIP_DD_Key dds_key; - /*SOIP_Dd_Member *p_member;*/ - - p_mem = malloc( FILE_MEMORY_SIZE ); - p_dd = (SOIP_Dd *)&entry.data; - p_dds = (SOIP_Dds *)&entry.data; - - /* Read file */ - if (SUCCESS != NTReadFromFile( &total_size, p_mem )) - return ERROR; - - attr = (ISNS_Attr *)p_mem; - - /* Let the parsing begin */ - firstTimeFlag = TRUE; - while ( (char *)attr<(char *)p_mem+total_size ) - { - switch (attr->tag) - { - case DDS_ID_FILE_REC: - if (!firstTimeFlag) - { - if (recType == DD_ID_FILE_REC) - { - /* Save DD record */ - entry.data_type = ISNS_DD_ID; - ISNS_Key key; - key.tag = DD_ID_KEY; - key.val.dd_id = dd_key.id; - ISNSdbWrite(&key,entry); - } - else if (recType == DDS_ID_FILE_REC) - { - /* Save DDS record */ - entry.data_type = ISNS_DDS_ID; - ISNS_Key key; - key.tag = DDS_ID_KEY; - key.val.dd_id = dds_key.id; - ISNSdbWrite(&key,entry); - } - else - { - DEBUG_1(isns_db_debug & 1, (Error invalid record type %d), recType); - } - } - firstTimeFlag = FALSE; - recType = DDS_ID_FILE_REC; - memset(&entry, 0, sizeof(entry)); - entry.data_type = ISNS_DDS_ID; - p_dds->id = *(uint32_t *)&attr->val; - dds_key.id = p_dds->id; - break; - - case DDS_SYM_FILE_REC: - strcpy( p_dds->sym_name, (char *)&attr->val ); - break; - case DDS_STATUS_FILE_REC: - p_dds->status = *(uint32_t *)&attr->val; - break; - case DDS_MEMBER_FILE_REC: - #if 0 - for (ii = 0; ii < MAX_DD_PER_DDS; ii++) - { - if (p_dds->dd_list[ ii ] == 0) - break; - } - - p_dds->dd_list[ ii ] = *(uint32_t *)&attr->val; - #endif - break; - case DD_ID_FILE_REC: - if (!firstTimeFlag) - { - if (recType == DD_ID_FILE_REC) - { - /* Save DD record */ - entry.data_type = ISNS_DD_ID; - ISNS_Key key; - key.tag = DD_ID_KEY; - key.val.dd_id = dd_key.id; - ISNSdbWrite(&key,entry); - } - else if (recType == DDS_ID_FILE_REC) - { - /* Save DDS record */ - entry.data_type = ISNS_DDS_ID; - ISNS_Key key; - key.tag = DDS_ID_KEY; - key.val.dds_id = dds_key.id; - ISNSdbWrite(&key,entry); - } - else - { - DEBUG_1(isns_db_debug & 1, (Error invalid record type %d), recType); - } - firstTimeFlag = FALSE; - recType = DD_ID_FILE_REC; - memset(&entry, 0, sizeof(entry)); - entry.data_type = ISNS_DD_ID; - p_dd->id = *(uint32_t *)&attr->val; - dd_key.id = p_dd->id; - InitList( &p_dd->dds_list ); - InitList( &p_dd->member_list ); - - } - break; - case DD_SYM_FILE_REC: - strcpy( p_dd->sym_name, (char *)&attr->val ); - break; - case DD_MEMBER_DDS_FILE_REC: - #if 0 - for ( ii = 0; ii < MAX_DDS_PER_DD; ii++) - { - if (p_dd->dds_list[ ii ] == 0) - break; - } - p_dd->dds_list [ ii ] = *(uint32_t *)&attr->val; - #endif - break; - case DD_MEMBER_NODE_TYPE_FILE_REC: - #if 0 - for ( ii = 0; ii < MAX_DDS_PER_DD; ii++) - { - if (p_dd->member[ ii ].type == 0) - break; - } - p_dd->member[ ii ].type = *(uint32_t *)&attr->val; - #endif - break; - case DD_MEMBER_NODE_NAME_FILE_REC: - #if 0 - strcpy(p_dd->member[ ii ].node_id, (char *)&attr->val); - #endif - break; - #if 0 - case DD_MEMBER_STATUS_FILE_REC: - #if 0 - p_dd->member[ ii ].status = *(uint32_t *)&attr->val; - #endif - break; - #endif - default: - DEBUG_0(isns_db_debug & 1, (Error: Parsing data file).); - break; - } /* End Switch */ - - attr=(ISNS_Attr *)((char *)attr+attr->len+ISNS_SIZEOF_TAG); - } - - /* One last save */ - if (!firstTimeFlag) - { - if (recType == DD_ID_FILE_REC) - { - /* Save DD record */ - entry.data_type = ISNS_DD_ID; - key.tag = DD_ID_KEY; - key.val.dd_id = dd_key.id; - ISNSdbWrite(&key,entry); - } - else if (recType == DDS_ID_FILE_REC) - { - /* Save DDS record */ - entry.data_type = ISNS_DDS_ID; - ISNS_Key key; - key.tag = DDS_ID_KEY; - key.val.dds_id = dds_key.id; - ISNSdbWrite(&key,entry); - } - else - { - DEBUG_1(isns_db_debug & 1, (Error invalid record type %d), recType); - } - } - free(p_mem); - return (SUCCESS); - } - #endif --- 685,686 ---- Index: iSNSscn.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSscn.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** iSNSscn.c 3 Nov 2006 20:22:29 -0000 1.2 --- iSNSscn.c 6 Nov 2006 18:04:38 -0000 1.3 *************** *** 88,98 **** dbStats iSNS_stats; - #define MAX_HASH 1024 - #define HASH_MARK 0x3FF - #define MAP_HASH(a) (a & HASH_MARK) - IDX_HASH_ENTRY *entityIdxHashTbl[MAX_HASH]; - IDX_HASH_ENTRY *iscsiIdxHashTbl[MAX_HASH]; - IDX_HASH_ENTRY *portalIdxHashTbl[MAX_HASH]; - /* * Local function prototypes --- 88,91 ---- |