You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by da...@apache.org on 2008/08/15 16:40:35 UTC
svn commit: r686242 - in
/webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008:
config/module.xml src/msgprocessors/app_msg_processor.c
src/storage/sqlite/permanent_storage_mgr.c
Author: damitha
Date: Fri Aug 15 07:40:34 2008
New Revision: 686242
URL: http://svn.apache.org/viewvc?rev=686242&view=rev
Log:
Now resending from server side works. However when run with apache there is a segfault periodically.
Modified:
webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/config/module.xml
webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/src/msgprocessors/app_msg_processor.c
webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/src/storage/sqlite/permanent_storage_mgr.c
Modified: webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/config/module.xml
URL: http://svn.apache.org/viewvc/webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/config/module.xml?rev=686242&r1=686241&r2=686242&view=diff
==============================================================================
--- webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/config/module.xml (original)
+++ webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/config/module.xml Fri Aug 15 07:40:34 2008
@@ -70,7 +70,7 @@
<parameter name="sandesha2_db" locked="false">/tmp/sandesha2_db</parameter>
<!-- General parameters -->
<parameter name="ExponentialBackoff" locked="false">AXIS2_FALSE</parameter>
- <parameter name="RetransmissionInterval" locked="false">1</parameter><!--In seconds-->
+ <parameter name="RetransmissionInterval" locked="false">4</parameter><!--In seconds-->
<parameter name="InactivityTimeout" locked="false">64</parameter><!--In seconds-->
<parameter name="StorageManager" locked="false">persistent</parameter>
<parameter name="InvokeInOrder" locked="false">AXIS2_FALSE</parameter>
Modified: webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/src/msgprocessors/app_msg_processor.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/src/msgprocessors/app_msg_processor.c?rev=686242&r1=686241&r2=686242&view=diff
==============================================================================
--- webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/src/msgprocessors/app_msg_processor.c (original)
+++ webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/src/msgprocessors/app_msg_processor.c Fri Aug 15 07:40:34 2008
@@ -2397,7 +2397,7 @@
if(transport_sender)
{
/* This is neccessary to avoid a double free */
- /*axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_TRANSPORT_IN, NULL);*/
+ axis2_msg_ctx_set_property(create_seq_msg_ctx, env, AXIS2_TRANSPORT_IN, NULL);
if(!AXIS2_TRANSPORT_SENDER_INVOKE(transport_sender, env, create_seq_msg_ctx))
{
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sandesha2] Transport sender invoke failed");
@@ -2863,14 +2863,7 @@
axis2_msg_ctx_set_property(app_msg_ctx, env, SANDESHA2_SET_SEND_TO_TRUE, property);*/
}
- /**
- * When we store application message context as below it should be noted
- * that at Sandesha2/C client application side this is actually stored in
- * in-memory whereas in the web service side it is actually stored in
- * database only.
- */
sandesha2_sender_mgr_insert(sender_mgr, env, app_msg_sender_bean);
- sandesha2_storage_mgr_store_msg_ctx(storage_mgr, env, storage_key, app_msg_ctx, AXIS2_TRUE);
is_svr_side = axis2_msg_ctx_get_server_side(app_msg_ctx, env);
@@ -3025,7 +3018,7 @@
axis2_transport_out_desc_t *transport_out = NULL;
axis2_transport_sender_t *transport_sender = NULL;
sandesha2_sender_bean_t *sender_bean = NULL;
-
+
engine = axis2_engine_create(env, conf_ctx);
if(axis2_engine_resume_send(engine, env, app_msg_ctx))
{
@@ -3166,6 +3159,8 @@
{
axis2_engine_free(engine, env);
}
+
+ sandesha2_storage_mgr_store_msg_ctx(storage_mgr, env, storage_key, app_msg_ctx, AXIS2_TRUE);
/* If not (single channel) spawn a thread and see whether acknowledgment has arrived through the
* sandesha2_sender_mgr_get_application_msg_to_send() function. If it has arrived exit from
@@ -3263,17 +3258,15 @@
sandesha2_sender_bean_t *sender_bean = NULL;
axis2_char_t *msg_id = NULL;
axis2_status_t status = AXIS2_FAILURE;
- axis2_msg_ctx_t *app_msg_ctx = NULL;
args = (sandesha2_app_msg_processor_args_t*) data;
env = args->env;
axutil_allocator_switch_to_global_pool(env->allocator);
- app_msg_ctx = (axis2_msg_ctx_t *) args->msg_ctx;
AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI,
"[sandesha2] Entry:sandesha2_app_msg_processor_application_msg_worker_function");
conf_ctx = args->conf_ctx;
- msg_id = args->msg_id;
+ msg_id = axutil_strdup(env, args->msg_id);
internal_sequence_id = axutil_strdup(env, args->internal_sequence_id);
is_server_side = args->is_server_side;
retrans_interval = args->retrans_interval;
@@ -3283,8 +3276,22 @@
create_seq_mgr = sandesha2_permanent_create_seq_mgr_create(env, dbname);
sender_mgr = sandesha2_permanent_sender_mgr_create(env, dbname);
+ AXIS2_SLEEP(retrans_interval);
+ sender_bean = sandesha2_sender_mgr_get_application_msg_to_send(sender_mgr, env,
+ internal_sequence_id, msg_id);
+ if(!sender_bean)
+ {
+ /* There is no pending message to send. So exit from the thread. */
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[sandesha2] There is no pending message to send. So exit from the thread");
+ return NULL;
+ }
+
while(AXIS2_TRUE)
{
+ axis2_char_t *key = NULL;
+ axis2_msg_ctx_t *app_msg_ctx = NULL;
+
AXIS2_SLEEP(retrans_interval);
sender_bean = sandesha2_sender_mgr_get_application_msg_to_send(sender_mgr, env,
internal_sequence_id, msg_id);
@@ -3296,6 +3303,23 @@
break;
}
+ key = sandesha2_sender_bean_get_msg_ctx_ref_key(sender_bean, env);
+ app_msg_ctx = sandesha2_storage_mgr_retrieve_msg_ctx(storage_mgr, env, key, conf_ctx,
+ AXIS2_TRUE);
+
+ if(!app_msg_ctx)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[sandesha2] msg_ctx is not present in the store yet.");
+
+ /*msg_ctx is still not stored so try again later.*/
+ if(sender_bean)
+ {
+ sandesha2_sender_bean_free(sender_bean, env);
+ }
+
+ break;
+ }
status = sandesha2_app_msg_processor_resend(env, conf_ctx, msg_id, is_server_side,
internal_sequence_id, storage_mgr, seq_prop_mgr, create_seq_mgr,
sender_mgr, app_msg_ctx);
@@ -3306,6 +3330,11 @@
"[sandesha2] Resend failed for message id %s in sequence %s", msg_id,
internal_sequence_id);
+ if(app_msg_ctx)
+ {
+ axis2_msg_ctx_free(app_msg_ctx, env);
+ }
+
if(sender_bean)
{
sandesha2_sender_bean_free(sender_bean, env);
@@ -3313,16 +3342,26 @@
break;
}
+ if(app_msg_ctx)
+ {
+ axis2_msg_ctx_free(app_msg_ctx, env);
+ }
+
if(sender_bean)
{
sandesha2_sender_bean_free(sender_bean, env);
}
}
- if(app_msg_ctx)
+ /*if(internal_sequence_id)
{
- axis2_msg_ctx_free(app_msg_ctx, env);
+ AXIS2_FREE(env->allocator, internal_sequence_id);
}
+
+ if(msg_id)
+ {
+ AXIS2_FREE(env->allocator, msg_id);
+ }*/
if(storage_mgr)
{
@@ -3416,8 +3455,8 @@
}
if(transport_sender)
{
- /* This is neccessary to avoid a double free */
- /*axis2_msg_ctx_set_property(app_msg_ctx, env, AXIS2_TRANSPORT_IN, NULL);*/
+ /* This is neccessary to avoid a double free at http_sender.c */
+ axis2_msg_ctx_set_property(app_msg_ctx, env, AXIS2_TRANSPORT_IN, NULL);
if(AXIS2_TRANSPORT_SENDER_INVOKE(transport_sender, env, app_msg_ctx))
{
successfully_sent = AXIS2_TRUE;
@@ -3434,8 +3473,13 @@
resend = sandesha2_sender_bean_is_resend(sender_worker_bean, env);
if(resend)
{
- sandesha2_sender_bean_set_sent_count(bean1, env,
- sandesha2_sender_bean_get_sent_count(sender_worker_bean, env));
+ int sent_count = -1;
+
+ sent_count = sandesha2_sender_bean_get_sent_count(sender_worker_bean, env);
+
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "sent_count:%d", sent_count);
+
+ sandesha2_sender_bean_set_sent_count(bean1, env, sent_count);
sandesha2_sender_bean_set_time_to_send(bean1, env,
sandesha2_sender_bean_get_time_to_send(sender_worker_bean, env));
sandesha2_sender_mgr_update(sender_mgr, env, bean1);
Modified: webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/src/storage/sqlite/permanent_storage_mgr.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/src/storage/sqlite/permanent_storage_mgr.c?rev=686242&r1=686241&r2=686242&view=diff
==============================================================================
--- webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/src/storage/sqlite/permanent_storage_mgr.c (original)
+++ webservices/sandesha/tags/sandesha2/c/worker_thread_removed-23may2008/src/storage/sqlite/permanent_storage_mgr.c Fri Aug 15 07:40:34 2008
@@ -401,7 +401,6 @@
axis2_char_t *to_url_str = NULL;
axis2_char_t *reply_to_str = NULL;
axis2_char_t *transport_to_str = NULL;
- /*axis2_char_t *persistent_prop_str = NULL;*/
axis2_transport_out_desc_t *transport_out_desc = NULL;
axis2_endpoint_ref_t *endpoint_ref = NULL;
axiom_xml_reader_t *reader = NULL;
@@ -411,7 +410,8 @@
axiom_soap_envelope_t *soap_envelope = NULL;
sandesha2_msg_store_bean_t *msg_store_bean = NULL;
axis2_char_t *soap_env_str = NULL;
- /*axutil_property_t *prop_property = NULL;*/
+ /*axis2_char_t *persistent_prop_str = NULL;
+ axutil_property_t *prop_property = NULL;*/
storage_mgr_impl = SANDESHA2_INTF_TO_IMPL(storage_mgr);
---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org