47 lines
1.6 KiB
C
47 lines
1.6 KiB
C
/*
|
|
* Copyright (c) 2009-Present, Redis Ltd.
|
|
* All rights reserved.
|
|
*
|
|
* Licensed under your choice of the Redis Source Available License 2.0
|
|
* (RSALv2) or the Server Side Public License v1 (SSPLv1).
|
|
*/
|
|
|
|
#ifndef __BIO_H
|
|
#define __BIO_H
|
|
|
|
typedef void lazy_free_fn(void *args[]);
|
|
typedef void comp_fn(uint64_t user_data);
|
|
|
|
typedef enum bio_worker_t {
|
|
BIO_WORKER_CLOSE_FILE = 0,
|
|
BIO_WORKER_AOF_FSYNC,
|
|
BIO_WORKER_LAZY_FREE,
|
|
BIO_WORKER_NUM
|
|
} bio_worker_t;
|
|
|
|
/* Background job opcodes */
|
|
typedef enum bio_job_type_t {
|
|
BIO_CLOSE_FILE = 0, /* Deferred close(2) syscall. */
|
|
BIO_AOF_FSYNC, /* Deferred AOF fsync. */
|
|
BIO_LAZY_FREE, /* Deferred objects freeing. */
|
|
BIO_CLOSE_AOF,
|
|
BIO_COMP_RQ_CLOSE_FILE, /* Job completion request, registered on close-file worker's queue */
|
|
BIO_COMP_RQ_AOF_FSYNC, /* Job completion request, registered on aof-fsync worker's queue */
|
|
BIO_COMP_RQ_LAZY_FREE, /* Job completion request, registered on lazy-free worker's queue */
|
|
BIO_NUM_OPS
|
|
} bio_job_type_t;
|
|
|
|
/* Exported API */
|
|
void bioInit(void);
|
|
unsigned long bioPendingJobsOfType(int type);
|
|
void bioDrainWorker(int job_type);
|
|
void bioKillThreads(void);
|
|
void bioCreateCloseJob(int fd, int need_fsync, int need_reclaim_cache);
|
|
void bioCreateCloseAofJob(int fd, long long offset, int need_reclaim_cache);
|
|
void bioCreateFsyncJob(int fd, long long offset, int need_reclaim_cache);
|
|
void bioCreateLazyFreeJob(lazy_free_fn free_fn, int arg_count, ...);
|
|
void bioCreateCompRq(bio_worker_t assigned_worker, comp_fn *func, uint64_t user_data);
|
|
|
|
|
|
#endif
|