]> git.saurik.com Git - apt.git/commitdiff
acquire: Allow parallelizing methods without hosts
authorJulian Andres Klode <jak@debian.org>
Thu, 7 Jan 2016 16:06:55 +0000 (17:06 +0100)
committerJulian Andres Klode <jak@debian.org>
Thu, 7 Jan 2016 16:31:24 +0000 (17:31 +0100)
The maximum parallelization soft limit is the number of CPU
cores * 2 on systems defining _SC_NPROCESSORS_ONLN. The hard
limit in all cases is Acquire::QueueHost::Limit.

apt-pkg/acquire.cc

index 3010f55aa1ae27a2ad7a9f262a425c5b4eb694df..7a483f2727fdbb83d9c45a3e4fbe262e8dc341c8 100644 (file)
@@ -351,8 +351,28 @@ string pkgAcquire::QueueName(string Uri,MethodConfig const *&Config)
    if (Config->SingleInstance == true || QueueMode == QueueAccess)
       return U.Access;
 
-   string AccessSchema = U.Access + ':',
-       FullQueueName = AccessSchema + U.Host;
+   string AccessSchema = U.Access + ':';
+       string FullQueueName;
+
+   if (U.Host.empty())
+   {
+      long randomQueue = random();
+#ifdef _SC_NPROCESSORS_ONLN
+      long cpuCount = sysconf(_SC_NPROCESSORS_ONLN) * 2;
+#else
+      long cpuCount = _config->FindI("Acquire::QueueHost::Limit",10);
+#endif
+      if (cpuCount > 0)
+         randomQueue %= cpuCount;
+
+      strprintf(FullQueueName, "%s%ld", AccessSchema.c_str(), randomQueue);
+      if (Debug) {
+         clog << "Chose random queue " << FullQueueName << " for " << Uri << endl;
+      }
+   } else
+   {
+      FullQueueName = AccessSchema + U.Host;
+   }
    unsigned int Instances = 0, SchemaLength = AccessSchema.length();
 
    Queue *I = Queues;