aboutsummaryrefslogtreecommitdiff
path: root/src/fs/gnunet-service-fs.c
diff options
context:
space:
mode:
authorNathan S. Evans <evans@in.tum.de>2010-11-05 18:21:50 +0000
committerNathan S. Evans <evans@in.tum.de>2010-11-05 18:21:50 +0000
commit75a33a1499cf60ea4364c9aa673816629a6c1413 (patch)
tree0620da4312bb04de4d7b65074fdd3b0c3dd6cc0e /src/fs/gnunet-service-fs.c
parent7217c601ad30760872823193d62307e7a335d226 (diff)
downloadgnunet-75a33a1499cf60ea4364c9aa673816629a6c1413.tar.gz
gnunet-75a33a1499cf60ea4364c9aa673816629a6c1413.zip
big scheduler refactoring, expect some issues
Diffstat (limited to 'src/fs/gnunet-service-fs.c')
-rw-r--r--src/fs/gnunet-service-fs.c92
1 files changed, 31 insertions, 61 deletions
diff --git a/src/fs/gnunet-service-fs.c b/src/fs/gnunet-service-fs.c
index 2defec397..0a537576a 100644
--- a/src/fs/gnunet-service-fs.c
+++ b/src/fs/gnunet-service-fs.c
@@ -771,11 +771,6 @@ static struct GNUNET_BLOCK_Context *block_ctx;
771static struct GNUNET_CONFIGURATION_Handle *block_cfg; 771static struct GNUNET_CONFIGURATION_Handle *block_cfg;
772 772
773/** 773/**
774 * Our scheduler.
775 */
776static struct GNUNET_SCHEDULER_Handle *sched;
777
778/**
779 * Our configuration. 774 * Our configuration.
780 */ 775 */
781static const struct GNUNET_CONFIGURATION_Handle *cfg; 776static const struct GNUNET_CONFIGURATION_Handle *cfg;
@@ -1106,7 +1101,7 @@ consider_migration (void *cls,
1106#endif 1101#endif
1107 if (cp->delayed_transmission_request_task != GNUNET_SCHEDULER_NO_TASK) 1102 if (cp->delayed_transmission_request_task != GNUNET_SCHEDULER_NO_TASK)
1108 { 1103 {
1109 GNUNET_SCHEDULER_cancel (sched, cp->delayed_transmission_request_task); 1104 GNUNET_SCHEDULER_cancel (cp->delayed_transmission_request_task);
1110 cp->delayed_transmission_request_task = GNUNET_SCHEDULER_NO_TASK; 1105 cp->delayed_transmission_request_task = GNUNET_SCHEDULER_NO_TASK;
1111 } 1106 }
1112 cp->cth 1107 cp->cth
@@ -1166,8 +1161,7 @@ consider_migration_gathering ()
1166 MAX_MIGRATION_QUEUE); 1161 MAX_MIGRATION_QUEUE);
1167 delay = GNUNET_TIME_relative_max (delay, 1162 delay = GNUNET_TIME_relative_max (delay,
1168 min_migration_delay); 1163 min_migration_delay);
1169 mig_task = GNUNET_SCHEDULER_add_delayed (sched, 1164 mig_task = GNUNET_SCHEDULER_add_delayed (delay,
1170 delay,
1171 &gather_migration_blocks, 1165 &gather_migration_blocks,
1172 NULL); 1166 NULL);
1173} 1167}
@@ -1201,8 +1195,7 @@ consider_dht_put_gathering (void *cls)
1201 (hopefully) appear */ 1195 (hopefully) appear */
1202 delay = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 5); 1196 delay = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 5);
1203 } 1197 }
1204 dht_task = GNUNET_SCHEDULER_add_delayed (sched, 1198 dht_task = GNUNET_SCHEDULER_add_delayed (delay,
1205 delay,
1206 &gather_dht_put_blocks, 1199 &gather_dht_put_blocks,
1207 cls); 1200 cls);
1208} 1201}
@@ -1542,8 +1535,7 @@ destroy_pending_request (struct PendingRequest *pr)
1542 } 1535 }
1543 if (pr->task != GNUNET_SCHEDULER_NO_TASK) 1536 if (pr->task != GNUNET_SCHEDULER_NO_TASK)
1544 { 1537 {
1545 GNUNET_SCHEDULER_cancel (sched, 1538 GNUNET_SCHEDULER_cancel (pr->task);
1546 pr->task);
1547 pr->task = GNUNET_SCHEDULER_NO_TASK; 1539 pr->task = GNUNET_SCHEDULER_NO_TASK;
1548 } 1540 }
1549 while (NULL != pr->pending_head) 1541 while (NULL != pr->pending_head)
@@ -1743,8 +1735,7 @@ cron_flush_trust (void *cls,
1743 return; 1735 return;
1744 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) 1736 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
1745 return; 1737 return;
1746 GNUNET_SCHEDULER_add_delayed (tc->sched, 1738 GNUNET_SCHEDULER_add_delayed (TRUST_FLUSH_FREQ, &cron_flush_trust, NULL);
1747 TRUST_FLUSH_FREQ, &cron_flush_trust, NULL);
1748} 1739}
1749 1740
1750 1741
@@ -1843,7 +1834,7 @@ peer_disconnect_handler (void *cls,
1843 } 1834 }
1844 if (cp->delayed_transmission_request_task != GNUNET_SCHEDULER_NO_TASK) 1835 if (cp->delayed_transmission_request_task != GNUNET_SCHEDULER_NO_TASK)
1845 { 1836 {
1846 GNUNET_SCHEDULER_cancel (sched, cp->delayed_transmission_request_task); 1837 GNUNET_SCHEDULER_cancel (cp->delayed_transmission_request_task);
1847 cp->delayed_transmission_request_task = GNUNET_SCHEDULER_NO_TASK; 1838 cp->delayed_transmission_request_task = GNUNET_SCHEDULER_NO_TASK;
1848 } 1839 }
1849 while (NULL != (pm = cp->pending_messages_head)) 1840 while (NULL != (pm = cp->pending_messages_head))
@@ -1984,12 +1975,12 @@ shutdown_task (void *cls,
1984 } 1975 }
1985 if (GNUNET_SCHEDULER_NO_TASK != mig_task) 1976 if (GNUNET_SCHEDULER_NO_TASK != mig_task)
1986 { 1977 {
1987 GNUNET_SCHEDULER_cancel (sched, mig_task); 1978 GNUNET_SCHEDULER_cancel (mig_task);
1988 mig_task = GNUNET_SCHEDULER_NO_TASK; 1979 mig_task = GNUNET_SCHEDULER_NO_TASK;
1989 } 1980 }
1990 if (GNUNET_SCHEDULER_NO_TASK != dht_task) 1981 if (GNUNET_SCHEDULER_NO_TASK != dht_task)
1991 { 1982 {
1992 GNUNET_SCHEDULER_cancel (sched, dht_task); 1983 GNUNET_SCHEDULER_cancel (dht_task);
1993 dht_task = GNUNET_SCHEDULER_NO_TASK; 1984 dht_task = GNUNET_SCHEDULER_NO_TASK;
1994 } 1985 }
1995 while (client_list != NULL) 1986 while (client_list != NULL)
@@ -2039,7 +2030,6 @@ shutdown_task (void *cls,
2039 block_ctx = NULL; 2030 block_ctx = NULL;
2040 GNUNET_CONFIGURATION_destroy (block_cfg); 2031 GNUNET_CONFIGURATION_destroy (block_cfg);
2041 block_cfg = NULL; 2032 block_cfg = NULL;
2042 sched = NULL;
2043 cfg = NULL; 2033 cfg = NULL;
2044 GNUNET_free_non_null (trustDirectory); 2034 GNUNET_free_non_null (trustDirectory);
2045 trustDirectory = NULL; 2035 trustDirectory = NULL;
@@ -2157,8 +2147,7 @@ transmit_to_peer (void *cls,
2157 { 2147 {
2158 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == cp->delayed_transmission_request_task); 2148 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == cp->delayed_transmission_request_task);
2159 cp->delayed_transmission_request_task 2149 cp->delayed_transmission_request_task
2160 = GNUNET_SCHEDULER_add_delayed (sched, 2150 = GNUNET_SCHEDULER_add_delayed (min_delay,
2161 min_delay,
2162 &delayed_transmission_request, 2151 &delayed_transmission_request,
2163 cp); 2152 cp);
2164 } 2153 }
@@ -2284,7 +2273,7 @@ add_to_pending_messages_for_peer (struct ConnectedPeer *cp,
2284 } 2273 }
2285 if (cp->delayed_transmission_request_task != GNUNET_SCHEDULER_NO_TASK) 2274 if (cp->delayed_transmission_request_task != GNUNET_SCHEDULER_NO_TASK)
2286 { 2275 {
2287 GNUNET_SCHEDULER_cancel (sched, cp->delayed_transmission_request_task); 2276 GNUNET_SCHEDULER_cancel (cp->delayed_transmission_request_task);
2288 cp->delayed_transmission_request_task = GNUNET_SCHEDULER_NO_TASK; 2277 cp->delayed_transmission_request_task = GNUNET_SCHEDULER_NO_TASK;
2289 } 2278 }
2290 /* need to schedule transmission */ 2279 /* need to schedule transmission */
@@ -2428,8 +2417,7 @@ transmit_query_continuation (void *cls,
2428 "Transmission of request failed, will try again later.\n"); 2417 "Transmission of request failed, will try again later.\n");
2429#endif 2418#endif
2430 if (pr->task == GNUNET_SCHEDULER_NO_TASK) 2419 if (pr->task == GNUNET_SCHEDULER_NO_TASK)
2431 pr->task = GNUNET_SCHEDULER_add_delayed (sched, 2420 pr->task = GNUNET_SCHEDULER_add_delayed (get_processing_delay (),
2432 get_processing_delay (),
2433 &forward_request_task, 2421 &forward_request_task,
2434 pr); 2422 pr);
2435 return; 2423 return;
@@ -2461,8 +2449,7 @@ transmit_query_continuation (void *cls,
2461 pr->used_targets[i].last_request_time = GNUNET_TIME_absolute_get (); 2449 pr->used_targets[i].last_request_time = GNUNET_TIME_absolute_get ();
2462 pr->used_targets[i].num_requests++; 2450 pr->used_targets[i].num_requests++;
2463 if (pr->task == GNUNET_SCHEDULER_NO_TASK) 2451 if (pr->task == GNUNET_SCHEDULER_NO_TASK)
2464 pr->task = GNUNET_SCHEDULER_add_delayed (sched, 2452 pr->task = GNUNET_SCHEDULER_add_delayed (get_processing_delay (),
2465 get_processing_delay (),
2466 &forward_request_task, 2453 &forward_request_task,
2467 pr); 2454 pr);
2468} 2455}
@@ -2572,8 +2559,7 @@ target_reservation_cb (void *cls,
2572 { 2559 {
2573 /* error in communication with core, try again later */ 2560 /* error in communication with core, try again later */
2574 if (pr->task == GNUNET_SCHEDULER_NO_TASK) 2561 if (pr->task == GNUNET_SCHEDULER_NO_TASK)
2575 pr->task = GNUNET_SCHEDULER_add_delayed (sched, 2562 pr->task = GNUNET_SCHEDULER_add_delayed (get_processing_delay (),
2576 get_processing_delay (),
2577 &forward_request_task, 2563 &forward_request_task,
2578 pr); 2564 pr);
2579 return; 2565 return;
@@ -2589,8 +2575,7 @@ target_reservation_cb (void *cls,
2589 "Selected peer disconnected!\n"); 2575 "Selected peer disconnected!\n");
2590#endif 2576#endif
2591 if (pr->task == GNUNET_SCHEDULER_NO_TASK) 2577 if (pr->task == GNUNET_SCHEDULER_NO_TASK)
2592 pr->task = GNUNET_SCHEDULER_add_delayed (sched, 2578 pr->task = GNUNET_SCHEDULER_add_delayed (get_processing_delay (),
2593 get_processing_delay (),
2594 &forward_request_task, 2579 &forward_request_task,
2595 pr); 2580 pr);
2596 return; 2581 return;
@@ -2611,8 +2596,7 @@ target_reservation_cb (void *cls,
2611 1, 2596 1,
2612 GNUNET_NO); 2597 GNUNET_NO);
2613 if (pr->task == GNUNET_SCHEDULER_NO_TASK) 2598 if (pr->task == GNUNET_SCHEDULER_NO_TASK)
2614 pr->task = GNUNET_SCHEDULER_add_delayed (sched, 2599 pr->task = GNUNET_SCHEDULER_add_delayed (get_processing_delay (),
2615 get_processing_delay (),
2616 &forward_request_task, 2600 &forward_request_task,
2617 pr); 2601 pr);
2618 return; /* this target round failed */ 2602 return; /* this target round failed */
@@ -2963,8 +2947,7 @@ forward_request_task (void *cls,
2963 GNUNET_h2s (&pr->query), 2947 GNUNET_h2s (&pr->query),
2964 delay.rel_value); 2948 delay.rel_value);
2965#endif 2949#endif
2966 pr->task = GNUNET_SCHEDULER_add_delayed (sched, 2950 pr->task = GNUNET_SCHEDULER_add_delayed (delay,
2967 delay,
2968 &forward_request_task, 2951 &forward_request_task,
2969 pr); 2952 pr);
2970 return; /* nobody selected */ 2953 return; /* nobody selected */
@@ -2999,7 +2982,7 @@ forward_request_task (void *cls,
2999 cp = GNUNET_CONTAINER_multihashmap_get (connected_peers, 2982 cp = GNUNET_CONTAINER_multihashmap_get (connected_peers,
3000 &psc.target.hashPubKey); 2983 &psc.target.hashPubKey);
3001 GNUNET_assert (NULL != cp); 2984 GNUNET_assert (NULL != cp);
3002 pr->irc = GNUNET_CORE_peer_change_preference (sched, cfg, 2985 pr->irc = GNUNET_CORE_peer_change_preference (cfg,
3003 &psc.target, 2986 &psc.target,
3004 GNUNET_CONSTANTS_SERVICE_TIMEOUT, 2987 GNUNET_CONSTANTS_SERVICE_TIMEOUT,
3005 GNUNET_BANDWIDTH_value_init (UINT32_MAX), 2988 GNUNET_BANDWIDTH_value_init (UINT32_MAX),
@@ -3263,8 +3246,7 @@ struct GNUNET_TIME_Relative art_delay;
3263 pr->do_remove = GNUNET_YES; 3246 pr->do_remove = GNUNET_YES;
3264 if (pr->task != GNUNET_SCHEDULER_NO_TASK) 3247 if (pr->task != GNUNET_SCHEDULER_NO_TASK)
3265 { 3248 {
3266 GNUNET_SCHEDULER_cancel (sched, 3249 GNUNET_SCHEDULER_cancel (pr->task);
3267 pr->task);
3268 pr->task = GNUNET_SCHEDULER_NO_TASK; 3250 pr->task = GNUNET_SCHEDULER_NO_TASK;
3269 } 3251 }
3270 GNUNET_break (GNUNET_YES == 3252 GNUNET_break (GNUNET_YES ==
@@ -3779,8 +3761,7 @@ process_local_reply (void *cls,
3779 } 3761 }
3780 /* no more results */ 3762 /* no more results */
3781 if (pr->task == GNUNET_SCHEDULER_NO_TASK) 3763 if (pr->task == GNUNET_SCHEDULER_NO_TASK)
3782 pr->task = GNUNET_SCHEDULER_add_now (sched, 3764 pr->task = GNUNET_SCHEDULER_add_now (&forward_request_task,
3783 &forward_request_task,
3784 pr); 3765 pr);
3785 return; 3766 return;
3786 } 3767 }
@@ -4267,8 +4248,7 @@ handle_p2p_get (void *cls,
4267 } 4248 }
4268 default: 4249 default:
4269 if (pr->task == GNUNET_SCHEDULER_NO_TASK) 4250 if (pr->task == GNUNET_SCHEDULER_NO_TASK)
4270 pr->task = GNUNET_SCHEDULER_add_now (sched, 4251 pr->task = GNUNET_SCHEDULER_add_now (&forward_request_task,
4271 &forward_request_task,
4272 pr); 4252 pr);
4273 } 4253 }
4274 4254
@@ -4448,13 +4428,11 @@ handle_start_search (void *cls,
4448/** 4428/**
4449 * Process fs requests. 4429 * Process fs requests.
4450 * 4430 *
4451 * @param s scheduler to use
4452 * @param server the initialized server 4431 * @param server the initialized server
4453 * @param c configuration to use 4432 * @param c configuration to use
4454 */ 4433 */
4455static int 4434static int
4456main_init (struct GNUNET_SCHEDULER_Handle *s, 4435main_init (struct GNUNET_SERVER_Handle *server,
4457 struct GNUNET_SERVER_Handle *server,
4458 const struct GNUNET_CONFIGURATION_Handle *c) 4436 const struct GNUNET_CONFIGURATION_Handle *c)
4459{ 4437{
4460 static const struct GNUNET_CORE_MessageHandler p2p_handlers[] = 4438 static const struct GNUNET_CORE_MessageHandler p2p_handlers[] =
@@ -4481,9 +4459,8 @@ main_init (struct GNUNET_SCHEDULER_Handle *s,
4481 }; 4459 };
4482 unsigned long long enc = 128; 4460 unsigned long long enc = 128;
4483 4461
4484 sched = s;
4485 cfg = c; 4462 cfg = c;
4486 stats = GNUNET_STATISTICS_create (sched, "fs", cfg); 4463 stats = GNUNET_STATISTICS_create ("fs", cfg);
4487 min_migration_delay = GNUNET_TIME_UNIT_SECONDS; 4464 min_migration_delay = GNUNET_TIME_UNIT_SECONDS;
4488 if ( (GNUNET_OK != 4465 if ( (GNUNET_OK !=
4489 GNUNET_CONFIGURATION_get_value_number (cfg, 4466 GNUNET_CONFIGURATION_get_value_number (cfg,
@@ -4509,8 +4486,7 @@ main_init (struct GNUNET_SCHEDULER_Handle *s,
4509 rt_entry_lifetime = GNUNET_LOAD_value_init (GNUNET_TIME_UNIT_FOREVER_REL); 4486 rt_entry_lifetime = GNUNET_LOAD_value_init (GNUNET_TIME_UNIT_FOREVER_REL);
4510 peer_request_map = GNUNET_CONTAINER_multihashmap_create (enc); 4487 peer_request_map = GNUNET_CONTAINER_multihashmap_create (enc);
4511 requests_by_expiration_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); 4488 requests_by_expiration_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN);
4512 core = GNUNET_CORE_connect (sched, 4489 core = GNUNET_CORE_connect (cfg,
4513 cfg,
4514 GNUNET_TIME_UNIT_FOREVER_REL, 4490 GNUNET_TIME_UNIT_FOREVER_REL,
4515 NULL, 4491 NULL,
4516 NULL, 4492 NULL,
@@ -4559,14 +4535,12 @@ main_init (struct GNUNET_SCHEDULER_Handle *s,
4559 "TRUST", 4535 "TRUST",
4560 &trustDirectory)); 4536 &trustDirectory));
4561 GNUNET_DISK_directory_create (trustDirectory); 4537 GNUNET_DISK_directory_create (trustDirectory);
4562 GNUNET_SCHEDULER_add_with_priority (sched, 4538 GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_HIGH,
4563 GNUNET_SCHEDULER_PRIORITY_HIGH,
4564 &cron_flush_trust, NULL); 4539 &cron_flush_trust, NULL);
4565 4540
4566 4541
4567 GNUNET_SERVER_add_handlers (server, handlers); 4542 GNUNET_SERVER_add_handlers (server, handlers);
4568 GNUNET_SCHEDULER_add_delayed (sched, 4543 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
4569 GNUNET_TIME_UNIT_FOREVER_REL,
4570 &shutdown_task, 4544 &shutdown_task,
4571 NULL); 4545 NULL);
4572 return GNUNET_OK; 4546 return GNUNET_OK;
@@ -4577,24 +4551,21 @@ main_init (struct GNUNET_SCHEDULER_Handle *s,
4577 * Process fs requests. 4551 * Process fs requests.
4578 * 4552 *
4579 * @param cls closure 4553 * @param cls closure
4580 * @param sched scheduler to use
4581 * @param server the initialized server 4554 * @param server the initialized server
4582 * @param cfg configuration to use 4555 * @param cfg configuration to use
4583 */ 4556 */
4584static void 4557static void
4585run (void *cls, 4558run (void *cls,
4586 struct GNUNET_SCHEDULER_Handle *sched,
4587 struct GNUNET_SERVER_Handle *server, 4559 struct GNUNET_SERVER_Handle *server,
4588 const struct GNUNET_CONFIGURATION_Handle *cfg) 4560 const struct GNUNET_CONFIGURATION_Handle *cfg)
4589{ 4561{
4590 active_migration = GNUNET_CONFIGURATION_get_value_yesno (cfg, 4562 active_migration = GNUNET_CONFIGURATION_get_value_yesno (cfg,
4591 "FS", 4563 "FS",
4592 "ACTIVEMIGRATION"); 4564 "ACTIVEMIGRATION");
4593 dsh = GNUNET_DATASTORE_connect (cfg, 4565 dsh = GNUNET_DATASTORE_connect (cfg);
4594 sched);
4595 if (dsh == NULL) 4566 if (dsh == NULL)
4596 { 4567 {
4597 GNUNET_SCHEDULER_shutdown (sched); 4568 GNUNET_SCHEDULER_shutdown ();
4598 return; 4569 return;
4599 } 4570 }
4600 datastore_get_load = GNUNET_LOAD_value_init (DATASTORE_LOAD_AUTODECLINE); 4571 datastore_get_load = GNUNET_LOAD_value_init (DATASTORE_LOAD_AUTODECLINE);
@@ -4606,13 +4577,12 @@ run (void *cls,
4606 "fs"); 4577 "fs");
4607 block_ctx = GNUNET_BLOCK_context_create (block_cfg); 4578 block_ctx = GNUNET_BLOCK_context_create (block_cfg);
4608 GNUNET_assert (NULL != block_ctx); 4579 GNUNET_assert (NULL != block_ctx);
4609 dht_handle = GNUNET_DHT_connect (sched, 4580 dht_handle = GNUNET_DHT_connect (cfg,
4610 cfg,
4611 FS_DHT_HT_SIZE); 4581 FS_DHT_HT_SIZE);
4612 if ( (GNUNET_OK != GNUNET_FS_indexing_init (sched, cfg, dsh)) || 4582 if ( (GNUNET_OK != GNUNET_FS_indexing_init (cfg, dsh)) ||
4613 (GNUNET_OK != main_init (sched, server, cfg)) ) 4583 (GNUNET_OK != main_init (server, cfg)) )
4614 { 4584 {
4615 GNUNET_SCHEDULER_shutdown (sched); 4585 GNUNET_SCHEDULER_shutdown ();
4616 GNUNET_DATASTORE_disconnect (dsh, GNUNET_NO); 4586 GNUNET_DATASTORE_disconnect (dsh, GNUNET_NO);
4617 dsh = NULL; 4587 dsh = NULL;
4618 GNUNET_DHT_disconnect (dht_handle); 4588 GNUNET_DHT_disconnect (dht_handle);