summaryrefslogtreecommitdiff
path: root/ioreplay/src/replay/rtask.h
diff options
context:
space:
mode:
Diffstat (limited to 'ioreplay/src/replay/rtask.h')
-rw-r--r--ioreplay/src/replay/rtask.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/ioreplay/src/replay/rtask.h b/ioreplay/src/replay/rtask.h
new file mode 100644
index 0000000..35c5714
--- /dev/null
+++ b/ioreplay/src/replay/rtask.h
@@ -0,0 +1,69 @@
+// Copyright 2018 Mimecast Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef RTASK_H
+#define RTASK_H
+
+#include "../defaults.h"
+
+/**
+ * @brief The replay task definition
+ *
+ * The rtask holds all possible variables required to process a particular
+ * .replay line and to replay the corresponding I/O operation.
+ */
+typedef struct rtask_s_ {
+ void *worker; /* The responsible worker object */
+ void *process; /* The responsible process object */
+ unsigned long lineno; /**< The current line number */
+ unsigned long vsize; /**< The vsize */
+ char *toks[MAX_TOKENS+1]; /**< The tokens parsed from the .replay line */
+ char line[MAX_LINE_LEN]; /**< The remaining part of the .replay line */
+#ifdef RTASK_DEBUG
+ char *clone; /**< Used for debug purposes only */
+#endif
+} rtask_s;
+
+/**
+ * @brief Creates a new thread task object
+ *
+ * This function creates a new thread task object. Such a task object is used
+ * by the worker to hand over I/O tasks to the corresponding threads. The
+ * actual I/O work is performed by the threads then.
+ *
+ * @return The new thread task object
+ */
+rtask_s* rtask_new();
+
+/**
+ * @brief Destroys the replay task object
+ *
+ * @param t The thread task object to be destroyed
+ */
+void rtask_destroy(rtask_s* t);
+
+/**
+ * @brief Updates a reused/recycle task object
+ *
+ * @param task The task object to be updated
+ * @param worker The responsibe worker object
+ * @param process The responsible process object
+ * @param line The remaining line of the .replay file
+ * @param lineno The current line number of the .replay file
+ * @param vsize The vsize/path id
+ */
+void rtask_update(rtask_s *task, void *worker, void *process, char *line,
+ const long lineno, const long vsize);
+
+#endif // RTASK_H