[openib-general] RE: [PATCH] Opensm - osmt_service.c fixes
Yael Kalka
yael at mellanox.co.il
Wed Feb 15 02:32:28 PST 2006
Hi Hal,
I am re-sending the patch with another fix. Please ignore this patch.
Thanks,
Yael
-----Original Message-----
From: Yael Kalka
Sent: Wednesday, February 15, 2006 12:07 PM
To: halr at voltaire.com
Cc: openib-general at openib.org; Eitan Zahavi; Yael Kalka
Subject: [PATCH] Opensm - osmt_service.c fixes
Hi Hal,
The following patch fixes some problems in osmt_service.c flow,
along with cosmetic cleanups of the code.
Thanks,
Yael
Signed-off-by: Yael Kalka <yael at mellanox.co.il>
Index: osmtest/osmt_service.c
===================================================================
--- osmtest/osmt_service.c (revision 5403)
+++ osmtest/osmt_service.c (working copy)
@@ -80,7 +80,7 @@ osmt_register_service( IN osmtest_t * co
osm_log( &p_osmt->log, OSM_LOG_INFO,
"osmt_register_service: "
- "Registering Service: name:%s id:0x%" PRIx64 ".\n",
+ "Registering service: name:%s id:0x%" PRIx64 "\n",
service_name, cl_ntoh64(service_id));
cl_memclr( &req, sizeof( req ) );
@@ -140,8 +140,8 @@ osmt_register_service( IN osmtest_t * co
if( status != IB_SUCCESS )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_register_service: ERR 0303: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_register_service: ERR 4A01: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
goto Exit;
}
@@ -150,14 +150,14 @@ osmt_register_service( IN osmtest_t * co
if( status != IB_SUCCESS )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_register_service: ERR 0364: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_register_service: ERR 4A02: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
if( status == IB_REMOTE_ERROR )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
"osmt_register_service: "
- "Remote error = %s.\n",
+ "Remote error = %s\n",
ib_get_mad_status_str( osm_madw_get_mad_ptr
( context.result.
p_result_madw ) ) );
@@ -195,7 +195,7 @@ osmt_register_service_with_full_key ( IN
osm_log( &p_osmt->log, OSM_LOG_INFO,
"osmt_register_service_with_full_key: "
- "Registering Service: name:%s id:0x%" PRIx64 ".\n",
+ "Registering service: name:%s id:0x%" PRIx64 "\n",
service_name, cl_ntoh64(service_id));
cl_memclr( &req, sizeof( req ) );
@@ -256,8 +256,8 @@ osmt_register_service_with_full_key ( IN
if( status != IB_SUCCESS )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_register_service_with_full_key: ERR 0303: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_register_service_with_full_key: ERR 4A03: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
goto Exit;
}
@@ -280,7 +280,7 @@ osmt_register_service_with_full_key ( IN
status = IB_REMOTE_ERROR;
osm_log( &p_osmt->log, OSM_LOG_ERROR,
"osmt_register_service_with_full_key:"
- "Data mismatch in service_key.\n"
+ "Data mismatch in service_key\n"
);
goto Exit;
}
@@ -288,14 +288,14 @@ osmt_register_service_with_full_key ( IN
if( status != IB_SUCCESS )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_register_service_with_full_key: ERR 0364: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_register_service_with_full_key: ERR 4A04: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
if( status == IB_REMOTE_ERROR )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
"osmt_register_service_with_full_key: "
- "Remote error = %s.\n",
+ "Remote error = %s\n",
ib_get_mad_status_str( osm_madw_get_mad_ptr
( context.result.
p_result_madw ) ) );
@@ -337,7 +337,7 @@ osmt_register_service_with_data( IN osmt
osm_log( &p_osmt->log, OSM_LOG_INFO,
"osmt_register_service_with_data: "
- "Registering Service: name:%s id:0x%" PRIx64 ".\n",
+ "Registering service: name:%s id:0x%" PRIx64 "\n",
service_name, cl_ntoh64(service_id));
cl_memclr( &req, sizeof( req ) );
@@ -426,8 +426,8 @@ osmt_register_service_with_data( IN osmt
if( status != IB_SUCCESS )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_register_service_with_data: ERR 0303: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_register_service_with_data: ERR 4A05: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
goto Exit;
}
@@ -436,14 +436,14 @@ osmt_register_service_with_data( IN osmt
if( status != IB_SUCCESS )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_register_service_with_data: ERR 0364: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_register_service_with_data: ERR 4A06: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
if( status == IB_REMOTE_ERROR )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
"osmt_register_service_with_data: "
- "Remote error = %s.\n",
+ "Remote error = %s\n",
ib_get_mad_status_str( osm_madw_get_mad_ptr
( context.result.
p_result_madw ) ) );
@@ -464,7 +464,7 @@ osmt_register_service_with_data( IN osmt
status = IB_REMOTE_ERROR;
osm_log( &p_osmt->log, OSM_LOG_ERROR,
"osmt_register_service_with_data: "
- "Data mismatch in service_data8.\n"
+ "Data mismatch in service_data8\n"
);
goto Exit;
}
@@ -499,7 +499,7 @@ osmt_get_service_by_id_and_name ( IN osm
if( osm_log_is_active( &p_osmt->log, OSM_LOG_VERBOSE ) )
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_service_by_id_and_name: "
- "Getting Service Record by id 0x%016" PRIx64 " and name :
%s\n",
+ "Getting service record: id:0x%016" PRIx64 " and
name:%s\n",
cl_ntoh64(sid),sr_name);
/*
@@ -509,26 +509,29 @@ osmt_get_service_by_id_and_name ( IN osm
*
* The query structures are locals.
*/
- cl_memclr( &svc_rec, sizeof( svc_rec ) );
cl_memclr( &req, sizeof( req ) );
cl_memclr( &context, sizeof( context ) );
- cl_memclr( &user, sizeof( user ) );
- /* set the new service record fields */
- cl_memclr(svc_rec.service_name, sizeof(svc_rec.service_name));
- cl_memcpy(svc_rec.service_name, sr_name,
- (strlen(sr_name)+1)*sizeof(char));
- svc_rec.service_id = sid;
- /* prepare the data used for this query */
+
context.p_osmt = p_osmt;
+
+ /* prepare the data used for this query */
req.query_type = OSMV_QUERY_USER_DEFINED;
req.timeout_ms = p_osmt->opt.transaction_timeout;
req.retry_cnt = p_osmt->opt.retry_count;
req.flags = OSM_SA_FLAGS_SYNC;
req.query_context = &context;
req.pfn_query_cb = osmtest_query_res_cb;
- req.p_query_input = &user;
req.sm_key = 0;
+ cl_memclr( &svc_rec, sizeof( svc_rec ) );
+ cl_memclr( &user, sizeof( user ) );
+ /* set the new service record fields */
+ cl_memclr(svc_rec.service_name, sizeof(svc_rec.service_name));
+ cl_memcpy(svc_rec.service_name, sr_name,
+ (strlen(sr_name)+1)*sizeof(char));
+ svc_rec.service_id = sid;
+ req.p_query_input = &user;
+
user.method = IB_MAD_METHOD_GET;
user.attr_id = IB_MAD_ATTR_SERVICE_RECORD;
user.comp_mask = IB_SR_COMPMASK_SID | IB_SR_COMPMASK_SNAME;
@@ -539,62 +542,73 @@ osmt_get_service_by_id_and_name ( IN osm
if( status != IB_SUCCESS )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_get_service_by_id_and_name: ERR 0365: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_get_service_by_id_and_name: ERR 4A07: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
goto Exit;
}
status = context.result.status;
+ num_recs = context.result.result_cnt;
if( status != IB_SUCCESS )
{
- num_recs = 0;
- if (status != IB_INVALID_PARAMETER)
- {
- osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_get_service_by_id_and_name: ERR 0370: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
- }
+ char mad_stat_err[256];
+ /* If the failure is due to IB_SA_MAD_STATUS_NO_RECORDS and rec_num
is 0,
+ then this is fine. */
if( status == IB_REMOTE_ERROR )
+ strcpy(mad_stat_err, ib_get_mad_status_str(
+ osm_madw_get_mad_ptr(context.result.p_result_madw) ) );
+ else
+ strcpy(mad_stat_err, ib_get_err_str(status) );
+ if( status == IB_REMOTE_ERROR &&
+ !strcmp(mad_stat_err, "IB_SA_MAD_STATUS_NO_RECORDS") &&
+ rec_num == 0 )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
"osmt_get_service_by_id_and_name: "
- "Remote error = %s.\n",
- ib_get_mad_status_str( osm_madw_get_mad_ptr
- ( context.result.
- p_result_madw ) ) );
- }
- goto Exit;
+ "IS EXPECTED ERROR ^^^^\n");
+ status = IB_SUCCESS;
}
else
{
- num_recs = context.result.result_cnt;
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_get_service_by_id_and_name: ERR 4A08: "
+ "Query failed:%s (%s)\n",
+ ib_get_err_str(status),
+ mad_stat_err );
+ goto Exit;
+ }
}
if ( num_recs != rec_num )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
"osmt_get_service_by_id_and_name: "
- "Unmatched record number, Expeceted : %d, Got : %d.\n",
+ "Unmatched number of records: expeceted:%d,
received:%d\n",
rec_num, num_recs);
status = IB_REMOTE_ERROR;
goto Exit;
}
p_rec = osmv_get_query_svc_rec( context.result.p_result_madw, 0 );
+ *p_out_rec = *p_rec;
+
+ if (num_recs)
+ {
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_service_by_id_and_name: "
- "Found Service Record by Name:%s ID:0x%016" PRIx64 ".\n",
+ "Found service record: name:%s id:0x%016" PRIx64 "\n",
p_rec->service_name, cl_ntoh64(p_rec->service_id));
osm_dump_service_record(&p_osmt->log, p_rec, OSM_LOG_DEBUG);
- *p_out_rec = *p_rec;
+ }
Exit:
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_service_by_id_and_name: "
- "Expected num of records is : %d, Found number of records :
%d\n",
- rec_num,num_recs);
+ "Expected and found $d records\n",
+ rec_num );
+
if( context.result.p_result_madw != NULL )
{
osm_mad_pool_put( &p_osmt->mad_pool, context.result.p_result_madw
);
@@ -623,7 +637,7 @@ osmt_get_service_by_id ( IN osmtest_t *
if( osm_log_is_active( &p_osmt->log, OSM_LOG_VERBOSE ) )
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_service_by_id: "
- "Getting Service Record by id 0x%016" PRIx64 "\n",
+ "Getting service record: id:0x%016" PRIx64 "\n",
cl_ntoh64(sid));
/*
@@ -633,23 +647,26 @@ osmt_get_service_by_id ( IN osmtest_t *
*
* The query structures are locals.
*/
- cl_memclr( &svc_rec, sizeof( svc_rec ) );
cl_memclr( &req, sizeof( req ) );
cl_memclr( &context, sizeof( context ) );
- cl_memclr( &user, sizeof( user ) );
- /* set the new service record fields */
- svc_rec.service_id = sid;
- /* prepare the data used for this query */
+
context.p_osmt = p_osmt;
+
+ /* prepare the data used for this query */
req.query_type = OSMV_QUERY_USER_DEFINED;
req.timeout_ms = p_osmt->opt.transaction_timeout;
req.retry_cnt = p_osmt->opt.retry_count;
req.flags = OSM_SA_FLAGS_SYNC;
req.query_context = &context;
req.pfn_query_cb = osmtest_query_res_cb;
- req.p_query_input = &user;
req.sm_key = 0;
+ cl_memclr( &svc_rec, sizeof( svc_rec ) );
+ cl_memclr( &user, sizeof( user ) );
+ /* set the new service record fields */
+ svc_rec.service_id = sid;
+ req.p_query_input = &user;
+
user.method = IB_MAD_METHOD_GET;
user.attr_id = IB_MAD_ATTR_SERVICE_RECORD;
user.comp_mask = IB_SR_COMPMASK_SID;
@@ -660,62 +677,74 @@ osmt_get_service_by_id ( IN osmtest_t *
if( status != IB_SUCCESS )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_get_service_by_id: ERR 0365: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_get_service_by_id: ERR 4A09: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
goto Exit;
}
status = context.result.status;
+ num_recs = context.result.result_cnt;
if( status != IB_SUCCESS )
{
- num_recs = 0;
- if (status != IB_INVALID_PARAMETER)
- {
- osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_get_service_by_id: ERR 0370: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
- }
+ char mad_stat_err[256];
+ /* If the failure is due to IB_SA_MAD_STATUS_NO_RECORDS and rec_num
is 0,
+ then this is fine. */
if( status == IB_REMOTE_ERROR )
+ strcpy(mad_stat_err, ib_get_mad_status_str(
+ osm_madw_get_mad_ptr(context.result.p_result_madw) ) );
+ else
+ strcpy(mad_stat_err, ib_get_err_str(status) );
+
+ if( status == IB_REMOTE_ERROR &&
+ !strcmp(mad_stat_err, "IB_SA_MAD_STATUS_NO_RECORDS") &&
+ rec_num == 0 )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
"osmt_get_service_by_id: "
- "Remote error = %s.\n",
- ib_get_mad_status_str( osm_madw_get_mad_ptr
- ( context.result.
- p_result_madw ) ) );
- }
- goto Exit;
+ "IS EXPECTED ERROR ^^^^\n");
+ status = IB_SUCCESS;
}
else
{
- num_recs = context.result.result_cnt;
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_get_service_by_id: ERR 4A0A: "
+ "Query failed:%s (%s)\n",
+ ib_get_err_str(status),
+ mad_stat_err );
+ goto Exit;
+ }
}
if ( num_recs != rec_num )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_get_service_by_id: "
- "Unmatched record number; Expected : %d, Got : %d.\n",
+ "osmt_get_service_by_id: ERR 4A0B: "
+ "Unmatched number of records: expected:%d received:%d\n",
rec_num, num_recs);
status = IB_REMOTE_ERROR;
goto Exit;
}
p_rec = osmv_get_query_svc_rec( context.result.p_result_madw, 0 );
+ *p_out_rec = *p_rec;
+
+ if (num_recs)
+ {
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_service_by_id: "
- "Found Service Record by Name:%s ID:0x%016" PRIx64 ".\n",
+ "Found service record: name:%s id:0x%016" PRIx64 "\n",
p_rec->service_name, cl_ntoh64(p_rec->service_id));
osm_dump_service_record(&p_osmt->log, p_rec, OSM_LOG_DEBUG);
- *p_out_rec = *p_rec;
+ }
Exit:
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_service_by_id: "
- "Expected num of records is : %d, Found number of records :
%d\n",
- rec_num,num_recs);
+ "Expected and found %d records\n",
+ rec_num );
+
if( context.result.p_result_madw != NULL )
{
osm_mad_pool_put( &p_osmt->mad_pool, context.result.p_result_madw
);
@@ -737,22 +766,25 @@ osmt_get_service_by_name_and_key ( IN os
osmtest_req_context_t context;
osmv_query_req_t req;
ib_service_record_t svc_rec,*p_rec;
- uint32_t num_recs = 0;
+ uint32_t num_recs = 0, i;
osmv_user_query_t user;
OSM_LOG_ENTER( &p_osmt->log, osmt_get_service_by_name_and_key );
if( osm_log_is_active( &p_osmt->log, OSM_LOG_VERBOSE ) )
{
- uint8_t i;
+ char buf_service_key[33];
+
+ sprintf(buf_service_key,
+
"0x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
+ skey[0], skey[1], skey[2], skey[3], skey[4], skey[5],
skey[6], skey[7],
+ skey[8], skey[9], skey[10], skey[11], skey[12], skey[13],
skey[14],
+ skey[15]);
+
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_service_by_name_and_key: "
- "Getting Service Record by Name and Key :%s.\n",
- sr_name);
- for (i=0 ; i<=15 ; i++)
- osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
- "Service Key[%u] = %u\n",
- i,skey[i]);
+ "Getting service record: name:%s and key:%s\n",
+ sr_name, buf_service_key );
}
/*
@@ -762,92 +794,108 @@ osmt_get_service_by_name_and_key ( IN os
*
* The query structures are locals.
*/
- cl_memclr( &svc_rec, sizeof( svc_rec ) );
cl_memclr( &req, sizeof( req ) );
cl_memclr( &context, sizeof( context ) );
- cl_memclr( &user, sizeof( user ) );
- /* set the new service record fields */
- cl_memclr(svc_rec.service_name, sizeof(svc_rec.service_name));
- cl_memcpy(svc_rec.service_name, sr_name,
- (strlen(sr_name)+1)*sizeof(char));
- /* prepare the data used for this query */
context.p_osmt = p_osmt;
+
+ /* prepare the data used for this query */
req.query_type = OSMV_QUERY_USER_DEFINED;
req.timeout_ms = p_osmt->opt.transaction_timeout;
req.retry_cnt = p_osmt->opt.retry_count;
req.flags = OSM_SA_FLAGS_SYNC;
req.query_context = &context;
req.pfn_query_cb = osmtest_query_res_cb;
- req.p_query_input = &user;
req.sm_key = 0;
+ cl_memclr( &svc_rec, sizeof( svc_rec ) );
+ cl_memclr( &user, sizeof( user ) );
+ /* set the new service record fields */
+ cl_memclr(svc_rec.service_name, sizeof(svc_rec.service_name));
+ cl_memcpy(svc_rec.service_name, sr_name,
+ (strlen(sr_name)+1)*sizeof(char));
+ for (i=0 ; i<=15 ; i++)
+ svc_rec.service_key[i] = skey[i];
+
+ req.p_query_input = &user;
+
user.method = IB_MAD_METHOD_GET;
user.attr_id = IB_MAD_ATTR_SERVICE_RECORD;
user.comp_mask = IB_SR_COMPMASK_SNAME | IB_SR_COMPMASK_SKEY;
user.attr_offset = ib_get_attr_offset( sizeof( ib_service_record_t )
);
user.p_attr = &svc_rec;
-
status = osmv_query_sa( p_osmt->h_bind, &req );
if( status != IB_SUCCESS )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_get_service_by_name_and_key: ERR 0365: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_get_service_by_name_and_key: ERR 4A0C: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
goto Exit;
}
status = context.result.status;
+ num_recs = context.result.result_cnt;
if( status != IB_SUCCESS )
{
- num_recs = 0;
- if (status != IB_INVALID_PARAMETER)
- {
- osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_get_service_by_name_and_key: ERR 0370: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
- }
+ char mad_stat_err[256];
+ /* If the failure is due to IB_SA_MAD_STATUS_NO_RECORDS and rec_num
is 0,
+ then this is fine. */
if( status == IB_REMOTE_ERROR )
+ strcpy(mad_stat_err, ib_get_mad_status_str(
+ osm_madw_get_mad_ptr(context.result.p_result_madw) ) );
+ else
+ strcpy(mad_stat_err, ib_get_err_str(status) );
+
+ if( status == IB_REMOTE_ERROR &&
+ !strcmp(mad_stat_err, "IB_SA_MAD_STATUS_NO_RECORDS") &&
+ rec_num == 0 )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
"osmt_get_service_by_name_and_key: "
- "Remote error = %s.\n",
- ib_get_mad_status_str( osm_madw_get_mad_ptr
- ( context.result.
- p_result_madw ) ) );
- }
- goto Exit;
+ "IS EXPECTED ERROR ^^^^\n");
+ status = IB_SUCCESS;
}
else
{
- num_recs = context.result.result_cnt;
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_get_service_by_name_and_key: ERR 4A0D: "
+ "Query failed:%s (%s)\n",
+ ib_get_err_str(status),
+ mad_stat_err );
+ goto Exit;
+ }
}
if ( num_recs != rec_num )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
"osmt_get_service_by_name_and_key: "
- "Unmatched record number, Expected : %d, Got : %d.\n",
+ "Unmatched number of records: expected:%d, received:%d\n",
rec_num, num_recs);
status = IB_REMOTE_ERROR;
goto Exit;
}
p_rec = osmv_get_query_svc_rec( context.result.p_result_madw, 0 );
+ *p_out_rec = *p_rec;
+
+ if ( num_recs )
+ {
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_service_by_name_and_key: "
- "Found Service Record by Name:%s ID:0x%016" PRIx64 ".\n",
+ "Found service record: name:%s id:0x%016" PRIx64 "\n",
sr_name, cl_ntoh64(p_rec->service_id));
osm_dump_service_record(&p_osmt->log, p_rec, OSM_LOG_DEBUG);
- *p_out_rec = *p_rec;
+ }
Exit:
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_service_by_name_and_key: "
- "Expected num of records is : %d, Found number of records :
%d\n",
- rec_num,num_recs);
+ "Expected and found %d records\n",
+ rec_num );
+
if( context.result.p_result_madw != NULL )
{
osm_mad_pool_put( &p_osmt->mad_pool, context.result.p_result_madw
);
@@ -874,12 +922,10 @@ osmt_get_service_by_name( IN osmtest_t *
OSM_LOG_ENTER( &p_osmt->log, osmt_get_service_by_name );
if( osm_log_is_active( &p_osmt->log, OSM_LOG_VERBOSE ) )
- {
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_service_by_name: "
- "Getting Service Record by Name:%s.\n",
+ "Getting service record: name:%s\n",
sr_name);
- }
/*
* Do a blocking query for this record in the subnet.
@@ -893,78 +939,90 @@ osmt_get_service_by_name( IN osmtest_t *
context.p_osmt = p_osmt;
+ /* prepare the data used for this query */
req.query_type = OSMV_QUERY_SVC_REC_BY_NAME;
req.timeout_ms = p_osmt->opt.transaction_timeout;
req.retry_cnt = p_osmt->opt.retry_count;
req.flags = OSM_SA_FLAGS_SYNC;
req.query_context = &context;
req.pfn_query_cb = osmtest_query_res_cb;
+ req.sm_key = 0;
+
cl_memclr(service_name, sizeof(service_name));
cl_memcpy(service_name, sr_name, (strlen(sr_name)+1)*sizeof(char));
req.p_query_input = service_name;
- req.sm_key = 0;
status = osmv_query_sa( p_osmt->h_bind, &req );
if( status != IB_SUCCESS )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_get_service_by_name: ERR 0365: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_get_service_by_name: ERR 4A0E: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
goto Exit;
}
status = context.result.status;
+ num_recs = context.result.result_cnt;
if( status != IB_SUCCESS )
{
- /* The context struct is not init OR result with illegal number of
records */
- num_recs = 0;
- if (status != IB_INVALID_PARAMETER)
- {
- osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_get_service_by_name: ERR 0370: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
- }
+ char mad_stat_err[256];
+ /* If the failure is due to IB_SA_MAD_STATUS_NO_RECORDS and
rec_num is 0,
+ then this is fine. */
if( status == IB_REMOTE_ERROR )
+ strcpy(mad_stat_err, ib_get_mad_status_str(
+ osm_madw_get_mad_ptr(context.result.p_result_madw) ) );
+ else
+ strcpy(mad_stat_err, ib_get_err_str(status) );
+
+ if( status == IB_REMOTE_ERROR &&
+ !strcmp(mad_stat_err, "IB_SA_MAD_STATUS_NO_RECORDS") &&
+ rec_num == 0 )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
"osmt_get_service_by_name: "
- "Remote error = %s.\n",
- ib_get_mad_status_str( osm_madw_get_mad_ptr
- ( context.result.
- p_result_madw ) ) );
- }
- goto Exit;
+ "IS EXPECTED ERROR ^^^^\n");
+ status = IB_SUCCESS;
}
else
{
- num_recs = context.result.result_cnt;
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_get_service_by_name: ERR 4A0F: "
+ "Query failed:%s (%s)\n",
+ ib_get_err_str(status),
+ mad_stat_err );
+ goto Exit;
+ }
}
if ( num_recs != rec_num )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_get_service_by_name: "
- "Unmatched record number, Expeceted : %d, Got : %u.\n",
+ "osmt_get_service_by_name: ERR 4A10: "
+ "Unmatched number of records: expected:%d, received:%u\n",
rec_num, num_recs);
status = IB_REMOTE_ERROR;
goto Exit;
}
p_rec = osmv_get_query_svc_rec( context.result.p_result_madw, 0 );
+ *p_out_rec = *p_rec;
+
+ if (num_recs)
+ {
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_service_by_name: "
- "Found Service Record by Name:%s ID:0x%016" PRIx64 ".\n",
+ "Found service record: name:%s id:0x%016" PRIx64 "\n",
sr_name, cl_ntoh64(p_rec->service_id));
osm_dump_service_record(&p_osmt->log, p_rec, OSM_LOG_DEBUG);
- *p_out_rec = *p_rec;
+ }
Exit:
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_service_by_name: "
- "Expected num of records is : %d, Found number of records :
%u\n",
- rec_num,num_recs);
+ "Expected and found %d records\n",
+ rec_num );
if( context.result.p_result_madw != NULL )
{
@@ -1002,7 +1060,7 @@ osmt_get_all_services_and_check_names( I
{
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_all_services_and_check_names: "
- "Getting All Service Records\n");
+ "Getting all service records\n");
}
/*
* Do a blocking query for this record in the subnet.
@@ -1028,8 +1086,8 @@ osmt_get_all_services_and_check_names( I
if( status != IB_SUCCESS )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_get_all_services_and_check_names: ERR 0371: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_get_all_services_and_check_names: ERR 4A12: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
goto Exit;
}
@@ -1040,14 +1098,14 @@ osmt_get_all_services_and_check_names( I
if (status != IB_INVALID_PARAMETER)
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_get_all_services_and_check_names: ERR 0372: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_get_all_services_and_check_names: ERR 4A13: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
}
if( status == IB_REMOTE_ERROR )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
"osmt_get_all_services_and_check_names: "
- "Remote error = %s.\n",
+ "Remote error = %s\n",
ib_get_mad_status_str( osm_madw_get_mad_ptr
( context.result.
p_result_madw ) ) );
@@ -1058,14 +1116,14 @@ osmt_get_all_services_and_check_names( I
num_recs = context.result.result_cnt;
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_all_services_and_check_names: "
- "Received %u records.\n", num_recs );
+ "Received %u records\n", num_recs );
for( i = 0; i < num_recs; i++ )
{
p_rec = osmv_get_query_svc_rec( context.result.p_result_madw, i
);
osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
"osmt_get_all_services_and_check_names: "
- "Found Service Record by Name:%s ID:0x%016" PRIx64
".\n",
+ "Found service record: name:%s id:0x%016" PRIx64 "\n",
p_rec->service_name, cl_ntoh64(p_rec->service_id));
osm_dump_service_record(&p_osmt->log, p_rec, OSM_LOG_VERBOSE);
for ( j = 0; j < num_of_valid_names; j++)
@@ -1091,8 +1149,8 @@ osmt_get_all_services_and_check_names( I
if (p_checked_names[j] == 0)
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_get_all_services_and_check_names: ERR 0377: "
- "Missing Valid Service
Name:%s\n",p_valid_service_names_arr[j]);
+ "osmt_get_all_services_and_check_names: ERR 4A14: "
+ "Missing valid service:
name:%s\n",p_valid_service_names_arr[j]);
status = IB_ERROR;
goto Exit;
}
@@ -1124,7 +1182,7 @@ osmt_delete_service_by_name(IN osmtest_t
osm_log( &p_osmt->log, OSM_LOG_INFO,
"osmt_delete_service_by_name: "
- "Trying to Delete Service: Name:%s.\n",
+ "Trying to Delete service name:%s\n",
sr_name);
cl_memclr( &svc_rec, sizeof( svc_rec ) );
@@ -1132,17 +1190,10 @@ osmt_delete_service_by_name(IN osmtest_t
status = osmt_get_service_by_name(p_osmt, sr_name,rec_num, &svc_rec);
if (status != IB_SUCCESS)
{
- if (IsServiceExist)
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_delete_service_by_name: ERR 001 "
- "Nothing to delete - failed to find service by name:
%s \n", sr_name);
- else
- {
- osm_log( &p_osmt->log, OSM_LOG_INFO,
- "osmt_delete_service_by_name: "
- "Record should not exist, i.e. BAD flow\n");
- status = IB_SUCCESS;
- }
+ "osmt_delete_service_by_name: ERR 4A15: "
+ "Failed to get service: name:%s\n",
+ sr_name );
goto ExitNoDel;
}
@@ -1175,29 +1226,57 @@ osmt_delete_service_by_name(IN osmtest_t
if( status != IB_SUCCESS )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_delete_service_by_name: ERR 0373: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_delete_service_by_name: ERR 4A16: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
goto Exit;
}
status = context.result.status;
-
+ if ( IsServiceExist )
+ {
+ /* If IsServiceExist = 1 then we should succeed here */
if( status != IB_SUCCESS )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_delete_service_by_name: ERR 0374: "
- "ib_query failed (%s).\n", ib_get_err_str( status ) );
+ "osmt_delete_service_by_name: ERR 4A17: "
+ "ib_query failed (%s)\n", ib_get_err_str( status ) );
if( status == IB_REMOTE_ERROR )
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_delete_service_by_name: "
- "Remote error = %s.\n",
+ "osmt_delete_service_by_name: ERR 4A18: "
+ "Remote error = %s\n",
ib_get_mad_status_str( osm_madw_get_mad_ptr
( context.result.
p_result_madw ) ) );
}
- goto Exit;
+ }
+ }
+ else
+ {
+ /* If IsServiceExist = 0 then we should fail here */
+ if ( status == IB_SUCCESS )
+ {
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_delete_service_by_name: ERR 4A19: "
+ "Succeeded to delete service:%s which "
+ "shouldn't exist",
+ sr_name );
+ status = IB_ERROR;
+ }
+ else
+ {
+ /* The deletion should have failed, since the service_name
+ shouldn't exist. */
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: "
+ "IS EXPECTED ERROR ^^^^\n");
+ osm_log( &p_osmt->log, OSM_LOG_INFO,
+ "osmt_delete_service_by_name: "
+ "Failed to delete service_name:%s\n",
+ sr_name );
+ status = IB_SUCCESS;
+ }
}
Exit:
@@ -1362,144 +1441,256 @@ osmt_run_service_records_flow( IN osmtes
/* Let OpenSM handle it */
usleep(100);
+ /* Make sure service_name[0] exists */
status = osmt_get_service_by_name(p_osmt,
(char*)service_name[0],1,
&srv_rec);
if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A1A: "
+ "Fail to find service: name:%s\n",
+ (char*)service_name[0] );
+ status = IB_ERROR;
goto Exit;
}
+ /* Make sure service_name[1] exists */
status = osmt_get_service_by_name(p_osmt,
(char*)service_name[1],1,
&srv_rec);
if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A1B: "
+ "Fail to find service: name:%s\n",
+ (char*)service_name[1] );
+ status = IB_ERROR;
goto Exit;
}
+ /* Make sure service_name[2] exists */
status = osmt_get_service_by_name(p_osmt,
(char*)service_name[2],1,
&srv_rec);
if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A1C: "
+ "Fail to find service: name:%s\n",
+ (char*)service_name[2] );
+ status = IB_ERROR;
goto Exit;
}
- /* Try to get osmt.srvc.4 b4 (there should be 1 record) and after 10
sec - It should be deleted */
+ /* Make sure service_name[3] exists. */
+ /* After 10 seconds the service should not exist: service_lease = 10
*/
status = osmt_get_service_by_name(p_osmt,
(char*)service_name[3],1,
&srv_rec);
if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A1D: "
+ "Fail to find service: name:%s\n",
+ (char*)service_name[3] );
+ status = IB_ERROR;
goto Exit;
}
+
sleep(10);
+
status = osmt_get_service_by_name(p_osmt,
(char*)service_name[3],0,
&srv_rec);
- if (status == IB_SUCCESS)
+ if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A1E: "
+ "Found service: name:%s that should have been "
+ "deleted due to service lease expiring\n",
+ (char*)service_name[3] );
+ status = IB_ERROR;
goto Exit;
}
- /* Check that for the current Service ID only one record exists */
+
+ /* Check that for service: id[5] only one record exists */
status = osmt_get_service_by_id(p_osmt, 1,
cl_ntoh64(id[5]),&srv_rec);
if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A1F: "
+ "Found number of records!=1 for "
+ "service: id:0x%016" PRIx64 "\n",
+ id[5] );
+ status = IB_ERROR;
goto Exit;
}
- /* Bad Flow of Get with invalid Service ID */
+ /* Bad Flow of Get with invalid Service ID: id[7] */
status = osmt_get_service_by_id(p_osmt, 0,cl_ntoh64(id[7]),&srv_rec);
- if (status == IB_SUCCESS)
+ if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A20: "
+ "Found service: id:0x%016 " PRIx64
+ "that is invalid\n",
+ id[7] );
+ status = IB_ERROR;
goto Exit;
}
- /* Check that for correct name and ID we get record set b4 */
+
+ /* Check by both id and service name: id[0], service_name[0] */
status = osmt_get_service_by_id_and_name(p_osmt, 1, cl_ntoh64(id[0]),
(char*)service_name[0],
&srv_rec);
if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A21: "
+ "Fail to find service: id:0x%016 " PRIx64
+ "name:%s\n",
+ id[0],
+ (char*)service_name[0] );
+ status = IB_ERROR;
goto Exit;
}
+
+ /* Check by both id and service name: id[5], service_name[6] */
status = osmt_get_service_by_id_and_name(p_osmt, 1, cl_ntoh64(id[5]),
(char*)service_name[6],
&srv_rec);
if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A22: "
+ "Fail to find service: id:0x%016 " PRIx64
+ "name:%s\n",
+ id[5],
+ (char*)service_name[6] );
+ status = IB_ERROR;
goto Exit;
}
- /* Bad Flow of Get with valid name and invalid ID */
+ /* Bad Flow of Get with invalid name(service_name[3]) and valid
ID(id[0]) */
status = osmt_get_service_by_id_and_name(p_osmt, 0, cl_ntoh64(id[0]),
(char*)service_name[3],
&srv_rec);
- if (status == IB_SUCCESS)
+ if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A23: "
+ "Found service: id:0x%016" PRIx64
+ "name:%s which is an invalid service\n",
+ id[0],
+ (char*)service_name[3] );
+ status = IB_ERROR;
goto Exit;
}
- /* Bad Flow of Get with unmatched name (exists but not with the
following ID) and valid ID */
+
+ /* Bad Flow of Get with unmatched name(service_name[5]) and
id(id[3]) (both valid) */
status = osmt_get_service_by_id_and_name(p_osmt, 0, cl_ntoh64(id[3]),
(char*)service_name[5],
&srv_rec);
- if (status == IB_SUCCESS)
+ if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A24: "
+ "Found service: id:0x%016" PRIx64
+ "name:%s which is an invalid service\n",
+ id[3],
+ (char*)service_name[5] );
+ status = IB_ERROR;
goto Exit;
}
+ /* Bad Flow of Get with service name that doesn't exist
(service_name[4]) */
status = osmt_get_service_by_name(p_osmt,
(char*)service_name[4],0,
&srv_rec);
- if (status == IB_SUCCESS)
+ if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A25: "
+ "Found service: name:%s that shouldn't exist\n",
+ (char*)service_name[4] );
+ status = IB_ERROR;
goto Exit;
}
- /* Bad Flow : Check that getting osmt.srvc.6 brings no records since
another service has been updated with the same ID - osmt.srvc.7 */
+
+ /* Bad Flow : Check that getting service_name[5] brings no records
since another service
+ has been updated with the same ID (service_name[6] */
status = osmt_get_service_by_name(p_osmt,
(char*)service_name[5],0,
&srv_rec);
- if (status == IB_SUCCESS)
+ if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A26: "
+ "Found service: name:%s which is an "
+ "invalid service\n",
+ (char*)service_name[5] );
+ status = IB_ERROR;
goto Exit;
}
- /* Check that getting osmt.srvc.7 by name ONLY is valid since we do
not support key&name association, also trusted queries */
+
+ /* Check that getting service_name[6] by name ONLY is valid,
+ since we do not support key&name association, also trusted
queries */
status = osmt_get_service_by_name(p_osmt,
(char*)service_name[6],1,
&srv_rec);
if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A27: "
+ "Fail to find service: name:%s\n",
+ (char*)service_name[6] );
+ status = IB_ERROR;
goto Exit;
}
/* Test Service Key */
cl_memclr(service_key,16*sizeof(uint8_t));
+
+ /* Check for service_name[5] with service_key=0 - the service
shouldn't
+ exist with this name. */
status = osmt_get_service_by_name_and_key (p_osmt,
(char*)service_name[5],
0, service_key,&srv_rec);
- if (status == IB_SUCCESS)
+ if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A28: "
+ "Found service: name:%s key:0 which is an "
+ "invalid service (wrong name)\n",
+ (char*)service_name[5] );
+ status = IB_ERROR;
goto Exit;
}
- else
- {
- status = IB_SUCCESS;
- }
+
+ /* Check for service_name[6] with service_key=0 - the service should
+ exist with different key. */
status = osmt_get_service_by_name_and_key (p_osmt,
(char*)service_name[6],
0, service_key,&srv_rec);
- if (status == IB_SUCCESS)
+ if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A29: "
+ "Found service: name:%s key:0 which is an "
+ "invalid service (wrong service_key)\n",
+ (char*)service_name[6] );
+ status = IB_ERROR;
goto Exit;
}
- else
- {
- status = IB_SUCCESS;
- }
+ /* check for service_name[6] with the correct service_key */
for (i=0;i <= 15;i++)
service_key[i]=i + 1;
status = osmt_get_service_by_name_and_key (p_osmt,
(char*)service_name[6],
- 0, service_key,&srv_rec);
- if (status == IB_SUCCESS)
+ 1, service_key, &srv_rec);
+ if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A2A: "
+ "Fail to find service: name:%s with "
+ "correct service key\n",
+ (char*)service_name[6] );
+ status = IB_ERROR;
goto Exit;
}
- else
- {
- status = IB_SUCCESS;
- }
#ifdef VENDOR_RMPP_SUPPORT
+ /* These ar the only service_names which are valid */
cl_memcpy(&service_valid_names[0],&service_name[0],sizeof(uint8_t)*64);
cl_memcpy(&service_valid_names[1],&service_name[2],sizeof(uint8_t)*64);
cl_memcpy(&service_valid_names[2],&service_name[6],sizeof(uint8_t)*64);
@@ -1507,79 +1698,101 @@ osmt_run_service_records_flow( IN osmtes
status =
osmt_get_all_services_and_check_names(p_osmt,service_valid_names,3,
&num_recs);
if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A2B: "
+ "Fail to find all services that should exist\n" );
+ status = IB_ERROR;
goto Exit;
}
#endif
+ /* Delete service_name[0] */
status = osmt_delete_service_by_name(p_osmt,1,
(char*)service_name[0],1);
if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A2C: "
+ "Fail to delete service: name:%s\n",
+ (char*)service_name[0] );
+ status = IB_ERROR;
goto Exit;
}
+ /* Make sure deletion of service_name[0] succeeded */
status = osmt_get_service_by_name(p_osmt,
- (char*)service_name[0],1,
&srv_rec);
- if (status == IB_SUCCESS)
+ (char*)service_name[0],0,
&srv_rec);
+ if (status != IB_SUCCESS)
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_run_service_records_flow: ERR 001 "
- "Expected not to find osmt.srvc.1 \n");
+ "osmt_run_service_records_flow: ERR 4A2D: "
+ "Found service: name:%s that was deleted\n",
+ (char*)service_name[0] );
status = IB_ERROR;
goto Exit;
}
- osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_run_service_records_flow: "
- "IS EXPECTED ERR ^^^^\n");
-
- sleep(3);
+ /* Make sure service_name[1] doesn't exist (expired service lease) */
status = osmt_get_service_by_name(p_osmt,
- (char*)service_name[1],1,
&srv_rec);
- if (status == IB_SUCCESS)
+ (char*)service_name[1],0,
&srv_rec);
+ if (status != IB_SUCCESS)
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_run_service_records_flow: ERR 001 "
- "Expected not to find osmt.srvc.2 \n");
+ "osmt_run_service_records_flow: ERR 4A2E: "
+ "Found service: name:%s that should have expired\n",
+ (char*)service_name[1] );
status = IB_ERROR;
goto Exit;
}
- else
- {
- osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_run_service_records_flow: "
- "IS EXPECTED ERR ^^^^\n");
- status = IB_SUCCESS;
- }
+ /* Make sure service_name[2] exists */
status = osmt_get_service_by_name(p_osmt,
(char*)service_name[2],1,
&srv_rec);
if (status != IB_SUCCESS)
{
osm_log( &p_osmt->log, OSM_LOG_ERROR,
- "osmt_run_service_records_flow: ERR 001 "
- "Expected to find service osmt.srvc.3\n" );
+ "osmt_run_service_records_flow: ERR 4A2F: "
+ "Fail to find service: name:%s\n",
+ (char*)service_name[2] );
+ status = IB_ERROR;
goto Exit;
}
- status = osmt_delete_service_by_name(p_osmt,1,
- (char*)service_name[6],1);
+
+ /* Bad Flow - try to delete non-existent service_name[5] */
+ status = osmt_delete_service_by_name(p_osmt,0,
+ (char*)service_name[5],0);
if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A30: "
+ "Succeed to delete non-existent service: name:%s\n",
+ (char*)service_name[5] );
+ status = IB_ERROR;
goto Exit;
}
- /* Bad Flow */
- status = osmt_delete_service_by_name(p_osmt,0,
- (char*)service_name[5],1);
- if (status == IB_SUCCESS)
+ /* Delete service_name[2] */
+ status = osmt_delete_service_by_name(p_osmt,1,
+ (char*)service_name[2],1);
+ if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A31: "
+ "Fail to delete service: name:%s\n",
+ (char*)service_name[2] );
+ status = IB_ERROR;
goto Exit;
}
+ /* Delete service_name[6] */
status = osmt_delete_service_by_name(p_osmt,1,
- (char*)service_name[2],1);
+ (char*)service_name[6],1);
if (status != IB_SUCCESS)
{
+ osm_log( &p_osmt->log, OSM_LOG_ERROR,
+ "osmt_run_service_records_flow: ERR 4A32: "
+ "Failed to delete service name:%s\n",
+ (char*)service_name[6] );
goto Exit;
}
Index: opensm/osm_sa_service_record.c
===================================================================
--- opensm/osm_sa_service_record.c (revision 5403)
+++ opensm/osm_sa_service_record.c (working copy)
@@ -798,6 +798,13 @@ osm_sr_rcv_process_get_method(
p_recvd_service_rec =
(ib_service_record_t*)ib_sa_mad_get_payload_ptr( p_sa_mad );
+ if( osm_log_is_active( p_rcv->p_log, OSM_LOG_DEBUG ) )
+ {
+ osm_dump_service_record( p_rcv->p_log,
+ p_recvd_service_rec,
+ OSM_LOG_DEBUG );
+ }
+
cl_qlist_init(&sr_match_item.sr_list);
sr_match_item.p_service_rec = p_recvd_service_rec;
sr_match_item.comp_mask = p_sa_mad->comp_mask;
More information about the general
mailing list