view src/lib-dict/dict-private.h @ 22325:e01bc3015b2f

lib-index: Check .log.2 rotation only when syncing Instead of also whenever appending transactions to .log file. This shouldn't change the behavior much, and it's needed for the following change to work correctly.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Tue, 11 Jul 2017 15:33:56 +0300
parents b74ab3872a80
children
line wrap: on
line source

#ifndef DICT_PRIVATE_H
#define DICT_PRIVATE_H

#include <time.h>
#include "dict.h"

struct dict_vfuncs {
	int (*init)(struct dict *dict_driver, const char *uri,
		    const struct dict_settings *set,
		    struct dict **dict_r, const char **error_r);
	void (*deinit)(struct dict *dict);
	int (*wait)(struct dict *dict);

	int (*lookup)(struct dict *dict, pool_t pool,
		      const char *key, const char **value_r);

	struct dict_iterate_context *
		(*iterate_init)(struct dict *dict, const char *const *paths,
				enum dict_iterate_flags flags);
	bool (*iterate)(struct dict_iterate_context *ctx,
			const char **key_r, const char **value_r);
	int (*iterate_deinit)(struct dict_iterate_context *ctx);

	struct dict_transaction_context *(*transaction_init)(struct dict *dict);
	int (*transaction_commit)(struct dict_transaction_context *ctx,
				  bool async,
				  dict_transaction_commit_callback_t *callback,
				  void *context);
	void (*transaction_rollback)(struct dict_transaction_context *ctx);

	void (*set)(struct dict_transaction_context *ctx,
		    const char *key, const char *value);
	void (*unset)(struct dict_transaction_context *ctx,
		      const char *key);
	void (*append)(struct dict_transaction_context *ctx,
		       const char *key, const char *value);
	void (*atomic_inc)(struct dict_transaction_context *ctx,
			   const char *key, long long diff);

	void (*lookup_async)(struct dict *dict, const char *key,
			     dict_lookup_callback_t *callback, void *context);
	bool (*switch_ioloop)(struct dict *dict);
	void (*set_timestamp)(struct dict_transaction_context *ctx,
			      const struct timespec *ts);
};

struct dict {
	const char *name;

	struct dict_vfuncs v;
	unsigned int iter_count;
	unsigned int transaction_count;
	struct dict_transaction_context *transactions;
};

struct dict_iterate_context {
	struct dict *dict;

	dict_iterate_callback_t *async_callback;
	void *async_context;

	unsigned int has_more:1;
	uint64_t row_count, max_rows;
};

struct dict_transaction_context {
	struct dict *dict;
	struct dict_transaction_context *prev, *next;

	struct timespec timestamp;

	unsigned int changed:1;
	unsigned int no_slowness_warning:1;
};

extern struct dict dict_driver_client;
extern struct dict dict_driver_file;
extern struct dict dict_driver_fs;
extern struct dict dict_driver_memcached;
extern struct dict dict_driver_memcached_ascii;
extern struct dict dict_driver_redis;
extern struct dict dict_driver_cdb;
extern struct dict dict_driver_fail;

extern struct dict_iterate_context dict_iter_unsupported;
extern struct dict_transaction_context dict_transaction_unsupported;

#endif