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;
I != Fetcher.ItemsEnd(); ++I)
{
// no need to drop privileges for a complete file
- if ((*I)->Complete == true)
+ if ((*I)->Complete == true || (*I)->Status != pkgAcquire::Item::StatIdle)
continue;
// if destination file is inaccessible all hope is lost for privilege dropping
{
QItem **I = &Items;
// move to the end of the queue and check for duplicates here
- HashStringList const hsl = Item.Owner->GetExpectedHashes();
for (; *I != 0; I = &(*I)->Next)
- if (Item.URI == (*I)->URI || hsl == (*I)->Owner->GetExpectedHashes())
+ if (Item.URI == (*I)->URI)
{
if (_config->FindB("Debug::pkgAcquire::Worker",false) == true)
std::cerr << " @ Queue: Action combined for " << Item.URI << " and " << (*I)->URI << std::endl;