extern uns sorter_trace, sorter_presort_bufsize, sorter_stream_bufsize;
extern uns sorter_debug, sorter_min_radix_bits, sorter_max_radix_bits;
extern u64 sorter_bufsize;
+extern struct fb_params sorter_fb_params;
#define SORT_TRACE(x...) do { if (sorter_trace) log(L_DEBUG, x); } while(0)
#define SORT_XTRACE(level, x...) do { if (sorter_trace >= level) log(L_DEBUG, x); } while(0)
#include "lib/sorter/common.h"
uns sorter_trace;
-uns sorter_presort_bufsize = 65536;
+uns sorter_presort_bufsize = 65536; /* FIXME: kill after removing the old sorter */
uns sorter_stream_bufsize = 65536;
u64 sorter_bufsize = 65536;
uns sorter_debug;
uns sorter_min_radix_bits;
uns sorter_max_radix_bits;
+struct fb_params sorter_fb_params;
static struct cf_section sorter_config = {
CF_ITEMS {
CF_UNS("Trace", &sorter_trace),
CF_UNS("PresortBuffer", &sorter_presort_bufsize),
CF_UNS("StreamBuffer", &sorter_stream_bufsize),
+ CF_SECTION("FileAccess", &sorter_fb_params, &fbpar_cf),
CF_U64("SortBuffer", &sorter_bufsize),
CF_UNS("Debug", &sorter_debug),
CF_UNS("MinRadixBits", &sorter_min_radix_bits),
{
if (b->flags & SBF_SWAPPED_OUT)
{
- if (sorter_stream_bufsize) /* FIXME: Needs better configuration, probably semi-automatic one */
- b->fb = bopen(b->filename, O_RDWR, sorter_stream_bufsize);
- else
- b->fb = fbdir_open(b->filename, O_RDWR, NULL);
+ b->fb = bopen_file(b->filename, O_RDWR, &sorter_fb_params); /* FIXME: Something different for small buckets? */
if (b->flags & SBF_OPEN_WRITE)
bseek(b->fb, 0, SEEK_END);
bconfig(b->fb, BCONFIG_IS_TEMP_FILE, 1);
else
{
ASSERT(!(b->flags & (SBF_OPEN_READ | SBF_DESTROYED)));
- if (sorter_stream_bufsize)
- b->fb = bopen_tmp(sorter_stream_bufsize);
- else
- b->fb = fbdir_open_tmp(NULL);
+ b->fb = bopen_tmp_file(&sorter_fb_params);
if (sorter_debug & SORT_DEBUG_KEEP_BUCKETS)
bconfig(b->fb, BCONFIG_IS_TEMP_FILE, 0);
b->flags |= SBF_OPEN_WRITE;
bzero(&ctx, sizeof(ctx));
#ifdef SORT_INPUT_FILE
- ctx.in_fb = bopen(in, O_RDONLY, sorter_stream_bufsize);
+ ctx.in_fb = bopen_file(in, O_RDONLY, &sorter_fb_params);
ctx.in_size = bfilesize(ctx.in_fb);
#elif defined(SORT_INPUT_FB)
ctx.in_fb = in;