From 0fcf9f8ddaeaeb655c4cbe8232067dd7908d2e9b Mon Sep 17 00:00:00 2001 From: Kevin Lynx Date: Wed, 3 Jul 2013 21:58:06 +0800 Subject: [PATCH] make the cache updating process only one, and make stats to cache --- ebin/db_frontend.beam | Bin 3356 -> 3432 bytes ebin/dhtcrawler.app | 9 +++++---- ebin/http_cache.beam | Bin 6316 -> 6644 bytes ebin/http_handler.beam | Bin 8744 -> 9020 bytes 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ebin/db_frontend.beam b/ebin/db_frontend.beam index 3746a3b4985db33e45d0893249755615cedc8f92..695ff96b705c4974e69861da024d102aa91eebb4 100644 GIT binary patch delta 2102 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 aC;WE2E8Y$7j`zfS;k^L^*?%ww2;dLR7B9sB diff --git a/ebin/dhtcrawler.app b/ebin/dhtcrawler.app index ddaa5ee..a2096a3 100644 --- a/ebin/dhtcrawler.app +++ b/ebin/dhtcrawler.app @@ -1,14 +1,15 @@ {application,dhtcrawler, [{description,"A DHT crawler to index magnet hash to torrent"}, - {vsn,"bb2cbfc"}, + {vsn,"0dcf085"}, {registered,[dht_crawler_sup]}, {applications,[kernel,stdlib,crypto,public_key,ssl,inets,bson, mongodb]}, {mod,{crawler_app,[]}}, {modules,[bt_conn,bt_message,crawler_app,crawler_http, crawler_stats,crawler_sup,db_frontend,db_hash, - db_hash_reader,db_hash_reader_sup,db_store_mongo, - db_system,dht_monitor,hash_reader_stats,http_cache, - http_handler,string_split,time_util,tor_download, + db_hash_reader,db_hash_reader_sup,db_loc_torrent, + db_store_mongo,db_system,dht_monitor, + hash_reader_stats,http_cache,http_handler,loc_torrent, + loc_torrent_sup,string_split,time_util,tor_download, tor_download_stats,torrent_file,transfer,urldecode, vlog]}]}. diff --git a/ebin/http_cache.beam b/ebin/http_cache.beam index e50f81c2aac1f5e2411c020cb4ffd5840f1ef734..071c15499c9c3cc4cfdcd5550cf19c252974b914 100644 GIT binary patch literal 6644 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 literal 6316 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 Okuxy+|Mz_t!~P3?B-!8q diff --git a/ebin/http_handler.beam b/ebin/http_handler.beam index 1ba277d60e6f6090a861f1dbb51cb551e3125e5d..8bb61cf0130c7a0e1ea319534d104747389fbda3 100644 GIT binary patch delta 6931 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 Va1~q)*TB&zDTcIw6!>+={{T(sa(e&( delta 6627 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