From d69c12e58d6c15ad7bb784400d7cd264905a00c7 Mon Sep 17 00:00:00 2001 From: pavel Date: Tue, 20 Feb 2024 02:51:08 +0300 Subject: [PATCH 01/31] add code for stage1 --- .../itmo/test/pavelemelyanov/FactoryImpl.java | 14 +++ .../vk/itmo/test/pavelemelyanov/MyServer.java | 108 ++++++++++++++++++ .../test/pavelemelyanov/ServerStarter.java | 34 ++++++ .../itmo/test/pavelemelyanov/ServiceImpl.java | 37 ++++++ 4 files changed, 193 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java new file mode 100644 index 000000000..b2ddafa1c --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java @@ -0,0 +1,14 @@ +package ru.vk.itmo.test.pavelemelyanov; + +import ru.vk.itmo.Service; +import ru.vk.itmo.ServiceConfig; +import ru.vk.itmo.test.ServiceFactory; + +@ServiceFactory(stage = 1) +public class FactoryImpl implements ServiceFactory.Factory { + + @Override + public Service create(ServiceConfig config) { + return new ServiceImpl(config); + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java new file mode 100644 index 000000000..3ef1edbee --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -0,0 +1,108 @@ +package ru.vk.itmo.test.pavelemelyanov; + +import one.nio.http.HttpServer; +import one.nio.http.HttpServerConfig; +import one.nio.http.HttpSession; +import one.nio.http.Param; +import one.nio.http.Path; +import one.nio.http.Request; +import one.nio.http.RequestMethod; +import one.nio.http.Response; +import one.nio.server.AcceptorConfig; +import ru.vk.itmo.ServiceConfig; +import ru.vk.itmo.dao.BaseEntry; +import ru.vk.itmo.dao.Entry; +import ru.vk.itmo.test.reference.dao.ReferenceDao; + +import java.io.IOException; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.nio.charset.StandardCharsets; +import java.util.Set; + +public class MyServer extends HttpServer { + private static final String PATH_V0 = "/v0/entity"; + private static final Set AVAILABLE_METHODS; + + private final ReferenceDao dao; + + static { + AVAILABLE_METHODS = Set.of(Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE); + } + + public MyServer(ServiceConfig config, ReferenceDao dao) throws IOException { + super(configureServer(config)); + this.dao = dao; + } + + @Path(PATH_V0) + @RequestMethod(Request.METHOD_GET) + public Response get(@Param(value = "id", required = true) String id) { + if (isParameterInvalid(id)) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + + MemorySegment key = convertFromString(id); + Entry entry = dao.get(key); + + if (entry == null) { + return new Response(Response.NOT_FOUND, Response.EMPTY); + } + return Response.ok(entry.value().toArray(ValueLayout.JAVA_BYTE)); + } + + @Path(PATH_V0) + @RequestMethod(Request.METHOD_PUT) + public Response put(@Param(value = "id", required = true) String id, Request request) { + if (isParameterInvalid(id)) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + + MemorySegment key = convertFromString(id); + MemorySegment value = MemorySegment.ofArray(request.getBody()); + + dao.upsert(new BaseEntry<>(key, value)); + return new Response(Response.CREATED, Response.EMPTY); + } + + @Path(PATH_V0) + @RequestMethod(Request.METHOD_DELETE) + public Response delete(@Param(value = "id", required = true) String id) { + if (isParameterInvalid(id)) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + + MemorySegment key = convertFromString(id); + + dao.upsert(new BaseEntry<>(key, null)); + return new Response(Response.ACCEPTED, Response.EMPTY); + } + + @Override + public void handleDefault(Request request, HttpSession session) throws IOException { + Response response = AVAILABLE_METHODS.contains(request.getMethod()) + ? new Response(Response.BAD_REQUEST, Response.EMPTY) + : new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); + + session.sendResponse(response); + } + + private static boolean isParameterInvalid(String param) { + return param == null || param.isEmpty(); + } + + private static MemorySegment convertFromString(String value) { + return MemorySegment.ofArray(value.getBytes(StandardCharsets.UTF_8)); + } + + private static HttpServerConfig configureServer(ServiceConfig serviceConfig) { + var httpServerConfig = new HttpServerConfig(); + var acceptorConfig = new AcceptorConfig(); + acceptorConfig.port = serviceConfig.selfPort(); + acceptorConfig.reusePort = true; + + httpServerConfig.acceptors = new AcceptorConfig[] {acceptorConfig}; + httpServerConfig.closeSessions = true; + return httpServerConfig; + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java new file mode 100644 index 000000000..949df3ac4 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java @@ -0,0 +1,34 @@ +package ru.vk.itmo.test.pavelemelyanov; + +import ru.vk.itmo.ServiceConfig; +import ru.vk.itmo.dao.Config; +import ru.vk.itmo.test.reference.dao.ReferenceDao; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.List; + +public final class ServerStarter { + public static void main(String[] args) throws IOException { + ReferenceDao dao = new ReferenceDao( + new Config( + Path.of("./data1/"), + 2 * 1024 * 1024 + ) + ); + MyServer server = new MyServer( + new ServiceConfig( + 8080, + "http://localhost", + List.of("http://localhost"), + Path.of("./data1/") + ), + dao + ); + server.start(); + } + + private ServerStarter() { + + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java new file mode 100644 index 000000000..e93175390 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java @@ -0,0 +1,37 @@ +package ru.vk.itmo.test.pavelemelyanov; + +import ru.vk.itmo.Service; +import ru.vk.itmo.ServiceConfig; +import ru.vk.itmo.dao.Config; +import ru.vk.itmo.test.reference.dao.ReferenceDao; + +import java.io.IOException; +import java.util.concurrent.CompletableFuture; + +public class ServiceImpl implements Service { + private static final int FLUSH_THRESHOLD_BYTES = 40 * 1024 * 1024; + + private final ServiceConfig config; + + private MyServer server; + private ReferenceDao dao; + + public ServiceImpl(ServiceConfig config) { + this.config = config; + } + + @Override + public CompletableFuture start() throws IOException { + dao = new ReferenceDao(new Config(config.workingDir(), FLUSH_THRESHOLD_BYTES)); + this.server = new MyServer(config, dao); + server.start(); + return CompletableFuture.completedFuture(null); + } + + @Override + public CompletableFuture stop() throws IOException { + server.stop(); + dao.close(); + return CompletableFuture.completedFuture(null); + } +} From 8e728f2fd0500b83a24441ad481c43c5612b175c Mon Sep 17 00:00:00 2001 From: pavel Date: Tue, 20 Feb 2024 02:51:35 +0300 Subject: [PATCH 02/31] add scripts for each request --- .../script/lua/stage1/delete.lua | 9 +++++++++ .../pavelemelyanov/script/lua/stage1/get.lua | 9 +++++++++ .../pavelemelyanov/script/lua/stage1/put.lua | 19 +++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/delete.lua create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/get.lua create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/put.lua diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/delete.lua b/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/delete.lua new file mode 100644 index 000000000..d9a966809 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/delete.lua @@ -0,0 +1,9 @@ +id = 0 + +function request() + id = id + 1 + path = "/v0/entity?id=" .. id + headers = {} + headers["Host"] = "localhost:8080" + return wrk.format("DELETE", path, headers) +end diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/get.lua b/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/get.lua new file mode 100644 index 000000000..fe4b24635 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/get.lua @@ -0,0 +1,9 @@ +id = 0 + +function request() + id = id + 1 + path = "/v0/entity?id=" .. id + headers = {} + headers["Host"] = "localhost:8080" + return wrk.format("GET", path, headers) +end diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/put.lua b/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/put.lua new file mode 100644 index 000000000..75b48b642 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/put.lua @@ -0,0 +1,19 @@ +id = 0 + +function random_string() + str = "" + for i = 1, math.random(2, 100) + do + str = str .. string.char(math.random(97, 122)) + end + return str +end + +function request() + id = id + 1 + path = "/v0/entity?id=" .. id + headers = {} + headers["Host"] = "localhost:8080" + body = random_string() + return wrk.format("PUT", path, headers, body) +end From 5b43d1efbce069fce04c023ac97b9e444adcd095 Mon Sep 17 00:00:00 2001 From: pavel Date: Tue, 20 Feb 2024 02:52:03 +0300 Subject: [PATCH 03/31] add statistic for put and get requests --- .../stage1/alloc/get-3000rpc-240s.html | 369 +++++++++ .../stage1/alloc/get-3000rpc-240s.png | Bin 0 -> 99438 bytes .../stage1/alloc/put-3000rpc-240s.html | 402 ++++++++++ .../stage1/alloc/put-3000rpc-240s.png | Bin 0 -> 99406 bytes .../profiler/stage1/cpu/get-3000rpc-240s.html | 754 ++++++++++++++++++ .../profiler/stage1/cpu/get-3000rpc-240s.png | Bin 0 -> 87257 bytes .../profiler/stage1/cpu/put-3000rpc-240s.html | 675 ++++++++++++++++ .../profiler/stage1/cpu/put-3000rpc-240s.png | Bin 0 -> 170336 bytes .../statistic/wrk/stage1/get-3000rpc-240s.png | Bin 0 -> 39138 bytes .../statistic/wrk/stage1/get-3000rpc-240s.txt | 126 +++ .../statistic/wrk/stage1/put-3000rpc-240s.png | Bin 0 -> 36466 bytes .../statistic/wrk/stage1/put-3000rpc-240s.txt | 126 +++ 12 files changed, 2452 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/get-3000rpc-240s.html create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/get-3000rpc-240s.png create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/put-3000rpc-240s.html create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/put-3000rpc-240s.png create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/cpu/get-3000rpc-240s.html create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/cpu/get-3000rpc-240s.png create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/cpu/put-3000rpc-240s.html create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/cpu/put-3000rpc-240s.png create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage1/get-3000rpc-240s.png create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage1/get-3000rpc-240s.txt create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage1/put-3000rpc-240s.png create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage1/put-3000rpc-240s.txt diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/get-3000rpc-240s.html b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/get-3000rpc-240s.html new file mode 100644 index 000000000..7245a1129 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/get-3000rpc-240s.html @@ -0,0 +1,369 @@ + + + + + + + +

Allocation profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/get-3000rpc-240s.png b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/get-3000rpc-240s.png new file mode 100644 index 0000000000000000000000000000000000000000..3af1924e390b97b141af2236ba4a18fa38200ccf GIT binary patch literal 99438 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 DwyIIS literal 0 HcmV?d00001 diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/put-3000rpc-240s.html b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/put-3000rpc-240s.html new file mode 100644 index 000000000..5bae536a3 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/put-3000rpc-240s.html @@ -0,0 +1,402 @@ + + + + + + + +

Allocation profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/put-3000rpc-240s.png b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/alloc/put-3000rpc-240s.png new file mode 100644 index 0000000000000000000000000000000000000000..93e192d47cd92ff634921cc6a1815186495a7499 GIT binary patch literal 99406 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 + + + + + + +

CPU profile

+
  
+
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/cpu/get-3000rpc-240s.png b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/cpu/get-3000rpc-240s.png new file mode 100644 index 0000000000000000000000000000000000000000..dbd3af85fceef22926ba1045e08dd333ba00d65c GIT binary patch literal 87257 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

J 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 literal 0 HcmV?d00001 diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/cpu/put-3000rpc-240s.html b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/cpu/put-3000rpc-240s.html new file mode 100644 index 000000000..c9b9f57b7 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/cpu/put-3000rpc-240s.html @@ -0,0 +1,675 @@ + + + + + + + +

CPU profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/cpu/put-3000rpc-240s.png b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage1/cpu/put-3000rpc-240s.png new file mode 100644 index 0000000000000000000000000000000000000000..687808c389f8557622427c102a0d592a068e5687 GIT binary patch literal 170336 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 SBogY-XI(7=%^dY(LH`GM1pv|j literal 0 HcmV?d00001 diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage1/get-3000rpc-240s.txt b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage1/get-3000rpc-240s.txt new file mode 100644 index 000000000..c0adc8896 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage1/get-3000rpc-240s.txt @@ -0,0 +1,126 @@ +Running 4m test @ http://localhost:8080 + 1 threads and 1 connections + Thread calibration: mean lat.: 1.006ms, rate sampling interval: 10ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.00ms 510.63us 3.60ms 60.00% + Req/Sec 3.16k 265.24 4.00k 59.32% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 0.99ms + 75.000% 1.41ms + 90.000% 1.72ms + 99.000% 1.92ms + 99.900% 1.97ms + 99.990% 2.07ms + 99.999% 2.94ms +100.000% 3.60ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.033 0.000000 1 1.00 + 0.271 0.100000 69227 1.11 + 0.485 0.200000 138058 1.25 + 0.702 0.300000 207208 1.43 + 0.886 0.400000 276690 1.67 + 0.993 0.500000 345431 2.00 + 1.049 0.550000 379974 2.22 + 1.105 0.600000 414594 2.50 + 1.188 0.650000 448682 2.86 + 1.297 0.700000 483189 3.33 + 1.406 0.750000 517677 4.00 + 1.454 0.775000 534931 4.44 + 1.508 0.800000 552044 5.00 + 1.565 0.825000 569393 5.71 + 1.621 0.850000 586796 6.67 + 1.674 0.875000 604094 8.00 + 1.696 0.887500 612403 8.89 + 1.720 0.900000 621176 10.00 + 1.747 0.912500 629856 11.43 + 1.774 0.925000 638326 13.33 + 1.802 0.937500 647143 16.00 + 1.816 0.943750 651372 17.78 + 1.831 0.950000 655797 20.00 + 1.845 0.956250 659934 22.86 + 1.860 0.962500 664350 26.67 + 1.874 0.968750 668635 32.00 + 1.881 0.971875 670739 35.56 + 1.888 0.975000 672873 40.00 + 1.895 0.978125 675105 45.71 + 1.902 0.981250 677333 53.33 + 1.908 0.984375 679211 64.00 + 1.912 0.985938 680346 71.11 + 1.916 0.987500 681531 80.00 + 1.920 0.989062 682656 91.43 + 1.924 0.990625 683731 106.67 + 1.928 0.992188 684737 128.00 + 1.930 0.992969 685186 142.22 + 1.933 0.993750 685856 160.00 + 1.935 0.994531 686262 182.86 + 1.939 0.995313 686916 213.33 + 1.942 0.996094 687342 256.00 + 1.944 0.996484 687601 284.44 + 1.946 0.996875 687835 320.00 + 1.950 0.997266 688188 365.71 + 1.953 0.997656 688421 426.67 + 1.957 0.998047 688701 512.00 + 1.959 0.998242 688819 568.89 + 1.961 0.998437 688915 640.00 + 1.964 0.998633 689054 731.43 + 1.968 0.998828 689218 853.33 + 1.972 0.999023 689335 1024.00 + 1.974 0.999121 689402 1137.78 + 1.976 0.999219 689448 1280.00 + 1.980 0.999316 689523 1462.86 + 1.984 0.999414 689583 1706.67 + 1.990 0.999512 689653 2048.00 + 1.993 0.999561 689705 2275.56 + 1.994 0.999609 689717 2560.00 + 1.998 0.999658 689754 2925.71 + 2.003 0.999707 689784 3413.33 + 2.012 0.999756 689817 4096.00 + 2.016 0.999780 689835 4551.11 + 2.020 0.999805 689851 5120.00 + 2.026 0.999829 689870 5851.43 + 2.032 0.999854 689885 6826.67 + 2.051 0.999878 689904 8192.00 + 2.063 0.999890 689911 9102.22 + 2.081 0.999902 689918 10240.00 + 2.129 0.999915 689928 11702.86 + 2.165 0.999927 689935 13653.33 + 2.213 0.999939 689943 16384.00 + 2.243 0.999945 689948 18204.44 + 2.273 0.999951 689952 20480.00 + 2.351 0.999957 689956 23405.71 + 2.413 0.999963 689960 27306.67 + 2.453 0.999969 689964 32768.00 + 2.509 0.999973 689967 36408.89 + 2.539 0.999976 689969 40960.00 + 2.585 0.999979 689971 46811.43 + 2.699 0.999982 689973 54613.33 + 2.761 0.999985 689975 65536.00 + 2.835 0.999986 689976 72817.78 + 2.863 0.999988 689977 81920.00 + 2.945 0.999989 689978 93622.86 + 2.983 0.999991 689979 109226.67 + 3.045 0.999992 689980 131072.00 + 3.091 0.999993 689981 145635.56 + 3.091 0.999994 689981 163840.00 + 3.103 0.999995 689982 187245.71 + 3.103 0.999995 689982 218453.33 + 3.263 0.999996 689983 262144.00 + 3.263 0.999997 689983 291271.11 + 3.263 0.999997 689983 327680.00 + 3.325 0.999997 689984 374491.43 + 3.325 0.999998 689984 436906.67 + 3.325 0.999998 689984 524288.00 + 3.325 0.999998 689984 582542.22 + 3.325 0.999998 689984 655360.00 + 3.601 0.999999 689985 748982.86 + 3.601 1.000000 689985 inf +#[Mean = 0.997, StdDeviation = 0.511] +#[Max = 3.600, Total count = 689985] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 719998 requests in 4.00m, 78.24MB read +Requests/sec: 2999.98 +Transfer/sec: 333.84KB \ No newline at end of file diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage1/put-3000rpc-240s.png b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage1/put-3000rpc-240s.png new file mode 100644 index 0000000000000000000000000000000000000000..b313682e7eaca3e8c0b90003622b3b19f45ecb43 GIT binary patch literal 36466 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�K?e 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 F{{d2bOfCQb literal 0 HcmV?d00001 diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage1/put-3000rpc-240s.txt b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage1/put-3000rpc-240s.txt new file mode 100644 index 000000000..3300fb9de --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage1/put-3000rpc-240s.txt @@ -0,0 +1,126 @@ +Running 4m test @ http://localhost:8080 + 1 threads and 1 connections + Thread calibration: mean lat.: 1.009ms, rate sampling interval: 10ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.01ms 513.78us 4.76ms 60.03% + Req/Sec 3.18k 275.98 4.00k 58.51% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.01ms + 75.000% 1.42ms + 90.000% 1.74ms + 99.000% 1.94ms + 99.900% 2.01ms + 99.990% 3.21ms + 99.999% 4.32ms +100.000% 4.76ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.036 0.000000 2 1.00 + 0.281 0.100000 69028 1.11 + 0.497 0.200000 138254 1.25 + 0.713 0.300000 207288 1.43 + 0.896 0.400000 276292 1.67 + 1.006 0.500000 345214 2.00 + 1.060 0.550000 380022 2.22 + 1.114 0.600000 414310 2.50 + 1.206 0.650000 448597 2.86 + 1.314 0.700000 483137 3.33 + 1.421 0.750000 517690 4.00 + 1.472 0.775000 535072 4.44 + 1.526 0.800000 552154 5.00 + 1.582 0.825000 569534 5.71 + 1.635 0.850000 586685 6.67 + 1.688 0.875000 604097 8.00 + 1.712 0.887500 612662 8.89 + 1.737 0.900000 621209 10.00 + 1.764 0.912500 629882 11.43 + 1.791 0.925000 638416 13.33 + 1.819 0.937500 647169 16.00 + 1.833 0.943750 651270 17.78 + 1.847 0.950000 655799 20.00 + 1.860 0.956250 659893 22.86 + 1.874 0.962500 664126 26.67 + 1.889 0.968750 668727 32.00 + 1.895 0.971875 670582 35.56 + 1.902 0.975000 672892 40.00 + 1.909 0.978125 675168 45.71 + 1.915 0.981250 677074 53.33 + 1.923 0.984375 679486 64.00 + 1.926 0.985938 680392 71.11 + 1.930 0.987500 681474 80.00 + 1.934 0.989062 682573 91.43 + 1.939 0.990625 683703 106.67 + 1.944 0.992188 684684 128.00 + 1.947 0.992969 685154 142.22 + 1.951 0.993750 685765 160.00 + 1.955 0.994531 686267 182.86 + 1.960 0.995313 686844 213.33 + 1.965 0.996094 687339 256.00 + 1.968 0.996484 687622 284.44 + 1.971 0.996875 687838 320.00 + 1.976 0.997266 688149 365.71 + 1.981 0.997656 688397 426.67 + 1.987 0.998047 688662 512.00 + 1.990 0.998242 688783 568.89 + 1.995 0.998437 688923 640.00 + 2.000 0.998633 689041 731.43 + 2.006 0.998828 689186 853.33 + 2.013 0.999023 689313 1024.00 + 2.018 0.999121 689391 1137.78 + 2.024 0.999219 689451 1280.00 + 2.032 0.999316 689517 1462.86 + 2.041 0.999414 689581 1706.67 + 2.069 0.999512 689650 2048.00 + 2.091 0.999561 689683 2275.56 + 2.141 0.999609 689716 2560.00 + 2.239 0.999658 689749 2925.71 + 2.339 0.999707 689783 3413.33 + 2.501 0.999756 689816 4096.00 + 2.569 0.999780 689833 4551.11 + 2.681 0.999805 689850 5120.00 + 2.785 0.999829 689867 5851.43 + 2.913 0.999854 689883 6826.67 + 3.051 0.999878 689901 8192.00 + 3.127 0.999890 689909 9102.22 + 3.225 0.999902 689917 10240.00 + 3.309 0.999915 689926 11702.86 + 3.463 0.999927 689934 13653.33 + 3.549 0.999939 689942 16384.00 + 3.597 0.999945 689947 18204.44 + 3.711 0.999951 689951 20480.00 + 3.785 0.999957 689955 23405.71 + 3.851 0.999963 689959 27306.67 + 3.909 0.999969 689963 32768.00 + 4.045 0.999973 689966 36408.89 + 4.071 0.999976 689968 40960.00 + 4.123 0.999979 689970 46811.43 + 4.151 0.999982 689972 54613.33 + 4.163 0.999985 689974 65536.00 + 4.235 0.999986 689975 72817.78 + 4.247 0.999988 689976 81920.00 + 4.323 0.999989 689977 93622.86 + 4.351 0.999991 689978 109226.67 + 4.371 0.999992 689979 131072.00 + 4.391 0.999993 689980 145635.56 + 4.391 0.999994 689980 163840.00 + 4.483 0.999995 689981 187245.71 + 4.483 0.999995 689981 218453.33 + 4.547 0.999996 689982 262144.00 + 4.547 0.999997 689982 291271.11 + 4.547 0.999997 689982 327680.00 + 4.571 0.999997 689983 374491.43 + 4.571 0.999998 689983 436906.67 + 4.571 0.999998 689983 524288.00 + 4.571 0.999998 689983 582542.22 + 4.571 0.999998 689983 655360.00 + 4.763 0.999999 689984 748982.86 + 4.763 1.000000 689984 inf +#[Mean = 1.011, StdDeviation = 0.514] +#[Max = 4.760, Total count = 689984] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 719998 requests in 4.00m, 46.01MB read +Requests/sec: 2999.99 +Transfer/sec: 196.29KB From 1a7bf926d5fde3b358a1991f6a11d7826a539b4a Mon Sep 17 00:00:00 2001 From: pavel Date: Tue, 20 Feb 2024 02:52:17 +0300 Subject: [PATCH 04/31] add report for stage 1 --- .../pavelemelyanov/report/stage1/stage1.md | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/report/stage1/stage1.md diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/report/stage1/stage1.md b/src/main/java/ru/vk/itmo/test/pavelemelyanov/report/stage1/stage1.md new file mode 100644 index 000000000..3354809fc --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/report/stage1/stage1.md @@ -0,0 +1,96 @@ +# Отчёт stage1 + +## Lua + +### Put запрос +Написан для заполнения БД случайными строками: +``` +id = 0 + +function random_string() + str = "" + for i = 1, math.random(2, 100) + do + str = str .. string.char(math.random(97, 122)) + end + return str +end + +function request() + id = id + 1 + path = "/v0/entity?id=" .. id + headers = {} + headers["Host"] = "localhost:8080" + body = random_string() + return wrk.format("PUT", path, headers, body) +end +``` + +### Get запрос +Написан для получения данных из БД +``` +id = 0 + +function request() + id = id + 1 + path = "/v0/entity?id=" .. id + headers = {} + headers["Host"] = "localhost:8080" + return wrk.format("GET", path, headers) +end + +``` + +### Delete запрос +Написан для удаления данных из БД +``` +id = 0 + +function request() + id = id + 1 + path = "/v0/entity?id=" .. id + headers = {} + headers["Host"] = "localhost:8080" + return wrk.format("DELETE", path, headers) +end +``` + +## wrk2 +### Подготовка +В начале работы я заполнил хранилище БД на 2 Гб с помощью Put запросов + +### Получения метрик для Get запроса + +#### Запуск wrk2: +``` +wrk -d 240 -t 1 -c 1 -R 3000 -L -s /home/pavel/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/get.lua http://localhost:8080 +``` + +![get-3000rpc-240s.png](..%2F..%2Fstatistic%2Fwrk%2Fstage1%2Fget-3000rpc-240s.png) + +На графике наблюдается рост задержки возле 99.9% + +![get-3000rpc-240s.png](..%2F..%2Fstatistic%2Fprofiler%2Fstage1%2Falloc%2Fget-3000rpc-240s.png) + +Большая часть аллокаций происходит при конвертации параметров запроса, из String в MemorySegment, а также используется при отправке ответа на HTTP запрос и при парсинге запроса + +![get-3000rpc-240s.png](..%2F..%2Fstatistic%2Fprofiler%2Fstage1%2Fcpu%2Fget-3000rpc-240s.png) +Большая часть cpu расходуется на поиск ключа в БД + +### Получения метрик для Put запроса + +#### Запуск wrk2: +``` +wrk -d 240 -t 1 -c 1 -R 3000 -L -s /home/pavel/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/put.lua http://localhost:8080 +``` +![put-3000rpc-240s.png](..%2F..%2Fstatistic%2Fwrk%2Fstage1%2Fput-3000rpc-240s.png) + +На графике наблюдается рост задержки возле 99.99% + +![put-3000rpc-240s.png](..%2F..%2Fstatistic%2Fprofiler%2Fstage1%2Falloc%2Fput-3000rpc-240s.png) + +Большая часть аллокаций происходит при конвертации параметров запроса, из String в MemorySegment, а также используется при отправке ответа на HTTP запрос и при парсинге запроса + +![put-3000rpc-240s.png](..%2F..%2Fstatistic%2Fprofiler%2Fstage1%2Fcpu%2Fput-3000rpc-240s.png) + +Большая часть cpu потребовалось для записи ответа на HTTP запрос и примерно 11% было выделено для записи данных в БД. Также 16% было выделено на ожидание селектора From 94c731147eee94bef75ef6a0d3dcb1e697e9cd1e Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Wed, 28 Feb 2024 23:01:02 +0300 Subject: [PATCH 05/31] fix my realisation --- .../vk/itmo/test/pavelemelyanov/MyServer.java | 96 ++++++++----------- .../itmo/test/pavelemelyanov/ServiceImpl.java | 2 +- 2 files changed, 40 insertions(+), 58 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index 3ef1edbee..60342eb44 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -6,7 +6,7 @@ import one.nio.http.Param; import one.nio.http.Path; import one.nio.http.Request; -import one.nio.http.RequestMethod; +import one.nio.util.Utf8; import one.nio.http.Response; import one.nio.server.AcceptorConfig; import ru.vk.itmo.ServiceConfig; @@ -17,82 +17,64 @@ import java.io.IOException; import java.lang.foreign.MemorySegment; import java.lang.foreign.ValueLayout; -import java.nio.charset.StandardCharsets; -import java.util.Set; public class MyServer extends HttpServer { - private static final String PATH_V0 = "/v0/entity"; - private static final Set AVAILABLE_METHODS; - private final ReferenceDao dao; - static { - AVAILABLE_METHODS = Set.of(Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE); - } - public MyServer(ServiceConfig config, ReferenceDao dao) throws IOException { super(configureServer(config)); this.dao = dao; } - @Path(PATH_V0) - @RequestMethod(Request.METHOD_GET) - public Response get(@Param(value = "id", required = true) String id) { - if (isParameterInvalid(id)) { - return new Response(Response.BAD_REQUEST, Response.EMPTY); - } - - MemorySegment key = convertFromString(id); - Entry entry = dao.get(key); - - if (entry == null) { - return new Response(Response.NOT_FOUND, Response.EMPTY); - } - return Response.ok(entry.value().toArray(ValueLayout.JAVA_BYTE)); - } - - @Path(PATH_V0) - @RequestMethod(Request.METHOD_PUT) - public Response put(@Param(value = "id", required = true) String id, Request request) { - if (isParameterInvalid(id)) { - return new Response(Response.BAD_REQUEST, Response.EMPTY); - } - - MemorySegment key = convertFromString(id); - MemorySegment value = MemorySegment.ofArray(request.getBody()); - - dao.upsert(new BaseEntry<>(key, value)); - return new Response(Response.CREATED, Response.EMPTY); - } - - @Path(PATH_V0) - @RequestMethod(Request.METHOD_DELETE) - public Response delete(@Param(value = "id", required = true) String id) { - if (isParameterInvalid(id)) { - return new Response(Response.BAD_REQUEST, Response.EMPTY); + @Override + public void handleRequest(Request request, HttpSession session) throws IOException { + try { + super.handleRequest(request, session); + } catch (Exception e) { + session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); } - - MemorySegment key = convertFromString(id); - - dao.upsert(new BaseEntry<>(key, null)); - return new Response(Response.ACCEPTED, Response.EMPTY); } @Override public void handleDefault(Request request, HttpSession session) throws IOException { - Response response = AVAILABLE_METHODS.contains(request.getMethod()) - ? new Response(Response.BAD_REQUEST, Response.EMPTY) - : new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); - + Response response = new Response(Response.BAD_REQUEST, Response.EMPTY); session.sendResponse(response); } - private static boolean isParameterInvalid(String param) { - return param == null || param.isEmpty(); + @Path("/v0/entity") + public Response entity(Request request, @Param(value = "id") String id) { + if (id == null || id.isBlank()) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + + switch (request.getMethod()) { + case Request.METHOD_GET -> { + MemorySegment key = convertFromString(id); + Entry entry = dao.get(key); + if (entry == null) { + return new Response(Response.NOT_FOUND, Response.EMPTY); + } + return Response.ok(entry.value().toArray(ValueLayout.JAVA_BYTE)); + } + case Request.METHOD_PUT -> { + MemorySegment key = convertFromString(id); + MemorySegment value = MemorySegment.ofArray(request.getBody()); + dao.upsert(new BaseEntry<>(key, value)); + return new Response(Response.CREATED, Response.EMPTY); + } + case Request.METHOD_DELETE -> { + MemorySegment key = convertFromString(id); + dao.upsert(new BaseEntry<>(key, null)); + return new Response(Response.ACCEPTED, Response.EMPTY); + } + default -> { + return new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); + } + } } private static MemorySegment convertFromString(String value) { - return MemorySegment.ofArray(value.getBytes(StandardCharsets.UTF_8)); + return MemorySegment.ofArray(Utf8.toBytes(value)); } private static HttpServerConfig configureServer(ServiceConfig serviceConfig) { diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java index e93175390..ffc778afd 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java @@ -23,7 +23,7 @@ public ServiceImpl(ServiceConfig config) { @Override public CompletableFuture start() throws IOException { dao = new ReferenceDao(new Config(config.workingDir(), FLUSH_THRESHOLD_BYTES)); - this.server = new MyServer(config, dao); + server = new MyServer(config, dao); server.start(); return CompletableFuture.completedFuture(null); } From 2aefb000862583007b9909411fba26424cb95471 Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 29 Feb 2024 03:55:51 +0300 Subject: [PATCH 06/31] add code for stage 2 --- .../pavelemelyanov/ExecutorServiceConfig.java | 20 +++ .../vk/itmo/test/pavelemelyanov/MyServer.java | 134 +++++++++++++----- 2 files changed, 116 insertions(+), 38 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java new file mode 100644 index 000000000..aaf6b1dd0 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java @@ -0,0 +1,20 @@ +package ru.vk.itmo.test.pavelemelyanov; + +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadPoolExecutor; + +public final class ExecutorServiceConfig { + public static final int CORE_AMOUNT = Runtime.getRuntime().availableProcessors(); + public static final int CORE_POOL_SIZE = CORE_AMOUNT / 2; + public static final int MAX_CORE_POOL_SIZE = CORE_AMOUNT; + public static final int KEEP_ALIVE_TIME = 200; + public static final int QUEUE_CAPACITY = MAX_CORE_POOL_SIZE * 2; + public static final BlockingQueue queue = new ArrayBlockingQueue<>(QUEUE_CAPACITY); + public static final RejectedExecutionHandler HANDLER = new ThreadPoolExecutor.AbortPolicy(); + + private ExecutorServiceConfig() { + + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index 60342eb44..5b3fcc639 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -3,74 +3,113 @@ import one.nio.http.HttpServer; import one.nio.http.HttpServerConfig; import one.nio.http.HttpSession; -import one.nio.http.Param; -import one.nio.http.Path; import one.nio.http.Request; -import one.nio.util.Utf8; import one.nio.http.Response; import one.nio.server.AcceptorConfig; +import one.nio.util.Utf8; import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.dao.BaseEntry; import ru.vk.itmo.dao.Entry; import ru.vk.itmo.test.reference.dao.ReferenceDao; import java.io.IOException; +import java.io.UncheckedIOException; import java.lang.foreign.MemorySegment; import java.lang.foreign.ValueLayout; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; public class MyServer extends HttpServer { + private static final String V0_PATH = "/v0/entity"; + private static final String ID_PARAM = "id="; + private final ReferenceDao dao; + private final ExecutorService workersPool; public MyServer(ServiceConfig config, ReferenceDao dao) throws IOException { super(configureServer(config)); this.dao = dao; + workersPool = configureWorkersPool(); } @Override - public void handleRequest(Request request, HttpSession session) throws IOException { + public void handleRequest(Request request, HttpSession session) { + if (!request.getPath().equals(V0_PATH)) { + sendResponse( + session, + new Response(Response.BAD_REQUEST, Response.EMPTY) + ); + return; + } + + String paramId = request.getParameter(ID_PARAM); + if (paramId == null || paramId.isBlank()) { + sendResponse( + session, + new Response(Response.BAD_REQUEST, Response.EMPTY) + ); + return; + } + try { - super.handleRequest(request, session); - } catch (Exception e) { - session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); + workersPool.execute(() -> { + try { + sendResponse( + session, + handleRequestToEntity(request, paramId) + ); + } catch (Exception e) { + sendResponse( + session, + new Response(Response.INTERNAL_ERROR, Response.EMPTY) + ); + } + }); + } catch (RejectedExecutionException e) { + sendResponse( + session, + new Response(Response.SERVICE_UNAVAILABLE, Response.EMPTY) + ); } } @Override - public void handleDefault(Request request, HttpSession session) throws IOException { - Response response = new Response(Response.BAD_REQUEST, Response.EMPTY); - session.sendResponse(response); + public synchronized void stop() { + super.stop(); + workersPool.close(); } - @Path("/v0/entity") - public Response entity(Request request, @Param(value = "id") String id) { - if (id == null || id.isBlank()) { - return new Response(Response.BAD_REQUEST, Response.EMPTY); - } + private Response handleRequestToEntity(Request request, String id) { + return switch (request.getMethod()) { + case Request.METHOD_GET -> getEntity(id); + case Request.METHOD_PUT -> putEntity(request, id); + case Request.METHOD_DELETE -> deleteEntity(id); + default -> new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); + }; + } - switch (request.getMethod()) { - case Request.METHOD_GET -> { - MemorySegment key = convertFromString(id); - Entry entry = dao.get(key); - if (entry == null) { - return new Response(Response.NOT_FOUND, Response.EMPTY); - } - return Response.ok(entry.value().toArray(ValueLayout.JAVA_BYTE)); - } - case Request.METHOD_PUT -> { - MemorySegment key = convertFromString(id); - MemorySegment value = MemorySegment.ofArray(request.getBody()); - dao.upsert(new BaseEntry<>(key, value)); - return new Response(Response.CREATED, Response.EMPTY); - } - case Request.METHOD_DELETE -> { - MemorySegment key = convertFromString(id); - dao.upsert(new BaseEntry<>(key, null)); - return new Response(Response.ACCEPTED, Response.EMPTY); - } - default -> { - return new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); - } + private Response getEntity(String id) { + MemorySegment key = convertFromString(id); + Entry entry = dao.get(key); + if (entry == null) { + return new Response(Response.NOT_FOUND, Response.EMPTY); } + return Response.ok(entry.value().toArray(ValueLayout.JAVA_BYTE)); + } + + private Response putEntity(Request request, String id) { + MemorySegment key = convertFromString(id); + MemorySegment value = MemorySegment.ofArray(request.getBody()); + dao.upsert(new BaseEntry<>(key, value)); + return new Response(Response.CREATED, Response.EMPTY); + } + + private Response deleteEntity(String id) { + MemorySegment key = convertFromString(id); + dao.upsert(new BaseEntry<>(key, null)); + return new Response(Response.ACCEPTED, Response.EMPTY); } private static MemorySegment convertFromString(String value) { @@ -87,4 +126,23 @@ private static HttpServerConfig configureServer(ServiceConfig serviceConfig) { httpServerConfig.closeSessions = true; return httpServerConfig; } + + private static ExecutorService configureWorkersPool() { + return new ThreadPoolExecutor( + ExecutorServiceConfig.CORE_POOL_SIZE, + ExecutorServiceConfig.MAX_CORE_POOL_SIZE, + ExecutorServiceConfig.KEEP_ALIVE_TIME, + TimeUnit.MILLISECONDS, + ExecutorServiceConfig.queue, + ExecutorServiceConfig.HANDLER + ); + } + + private void sendResponse(HttpSession session, Response response) { + try { + session.sendResponse(response); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } } From 7a80ddaf3d3e4eca6254bdc3a83d56ae4afc12f6 Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Tue, 5 Mar 2024 06:48:57 +0300 Subject: [PATCH 07/31] add report for stage2 --- .../pavelemelyanov/ExecutorServiceConfig.java | 2 +- .../test/pavelemelyanov/ServerStarter.java | 14 +- .../pavelemelyanov/report/stage2/stage2.md | 122 ++ .../profiler/stage2/alloc/alloc-get.html | 520 +++++++++ .../profiler/stage2/alloc/alloc-put.html | 572 ++++++++++ .../profiler/stage2/cpu/cpu-get.html | 988 ++++++++++++++++ .../profiler/stage2/cpu/cpu-put.html | 1005 +++++++++++++++++ .../wrk/stage2/get-16000rps-120s.txt | 137 +++ .../wrk/stage2/put-16000rps-120s.txt | 137 +++ 9 files changed, 3491 insertions(+), 6 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/report/stage2/stage2.md create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/alloc/alloc-get.html create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/alloc/alloc-put.html create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/cpu/cpu-get.html create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/cpu/cpu-put.html create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage2/get-16000rps-120s.txt create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage2/put-16000rps-120s.txt diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java index aaf6b1dd0..9314a722c 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java @@ -10,7 +10,7 @@ public final class ExecutorServiceConfig { public static final int CORE_POOL_SIZE = CORE_AMOUNT / 2; public static final int MAX_CORE_POOL_SIZE = CORE_AMOUNT; public static final int KEEP_ALIVE_TIME = 200; - public static final int QUEUE_CAPACITY = MAX_CORE_POOL_SIZE * 2; + public static final int QUEUE_CAPACITY = 64; public static final BlockingQueue queue = new ArrayBlockingQueue<>(QUEUE_CAPACITY); public static final RejectedExecutionHandler HANDLER = new ThreadPoolExecutor.AbortPolicy(); diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java index 949df3ac4..c91617d96 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java @@ -9,19 +9,23 @@ import java.util.List; public final class ServerStarter { + private static final Path WORKING_DIR = Path.of("./data1/"); + private static final String URL = "http://localhost"; + private static final int FLUSH_THRESHOLD_BYTES = 2 * 1024 * 1024; + public static void main(String[] args) throws IOException { ReferenceDao dao = new ReferenceDao( new Config( - Path.of("./data1/"), - 2 * 1024 * 1024 + WORKING_DIR, + FLUSH_THRESHOLD_BYTES ) ); MyServer server = new MyServer( new ServiceConfig( 8080, - "http://localhost", - List.of("http://localhost"), - Path.of("./data1/") + URL, + List.of(URL), + WORKING_DIR ), dao ); diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/report/stage2/stage2.md b/src/main/java/ru/vk/itmo/test/pavelemelyanov/report/stage2/stage2.md new file mode 100644 index 000000000..6f831555d --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/report/stage2/stage2.md @@ -0,0 +1,122 @@ +# Отчёт stage2 + +## Lua + +### Put запрос +Написан для заполнения БД случайными строками: +``` +id = 0 + +function random_string() + str = "" + for i = 1, math.random(2, 100) + do + str = str .. string.char(math.random(97, 122)) + end + return str +end + +function request() + id = id + 1 + path = "/v0/entity?id=" .. id + headers = {} + headers["Host"] = "localhost:8080" + body = random_string() + return wrk.format("PUT", path, headers, body) +end +``` + +### Get запрос +Написан для получения данных из БД +``` +id = 0 + +function request() + id = id + 1 + path = "/v0/entity?id=" .. id + headers = {} + headers["Host"] = "localhost:8080" + return wrk.format("GET", path, headers) +end + +``` + +### Delete запрос +Написан для удаления данных из БД +``` +id = 0 + +function request() + id = id + 1 + path = "/v0/entity?id=" .. id + headers = {} + headers["Host"] = "localhost:8080" + return wrk.format("DELETE", path, headers) +end +``` + +## wrk2 +### Подготовка +В начале работы я заполнил хранилище БД на 2.3 Гб с помощью Put запросов + +Точка разладки достигается при 17000 rps, поэтому буду тестировать на 16000 rps + +### Получения метрик для Get запроса + +#### Запуск wrk2: +``` +wrk -d 120 -t 4 -c 64 -R 16000 -L -s /home/pavel/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/get.lua http://localhost:8080 +``` + +![get-16000rps-120s.png](..%2F..%2Fstatistic%2Fwrk%2Fstage2%2Fget-16000rps-120s.png) + +На графике наблюдается рост задержки возле 99.9%, что не критично + +[alloc-get.html](..%2F..%2Fstatistic%2Fprofiler%2Fstage2%2Falloc%2Falloc-get.html) + +Большая часть аллокаций происходит всё также при конвертации параметров запроса, из String в MemorySegment и при парсинге запроса. +Также появились немного дополнительных аллокаций для работы с Queue + +[cpu-get.html](..%2F..%2Fstatistic%2Fprofiler%2Fstage2%2Fcpu%2Fcpu-get.html) + +Значительно снизилась нагрузка на селектор потоки за счёт добавления воркеров по обработке запроса, Теперь селекторам надо только пропарсить сам запрос и добавить задачу в очередь для воркеров +однако воркеры тратят время на ожидания задач +Значительное время тратится на работу с базой данных +Часть времени тратим для записи ответа на HTTP запрос + +### Получения метрик для Put запроса + +#### Запуск wrk2: +``` +wrk -d 120 -t 4 -c 64 -R 16000 -L -s /home/pavel/IdeaProjects/2024-highload-dht/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/put.lua http://localhost:8080 +``` + +![put-16000rps-120s.png](..%2F..%2Fstatistic%2Fwrk%2Fstage2%2Fput-16000rps-120s.png) + +На графике задержка постепенно растёт от 90% + + +![alloc-put.png](..%2F..%2Fstatistic%2Fprofiler%2Fstage2%2Falloc%2Falloc-put.png) + +Большая часть аллокаций происходит всё также при конвертации параметров запроса, из String в MemorySegment и при парсинге запроса. +Также появились немного дополнительных аллокаций для работы с Queue + +![cpu-put.png](..%2F..%2Fstatistic%2Fprofiler%2Fstage2%2Fcpu%2Fcpu-put.png) + +Значительно снизилась нагрузка на селектор потоки за счёт добавления воркеров по обработке запроса, Теперь селекторам надо только пропарсить сам запрос и добавить задачу в очередь для воркеров +Однако мы тратим время на то чтобы заблокировать и разблокировать Queue +Значительное время тратится на работу с базой данных +Часть времени тратим для записи ответа на HTTP запрос + +### Итог + +Перешёл на более слабо железо после выполнения stage1, потому что Ubuntu не запускается. +Несмотря на более слабо железо точка разладки выросла с 4000 до 17000 rps. + +Если перейти на LinkedBlockingQueue, то может возникнуть ситуация, когда у нас будет не хватать памяти на хранения невыолненных тасок + +### Мысли +1. Можно изменить размер очереди: + * если уменьшить то мы не будем тратить память на хранение лишних (слишком старых) запросов + * если увеличивать, то мы будем хранить больше тасок, которые постепенно будут выполняться воркерами +2. Часть, связанную с чтением запроса и записью ответов, мы не можем исправить. Только если ресурсов дадим больше \ No newline at end of file diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/alloc/alloc-get.html b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/alloc/alloc-get.html new file mode 100644 index 000000000..669555c18 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/alloc/alloc-get.html @@ -0,0 +1,520 @@ + + + + + + + +

Allocation profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/alloc/alloc-put.html b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/alloc/alloc-put.html new file mode 100644 index 000000000..3753e0e4f --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/alloc/alloc-put.html @@ -0,0 +1,572 @@ + + + + + + + +

Allocation profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/cpu/cpu-get.html b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/cpu/cpu-get.html new file mode 100644 index 000000000..2e94d1510 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/cpu/cpu-get.html @@ -0,0 +1,988 @@ + + + + + + + +

CPU profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/cpu/cpu-put.html b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/cpu/cpu-put.html new file mode 100644 index 000000000..3c10f6109 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/cpu/cpu-put.html @@ -0,0 +1,1005 @@ + + + + + + + +

CPU profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage2/get-16000rps-120s.txt b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage2/get-16000rps-120s.txt new file mode 100644 index 000000000..4e163adc1 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage2/get-16000rps-120s.txt @@ -0,0 +1,137 @@ +Running 2m test @ http://localhost:8080 + 4 threads and 64 connections + Thread calibration: mean lat.: 1.448ms, rate sampling interval: 10ms + Thread calibration: mean lat.: 1.377ms, rate sampling interval: 10ms + Thread calibration: mean lat.: 1.400ms, rate sampling interval: 10ms + Thread calibration: mean lat.: 1.427ms, rate sampling interval: 10ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.38ms 0.89ms 39.42ms 83.52% + Req/Sec 4.22k 355.13 9.44k 78.73% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.27ms + 75.000% 1.75ms + 90.000% 2.24ms + 99.000% 3.90ms + 99.900% 10.18ms + 99.990% 22.30ms + 99.999% 33.73ms +100.000% 39.46ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.076 0.000000 1 1.00 + 0.561 0.100000 176417 1.11 + 0.759 0.200000 351972 1.25 + 0.930 0.300000 527713 1.43 + 1.097 0.400000 704025 1.67 + 1.266 0.500000 879719 2.00 + 1.354 0.550000 967670 2.22 + 1.443 0.600000 1055249 2.50 + 1.536 0.650000 1143950 2.86 + 1.636 0.700000 1231499 3.33 + 1.748 0.750000 1319714 4.00 + 1.809 0.775000 1363695 4.44 + 1.875 0.800000 1407588 5.00 + 1.947 0.825000 1451311 5.71 + 2.029 0.850000 1495242 6.67 + 2.127 0.875000 1539707 8.00 + 2.181 0.887500 1561161 8.89 + 2.241 0.900000 1582882 10.00 + 2.311 0.912500 1605303 11.43 + 2.387 0.925000 1626869 13.33 + 2.479 0.937500 1648943 16.00 + 2.533 0.943750 1659957 17.78 + 2.593 0.950000 1670860 20.00 + 2.667 0.956250 1681927 22.86 + 2.755 0.962500 1692970 26.67 + 2.867 0.968750 1703814 32.00 + 2.937 0.971875 1709395 35.56 + 3.019 0.975000 1714855 40.00 + 3.121 0.978125 1720289 45.71 + 3.247 0.981250 1725750 53.33 + 3.415 0.984375 1731253 64.00 + 3.519 0.985938 1734027 71.11 + 3.643 0.987500 1736729 80.00 + 3.795 0.989062 1739486 91.43 + 3.985 0.990625 1742238 106.67 + 4.243 0.992188 1745000 128.00 + 4.399 0.992969 1746367 142.22 + 4.599 0.993750 1747740 160.00 + 4.835 0.994531 1749105 182.86 + 5.147 0.995313 1750472 213.33 + 5.551 0.996094 1751846 256.00 + 5.787 0.996484 1752535 284.44 + 6.091 0.996875 1753221 320.00 + 6.483 0.997266 1753904 365.71 + 6.959 0.997656 1754595 426.67 + 7.575 0.998047 1755282 512.00 + 7.927 0.998242 1755624 568.89 + 8.335 0.998437 1755966 640.00 + 8.863 0.998633 1756312 731.43 + 9.479 0.998828 1756657 853.33 + 10.271 0.999023 1756997 1024.00 + 10.775 0.999121 1757168 1137.78 + 11.343 0.999219 1757339 1280.00 + 11.911 0.999316 1757511 1462.86 + 12.663 0.999414 1757682 1706.67 + 13.551 0.999512 1757856 2048.00 + 13.983 0.999561 1757941 2275.56 + 14.567 0.999609 1758027 2560.00 + 15.279 0.999658 1758113 2925.71 + 16.079 0.999707 1758197 3413.33 + 17.023 0.999756 1758283 4096.00 + 17.503 0.999780 1758326 4551.11 + 18.047 0.999805 1758369 5120.00 + 18.767 0.999829 1758412 5851.43 + 19.775 0.999854 1758455 6826.67 + 20.975 0.999878 1758498 8192.00 + 21.855 0.999890 1758519 9102.22 + 22.447 0.999902 1758542 10240.00 + 23.231 0.999915 1758562 11702.86 + 24.415 0.999927 1758584 13653.33 + 25.615 0.999939 1758605 16384.00 + 26.351 0.999945 1758616 18204.44 + 26.799 0.999951 1758627 20480.00 + 27.423 0.999957 1758637 23405.71 + 28.623 0.999963 1758648 27306.67 + 29.455 0.999969 1758659 32768.00 + 29.839 0.999973 1758664 36408.89 + 30.271 0.999976 1758670 40960.00 + 30.655 0.999979 1758675 46811.43 + 31.167 0.999982 1758680 54613.33 + 31.839 0.999985 1758686 65536.00 + 32.303 0.999986 1758688 72817.78 + 33.087 0.999988 1758691 81920.00 + 33.727 0.999989 1758694 93622.86 + 33.919 0.999991 1758696 109226.67 + 34.303 0.999992 1758699 131072.00 + 34.399 0.999993 1758700 145635.56 + 35.871 0.999994 1758702 163840.00 + 35.903 0.999995 1758703 187245.71 + 36.127 0.999995 1758704 218453.33 + 36.639 0.999996 1758706 262144.00 + 36.639 0.999997 1758706 291271.11 + 36.671 0.999997 1758707 327680.00 + 37.375 0.999997 1758708 374491.43 + 37.375 0.999998 1758708 436906.67 + 37.471 0.999998 1758709 524288.00 + 37.471 0.999998 1758709 582542.22 + 37.631 0.999998 1758710 655360.00 + 37.631 0.999999 1758710 748982.86 + 37.631 0.999999 1758710 873813.33 + 38.399 0.999999 1758711 1048576.00 + 38.399 0.999999 1758711 1165084.44 + 38.399 0.999999 1758711 1310720.00 + 38.399 0.999999 1758711 1497965.71 + 38.399 0.999999 1758711 1747626.67 + 39.455 1.000000 1758712 2097152.00 + 39.455 1.000000 1758712 inf +#[Mean = 1.383, StdDeviation = 0.889] +#[Max = 39.424, Total count = 1758712] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 1919425 requests in 2.00m, 207.85MB read + Non-2xx or 3xx responses: 20057 +Requests/sec: 15995.05 +Transfer/sec: 1.73MB diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage2/put-16000rps-120s.txt b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage2/put-16000rps-120s.txt new file mode 100644 index 000000000..8d41b92d8 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage2/put-16000rps-120s.txt @@ -0,0 +1,137 @@ +Running 2m test @ http://localhost:8080 + 4 threads and 64 connections + Thread calibration: mean lat.: 1.936ms, rate sampling interval: 10ms + Thread calibration: mean lat.: 1.950ms, rate sampling interval: 10ms + Thread calibration: mean lat.: 2.047ms, rate sampling interval: 10ms + Thread calibration: mean lat.: 1.897ms, rate sampling interval: 10ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 2.53ms 2.85ms 43.01ms 88.87% + Req/Sec 4.23k 831.47 15.33k 81.96% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.59ms + 75.000% 2.62ms + 90.000% 5.74ms + 99.000% 14.73ms + 99.900% 23.49ms + 99.990% 31.20ms + 99.999% 35.84ms +100.000% 43.04ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.078 0.000000 1 1.00 + 0.647 0.100000 176319 1.11 + 0.900 0.200000 352393 1.25 + 1.132 0.300000 528178 1.43 + 1.359 0.400000 704254 1.67 + 1.586 0.500000 879955 2.00 + 1.708 0.550000 967839 2.22 + 1.850 0.600000 1055553 2.50 + 2.028 0.650000 1143565 2.86 + 2.265 0.700000 1231118 3.33 + 2.625 0.750000 1319069 4.00 + 2.921 0.775000 1363220 4.44 + 3.329 0.800000 1407110 5.00 + 3.801 0.825000 1450944 5.71 + 4.351 0.850000 1495171 6.67 + 4.979 0.875000 1538887 8.00 + 5.351 0.887500 1561113 8.89 + 5.743 0.900000 1582895 10.00 + 6.211 0.912500 1604935 11.43 + 6.759 0.925000 1626955 13.33 + 7.415 0.937500 1648864 16.00 + 7.811 0.943750 1659893 17.78 + 8.247 0.950000 1670843 20.00 + 8.735 0.956250 1681834 22.86 + 9.327 0.962500 1692849 26.67 + 10.023 0.968750 1703780 32.00 + 10.447 0.971875 1709304 35.56 + 10.919 0.975000 1714811 40.00 + 11.471 0.978125 1720268 45.71 + 12.103 0.981250 1725801 53.33 + 12.839 0.984375 1731258 64.00 + 13.279 0.985938 1733990 71.11 + 13.783 0.987500 1736765 80.00 + 14.351 0.989062 1739496 91.43 + 14.991 0.990625 1742239 106.67 + 15.727 0.992188 1744997 128.00 + 16.151 0.992969 1746378 142.22 + 16.623 0.993750 1747758 160.00 + 17.151 0.994531 1749127 182.86 + 17.727 0.995313 1750482 213.33 + 18.447 0.996094 1751885 256.00 + 18.831 0.996484 1752539 284.44 + 19.279 0.996875 1753224 320.00 + 19.791 0.997266 1753911 365.71 + 20.351 0.997656 1754611 426.67 + 21.055 0.998047 1755291 512.00 + 21.423 0.998242 1755635 568.89 + 21.887 0.998437 1755981 640.00 + 22.415 0.998633 1756318 731.43 + 22.895 0.998828 1756663 853.33 + 23.567 0.999023 1757006 1024.00 + 23.951 0.999121 1757175 1137.78 + 24.383 0.999219 1757349 1280.00 + 24.863 0.999316 1757518 1462.86 + 25.455 0.999414 1757695 1706.67 + 26.063 0.999512 1757863 2048.00 + 26.447 0.999561 1757951 2275.56 + 26.831 0.999609 1758033 2560.00 + 27.295 0.999658 1758120 2925.71 + 27.807 0.999707 1758206 3413.33 + 28.431 0.999756 1758292 4096.00 + 28.815 0.999780 1758336 4551.11 + 29.247 0.999805 1758377 5120.00 + 29.631 0.999829 1758421 5851.43 + 30.079 0.999854 1758463 6826.67 + 30.655 0.999878 1758506 8192.00 + 31.007 0.999890 1758528 9102.22 + 31.279 0.999902 1758549 10240.00 + 31.711 0.999915 1758571 11702.86 + 32.015 0.999927 1758593 13653.33 + 32.479 0.999939 1758613 16384.00 + 32.719 0.999945 1758624 18204.44 + 32.959 0.999951 1758635 20480.00 + 33.215 0.999957 1758645 23405.71 + 33.631 0.999963 1758656 27306.67 + 33.919 0.999969 1758669 32768.00 + 34.079 0.999973 1758673 36408.89 + 34.303 0.999976 1758678 40960.00 + 34.431 0.999979 1758683 46811.43 + 34.655 0.999982 1758689 54613.33 + 35.071 0.999985 1758694 65536.00 + 35.199 0.999986 1758696 72817.78 + 35.487 0.999988 1758699 81920.00 + 35.839 0.999989 1758702 93622.86 + 36.159 0.999991 1758704 109226.67 + 36.479 0.999992 1758707 131072.00 + 36.671 0.999993 1758708 145635.56 + 37.695 0.999994 1758710 163840.00 + 37.951 0.999995 1758711 187245.71 + 38.175 0.999995 1758712 218453.33 + 38.367 0.999996 1758714 262144.00 + 38.367 0.999997 1758714 291271.11 + 38.751 0.999997 1758715 327680.00 + 39.135 0.999997 1758716 374491.43 + 39.135 0.999998 1758716 436906.67 + 39.423 0.999998 1758717 524288.00 + 39.423 0.999998 1758717 582542.22 + 40.095 0.999998 1758718 655360.00 + 40.095 0.999999 1758718 748982.86 + 40.095 0.999999 1758718 873813.33 + 40.575 0.999999 1758719 1048576.00 + 40.575 0.999999 1758719 1165084.44 + 40.575 0.999999 1758719 1310720.00 + 40.575 0.999999 1758719 1497965.71 + 40.575 0.999999 1758719 1747626.67 + 43.039 1.000000 1758720 2097152.00 + 43.039 1.000000 1758720 inf +#[Mean = 2.533, StdDeviation = 2.848] +#[Max = 43.008, Total count = 1758720] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 1919417 requests in 2.00m, 123.58MB read + Non-2xx or 3xx responses: 82103 +Requests/sec: 15995.17 +Transfer/sec: 1.03MB From 676e37eaff9960f547b667a1c025e7145a0042c7 Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Tue, 5 Mar 2024 07:07:18 +0300 Subject: [PATCH 08/31] add photos for report --- .../statistic/profiler/stage2/cpu/cpu-get.png | Bin 0 -> 136208 bytes .../statistic/profiler/stage2/cpu/cpu-put.png | Bin 0 -> 158513 bytes .../statistic/wrk/stage2/get-16000rps-120s.png | Bin 0 -> 34901 bytes .../statistic/wrk/stage2/put-16000rps-120s.png | Bin 0 -> 34994 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/cpu/cpu-get.png create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/cpu/cpu-put.png create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage2/get-16000rps-120s.png create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage2/put-16000rps-120s.png diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/cpu/cpu-get.png b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage2/cpu/cpu-get.png new file mode 100644 index 0000000000000000000000000000000000000000..0a07a798091b4f3e33a7b5e01672f19b8d4b73a5 GIT binary patch literal 136208 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%0AC`5JY}F&kL-M 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%0D_E-E*G-c0=ydItQ_7A$3dp&0^$tsN;jRgw9 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≦2MxkS@)>8wTnV!XBM;fq;k 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 R;w;@XbGQ1gq#cLO{U2NWX)XW& literal 0 HcmV?d00001 diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage2/put-16000rps-120s.png b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage2/put-16000rps-120s.png new file mode 100644 index 0000000000000000000000000000000000000000..25af2fa7688ebec6bf25eb76a3aaff16305c0849 GIT binary patch literal 34994 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 Date: Thu, 14 Mar 2024 17:55:21 +0300 Subject: [PATCH 09/31] add stage3 --- .../pavelemelyanov/ConsistentHashing.java | 42 ++++ .../pavelemelyanov/ExecutorServiceConfig.java | 3 +- .../itmo/test/pavelemelyanov/FactoryImpl.java | 2 +- .../itmo/test/pavelemelyanov/HashService.java | 27 ++ .../vk/itmo/test/pavelemelyanov/MyServer.java | 231 ++++++++++++------ .../test/pavelemelyanov/ServerStarter.java | 47 ++-- 6 files changed, 261 insertions(+), 91 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/HashService.java diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java new file mode 100644 index 000000000..18fcd4230 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java @@ -0,0 +1,42 @@ +package ru.vk.itmo.test.pavelemelyanov; + +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +public class ConsistentHashing { + private final Map virtualNodeMapping = new TreeMap<>(); + private final HashService hashService = new HashService(); + + public String getShardByKey(String key) { + int keyHash = hashKey(key); + Map.Entry entry = null; + + for (Map.Entry virtualNode : virtualNodeMapping.entrySet()) { + if (virtualNode.getKey() >= keyHash) { + entry = virtualNode; + break; + } + } + + if (entry == null && virtualNodeMapping.isEmpty()) { + return null; + } + if (entry == null) { + return virtualNodeMapping.get(virtualNodeMapping.keySet().iterator().next()); + } + + return entry.getValue(); + } + + public void addShard(String newShard, Set nodeHashes) { + for (final int nodeHash : nodeHashes) { + virtualNodeMapping.put(nodeHash, newShard); + } + } + + private int hashKey(String key) { + return hashService.digest(key.getBytes(StandardCharsets.UTF_8)); + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java index 9314a722c..4eaa08a46 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java @@ -4,12 +4,13 @@ import java.util.concurrent.BlockingQueue; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; public final class ExecutorServiceConfig { public static final int CORE_AMOUNT = Runtime.getRuntime().availableProcessors(); public static final int CORE_POOL_SIZE = CORE_AMOUNT / 2; public static final int MAX_CORE_POOL_SIZE = CORE_AMOUNT; - public static final int KEEP_ALIVE_TIME = 200; + public static final long KEEP_ALIVE_TIME = TimeUnit.SECONDS.toNanos(3); public static final int QUEUE_CAPACITY = 64; public static final BlockingQueue queue = new ArrayBlockingQueue<>(QUEUE_CAPACITY); public static final RejectedExecutionHandler HANDLER = new ThreadPoolExecutor.AbortPolicy(); diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java index b2ddafa1c..29b7a0a7d 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java @@ -4,7 +4,7 @@ import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.test.ServiceFactory; -@ServiceFactory(stage = 1) +@ServiceFactory(stage = 3) public class FactoryImpl implements ServiceFactory.Factory { @Override diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HashService.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HashService.java new file mode 100644 index 000000000..378ce9aa6 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HashService.java @@ -0,0 +1,27 @@ +package ru.vk.itmo.test.pavelemelyanov; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.nio.ByteBuffer; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class HashService { + private final MessageDigest messageDigest; + private static final Logger logger = LoggerFactory.getLogger(HashService.class); + + public HashService() { + try { + this.messageDigest = MessageDigest.getInstance("SHA-256"); + } catch (NoSuchAlgorithmException e) { + logger.error("HashService init error:", e.getCause()); + throw new IllegalArgumentException("HashService init error:", e); + } + } + + public int digest(byte[] bytes) { + final byte[] hash = messageDigest.digest(bytes); + return ByteBuffer.wrap(hash).getInt(); + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index 5b3fcc639..6bcbd69a0 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -1,148 +1,237 @@ package ru.vk.itmo.test.pavelemelyanov; +import one.nio.http.HttpClient; import one.nio.http.HttpServer; import one.nio.http.HttpServerConfig; import one.nio.http.HttpSession; +import one.nio.http.Param; +import one.nio.http.Path; import one.nio.http.Request; +import one.nio.http.RequestMethod; import one.nio.http.Response; +import one.nio.net.ConnectionString; import one.nio.server.AcceptorConfig; -import one.nio.util.Utf8; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.dao.BaseEntry; import ru.vk.itmo.dao.Entry; import ru.vk.itmo.test.reference.dao.ReferenceDao; import java.io.IOException; -import java.io.UncheckedIOException; import java.lang.foreign.MemorySegment; import java.lang.foreign.ValueLayout; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import static ru.vk.itmo.test.pavelemelyanov.ExecutorServiceConfig.KEEP_ALIVE_TIME; + public class MyServer extends HttpServer { private static final String V0_PATH = "/v0/entity"; - private static final String ID_PARAM = "id="; - + private static final String ID_PARAM = "id"; + private static final Logger logger = LoggerFactory.getLogger(MyServer.class); private final ReferenceDao dao; private final ExecutorService workersPool; + private final Map httpClients = new HashMap<>(); + private final ConsistentHashing shards; + private final String selfUrl; public MyServer(ServiceConfig config, ReferenceDao dao) throws IOException { - super(configureServer(config)); + super(createServerConfig(config)); + selfUrl = config.selfUrl(); + shards = new ConsistentHashing(); this.dao = dao; workersPool = configureWorkersPool(); - } - @Override - public void handleRequest(Request request, HttpSession session) { - if (!request.getPath().equals(V0_PATH)) { - sendResponse( - session, - new Response(Response.BAD_REQUEST, Response.EMPTY) - ); - return; - } + for (String url : config.clusterUrls()) { + int nodeCount = 1; + HashSet nodeSet = new HashSet<>(nodeCount); + HashService hashService = new HashService(); + for (int i = 0; i < nodeCount; ++i) { + nodeSet.add(hashService.digest(url.getBytes(StandardCharsets.UTF_8))); + } + shards.addShard(url, nodeSet); - String paramId = request.getParameter(ID_PARAM); - if (paramId == null || paramId.isBlank()) { - sendResponse( - session, - new Response(Response.BAD_REQUEST, Response.EMPTY) - ); - return; - } - - try { - workersPool.execute(() -> { - try { - sendResponse( - session, - handleRequestToEntity(request, paramId) - ); - } catch (Exception e) { - sendResponse( - session, - new Response(Response.INTERNAL_ERROR, Response.EMPTY) - ); - } - }); - } catch (RejectedExecutionException e) { - sendResponse( - session, - new Response(Response.SERVICE_UNAVAILABLE, Response.EMPTY) - ); + httpClients.put(url, new HttpClient(new ConnectionString(url))); } } @Override public synchronized void stop() { super.stop(); + for (HttpClient httpClient : httpClients.values()) { + if (httpClient != null && !httpClient.isClosed()) { + httpClient.close(); + } + } workersPool.close(); } - private Response handleRequestToEntity(Request request, String id) { - return switch (request.getMethod()) { - case Request.METHOD_GET -> getEntity(id); - case Request.METHOD_PUT -> putEntity(request, id); - case Request.METHOD_DELETE -> deleteEntity(id); - default -> new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); - }; - } + @Path(V0_PATH) + @RequestMethod(Request.METHOD_GET) + public final Response get(@Param(ID_PARAM) String id, Request request) { + if (id == null || id.isBlank()) { + return null; + } - private Response getEntity(String id) { MemorySegment key = convertFromString(id); + + if (canBeForward(id)) { + return shardLookup(id, request); + } + Entry entry = dao.get(key); + if (entry == null) { return new Response(Response.NOT_FOUND, Response.EMPTY); } + return Response.ok(entry.value().toArray(ValueLayout.JAVA_BYTE)); } - private Response putEntity(Request request, String id) { + @Path(V0_PATH) + @RequestMethod(Request.METHOD_PUT) + public final Response put(@Param(ID_PARAM) String id, Request request) { + if (id == null || id.isBlank()) { + return null; + } + MemorySegment key = convertFromString(id); - MemorySegment value = MemorySegment.ofArray(request.getBody()); - dao.upsert(new BaseEntry<>(key, value)); + + if (canBeForward(id)) { + return shardLookup(id, request); + } + + Entry entry = new BaseEntry<>( + key, + MemorySegment.ofArray(request.getBody()) + ); + + dao.upsert(entry); + return new Response(Response.CREATED, Response.EMPTY); } - private Response deleteEntity(String id) { + @Path(V0_PATH) + @RequestMethod(Request.METHOD_DELETE) + public final Response delete(@Param(ID_PARAM) String id, Request request) { + if (id == null || id.isBlank()) { + return null; + } + MemorySegment key = convertFromString(id); + + if (canBeForward(id)) { + return shardLookup(id, request); + } + dao.upsert(new BaseEntry<>(key, null)); + return new Response(Response.ACCEPTED, Response.EMPTY); } - private static MemorySegment convertFromString(String value) { - return MemorySegment.ofArray(Utf8.toBytes(value)); + @Path(V0_PATH) + public Response otherMethod() { + return new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); } - private static HttpServerConfig configureServer(ServiceConfig serviceConfig) { - var httpServerConfig = new HttpServerConfig(); - var acceptorConfig = new AcceptorConfig(); - acceptorConfig.port = serviceConfig.selfPort(); - acceptorConfig.reusePort = true; + @Override + public void handleDefault(Request request, HttpSession session) { + Response response = new Response(Response.BAD_REQUEST, Response.EMPTY); + sendResponse(response, session); + } - httpServerConfig.acceptors = new AcceptorConfig[] {acceptorConfig}; - httpServerConfig.closeSessions = true; - return httpServerConfig; + @Override + public void handleRequest(Request request, HttpSession session) { + try { + long startTime = System.nanoTime(); + workersPool.execute(() -> { + if (System.nanoTime() > startTime + KEEP_ALIVE_TIME) { + sendResponse(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY), session); + return; + } + + try { + super.handleRequest(request, session); + } catch (IOException e) { + logger.error("IOException in handleRequest workersPool"); + sendResponse( + new Response( + Response.INTERNAL_ERROR, + Response.EMPTY + ), + session + ); + } catch (Exception e) { + sendResponse( + new Response( + Response.BAD_REQUEST, + Response.EMPTY + ), + session + ); + } + }); + } catch (RejectedExecutionException e) { + logger.error("RejectedExecutionException in handleRequest: " + request + session); + sendResponse(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY), session); + } + } + + private void sendResponse(Response response, HttpSession session) { + try { + session.sendResponse(response); + } catch (IOException e) { + logger.error("IOException in sendResponse: " + response + session); + } } private static ExecutorService configureWorkersPool() { return new ThreadPoolExecutor( ExecutorServiceConfig.CORE_POOL_SIZE, ExecutorServiceConfig.MAX_CORE_POOL_SIZE, - ExecutorServiceConfig.KEEP_ALIVE_TIME, + KEEP_ALIVE_TIME, TimeUnit.MILLISECONDS, ExecutorServiceConfig.queue, ExecutorServiceConfig.HANDLER ); } - private void sendResponse(HttpSession session, Response response) { + private boolean canBeForward(final String id) { + return !shards.getShardByKey(id).equals(selfUrl); + } + + private Response shardLookup(final String id, final Request request) { + Response response; + Request redirect = new Request(request); try { - session.sendResponse(response); - } catch (IOException e) { - throw new UncheckedIOException(e); + response = httpClients.get(shards.getShardByKey(id)).invoke(redirect, 500); + } catch (Exception e) { + response = new Response(Response.BAD_GATEWAY, Response.EMPTY); } + return new Response(response.getHeaders()[0], response.getBody()); + } + + private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) { + HttpServerConfig httpServerConfig = new HttpServerConfig(); + AcceptorConfig acceptorConfig = new AcceptorConfig(); + + acceptorConfig.port = serviceConfig.selfPort(); + acceptorConfig.reusePort = true; + + httpServerConfig.acceptors = new AcceptorConfig[]{acceptorConfig}; + httpServerConfig.closeSessions = true; + + return httpServerConfig; + } + + private static MemorySegment convertFromString(String value) { + return MemorySegment.ofArray(value.getBytes(StandardCharsets.UTF_8)); } } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java index c91617d96..9860570bc 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java @@ -3,33 +3,44 @@ import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.dao.Config; import ru.vk.itmo.test.reference.dao.ReferenceDao; +import ru.vk.itmo.test.smirnovandrew.MyService; import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; import java.nio.file.Path; +import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public final class ServerStarter { private static final Path WORKING_DIR = Path.of("./data1/"); private static final String URL = "http://localhost"; - private static final int FLUSH_THRESHOLD_BYTES = 2 * 1024 * 1024; + private static final List URLS = List.of( + "http://localhost:8080", + "http://localhost:8081", + "http://localhost:8082" + ); - public static void main(String[] args) throws IOException { - ReferenceDao dao = new ReferenceDao( - new Config( - WORKING_DIR, - FLUSH_THRESHOLD_BYTES - ) - ); - MyServer server = new MyServer( - new ServiceConfig( - 8080, - URL, - List.of(URL), - WORKING_DIR - ), - dao - ); - server.start(); + public static void main(String[] args) throws IOException, URISyntaxException, ExecutionException, InterruptedException { + List services = new ArrayList<>(); + for (String url : URLS) { + int port = new URI(url).getPort(); + services.add( + new MyService( + new ServiceConfig( + port, + URL, + URLS, + WORKING_DIR + ) + ) + ); + } + + for (MyService service : services) { + service.start().get(); + } } private ServerStarter() { From 48f05697af597d736990b8e597ca78c32efa1dbe Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 14 Mar 2024 18:14:04 +0300 Subject: [PATCH 10/31] fix coed style --- .../java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java index 9860570bc..6f6a32bc5 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java @@ -22,7 +22,8 @@ public final class ServerStarter { "http://localhost:8082" ); - public static void main(String[] args) throws IOException, URISyntaxException, ExecutionException, InterruptedException { + public static void main(String[] args) + throws IOException, URISyntaxException, ExecutionException, InterruptedException { List services = new ArrayList<>(); for (String url : URLS) { int port = new URI(url).getPort(); From adfd491fb88ac78c28b084c6678f227ca86d73a4 Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 14 Mar 2024 18:16:17 +0300 Subject: [PATCH 11/31] fix coed style --- src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java index 6f6a32bc5..38f0f04d7 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java @@ -1,8 +1,6 @@ package ru.vk.itmo.test.pavelemelyanov; import ru.vk.itmo.ServiceConfig; -import ru.vk.itmo.dao.Config; -import ru.vk.itmo.test.reference.dao.ReferenceDao; import ru.vk.itmo.test.smirnovandrew.MyService; import java.io.IOException; From 3dfc6325910016062da19d9d23019111dd3b8672 Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 28 Mar 2024 17:46:02 +0300 Subject: [PATCH 12/31] add stage 4 --- .../pavelemelyanov/ConsistentHashing.java | 63 +++- .../ExecutorServiceWrapper.java | 45 +++ .../itmo/test/pavelemelyanov/FactoryImpl.java | 2 +- .../itmo/test/pavelemelyanov/HTTPUtils.java | 28 ++ .../itmo/test/pavelemelyanov/HeaderUtils.java | 11 + .../vk/itmo/test/pavelemelyanov/MyServer.java | 348 +++++++++--------- .../test/pavelemelyanov/RequestHandler.java | 84 +++++ .../test/pavelemelyanov/ServerStarter.java | 60 +-- .../itmo/test/pavelemelyanov/ServiceImpl.java | 26 +- .../dao/BaseEntryWithTimestamp.java | 8 + .../pavelemelyanov/dao/ByteArraySegment.java | 48 +++ .../vk/itmo/test/pavelemelyanov/dao/Dao.java | 87 +++++ .../dao/EntryWithTimestamp.java | 9 + .../test/pavelemelyanov/dao/MemTable.java | 47 +++ .../dao/MemorySegmentComparator.java | 89 +++++ .../dao/MergingEntryIterator.java | 70 ++++ .../test/pavelemelyanov/dao/ReferenceDao.java | 288 +++++++++++++++ .../itmo/test/pavelemelyanov/dao/SSTable.java | 207 +++++++++++ .../pavelemelyanov/dao/SSTableWriter.java | 170 +++++++++ .../test/pavelemelyanov/dao/SSTables.java | 162 ++++++++ .../test/pavelemelyanov/dao/TableSet.java | 199 ++++++++++ .../dao/WeightedPeekingEntryIterator.java | 65 ++++ 22 files changed, 1897 insertions(+), 219 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceWrapper.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/HTTPUtils.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/HeaderUtils.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/BaseEntryWithTimestamp.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/ByteArraySegment.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/Dao.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/EntryWithTimestamp.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemTable.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemorySegmentComparator.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MergingEntryIterator.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/ReferenceDao.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTable.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTableWriter.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTables.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/TableSet.java create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/WeightedPeekingEntryIterator.java diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java index 18fcd4230..6a8f458ee 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java @@ -1,42 +1,69 @@ package ru.vk.itmo.test.pavelemelyanov; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; import java.util.Map; -import java.util.Set; +import java.util.NavigableMap; +import java.util.SortedMap; import java.util.TreeMap; +import java.util.stream.Collectors; public class ConsistentHashing { - private final Map virtualNodeMapping = new TreeMap<>(); + private final NavigableMap virtualNodeMapping = new TreeMap<>(); private final HashService hashService = new HashService(); - public String getShardByKey(String key) { - int keyHash = hashKey(key); - Map.Entry entry = null; - - for (Map.Entry virtualNode : virtualNodeMapping.entrySet()) { - if (virtualNode.getKey() >= keyHash) { - entry = virtualNode; - break; + public ConsistentHashing(List clusterUrls, int numbOfVirtualNodes) { + for (String clusterUrl : clusterUrls) { + for (int i = 0; i < numbOfVirtualNodes; i++) { + addNode(i, clusterUrl); } } + } + public void addNode(int numOfNode, String node) { + int hash = getHash(node + numOfNode); + virtualNodeMapping.put(hash, node); + } - if (entry == null && virtualNodeMapping.isEmpty()) { + public String getNode(String key) { + if (virtualNodeMapping.isEmpty()) { return null; } - if (entry == null) { - return virtualNodeMapping.get(virtualNodeMapping.keySet().iterator().next()); + + int hash = getHash(key); + SortedMap tailMap = virtualNodeMapping.tailMap(hash); + var nodeEntry = tailMap.isEmpty() ? virtualNodeMapping.firstEntry() : tailMap.firstEntry(); + return nodeEntry.getValue(); + } + + public List getNodes(String key, int from) { + if (virtualNodeMapping.isEmpty()) { + return new ArrayList<>(); } - return entry.getValue(); + int hash = getHash(key); + SortedMap tailMap = virtualNodeMapping.tailMap(hash); + var nodesMap = tailMap.isEmpty() ? virtualNodeMapping : tailMap; + return nodesMap.values() + .stream() + .limit(from) + .collect(Collectors.toList()); } - public void addShard(String newShard, Set nodeHashes) { - for (final int nodeHash : nodeHashes) { - virtualNodeMapping.put(nodeHash, newShard); + public List getNodes(String key, List clusterUrls, int from) { + Map nodesHashes = new TreeMap<>(); + + for (String nodeUrl : clusterUrls) { + nodesHashes.put(getHash(nodeUrl + key), nodeUrl); } + + return nodesHashes.values() + .stream() + .limit(from) + .collect(Collectors.toList()); } - private int hashKey(String key) { + private int getHash(String key) { return hashService.digest(key.getBytes(StandardCharsets.UTF_8)); } } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceWrapper.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceWrapper.java new file mode 100644 index 000000000..242222eea --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceWrapper.java @@ -0,0 +1,45 @@ +package ru.vk.itmo.test.pavelemelyanov; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import static ru.vk.itmo.test.pavelemelyanov.ExecutorServiceConfig.KEEP_ALIVE_TIME; + +public class ExecutorServiceWrapper { + private final ExecutorService workingPool; + private static final Logger log = LoggerFactory.getLogger(MyServer.class); + + public ExecutorServiceWrapper() { + workingPool = new ThreadPoolExecutor( + ExecutorServiceConfig.CORE_POOL_SIZE, + ExecutorServiceConfig.MAX_CORE_POOL_SIZE, + KEEP_ALIVE_TIME, + TimeUnit.MILLISECONDS, + ExecutorServiceConfig.queue, + ExecutorServiceConfig.HANDLER + ); + } + + public ExecutorService getExecutorService() { + return workingPool; + } + + public void shutdownAndAwaitTermination() { + workingPool.shutdown(); + try { + if (!workingPool.awaitTermination(60, TimeUnit.SECONDS)) { + workingPool.shutdownNow(); + if (!workingPool.awaitTermination(60, TimeUnit.SECONDS)) { + log.error("ExecutorService error with stopping"); + } + } + } catch (InterruptedException ex) { + workingPool.shutdownNow(); + Thread.currentThread().interrupt(); + } + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java index 29b7a0a7d..5cb05c236 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java @@ -4,7 +4,7 @@ import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.test.ServiceFactory; -@ServiceFactory(stage = 3) +@ServiceFactory(stage = 4) public class FactoryImpl implements ServiceFactory.Factory { @Override diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HTTPUtils.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HTTPUtils.java new file mode 100644 index 000000000..7c3fa8616 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HTTPUtils.java @@ -0,0 +1,28 @@ +package ru.vk.itmo.test.pavelemelyanov; + +import one.nio.http.Request; +import one.nio.http.Response; + +import java.net.HttpURLConnection; +import java.util.Map; +import java.util.Set; + +public class HTTPUtils { + public static final Set METHODS = Set.of( + Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE + ); + public static final int REQUEST_TIMEOUT = 300; + public static final Map HTTP_CODE = Map.of( + HttpURLConnection.HTTP_OK, Response.OK, + HttpURLConnection.HTTP_ACCEPTED, Response.ACCEPTED, + HttpURLConnection.HTTP_CREATED, Response.CREATED, + HttpURLConnection.HTTP_NOT_FOUND, Response.NOT_FOUND, + HttpURLConnection.HTTP_BAD_REQUEST, Response.BAD_REQUEST, + HttpURLConnection.HTTP_INTERNAL_ERROR, Response.INTERNAL_ERROR + ); + public static final int NUMBER_OF_VIRTUAL_NODES = 5; + + private HTTPUtils() { + + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HeaderUtils.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HeaderUtils.java new file mode 100644 index 000000000..415c6ed8b --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HeaderUtils.java @@ -0,0 +1,11 @@ +package ru.vk.itmo.test.pavelemelyanov; + +public class HeaderUtils { + public static final String HTTP_TIMESTAMP_HEADER = "X-Timestamp"; + public static final String NIO_TIMESTAMP_HEADER = "x-timestamp:"; + public static final String HTTP_TERMINATION_HEADER = "X-Termination"; + + private HeaderUtils() { + + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index 6bcbd69a0..9a2ed8a7a 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -1,237 +1,255 @@ package ru.vk.itmo.test.pavelemelyanov; -import one.nio.http.HttpClient; +import java.net.http.HttpClient; +import one.nio.http.HttpException; import one.nio.http.HttpServer; import one.nio.http.HttpServerConfig; import one.nio.http.HttpSession; -import one.nio.http.Param; -import one.nio.http.Path; import one.nio.http.Request; -import one.nio.http.RequestMethod; import one.nio.http.Response; -import one.nio.net.ConnectionString; import one.nio.server.AcceptorConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.vk.itmo.ServiceConfig; -import ru.vk.itmo.dao.BaseEntry; -import ru.vk.itmo.dao.Entry; -import ru.vk.itmo.test.reference.dao.ReferenceDao; +import ru.vk.itmo.test.pavelemelyanov.dao.Dao; import java.io.IOException; -import java.lang.foreign.MemorySegment; -import java.lang.foreign.ValueLayout; -import java.nio.charset.StandardCharsets; +import java.net.URI; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.ArrayList; +import java.util.Comparator; import java.util.HashMap; -import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; -import static ru.vk.itmo.test.pavelemelyanov.ExecutorServiceConfig.KEEP_ALIVE_TIME; +import static ru.vk.itmo.test.pavelemelyanov.HTTPUtils.HTTP_CODE; +import static ru.vk.itmo.test.pavelemelyanov.HTTPUtils.METHODS; +import static ru.vk.itmo.test.pavelemelyanov.HTTPUtils.REQUEST_TIMEOUT; +import static ru.vk.itmo.test.pavelemelyanov.HeaderUtils.HTTP_TERMINATION_HEADER; +import static ru.vk.itmo.test.pavelemelyanov.HeaderUtils.HTTP_TIMESTAMP_HEADER; +import static ru.vk.itmo.test.pavelemelyanov.HeaderUtils.NIO_TIMESTAMP_HEADER; public class MyServer extends HttpServer { - private static final String V0_PATH = "/v0/entity"; - private static final String ID_PARAM = "id"; - private static final Logger logger = LoggerFactory.getLogger(MyServer.class); - private final ReferenceDao dao; + private static final String NOT_ENOUGH_REPLICAS = "504 Not Enough Replicas"; + private final ExecutorService workersPool; - private final Map httpClients = new HashMap<>(); + private final HttpClient httpClient; private final ConsistentHashing shards; + private final List clusterUrls; + private final RequestHandler requestHandler; + private static final Logger log = LoggerFactory.getLogger(MyServer.class); + private final String selfUrl; + private final int clusterSize; - public MyServer(ServiceConfig config, ReferenceDao dao) throws IOException { + public MyServer(ServiceConfig config, Dao dao, ExecutorServiceWrapper worker, + ConsistentHashing shards) throws IOException { super(createServerConfig(config)); - selfUrl = config.selfUrl(); - shards = new ConsistentHashing(); - this.dao = dao; - workersPool = configureWorkersPool(); - - for (String url : config.clusterUrls()) { - int nodeCount = 1; - HashSet nodeSet = new HashSet<>(nodeCount); - HashService hashService = new HashService(); - for (int i = 0; i < nodeCount; ++i) { - nodeSet.add(hashService.digest(url.getBytes(StandardCharsets.UTF_8))); - } - shards.addShard(url, nodeSet); + this.selfUrl = config.selfUrl(); + this.shards = shards; + this.requestHandler = new RequestHandler(dao); + this.workersPool = worker.getExecutorService(); + this.clusterSize = config.clusterUrls().size(); + this.clusterUrls = config.clusterUrls(); + + this.httpClient = HttpClient.newBuilder() + .executor(Executors.newFixedThreadPool(2)).build(); + } - httpClients.put(url, new HttpClient(new ConnectionString(url))); + @Override + public void handleDefault(Request request, HttpSession session) throws IOException { + Response response; + if (METHODS.contains(request.getMethod())) { + response = new Response(Response.BAD_REQUEST, Response.EMPTY); + } else { + response = new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); } + session.sendResponse(response); } @Override - public synchronized void stop() { - super.stop(); - for (HttpClient httpClient : httpClients.values()) { - if (httpClient != null && !httpClient.isClosed()) { - httpClient.close(); + public void handleRequest(Request request, HttpSession session) throws IOException { + try { + if (!request.getURI().startsWith("/v0/entity?id=") || !METHODS.contains(request.getMethod())) { + handleDefault(request, session); + return; } - } - workersPool.close(); - } - @Path(V0_PATH) - @RequestMethod(Request.METHOD_GET) - public final Response get(@Param(ID_PARAM) String id, Request request) { - if (id == null || id.isBlank()) { - return null; - } + String paramId = request.getParameter("id="); - MemorySegment key = convertFromString(id); + if (paramId == null || paramId.isBlank()) { + sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); + return; + } - if (canBeForward(id)) { - return shardLookup(id, request); - } + String fromStr = request.getParameter("from="); + String ackStr = request.getParameter("ack="); - Entry entry = dao.get(key); + int from = fromStr == null || fromStr.isEmpty() ? clusterSize : Integer.parseInt(fromStr); + int ack = ackStr == null || ackStr.isEmpty() ? from / 2 + 1 : Integer.parseInt(ackStr); - if (entry == null) { - return new Response(Response.NOT_FOUND, Response.EMPTY); - } + if (ack == 0 || from > clusterSize || ack > from) { + sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); + return; + } - return Response.ok(entry.value().toArray(ValueLayout.JAVA_BYTE)); + long processingStartTime = System.currentTimeMillis(); + workersPool.execute(() -> { + try { + processingRequest(request, session, processingStartTime, paramId, from, ack); + } catch (IOException e) { + log.error("Exception while sending close connection", e); + session.scheduleClose(); + } + }); + } catch (RejectedExecutionException e) { + session.sendResponse(new Response("429 Too Many Requests", Response.EMPTY)); + } } - @Path(V0_PATH) - @RequestMethod(Request.METHOD_PUT) - public final Response put(@Param(ID_PARAM) String id, Request request) { - if (id == null || id.isBlank()) { - return null; + private void processingRequest(Request request, HttpSession session, long processingStartTime, + String paramId, int from, int ack) throws IOException { + if (System.currentTimeMillis() - processingStartTime > 350) { + session.sendResponse(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); + return; } - MemorySegment key = convertFromString(id); - - if (canBeForward(id)) { - return shardLookup(id, request); + try { + if (request.getHeader(HTTP_TERMINATION_HEADER) == null) { + session.sendResponse(handleProxyRequest(request, session, paramId, from, ack)); + } else { + session.sendResponse(requestHandler.handle(request, paramId)); + } + } catch (Exception e) { + if (e.getClass() == HttpException.class) { + session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); + } else { + log.error("Exception during handleRequest: ", e); + session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); + } } - - Entry entry = new BaseEntry<>( - key, - MemorySegment.ofArray(request.getBody()) - ); - - dao.upsert(entry); - - return new Response(Response.CREATED, Response.EMPTY); } - @Path(V0_PATH) - @RequestMethod(Request.METHOD_DELETE) - public final Response delete(@Param(ID_PARAM) String id, Request request) { - if (id == null || id.isBlank()) { - return null; + private Response sendException(Exception exception) { + String responseCode; + if (exception.getClass().equals(TimeoutException.class)) { + responseCode = Response.REQUEST_TIMEOUT; + } else { + responseCode = Response.INTERNAL_ERROR; } + return new Response(responseCode, Response.EMPTY); + } - MemorySegment key = convertFromString(id); - - if (canBeForward(id)) { - return shardLookup(id, request); + private void sendResponse(HttpSession session, Response response) { + try { + session.sendResponse(response); + } catch (IOException e) { + log.error("Error sending response", e); + session.scheduleClose(); } + } - dao.upsert(new BaseEntry<>(key, null)); - - return new Response(Response.ACCEPTED, Response.EMPTY); + private HttpRequest createProxyRequest(Request request, String nodeUrl, String params) { + return HttpRequest.newBuilder(URI.create(nodeUrl + "/v0/entity?id=" + params)) + .method(request.getMethodName(), request.getBody() == null + ? HttpRequest.BodyPublishers.noBody() + : HttpRequest.BodyPublishers.ofByteArray(request.getBody())) + .setHeader(HTTP_TERMINATION_HEADER, "true") + .build(); } - @Path(V0_PATH) - public Response otherMethod() { - return new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); + private Response sendProxyRequest(HttpRequest httpRequest) { + try { + HttpResponse httpResponse = httpClient + .sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) + .get(REQUEST_TIMEOUT, TimeUnit.MILLISECONDS); + + String statusCode = HTTP_CODE.getOrDefault(httpResponse.statusCode(), null); + if (statusCode == null) { + return new Response(Response.INTERNAL_ERROR, httpResponse.body()); + } else { + + Response response = new Response(statusCode, httpResponse.body()); + long timestamp = httpRequest.headers() + .firstValueAsLong(HTTP_TIMESTAMP_HEADER).orElse(0); + response.addHeader(NIO_TIMESTAMP_HEADER + timestamp); + return response; + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return sendException(e); + } catch (ExecutionException | TimeoutException e) { + return sendException(e); + } } - @Override - public void handleDefault(Request request, HttpSession session) { - Response response = new Response(Response.BAD_REQUEST, Response.EMPTY); - sendResponse(response, session); + private List sendProxyRequests(Map httpRequests, List nodeUrls) { + List responses = new ArrayList<>(); + for (String nodeUrl : nodeUrls) { + HttpRequest httpRequest = httpRequests.get(nodeUrl); + if (!Objects.equals(selfUrl, nodeUrl)) { + responses.add(sendProxyRequest(httpRequest)); + } + } + return responses; } - @Override - public void handleRequest(Request request, HttpSession session) { - try { - long startTime = System.nanoTime(); - workersPool.execute(() -> { - if (System.nanoTime() > startTime + KEEP_ALIVE_TIME) { - sendResponse(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY), session); - return; - } + private Response handleProxyRequest(Request request, HttpSession session, String paramId, int from, int ack) { + List nodeUrls = shards.getNodes(paramId, clusterUrls, from); - try { - super.handleRequest(request, session); - } catch (IOException e) { - logger.error("IOException in handleRequest workersPool"); - sendResponse( - new Response( - Response.INTERNAL_ERROR, - Response.EMPTY - ), - session - ); - } catch (Exception e) { - sendResponse( - new Response( - Response.BAD_REQUEST, - Response.EMPTY - ), - session - ); - } - }); - } catch (RejectedExecutionException e) { - logger.error("RejectedExecutionException in handleRequest: " + request + session); - sendResponse(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY), session); + if (nodeUrls.size() < from) { + sendResponse(session, new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY)); } - } - private void sendResponse(Response response, HttpSession session) { - try { - session.sendResponse(response); - } catch (IOException e) { - logger.error("IOException in sendResponse: " + response + session); + HashMap httpRequests = new HashMap<>(nodeUrls.size()); + for (String nodeUrl : nodeUrls) { + httpRequests.put(nodeUrl, createProxyRequest(request, nodeUrl, paramId)); } - } - private static ExecutorService configureWorkersPool() { - return new ThreadPoolExecutor( - ExecutorServiceConfig.CORE_POOL_SIZE, - ExecutorServiceConfig.MAX_CORE_POOL_SIZE, - KEEP_ALIVE_TIME, - TimeUnit.MILLISECONDS, - ExecutorServiceConfig.queue, - ExecutorServiceConfig.HANDLER - ); - } + List responses = sendProxyRequests(httpRequests, nodeUrls); - private boolean canBeForward(final String id) { - return !shards.getShardByKey(id).equals(selfUrl); - } + if (httpRequests.get(selfUrl) != null) { + responses.add(requestHandler.handle(request, paramId)); + } - private Response shardLookup(final String id, final Request request) { - Response response; - Request redirect = new Request(request); - try { - response = httpClients.get(shards.getShardByKey(id)).invoke(redirect, 500); - } catch (Exception e) { - response = new Response(Response.BAD_GATEWAY, Response.EMPTY); + List successResponses = new ArrayList<>(); + for (Response response : responses) { + if (response.getStatus() < 500) { + successResponses.add(response); + } + } + + if (successResponses.size() >= ack) { + if (request.getMethod() == Request.METHOD_GET) { + successResponses.sort(Comparator.comparingLong(r -> { + String timestamp = r.getHeader(NIO_TIMESTAMP_HEADER); + return timestamp == null ? 0 : Long.parseLong(timestamp); + })); + return successResponses.getFirst(); + } else { + return successResponses.getLast(); + } + } else { + return new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY); } - return new Response(response.getHeaders()[0], response.getBody()); } private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) { - HttpServerConfig httpServerConfig = new HttpServerConfig(); + HttpServerConfig serverConfig = new HttpServerConfig(); AcceptorConfig acceptorConfig = new AcceptorConfig(); - acceptorConfig.port = serviceConfig.selfPort(); acceptorConfig.reusePort = true; - httpServerConfig.acceptors = new AcceptorConfig[]{acceptorConfig}; - httpServerConfig.closeSessions = true; - - return httpServerConfig; - } - - private static MemorySegment convertFromString(String value) { - return MemorySegment.ofArray(value.getBytes(StandardCharsets.UTF_8)); + serverConfig.acceptors = new AcceptorConfig[] {acceptorConfig}; + serverConfig.closeSessions = true; + return serverConfig; } } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java new file mode 100644 index 000000000..d4386eafe --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java @@ -0,0 +1,84 @@ +package ru.vk.itmo.test.pavelemelyanov; + +import one.nio.http.Request; +import one.nio.http.Response; +import ru.vk.itmo.test.pavelemelyanov.dao.BaseEntryWithTimestamp; +import ru.vk.itmo.test.pavelemelyanov.dao.Dao; +import ru.vk.itmo.test.pavelemelyanov.dao.EntryWithTimestamp; + +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.nio.charset.StandardCharsets; + +import static ru.vk.itmo.test.pavelemelyanov.HeaderUtils.HTTP_TIMESTAMP_HEADER; + +public class RequestHandler { + private final Dao dao; + + public RequestHandler(Dao dao) { + this.dao = dao; + } + + public Response handle(Request request, String id) { + if (id == null || id.isBlank()) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + + return switch (request.getMethod()) { + case Request.METHOD_GET -> getEntry(id); + case Request.METHOD_PUT -> putEntry(id, request); + case Request.METHOD_DELETE -> deleteEntry(id); + default -> new Response(Response.BAD_REQUEST, Response.EMPTY); + }; + } + + private Response getEntry(String id) { + MemorySegment key = convertFromString(id); + EntryWithTimestamp entry = dao.get(key); + + if (entry == null || entry.value() == null) { + long timestamp = entry != null ? entry.timestamp() : 0; + return sendResponseWithTimestamp( + Response.NOT_FOUND, + Response.EMPTY, + timestamp + ); + } + + return sendResponseWithTimestamp( + Response.OK, + entry.value().toArray(ValueLayout.JAVA_BYTE), + entry.timestamp() + ); + } + + private Response putEntry(String id, Request request) { + if (request.getBody() == null) { + return new Response(Response.BAD_REQUEST, Response.EMPTY); + } + + MemorySegment key = convertFromString(id); + MemorySegment value = MemorySegment.ofArray(request.getBody()); + + dao.upsert(new BaseEntryWithTimestamp(key, value, System.currentTimeMillis())); + + return new Response(Response.CREATED, Response.EMPTY); + } + + private Response deleteEntry(String id) { + MemorySegment key = convertFromString(id); + dao.upsert(new BaseEntryWithTimestamp<>(key, null, System.currentTimeMillis())); + + return new Response(Response.ACCEPTED, Response.EMPTY); + } + + private Response sendResponseWithTimestamp(String resultCode, byte[] body, long timestamp) { + Response response = new Response(resultCode, body); + response.addHeader(HTTP_TIMESTAMP_HEADER + timestamp); + return response; + } + + private static MemorySegment convertFromString(String value) { + return MemorySegment.ofArray(value.getBytes(StandardCharsets.UTF_8)); + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java index 38f0f04d7..8c291056d 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java @@ -1,44 +1,48 @@ package ru.vk.itmo.test.pavelemelyanov; import ru.vk.itmo.ServiceConfig; -import ru.vk.itmo.test.smirnovandrew.MyService; +import ru.vk.itmo.dao.Config; +import ru.vk.itmo.test.pavelemelyanov.dao.Dao; +import ru.vk.itmo.test.pavelemelyanov.dao.ReferenceDao; import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ExecutionException; + +import static ru.vk.itmo.test.pavelemelyanov.HTTPUtils.NUMBER_OF_VIRTUAL_NODES; public final class ServerStarter { - private static final Path WORKING_DIR = Path.of("./data1/"); private static final String URL = "http://localhost"; - private static final List URLS = List.of( - "http://localhost:8080", - "http://localhost:8081", - "http://localhost:8082" - ); - - public static void main(String[] args) - throws IOException, URISyntaxException, ExecutionException, InterruptedException { - List services = new ArrayList<>(); - for (String url : URLS) { - int port = new URI(url).getPort(); - services.add( - new MyService( - new ServiceConfig( - port, - URL, - URLS, - WORKING_DIR - ) - ) - ); + private static final Path WORKING_DIR = Path.of("./data1/"); + public static final long FLUSHING_THRESHOLD_BYTES = 1024 * 1024; + private static final int BASE_PORT = 8080; + + public static void main(String[] args) throws IOException { + int clusterSize = 3; + + List clusterUrls = new ArrayList<>(); + for (int i = 0; i < clusterSize; i++) { + int tempPortValue = BASE_PORT + i; + clusterUrls.add(URL + ":" + tempPortValue); } - for (MyService service : services) { - service.start().get(); + ExecutorServiceWrapper worker = new ExecutorServiceWrapper(); + + for (int i = 0; i < clusterSize; i++) { + Dao dao = new ReferenceDao(new Config(WORKING_DIR, FLUSHING_THRESHOLD_BYTES)); + + ServiceConfig serviceConfig = new ServiceConfig( + BASE_PORT + i, + clusterUrls.get(i), + clusterUrls, + WORKING_DIR); + + ConsistentHashing consistentHashing = new ConsistentHashing(clusterUrls, NUMBER_OF_VIRTUAL_NODES); + + MyServer server = new MyServer(serviceConfig, dao, worker, consistentHashing); + + server.start(); } } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java index ffc778afd..43a193982 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java @@ -3,35 +3,47 @@ import ru.vk.itmo.Service; import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.dao.Config; -import ru.vk.itmo.test.reference.dao.ReferenceDao; +import ru.vk.itmo.test.pavelemelyanov.dao.Dao; +import ru.vk.itmo.test.pavelemelyanov.dao.ReferenceDao; import java.io.IOException; import java.util.concurrent.CompletableFuture; +import static ru.vk.itmo.test.pavelemelyanov.HTTPUtils.NUMBER_OF_VIRTUAL_NODES; + public class ServiceImpl implements Service { - private static final int FLUSH_THRESHOLD_BYTES = 40 * 1024 * 1024; + private static final int FLUSH_THRESHOLD_BYTES = 1024 * 1024; private final ServiceConfig config; - private MyServer server; - private ReferenceDao dao; + private Dao dao; + private ExecutorServiceWrapper worker; + private Boolean isClosed = false; public ServiceImpl(ServiceConfig config) { this.config = config; } @Override - public CompletableFuture start() throws IOException { + public synchronized CompletableFuture start() throws IOException { dao = new ReferenceDao(new Config(config.workingDir(), FLUSH_THRESHOLD_BYTES)); - server = new MyServer(config, dao); + worker = new ExecutorServiceWrapper(); + ConsistentHashing consistentHashing = new ConsistentHashing(config.clusterUrls(), NUMBER_OF_VIRTUAL_NODES); + server = new MyServer(config, dao, worker, consistentHashing); server.start(); + isClosed = false; return CompletableFuture.completedFuture(null); } @Override - public CompletableFuture stop() throws IOException { + public synchronized CompletableFuture stop() throws IOException { + if (isClosed) { + return CompletableFuture.completedFuture(null); + } server.stop(); + worker.shutdownAndAwaitTermination(); dao.close(); + isClosed = true; return CompletableFuture.completedFuture(null); } } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/BaseEntryWithTimestamp.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/BaseEntryWithTimestamp.java new file mode 100644 index 000000000..596960051 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/BaseEntryWithTimestamp.java @@ -0,0 +1,8 @@ +package ru.vk.itmo.test.pavelemelyanov.dao; + +public record BaseEntryWithTimestamp(D key, D value, long timestamp) implements EntryWithTimestamp { + @Override + public String toString() { + return "{" + key + ":" + value + ":" + timestamp + "}"; + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/ByteArraySegment.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/ByteArraySegment.java new file mode 100644 index 000000000..51e541e3c --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/ByteArraySegment.java @@ -0,0 +1,48 @@ +package ru.vk.itmo.test.pavelemelyanov.dao; + +import java.io.IOException; +import java.lang.foreign.MemorySegment; +import java.nio.ByteBuffer; + +/** + * Growable buffer with {@link ByteBuffer} and {@link MemorySegment} interface. + * + * @author incubos + */ +final class ByteArraySegment { + private byte[] array; + private MemorySegment segment; + + ByteArraySegment(final int capacity) { + this.array = new byte[capacity]; + this.segment = MemorySegment.ofArray(array); + } + + void withArray(final ArrayConsumer consumer) throws IOException { + consumer.process(array); + } + + MemorySegment segment() { + return segment; + } + + void ensureCapacity(final long size) { + if (size > Integer.MAX_VALUE) { + throw new IllegalArgumentException("Too big!"); + } + + final int capacity = (int) size; + if (array.length >= capacity) { + return; + } + + // Grow to the nearest bigger power of 2 + final int newSize = Integer.highestOneBit(capacity) << 1; + array = new byte[newSize]; + segment = MemorySegment.ofArray(array); + } + + interface ArrayConsumer { + void process(byte[] array) throws IOException; + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/Dao.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/Dao.java new file mode 100644 index 000000000..0f4a4d284 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/Dao.java @@ -0,0 +1,87 @@ +package ru.vk.itmo.test.pavelemelyanov.dao; + +import java.io.Closeable; +import java.io.IOException; +import java.util.Iterator; + +public interface Dao> extends Closeable { + /** + * Returns ordered iterator of entries with keys between from (inclusive) and to (exclusive). + * @param from lower bound of range (inclusive) + * @param to upper bound of range (exclusive) + * @return entries [from;to) + */ + Iterator get(D from, D to); + + /** + * Returns entry by key. Note: default implementation is far from optimal. + * @param key entry`s key + * @return entry + */ + default E get(D key) { + Iterator iterator = get(key, null); + if (!iterator.hasNext()) { + return null; + } + + E next = iterator.next(); + if (next.key().equals(key)) { + return next; + } + return null; + } + + /** + * Returns ordered iterator of all entries with keys from (inclusive). + * @param from lower bound of range (inclusive) + * @return entries with key >= from + */ + default Iterator allFrom(D from) { + return get(from, null); + } + + /** + * Returns ordered iterator of all entries with keys < to. + * @param to upper bound of range (exclusive) + * @return entries with key < to + */ + default Iterator allTo(D to) { + return get(null, to); + } + + /** + * Returns ordered iterator of all entries. + * @return all entries + */ + default Iterator all() { + return get(null, null); + } + + /** + * Inserts of replaces entry. + * @param entry element to upsert + */ + void upsert(E entry); + + /** + * Persists data (no-op by default). + */ + default void flush() throws IOException { + // Do nothing + } + + /** + * Compacts data (no-op by default). + */ + default void compact() throws IOException { + // Do nothing + } + + /* + * Releases Dao (calls flush by default). + */ + @Override + default void close() throws IOException { + flush(); + } +} \ No newline at end of file diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/EntryWithTimestamp.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/EntryWithTimestamp.java new file mode 100644 index 000000000..479c6a676 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/EntryWithTimestamp.java @@ -0,0 +1,9 @@ +package ru.vk.itmo.test.pavelemelyanov.dao; + +public interface EntryWithTimestamp { + D key(); + + D value(); + + long timestamp(); +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemTable.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemTable.java new file mode 100644 index 000000000..be7be30ca --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemTable.java @@ -0,0 +1,47 @@ +package ru.vk.itmo.test.pavelemelyanov.dao; + +import java.lang.foreign.MemorySegment; +import java.util.Iterator; +import java.util.NavigableMap; +import java.util.concurrent.ConcurrentSkipListMap; + +/** + * Memory table. + * + * @author incubos + */ +final class MemTable { + private final NavigableMap> map = + new ConcurrentSkipListMap<>( + MemorySegmentComparator.INSTANCE); + + boolean isEmpty() { + return map.isEmpty(); + } + + Iterator> get( + final MemorySegment from, + final MemorySegment to) { + if (from == null && to == null) { + // All + return map.values().iterator(); + } else if (from == null) { + // Head + return map.headMap(to).values().iterator(); + } else if (to == null) { + // Tail + return map.tailMap(from).values().iterator(); + } else { + // Slice + return map.subMap(from, to).values().iterator(); + } + } + + EntryWithTimestamp get(final MemorySegment key) { + return map.get(key); + } + + EntryWithTimestamp upsert(final EntryWithTimestamp entry) { + return map.put(entry.key(), entry); + } +} \ No newline at end of file diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemorySegmentComparator.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemorySegmentComparator.java new file mode 100644 index 000000000..80273f32b --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemorySegmentComparator.java @@ -0,0 +1,89 @@ +package ru.vk.itmo.test.pavelemelyanov.dao; + +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.util.Comparator; + +/** + * Compares {@link MemorySegment}s. + * + * @author incubos + */ +final class MemorySegmentComparator implements Comparator { + static final Comparator INSTANCE = + new MemorySegmentComparator(); + + private MemorySegmentComparator() { + // Singleton + } + + @Override + public int compare( + final MemorySegment left, + final MemorySegment right) { + final long mismatch = left.mismatch(right); + if (mismatch == -1L) { + // No mismatch + return 0; + } + + if (mismatch == left.byteSize()) { + // left is prefix of right, so left is smaller + return -1; + } + + if (mismatch == right.byteSize()) { + // right is prefix of left, so left is greater + return 1; + } + + // Compare mismatched bytes as unsigned + return Byte.compareUnsigned( + left.getAtIndex( + ValueLayout.OfByte.JAVA_BYTE, + mismatch), + right.getAtIndex( + ValueLayout.OfByte.JAVA_BYTE, + mismatch)); + } + + static int compare( + final MemorySegment srcSegment, + final long srcFromOffset, + final long srcLength, + final MemorySegment dstSegment, + final long dstFromOffset, + final long dstLength) { + final long mismatch = + MemorySegment.mismatch( + srcSegment, + srcFromOffset, + srcFromOffset + srcLength, + dstSegment, + dstFromOffset, + dstFromOffset + dstLength); + if (mismatch == -1L) { + // No mismatch + return 0; + } + + if (mismatch == srcLength) { + // left is prefix of right, so left is smaller + return -1; + } + + if (mismatch == dstLength) { + // right is prefix of left, so left is greater + return 1; + } + + // Compare mismatched bytes as unsigned + return Byte.compareUnsigned( + srcSegment.getAtIndex( + ValueLayout.OfByte.JAVA_BYTE, + srcFromOffset + mismatch), + dstSegment.getAtIndex( + ValueLayout.OfByte.JAVA_BYTE, + dstFromOffset + mismatch)); + } +} \ No newline at end of file diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MergingEntryIterator.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MergingEntryIterator.java new file mode 100644 index 000000000..db321c22b --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MergingEntryIterator.java @@ -0,0 +1,70 @@ +package ru.vk.itmo.test.pavelemelyanov.dao; + +import java.lang.foreign.MemorySegment; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.PriorityQueue; +import java.util.Queue; + +/** + * Merges entry {@link Iterator}s. + * + * @author incubos + */ +final class MergingEntryIterator implements Iterator> { + private final Queue iterators; + + MergingEntryIterator(final List iterators) { + assert iterators.stream().allMatch(WeightedPeekingEntryIterator::hasNext); + + this.iterators = new PriorityQueue<>(iterators); + } + + @Override + public boolean hasNext() { + return !iterators.isEmpty(); + } + + @Override + public EntryWithTimestamp next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + final WeightedPeekingEntryIterator top = iterators.remove(); + final EntryWithTimestamp result = top.next(); + + if (top.hasNext()) { + // Not exhausted + iterators.add(top); + } + + // Remove older versions of the key + while (true) { + final WeightedPeekingEntryIterator iterator = iterators.peek(); + if (iterator == null) { + // Nothing left + break; + } + + // Skip entries with the same key + final EntryWithTimestamp entry = iterator.peek(); + if (MemorySegmentComparator.INSTANCE.compare(result.key(), entry.key()) != 0) { + // Reached another key + break; + } + + // Drop + iterators.remove(); + // Skip + iterator.next(); + if (iterator.hasNext()) { + // Not exhausted + iterators.add(iterator); + } + } + + return result; + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/ReferenceDao.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/ReferenceDao.java new file mode 100644 index 000000000..736d02560 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/ReferenceDao.java @@ -0,0 +1,288 @@ +package ru.vk.itmo.test.pavelemelyanov.dao; + +import ru.vk.itmo.dao.Config; + +import java.io.IOException; +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +/** + * Reference implementation of {@link Dao}. + * + * @author incubos + */ +public class ReferenceDao implements Dao> { + private final Config config; + private final Arena arena; + + private final ReadWriteLock lock = new ReentrantReadWriteLock(); + // Guarded by lock + private volatile TableSet tableSet; + + private final ExecutorService flusher = + Executors.newSingleThreadExecutor(r -> { + final Thread result = new Thread(r); + result.setName("flusher"); + return result; + }); + private final ExecutorService compactor = + Executors.newSingleThreadExecutor(r -> { + final Thread result = new Thread(r); + result.setName("compactor"); + return result; + }); + + private final AtomicBoolean closed = new AtomicBoolean(); + + public ReferenceDao(final Config config) throws IOException { + this.config = config; + this.arena = Arena.ofShared(); + + // First complete promotion of compacted SSTables + SSTables.promote( + config.basePath(), + 0, + 1); + + this.tableSet = + TableSet.from( + SSTables.discover( + arena, + config.basePath())); + } + + @Override + public Iterator> get( + final MemorySegment from, + final MemorySegment to) { + return tableSet.get( + from, + to); + } + + @Override + public EntryWithTimestamp get(final MemorySegment key) { + // Without lock, just snapshot of table set + return tableSet.get(key); + } + + @Override + public void upsert(final EntryWithTimestamp entry) { + final boolean autoFlush; + lock.readLock().lock(); + try { + if (tableSet.memTableSize.get() > config.flushThresholdBytes() + && tableSet.flushingTable != null) { + throw new IllegalStateException("Can't keep up with flushing!"); + } + + // Upsert + final EntryWithTimestamp previous = tableSet.upsert(entry); + + // Update size estimate + final long size = tableSet.memTableSize.addAndGet(sizeOf(entry) - sizeOf(previous)); + autoFlush = size > config.flushThresholdBytes(); + } finally { + lock.readLock().unlock(); + } + + if (autoFlush) { + initiateFlush(true); + } + } + + private static long sizeOf(final EntryWithTimestamp entry) { + if (entry == null) { + return 0L; + } + + if (entry.value() == null) { + return entry.key().byteSize(); + } + + return entry.key().byteSize() + entry.value().byteSize(); + } + + private void initiateFlush(final boolean auto) { + flusher.submit(() -> { + final TableSet currentTableSet; + lock.writeLock().lock(); + try { + if (this.tableSet.memTable.isEmpty()) { + // Nothing to flush + return; + } + + if (auto && this.tableSet.memTableSize.get() < config.flushThresholdBytes()) { + // Not enough data to flush + return; + } + + // Switch memTable to flushing + currentTableSet = this.tableSet.flushing(); + this.tableSet = currentTableSet; + } finally { + lock.writeLock().unlock(); + } + + // Write + final int sequence = currentTableSet.nextSequence(); + try { + new SSTableWriter() + .write( + config.basePath(), + sequence, + currentTableSet.flushingTable.get(null, null)); + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().halt(-1); + return; + } + + // Open + final SSTable flushed; + try { + flushed = SSTables.open( + arena, + config.basePath(), + sequence); + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().halt(-2); + return; + } + + // Switch + lock.writeLock().lock(); + try { + this.tableSet = this.tableSet.flushed(flushed); + } finally { + lock.writeLock().unlock(); + } + }).state(); + } + + @Override + public void flush() throws IOException { + initiateFlush(false); + } + + @Override + public void compact() throws IOException { + compactor.submit(() -> { + final TableSet currentTableSet; + lock.writeLock().lock(); + try { + currentTableSet = this.tableSet; + if (currentTableSet.ssTables.size() < 2) { + // Nothing to compact + return; + } + } finally { + lock.writeLock().unlock(); + } + + // Compact to 0 + try { + new SSTableWriter() + .write( + config.basePath(), + 0, + currentTableSet.allSSTableEntries()); + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().halt(-3); + } + + // Open 0 + final SSTable compacted; + try { + compacted = + SSTables.open( + arena, + config.basePath(), + 0); + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().halt(-4); + return; + } + + // Replace old SSTables with compacted one to + // keep serving requests + final Set replaced = new HashSet<>(currentTableSet.ssTables); + lock.writeLock().lock(); + try { + this.tableSet = + this.tableSet.compacted( + replaced, + compacted); + } finally { + lock.writeLock().unlock(); + } + + // Remove compacted SSTables starting from the oldest ones. + // If we crash, 0 contains all the data, and + // it will be promoted on reopen. + for (final SSTable ssTable : currentTableSet.ssTables.reversed()) { + try { + SSTables.remove( + config.basePath(), + ssTable.sequence); + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().halt(-5); + } + } + + // Promote zero to one (possibly replacing) + try { + SSTables.promote( + config.basePath(), + 0, + 1); + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().halt(-6); + } + + // Replace promoted SSTable + lock.writeLock().lock(); + try { + this.tableSet = + this.tableSet.compacted( + Collections.singleton(compacted), + compacted.withSequence(1)); + } finally { + lock.writeLock().unlock(); + } + }).state(); + } + + @Override + public void close() throws IOException { + if (closed.getAndSet(true)) { + // Already closed + return; + } + + // Maybe flush + flush(); + + // Stop all the threads + flusher.close(); + compactor.close(); + + // Close arena + arena.close(); + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTable.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTable.java new file mode 100644 index 000000000..a1f0b6d6f --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTable.java @@ -0,0 +1,207 @@ +package ru.vk.itmo.test.pavelemelyanov.dao; + +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.util.Collections; +import java.util.Iterator; +import java.util.NoSuchElementException; + +/** + * Persistent SSTable in data file and index file. + * + * @author incubos + * @see SSTables + */ +final class SSTable { + final int sequence; + + private final MemorySegment index; + private final MemorySegment data; + private final long size; + + SSTable( + final int sequence, + final MemorySegment index, + final MemorySegment data) { + this.sequence = sequence; + this.index = index; + this.data = data; + this.size = index.byteSize() / Long.BYTES; + } + + SSTable withSequence(final int sequence) { + return new SSTable( + sequence, + index, + data); + } + + /** + * Returns index of the entry if found; otherwise, (-(insertion point) - 1). + * The insertion point is defined as the point at which the key would be inserted: + * the index of the first element greater than the key, + * or size if all keys are less than the specified key. + * Note that this guarantees that the return value will be >= 0 + * if and only if the key is found. + */ + private long entryBinarySearch(final MemorySegment key) { + long low = 0L; + long high = size - 1; + + while (low <= high) { + final long mid = (low + high) >>> 1; + final long midEntryOffset = entryOffset(mid); + final long midKeyLength = getLength(midEntryOffset); + final int compare = + MemorySegmentComparator.compare( + data, + midEntryOffset + Long.BYTES, // Position at key + midKeyLength, + key, + 0L, + key.byteSize()); + + if (compare < 0) { + low = mid + 1; + } else if (compare > 0) { + high = mid - 1; + } else { + return mid; + } + } + + return -(low + 1); + } + + private long entryOffset(final long entry) { + return index.get( + ValueLayout.OfLong.JAVA_LONG, + entry * Long.BYTES); + } + + private long getLength(final long offset) { + return data.get( + ValueLayout.OfLong.JAVA_LONG_UNALIGNED, + offset); + } + + Iterator> get( + final MemorySegment from, + final MemorySegment to) { + assert from == null || to == null || MemorySegmentComparator.INSTANCE.compare(from, to) <= 0; + + // Slice of SSTable in absolute offsets + final long fromOffset; + final long toOffset; + + // Left offset bound + if (from == null) { + // Start from the beginning + fromOffset = 0L; + } else { + final long fromEntry = entryBinarySearch(from); + if (fromEntry >= 0L) { + fromOffset = entryOffset(fromEntry); + } else if (-fromEntry - 1 == size) { + // No relevant data + return Collections.emptyIterator(); + } else { + // Greater but existing key found + fromOffset = entryOffset(-fromEntry - 1); + } + } + + // Right offset bound + if (to == null) { + // Up to the end + toOffset = data.byteSize(); + } else { + final long toEntry = entryBinarySearch(to); + if (toEntry >= 0L) { + toOffset = entryOffset(toEntry); + } else if (-toEntry - 1 == size) { + // Up to the end + toOffset = data.byteSize(); + } else { + // Greater but existing key found + toOffset = entryOffset(-toEntry - 1); + } + } + + return new SliceIterator(fromOffset, toOffset); + } + + EntryWithTimestamp get(final MemorySegment key) { + final long entry = entryBinarySearch(key); + if (entry < 0) { + return null; + } + + // Skip key (will reuse the argument) + long offset = entryOffset(entry); + offset += Long.BYTES + key.byteSize(); + // Extract value length + final long valueLength = getLength(offset); + if (valueLength == SSTables.TOMBSTONE_VALUE_LENGTH) { + // Tombstone encountered + offset += Long.BYTES; + return new BaseEntryWithTimestamp<>(key, null, getLength(offset)); + } else { + // Get value + offset += Long.BYTES; + final MemorySegment value = data.asSlice(offset, valueLength); + offset += valueLength; + return new BaseEntryWithTimestamp<>(key, value, getLength(offset)); + } + } + + private final class SliceIterator implements Iterator> { + private long offset; + private final long toOffset; + + private SliceIterator( + final long offset, + final long toOffset) { + this.offset = offset; + this.toOffset = toOffset; + } + + @Override + public boolean hasNext() { + return offset < toOffset; + } + + @Override + public EntryWithTimestamp next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + // Read key length + final long keyLength = getLength(offset); + offset += Long.BYTES; + + // Read key + final MemorySegment key = data.asSlice(offset, keyLength); + offset += keyLength; + + // Read value length + final long valueLength = getLength(offset); + offset += Long.BYTES; + + // Read value + if (valueLength == SSTables.TOMBSTONE_VALUE_LENGTH) { + // Tombstone encountered + final long timestamp = getLength(offset); + offset += Long.BYTES; + return new BaseEntryWithTimestamp<>(key, null, timestamp); + } else { + final MemorySegment value = data.asSlice(offset, valueLength); + offset += valueLength; + final long timestamp = getLength(offset); + offset += Long.BYTES; + return new BaseEntryWithTimestamp<>(key, value, timestamp); + } + } + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTableWriter.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTableWriter.java new file mode 100644 index 000000000..f08137bb3 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTableWriter.java @@ -0,0 +1,170 @@ +package ru.vk.itmo.test.pavelemelyanov.dao; + +import java.io.BufferedOutputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.nio.channels.FileChannel; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.Iterator; + +/** + * Writes {@link EntryWithTimestamp} {@link Iterator} to SSTable on disk. + * + *

Index file {@code .index} contains {@code long} offsets to entries in data file: + * {@code [offset0, offset1, ...]} + * + *

Data file {@code .data} contains serialized entries: + * {@code } + * + *

Tombstones are encoded as {@code valueLength} {@code -1} and no subsequent value. + * + * @author incubos + */ +final class SSTableWriter { + private static final int BUFFER_SIZE = 64 * 1024; + + // Reusable buffers to eliminate allocations. + // But excessive memory copying is still there :( + // Long cell + private final ByteArraySegment longBuffer = new ByteArraySegment(Long.BYTES); + // Growable blob cell + private final ByteArraySegment blobBuffer = new ByteArraySegment(512); + + void write( + final Path baseDir, + final int sequence, + final Iterator> entries) throws IOException { + // Write to temporary files + final Path tempIndexName = SSTables.tempIndexName(baseDir, sequence); + final Path tempDataName = SSTables.tempDataName(baseDir, sequence); + + // Delete temporary files to eliminate tails + Files.deleteIfExists(tempIndexName); + Files.deleteIfExists(tempDataName); + + // Iterate in a single pass! + // Will write through FileChannel despite extra memory copying and + // no buffering (which may be implemented later). + // Looking forward to MemorySegment facilities in FileChannel! + try (OutputStream index = + new BufferedOutputStream( + new FileOutputStream( + tempIndexName.toFile()), + BUFFER_SIZE); + OutputStream data = + new BufferedOutputStream( + new FileOutputStream( + tempDataName.toFile()), + BUFFER_SIZE)) { + long entryOffset = 0L; + + // Iterate and serialize + while (entries.hasNext()) { + // First write offset to the entry + writeLong(entryOffset, index); + + // Then write the entry + final EntryWithTimestamp entry = entries.next(); + entryOffset += writeEntry(entry, data); + } + } + + // Publish files atomically + // FIRST index, LAST data + final Path indexName = + SSTables.indexName( + baseDir, + sequence); + Files.move( + tempIndexName, + indexName, + StandardCopyOption.ATOMIC_MOVE, + StandardCopyOption.REPLACE_EXISTING); + final Path dataName = + SSTables.dataName( + baseDir, + sequence); + Files.move( + tempDataName, + dataName, + StandardCopyOption.ATOMIC_MOVE, + StandardCopyOption.REPLACE_EXISTING); + } + + private void writeLong( + final long value, + final OutputStream os) throws IOException { + longBuffer.segment().set( + ValueLayout.OfLong.JAVA_LONG_UNALIGNED, + 0, + value); + longBuffer.withArray(os::write); + } + + private void writeSegment( + final MemorySegment value, + final OutputStream os) throws IOException { + final long size = value.byteSize(); + blobBuffer.ensureCapacity(size); + MemorySegment.copy( + value, + 0L, + blobBuffer.segment(), + 0L, + size); + blobBuffer.withArray(array -> + os.write( + array, + 0, + (int) size)); + } + + /** + * Writes {@link EntryWithTimestamp} to {@link FileChannel}. + * + * @return written bytes + */ + private long writeEntry( + final EntryWithTimestamp entry, + final OutputStream os) throws IOException { + final MemorySegment key = entry.key(); + final MemorySegment value = entry.value(); + final long timestamp = entry.timestamp(); + long result = 0L; + + // Key size + writeLong(key.byteSize(), os); + result += Long.BYTES; + + // Key + writeSegment(key, os); + result += key.byteSize(); + + // Value size and possibly value + if (value == null) { + // Tombstone + writeLong(SSTables.TOMBSTONE_VALUE_LENGTH, os); + result += Long.BYTES; + + } else { + // Value length + writeLong(value.byteSize(), os); + result += Long.BYTES; + + // Value + writeSegment(value, os); + result += value.byteSize(); + } + + // Timestamp + writeLong(timestamp, os); + result += Long.BYTES; + + return result; + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTables.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTables.java new file mode 100644 index 000000000..0a2d403e5 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTables.java @@ -0,0 +1,162 @@ +package ru.vk.itmo.test.pavelemelyanov.dao; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; +import java.nio.channels.FileChannel; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.nio.file.StandardOpenOption; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Stream; + +/** + * Provides {@link SSTable} management facilities: dumping and discovery. + * + * @author incubos + */ +final class SSTables { + public static final String INDEX_SUFFIX = ".index"; + public static final String DATA_SUFFIX = ".data"; + public static final long TOMBSTONE_VALUE_LENGTH = -1L; + + private static final String TEMP_SUFFIX = ".tmp"; + + /** + * Can't instantiate. + */ + private SSTables() { + // Only static methods + } + + static Path indexName( + final Path baseDir, + final int sequence) { + return baseDir.resolve(sequence + INDEX_SUFFIX); + } + + static Path dataName( + final Path baseDir, + final int sequence) { + return baseDir.resolve(sequence + DATA_SUFFIX); + } + + static Path tempIndexName( + final Path baseDir, + final int sequence) { + return baseDir.resolve(sequence + INDEX_SUFFIX + TEMP_SUFFIX); + } + + static Path tempDataName( + final Path baseDir, + final int sequence) { + return baseDir.resolve(sequence + DATA_SUFFIX + TEMP_SUFFIX); + } + + /** + * Returns {@link List} of {@link SSTable}s from freshest to oldest. + */ + static List discover( + final Arena arena, + final Path baseDir) throws IOException { + if (!Files.exists(baseDir)) { + return Collections.emptyList(); + } + + final List result = new ArrayList<>(); + try (Stream files = Files.list(baseDir)) { + files.forEach(file -> { + final String fileName = file.getFileName().toString(); + if (!fileName.endsWith(DATA_SUFFIX)) { + // Skip non data + return; + } + + final int sequence = + // .data -> N + Integer.parseInt( + fileName.substring( + 0, + fileName.length() - DATA_SUFFIX.length())); + + try { + result.add(open(arena, baseDir, sequence)); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + }); + } + + // Sort from freshest to oldest + result.sort((o1, o2) -> Integer.compare(o2.sequence, o1.sequence)); + + return Collections.unmodifiableList(result); + } + + static SSTable open( + final Arena arena, + final Path baseDir, + final int sequence) throws IOException { + final MemorySegment index = + mapReadOnly( + arena, + indexName(baseDir, sequence)); + final MemorySegment data = + mapReadOnly( + arena, + dataName(baseDir, sequence)); + + return new SSTable( + sequence, + index, + data); + } + + private static MemorySegment mapReadOnly( + final Arena arena, + final Path file) throws IOException { + try (FileChannel channel = + FileChannel.open( + file, + StandardOpenOption.READ)) { + return channel.map( + FileChannel.MapMode.READ_ONLY, + 0L, + Files.size(file), + arena); + } + } + + static void remove( + final Path baseDir, + final int sequence) throws IOException { + // First delete data file to make SSTable invisible + Files.delete(dataName(baseDir, sequence)); + Files.delete(indexName(baseDir, sequence)); + } + + static void promote( + final Path baseDir, + final int from, + final int to) throws IOException { + // Build to progress to the same outcome + if (Files.exists(indexName(baseDir, from))) { + Files.move( + indexName(baseDir, from), + indexName(baseDir, to), + StandardCopyOption.ATOMIC_MOVE, + StandardCopyOption.REPLACE_EXISTING); + } + if (Files.exists(dataName(baseDir, from))) { + Files.move( + dataName(baseDir, from), + dataName(baseDir, to), + StandardCopyOption.ATOMIC_MOVE, + StandardCopyOption.REPLACE_EXISTING); + } + } +} \ No newline at end of file diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/TableSet.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/TableSet.java new file mode 100644 index 000000000..f3d536ed0 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/TableSet.java @@ -0,0 +1,199 @@ +package ru.vk.itmo.test.pavelemelyanov.dao; + +import java.lang.foreign.MemorySegment; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicLong; + +/** + * Data set in various tables. + * + * @author incubos + */ +final class TableSet { + final MemTable memTable; + final AtomicLong memTableSize; + // null or read-only + final MemTable flushingTable; + // From freshest to oldest + final List ssTables; + + private TableSet( + final MemTable memTable, + final AtomicLong memTableSize, + final MemTable flushingTable, + final List ssTables) { + this.memTable = memTable; + this.memTableSize = memTableSize; + this.flushingTable = flushingTable; + this.ssTables = ssTables; + } + + static TableSet from(final List ssTables) { + return new TableSet( + new MemTable(), + new AtomicLong(), + null, + ssTables); + } + + int nextSequence() { + return ssTables.stream() + .mapToInt(t -> t.sequence) + .max() + .orElse(0) + 1; + } + + TableSet flushing() { + if (memTable.isEmpty()) { + throw new IllegalStateException("Nothing to flush"); + } + + if (flushingTable != null) { + throw new IllegalStateException("Already flushing"); + } + + return new TableSet( + new MemTable(), + new AtomicLong(), + memTable, + ssTables); + } + + TableSet flushed(final SSTable flushed) { + final List newSSTables = new ArrayList<>(ssTables.size() + 1); + newSSTables.add(flushed); + newSSTables.addAll(ssTables); + return new TableSet( + memTable, + memTableSize, + null, + newSSTables); + } + + TableSet compacted( + final Set replaced, + final SSTable with) { + final List newSsTables = new ArrayList<>(this.ssTables.size() + 1); + + // Keep not replaced SSTables + for (final SSTable ssTable : this.ssTables) { + if (!replaced.contains(ssTable)) { + newSsTables.add(ssTable); + } + } + + // Logically the oldest one + newSsTables.add(with); + + return new TableSet( + memTable, + memTableSize, + flushingTable, + newSsTables); + } + + Iterator> get( + final MemorySegment from, + final MemorySegment to) { + final List iterators = + new ArrayList<>(2 + ssTables.size()); + + // MemTable goes first + final Iterator> memTableIterator = + memTable.get(from, to); + if (memTableIterator.hasNext()) { + iterators.add( + new WeightedPeekingEntryIterator( + Integer.MIN_VALUE, + memTableIterator)); + } + + // Then goes flushing + if (flushingTable != null) { + final Iterator> flushingIterator = + flushingTable.get(from, to); + if (flushingIterator.hasNext()) { + iterators.add( + new WeightedPeekingEntryIterator( + Integer.MIN_VALUE + 1, + flushingIterator)); + } + } + + // Then go all the SSTables + for (int i = 0; i < ssTables.size(); i++) { + final SSTable ssTable = ssTables.get(i); + final Iterator> ssTableIterator = + ssTable.get(from, to); + if (ssTableIterator.hasNext()) { + iterators.add( + new WeightedPeekingEntryIterator( + i, + ssTableIterator)); + } + } + + return switch (iterators.size()) { + case 0 -> Collections.emptyIterator(); + case 1 -> iterators.get(0); + default -> new MergingEntryIterator(iterators); + }; + } + + EntryWithTimestamp get(final MemorySegment key) { + // Slightly optimized version not to pollute the heap + + // First check MemTable + EntryWithTimestamp result = memTable.get(key); + if (result != null) { + // Transform tombstone + return result; + } + + // Then check flushing + if (flushingTable != null) { + result = flushingTable.get(key); + if (result != null) { + // Transform tombstone + return result; + } + } + + // At last check SSTables from freshest to oldest + for (final SSTable ssTable : ssTables) { + result = ssTable.get(key); + if (result != null) { + // Transform tombstone + return result; + } + } + + // Nothing found + return null; + } + + EntryWithTimestamp upsert(final EntryWithTimestamp entry) { + return memTable.upsert(entry); + } + + Iterator> allSSTableEntries() { + final List iterators = + new ArrayList<>(ssTables.size()); + + for (int i = 0; i < ssTables.size(); i++) { + final SSTable ssTable = ssTables.get(i); + final Iterator> ssTableIterator = + ssTable.get(null, null); + iterators.add( + new WeightedPeekingEntryIterator( + i, + ssTableIterator)); + } + + return new MergingEntryIterator(iterators); + } +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/WeightedPeekingEntryIterator.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/WeightedPeekingEntryIterator.java new file mode 100644 index 000000000..a15d41fe5 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/WeightedPeekingEntryIterator.java @@ -0,0 +1,65 @@ +package ru.vk.itmo.test.pavelemelyanov.dao; + +import java.lang.foreign.MemorySegment; +import java.util.Iterator; +import java.util.NoSuchElementException; + +/** + * Peeking {@link Iterator} wrapper. + * + * @author incubos + */ +final class WeightedPeekingEntryIterator + implements Iterator>, + Comparable { + private final int weight; + private final Iterator> delegate; + private EntryWithTimestamp next; + + WeightedPeekingEntryIterator( + final int weight, + final Iterator> delegate) { + this.weight = weight; + this.delegate = delegate; + this.next = delegate.hasNext() ? delegate.next() : null; + } + + @Override + public boolean hasNext() { + return next != null; + } + + @Override + public EntryWithTimestamp next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + final EntryWithTimestamp result = next; + next = delegate.hasNext() ? delegate.next() : null; + return result; + } + + EntryWithTimestamp peek() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + return next; + } + + @Override + public int compareTo(final WeightedPeekingEntryIterator other) { + // First compare keys + int result = + MemorySegmentComparator.INSTANCE.compare( + peek().key(), + other.peek().key()); + if (result != 0) { + return result; + } + + // Then compare weights if keys are equal + return Integer.compare(weight, other.weight); + } +} From 7b681b9c5f36f9920c720fd00f82736e7776330d Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 28 Mar 2024 18:18:07 +0300 Subject: [PATCH 13/31] fix code style --- .../pavelemelyanov/ConsistentHashing.java | 1 + .../itmo/test/pavelemelyanov/HeaderUtils.java | 2 +- .../{HTTPUtils.java => HttpUtils.java} | 4 ++-- .../vk/itmo/test/pavelemelyanov/MyServer.java | 23 ++++++++----------- .../test/pavelemelyanov/ServerStarter.java | 2 +- .../itmo/test/pavelemelyanov/ServiceImpl.java | 2 +- .../vk/itmo/test/pavelemelyanov/dao/Dao.java | 2 +- .../test/pavelemelyanov/dao/MemTable.java | 2 +- .../dao/MemorySegmentComparator.java | 2 +- .../test/pavelemelyanov/dao/SSTables.java | 2 +- 10 files changed, 19 insertions(+), 23 deletions(-) rename src/main/java/ru/vk/itmo/test/pavelemelyanov/{HTTPUtils.java => HttpUtils.java} (94%) diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java index 6a8f458ee..eb060eb2e 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java @@ -20,6 +20,7 @@ public ConsistentHashing(List clusterUrls, int numbOfVirtualNodes) { } } } + public void addNode(int numOfNode, String node) { int hash = getHash(node + numOfNode); virtualNodeMapping.put(hash, node); diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HeaderUtils.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HeaderUtils.java index 415c6ed8b..7759479c7 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HeaderUtils.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HeaderUtils.java @@ -1,6 +1,6 @@ package ru.vk.itmo.test.pavelemelyanov; -public class HeaderUtils { +public final class HeaderUtils { public static final String HTTP_TIMESTAMP_HEADER = "X-Timestamp"; public static final String NIO_TIMESTAMP_HEADER = "x-timestamp:"; public static final String HTTP_TERMINATION_HEADER = "X-Termination"; diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HTTPUtils.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java similarity index 94% rename from src/main/java/ru/vk/itmo/test/pavelemelyanov/HTTPUtils.java rename to src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java index 7c3fa8616..dd12669ae 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HTTPUtils.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java @@ -7,7 +7,7 @@ import java.util.Map; import java.util.Set; -public class HTTPUtils { +public final class HttpUtils { public static final Set METHODS = Set.of( Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE ); @@ -22,7 +22,7 @@ public class HTTPUtils { ); public static final int NUMBER_OF_VIRTUAL_NODES = 5; - private HTTPUtils() { + private HttpUtils() { } } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index 9a2ed8a7a..1581f8707 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -1,6 +1,5 @@ package ru.vk.itmo.test.pavelemelyanov; -import java.net.http.HttpClient; import one.nio.http.HttpException; import one.nio.http.HttpServer; import one.nio.http.HttpServerConfig; @@ -15,6 +14,7 @@ import java.io.IOException; import java.net.URI; +import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.util.ArrayList; @@ -30,12 +30,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import static ru.vk.itmo.test.pavelemelyanov.HTTPUtils.HTTP_CODE; -import static ru.vk.itmo.test.pavelemelyanov.HTTPUtils.METHODS; -import static ru.vk.itmo.test.pavelemelyanov.HTTPUtils.REQUEST_TIMEOUT; -import static ru.vk.itmo.test.pavelemelyanov.HeaderUtils.HTTP_TERMINATION_HEADER; -import static ru.vk.itmo.test.pavelemelyanov.HeaderUtils.HTTP_TIMESTAMP_HEADER; -import static ru.vk.itmo.test.pavelemelyanov.HeaderUtils.NIO_TIMESTAMP_HEADER; +import static ru.vk.itmo.test.pavelemelyanov.HttpUtils.METHODS; public class MyServer extends HttpServer { private static final String NOT_ENOUGH_REPLICAS = "504 Not Enough Replicas"; @@ -123,7 +118,7 @@ private void processingRequest(Request request, HttpSession session, long proces } try { - if (request.getHeader(HTTP_TERMINATION_HEADER) == null) { + if (request.getHeader(HeaderUtils.HTTP_TERMINATION_HEADER) == null) { session.sendResponse(handleProxyRequest(request, session, paramId, from, ack)); } else { session.sendResponse(requestHandler.handle(request, paramId)); @@ -162,7 +157,7 @@ private HttpRequest createProxyRequest(Request request, String nodeUrl, String p .method(request.getMethodName(), request.getBody() == null ? HttpRequest.BodyPublishers.noBody() : HttpRequest.BodyPublishers.ofByteArray(request.getBody())) - .setHeader(HTTP_TERMINATION_HEADER, "true") + .setHeader(HeaderUtils.HTTP_TERMINATION_HEADER, "true") .build(); } @@ -170,17 +165,17 @@ private Response sendProxyRequest(HttpRequest httpRequest) { try { HttpResponse httpResponse = httpClient .sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) - .get(REQUEST_TIMEOUT, TimeUnit.MILLISECONDS); + .get(HttpUtils.REQUEST_TIMEOUT, TimeUnit.MILLISECONDS); - String statusCode = HTTP_CODE.getOrDefault(httpResponse.statusCode(), null); + String statusCode = HttpUtils.HTTP_CODE.getOrDefault(httpResponse.statusCode(), null); if (statusCode == null) { return new Response(Response.INTERNAL_ERROR, httpResponse.body()); } else { Response response = new Response(statusCode, httpResponse.body()); long timestamp = httpRequest.headers() - .firstValueAsLong(HTTP_TIMESTAMP_HEADER).orElse(0); - response.addHeader(NIO_TIMESTAMP_HEADER + timestamp); + .firstValueAsLong(HeaderUtils.HTTP_TIMESTAMP_HEADER).orElse(0); + response.addHeader(HeaderUtils.NIO_TIMESTAMP_HEADER + timestamp); return response; } } catch (InterruptedException e) { @@ -230,7 +225,7 @@ private Response handleProxyRequest(Request request, HttpSession session, String if (successResponses.size() >= ack) { if (request.getMethod() == Request.METHOD_GET) { successResponses.sort(Comparator.comparingLong(r -> { - String timestamp = r.getHeader(NIO_TIMESTAMP_HEADER); + String timestamp = r.getHeader(HeaderUtils.NIO_TIMESTAMP_HEADER); return timestamp == null ? 0 : Long.parseLong(timestamp); })); return successResponses.getFirst(); diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java index 8c291056d..88cf3e728 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java @@ -10,7 +10,7 @@ import java.util.ArrayList; import java.util.List; -import static ru.vk.itmo.test.pavelemelyanov.HTTPUtils.NUMBER_OF_VIRTUAL_NODES; +import static ru.vk.itmo.test.pavelemelyanov.HttpUtils.NUMBER_OF_VIRTUAL_NODES; public final class ServerStarter { private static final String URL = "http://localhost"; diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java index 43a193982..a6f35f829 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java @@ -9,7 +9,7 @@ import java.io.IOException; import java.util.concurrent.CompletableFuture; -import static ru.vk.itmo.test.pavelemelyanov.HTTPUtils.NUMBER_OF_VIRTUAL_NODES; +import static ru.vk.itmo.test.pavelemelyanov.HttpUtils.NUMBER_OF_VIRTUAL_NODES; public class ServiceImpl implements Service { private static final int FLUSH_THRESHOLD_BYTES = 1024 * 1024; diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/Dao.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/Dao.java index 0f4a4d284..72aa6e406 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/Dao.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/Dao.java @@ -84,4 +84,4 @@ default void compact() throws IOException { default void close() throws IOException { flush(); } -} \ No newline at end of file +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemTable.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemTable.java index be7be30ca..b5eaf9e6c 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemTable.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemTable.java @@ -44,4 +44,4 @@ EntryWithTimestamp get(final MemorySegment key) { EntryWithTimestamp upsert(final EntryWithTimestamp entry) { return map.put(entry.key(), entry); } -} \ No newline at end of file +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemorySegmentComparator.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemorySegmentComparator.java index 80273f32b..cd8f549a1 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemorySegmentComparator.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/MemorySegmentComparator.java @@ -86,4 +86,4 @@ static int compare( ValueLayout.OfByte.JAVA_BYTE, dstFromOffset + mismatch)); } -} \ No newline at end of file +} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTables.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTables.java index 0a2d403e5..a4e64b455 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTables.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/dao/SSTables.java @@ -159,4 +159,4 @@ static void promote( StandardCopyOption.REPLACE_EXISTING); } } -} \ No newline at end of file +} From 48d90ce75b5cdba1c51c25c6674ed3e0f4bc2274 Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 28 Mar 2024 18:43:36 +0300 Subject: [PATCH 14/31] fix code style --- .../pavelemelyanov/ConsistentHashing.java | 27 ------- .../itmo/test/pavelemelyanov/HttpUtils.java | 4 +- .../vk/itmo/test/pavelemelyanov/MyServer.java | 76 ++++++++++--------- .../test/pavelemelyanov/ServerStarter.java | 3 +- 4 files changed, 44 insertions(+), 66 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java index eb060eb2e..928dace16 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java @@ -1,11 +1,9 @@ package ru.vk.itmo.test.pavelemelyanov; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.NavigableMap; -import java.util.SortedMap; import java.util.TreeMap; import java.util.stream.Collectors; @@ -26,31 +24,6 @@ public void addNode(int numOfNode, String node) { virtualNodeMapping.put(hash, node); } - public String getNode(String key) { - if (virtualNodeMapping.isEmpty()) { - return null; - } - - int hash = getHash(key); - SortedMap tailMap = virtualNodeMapping.tailMap(hash); - var nodeEntry = tailMap.isEmpty() ? virtualNodeMapping.firstEntry() : tailMap.firstEntry(); - return nodeEntry.getValue(); - } - - public List getNodes(String key, int from) { - if (virtualNodeMapping.isEmpty()) { - return new ArrayList<>(); - } - - int hash = getHash(key); - SortedMap tailMap = virtualNodeMapping.tailMap(hash); - var nodesMap = tailMap.isEmpty() ? virtualNodeMapping : tailMap; - return nodesMap.values() - .stream() - .limit(from) - .collect(Collectors.toList()); - } - public List getNodes(String key, List clusterUrls, int from) { Map nodesHashes = new TreeMap<>(); diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java index dd12669ae..b82bb1f9a 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java @@ -9,7 +9,9 @@ public final class HttpUtils { public static final Set METHODS = Set.of( - Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE + Request.METHOD_GET, + Request.METHOD_PUT, + Request.METHOD_DELETE ); public static final int REQUEST_TIMEOUT = 300; public static final Map HTTP_CODE = Map.of( diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index 1581f8707..f6034a701 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -31,8 +31,13 @@ import java.util.concurrent.TimeoutException; import static ru.vk.itmo.test.pavelemelyanov.HttpUtils.METHODS; +import static ru.vk.itmo.test.pavelemelyanov.HttpUtils.REQUEST_TIMEOUT; public class MyServer extends HttpServer { + private static final String V0_PATH = "/v0/entity"; + private static final String ID_PARAM = "id="; + private static final String FROM_PARAM = "from="; + private static final String ACK_PARAM = "ack="; private static final String NOT_ENOUGH_REPLICAS = "504 Not Enough Replicas"; private final ExecutorService workersPool; @@ -61,35 +66,32 @@ public MyServer(ServiceConfig config, Dao dao, ExecutorServiceWrapper worker, @Override public void handleDefault(Request request, HttpSession session) throws IOException { - Response response; - if (METHODS.contains(request.getMethod())) { - response = new Response(Response.BAD_REQUEST, Response.EMPTY); - } else { - response = new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); - } + Response response = METHODS.contains(request.getMethod()) + ? new Response(Response.BAD_REQUEST, Response.EMPTY) + : new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); session.sendResponse(response); } @Override public void handleRequest(Request request, HttpSession session) throws IOException { try { - if (!request.getURI().startsWith("/v0/entity?id=") || !METHODS.contains(request.getMethod())) { + if (!request.getURI().startsWith(getPathWithIdParam()) || !METHODS.contains(request.getMethod())) { handleDefault(request, session); return; } - String paramId = request.getParameter("id="); + String paramId = request.getParameter(ID_PARAM); if (paramId == null || paramId.isBlank()) { sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); return; } - String fromStr = request.getParameter("from="); - String ackStr = request.getParameter("ack="); + String fromStr = request.getParameter(FROM_PARAM); + String ackStr = request.getParameter(ACK_PARAM); - int from = fromStr == null || fromStr.isEmpty() ? clusterSize : Integer.parseInt(fromStr); - int ack = ackStr == null || ackStr.isEmpty() ? from / 2 + 1 : Integer.parseInt(ackStr); + int from = fromStr == null || fromStr.isBlank() ? clusterSize : Integer.parseInt(fromStr); + int ack = ackStr == null || ackStr.isBlank() ? from / 2 + 1 : Integer.parseInt(ackStr); if (ack == 0 || from > clusterSize || ack > from) { sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); @@ -112,7 +114,7 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti private void processingRequest(Request request, HttpSession session, long processingStartTime, String paramId, int from, int ack) throws IOException { - if (System.currentTimeMillis() - processingStartTime > 350) { + if (System.currentTimeMillis() - processingStartTime > REQUEST_TIMEOUT) { session.sendResponse(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); return; } @@ -120,26 +122,23 @@ private void processingRequest(Request request, HttpSession session, long proces try { if (request.getHeader(HeaderUtils.HTTP_TERMINATION_HEADER) == null) { session.sendResponse(handleProxyRequest(request, session, paramId, from, ack)); - } else { - session.sendResponse(requestHandler.handle(request, paramId)); + return; } + session.sendResponse(requestHandler.handle(request, paramId)); } catch (Exception e) { if (e.getClass() == HttpException.class) { session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); - } else { - log.error("Exception during handleRequest: ", e); - session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); + return; } + log.error("Exception during handleRequest: ", e); + session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); } } private Response sendException(Exception exception) { - String responseCode; - if (exception.getClass().equals(TimeoutException.class)) { - responseCode = Response.REQUEST_TIMEOUT; - } else { - responseCode = Response.INTERNAL_ERROR; - } + String responseCode = exception.getClass().equals(TimeoutException.class) + ? Response.REQUEST_TIMEOUT + : Response.INTERNAL_ERROR; return new Response(responseCode, Response.EMPTY); } @@ -153,10 +152,11 @@ private void sendResponse(HttpSession session, Response response) { } private HttpRequest createProxyRequest(Request request, String nodeUrl, String params) { - return HttpRequest.newBuilder(URI.create(nodeUrl + "/v0/entity?id=" + params)) - .method(request.getMethodName(), request.getBody() == null - ? HttpRequest.BodyPublishers.noBody() - : HttpRequest.BodyPublishers.ofByteArray(request.getBody())) + var bodyPublisher = request.getBody() == null + ? HttpRequest.BodyPublishers.noBody() + : HttpRequest.BodyPublishers.ofByteArray(request.getBody()); + return HttpRequest.newBuilder(URI.create(nodeUrl + getPathWithIdParam() + params)) + .method(request.getMethodName(), bodyPublisher) .setHeader(HeaderUtils.HTTP_TERMINATION_HEADER, "true") .build(); } @@ -170,14 +170,13 @@ private Response sendProxyRequest(HttpRequest httpRequest) { String statusCode = HttpUtils.HTTP_CODE.getOrDefault(httpResponse.statusCode(), null); if (statusCode == null) { return new Response(Response.INTERNAL_ERROR, httpResponse.body()); - } else { - - Response response = new Response(statusCode, httpResponse.body()); - long timestamp = httpRequest.headers() - .firstValueAsLong(HeaderUtils.HTTP_TIMESTAMP_HEADER).orElse(0); - response.addHeader(HeaderUtils.NIO_TIMESTAMP_HEADER + timestamp); - return response; } + var response = new Response(statusCode, httpResponse.body()); + long timestamp = httpRequest.headers() + .firstValueAsLong(HeaderUtils.HTTP_TIMESTAMP_HEADER) + .orElse(0); + response.addHeader(HeaderUtils.NIO_TIMESTAMP_HEADER + timestamp); + return response; } catch (InterruptedException e) { Thread.currentThread().interrupt(); return sendException(e); @@ -232,9 +231,8 @@ private Response handleProxyRequest(Request request, HttpSession session, String } else { return successResponses.getLast(); } - } else { - return new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY); } + return new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY); } private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) { @@ -247,4 +245,8 @@ private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) serverConfig.closeSessions = true; return serverConfig; } + + private static String getPathWithIdParam() { + return V0_PATH + "?" + ID_PARAM; + } } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java index 88cf3e728..e10199602 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java @@ -36,7 +36,8 @@ public static void main(String[] args) throws IOException { BASE_PORT + i, clusterUrls.get(i), clusterUrls, - WORKING_DIR); + WORKING_DIR + ); ConsistentHashing consistentHashing = new ConsistentHashing(clusterUrls, NUMBER_OF_VIRTUAL_NODES); From 56d660a68ad020cda9d03b1c4fecd70a657610fc Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Wed, 3 Apr 2024 19:58:40 +0300 Subject: [PATCH 15/31] fix coed style --- .../ru/vk/itmo/test/pavelemelyanov/MyServer.java | 3 +-- .../vk/itmo/test/pavelemelyanov/ServerStarter.java | 12 +++++------- .../ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java | 2 +- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index f6034a701..9d89a9445 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -228,9 +228,8 @@ private Response handleProxyRequest(Request request, HttpSession session, String return timestamp == null ? 0 : Long.parseLong(timestamp); })); return successResponses.getFirst(); - } else { - return successResponses.getLast(); } + return successResponses.getLast(); } return new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY); } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java index e10199602..e195dfd48 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java @@ -2,7 +2,6 @@ import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.dao.Config; -import ru.vk.itmo.test.pavelemelyanov.dao.Dao; import ru.vk.itmo.test.pavelemelyanov.dao.ReferenceDao; import java.io.IOException; @@ -14,23 +13,22 @@ public final class ServerStarter { private static final String URL = "http://localhost"; - private static final Path WORKING_DIR = Path.of("./data1/"); + private static final Path WORKING_DIR = Path.of("./data2/"); public static final long FLUSHING_THRESHOLD_BYTES = 1024 * 1024; private static final int BASE_PORT = 8080; + private static final int CLUSTER_SIZE = 3; public static void main(String[] args) throws IOException { - int clusterSize = 3; - List clusterUrls = new ArrayList<>(); - for (int i = 0; i < clusterSize; i++) { + for (int i = 0; i < CLUSTER_SIZE; i++) { int tempPortValue = BASE_PORT + i; clusterUrls.add(URL + ":" + tempPortValue); } ExecutorServiceWrapper worker = new ExecutorServiceWrapper(); - for (int i = 0; i < clusterSize; i++) { - Dao dao = new ReferenceDao(new Config(WORKING_DIR, FLUSHING_THRESHOLD_BYTES)); + for (int i = 0; i < CLUSTER_SIZE; i++) { + var dao = new ReferenceDao(new Config(WORKING_DIR, FLUSHING_THRESHOLD_BYTES)); ServiceConfig serviceConfig = new ServiceConfig( BASE_PORT + i, diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java index a6f35f829..3f6415dfd 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServiceImpl.java @@ -28,7 +28,7 @@ public ServiceImpl(ServiceConfig config) { public synchronized CompletableFuture start() throws IOException { dao = new ReferenceDao(new Config(config.workingDir(), FLUSH_THRESHOLD_BYTES)); worker = new ExecutorServiceWrapper(); - ConsistentHashing consistentHashing = new ConsistentHashing(config.clusterUrls(), NUMBER_OF_VIRTUAL_NODES); + var consistentHashing = new ConsistentHashing(config.clusterUrls(), NUMBER_OF_VIRTUAL_NODES); server = new MyServer(config, dao, worker, consistentHashing); server.start(); isClosed = false; From 24e7dcfbc4bb7ad7f348bd8e33e963a8317f2a73 Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 11 Apr 2024 15:00:53 +0300 Subject: [PATCH 16/31] fix coed style --- .../ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java | 2 +- src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java index 4eaa08a46..f52df3d28 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java @@ -11,7 +11,7 @@ public final class ExecutorServiceConfig { public static final int CORE_POOL_SIZE = CORE_AMOUNT / 2; public static final int MAX_CORE_POOL_SIZE = CORE_AMOUNT; public static final long KEEP_ALIVE_TIME = TimeUnit.SECONDS.toNanos(3); - public static final int QUEUE_CAPACITY = 64; + public static final int QUEUE_CAPACITY = 100; public static final BlockingQueue queue = new ArrayBlockingQueue<>(QUEUE_CAPACITY); public static final RejectedExecutionHandler HANDLER = new ThreadPoolExecutor.AbortPolicy(); diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java index b82bb1f9a..e527174fe 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java @@ -13,7 +13,7 @@ public final class HttpUtils { Request.METHOD_PUT, Request.METHOD_DELETE ); - public static final int REQUEST_TIMEOUT = 300; + public static final int REQUEST_TIMEOUT = 3000; public static final Map HTTP_CODE = Map.of( HttpURLConnection.HTTP_OK, Response.OK, HttpURLConnection.HTTP_ACCEPTED, Response.ACCEPTED, From e89460509ad95a40ddf806e935c3a21efcd6b1af Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 11 Apr 2024 15:55:55 +0300 Subject: [PATCH 17/31] add stage 5 --- .../pavelemelyanov/ConsistentHashing.java | 69 +++++++- .../itmo/test/pavelemelyanov/FactoryImpl.java | 2 +- .../itmo/test/pavelemelyanov/HttpUtils.java | 2 +- .../vk/itmo/test/pavelemelyanov/MyServer.java | 154 ++++++++++-------- 4 files changed, 156 insertions(+), 71 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java index 928dace16..968e5213d 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java @@ -1,17 +1,23 @@ package ru.vk.itmo.test.pavelemelyanov; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.NavigableMap; +import java.util.SortedMap; import java.util.TreeMap; import java.util.stream.Collectors; public class ConsistentHashing { private final NavigableMap virtualNodeMapping = new TreeMap<>(); private final HashService hashService = new HashService(); + private final int clusterSize; public ConsistentHashing(List clusterUrls, int numbOfVirtualNodes) { + clusterSize = clusterUrls.size(); for (String clusterUrl : clusterUrls) { for (int i = 0; i < numbOfVirtualNodes; i++) { addNode(i, clusterUrl); @@ -24,20 +30,75 @@ public void addNode(int numOfNode, String node) { virtualNodeMapping.put(hash, node); } - public List getNodes(String key, List clusterUrls, int from) { + public String getNode(String key) { + if (virtualNodeMapping.isEmpty()) { + return null; + } + + final int hash = getHash(key); + SortedMap tailMap = virtualNodeMapping.tailMap(hash); + return (tailMap.isEmpty() ? virtualNodeMapping.firstEntry() : tailMap.firstEntry()).getValue(); + } + + public List getNodes(String key, int from) { + if (virtualNodeMapping.isEmpty()) { + return Collections.emptyList(); + } + + List res = new ArrayList<>(); + + if (key != null && from > 0) { + if (from < clusterSize) { + int slot = getHash(key); + Iterator it = new ClockwiseIterator(slot); + while (it.hasNext() && res.size() < from) { + String part = it.next(); + res.add(part); + } + } else { + res.addAll(virtualNodeMapping.values()); + } + } + + return res; + } + + List getNodes(String key, List clusterUrls, int from) { Map nodesHashes = new TreeMap<>(); for (String nodeUrl : clusterUrls) { nodesHashes.put(getHash(nodeUrl + key), nodeUrl); } - return nodesHashes.values() - .stream() - .limit(from) + return nodesHashes.values().stream().limit(from) .collect(Collectors.toList()); } private int getHash(String key) { return hashService.digest(key.getBytes(StandardCharsets.UTF_8)); } + + private class ClockwiseIterator implements Iterator { + private final Iterator head; + private final Iterator tail; + + public ClockwiseIterator(int slot) { + this.head = virtualNodeMapping.headMap(slot) + .values() + .iterator(); + this.tail = virtualNodeMapping.tailMap(slot) + .values() + .iterator(); + } + + @Override + public boolean hasNext() { + return head.hasNext() || tail.hasNext(); + } + + @Override + public String next() { + return tail.hasNext() ? tail.next() : head.next(); + } + } } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java index 5cb05c236..226bf7cd5 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java @@ -4,7 +4,7 @@ import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.test.ServiceFactory; -@ServiceFactory(stage = 4) +@ServiceFactory(stage = 5) public class FactoryImpl implements ServiceFactory.Factory { @Override diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java index e527174fe..688f3e513 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java @@ -22,7 +22,7 @@ public final class HttpUtils { HttpURLConnection.HTTP_BAD_REQUEST, Response.BAD_REQUEST, HttpURLConnection.HTTP_INTERNAL_ERROR, Response.INTERNAL_ERROR ); - public static final int NUMBER_OF_VIRTUAL_NODES = 5; + public static final int NUMBER_OF_VIRTUAL_NODES = 50; private HttpUtils() { diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index 9d89a9445..c9c61be2a 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -23,12 +23,11 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.ExecutionException; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; import static ru.vk.itmo.test.pavelemelyanov.HttpUtils.METHODS; import static ru.vk.itmo.test.pavelemelyanov.HttpUtils.REQUEST_TIMEOUT; @@ -39,14 +38,14 @@ public class MyServer extends HttpServer { private static final String FROM_PARAM = "from="; private static final String ACK_PARAM = "ack="; private static final String NOT_ENOUGH_REPLICAS = "504 Not Enough Replicas"; + public static final int SERVER_ERROR = 500; + private static final Logger log = LoggerFactory.getLogger(MyServer.class); private final ExecutorService workersPool; private final HttpClient httpClient; private final ConsistentHashing shards; private final List clusterUrls; private final RequestHandler requestHandler; - private static final Logger log = LoggerFactory.getLogger(MyServer.class); - private final String selfUrl; private final int clusterSize; @@ -82,18 +81,13 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti String paramId = request.getParameter(ID_PARAM); - if (paramId == null || paramId.isBlank()) { - sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); - return; - } - String fromStr = request.getParameter(FROM_PARAM); String ackStr = request.getParameter(ACK_PARAM); int from = fromStr == null || fromStr.isBlank() ? clusterSize : Integer.parseInt(fromStr); int ack = ackStr == null || ackStr.isBlank() ? from / 2 + 1 : Integer.parseInt(ackStr); - if (ack == 0 || from > clusterSize || ack > from) { + if (ack == 0 || from > clusterSize || ack > from || paramId == null || paramId.isEmpty()) { sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); return; } @@ -118,30 +112,26 @@ private void processingRequest(Request request, HttpSession session, long proces session.sendResponse(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); return; } - try { if (request.getHeader(HeaderUtils.HTTP_TERMINATION_HEADER) == null) { - session.sendResponse(handleProxyRequest(request, session, paramId, from, ack)); - return; + CompletableFuture handleProxyResponse = + handleProxyRequest(request, session, paramId, from, ack); + handleProxyResponse = handleProxyResponse.whenComplete((response, throwable) -> + sendResponse(session, response)); + checkCompletableFuture(handleProxyResponse); + } else { + sendResponse(session, requestHandler.handle(request, paramId)); } - session.sendResponse(requestHandler.handle(request, paramId)); } catch (Exception e) { if (e.getClass() == HttpException.class) { session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); - return; + } else { + log.error("Exception during handleRequest: ", e); + session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); } - log.error("Exception during handleRequest: ", e); - session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); } } - private Response sendException(Exception exception) { - String responseCode = exception.getClass().equals(TimeoutException.class) - ? Response.REQUEST_TIMEOUT - : Response.INTERNAL_ERROR; - return new Response(responseCode, Response.EMPTY); - } - private void sendResponse(HttpSession session, Response response) { try { session.sendResponse(response); @@ -161,32 +151,26 @@ private HttpRequest createProxyRequest(Request request, String nodeUrl, String p .build(); } - private Response sendProxyRequest(HttpRequest httpRequest) { - try { - HttpResponse httpResponse = httpClient - .sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) - .get(HttpUtils.REQUEST_TIMEOUT, TimeUnit.MILLISECONDS); + private CompletableFuture sendProxyRequest(HttpRequest httpRequest) { + return httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofByteArray()) + .thenApplyAsync(this::processingResponse); + } - String statusCode = HttpUtils.HTTP_CODE.getOrDefault(httpResponse.statusCode(), null); - if (statusCode == null) { - return new Response(Response.INTERNAL_ERROR, httpResponse.body()); - } - var response = new Response(statusCode, httpResponse.body()); - long timestamp = httpRequest.headers() - .firstValueAsLong(HeaderUtils.HTTP_TIMESTAMP_HEADER) - .orElse(0); - response.addHeader(HeaderUtils.NIO_TIMESTAMP_HEADER + timestamp); - return response; - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - return sendException(e); - } catch (ExecutionException | TimeoutException e) { - return sendException(e); + private Response processingResponse(HttpResponse response) { + String statusCode = HttpUtils.HTTP_CODE.getOrDefault(response.statusCode(), null); + if (statusCode == null) { + return new Response(Response.INTERNAL_ERROR, response.body()); } + Response newResponse = new Response(statusCode, response.body()); + long timestamp = response.headers() + .firstValueAsLong(HeaderUtils.HTTP_TIMESTAMP_HEADER).orElse(0); + newResponse.addHeader(HeaderUtils.NIO_TIMESTAMP_HEADER + timestamp); + return newResponse; } - private List sendProxyRequests(Map httpRequests, List nodeUrls) { - List responses = new ArrayList<>(); + private List> sendProxyRequests(Map httpRequests, + List nodeUrls) { + List> responses = new ArrayList<>(); for (String nodeUrl : nodeUrls) { HttpRequest httpRequest = httpRequests.get(nodeUrl); if (!Objects.equals(selfUrl, nodeUrl)) { @@ -196,7 +180,8 @@ private List sendProxyRequests(Map httpRequests, return responses; } - private Response handleProxyRequest(Request request, HttpSession session, String paramId, int from, int ack) { + private CompletableFuture handleProxyRequest(Request request, HttpSession session, + String paramId, int from, int ack) { List nodeUrls = shards.getNodes(paramId, clusterUrls, from); if (nodeUrls.size() < from) { @@ -208,30 +193,46 @@ private Response handleProxyRequest(Request request, HttpSession session, String httpRequests.put(nodeUrl, createProxyRequest(request, nodeUrl, paramId)); } - List responses = sendProxyRequests(httpRequests, nodeUrls); + List> responses = sendProxyRequests(httpRequests, nodeUrls); if (httpRequests.get(selfUrl) != null) { - responses.add(requestHandler.handle(request, paramId)); + responses.add( + CompletableFuture.supplyAsync(() -> requestHandler.handle(request, paramId)) + ); } + return getQuorumResult(request, from, ack, responses); + } + + private CompletableFuture getQuorumResult(Request request, int from, int ack, + List> responses) { List successResponses = new ArrayList<>(); - for (Response response : responses) { - if (response.getStatus() < 500) { - successResponses.add(response); - } - } + CompletableFuture result = new CompletableFuture<>(); + AtomicInteger successResponseCount = new AtomicInteger(); + AtomicInteger errorResponseCount = new AtomicInteger(); + + for (CompletableFuture responseFuture : responses) { + responseFuture = responseFuture.whenComplete((response, throwable) -> { + if (throwable == null || (response != null && response.getStatus() < SERVER_ERROR)) { + successResponseCount.incrementAndGet(); + successResponses.add(response); + } else { + errorResponseCount.incrementAndGet(); + } - if (successResponses.size() >= ack) { - if (request.getMethod() == Request.METHOD_GET) { - successResponses.sort(Comparator.comparingLong(r -> { - String timestamp = r.getHeader(HeaderUtils.NIO_TIMESTAMP_HEADER); - return timestamp == null ? 0 : Long.parseLong(timestamp); - })); - return successResponses.getFirst(); - } - return successResponses.getLast(); + if (successResponseCount.get() == ack) { + result.complete(getResult(request, successResponses)); + } + + if (errorResponseCount.get() == from - ack + 1) { + result.complete(new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY)); + } + }); + + checkCompletableFuture(responseFuture); } - return new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY); + + return result; } private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) { @@ -245,6 +246,29 @@ private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) return serverConfig; } + + private Response getResult(Request request, List successResponses) { + if (request.getMethod() == Request.METHOD_GET) { + sortResponses(successResponses); + return successResponses.getLast(); + } else { + return successResponses.getFirst(); + } + } + + private void sortResponses(List successResponses) { + successResponses.sort(Comparator.comparingLong(r -> { + String timestamp = r.getHeader(HeaderUtils.NIO_TIMESTAMP_HEADER); + return timestamp == null ? 0 : Long.parseLong(timestamp); + })); + } + + private void checkCompletableFuture(CompletableFuture completableFuture) { + if (completableFuture == null) { + log.error("Error CompletableFuture"); + } + } + private static String getPathWithIdParam() { return V0_PATH + "?" + ID_PARAM; } From a14225b5b2021264504fd94be6df3469b7518e1f Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 11 Apr 2024 17:13:39 +0300 Subject: [PATCH 18/31] fix stage 5 --- .../pavelemelyanov/ConsistentHashing.java | 40 +++----- .../ExecutorServiceWrapper.java | 10 +- .../itmo/test/pavelemelyanov/HashService.java | 27 ------ .../itmo/test/pavelemelyanov/HeaderUtils.java | 11 --- .../itmo/test/pavelemelyanov/HttpUtils.java | 8 +- .../vk/itmo/test/pavelemelyanov/MyServer.java | 95 ++++++++----------- .../test/pavelemelyanov/RequestHandler.java | 2 +- 7 files changed, 66 insertions(+), 127 deletions(-) delete mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/HashService.java delete mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/HeaderUtils.java diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java index 968e5213d..e27fd83e1 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java @@ -1,23 +1,20 @@ package ru.vk.itmo.test.pavelemelyanov; -import java.nio.charset.StandardCharsets; +import one.nio.util.Hash; + import java.util.ArrayList; -import java.util.Collections; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.NavigableMap; import java.util.SortedMap; import java.util.TreeMap; -import java.util.stream.Collectors; public class ConsistentHashing { private final NavigableMap virtualNodeMapping = new TreeMap<>(); - private final HashService hashService = new HashService(); - private final int clusterSize; + private final List clusterUrls; public ConsistentHashing(List clusterUrls, int numbOfVirtualNodes) { - clusterSize = clusterUrls.size(); + this.clusterUrls = clusterUrls; for (String clusterUrl : clusterUrls) { for (int i = 0; i < numbOfVirtualNodes; i++) { addNode(i, clusterUrl); @@ -25,11 +22,6 @@ public ConsistentHashing(List clusterUrls, int numbOfVirtualNodes) { } } - public void addNode(int numOfNode, String node) { - int hash = getHash(node + numOfNode); - virtualNodeMapping.put(hash, node); - } - public String getNode(String key) { if (virtualNodeMapping.isEmpty()) { return null; @@ -41,14 +33,10 @@ public String getNode(String key) { } public List getNodes(String key, int from) { - if (virtualNodeMapping.isEmpty()) { - return Collections.emptyList(); - } - List res = new ArrayList<>(); if (key != null && from > 0) { - if (from < clusterSize) { + if (from < clusterUrls.size()) { int slot = getHash(key); Iterator it = new ClockwiseIterator(slot); while (it.hasNext() && res.size() < from) { @@ -56,26 +44,20 @@ public List getNodes(String key, int from) { res.add(part); } } else { - res.addAll(virtualNodeMapping.values()); + res.addAll(clusterUrls); } } return res; } - List getNodes(String key, List clusterUrls, int from) { - Map nodesHashes = new TreeMap<>(); - - for (String nodeUrl : clusterUrls) { - nodesHashes.put(getHash(nodeUrl + key), nodeUrl); - } - - return nodesHashes.values().stream().limit(from) - .collect(Collectors.toList()); + private int getHash(String key) { + return Hash.murmur3(key); } - private int getHash(String key) { - return hashService.digest(key.getBytes(StandardCharsets.UTF_8)); + private void addNode(int numOfNode, String node) { + int hash = getHash(node + numOfNode); + virtualNodeMapping.put(hash, node); } private class ClockwiseIterator implements Iterator { diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceWrapper.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceWrapper.java index 242222eea..a4770af9f 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceWrapper.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceWrapper.java @@ -10,8 +10,10 @@ import static ru.vk.itmo.test.pavelemelyanov.ExecutorServiceConfig.KEEP_ALIVE_TIME; public class ExecutorServiceWrapper { + public static final int TERMINATION_TIMEOUT = 60; + private static final Logger LOG = LoggerFactory.getLogger(MyServer.class); + private final ExecutorService workingPool; - private static final Logger log = LoggerFactory.getLogger(MyServer.class); public ExecutorServiceWrapper() { workingPool = new ThreadPoolExecutor( @@ -31,10 +33,10 @@ public ExecutorService getExecutorService() { public void shutdownAndAwaitTermination() { workingPool.shutdown(); try { - if (!workingPool.awaitTermination(60, TimeUnit.SECONDS)) { + if (!workingPool.awaitTermination(TERMINATION_TIMEOUT, TimeUnit.SECONDS)) { workingPool.shutdownNow(); - if (!workingPool.awaitTermination(60, TimeUnit.SECONDS)) { - log.error("ExecutorService error with stopping"); + if (!workingPool.awaitTermination(TERMINATION_TIMEOUT, TimeUnit.SECONDS)) { + LOG.error("ExecutorService error with stopping"); } } } catch (InterruptedException ex) { diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HashService.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HashService.java deleted file mode 100644 index 378ce9aa6..000000000 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HashService.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.vk.itmo.test.pavelemelyanov; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.ByteBuffer; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -public class HashService { - private final MessageDigest messageDigest; - private static final Logger logger = LoggerFactory.getLogger(HashService.class); - - public HashService() { - try { - this.messageDigest = MessageDigest.getInstance("SHA-256"); - } catch (NoSuchAlgorithmException e) { - logger.error("HashService init error:", e.getCause()); - throw new IllegalArgumentException("HashService init error:", e); - } - } - - public int digest(byte[] bytes) { - final byte[] hash = messageDigest.digest(bytes); - return ByteBuffer.wrap(hash).getInt(); - } -} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HeaderUtils.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HeaderUtils.java deleted file mode 100644 index 7759479c7..000000000 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HeaderUtils.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.vk.itmo.test.pavelemelyanov; - -public final class HeaderUtils { - public static final String HTTP_TIMESTAMP_HEADER = "X-Timestamp"; - public static final String NIO_TIMESTAMP_HEADER = "x-timestamp:"; - public static final String HTTP_TERMINATION_HEADER = "X-Termination"; - - private HeaderUtils() { - - } -} diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java index 688f3e513..f83bb6243 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java @@ -8,12 +8,13 @@ import java.util.Set; public final class HttpUtils { - public static final Set METHODS = Set.of( + public static final String NOT_ENOUGH_REPLICAS = "504 Not Enough Replicas"; + public static final Set SUPPORTED_METHODS = Set.of( Request.METHOD_GET, Request.METHOD_PUT, Request.METHOD_DELETE ); - public static final int REQUEST_TIMEOUT = 3000; + public static final int REQUEST_TIMEOUT_IN_MILLIS = 3000; public static final Map HTTP_CODE = Map.of( HttpURLConnection.HTTP_OK, Response.OK, HttpURLConnection.HTTP_ACCEPTED, Response.ACCEPTED, @@ -23,6 +24,9 @@ public final class HttpUtils { HttpURLConnection.HTTP_INTERNAL_ERROR, Response.INTERNAL_ERROR ); public static final int NUMBER_OF_VIRTUAL_NODES = 50; + public static final String HTTP_TIMESTAMP_HEADER = "X-Timestamp"; + public static final String NIO_TIMESTAMP_HEADER = "x-timestamp:"; + public static final String HTTP_TERMINATION_HEADER = "X-Termination"; private HttpUtils() { diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index c9c61be2a..7af779ded 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -24,27 +24,24 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.atomic.AtomicInteger; -import static ru.vk.itmo.test.pavelemelyanov.HttpUtils.METHODS; -import static ru.vk.itmo.test.pavelemelyanov.HttpUtils.REQUEST_TIMEOUT; - public class MyServer extends HttpServer { private static final String V0_PATH = "/v0/entity"; private static final String ID_PARAM = "id="; private static final String FROM_PARAM = "from="; private static final String ACK_PARAM = "ack="; - private static final String NOT_ENOUGH_REPLICAS = "504 Not Enough Replicas"; - public static final int SERVER_ERROR = 500; - private static final Logger log = LoggerFactory.getLogger(MyServer.class); + private static final int SERVER_ERROR = 500; + private static final Logger LOG = LoggerFactory.getLogger(MyServer.class); private final ExecutorService workersPool; private final HttpClient httpClient; private final ConsistentHashing shards; - private final List clusterUrls; private final RequestHandler requestHandler; private final String selfUrl; private final int clusterSize; @@ -57,7 +54,6 @@ public MyServer(ServiceConfig config, Dao dao, ExecutorServiceWrapper worker, this.requestHandler = new RequestHandler(dao); this.workersPool = worker.getExecutorService(); this.clusterSize = config.clusterUrls().size(); - this.clusterUrls = config.clusterUrls(); this.httpClient = HttpClient.newBuilder() .executor(Executors.newFixedThreadPool(2)).build(); @@ -65,7 +61,7 @@ public MyServer(ServiceConfig config, Dao dao, ExecutorServiceWrapper worker, @Override public void handleDefault(Request request, HttpSession session) throws IOException { - Response response = METHODS.contains(request.getMethod()) + Response response = HttpUtils.SUPPORTED_METHODS.contains(request.getMethod()) ? new Response(Response.BAD_REQUEST, Response.EMPTY) : new Response(Response.METHOD_NOT_ALLOWED, Response.EMPTY); session.sendResponse(response); @@ -74,13 +70,13 @@ public void handleDefault(Request request, HttpSession session) throws IOExcepti @Override public void handleRequest(Request request, HttpSession session) throws IOException { try { - if (!request.getURI().startsWith(getPathWithIdParam()) || !METHODS.contains(request.getMethod())) { + if (!request.getURI().startsWith(getPathWithIdParam()) + || !HttpUtils.SUPPORTED_METHODS.contains(request.getMethod())) { handleDefault(request, session); return; } String paramId = request.getParameter(ID_PARAM); - String fromStr = request.getParameter(FROM_PARAM); String ackStr = request.getParameter(ACK_PARAM); @@ -97,7 +93,7 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti try { processingRequest(request, session, processingStartTime, paramId, from, ack); } catch (IOException e) { - log.error("Exception while sending close connection", e); + LOG.error("Exception while sending close connection", e); session.scheduleClose(); } }); @@ -108,25 +104,21 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti private void processingRequest(Request request, HttpSession session, long processingStartTime, String paramId, int from, int ack) throws IOException { - if (System.currentTimeMillis() - processingStartTime > REQUEST_TIMEOUT) { + if (System.currentTimeMillis() - processingStartTime > HttpUtils.REQUEST_TIMEOUT_IN_MILLIS) { session.sendResponse(new Response(Response.REQUEST_TIMEOUT, Response.EMPTY)); return; } try { - if (request.getHeader(HeaderUtils.HTTP_TERMINATION_HEADER) == null) { - CompletableFuture handleProxyResponse = - handleProxyRequest(request, session, paramId, from, ack); - handleProxyResponse = handleProxyResponse.whenComplete((response, throwable) -> - sendResponse(session, response)); - checkCompletableFuture(handleProxyResponse); - } else { - sendResponse(session, requestHandler.handle(request, paramId)); + if (request.getHeader(HttpUtils.HTTP_TERMINATION_HEADER) == null) { + sendResponse(session, handleProxyRequest(request, paramId, from, ack)); + return; } + sendResponse(session, requestHandler.handle(request, paramId)); } catch (Exception e) { - if (e.getClass() == HttpException.class) { + if (e instanceof HttpException) { session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); } else { - log.error("Exception during handleRequest: ", e); + LOG.error("Exception during handleRequest: ", e); session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); } } @@ -136,7 +128,7 @@ private void sendResponse(HttpSession session, Response response) { try { session.sendResponse(response); } catch (IOException e) { - log.error("Error sending response", e); + LOG.error("Error sending response", e); session.scheduleClose(); } } @@ -147,7 +139,7 @@ private HttpRequest createProxyRequest(Request request, String nodeUrl, String p : HttpRequest.BodyPublishers.ofByteArray(request.getBody()); return HttpRequest.newBuilder(URI.create(nodeUrl + getPathWithIdParam() + params)) .method(request.getMethodName(), bodyPublisher) - .setHeader(HeaderUtils.HTTP_TERMINATION_HEADER, "true") + .setHeader(HttpUtils.HTTP_TERMINATION_HEADER, "true") .build(); } @@ -163,8 +155,9 @@ private Response processingResponse(HttpResponse response) { } Response newResponse = new Response(statusCode, response.body()); long timestamp = response.headers() - .firstValueAsLong(HeaderUtils.HTTP_TIMESTAMP_HEADER).orElse(0); - newResponse.addHeader(HeaderUtils.NIO_TIMESTAMP_HEADER + timestamp); + .firstValueAsLong(HttpUtils.HTTP_TIMESTAMP_HEADER) + .orElse(0); + newResponse.addHeader(HttpUtils.NIO_TIMESTAMP_HEADER + timestamp); return newResponse; } @@ -180,22 +173,21 @@ private List> sendProxyRequests(Map handleProxyRequest(Request request, HttpSession session, - String paramId, int from, int ack) { - List nodeUrls = shards.getNodes(paramId, clusterUrls, from); + private Response handleProxyRequest(Request request, String paramId, int from, int ack) { + List nodeUrls = shards.getNodes(paramId, from); if (nodeUrls.size() < from) { - sendResponse(session, new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY)); + return new Response(HttpUtils.NOT_ENOUGH_REPLICAS, Response.EMPTY); } HashMap httpRequests = new HashMap<>(nodeUrls.size()); - for (String nodeUrl : nodeUrls) { + for (var nodeUrl : nodeUrls) { httpRequests.put(nodeUrl, createProxyRequest(request, nodeUrl, paramId)); } List> responses = sendProxyRequests(httpRequests, nodeUrls); - if (httpRequests.get(selfUrl) != null) { + if (httpRequests.containsKey(selfUrl)) { responses.add( CompletableFuture.supplyAsync(() -> requestHandler.handle(request, paramId)) ); @@ -204,15 +196,15 @@ private CompletableFuture handleProxyRequest(Request request, HttpSess return getQuorumResult(request, from, ack, responses); } - private CompletableFuture getQuorumResult(Request request, int from, int ack, - List> responses) { - List successResponses = new ArrayList<>(); + private Response getQuorumResult(Request request, int from, int ack, + List> responses) { + List successResponses = new CopyOnWriteArrayList<>(); CompletableFuture result = new CompletableFuture<>(); AtomicInteger successResponseCount = new AtomicInteger(); AtomicInteger errorResponseCount = new AtomicInteger(); - for (CompletableFuture responseFuture : responses) { - responseFuture = responseFuture.whenComplete((response, throwable) -> { + for (var responseFuture : responses) { + responseFuture.whenCompleteAsync((response, throwable) -> { if (throwable == null || (response != null && response.getStatus() < SERVER_ERROR)) { successResponseCount.incrementAndGet(); successResponses.add(response); @@ -225,14 +217,19 @@ private CompletableFuture getQuorumResult(Request request, int from, i } if (errorResponseCount.get() == from - ack + 1) { - result.complete(new Response(NOT_ENOUGH_REPLICAS, Response.EMPTY)); + result.complete(new Response(HttpUtils.NOT_ENOUGH_REPLICAS, Response.EMPTY)); } - }); - - checkCompletableFuture(responseFuture); + }).exceptionally(e -> new Response(Response.INTERNAL_ERROR, Response.EMPTY)); } - return result; + try { + return result.get(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return new Response(Response.INTERNAL_ERROR, Response.EMPTY); + } catch (ExecutionException e) { + return new Response(Response.INTERNAL_ERROR, Response.EMPTY); + } } private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) { @@ -246,29 +243,21 @@ private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) return serverConfig; } - private Response getResult(Request request, List successResponses) { if (request.getMethod() == Request.METHOD_GET) { sortResponses(successResponses); return successResponses.getLast(); - } else { - return successResponses.getFirst(); } + return successResponses.getFirst(); } private void sortResponses(List successResponses) { successResponses.sort(Comparator.comparingLong(r -> { - String timestamp = r.getHeader(HeaderUtils.NIO_TIMESTAMP_HEADER); + String timestamp = r.getHeader(HttpUtils.NIO_TIMESTAMP_HEADER); return timestamp == null ? 0 : Long.parseLong(timestamp); })); } - private void checkCompletableFuture(CompletableFuture completableFuture) { - if (completableFuture == null) { - log.error("Error CompletableFuture"); - } - } - private static String getPathWithIdParam() { return V0_PATH + "?" + ID_PARAM; } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java index d4386eafe..b10b66560 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java @@ -10,7 +10,7 @@ import java.lang.foreign.ValueLayout; import java.nio.charset.StandardCharsets; -import static ru.vk.itmo.test.pavelemelyanov.HeaderUtils.HTTP_TIMESTAMP_HEADER; +import static ru.vk.itmo.test.pavelemelyanov.HttpUtils.HTTP_TIMESTAMP_HEADER; public class RequestHandler { private final Dao dao; From 882b0b95eb5dcedf74cc314da155bd38d83bac2c Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 11 Apr 2024 18:05:39 +0300 Subject: [PATCH 19/31] fix stage 5 --- .../java/ru/vk/itmo/test/pavelemelyanov/MyServer.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index 7af779ded..0aa9c34fa 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -114,13 +114,14 @@ private void processingRequest(Request request, HttpSession session, long proces return; } sendResponse(session, requestHandler.handle(request, paramId)); - } catch (Exception e) { - if (e instanceof HttpException) { + } + catch (Exception e) { + if (e.getClass() == HttpException.class) { session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); - } else { - LOG.error("Exception during handleRequest: ", e); - session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); + return; } + LOG.error("Exception during handleRequest: ", e); + session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); } } From 9f35539500e31103edd63f0a70ee5f59b9a3cdab Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 11 Apr 2024 18:09:19 +0300 Subject: [PATCH 20/31] fix stage 5 --- src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index 0aa9c34fa..05f8252a1 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -114,8 +114,7 @@ private void processingRequest(Request request, HttpSession session, long proces return; } sendResponse(session, requestHandler.handle(request, paramId)); - } - catch (Exception e) { + } catch (Exception e) { if (e.getClass() == HttpException.class) { session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); return; From 1dc748efa7d4bc884dac2a7f0977d7079d41c2e1 Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 18 Apr 2024 00:36:17 +0300 Subject: [PATCH 21/31] fix code style --- .../pavelemelyanov/ExecutorServiceConfig.java | 10 +- .../ExecutorServiceWrapper.java | 7 +- .../itmo/test/pavelemelyanov/HttpUtils.java | 2 +- .../test/pavelemelyanov/RequestHandler.java | 7 +- .../test/pavelemelyanov/ServerStarter.java | 8 +- .../script/lua/stage1/delete.lua | 9 -- .../pavelemelyanov/script/lua/stage1/get.lua | 8 +- .../pavelemelyanov/script/lua/stage1/put.lua | 3 +- .../statistic/wrk/stage5/get-1500rps-1t.txt | 104 ++++++++++++++++++ .../statistic/wrk/stage5/put-700rps-1t.txt | 98 +++++++++++++++++ 10 files changed, 225 insertions(+), 31 deletions(-) delete mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/delete.lua create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage5/get-1500rps-1t.txt create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage5/put-700rps-1t.txt diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java index f52df3d28..c5a4f7f79 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceConfig.java @@ -1,5 +1,7 @@ package ru.vk.itmo.test.pavelemelyanov; +import one.nio.async.CustomThreadFactory; + import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.RejectedExecutionHandler; @@ -8,10 +10,12 @@ public final class ExecutorServiceConfig { public static final int CORE_AMOUNT = Runtime.getRuntime().availableProcessors(); - public static final int CORE_POOL_SIZE = CORE_AMOUNT / 2; + public static final int CORE_POOL_SIZE = CORE_AMOUNT; public static final int MAX_CORE_POOL_SIZE = CORE_AMOUNT; - public static final long KEEP_ALIVE_TIME = TimeUnit.SECONDS.toNanos(3); - public static final int QUEUE_CAPACITY = 100; + public static final long KEEP_ALIVE_TIME = 60; + public static final TimeUnit UNIT = TimeUnit.SECONDS; + public static final int QUEUE_CAPACITY = 1000; + public static final CustomThreadFactory threadFactory = new CustomThreadFactory("t", true); public static final BlockingQueue queue = new ArrayBlockingQueue<>(QUEUE_CAPACITY); public static final RejectedExecutionHandler HANDLER = new ThreadPoolExecutor.AbortPolicy(); diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceWrapper.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceWrapper.java index a4770af9f..807d73426 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceWrapper.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ExecutorServiceWrapper.java @@ -7,8 +7,6 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import static ru.vk.itmo.test.pavelemelyanov.ExecutorServiceConfig.KEEP_ALIVE_TIME; - public class ExecutorServiceWrapper { public static final int TERMINATION_TIMEOUT = 60; private static final Logger LOG = LoggerFactory.getLogger(MyServer.class); @@ -19,9 +17,10 @@ public ExecutorServiceWrapper() { workingPool = new ThreadPoolExecutor( ExecutorServiceConfig.CORE_POOL_SIZE, ExecutorServiceConfig.MAX_CORE_POOL_SIZE, - KEEP_ALIVE_TIME, - TimeUnit.MILLISECONDS, + ExecutorServiceConfig.KEEP_ALIVE_TIME, + ExecutorServiceConfig.UNIT, ExecutorServiceConfig.queue, + ExecutorServiceConfig.threadFactory, ExecutorServiceConfig.HANDLER ); } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java index f83bb6243..da8c5f8f8 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/HttpUtils.java @@ -23,7 +23,7 @@ public final class HttpUtils { HttpURLConnection.HTTP_BAD_REQUEST, Response.BAD_REQUEST, HttpURLConnection.HTTP_INTERNAL_ERROR, Response.INTERNAL_ERROR ); - public static final int NUMBER_OF_VIRTUAL_NODES = 50; + public static final int NUMBER_OF_VIRTUAL_NODES = 100; public static final String HTTP_TIMESTAMP_HEADER = "X-Timestamp"; public static final String NIO_TIMESTAMP_HEADER = "x-timestamp:"; public static final String HTTP_TERMINATION_HEADER = "X-Termination"; diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java index b10b66560..74ce5f2d8 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java @@ -1,5 +1,6 @@ package ru.vk.itmo.test.pavelemelyanov; +import one.nio.http.Param; import one.nio.http.Request; import one.nio.http.Response; import ru.vk.itmo.test.pavelemelyanov.dao.BaseEntryWithTimestamp; @@ -32,7 +33,7 @@ public Response handle(Request request, String id) { }; } - private Response getEntry(String id) { + private Response getEntry(@Param(value = "id", required = true) String id) { MemorySegment key = convertFromString(id); EntryWithTimestamp entry = dao.get(key); @@ -52,7 +53,7 @@ private Response getEntry(String id) { ); } - private Response putEntry(String id, Request request) { + private Response putEntry(@Param(value = "id", required = true) String id, Request request) { if (request.getBody() == null) { return new Response(Response.BAD_REQUEST, Response.EMPTY); } @@ -65,7 +66,7 @@ private Response putEntry(String id, Request request) { return new Response(Response.CREATED, Response.EMPTY); } - private Response deleteEntry(String id) { + private Response deleteEntry(@Param(value = "id", required = true) String id) { MemorySegment key = convertFromString(id); dao.upsert(new BaseEntryWithTimestamp<>(key, null, System.currentTimeMillis())); diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java index e195dfd48..dc799c41e 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerStarter.java @@ -5,6 +5,7 @@ import ru.vk.itmo.test.pavelemelyanov.dao.ReferenceDao; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; @@ -13,7 +14,6 @@ public final class ServerStarter { private static final String URL = "http://localhost"; - private static final Path WORKING_DIR = Path.of("./data2/"); public static final long FLUSHING_THRESHOLD_BYTES = 1024 * 1024; private static final int BASE_PORT = 8080; private static final int CLUSTER_SIZE = 3; @@ -28,13 +28,15 @@ public static void main(String[] args) throws IOException { ExecutorServiceWrapper worker = new ExecutorServiceWrapper(); for (int i = 0; i < CLUSTER_SIZE; i++) { - var dao = new ReferenceDao(new Config(WORKING_DIR, FLUSHING_THRESHOLD_BYTES)); + Path data = Files.createTempDirectory("data12"); + + var dao = new ReferenceDao(new Config(data, FLUSHING_THRESHOLD_BYTES)); ServiceConfig serviceConfig = new ServiceConfig( BASE_PORT + i, clusterUrls.get(i), clusterUrls, - WORKING_DIR + data ); ConsistentHashing consistentHashing = new ConsistentHashing(clusterUrls, NUMBER_OF_VIRTUAL_NODES); diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/delete.lua b/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/delete.lua deleted file mode 100644 index d9a966809..000000000 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/delete.lua +++ /dev/null @@ -1,9 +0,0 @@ -id = 0 - -function request() - id = id + 1 - path = "/v0/entity?id=" .. id - headers = {} - headers["Host"] = "localhost:8080" - return wrk.format("DELETE", path, headers) -end diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/get.lua b/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/get.lua index fe4b24635..d71c68d47 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/get.lua +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/get.lua @@ -1,9 +1,5 @@ -id = 0 - function request() - id = id + 1 + id = math.random(1, 1000) path = "/v0/entity?id=" .. id - headers = {} - headers["Host"] = "localhost:8080" - return wrk.format("GET", path, headers) + return wrk.format("GET", path, body) end diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/put.lua b/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/put.lua index 75b48b642..f20740d29 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/put.lua +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/script/lua/stage1/put.lua @@ -12,8 +12,7 @@ end function request() id = id + 1 path = "/v0/entity?id=" .. id - headers = {} - headers["Host"] = "localhost:8080" body = random_string() + headers = {} return wrk.format("PUT", path, headers, body) end diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage5/get-1500rps-1t.txt b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage5/get-1500rps-1t.txt new file mode 100644 index 000000000..46b33985c --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage5/get-1500rps-1t.txt @@ -0,0 +1,104 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 2 connections + Thread calibration: mean lat.: 1.709ms, rate sampling interval: 10ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.68ms 0.95ms 17.23ms 91.13% + Req/Sec 1.58k 143.00 2.90k 78.11% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.53ms + 75.000% 1.87ms + 90.000% 2.32ms + 99.000% 5.71ms + 99.900% 10.74ms + 99.990% 16.59ms + 99.999% 17.25ms +100.000% 17.25ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.334 0.000000 1 1.00 + 0.979 0.100000 3000 1.11 + 1.143 0.200000 6007 1.25 + 1.286 0.300000 9009 1.43 + 1.409 0.400000 12015 1.67 + 1.528 0.500000 15014 2.00 + 1.589 0.550000 16508 2.22 + 1.651 0.600000 18001 2.50 + 1.715 0.650000 19493 2.86 + 1.786 0.700000 21009 3.33 + 1.865 0.750000 22494 4.00 + 1.911 0.775000 23255 4.44 + 1.958 0.800000 23991 5.00 + 2.018 0.825000 24748 5.71 + 2.091 0.850000 25515 6.67 + 2.181 0.875000 26244 8.00 + 2.241 0.887500 26613 8.89 + 2.319 0.900000 26988 10.00 + 2.411 0.912500 27362 11.43 + 2.547 0.925000 27739 13.33 + 2.713 0.937500 28111 16.00 + 2.813 0.943750 28299 17.78 + 2.931 0.950000 28486 20.00 + 3.059 0.956250 28675 22.86 + 3.241 0.962500 28861 26.67 + 3.477 0.968750 29049 32.00 + 3.645 0.971875 29141 35.56 + 3.857 0.975000 29235 40.00 + 4.067 0.978125 29329 45.71 + 4.403 0.981250 29422 53.33 + 4.731 0.984375 29516 64.00 + 4.955 0.985938 29563 71.11 + 5.199 0.987500 29610 80.00 + 5.523 0.989062 29657 91.43 + 5.967 0.990625 29703 106.67 + 6.415 0.992188 29752 128.00 + 6.619 0.992969 29774 142.22 + 6.931 0.993750 29798 160.00 + 7.255 0.994531 29821 182.86 + 7.659 0.995313 29844 213.33 + 8.279 0.996094 29867 256.00 + 8.647 0.996484 29879 284.44 + 8.895 0.996875 29891 320.00 + 9.111 0.997266 29903 365.71 + 9.359 0.997656 29914 426.67 + 9.655 0.998047 29926 512.00 + 9.815 0.998242 29932 568.89 + 9.975 0.998437 29938 640.00 + 10.151 0.998633 29944 731.43 + 10.463 0.998828 29949 853.33 + 10.855 0.999023 29955 1024.00 + 11.335 0.999121 29958 1137.78 + 11.703 0.999219 29961 1280.00 + 12.391 0.999316 29964 1462.86 + 13.295 0.999414 29967 1706.67 + 13.607 0.999512 29970 2048.00 + 13.791 0.999561 29971 2275.56 + 13.807 0.999609 29973 2560.00 + 13.951 0.999658 29974 2925.71 + 15.199 0.999707 29976 3413.33 + 15.607 0.999756 29977 4096.00 + 15.807 0.999780 29978 4551.11 + 15.959 0.999805 29979 5120.00 + 15.959 0.999829 29979 5851.43 + 16.327 0.999854 29980 6826.67 + 16.591 0.999878 29981 8192.00 + 16.591 0.999890 29981 9102.22 + 16.735 0.999902 29982 10240.00 + 16.735 0.999915 29982 11702.86 + 16.735 0.999927 29982 13653.33 + 17.071 0.999939 29983 16384.00 + 17.071 0.999945 29983 18204.44 + 17.071 0.999951 29983 20480.00 + 17.071 0.999957 29983 23405.71 + 17.071 0.999963 29983 27306.67 + 17.247 0.999969 29984 32768.00 + 17.247 1.000000 29984 inf +#[Mean = 1.683, StdDeviation = 0.945] +#[Max = 17.232, Total count = 29984] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 44996 requests in 30.00s, 5.54MB read + Socket errors: connect 0, read 26, write 0, timeout 0 +Requests/sec: 1499.86 +Transfer/sec: 189.00KB \ No newline at end of file diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage5/put-700rps-1t.txt b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage5/put-700rps-1t.txt new file mode 100644 index 000000000..b4f49455b --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/wrk/stage5/put-700rps-1t.txt @@ -0,0 +1,98 @@ +Running 30s test @ http://localhost:8080 + 1 threads and 2 connections + Thread calibration: mean lat.: 1.991ms, rate sampling interval: 10ms + Thread Stats Avg Stdev Max +/- Stdev + Latency 1.99ms 2.20ms 28.14ms 96.08% + Req/Sec 738.26 120.07 1.78k 80.66% + Latency Distribution (HdrHistogram - Recorded Latency) + 50.000% 1.60ms + 75.000% 2.05ms + 90.000% 2.71ms + 99.000% 14.85ms + 99.900% 23.15ms + 99.990% 27.69ms + 99.999% 28.16ms +100.000% 28.16ms + + Detailed Percentile spectrum: + Value Percentile TotalCount 1/(1-Percentile) + + 0.295 0.000000 1 1.00 + 0.877 0.100000 1400 1.11 + 1.130 0.200000 2806 1.25 + 1.302 0.300000 4204 1.43 + 1.451 0.400000 5604 1.67 + 1.603 0.500000 6997 2.00 + 1.687 0.550000 7701 2.22 + 1.767 0.600000 8402 2.50 + 1.851 0.650000 9101 2.86 + 1.944 0.700000 9800 3.33 + 2.051 0.750000 10499 4.00 + 2.119 0.775000 10849 4.44 + 2.195 0.800000 11197 5.00 + 2.285 0.825000 11548 5.71 + 2.399 0.850000 11899 6.67 + 2.533 0.875000 12243 8.00 + 2.615 0.887500 12419 8.89 + 2.715 0.900000 12592 10.00 + 2.847 0.912500 12768 11.43 + 3.037 0.925000 12942 13.33 + 3.251 0.937500 13118 16.00 + 3.391 0.943750 13205 17.78 + 3.607 0.950000 13292 20.00 + 3.897 0.956250 13379 22.86 + 4.347 0.962500 13467 26.67 + 5.247 0.968750 13554 32.00 + 5.739 0.971875 13598 35.56 + 6.483 0.975000 13642 40.00 + 7.575 0.978125 13685 45.71 + 8.927 0.981250 13729 53.33 + 10.575 0.984375 13774 64.00 + 11.487 0.985938 13795 71.11 + 12.807 0.987500 13817 80.00 + 13.927 0.989062 13838 91.43 + 15.455 0.990625 13860 106.67 + 16.911 0.992188 13882 128.00 + 17.519 0.992969 13894 142.22 + 18.047 0.993750 13904 160.00 + 18.735 0.994531 13915 182.86 + 19.663 0.995313 13926 213.33 + 20.159 0.996094 13937 256.00 + 20.447 0.996484 13942 284.44 + 20.879 0.996875 13948 320.00 + 21.103 0.997266 13953 365.71 + 21.519 0.997656 13959 426.67 + 21.807 0.998047 13964 512.00 + 21.983 0.998242 13967 568.89 + 22.111 0.998437 13970 640.00 + 22.223 0.998633 13972 731.43 + 22.735 0.998828 13975 853.33 + 23.295 0.999023 13978 1024.00 + 23.327 0.999121 13979 1137.78 + 23.839 0.999219 13981 1280.00 + 24.207 0.999316 13983 1462.86 + 24.207 0.999414 13983 1706.67 + 25.247 0.999512 13985 2048.00 + 25.247 0.999561 13985 2275.56 + 25.775 0.999609 13986 2560.00 + 26.751 0.999658 13987 2925.71 + 26.751 0.999707 13987 3413.33 + 26.799 0.999756 13988 4096.00 + 26.799 0.999780 13988 4551.11 + 27.087 0.999805 13989 5120.00 + 27.087 0.999829 13989 5851.43 + 27.087 0.999854 13989 6826.67 + 27.695 0.999878 13990 8192.00 + 27.695 0.999890 13990 9102.22 + 27.695 0.999902 13990 10240.00 + 27.695 0.999915 13990 11702.86 + 27.695 0.999927 13990 13653.33 + 28.159 0.999939 13991 16384.00 + 28.159 1.000000 13991 inf +#[Mean = 1.994, StdDeviation = 2.197] +#[Max = 28.144, Total count = 13991] +#[Buckets = 27, SubBuckets = 2048] +---------------------------------------------------------- + 20998 requests in 30.00s, 1.34MB read +Requests/sec: 699.92 +Transfer/sec: 45.81KB From 858536140f6922f30986b6eb916e44f64e38c39f Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 18 Apr 2024 00:36:28 +0300 Subject: [PATCH 22/31] fix code style --- src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index 05f8252a1..11f98f7f8 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -27,7 +27,6 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.atomic.AtomicInteger; @@ -56,7 +55,7 @@ public MyServer(ServiceConfig config, Dao dao, ExecutorServiceWrapper worker, this.clusterSize = config.clusterUrls().size(); this.httpClient = HttpClient.newBuilder() - .executor(Executors.newFixedThreadPool(2)).build(); + .executor(workersPool).build(); } @Override @@ -212,7 +211,7 @@ private Response getQuorumResult(Request request, int from, int ack, errorResponseCount.incrementAndGet(); } - if (successResponseCount.get() == ack) { + if (successResponseCount.get() >= ack) { result.complete(getResult(request, successResponses)); } From 685f707800a8fd8e8d938d36f911db4713e2c02e Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 18 Apr 2024 00:56:04 +0300 Subject: [PATCH 23/31] add reports --- .../statistic/profiler/stage5/cpu-put.html | 2932 +++++++++++++++++ .../statistic/profiler/stage5/lock-get.html | 939 ++++++ .../statistic/profiler/stage5/lock-put.html | 779 +++++ 3 files changed, 4650 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/cpu-put.html create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/lock-get.html create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/lock-put.html diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/cpu-put.html b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/cpu-put.html new file mode 100644 index 000000000..2c00b1c4b --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/cpu-put.html @@ -0,0 +1,2932 @@ + + + + + + + +

CPU profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/lock-get.html b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/lock-get.html new file mode 100644 index 000000000..7460ee6be --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/lock-get.html @@ -0,0 +1,939 @@ + + + + + + + +

Lock profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/lock-put.html b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/lock-put.html new file mode 100644 index 000000000..3e8c5c5c7 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/lock-put.html @@ -0,0 +1,779 @@ + + + + + + + +

Lock profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ From ed1f795fea548f0dd07d8e7b7a335713c7e7f876 Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 18 Apr 2024 00:58:33 +0300 Subject: [PATCH 24/31] add reports --- .../statistic/profiler/stage5/cpu-get.html | 4942 +++++++++++++++++ 1 file changed, 4942 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/cpu-get.html diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/cpu-get.html b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/cpu-get.html new file mode 100644 index 000000000..f41753205 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/cpu-get.html @@ -0,0 +1,4942 @@ + + + + + + + +

CPU profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ From 2c786432e5175c64dd9978fa250189b17e1894d4 Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 18 Apr 2024 00:59:19 +0300 Subject: [PATCH 25/31] add reports --- .../statistic/profiler/stage5/alloc-get.html | 2807 +++++++++++++++++ 1 file changed, 2807 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/alloc-get.html diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/alloc-get.html b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/alloc-get.html new file mode 100644 index 000000000..04c1f23b9 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/alloc-get.html @@ -0,0 +1,2807 @@ + + + + + + + +

Allocation profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ From 85e255886b2067ce3f6924db23264b5b4a3b1ade Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 18 Apr 2024 01:01:19 +0300 Subject: [PATCH 26/31] add reports --- .../statistic/profiler/stage5/alloc-put.html | 2793 +++++++++++++++++ 1 file changed, 2793 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/alloc-put.html diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/alloc-put.html b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/alloc-put.html new file mode 100644 index 000000000..15ab6978c --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/statistic/profiler/stage5/alloc-put.html @@ -0,0 +1,2793 @@ + + + + + + + +

Allocation profile

+
  
+
Produced by async-profiler
+ +
+

+

Matched:

+ From 5794e54f8e7334b1765600573afd9f65d366712b Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 18 Apr 2024 02:14:15 +0300 Subject: [PATCH 27/31] add report --- .../pavelemelyanov/report/stage5/report.md | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/report/stage5/report.md diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/report/stage5/report.md b/src/main/java/ru/vk/itmo/test/pavelemelyanov/report/stage5/report.md new file mode 100644 index 000000000..f0f122667 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/report/stage5/report.md @@ -0,0 +1,39 @@ +# Отчёт stage2 +Всвязи с тем, что ноутбук, на котором я делал первые лабы вышел из строя +(бесконечная загрузка). Протестировал на стационарном компьюетре с оооооочень плохими характеристиками (у меня он винду не тянет вообще никак) +Всего ядер 2, так как процессор слудующий: intel(r) core(tm) i3-6100t cpu +поэтому значения параметров в отчёте крайне маленькие +Кластер состоит из 3 нод +При увеличении количества соединений возникали проблемы с тестированием, так как компьютер не справлялся +# Анализ +Точка разладки достигается при 1000 rps на put и при 2к на get, поэтому буду тестировать на 700 rps put и 1500 get + +## Alloc PUT +Появилась аллокация ForkJoinWorkerThread.run, которая возникла, подозреваю при работе с CompletableFuture + +Не понимаю, почему нет аллокации на дэфолтный экзекутор. По идее он должен быть, ведь сам я его не создавал + +## Alloc GET +Аналогично, но с изменением в пропорциях + +## Lock PUT +ThreadPoolExecutor.runWorker занимает 73% +ThreadPoolExecutor.getTask - 8% +CompletableFuture$AsyncSupply.run 19.62% +SequentialScheduler$SchedulableTask.run - 45% +SelectorManager - 20% +Подозреваю, что такие значения из-за асинхронной работы +## Lock GET +Аналогично, но с изменением в пропорциях +## CPU PUT +SelectorManager занимает 5% (используется для управления соединениями клиента) +Появилась работа у воркеров с CompletableFuture, чего мы и добивались + +Работа с responseAsync клиента - 35%; в нем же 25% - работа СompletableFuture +## CPU GET +Аналогично, но с изменением в пропорциях +## Итог +Из-за CompletableFuture выросла трата ресуросв на работу с ними. Самыми показательными были LOCK фреймы. + +## Улучшения +- Идей нет \ No newline at end of file From d09bfbfb895ced9808c8f8b8a19b9c4045bf79f8 Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 18 Apr 2024 02:23:22 +0300 Subject: [PATCH 28/31] fix row use --- .../java/ru/vk/itmo/test/pavelemelyanov/MyServer.java | 9 +++++++-- .../ru/vk/itmo/test/pavelemelyanov/RequestHandler.java | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index 11f98f7f8..c19ee7c34 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -11,8 +11,10 @@ import org.slf4j.LoggerFactory; import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.test.pavelemelyanov.dao.Dao; +import ru.vk.itmo.test.pavelemelyanov.dao.EntryWithTimestamp; import java.io.IOException; +import java.lang.foreign.MemorySegment; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; @@ -45,8 +47,11 @@ public class MyServer extends HttpServer { private final String selfUrl; private final int clusterSize; - public MyServer(ServiceConfig config, Dao dao, ExecutorServiceWrapper worker, - ConsistentHashing shards) throws IOException { + public MyServer( + ServiceConfig config, + Dao> dao, + ExecutorServiceWrapper worker, + ConsistentHashing shards) throws IOException { super(createServerConfig(config)); this.selfUrl = config.selfUrl(); this.shards = shards; diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java index 74ce5f2d8..88c384f66 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java @@ -14,9 +14,9 @@ import static ru.vk.itmo.test.pavelemelyanov.HttpUtils.HTTP_TIMESTAMP_HEADER; public class RequestHandler { - private final Dao dao; + private final Dao> dao; - public RequestHandler(Dao dao) { + public RequestHandler(Dao> dao) { this.dao = dao; } From cd4b90ecf6a64d8d72947c72ae1a0bb7484e79cc Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 25 Apr 2024 17:06:26 +0300 Subject: [PATCH 29/31] add stage6 code --- .../pavelemelyanov/ConsistentHashing.java | 4 +- .../itmo/test/pavelemelyanov/FactoryImpl.java | 2 +- .../vk/itmo/test/pavelemelyanov/MyServer.java | 35 +++++++++- .../test/pavelemelyanov/RequestHandler.java | 7 ++ .../test/pavelemelyanov/StreamResponse.java | 69 +++++++++++++++++++ 5 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/StreamResponse.java diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java index e27fd83e1..6c53c84d3 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ConsistentHashing.java @@ -65,10 +65,10 @@ private class ClockwiseIterator implements Iterator { private final Iterator tail; public ClockwiseIterator(int slot) { - this.head = virtualNodeMapping.headMap(slot) + head = virtualNodeMapping.headMap(slot) .values() .iterator(); - this.tail = virtualNodeMapping.tailMap(slot) + tail = virtualNodeMapping.tailMap(slot) .values() .iterator(); } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java index 226bf7cd5..f20b808be 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/FactoryImpl.java @@ -4,7 +4,7 @@ import ru.vk.itmo.ServiceConfig; import ru.vk.itmo.test.ServiceFactory; -@ServiceFactory(stage = 5) +@ServiceFactory(stage = 6) public class FactoryImpl implements ServiceFactory.Factory { @Override diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index c19ee7c34..bd1d1b0c7 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; @@ -34,6 +35,7 @@ public class MyServer extends HttpServer { private static final String V0_PATH = "/v0/entity"; + private static final String RANGE_REQUEST = "/v0/entities?start="; private static final String ID_PARAM = "id="; private static final String FROM_PARAM = "from="; private static final String ACK_PARAM = "ack="; @@ -74,6 +76,14 @@ public void handleDefault(Request request, HttpSession session) throws IOExcepti @Override public void handleRequest(Request request, HttpSession session) throws IOException { try { + if (request.getURI().startsWith(RANGE_REQUEST)) { + String paramStart = request.getParameter("start="); + String paramEnd = request.getParameter("end="); + + rangeRequest(session, paramStart, paramEnd); + return; + } + if (!request.getURI().startsWith(getPathWithIdParam()) || !HttpUtils.SUPPORTED_METHODS.contains(request.getMethod())) { handleDefault(request, session); @@ -84,8 +94,8 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti String fromStr = request.getParameter(FROM_PARAM); String ackStr = request.getParameter(ACK_PARAM); - int from = fromStr == null || fromStr.isBlank() ? clusterSize : Integer.parseInt(fromStr); - int ack = ackStr == null || ackStr.isBlank() ? from / 2 + 1 : Integer.parseInt(ackStr); + int from = isNotParameterValid(fromStr) ? clusterSize : Integer.parseInt(fromStr); + int ack = isNotParameterValid(ackStr) ? from / 2 + 1 : Integer.parseInt(ackStr); if (ack == 0 || from > clusterSize || ack > from || paramId == null || paramId.isEmpty()) { sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); @@ -265,4 +275,25 @@ private void sortResponses(List successResponses) { private static String getPathWithIdParam() { return V0_PATH + "?" + ID_PARAM; } + + private void rangeRequest(HttpSession session, String startParam, String endParam) { + if (isNotParameterValid(startParam)) { + sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); + return; + } + workersPool.execute(() -> { + try { + Iterator> entries = requestHandler.getEntries(startParam, endParam); + var streamResponse = new StreamResponse(Response.OK, entries); + streamResponse.stream(session); + } catch (IOException e) { + LOG.error("Exception while closing connection", e); + session.scheduleClose(); + } + }); + } + + private static boolean isNotParameterValid(String param) { + return param == null || param.isBlank(); + } } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java index 88c384f66..10d15a2aa 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/RequestHandler.java @@ -10,6 +10,7 @@ import java.lang.foreign.MemorySegment; import java.lang.foreign.ValueLayout; import java.nio.charset.StandardCharsets; +import java.util.Iterator; import static ru.vk.itmo.test.pavelemelyanov.HttpUtils.HTTP_TIMESTAMP_HEADER; @@ -33,6 +34,12 @@ public Response handle(Request request, String id) { }; } + public Iterator> getEntries(String startParam, String endParam) { + MemorySegment startVal = convertFromString(startParam); + MemorySegment endVal = endParam != null ? convertFromString(endParam) : null; + return dao.get(startVal, endVal); + } + private Response getEntry(@Param(value = "id", required = true) String id) { MemorySegment key = convertFromString(id); EntryWithTimestamp entry = dao.get(key); diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/StreamResponse.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/StreamResponse.java new file mode 100644 index 000000000..aa69aa426 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/StreamResponse.java @@ -0,0 +1,69 @@ +package ru.vk.itmo.test.pavelemelyanov; + +import one.nio.http.Response; +import one.nio.net.Session; +import ru.vk.itmo.test.pavelemelyanov.dao.EntryWithTimestamp; + +import java.io.IOException; +import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; +import java.nio.charset.StandardCharsets; +import java.util.Iterator; + +public class StreamResponse extends Response { + public static final String CRLF = "\r\n"; + public static final byte[] LAST_STRING = "0\r\n\r\n".getBytes(StandardCharsets.UTF_8); + public static final String NEW_LINE = "\n"; + public static final byte[] HEADER = getHeaderBytes(); + + private final Iterator> entries; + + public StreamResponse(String resultCode, Iterator> entries) { + super(resultCode); + this.entries = entries; + } + + public void stream(Session session) throws IOException { + session.write(HEADER, 0, HEADER.length); + + processWrite(session); + session.scheduleClose(); + } + + private void next(Session session, MemorySegment key, MemorySegment value) throws IOException { + if (value == null || key == null) { + throw new IllegalArgumentException(); + } + + byte[] keyInBytes = key.toArray(ValueLayout.JAVA_BYTE); + byte[] valueInBytes = value.toArray(ValueLayout.JAVA_BYTE); + + String entrySize = Integer.toHexString(keyInBytes.length + valueInBytes.length + NEW_LINE.length()); + + var keyInString = new String(keyInBytes, StandardCharsets.UTF_8); + var valueInString = new String(valueInBytes, StandardCharsets.UTF_8); + byte[] resultValue = (entrySize + CRLF + + keyInString + NEW_LINE + + valueInString + CRLF).getBytes(StandardCharsets.UTF_8); + + session.write(resultValue, 0, resultValue.length); + } + + private void processWrite(Session session) throws IOException { + while (entries.hasNext()) { + EntryWithTimestamp entry = entries.next(); + + next(session, entry.key(), entry.value()); + } + session.write(LAST_STRING, 0, LAST_STRING.length); + } + + private static byte[] getHeaderBytes() { + return """ + HTTP/1.1 200 OK\r + Content-Type: text/plain\r + Transfer-Encoding: chunked\r + \r + """.getBytes(StandardCharsets.UTF_8); + } +} From bdb8de3dd104b0fbd0b43f65098f49e32ff922d8 Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 25 Apr 2024 17:27:34 +0300 Subject: [PATCH 30/31] fix code style --- .../vk/itmo/test/pavelemelyanov/MyServer.java | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index bd1d1b0c7..5df328f10 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -34,8 +34,8 @@ import java.util.concurrent.atomic.AtomicInteger; public class MyServer extends HttpServer { - private static final String V0_PATH = "/v0/entity"; private static final String RANGE_REQUEST = "/v0/entities?start="; + private static final String ID_REQUEST = "/v0/entity?id="; private static final String ID_PARAM = "id="; private static final String FROM_PARAM = "from="; private static final String ACK_PARAM = "ack="; @@ -62,7 +62,8 @@ public MyServer( this.clusterSize = config.clusterUrls().size(); this.httpClient = HttpClient.newBuilder() - .executor(workersPool).build(); + .executor(workersPool) + .build(); } @Override @@ -79,29 +80,23 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti if (request.getURI().startsWith(RANGE_REQUEST)) { String paramStart = request.getParameter("start="); String paramEnd = request.getParameter("end="); - rangeRequest(session, paramStart, paramEnd); return; } - - if (!request.getURI().startsWith(getPathWithIdParam()) + if (!request.getURI().startsWith(ID_REQUEST) || !HttpUtils.SUPPORTED_METHODS.contains(request.getMethod())) { handleDefault(request, session); return; } - String paramId = request.getParameter(ID_PARAM); String fromStr = request.getParameter(FROM_PARAM); String ackStr = request.getParameter(ACK_PARAM); - int from = isNotParameterValid(fromStr) ? clusterSize : Integer.parseInt(fromStr); int ack = isNotParameterValid(ackStr) ? from / 2 + 1 : Integer.parseInt(ackStr); - if (ack == 0 || from > clusterSize || ack > from || paramId == null || paramId.isEmpty()) { sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); return; } - long processingStartTime = System.currentTimeMillis(); workersPool.execute(() -> { try { @@ -151,7 +146,7 @@ private HttpRequest createProxyRequest(Request request, String nodeUrl, String p var bodyPublisher = request.getBody() == null ? HttpRequest.BodyPublishers.noBody() : HttpRequest.BodyPublishers.ofByteArray(request.getBody()); - return HttpRequest.newBuilder(URI.create(nodeUrl + getPathWithIdParam() + params)) + return HttpRequest.newBuilder(URI.create(nodeUrl + ID_REQUEST + params)) .method(request.getMethodName(), bodyPublisher) .setHeader(HttpUtils.HTTP_TERMINATION_HEADER, "true") .build(); @@ -167,7 +162,7 @@ private Response processingResponse(HttpResponse response) { if (statusCode == null) { return new Response(Response.INTERNAL_ERROR, response.body()); } - Response newResponse = new Response(statusCode, response.body()); + var newResponse = new Response(statusCode, response.body()); long timestamp = response.headers() .firstValueAsLong(HttpUtils.HTTP_TIMESTAMP_HEADER) .orElse(0); @@ -189,7 +184,6 @@ private List> sendProxyRequests(Map nodeUrls = shards.getNodes(paramId, from); - if (nodeUrls.size() < from) { return new Response(HttpUtils.NOT_ENOUGH_REPLICAS, Response.EMPTY); } @@ -200,13 +194,11 @@ private Response handleProxyRequest(Request request, String paramId, int from, i } List> responses = sendProxyRequests(httpRequests, nodeUrls); - if (httpRequests.containsKey(selfUrl)) { responses.add( CompletableFuture.supplyAsync(() -> requestHandler.handle(request, paramId)) ); } - return getQuorumResult(request, from, ack, responses); } @@ -216,7 +208,6 @@ private Response getQuorumResult(Request request, int from, int ack, CompletableFuture result = new CompletableFuture<>(); AtomicInteger successResponseCount = new AtomicInteger(); AtomicInteger errorResponseCount = new AtomicInteger(); - for (var responseFuture : responses) { responseFuture.whenCompleteAsync((response, throwable) -> { if (throwable == null || (response != null && response.getStatus() < SERVER_ERROR)) { @@ -225,17 +216,14 @@ private Response getQuorumResult(Request request, int from, int ack, } else { errorResponseCount.incrementAndGet(); } - if (successResponseCount.get() >= ack) { result.complete(getResult(request, successResponses)); } - if (errorResponseCount.get() == from - ack + 1) { result.complete(new Response(HttpUtils.NOT_ENOUGH_REPLICAS, Response.EMPTY)); } }).exceptionally(e -> new Response(Response.INTERNAL_ERROR, Response.EMPTY)); } - try { return result.get(); } catch (InterruptedException e) { @@ -251,7 +239,6 @@ private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) AcceptorConfig acceptorConfig = new AcceptorConfig(); acceptorConfig.port = serviceConfig.selfPort(); acceptorConfig.reusePort = true; - serverConfig.acceptors = new AcceptorConfig[] {acceptorConfig}; serverConfig.closeSessions = true; return serverConfig; @@ -272,10 +259,6 @@ private void sortResponses(List successResponses) { })); } - private static String getPathWithIdParam() { - return V0_PATH + "?" + ID_PARAM; - } - private void rangeRequest(HttpSession session, String startParam, String endParam) { if (isNotParameterValid(startParam)) { sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); From 1c6a57e8173957a350e055bd80667ee77439e16e Mon Sep 17 00:00:00 2001 From: llav3ji2019 Date: Thu, 25 Apr 2024 17:39:10 +0300 Subject: [PATCH 31/31] fix code style --- .../vk/itmo/test/pavelemelyanov/MyServer.java | 51 ++++--------------- .../pavelemelyanov/ServerConfiguration.java | 21 ++++++++ 2 files changed, 30 insertions(+), 42 deletions(-) create mode 100644 src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerConfiguration.java diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java index 5df328f10..39b356a2e 100644 --- a/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/MyServer.java @@ -1,12 +1,9 @@ package ru.vk.itmo.test.pavelemelyanov; -import one.nio.http.HttpException; import one.nio.http.HttpServer; -import one.nio.http.HttpServerConfig; import one.nio.http.HttpSession; import one.nio.http.Request; import one.nio.http.Response; -import one.nio.server.AcceptorConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.vk.itmo.ServiceConfig; @@ -49,21 +46,15 @@ public class MyServer extends HttpServer { private final String selfUrl; private final int clusterSize; - public MyServer( - ServiceConfig config, - Dao> dao, - ExecutorServiceWrapper worker, - ConsistentHashing shards) throws IOException { - super(createServerConfig(config)); + public MyServer(ServiceConfig config, Dao> dao, + ExecutorServiceWrapper worker, ConsistentHashing shards) throws IOException { + super(ServerConfiguration.createServerConfig(config)); this.selfUrl = config.selfUrl(); this.shards = shards; this.requestHandler = new RequestHandler(dao); this.workersPool = worker.getExecutorService(); this.clusterSize = config.clusterUrls().size(); - - this.httpClient = HttpClient.newBuilder() - .executor(workersPool) - .build(); + this.httpClient = HttpClient.newBuilder().executor(workersPool).build(); } @Override @@ -91,8 +82,8 @@ public void handleRequest(Request request, HttpSession session) throws IOExcepti String paramId = request.getParameter(ID_PARAM); String fromStr = request.getParameter(FROM_PARAM); String ackStr = request.getParameter(ACK_PARAM); - int from = isNotParameterValid(fromStr) ? clusterSize : Integer.parseInt(fromStr); - int ack = isNotParameterValid(ackStr) ? from / 2 + 1 : Integer.parseInt(ackStr); + int from = fromStr == null || fromStr.isBlank() ? clusterSize : Integer.parseInt(fromStr); + int ack = ackStr == null || ackStr.isBlank() ? from / 2 + 1 : Integer.parseInt(ackStr); if (ack == 0 || from > clusterSize || ack > from || paramId == null || paramId.isEmpty()) { sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); return; @@ -124,10 +115,6 @@ private void processingRequest(Request request, HttpSession session, long proces } sendResponse(session, requestHandler.handle(request, paramId)); } catch (Exception e) { - if (e.getClass() == HttpException.class) { - session.sendResponse(new Response(Response.BAD_REQUEST, Response.EMPTY)); - return; - } LOG.error("Exception during handleRequest: ", e); session.sendResponse(new Response(Response.INTERNAL_ERROR, Response.EMPTY)); } @@ -163,9 +150,7 @@ private Response processingResponse(HttpResponse response) { return new Response(Response.INTERNAL_ERROR, response.body()); } var newResponse = new Response(statusCode, response.body()); - long timestamp = response.headers() - .firstValueAsLong(HttpUtils.HTTP_TIMESTAMP_HEADER) - .orElse(0); + long timestamp = response.headers().firstValueAsLong(HttpUtils.HTTP_TIMESTAMP_HEADER).orElse(0); newResponse.addHeader(HttpUtils.NIO_TIMESTAMP_HEADER + timestamp); return newResponse; } @@ -187,17 +172,13 @@ private Response handleProxyRequest(Request request, String paramId, int from, i if (nodeUrls.size() < from) { return new Response(HttpUtils.NOT_ENOUGH_REPLICAS, Response.EMPTY); } - HashMap httpRequests = new HashMap<>(nodeUrls.size()); for (var nodeUrl : nodeUrls) { httpRequests.put(nodeUrl, createProxyRequest(request, nodeUrl, paramId)); } - List> responses = sendProxyRequests(httpRequests, nodeUrls); if (httpRequests.containsKey(selfUrl)) { - responses.add( - CompletableFuture.supplyAsync(() -> requestHandler.handle(request, paramId)) - ); + responses.add(CompletableFuture.supplyAsync(() -> requestHandler.handle(request, paramId))); } return getQuorumResult(request, from, ack, responses); } @@ -234,16 +215,6 @@ private Response getQuorumResult(Request request, int from, int ack, } } - private static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) { - HttpServerConfig serverConfig = new HttpServerConfig(); - AcceptorConfig acceptorConfig = new AcceptorConfig(); - acceptorConfig.port = serviceConfig.selfPort(); - acceptorConfig.reusePort = true; - serverConfig.acceptors = new AcceptorConfig[] {acceptorConfig}; - serverConfig.closeSessions = true; - return serverConfig; - } - private Response getResult(Request request, List successResponses) { if (request.getMethod() == Request.METHOD_GET) { sortResponses(successResponses); @@ -260,7 +231,7 @@ private void sortResponses(List successResponses) { } private void rangeRequest(HttpSession session, String startParam, String endParam) { - if (isNotParameterValid(startParam)) { + if (startParam == null || startParam.isBlank()) { sendResponse(session, new Response(Response.BAD_REQUEST, Response.EMPTY)); return; } @@ -275,8 +246,4 @@ private void rangeRequest(HttpSession session, String startParam, String endPara } }); } - - private static boolean isNotParameterValid(String param) { - return param == null || param.isBlank(); - } } diff --git a/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerConfiguration.java b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerConfiguration.java new file mode 100644 index 000000000..02dbb6996 --- /dev/null +++ b/src/main/java/ru/vk/itmo/test/pavelemelyanov/ServerConfiguration.java @@ -0,0 +1,21 @@ +package ru.vk.itmo.test.pavelemelyanov; + +import one.nio.http.HttpServerConfig; +import one.nio.server.AcceptorConfig; +import ru.vk.itmo.ServiceConfig; + +public final class ServerConfiguration { + public static HttpServerConfig createServerConfig(ServiceConfig serviceConfig) { + HttpServerConfig serverConfig = new HttpServerConfig(); + AcceptorConfig acceptorConfig = new AcceptorConfig(); + acceptorConfig.port = serviceConfig.selfPort(); + acceptorConfig.reusePort = true; + serverConfig.acceptors = new AcceptorConfig[] {acceptorConfig}; + serverConfig.closeSessions = true; + return serverConfig; + } + + private ServerConfiguration() { + + } +}
Produced by async-profiler