From 28aff516eb82f2c35568dba5f80332303e4379f6 Mon Sep 17 00:00:00 2001 From: Override-6 Date: Sun, 4 Dec 2022 22:01:07 +0100 Subject: [PATCH] fixed concurrent incrementation problems --- src/main/scala/org/tbasket/EndpointSetup.scala | 2 +- .../{compute => handler}/IncrementHandler.scala | 10 ++++++---- .../org/tbasket/test/IncrementRequestHandler.scala | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) rename src/main/scala/org/tbasket/{compute => handler}/IncrementHandler.scala (66%) diff --git a/src/main/scala/org/tbasket/EndpointSetup.scala b/src/main/scala/org/tbasket/EndpointSetup.scala index bda306e..622b00f 100644 --- a/src/main/scala/org/tbasket/EndpointSetup.scala +++ b/src/main/scala/org/tbasket/EndpointSetup.scala @@ -1,7 +1,7 @@ package org.tbasket import org.tbasket.api.Endpoint -import org.tbasket.compute.IncrementHandler +import org.tbasket.handler.IncrementHandler import java.util.Properties diff --git a/src/main/scala/org/tbasket/compute/IncrementHandler.scala b/src/main/scala/org/tbasket/handler/IncrementHandler.scala similarity index 66% rename from src/main/scala/org/tbasket/compute/IncrementHandler.scala rename to src/main/scala/org/tbasket/handler/IncrementHandler.scala index e8aed70..353290e 100644 --- a/src/main/scala/org/tbasket/compute/IncrementHandler.scala +++ b/src/main/scala/org/tbasket/handler/IncrementHandler.scala @@ -1,20 +1,22 @@ -package org.tbasket.compute +package org.tbasket.handler import org.tbasket.api.compute.APIRequestHandler import zio.http.{Request, Response} +import java.util.concurrent.atomic.AtomicInteger + object IncrementHandler extends APIRequestHandler { - @volatile private var i = 0 + private val i = new AtomicInteger(0) - def getCounter: Int = i + def getCounter: Int = i.get() override def get(request: Request): Response = { Response.json(s"{\"value\": $i}") } override def post(request: Request): Response = { - i += 1 + i.incrementAndGet() println(s"Counter is now $i") Response.ok } diff --git a/src/test/scala/org/tbasket/test/IncrementRequestHandler.scala b/src/test/scala/org/tbasket/test/IncrementRequestHandler.scala index 17f0aac..8abe87f 100644 --- a/src/test/scala/org/tbasket/test/IncrementRequestHandler.scala +++ b/src/test/scala/org/tbasket/test/IncrementRequestHandler.scala @@ -2,7 +2,7 @@ package org.tbasket.test import io.circe.parser._ import org.junit.jupiter.api.{Assertions, Test} -import org.tbasket.compute.IncrementHandler +import org.tbasket.handler.IncrementHandler import zio.http.model.Status import zio.http.{Body, Path, Request, URL}