/** \file db.h data structures common to all database tools */
+ #include <sys/select.h>
+
int find_audio_files(const char *dirname, int (*f)(const char *, const char *));
/**
* passed \a update_audio_file().
*
*/
- void (*update_audio_file)(char *audio_file);
+ void (*update_audio_file)(char *audio_file);
/**
*
* shutdown this database tool and free all resources
* This gets called whenever the database tool changes (via the cdt command),
* or when para_server receives the HUP signal, or when para_server shuts down.
* It is assumed to succeed.
- */
+ */
void (*shutdown)(void);
+ /**
+ *
+ * add file descriptors to fd_sets
+ *
+ * The pre_select function of the activated database tool gets called just
+ * before para_server enters its main select loop. The dbtool may add its own
+ * file descriptors to the \a rfds or the \a wfds set.
+ *
+ * If a file descriptor was added, \a max_fileno must be increased by
+ * this function, if neccessary.
+ *
+ * \sa select(2)
+ */
+ int (*pre_select)(fd_set *rfds, fd_set *wfds);
+ /**
+ * handle the file descriptors which are ready for I/O
+ *
+ * If the pre_select hook added one ore more file descriptors to the read or write
+ * set, this is the hook to check the result and do any I/O on those descriptors
+ * which are ready for reading/writing.
+ */
+ void (*post_select)(fd_set *rfds, fd_set *wfds);
};
int mysql_dbtool_init(struct dbtool*);
-int dopey_dbtool_init(struct dbtool*);
+int plm_dbtool_init(struct dbtool*);
+int random_dbtool_init(struct dbtool*);
/** the list of supported database tools */
struct dbtool dblist[] = {
{
- .name = "dopey",
- .init = dopey_dbtool_init,
+ .name = "random",
+ .init = random_dbtool_init,
+ .update_audio_file = NULL,
+ },
+ {
+ .name = "plm",
+ .init = plm_dbtool_init,
.update_audio_file = NULL,
+ .pre_select = NULL,
+ .post_select = NULL,
},
#ifdef HAVE_MYSQL
{
.name = "mysql",
.init = mysql_dbtool_init,
.update_audio_file = NULL,
+ .pre_select = NULL,
+ .post_select = NULL,
},
#endif
{
mmd->dbt_change = -1; /* no change nec., set to new dbt num by com_cdt */
if (!dblist[1].name)
- goto dopey;
+ goto random;
if (conf.dbtool_given) {
for (i = 0; dblist[i].name; i++) {
if (strcmp(dblist[i].name, conf.dbtool_arg))
if (dblist[i].init(&dblist[i]) < 0) {
PARA_WARNING_LOG("init %s failed",
dblist[i].name);
- goto dopey;
+ goto random;
}
mmd->dbt_num = i;
return;
}
- PARA_WARNING_LOG("%s", "no such dbtool, switching to dopey\n");
- goto dopey;
+ PARA_WARNING_LOG("%s", "no such dbtool, switching to random\n");
+ goto random;
}
/* use the first dbtool that works
- * (assuming that dopey always works)
+ * (assuming that random always works)
*/
for (i = 1; dblist[i].name; i++) {
int ret = dblist[i].init(&dblist[i]);
PARA_CRIT_LOG("%s init failed: %s\n", dblist[i].name,
PARA_STRERROR(-ret));
}
-dopey:
+random:
mmd->dbt_num = 0;
dblist[0].init(&dblist[0]); /* always successful */
}
return;
}
/* init failed */
- PARA_ERROR_LOG("%s -- switching to dopey\n", PARA_STRERROR(-ret));
+ PARA_ERROR_LOG("%s -- switching to the random dbtool\n", PARA_STRERROR(-ret));
dblist[0].init(&dblist[0]);
mmd->dbt_num = 0;
}