more statistics, make explicit table lock optional, can hurt performance badly
This commit is contained in:
parent
b9186bdd78
commit
1b24e2f9bb
@ -1 +1 @@
|
|||||||
Subproject commit ca53235ccfa0458ebf11c204888ca370e20ec3f5
|
Subproject commit 934a6a18301e81c4fd1b3a8cda2dc13dca4741cc
|
@ -175,6 +175,11 @@ static enum BenchmarkMode mode;
|
|||||||
*/
|
*/
|
||||||
static struct GNUNET_CONFIGURATION_Handle *cfg;
|
static struct GNUNET_CONFIGURATION_Handle *cfg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should we create all of the reserves at the beginning?
|
||||||
|
*/
|
||||||
|
static int reserves_first;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Currency used.
|
* Currency used.
|
||||||
*/
|
*/
|
||||||
@ -297,9 +302,6 @@ eval_probability (float probability)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int reserves_first = 1;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Actual commands construction and execution.
|
* Actual commands construction and execution.
|
||||||
*
|
*
|
||||||
@ -467,14 +469,27 @@ static void
|
|||||||
print_stats (void)
|
print_stats (void)
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; NULL != timings[i].prefix; i++)
|
for (unsigned int i = 0; NULL != timings[i].prefix; i++)
|
||||||
|
{
|
||||||
|
char *total;
|
||||||
|
char *latency;
|
||||||
|
|
||||||
|
total = GNUNET_strdup (
|
||||||
|
GNUNET_STRINGS_relative_time_to_string (timings[i].total_duration,
|
||||||
|
GNUNET_YES));
|
||||||
|
latency = GNUNET_strdup (
|
||||||
|
GNUNET_STRINGS_relative_time_to_string (timings[i].success_latency,
|
||||||
|
GNUNET_YES));
|
||||||
fprintf (stderr,
|
fprintf (stderr,
|
||||||
"%s-%d took %s in total for %u executions\n",
|
"%s-%d took %s in total with %s for latency for %u executions (%u repeats)\n",
|
||||||
timings[i].prefix,
|
timings[i].prefix,
|
||||||
(int) getpid (),
|
(int) getpid (),
|
||||||
GNUNET_STRINGS_relative_time_to_string (
|
total,
|
||||||
timings[i].total_duration,
|
latency,
|
||||||
GNUNET_YES),
|
timings[i].num_commands,
|
||||||
timings[i].num_commands);
|
timings[i].num_retries);
|
||||||
|
GNUNET_free (total);
|
||||||
|
GNUNET_free (latency);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -959,6 +974,10 @@ main (int argc,
|
|||||||
"fakebank",
|
"fakebank",
|
||||||
"start a fakebank instead of the Python bank",
|
"start a fakebank instead of the Python bank",
|
||||||
&use_fakebank),
|
&use_fakebank),
|
||||||
|
GNUNET_GETOPT_option_flag ('F',
|
||||||
|
"reserves-first",
|
||||||
|
"should all reserves be created first, before starting normal operations",
|
||||||
|
&reserves_first),
|
||||||
GNUNET_GETOPT_option_flag ('K',
|
GNUNET_GETOPT_option_flag ('K',
|
||||||
"linger",
|
"linger",
|
||||||
"linger around until key press",
|
"linger around until key press",
|
||||||
|
@ -38,6 +38,12 @@
|
|||||||
*/
|
*/
|
||||||
#define AUTO_EXPLAIN 1
|
#define AUTO_EXPLAIN 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should we explicitly lock certain individual tables prior to SELECT+INSERT
|
||||||
|
* combis?
|
||||||
|
*/
|
||||||
|
#define EXPLICIT_LOCKS 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper macro to add the currency from the plugin's state
|
* Wrapper macro to add the currency from the plugin's state
|
||||||
* when fetching amounts from the database.
|
* when fetching amounts from the database.
|
||||||
@ -568,7 +574,8 @@ postgres_get_session (void *cls)
|
|||||||
"SELECT"
|
"SELECT"
|
||||||
" denom_pub_hash"
|
" denom_pub_hash"
|
||||||
" FROM known_coins"
|
" FROM known_coins"
|
||||||
" WHERE coin_pub=$1",
|
" WHERE coin_pub=$1"
|
||||||
|
" FOR SHARE;",
|
||||||
1),
|
1),
|
||||||
/* Lock deposit table; NOTE: we may want to eventually shard the
|
/* Lock deposit table; NOTE: we may want to eventually shard the
|
||||||
deposit table to avoid this lock being the main point of
|
deposit table to avoid this lock being the main point of
|
||||||
@ -2056,9 +2063,6 @@ postgres_get_withdraw_info (
|
|||||||
struct TALER_EXCHANGEDB_CollectableBlindcoin *collectable)
|
struct TALER_EXCHANGEDB_CollectableBlindcoin *collectable)
|
||||||
{
|
{
|
||||||
struct PostgresClosure *pg = cls;
|
struct PostgresClosure *pg = cls;
|
||||||
struct GNUNET_PQ_QueryParam no_params[] = {
|
|
||||||
GNUNET_PQ_query_param_end
|
|
||||||
};
|
|
||||||
struct GNUNET_PQ_QueryParam params[] = {
|
struct GNUNET_PQ_QueryParam params[] = {
|
||||||
GNUNET_PQ_query_param_auto_from_type (h_blind),
|
GNUNET_PQ_query_param_auto_from_type (h_blind),
|
||||||
GNUNET_PQ_query_param_end
|
GNUNET_PQ_query_param_end
|
||||||
@ -2078,12 +2082,17 @@ postgres_get_withdraw_info (
|
|||||||
&collectable->withdraw_fee),
|
&collectable->withdraw_fee),
|
||||||
GNUNET_PQ_result_spec_end
|
GNUNET_PQ_result_spec_end
|
||||||
};
|
};
|
||||||
|
#if EXPLICIT_LOCKS
|
||||||
|
struct GNUNET_PQ_QueryParam no_params[] = {
|
||||||
|
GNUNET_PQ_query_param_end
|
||||||
|
};
|
||||||
enum GNUNET_DB_QueryStatus qs;
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
|
|
||||||
if (0 > (qs = GNUNET_PQ_eval_prepared_non_select (session->conn,
|
if (0 > (qs = GNUNET_PQ_eval_prepared_non_select (session->conn,
|
||||||
"lock_withdraw",
|
"lock_withdraw",
|
||||||
no_params)))
|
no_params)))
|
||||||
return qs;
|
return qs;
|
||||||
|
#endif
|
||||||
collectable->h_coin_envelope = *h_blind;
|
collectable->h_coin_envelope = *h_blind;
|
||||||
return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
|
return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
|
||||||
"get_withdraw_info",
|
"get_withdraw_info",
|
||||||
@ -2576,9 +2585,6 @@ postgres_have_deposit (void *cls,
|
|||||||
GNUNET_PQ_query_param_auto_from_type (&deposit->merchant_pub),
|
GNUNET_PQ_query_param_auto_from_type (&deposit->merchant_pub),
|
||||||
GNUNET_PQ_query_param_end
|
GNUNET_PQ_query_param_end
|
||||||
};
|
};
|
||||||
struct GNUNET_PQ_QueryParam no_params[] = {
|
|
||||||
GNUNET_PQ_query_param_end
|
|
||||||
};
|
|
||||||
struct TALER_EXCHANGEDB_Deposit deposit2;
|
struct TALER_EXCHANGEDB_Deposit deposit2;
|
||||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||||
TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
|
TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
|
||||||
@ -2594,11 +2600,16 @@ postgres_have_deposit (void *cls,
|
|||||||
GNUNET_PQ_result_spec_end
|
GNUNET_PQ_result_spec_end
|
||||||
};
|
};
|
||||||
enum GNUNET_DB_QueryStatus qs;
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
|
#if EXPLICIT_LOCKS
|
||||||
|
struct GNUNET_PQ_QueryParam no_params[] = {
|
||||||
|
GNUNET_PQ_query_param_end
|
||||||
|
};
|
||||||
|
|
||||||
if (0 > (qs = GNUNET_PQ_eval_prepared_non_select (session->conn,
|
if (0 > (qs = GNUNET_PQ_eval_prepared_non_select (session->conn,
|
||||||
"lock_deposit",
|
"lock_deposit",
|
||||||
no_params)))
|
no_params)))
|
||||||
return qs;
|
return qs;
|
||||||
|
#endif
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"Getting deposits for coin %s\n",
|
"Getting deposits for coin %s\n",
|
||||||
TALER_B2S (&deposit->coin.coin_pub));
|
TALER_B2S (&deposit->coin.coin_pub));
|
||||||
@ -3149,6 +3160,7 @@ postgres_ensure_coin_known (void *cls,
|
|||||||
struct PostgresClosure *pc = cls;
|
struct PostgresClosure *pc = cls;
|
||||||
enum GNUNET_DB_QueryStatus qs;
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
struct TALER_CoinPublicInfo known_coin;
|
struct TALER_CoinPublicInfo known_coin;
|
||||||
|
#if EXPLICIT_LOCKS
|
||||||
struct GNUNET_PQ_QueryParam no_params[] = {
|
struct GNUNET_PQ_QueryParam no_params[] = {
|
||||||
GNUNET_PQ_query_param_end
|
GNUNET_PQ_query_param_end
|
||||||
};
|
};
|
||||||
@ -3157,6 +3169,7 @@ postgres_ensure_coin_known (void *cls,
|
|||||||
"lock_known_coins",
|
"lock_known_coins",
|
||||||
no_params)))
|
no_params)))
|
||||||
return qs;
|
return qs;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* check if the coin is already known */
|
/* check if the coin is already known */
|
||||||
qs = postgres_get_known_coin (pc,
|
qs = postgres_get_known_coin (pc,
|
||||||
|
@ -505,6 +505,19 @@ struct TALER_TESTING_Command
|
|||||||
*/
|
*/
|
||||||
struct GNUNET_TIME_Absolute finish_time;
|
struct GNUNET_TIME_Absolute finish_time;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When did we start the last request of this command?
|
||||||
|
* Delta to @e finish_time gives the latency for the last
|
||||||
|
* successful request.
|
||||||
|
*/
|
||||||
|
struct GNUNET_TIME_Absolute last_req_time;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* How often did we try to execute this command? (In case
|
||||||
|
* it is a request that is repated.)
|
||||||
|
*/
|
||||||
|
unsigned int num_tries;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -1846,10 +1859,21 @@ struct TALER_TESTING_Timer
|
|||||||
*/
|
*/
|
||||||
struct GNUNET_TIME_Relative total_duration;
|
struct GNUNET_TIME_Relative total_duration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Total time spend waiting for the *successful* exeuction
|
||||||
|
* in all commands of this type.
|
||||||
|
*/
|
||||||
|
struct GNUNET_TIME_Relative success_latency;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Number of commands summed up.
|
* Number of commands summed up.
|
||||||
*/
|
*/
|
||||||
unsigned int num_commands;
|
unsigned int num_commands;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of retries summed up.
|
||||||
|
*/
|
||||||
|
unsigned int num_retries;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -125,6 +125,8 @@ do_retry (void *cls)
|
|||||||
struct DepositConfirmationState *dcs = cls;
|
struct DepositConfirmationState *dcs = cls;
|
||||||
|
|
||||||
dcs->retry_task = NULL;
|
dcs->retry_task = NULL;
|
||||||
|
dcs->is->commands[dcs->is->ip].last_req_time
|
||||||
|
= GNUNET_TIME_absolute_get ();
|
||||||
deposit_confirmation_run (dcs,
|
deposit_confirmation_run (dcs,
|
||||||
NULL,
|
NULL,
|
||||||
dcs->is);
|
dcs->is);
|
||||||
@ -168,6 +170,7 @@ deposit_confirmation_cb (void *cls,
|
|||||||
else
|
else
|
||||||
dcs->backoff = GNUNET_TIME_randomized_backoff (dcs->backoff,
|
dcs->backoff = GNUNET_TIME_randomized_backoff (dcs->backoff,
|
||||||
MAX_BACKOFF);
|
MAX_BACKOFF);
|
||||||
|
dcs->is->commands[dcs->is->ip].num_tries++;
|
||||||
dcs->retry_task = GNUNET_SCHEDULER_add_delayed (dcs->backoff,
|
dcs->retry_task = GNUNET_SCHEDULER_add_delayed (dcs->backoff,
|
||||||
&do_retry,
|
&do_retry,
|
||||||
dcs);
|
dcs);
|
||||||
@ -442,8 +445,8 @@ TALER_TESTING_cmd_deposit_confirmation (const char *label,
|
|||||||
* @return the command with retries enabled
|
* @return the command with retries enabled
|
||||||
*/
|
*/
|
||||||
struct TALER_TESTING_Command
|
struct TALER_TESTING_Command
|
||||||
TALER_TESTING_cmd_deposit_confirmation_with_retry (struct TALER_TESTING_Command
|
TALER_TESTING_cmd_deposit_confirmation_with_retry (
|
||||||
cmd)
|
struct TALER_TESTING_Command cmd)
|
||||||
{
|
{
|
||||||
struct DepositConfirmationState *dcs;
|
struct DepositConfirmationState *dcs;
|
||||||
|
|
||||||
|
@ -115,6 +115,8 @@ do_retry (void *cls)
|
|||||||
struct ExchangesState *es = cls;
|
struct ExchangesState *es = cls;
|
||||||
|
|
||||||
es->retry_task = NULL;
|
es->retry_task = NULL;
|
||||||
|
es->is->commands[es->is->ip].last_req_time
|
||||||
|
= GNUNET_TIME_absolute_get ();
|
||||||
exchanges_run (es,
|
exchanges_run (es,
|
||||||
NULL,
|
NULL,
|
||||||
es->is);
|
es->is);
|
||||||
@ -161,6 +163,7 @@ exchanges_cb (void *cls,
|
|||||||
else
|
else
|
||||||
es->backoff = GNUNET_TIME_randomized_backoff (es->backoff,
|
es->backoff = GNUNET_TIME_randomized_backoff (es->backoff,
|
||||||
MAX_BACKOFF);
|
MAX_BACKOFF);
|
||||||
|
es->is->commands[es->is->ip].num_tries++;
|
||||||
es->retry_task = GNUNET_SCHEDULER_add_delayed (es->backoff,
|
es->retry_task = GNUNET_SCHEDULER_add_delayed (es->backoff,
|
||||||
&do_retry,
|
&do_retry,
|
||||||
es);
|
es);
|
||||||
|
@ -162,6 +162,8 @@ do_retry (void *cls)
|
|||||||
struct AdminAddIncomingState *fts = cls;
|
struct AdminAddIncomingState *fts = cls;
|
||||||
|
|
||||||
fts->retry_task = NULL;
|
fts->retry_task = NULL;
|
||||||
|
fts->is->commands[fts->is->ip].last_req_time
|
||||||
|
= GNUNET_TIME_absolute_get ();
|
||||||
admin_add_incoming_run (fts,
|
admin_add_incoming_run (fts,
|
||||||
NULL,
|
NULL,
|
||||||
fts->is);
|
fts->is);
|
||||||
@ -214,6 +216,7 @@ confirmation_cb (void *cls,
|
|||||||
else
|
else
|
||||||
fts->backoff = GNUNET_TIME_randomized_backoff (fts->backoff,
|
fts->backoff = GNUNET_TIME_randomized_backoff (fts->backoff,
|
||||||
MAX_BACKOFF);
|
MAX_BACKOFF);
|
||||||
|
fts->is->commands[fts->is->ip].num_tries++;
|
||||||
fts->retry_task = GNUNET_SCHEDULER_add_delayed
|
fts->retry_task = GNUNET_SCHEDULER_add_delayed
|
||||||
(fts->backoff,
|
(fts->backoff,
|
||||||
&do_retry,
|
&do_retry,
|
||||||
|
@ -149,6 +149,8 @@ do_retry (void *cls)
|
|||||||
struct TransferState *fts = cls;
|
struct TransferState *fts = cls;
|
||||||
|
|
||||||
fts->retry_task = NULL;
|
fts->retry_task = NULL;
|
||||||
|
fts->is->commands[fts->is->ip].last_req_time
|
||||||
|
= GNUNET_TIME_absolute_get ();
|
||||||
transfer_run (fts,
|
transfer_run (fts,
|
||||||
NULL,
|
NULL,
|
||||||
fts->is);
|
fts->is);
|
||||||
@ -197,10 +199,11 @@ confirmation_cb (void *cls,
|
|||||||
fts->backoff = GNUNET_TIME_UNIT_ZERO;
|
fts->backoff = GNUNET_TIME_UNIT_ZERO;
|
||||||
else
|
else
|
||||||
fts->backoff = EXCHANGE_LIB_BACKOFF (fts->backoff);
|
fts->backoff = EXCHANGE_LIB_BACKOFF (fts->backoff);
|
||||||
fts->retry_task = GNUNET_SCHEDULER_add_delayed
|
fts->is->commands[fts->is->ip].num_tries++;
|
||||||
(fts->backoff,
|
fts->retry_task
|
||||||
&do_retry,
|
= GNUNET_SCHEDULER_add_delayed (fts->backoff,
|
||||||
fts);
|
&do_retry,
|
||||||
|
fts);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,10 @@ batch_run (void *cls,
|
|||||||
TALER_TESTING_interpreter_next (is);
|
TALER_TESTING_interpreter_next (is);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bs->batch[bs->batch_ip].start_time = GNUNET_TIME_absolute_get ();
|
bs->batch[bs->batch_ip].start_time
|
||||||
|
= bs->batch[bs->batch_ip].last_req_time
|
||||||
|
= GNUNET_TIME_absolute_get ();
|
||||||
|
bs->batch[bs->batch_ip].num_tries = 1;
|
||||||
bs->batch[bs->batch_ip].run (bs->batch[bs->batch_ip].cls,
|
bs->batch[bs->batch_ip].run (bs->batch[bs->batch_ip].cls,
|
||||||
&bs->batch[bs->batch_ip],
|
&bs->batch[bs->batch_ip],
|
||||||
is);
|
is);
|
||||||
|
@ -164,6 +164,8 @@ do_retry (void *cls)
|
|||||||
struct DepositState *ds = cls;
|
struct DepositState *ds = cls;
|
||||||
|
|
||||||
ds->retry_task = NULL;
|
ds->retry_task = NULL;
|
||||||
|
ds->is->commands[ds->is->ip].last_req_time
|
||||||
|
= GNUNET_TIME_absolute_get ();
|
||||||
deposit_run (ds,
|
deposit_run (ds,
|
||||||
NULL,
|
NULL,
|
||||||
ds->is);
|
ds->is);
|
||||||
@ -213,6 +215,7 @@ deposit_cb (void *cls,
|
|||||||
else
|
else
|
||||||
ds->backoff = GNUNET_TIME_randomized_backoff (ds->backoff,
|
ds->backoff = GNUNET_TIME_randomized_backoff (ds->backoff,
|
||||||
MAX_BACKOFF);
|
MAX_BACKOFF);
|
||||||
|
ds->is->commands[ds->is->ip].num_tries++;
|
||||||
ds->retry_task
|
ds->retry_task
|
||||||
= GNUNET_SCHEDULER_add_delayed (ds->backoff,
|
= GNUNET_SCHEDULER_add_delayed (ds->backoff,
|
||||||
&do_retry,
|
&do_retry,
|
||||||
|
@ -315,6 +315,8 @@ do_reveal_retry (void *cls)
|
|||||||
struct RefreshRevealState *rrs = cls;
|
struct RefreshRevealState *rrs = cls;
|
||||||
|
|
||||||
rrs->retry_task = NULL;
|
rrs->retry_task = NULL;
|
||||||
|
rrs->is->commands[rrs->is->ip].last_req_time
|
||||||
|
= GNUNET_TIME_absolute_get ();
|
||||||
refresh_reveal_run (rrs,
|
refresh_reveal_run (rrs,
|
||||||
NULL,
|
NULL,
|
||||||
rrs->is);
|
rrs->is);
|
||||||
@ -372,6 +374,7 @@ reveal_cb (void *cls,
|
|||||||
MAX_BACKOFF);
|
MAX_BACKOFF);
|
||||||
rrs->total_backoff = GNUNET_TIME_relative_add (rrs->total_backoff,
|
rrs->total_backoff = GNUNET_TIME_relative_add (rrs->total_backoff,
|
||||||
rrs->backoff);
|
rrs->backoff);
|
||||||
|
rrs->is->commands[rrs->is->ip].num_tries++;
|
||||||
rrs->retry_task = GNUNET_SCHEDULER_add_delayed (rrs->backoff,
|
rrs->retry_task = GNUNET_SCHEDULER_add_delayed (rrs->backoff,
|
||||||
&do_reveal_retry,
|
&do_reveal_retry,
|
||||||
rrs);
|
rrs);
|
||||||
@ -545,6 +548,8 @@ do_link_retry (void *cls)
|
|||||||
struct RefreshLinkState *rls = cls;
|
struct RefreshLinkState *rls = cls;
|
||||||
|
|
||||||
rls->retry_task = NULL;
|
rls->retry_task = NULL;
|
||||||
|
rls->is->commands[rls->is->ip].last_req_time
|
||||||
|
= GNUNET_TIME_absolute_get ();
|
||||||
refresh_link_run (rls,
|
refresh_link_run (rls,
|
||||||
NULL,
|
NULL,
|
||||||
rls->is);
|
rls->is);
|
||||||
@ -610,6 +615,7 @@ link_cb (void *cls,
|
|||||||
MAX_BACKOFF);
|
MAX_BACKOFF);
|
||||||
rls->total_backoff = GNUNET_TIME_relative_add (rls->total_backoff,
|
rls->total_backoff = GNUNET_TIME_relative_add (rls->total_backoff,
|
||||||
rls->backoff);
|
rls->backoff);
|
||||||
|
rls->is->commands[rls->is->ip].num_tries++;
|
||||||
rls->retry_task = GNUNET_SCHEDULER_add_delayed (rls->backoff,
|
rls->retry_task = GNUNET_SCHEDULER_add_delayed (rls->backoff,
|
||||||
&do_link_retry,
|
&do_link_retry,
|
||||||
rls);
|
rls);
|
||||||
@ -853,6 +859,8 @@ do_melt_retry (void *cls)
|
|||||||
struct RefreshMeltState *rms = cls;
|
struct RefreshMeltState *rms = cls;
|
||||||
|
|
||||||
rms->retry_task = NULL;
|
rms->retry_task = NULL;
|
||||||
|
rms->is->commands[rms->is->ip].last_req_time
|
||||||
|
= GNUNET_TIME_absolute_get ();
|
||||||
melt_run (rms,
|
melt_run (rms,
|
||||||
NULL,
|
NULL,
|
||||||
rms->is);
|
rms->is);
|
||||||
@ -904,6 +912,7 @@ melt_cb (void *cls,
|
|||||||
MAX_BACKOFF);
|
MAX_BACKOFF);
|
||||||
rms->total_backoff = GNUNET_TIME_relative_add (rms->total_backoff,
|
rms->total_backoff = GNUNET_TIME_relative_add (rms->total_backoff,
|
||||||
rms->backoff);
|
rms->backoff);
|
||||||
|
rms->is->commands[rms->is->ip].num_tries++;
|
||||||
rms->retry_task = GNUNET_SCHEDULER_add_delayed
|
rms->retry_task = GNUNET_SCHEDULER_add_delayed
|
||||||
(rms->backoff,
|
(rms->backoff,
|
||||||
&do_melt_retry,
|
&do_melt_retry,
|
||||||
|
@ -79,6 +79,7 @@ stat_cmd (struct TALER_TESTING_Timer *timings,
|
|||||||
const struct TALER_TESTING_Command *cmd)
|
const struct TALER_TESTING_Command *cmd)
|
||||||
{
|
{
|
||||||
struct GNUNET_TIME_Relative duration;
|
struct GNUNET_TIME_Relative duration;
|
||||||
|
struct GNUNET_TIME_Relative lat;
|
||||||
|
|
||||||
if (cmd->start_time.abs_value_us > cmd->finish_time.abs_value_us)
|
if (cmd->start_time.abs_value_us > cmd->finish_time.abs_value_us)
|
||||||
{
|
{
|
||||||
@ -87,6 +88,8 @@ stat_cmd (struct TALER_TESTING_Timer *timings,
|
|||||||
}
|
}
|
||||||
duration = GNUNET_TIME_absolute_get_difference (cmd->start_time,
|
duration = GNUNET_TIME_absolute_get_difference (cmd->start_time,
|
||||||
cmd->finish_time);
|
cmd->finish_time);
|
||||||
|
lat = GNUNET_TIME_absolute_get_difference (cmd->last_req_time,
|
||||||
|
cmd->finish_time);
|
||||||
for (unsigned int i = 0;
|
for (unsigned int i = 0;
|
||||||
NULL != timings[i].prefix;
|
NULL != timings[i].prefix;
|
||||||
i++)
|
i++)
|
||||||
@ -98,7 +101,11 @@ stat_cmd (struct TALER_TESTING_Timer *timings,
|
|||||||
timings[i].total_duration
|
timings[i].total_duration
|
||||||
= GNUNET_TIME_relative_add (duration,
|
= GNUNET_TIME_relative_add (duration,
|
||||||
timings[i].total_duration);
|
timings[i].total_duration);
|
||||||
|
timings[i].success_latency
|
||||||
|
= GNUNET_TIME_relative_add (lat,
|
||||||
|
timings[i].success_latency);
|
||||||
timings[i].num_commands++;
|
timings[i].num_commands++;
|
||||||
|
timings[i].num_retries += cmd->num_tries;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -152,6 +152,8 @@ do_retry (void *cls)
|
|||||||
struct WithdrawState *ws = cls;
|
struct WithdrawState *ws = cls;
|
||||||
|
|
||||||
ws->retry_task = NULL;
|
ws->retry_task = NULL;
|
||||||
|
ws->is->commands[ws->is->ip].last_req_time
|
||||||
|
= GNUNET_TIME_absolute_get ();
|
||||||
withdraw_run (ws,
|
withdraw_run (ws,
|
||||||
NULL,
|
NULL,
|
||||||
ws->is);
|
ws->is);
|
||||||
@ -208,6 +210,7 @@ reserve_withdraw_cb (void *cls,
|
|||||||
UNKNOWN_MAX_BACKOFF);
|
UNKNOWN_MAX_BACKOFF);
|
||||||
ws->total_backoff = GNUNET_TIME_relative_add (ws->total_backoff,
|
ws->total_backoff = GNUNET_TIME_relative_add (ws->total_backoff,
|
||||||
ws->backoff);
|
ws->backoff);
|
||||||
|
ws->is->commands[ws->is->ip].num_tries++;
|
||||||
ws->retry_task = GNUNET_SCHEDULER_add_delayed (ws->backoff,
|
ws->retry_task = GNUNET_SCHEDULER_add_delayed (ws->backoff,
|
||||||
&do_retry,
|
&do_retry,
|
||||||
ws);
|
ws);
|
||||||
|
@ -272,7 +272,10 @@ interpreter_run (void *cls)
|
|||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"Running command `%s'\n",
|
"Running command `%s'\n",
|
||||||
cmd->label);
|
cmd->label);
|
||||||
cmd->start_time = GNUNET_TIME_absolute_get ();
|
cmd->start_time
|
||||||
|
= cmd->last_req_time
|
||||||
|
= GNUNET_TIME_absolute_get ();
|
||||||
|
cmd->num_tries = 1;
|
||||||
cmd->run (cmd->cls,
|
cmd->run (cmd->cls,
|
||||||
cmd,
|
cmd,
|
||||||
is);
|
is);
|
||||||
|
Loading…
Reference in New Issue
Block a user