Reduce delay in tracker request

We eliminated 1 second delay between completion of name resolution for
tracker request and time when it is actually issued.  We also elimited
1 second delay after last torrent download exists and it is told to
DHTInteractionCommand.
This commit is contained in:
Tatsuhiro Tsujikawa
2016-01-19 11:24:57 +09:00
parent 7b2e797fdf
commit 8b93b12488
10 changed files with 105 additions and 23 deletions

View File

@@ -156,6 +156,7 @@ void UDPTrackerClientTest::testConnectFollowedByAnnounce()
std::string remoteAddr;
uint16_t remotePort;
Timer now;
std::shared_ptr<UDPTrackerRequest> recvReq;
std::shared_ptr<UDPTrackerRequest> req1(
createAnnounce("192.168.0.1", 6991, 0));
@@ -190,8 +191,12 @@ void UDPTrackerClientTest::testConnectFollowedByAnnounce()
uint64_t connectionId = 12345;
rv = createConnectReply(data, sizeof(data), connectionId, transactionId);
rv = tr.receiveReply(data, rv, req1->remoteAddr, req1->remotePort, now);
rv = tr.receiveReply(recvReq, data, rv, req1->remoteAddr, req1->remotePort,
now);
CPPUNIT_ASSERT_EQUAL(0, (int)rv);
if (rv == 0) {
CPPUNIT_ASSERT_EQUAL((int32_t)UDPT_ACT_CONNECT, recvReq->action);
}
// Now 2 requests get back to pending
CPPUNIT_ASSERT_EQUAL((size_t)2, tr.getPendingRequests().size());
@@ -229,15 +234,23 @@ void UDPTrackerClientTest::testConnectFollowedByAnnounce()
// Reply for req2
rv = createAnnounceReply(data, sizeof(data), transactionId2);
rv = tr.receiveReply(data, rv, req2->remoteAddr, req2->remotePort, now);
rv = tr.receiveReply(recvReq, data, rv, req2->remoteAddr, req2->remotePort,
now);
CPPUNIT_ASSERT_EQUAL(0, (int)rv);
if (rv == 0) {
CPPUNIT_ASSERT_EQUAL((int32_t)UDPT_ACT_ANNOUNCE, recvReq->action);
}
CPPUNIT_ASSERT_EQUAL((int)UDPT_STA_COMPLETE, req2->state);
CPPUNIT_ASSERT_EQUAL((int)UDPT_ERR_SUCCESS, req2->error);
// Reply for req1
rv = createAnnounceReply(data, sizeof(data), transactionId1, 2);
rv = tr.receiveReply(data, rv, req1->remoteAddr, req1->remotePort, now);
rv = tr.receiveReply(recvReq, data, rv, req1->remoteAddr, req1->remotePort,
now);
CPPUNIT_ASSERT_EQUAL(0, (int)rv);
if (rv == 0) {
CPPUNIT_ASSERT_EQUAL((int32_t)UDPT_ACT_ANNOUNCE, recvReq->action);
}
CPPUNIT_ASSERT_EQUAL((int)UDPT_STA_COMPLETE, req1->state);
CPPUNIT_ASSERT_EQUAL((int)UDPT_ERR_SUCCESS, req1->error);
CPPUNIT_ASSERT_EQUAL((size_t)2, req1->reply->peers.size());
@@ -280,6 +293,8 @@ void UDPTrackerClientTest::testRequestFailure()
std::string remoteAddr;
uint16_t remotePort;
Timer now;
std::shared_ptr<UDPTrackerRequest> recvReq;
{
std::shared_ptr<UDPTrackerRequest> req1(
createAnnounce("192.168.0.1", 6991, 0));
@@ -315,7 +330,12 @@ void UDPTrackerClientTest::testRequestFailure()
tr.requestSent(now);
rv = createErrorReply(data, sizeof(data), transactionId, "error");
rv = tr.receiveReply(data, rv, req1->remoteAddr, req1->remotePort, now);
rv = tr.receiveReply(recvReq, data, rv, req1->remoteAddr, req1->remotePort,
now);
CPPUNIT_ASSERT_EQUAL((ssize_t)0, rv);
if (rv == 0) {
CPPUNIT_ASSERT_EQUAL((int32_t)UDPT_ACT_CONNECT, recvReq->action);
}
CPPUNIT_ASSERT_EQUAL((int)UDPT_STA_COMPLETE, req1->state);
CPPUNIT_ASSERT_EQUAL((int)UDPT_ERR_TRACKER, req1->error);
CPPUNIT_ASSERT_EQUAL((int)UDPT_STA_COMPLETE, req2->state);
@@ -338,7 +358,8 @@ void UDPTrackerClientTest::testRequestFailure()
uint64_t connectionId = 12345;
rv = createConnectReply(data, sizeof(data), connectionId, transactionId);
rv = tr.receiveReply(data, rv, req1->remoteAddr, req1->remotePort, now);
rv = tr.receiveReply(recvReq, data, rv, req1->remoteAddr, req1->remotePort,
now);
CPPUNIT_ASSERT_EQUAL(0, (int)rv);
rv = tr.createRequest(data, sizeof(data), remoteAddr, remotePort, now);
@@ -348,7 +369,8 @@ void UDPTrackerClientTest::testRequestFailure()
tr.requestSent(now);
rv = createErrorReply(data, sizeof(data), transactionId, "announce error");
rv = tr.receiveReply(data, rv, req1->remoteAddr, req1->remotePort, now);
rv = tr.receiveReply(recvReq, data, rv, req1->remoteAddr, req1->remotePort,
now);
CPPUNIT_ASSERT_EQUAL((int)UDPT_STA_COMPLETE, req1->state);
CPPUNIT_ASSERT_EQUAL((int)UDPT_ERR_TRACKER, req1->error);
CPPUNIT_ASSERT(tr.getConnectRequests().empty());
@@ -365,6 +387,8 @@ void UDPTrackerClientTest::testTimeout()
uint16_t remotePort;
Timer now;
UDPTrackerClient tr;
std::shared_ptr<UDPTrackerRequest> recvReq;
{
std::shared_ptr<UDPTrackerRequest> req1(
createAnnounce("192.168.0.1", 6991, 0));
@@ -414,7 +438,8 @@ void UDPTrackerClientTest::testTimeout()
uint64_t connectionId = 12345;
rv = createConnectReply(data, sizeof(data), connectionId, transactionId);
rv = tr.receiveReply(data, rv, req1->remoteAddr, req1->remotePort, now);
rv = tr.receiveReply(recvReq, data, rv, req1->remoteAddr, req1->remotePort,
now);
CPPUNIT_ASSERT_EQUAL(0, (int)rv);
rv = tr.createRequest(data, sizeof(data), remoteAddr, remotePort, now);