diff --git a/services/blob/CMakeLists.txt b/services/blob/CMakeLists.txt
--- a/services/blob/CMakeLists.txt
+++ b/services/blob/CMakeLists.txt
@@ -52,6 +52,7 @@
 include_directories(
   ./src
   ./src/DatabaseEntities
+  ./src/Reactors/
   ./src/Reactors/server
   ./src/Reactors/server/base-reactors
   ./_generated
diff --git a/services/blob/src/Reactors/BaseReactor.h b/services/blob/src/Reactors/BaseReactor.h
new file mode 100644
--- /dev/null
+++ b/services/blob/src/Reactors/BaseReactor.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "ReactorUtility.h"
+
+#include <grpcpp/grpcpp.h>
+
+#include <memory>
+
+namespace comm {
+namespace network {
+namespace reactor {
+
+class BaseReactor {
+public:
+  virtual std::shared_ptr<ReactorUtility> getUtility() = 0;
+  virtual void terminate(const grpc::Status &status) = 0;
+  virtual void validate() = 0;
+  virtual void doneCallback() = 0;
+  virtual void terminateCallback() = 0;
+};
+
+} // namespace reactor
+} // namespace network
+} // namespace comm
diff --git a/services/blob/src/Reactors/ReactorUtility.h b/services/blob/src/Reactors/ReactorUtility.h
new file mode 100644
--- /dev/null
+++ b/services/blob/src/Reactors/ReactorUtility.h
@@ -0,0 +1,39 @@
+#pragma once
+
+#include <grpcpp/grpcpp.h>
+
+#include <atomic>
+#include <mutex>
+
+namespace comm {
+namespace network {
+namespace reactor {
+
+enum class ReactorState {
+  NONE = 0,
+  RUNNING = 1,
+  TERMINATED = 2,
+  DONE = 3,
+};
+
+class ReactorUtility {
+private:
+  grpc::Status status = grpc::Status::OK;
+  std::mutex statusAccessMutex;
+
+public:
+  std::atomic<ReactorState> state = ReactorState::NONE;
+
+  grpc::Status getStatus() {
+    const std::unique_lock<std::mutex> lock(this->statusAccessMutex);
+    return this->status;
+  }
+  void setStatus(const grpc::Status &status) {
+    const std::unique_lock<std::mutex> lock(this->statusAccessMutex);
+    this->status = status;
+  }
+};
+
+} // namespace reactor
+} // namespace network
+} // namespace comm