From 61d374ee77b5a607976f31a27cebc2293d0e4513 Mon Sep 17 00:00:00 2001
From: "robinwilliam.hundt" <robinwilliam.hundt@stud.uni-goettingen.de>
Date: Sun, 3 Mar 2019 16:12:19 +0100
Subject: [PATCH] Changed no of gunicorn workers to 5 and type to sync

Using multiprocessing.Lock to synchronize access to creation of Assignment

fixes #130
---
 core/views/subscription.py | 14 +++++++++-----
 deploy.sh                  |  4 ++--
 requirements.txt           |  1 -
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/core/views/subscription.py b/core/views/subscription.py
index 266bd647..bf77f467 100644
--- a/core/views/subscription.py
+++ b/core/views/subscription.py
@@ -10,6 +10,8 @@ from core.models import TutorSubmissionAssignment
 from core.permissions import IsReviewer, IsTutorOrReviewer
 from core.serializers import AssignmentDetailSerializer, AssignmentSerializer
 
+from multiprocessing import Lock
+
 log = logging.getLogger(__name__)
 
 
@@ -123,11 +125,13 @@ class AssignmentApiViewSet(
 
     @permission_classes((IsTutorOrReviewer,))
     def create(self, request, *args, **kwargs):
-        context = self.get_serializer_context()
-        serializer = AssignmentDetailSerializer(data=request.data,
-                                                context=context)
-        serializer.is_valid(raise_exception=True)
-        return self._fetch_assignment(serializer)
+        with Lock():
+            context = self.get_serializer_context()
+            serializer = AssignmentDetailSerializer(data=request.data,
+                                                    context=context)
+            serializer.is_valid(raise_exception=True)
+            assignment = self._fetch_assignment(serializer)
+        return assignment
 
     @permission_classes((IsTutorOrReviewer,))
     def retrieve(self, request, *args, **kwargs):
diff --git a/deploy.sh b/deploy.sh
index fd384da7..57022449 100755
--- a/deploy.sh
+++ b/deploy.sh
@@ -3,7 +3,7 @@ sleep 1
 python manage.py migrate --noinput
 gunicorn \
   --bind 0.0.0.0:8000 \
-  --workers=2 \
-  --worker-class=gevent \
+  --workers=5 \
+  --worker-class=sync \
   --log-level debug \
   grady.wsgi:application
diff --git a/requirements.txt b/requirements.txt
index db9655c0..5f8f6778 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,7 +5,6 @@ djangorestframework~=3.8
 git+https://github.com/robinhundt/djangorestframework-camel-case
 Django~=2.1
 drf-yasg~=1.12.0
-gevent~=1.3.0
 gunicorn~=19.9.0
 psycopg2-binary~=2.7.0
 python-json-logger~=0.1.0
-- 
GitLab