From 63eb4fe3c8555881cb541bba811ebd92f76af381 Mon Sep 17 00:00:00 2001 From: NikolajDanger Date: Sat, 27 May 2023 20:06:53 +0200 Subject: [PATCH] :sparkles: --- bachelor-project-nikolaj.pdf | Bin 239054 -> 231918 bytes bachelor-project-nikolaj.tex | 157 +++++++++++++++++++++-------------- 2 files changed, 94 insertions(+), 63 deletions(-) diff --git a/bachelor-project-nikolaj.pdf b/bachelor-project-nikolaj.pdf index aefa1f2650e5f4d9372fd51983fc9e321cf0e1ef..44f13a658ddc2f3583db3e881ab3ba4ec60b72a9 100644 GIT binary patch delta 48376 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 delta 55522 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 diff --git a/bachelor-project-nikolaj.tex b/bachelor-project-nikolaj.tex index 0f08e6c..c12c61d 100644 --- a/bachelor-project-nikolaj.tex +++ b/bachelor-project-nikolaj.tex @@ -8,6 +8,9 @@ \usepackage{biblatex} \usepackage{float} \usepackage{fontspec} +\usepackage{enumitem} + +\usetikzlibrary{arrows.meta, positioning, calc, quotes} % --- Configuration --- \bibliography{src/references} @@ -71,62 +74,92 @@ \caption{An example of a heterogeneous workflow} \end{figure} - The example workflow requires several "halting-points", in which data should be transferred between the instrument, the instrument storage, centralized storage, High Performance Computing (HPC) resources, and a human interaction point. Network events can, for the reasons outlined earlier in the section, be used to prevent the workflow from halting when these points are reached. + The example workflow requires several checkpoints in which data should be transferred between the instrument, the instrument storage, centralized storage, High Performance Computing (HPC) resources, and a human interaction point. Network events can, for the reasons outlined earlier in the section, be used to prevent the workflow from halting when these points are reached. \subsection{Background} \subsubsection{The structure of MEOW} - The MEOW event-based scheduler consists of four main components: \textit{monitors}, \textit{handlers}, \textit{the conductor}, and \textit{the runner}. + The MEOW event-based scheduler consists of four main components: \textit{monitors}, \textit{handlers}, \textit{conductors}, and \textit{the runner}. - Monitors listen for triggering events. They are initialized with a number of \textit{patterns}, which describe the triggering event. When a pattern's triggering event occurs, the monitor signals to the conductor that the pattern has been triggered, and schedules a job that has been associated with the pattern. + Monitors listen for triggering events. They are initialized with a number of \textit{rules}, which each include a \textit{pattern} and \textit{recipe}. \textit{Patterns} describe the triggering event. For file events, the patterns describe a path that should trigger the event when changed. \textit{Recipes} describe the specific action that should be taken when the rule is triggered. When a pattern's triggering event occurs, the monitor sends an event, which contains the rule and the specifics of the event, to the event queue. + + Handlers manage the event queue. They unpack and analyze events in the event queue. If they are valid, a job is created from the recipe, which is then sent to the job queue. + + Conductors manage the jobs queue. They execute the jobs that have been created by the handlers. + + Finally, the runner is the main program that orchestrates all these components. Each instance of the runner incorporates at least one instance of a monitor, handler, and conductor, and it holds the event and job queues. \begin{figure}[H] \begin{center} - \includegraphics[width=0.6\textwidth]{src/monitor.png} - \end{center} - \caption{\textbf{Redo this to fit with the current version.} The monitor's role in MEOW's event-based system.} - \end{figure} + \begin{tikzpicture}[ + element/.style={draw, rectangle, rounded corners, minimum height = 1cm}, + arrow/.style={-Triangle, ultra thick,shorten >=4pt} + ] + \node[element,text width=8cm,align=center,fill=orange!30!white] at (0,2) (run) {Runner}; + \node[element,fill=cyan!30!white] at (-2,1.3) (eq) {Event Queue}; + \node[element,fill=yellow!50!white] at (2,1.3) (jq) {Job Queue}; + \node[element,fill=blue!30!white] at (-5,-1.5) (mon) {Monitor}; + \node[text width=2cm,align=center] at (-5,-2.8) {Listens for triggering events}; + \node[element,fill=green!30!white] at (0,-4) (han) {Handler}; + \node[text width=2cm,align=center] at (0,-5.35) {Validates events and creates jobs}; + \node[element,fill=red!40!white] at (5,-1.5) (con) {Conductor}; + \node[text width=2cm,align=center] at (5,-2.6) {Executes jobs}; - \begin{tcolorbox}[colback=blue!30!white] - I haven't used "Resources" to describe the job queue. Should I do that or should I rephrase the diagram to be more in line with the rest of the project? - \end{tcolorbox} - - Handlers perform actions and jobs on behalf of the scheduler. They are initialized with a number of \textit{recipes}, which describe the action to be taken. The handler starts a job when signal to do so by the conductor. - - The conductor handles the jobs queue. It is initialized with a number of rules, which a pattern paired with a recipe. When a monitor sends it a triggered pattern, the rules are checked for that pattern. If one or more rules contain that pattern, the corresponding recipes are triggered in their handler. - - Finally, the runner is the main program that orchestrates all these components. Each instance of the runner incorporates at least one instance of a monitor, handler, and conductor. - - \begin{figure}[H] - \begin{center} - \begin{tikzpicture} - \node[draw,rectangle,rounded corners,text width=8cm,align=center] at (0,2) (run) {Runner}; - \node[draw,rectangle,rounded corners] at (0,0) (con) {Conductor}; - \node[draw,rectangle,rounded corners] at (3,-2) (mon) {Monitor}; - \node[draw,rectangle,rounded corners] at (-3,-2) (han) {Handler}; + \draw[arrow] (mon) -- (eq) node[pos=0.5,above left=-10pt,text width=2cm, align=center] {Schedules events}; + \draw[arrow] (eq) -- (han) node[pos=0.8,below left=-20pt,text width=2cm, align=center] {Pulls events}; + \draw[arrow] (han) -- (jq) node[pos=0.2,right,text width=2cm, align=center] {Schedules job}; + \draw[arrow] (jq) -- (con) node[pos=0.5,above right=-10pt,text width=2cm, align=center] {Pulls jobs}; \end{tikzpicture} \end{center} - \caption{\textbf{WIP.} How the elements of MEOW interact.} + \caption{How the elements of MEOW interact} + \end{figure} + + \begin{figure}[H] + \begin{center} + \begin{tikzpicture}[ + element/.style={draw, rectangle, rounded corners, minimum height = 1cm, text width=2cm, align=center}, + every edge/.style={-Triangle, draw, ultra thick, bend left, text width= 2cm, align=center,shorten >=5pt,shorten <=5pt}, + bend angle = 15 + ] + \node[element,fill=blue!30!white,anchor=south] at (90:2.5) (mon) {\textbf{Monitor}}; + \node[element,fill=cyan!30!white,anchor=south west] at (30:2) (eq) {\textbf{Event Queue}}; + \node[element,fill=green!30!white,anchor=north west] at (330:2) (han) {\textbf{Handler}}; + \node[element,fill=yellow!50!white,anchor=north] at (270:2.5) (jq) {\textbf{Job Queue}}; + \node[element,fill=red!40!white,anchor=north east] at (210:2) (con) {\textbf{Conductor}}; + \node[element,fill=lightgray!80!white,anchor=south east] at (150:2) (sto) {\textbf{Storage}}; + + \draw (mon) edge ["Schedules events on"] (eq); + \draw (eq) edge ["Events are interpreted by"] (han); + \draw (han) edge ["Schedules jobs to"] (jq); + \draw (jq) edge ["Jobs executed by"] (con); + \draw (con) edge ["Writes output to"] (sto); + \draw (sto) edge ["Events are seen by"] (mon); + \end{tikzpicture} + \end{center} + \caption{The cycle of MEOW's file events} \end{figure} \subsubsection{The \texttt{meow\_base} codebase} \texttt{meow\_base}\autocite{MeowBase} is an implementation of MEOW written in python. It is written to be modular, using base classes for each element in order to ease the implementation of additional handlers, monitors, etc. - \begin{tcolorbox}[colback=blue!30!white] - How much should I include here? - \end{tcolorbox} - - \begin{tcolorbox}[colback=lightgray!30!white] - \begin{itemize} - \item The runner (brief) - \item Conductors (brief) - \item Recipes and handlers (brief) - \item File event monitor (Watchdog) - \item Events (important to clarify how file events work since I refer to it in the method section) - \item Testing (brief) + The relevant parts of the implementation are: + \begin{itemize} + \setlength{\itemsep}{-5pt} + \item \textbf{Events} are python dictionaries, containing the following items:\begin{itemize}[topsep=-10pt] + \setlength{\itemsep}{-5pt} + \item \texttt{EVENT\_PATH}: The path of the triggering file. + \item \texttt{EVENT\_TYPE}: The type of event, e.g. \texttt{"watchdog"}. + \item \texttt{EVENT\_RULE}: The rule that triggered the event, which contains the recipe that the handler will turn into a job. + \item \texttt{EVENT\_TIME}: The timestamp of the triggering event. + \item Any extra data supplied by the monitor. File events are by default initialized with the base directory of the event and a hash of the event's triggering path. \end{itemize} - \end{tcolorbox} + \item \textbf{The file event monitor} inherits from the \texttt{BaseMonitor} class. It uses the \texttt{Watchdog} module to monitor given directories for changes. The Watchdog monitor is initialized with an instance of the \texttt{WatchdogEventHandler} class as its event handler. When the Watchdog monitor is triggered by a file event, the \texttt{handle\_event} method is called on the event handler, which in turn creates an \texttt{event} based on the specifics of the triggering event. The event is then sent to the runner to be put in the even queue. + \item \textbf{The runner} is implemented as the class \texttt{MeowRunner}. When initialized with at least one instance of a monitor, handler, and conductor, it validates them. When started, all the monitors, handlers, and conductors it was initialized with are started. It also creates \texttt{pipes} for the communication between each element and the runner. + \item \textbf{Recipes} inherit from the \texttt{BaseRecipe} class. They mainly exist to contain data about a given recipe, but also contain validation checks. + \item \textbf{Handlers} inherit from the \texttt{BaseHandler} class. Handler classes are for a specific type of job, like the execution of bash scripts. When started, it enters an infinite loop, where it asks the runner for a valid event in the event queue, and then creates a job for the recipe, and sends it to the runner to put in the job queue. + \item \textbf{Conductors} inherit from the \texttt{BaseConductor} class. Conductor classes are for a specific type of job, like the execution of bash scripts. When started, it enters an infinite loop, where it asks the runner for a valid job in the job queue, and then attempts to execute it. + \end{itemize} \subsubsection{The \texttt{socket} library} @@ -162,56 +195,54 @@ \subsection{Design of the network event pattern} In the implementation of a pattern for network events, a key consideration was to integrate it seamlessly with the existing MEOW codebase. This required designing the pattern to behave similarly to the file event pattern when interacting with other elements of the scheduler. A central principle in this design was maintaining the loose coupling between patterns and recipes, minimizing direct dependencies between separate components. While this might not be possible for every theoretical recipe and pattern, designing for it could greatly improve future compatibility. - Network event patterns are initialized with a triggering port, analogous to the triggering path used in file event patterns. This approach inherently limits the number of unique patterns to the number of ports that can be opened on the machine. However, given the large number of potential ports, this constraint is unlikely to present a practical issue. An alternative approach could have involved triggering patterns using a part of the sent message, essentially acting as a "header". However, this would complicate the process since the monitor is otherwise designed to receive raw data. To keep the implementation as straightforward as possible and to allow for future enhancements, I opted for simplicity over complexity in this initial design. + The \texttt{NetworkEventPattern} class is initialized with a triggering port, analogous to the triggering path used in file event patterns. This approach inherently limits the number of unique patterns to the number of ports that can be opened on the machine. However, given the large number of potential ports, this constraint is unlikely to present a practical issue. An alternative approach could have involved triggering patterns using a part of the sent message, essentially acting as a "header". However, this would complicate the process since the monitor is otherwise designed to receive raw data. To keep the implementation as straightforward as possible and to allow for future enhancements, I opted for simplicity and broad utility over complexity in this initial design. - Once the network monitor is started, it opens sockets that start listening on the each of the ports specified in the patterns it was initialized with. This is consistent with the behavior of the file event monitor, which monitors the triggering paths of the patterns it was initialized with. + When the \texttt{NetworkMonitor} instance is started, it starts a number of \texttt{Listener} instances, equal to the number of ports specified in its patterns. Patterns not associated with a rule are not considered, since they will not result in an event. Only one listener is started per port, so patterns with the same port use the same listener. The listeners each open a socket connected to their respective ports. This is consistent with the behavior of the file event monitor, which monitors the triggering paths of the patterns it was initialized with. \subsection{Integrating network events into the existing codebase} - The data received by the network monitor is written to a temporary file, a design choice that serves two purposes. + The data received by the network monitor is written to a temporary file; this design choice serves three purposes: Firstly, this method is a practical solution for managing memory usage during data transfer, particularly for large data sets. By writing received data directly to a file, we bypass the need to store the entire file in memory at once, effectively addressing potential memory limitations. - Secondly, this approach allows the leveraging of existing infrastructure built for file events. The newly written temporary file is passed as the "triggering path" of the event, mirroring the behavior of file events. This approach allows network events to utilize the recipes initially designed for file events without modification, preserving the principle of loose coupling. This integration maintains the overall flexibility and efficiency of MEOW while extending its capabilities to handle network events. + Secondly, the method allows the monitor to receive multiple files simultaneously, since receiving the file will be done by separate threads. This means that a single large file will not "block up" the network port for too long. + + Lastly, this approach allows the leveraging of existing infrastructure built for file events. The newly written temporary file is passed as the "triggering path" of the event, mirroring the behavior of file events. This approach allows network events to utilize the recipes initially designed for file events without modification, preserving the principle of loose coupling. This integration maintains the overall flexibility and efficiency of MEOW while extending its capabilities to handle network events. + + The method will be slower, since writing to storage takes longer than keeping the data in memory, but I have decided that the positives outweigh the negatives. \subsection{Testing} + The unit tests for the network event monitor were inspired by the already existing tests for the file event monitor. Since the aim of the monitor was to emulate the behavior of the file event monitor as closely as possible, using the already existing tests with minimal changes proved an effective way of staying close to that goal. \section{Results} - \begin{tcolorbox}[colback=lightgray!30!white] - Does it work? How well? - \end{tcolorbox} - - % \subsection{Testing} + The testing suite designed for the monitor comprised of 26 distinct tests, all of which successfully passed. These tests were designed to assess the robustness, reliability, and functionality of the monitor. They evaluated the monitor's ability to successfully manage network event patterns, detect network events, and communicate with the runner to send events to the event queue. \subsection{Discussion} \begin{tcolorbox}[colback=lightgray!30!white] - With the hindsight of the results, what could I have done better? + With the hindsight of the results, what could I have done better? \end{tcolorbox} \subsection{Future Work} - \begin{tcolorbox}[colback=lightgray!30!white] - What should someone do if they want to fix my mistakes, or expand on them further. - \begin{itemize} - \item Implementation of the other options mentioned when discussing the socket library. - \item Triggering on a header item in addition to port - \end{itemize} - \end{tcolorbox} + \subsubsection{Use-cases for Network Events} + Since the purpose of the project was adding a feature to a workflow manager, it's important to consider its integration within real-life workflows and consider future workflow designs that will capitalize on Network Events. - \begin{tcolorbox}[colback=lightgray!30!white] - Give context to following paragraph. - \end{tcolorbox} - One specific example of a use-case where network event triggers could prove useful is the workflow for The Brain Imaging Data Structure (BIDS). The BIDS workflow requires data to be sent between multiple machines and validated by a user. Network event triggers could streamline this process by automatically initiating data transfer tasks when specific conditions are met, thereby reducing the need for manual management. Additionally, network triggers could facilitate user validation by allowing users to manually prompt the continuation of the workflow through specific network requests, simplifying the user's role in the validation process. + One specific example of an application where network event triggers could prove useful is the workflow for The Brain Imaging Data Structure (BIDS). The BIDS workflow requires data to be sent between multiple machines and validated by a user. Network event triggers could streamline this process by automatically initiating data transfer tasks when specific conditions are met, thereby reducing the need for manual management. Additionally, network triggers could facilitate user validation by allowing users to manually prompt the continuation of the workflow through specific network requests, simplifying the user's role in the validation process. \begin{figure}[H] \begin{center} \includegraphics[width=0.6\textwidth]{src/BIDS.png} \end{center} - \caption{\textbf{Temp.} The structure of the BIDS workflow. Data is transferred to user, and to the cloud.} + \caption{The structure of the BIDS workflow. Data is transferred to user, and to the cloud.} \end{figure} + \subsubsection{Additional Monitors} + The successful development and implementation of the network event monitor for MEOW serves as a precedent for the creation of additional monitors in the future. This framework could be utilized as a blueprint for developing new monitors tailored to meet specific demands, protocols, or security requirements. + + For instance, security might play a crucial role in the processing and transfer of sensitive data across various workflows. The network event monitor developed in this project, which uses the Python socket library, might not satisfy the security requirements of all workflows, especially those handling sensitive data. In such cases, developing a monitor that leverages the \texttt{ssl} library could provide a solution, enabling encrypted communication and thus improving the security of data transfer. The architecture of the network event monitor can guide the development of an \texttt{ssl} monitor, taking advantage of the similarities between the \texttt{socket} and \texttt{ssl} libraries. + + Similarly, we could envision monitors developed specifically for certain protocols. For example, a monitor designed to handle HTTP requests could be beneficial for workflows interacting with web services. As HTTP is a common protocol, this type of monitor would open up a vast array of potential interactions with external services, making MEOW even more versatile. + \section{Conclusion} - \begin{tcolorbox}[colback=lightgray!30!white] - Did I succeed in what I wanted to do? - \end{tcolorbox} + With the monitor performing effectively as tested, it can be anticipated that it will handle network event triggers correctly in live environments. This is a critical enhancement for MEOW, opening up possibilities for more complex, distributed, and heterogeneous workflows, as envisioned in the design objectives. \newpage \appendix