fixed concurrent incrementation problems
continuous-integration/drone/push Build is passing Details

production
Override-6 2 years ago
parent b5ce74b0f1
commit 28aff516eb

@ -1,7 +1,7 @@
package org.tbasket package org.tbasket
import org.tbasket.api.Endpoint import org.tbasket.api.Endpoint
import org.tbasket.compute.IncrementHandler import org.tbasket.handler.IncrementHandler
import java.util.Properties import java.util.Properties

@ -1,20 +1,22 @@
package org.tbasket.compute package org.tbasket.handler
import org.tbasket.api.compute.APIRequestHandler import org.tbasket.api.compute.APIRequestHandler
import zio.http.{Request, Response} import zio.http.{Request, Response}
import java.util.concurrent.atomic.AtomicInteger
object IncrementHandler extends APIRequestHandler { 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 = { override def get(request: Request): Response = {
Response.json(s"{\"value\": $i}") Response.json(s"{\"value\": $i}")
} }
override def post(request: Request): Response = { override def post(request: Request): Response = {
i += 1 i.incrementAndGet()
println(s"Counter is now $i") println(s"Counter is now $i")
Response.ok Response.ok
} }

@ -2,7 +2,7 @@ package org.tbasket.test
import io.circe.parser._ import io.circe.parser._
import org.junit.jupiter.api.{Assertions, Test} 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.model.Status
import zio.http.{Body, Path, Request, URL} import zio.http.{Body, Path, Request, URL}