Browse Source

make structs and stack allocate branches cache

pull/813/head
Andreas E Dalsgaard 5 years ago
parent
commit
14e62fa2c1
  1. 18
      src/policy_pfrd.cpp

18
src/policy_pfrd.cpp

@ -31,6 +31,11 @@ using std::vector;
namespace pfrd namespace pfrd
{ {
struct branch_info {
uint64_t spaceavail;
const string *basepath;
};
uint64_t get_int64_rand(uint64_t const& min, uint64_t const& max) uint64_t get_int64_rand(uint64_t const& min, uint64_t const& max)
{ {
return (((uint64_t)(unsigned int)rand() << 32) + (uint64_t)(unsigned int)rand()) % (max - min) + min; return (((uint64_t)(unsigned int)rand() << 32) + (uint64_t)(unsigned int)rand()) % (max - min) + min;
@ -51,10 +56,9 @@ namespace pfrd
fs::info_t info; fs::info_t info;
const Branch *branch; const Branch *branch;
const string *pfrdbasepath; const string *pfrdbasepath;
uint64_t cache_spaceavail_branches[256];
bool useable_branches[256];
const string *cache_basepath_branches[256];
size_t branch_count = branches_.size(); size_t branch_count = branches_.size();
bool useable_branches[branch_count];
branch_info branches_cache[branch_count];
error = ENOENT; error = ENOENT;
pfrdbasepath = NULL; pfrdbasepath = NULL;
@ -73,9 +77,9 @@ namespace pfrd
if(info.spaceavail < minfreespace_) if(info.spaceavail < minfreespace_)
error_and_continue(error,ENOSPC); error_and_continue(error,ENOSPC);
cache_spaceavail_branches[i] = info.spaceavail;
useable_branches[i] = true; useable_branches[i] = true;
cache_basepath_branches[i] = &branch->path;
branches_cache[i].spaceavail = info.spaceavail;
branches_cache[i].basepath = &branch->path;
sum += info.spaceavail; sum += info.spaceavail;
} }
@ -87,10 +91,10 @@ namespace pfrd
if (!useable_branches[i]) if (!useable_branches[i])
continue; continue;
index += cache_spaceavail_branches[i];
index += branches_cache[i].spaceavail;
if(index > byte_index) { if(index > byte_index) {
pfrdbasepath = cache_basepath_branches[i];
pfrdbasepath = branches_cache[i].basepath;
break; break;
} }
} }

Loading…
Cancel
Save