From 06574eaee9ab8dfb101fdb49c15bae7811f24c66 Mon Sep 17 00:00:00 2001 From: Jonathan Louie Date: Wed, 6 Sep 2023 20:35:12 -0700 Subject: [PATCH 01/81] Add Jedis and Lettuce benchmarks --- java/.gradle/8.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../8.3/dependencies-accessors/gc.properties | 0 .../8.3/executionHistory/executionHistory.bin | Bin 0 -> 78284 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes java/.gradle/8.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes java/.gradle/8.3/fileHashes/fileHashes.bin | Bin 0 -> 20697 bytes java/.gradle/8.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../8.3/fileHashes/resourceHashesCache.bin | Bin 0 -> 18871 bytes java/.gradle/8.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../buildOutputCleanup/outputFiles.bin | Bin 0 -> 19613 bytes java/.gradle/file-system.probe | Bin 0 -> 8 bytes java/.gradle/vcs-1/gc.properties | 0 java/README.md | 5 + java/benchmarks/build.gradle | 37 +++ .../javabushka/client/jedis/JedisClient.class | Bin 0 -> 1354 bytes .../client/lettuce/LettuceClient.class | Bin 0 -> 1706 bytes .../client/Benchmarking$Operation.class | Bin 0 -> 250 bytes .../test/javabushka/client/Benchmarking.class | Bin 0 -> 5246 bytes .../javabushka/client/LatencyResults.class | Bin 0 -> 581 bytes .../client/jedis/JedisClientIT.class | Bin 0 -> 3456 bytes .../client/lettuce/LettuceClientIT.class | Bin 0 -> 2526 bytes java/benchmarks/build/libs/benchmarks.jar | Bin 0 -> 2423 bytes ...javabushka.client.jedis.JedisClientIT.html | 142 ++++++++++ ...bushka.client.lettuce.LettuceClientIT.html | 115 ++++++++ .../reports/tests/test/css/base-style.css | 179 +++++++++++++ .../build/reports/tests/test/css/style.css | 84 ++++++ .../build/reports/tests/test/index.html | 153 +++++++++++ .../build/reports/tests/test/js/report.js | 194 ++++++++++++++ .../packages/javabushka.client.jedis.html | 103 ++++++++ .../packages/javabushka.client.lettuce.html | 103 ++++++++ ...-javabushka.client.jedis.JedisClientIT.xml | 23 ++ ...abushka.client.lettuce.LettuceClientIT.xml | 17 ++ .../build/test-results/test/binary/output.bin | Bin 0 -> 990 bytes .../test-results/test/binary/output.bin.idx | Bin 0 -> 104 bytes .../test-results/test/binary/results.bin | Bin 0 -> 466 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 38419 bytes .../stash-dir/JedisClientIT.class.uniqueId0 | Bin 0 -> 3464 bytes .../previous-compilation-data.bin | Bin 0 -> 39190 bytes java/benchmarks/build/tmp/jar/MANIFEST.MF | 2 + .../javabushka/client/jedis/JedisClient.java | 36 +++ .../client/lettuce/LettuceClient.java | 34 +++ .../java/javabushka/client/Benchmarking.java | 68 +++++ .../javabushka/client/LatencyResults.java | 24 ++ .../client/jedis/JedisClientIT.java | 66 +++++ .../client/lettuce/LettuceClientIT.java | 51 ++++ java/changes.diff | 210 +++++++++++++++ java/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 63721 bytes java/gradle/wrapper/gradle-wrapper.properties | 7 + java/gradlew | 249 ++++++++++++++++++ java/gradlew.bat | 92 +++++++ java/lib/build.gradle | 34 +++ .../java/main/javabushka/Library.class | Bin 0 -> 352 bytes .../java/test/javabushka/LibraryTest.class | Bin 0 -> 681 bytes java/lib/build/libs/lib.jar | Bin 0 -> 723 bytes .../test/classes/javabushka.LibraryTest.html | 96 +++++++ .../reports/tests/test/css/base-style.css | 179 +++++++++++++ .../build/reports/tests/test/css/style.css | 84 ++++++ java/lib/build/reports/tests/test/index.html | 133 ++++++++++ .../lib/build/reports/tests/test/js/report.js | 194 ++++++++++++++ .../tests/test/packages/javabushka.html | 103 ++++++++ .../test/TEST-javabushka.LibraryTest.xml | 7 + .../build/test-results/test/binary/output.bin | 0 .../test-results/test/binary/output.bin.idx | Bin 0 -> 1 bytes .../test-results/test/binary/results.bin | Bin 0 -> 128 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 2859 bytes .../previous-compilation-data.bin | Bin 0 -> 3207 bytes java/lib/build/tmp/jar/MANIFEST.MF | 2 + .../lib/src/main/java/javabushka/Library.java | 10 + .../src/test/java/javabushka/LibraryTest.java | 14 + java/settings.gradle | 15 ++ 73 files changed, 2867 insertions(+) create mode 100644 java/.gradle/8.3/checksums/checksums.lock create mode 100644 java/.gradle/8.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 java/.gradle/8.3/dependencies-accessors/gc.properties create mode 100644 java/.gradle/8.3/executionHistory/executionHistory.bin create mode 100644 java/.gradle/8.3/executionHistory/executionHistory.lock create mode 100644 java/.gradle/8.3/fileChanges/last-build.bin create mode 100644 java/.gradle/8.3/fileHashes/fileHashes.bin create mode 100644 java/.gradle/8.3/fileHashes/fileHashes.lock create mode 100644 java/.gradle/8.3/fileHashes/resourceHashesCache.bin create mode 100644 java/.gradle/8.3/gc.properties create mode 100644 java/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 java/.gradle/buildOutputCleanup/cache.properties create mode 100644 java/.gradle/buildOutputCleanup/outputFiles.bin create mode 100644 java/.gradle/file-system.probe create mode 100644 java/.gradle/vcs-1/gc.properties create mode 100644 java/README.md create mode 100644 java/benchmarks/build.gradle create mode 100644 java/benchmarks/build/classes/java/main/javabushka/client/jedis/JedisClient.class create mode 100644 java/benchmarks/build/classes/java/main/javabushka/client/lettuce/LettuceClient.class create mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking$Operation.class create mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking.class create mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/LatencyResults.class create mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/jedis/JedisClientIT.class create mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/lettuce/LettuceClientIT.class create mode 100644 java/benchmarks/build/libs/benchmarks.jar create mode 100644 java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html create mode 100644 java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html create mode 100644 java/benchmarks/build/reports/tests/test/css/base-style.css create mode 100644 java/benchmarks/build/reports/tests/test/css/style.css create mode 100644 java/benchmarks/build/reports/tests/test/index.html create mode 100644 java/benchmarks/build/reports/tests/test/js/report.js create mode 100644 java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html create mode 100644 java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html create mode 100644 java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml create mode 100644 java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml create mode 100644 java/benchmarks/build/test-results/test/binary/output.bin create mode 100644 java/benchmarks/build/test-results/test/binary/output.bin.idx create mode 100644 java/benchmarks/build/test-results/test/binary/results.bin create mode 100644 java/benchmarks/build/tmp/compileJava/previous-compilation-data.bin create mode 100644 java/benchmarks/build/tmp/compileTestJava/compileTransaction/stash-dir/JedisClientIT.class.uniqueId0 create mode 100644 java/benchmarks/build/tmp/compileTestJava/previous-compilation-data.bin create mode 100644 java/benchmarks/build/tmp/jar/MANIFEST.MF create mode 100644 java/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java create mode 100644 java/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java create mode 100644 java/benchmarks/src/test/java/javabushka/client/Benchmarking.java create mode 100644 java/benchmarks/src/test/java/javabushka/client/LatencyResults.java create mode 100644 java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java create mode 100644 java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java create mode 100644 java/changes.diff create mode 100644 java/gradle/wrapper/gradle-wrapper.jar create mode 100644 java/gradle/wrapper/gradle-wrapper.properties create mode 100755 java/gradlew create mode 100644 java/gradlew.bat create mode 100644 java/lib/build.gradle create mode 100644 java/lib/build/classes/java/main/javabushka/Library.class create mode 100644 java/lib/build/classes/java/test/javabushka/LibraryTest.class create mode 100644 java/lib/build/libs/lib.jar create mode 100644 java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html create mode 100644 java/lib/build/reports/tests/test/css/base-style.css create mode 100644 java/lib/build/reports/tests/test/css/style.css create mode 100644 java/lib/build/reports/tests/test/index.html create mode 100644 java/lib/build/reports/tests/test/js/report.js create mode 100644 java/lib/build/reports/tests/test/packages/javabushka.html create mode 100644 java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml create mode 100644 java/lib/build/test-results/test/binary/output.bin create mode 100644 java/lib/build/test-results/test/binary/output.bin.idx create mode 100644 java/lib/build/test-results/test/binary/results.bin create mode 100644 java/lib/build/tmp/compileJava/previous-compilation-data.bin create mode 100644 java/lib/build/tmp/compileTestJava/previous-compilation-data.bin create mode 100644 java/lib/build/tmp/jar/MANIFEST.MF create mode 100644 java/lib/src/main/java/javabushka/Library.java create mode 100644 java/lib/src/test/java/javabushka/LibraryTest.java create mode 100644 java/settings.gradle diff --git a/java/.gradle/8.3/checksums/checksums.lock b/java/.gradle/8.3/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..4d7dc379235fd25b65af61a4fe1e8e36ae8f02b3 GIT binary patch literal 17 ScmZSf^x4jQ#;>`C0SW*q)dOq* literal 0 HcmV?d00001 diff --git a/java/.gradle/8.3/dependencies-accessors/dependencies-accessors.lock b/java/.gradle/8.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..2c220632c8e62ceb41f0e70ad45a9a8d910fc5d5 GIT binary patch literal 17 TcmZQpJA33)_2qtV1}FdkJhueZ literal 0 HcmV?d00001 diff --git a/java/.gradle/8.3/dependencies-accessors/gc.properties b/java/.gradle/8.3/dependencies-accessors/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/java/.gradle/8.3/executionHistory/executionHistory.bin b/java/.gradle/8.3/executionHistory/executionHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..d8e78a38daa55f7ccefbd7712e43049b34e65dc0 GIT binary patch literal 78284 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 literal 0 HcmV?d00001 diff --git a/java/.gradle/8.3/executionHistory/executionHistory.lock b/java/.gradle/8.3/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..9eb5ac82f594855606c8aa33a2d65181d1b411f1 GIT binary patch literal 17 UcmZS1pKZR}<@)zo3=qHr05?wrqyPW_ literal 0 HcmV?d00001 diff --git a/java/.gradle/8.3/fileChanges/last-build.bin b/java/.gradle/8.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/java/.gradle/8.3/fileHashes/fileHashes.bin b/java/.gradle/8.3/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..33e5f52cbc87c44c4cecea32ec4acb2bbd8f44e9 GIT binary patch literal 20697 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 Lu7Ga(LcH+{FFO9s literal 0 HcmV?d00001 diff --git a/java/.gradle/8.3/gc.properties b/java/.gradle/8.3/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/java/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/java/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..a70269903cac8ed3d78ad1a50897a704a1ba452c GIT binary patch literal 17 TcmZQ(H`P3B+o1WG0Ro%>BDe!c literal 0 HcmV?d00001 diff --git a/java/.gradle/buildOutputCleanup/cache.properties b/java/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000000..8e4ae79e89 --- /dev/null +++ b/java/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Wed Sep 06 20:33:36 PDT 2023 +gradle.version=8.3 diff --git a/java/.gradle/buildOutputCleanup/outputFiles.bin b/java/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..b453ac1dbefb5ef369d454af308cd29da6de174e GIT binary patch literal 19613 zcmeI&eM}Q~7{Kv!ptz}36k<{4GN+>H$N(XuDhLC%-d%$bf-j9u%gfl%xv{|z!6^w; zt1v_<%xFy%@Lh=7NtFoWk8NceC`*-}BTg_YWa1S;*6ba{1hI z4|m^&zaX09@@!e{{29oz4}_Z69{%EJY?Pt|F3W1n)?VuQ{P=0jZmTg%kbzDIkQt6xB`bL`-(1x4~tVE-ia)>eJruaU+vu>UxE zd#2?p!7Fkd?Ds?e?s=iaQq6V3e1*%)!rqmg>plka-so3thdhg057?NCCFos2fp&ZC zHU)E4D*E+)TW<761^ZzBFZ4cHMsjA3RR#N-(H;IVRbBTr*TJjN-O732t}Vr8=ISVy z|1!O>N7s0Uxk~SH`?$-mbyrq^KSUoFne924o^%2BB%)8PaR0rbHNBWQ{~@}3QG8{J zbz(kqK}4TXb0t9kI6)8d3iO$3ZQ4nX6>^wIcFdm~;=Ns7Yh^C3!V`*!x5^^|Q$k_> zJ@g<&PX46)qJuEM1wFVj>{i*@6*1s1p}*>HN-!OJu#vf{&E@5WT(66dHpBkC=%Ghu z5BQJY?#`UIqA&INCfhgQMk&lI(W6>yOR~Pa`zLep4mw}3qh$Gs_K%sX_M?kUf}w5v zDGPW4dhELXiyISz;rCY+i5^$5I>{ls<;CXtW$5v}MnlKk$Iw~GM^BvH)Lb&>%1YRu zjlTR$(fZi5=4-IW1AS!{H}>wsY54gTqHFx3iszfPaG%0G^fltW-D$?&MX>)z^tIC* zc}>Z+)0vBh(6t#;%wD$ALGbnHNvXOz<$=On=IR{u)Jh;s~XX_9{yHsR_yL)E}lcj?;JPwHakb}RDcRl0V+TR zr~nn90#twsPys4H1*iZOpaN8Y3Qz$mKn17(6`%rCfC^9nDnJFO02QDDRDcRl0V+TR zr~nn90;9FSLg#}$>--w}=k+l|Z?b=h6Go-{cTYO9%}?tp>7L<;^izIXS4lTZMf$U( cGb5A#+vbtokMydMiL~Kx_6+AL>C8X!H^4SMP5=M^ literal 0 HcmV?d00001 diff --git a/java/.gradle/file-system.probe b/java/.gradle/file-system.probe new file mode 100644 index 0000000000000000000000000000000000000000..2578d60fb58d9bf5ae61816d3137ae37f5aa6b26 GIT binary patch literal 8 PcmZQzVC>4>e5Dfr2)+Xe literal 0 HcmV?d00001 diff --git a/java/.gradle/vcs-1/gc.properties b/java/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/java/README.md b/java/README.md new file mode 100644 index 0000000000..5666e124db --- /dev/null +++ b/java/README.md @@ -0,0 +1,5 @@ +TODO: +-[] create benchmarks folder +-[] add code for jedis test +-[] add gradle task to run jedis tests +-[] \ No newline at end of file diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle new file mode 100644 index 0000000000..20a41422de --- /dev/null +++ b/java/benchmarks/build.gradle @@ -0,0 +1,37 @@ +plugins { + // Apply the java-library plugin for API and implementation separation. + id 'java-library' +} + +repositories { + // Use Maven Central for resolving dependencies. + mavenCentral() +} + +dependencies { + // Use JUnit test framework. + testImplementation 'junit:junit:4.13.2' + + // This dependency is exported to consumers, that is to say found on their compile classpath. + api 'org.apache.commons:commons-math3:3.6.1' + + // This dependency is used internally, and not exposed to consumers on their own compile classpath. + implementation 'com.google.guava:guava:32.1.1-jre' + implementation 'redis.clients:jedis:4.4.3' + implementation 'io.lettuce:lettuce-core:6.2.6.RELEASE' +} + +// Apply a specific Java toolchain to ease working on different environments. +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +tasks.withType(Test) { + testLogging { + exceptionFormat "full" + events "started", "skipped", "passed", "failed" + showStandardStreams true + } +} diff --git a/java/benchmarks/build/classes/java/main/javabushka/client/jedis/JedisClient.class b/java/benchmarks/build/classes/java/main/javabushka/client/jedis/JedisClient.class new file mode 100644 index 0000000000000000000000000000000000000000..e0af5d106f08fedece943280f1d632c44c98dbe5 GIT binary patch literal 1354 zcma)+ZBNrs6vzK}8*~rd*d|OKgz+G-4P=T>n2B#lNHj$akQsf~jmiq8HEl=2ck+cM z3W+9u0Kbag!FbMHvn?A{U+lEEz2|>^=k$N~^Y^zO0JiZYi3p+!Vk$;3Dv&+V&-JRM z+sD;cjT58k3yeNBZPR}y5G|GK3gQB@u5n~~)uv?{w(nI>7kV&l-k% zs5dNnlGpgF)pgh8b?`9ew@go9Sr+@pcxwVV&p9(Rv*GIQ#h&4}oFnO+cLJHFW7}k@ zLua48LL48+E&|2yFTj2xO~s=$)3KRwXu1Nc|2LXCft(r_0wd?T)uwin2hwJ{Cik9| z2JX0IgNtB+>=mI?BIrj3qo~k59TSQrT2<-F??x(D5TEHLf-*&Z4J1&ZsCG7B4ePWL zxPuLfoV-p~-WQ2|<0^@PKSHAd6SNAb*L;PXl~~KE8ODkIWt9Z&M8(TY~e6 zYHmgcBQuskU(+xw+ZgJ$v@-?)~-q`wsvQ@iLAcL?lFI^rDYp=twxb=&o})>hXyEg=}bsnuMadSoNq8h$$#Ld_Cb zvLRE@KRo!d3Y$_J3xgU11t&mF3o_C$7^t3#sfYey_#veI&YD685`Wv@75b$ z)&4-Gjg^g>rFspA`nudvuPeG`yFG_?%T9qRTC}SKK3Fm={Z-?nqB{p_#Ux9*#AoqP zbqxL;7^7a@a2fnW|6@cbKr(3616wpSjaOK?K;L$5*+WwLSU=-L+QykwJ5|jFvAk4< z04!XFz(ffOnTySFq8TdN4M)@W3_siOWH0lGG#^8BmjMxa=whH1ypP43rVtF9wC}+d z-E_nVeY6(HqR^YsyEpe0?2|aMO)LKmD)U2HW&Z$n@QA(`9ygue5+FY}n@daI5Ie_U zF83LOUvTXl<9s`Qfk}pQ%(alyh>}MNF{Fv+FcBXKMVW0z$>RxObBg=!Xt4>QhxTUbpHrN)>?#Fil0931y#ZX8&9ec<~1v Cte-Ie literal 0 HcmV?d00001 diff --git a/java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking$Operation.class b/java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking$Operation.class new file mode 100644 index 0000000000000000000000000000000000000000..f4611d8d91a50da0c7a272635794db0760152ae9 GIT binary patch literal 250 zcmaKnF%E)25JmrhvVv&z0#+8<$O&vTG1^FBV!x0Hptu-z@o*L%z(W}q3u9$7e~Lfz z-+#XD4**LH1suZcByTclbbgjmS{AHKv|^R!7g?VRl}+O-*U}V~66g>{tvf2E%AzI+H5Or1p0)@|7b$EQ;O?#DYa%z@V_h` g!DiYP09mRoJiECNb~@<6|7d{FYG9p~38;Lc0k?bSc@73>r~WAu%hP=t!B@-p3yABObhsuW(ZN#D`-&Bi1h`~ z^_c0TfHI+_a{8WOIvnlx#v+Gf(%~i*&Dcm+w4osxu_s<9S+V+q!L|buO^N4nY*BF; zE+>vz<3=ZhE(!B9RJ2H#0}0(oNxhhg?JNfPlR6W=B--U&-Zd@tu2j*6c4j$iWps`B ztc<#vHoA_qnb>nM7KT8Fia2%(EYQZsQo>&h_UIl3W-`(KYJhGPeUN z_Sw13-jK1v@Z*4rgSeImxhZgpZQZ#NAcyDR58*kuPQf7+*F$5r=egZsrcxvcGs6xn z&*sL)*mTYU?dM2AfqgH4ZbIiQ+PP1t7y@xn63#*b8@+bt&2bHS_=}AbMN-9x?C`P_ zqZ^QI7Q$hSDoDv@WF32G&%t&cp*Uh%I}B6BxFo;wA-kGgdl_UESSoUu;N(0~Za^$= zVid@l8FtuWZxE7>V)X+Go+}WM^9sqbN3%$mlh^3kT*}IZumCrzxCze_2$5bAkc#C6LS15D&Fdhx6F=*5p>4hq2f+=ti_!hhT@F9TjG9em~DC@*e0Xo zPd4rQRJ_4u|y~bXwjK?Ye;N{O(x5qxsS$4G!wVW`lq+6YZCj-V@T?pCa_$+L7P8}9b*zO2zIP4B< zrHKW7mX;Xp<)-9hp{&nHrZp=kqv`*ju_?ObwxZozM0GwV2!uUBxJ@pw{pnhqKUvmq zCF?GclX$!2CD2mTqFVrkb?EkvJC%^`Dmu4Fe9k6t0c)yF19OgTb&Y$A+K%eHX6gr6 zP-gy==S6X@Gn9-&-2!VaY>}*#(#8gdv>Gop*YMD{)a#*}B8Mk<8j~zeYIACPl1+FQdSZ%a4H9fo_?Zar)D>XIkeMwL5E)5=;IZM;{vM$DmXMG)T);RpDkf*(l| z{;@!fy`|as80iUfRF~&GGO=?S@6_ZefGgkbb<P7(aiWRsbO5KlN=X1IsCvGori*vdGmk>W6PXmMiAHWBB z{}A7NxQC|$?teU72z;25X5IzwB@HJbq`-%Jd6mPU>PL809R=KnkMgYyQ=qCnxq)XY z`3p}&sY1o*G!|7PX0QZYMlPMVq;lRgPSLtt<12Kal=m&CvHZYEtnBr-u3B*?YNv70 z)4_PjrZYY zRd|ItgWJGPd6g@B!*NIWCa>_#uJCPM;oDu|JH5hpIkVqm%ko{if-3_tR(C7vaV4*9 z{C_|@l1#kpT&I>s@MU(K{EgtN_!>lINb;)deJ^d4aIB)Po;gS-t8mve-kWgPBHzHZ zo^q(L;gJR_@J$whq>2iBi%))*(YN{L!*}pq-UA$4i|_F%PRJhS+fVQawSI%&;ScuH vqxcgZwV(cqzvCaa&cE#IzwPVe_Vr15<#IRS>yd8L7Z~x>n)Tk3xaGoDJugfN1lAf`w%i ziF!Ob{G~cfl`T}hsn!q0@QQ`n9B$1g7+$lm&N8ep8no3+%Sev{frb5cr_*USdjgsB z@jwYIcXgmHrw@HKxs`pNkaBnINxvs2n%{FU6WwW&-01#i>zKsfjHeS%U1;7``Rn?C z=V6n=6kR!s5?_m|68lavnM^XdN;27?Ob4Rw4T_uedPbV&0NZ(maQ0#tjvZsksbyo7 zoSG4%>a3YDR$r(og)NFZFesLgK^Z1pvVbamE3~qPI##hw>=|+tZR*{n%oU3hNyYNg WNyP%QNyQR*tIfBjt%5f3|LiY%h-dcz literal 0 HcmV?d00001 diff --git a/java/benchmarks/build/classes/java/test/javabushka/client/jedis/JedisClientIT.class b/java/benchmarks/build/classes/java/test/javabushka/client/jedis/JedisClientIT.class new file mode 100644 index 0000000000000000000000000000000000000000..f6a062a108adf08ab2aae0eb09a527c036a23ce3 GIT binary patch literal 3456 zcmcInX?GJ<7=CVAnh=IIq%5svsZi)bX+RW&qLx;cKnmJ~BH+R_xlN~?%+#4lwYYDn zxZ}nrkKg?4ISM^^jz7TTPg0N1of*QU4agS{hsoXE=Y8JgzW41P|J?o^z!SKUL<~)F zG;3Ie7J<~PzMyAJ-706!PR+`qC(v@lung}>fu_Fx$v6@MJJg}6syj2MXNsmFEiW@G zONN^{rM_eSN)mB2t;QN?ajezQiZ+3r4075Et&C_b+LlG` z1$#mfN?^UfF4wNeoH6C-&f>WAX6#b8J7ZVPQnw?$s$+HcdQMgLDwvHLHlagc-3k%k z2N#og2wib(*02Rz=`!0XXJ)JPQRb-YN{22>>i(cWM1hTcz5#(#^PXc^<>8C{lS)&! zhKI3TpxLmdZGrWD{VR_q(Sx0F?9$MSzPbPfSPYOUt+F@clglb{1B%&h!uC;50(*EQ zFP#PHD4iLlb1xmzfK~(bX{N~|8ulxZO%;7kj@edG_s$#M3`ee~Tb`>ZKBnOS4$^ck zIi9Qb1vWI&aj^;F>W>K=7D!YU_bljURVHwR^z+9GX$U;2;VFy=#LD!E3?Tj^+p>k> zm7WW%sh1p;R&l1HJ9CUe&)IqD=$>I)%$`w<#qqR;V>m9bb!Emy1qHOS^m4jKFhjZm zqkY*1Ng5T2=n9=&^$as})N%C1oZ)&tgOeJvIK>zjb+cGCi9aFTs_9X~q0p1dq#BtR z@LCK-ec+siahxITd1jwi13lOvJPqtv2B=c%8Aj`bidGC0Dq4Ag{DTIn5$AijN`>W| zhDmitTFcT>;gYB2VqSVGm7mjaLFHu=qoL-PG(3+NICmv4Veh@HtGkK)le{Nmc8M3Y zEoWHrOtms4oq|4PawVO!8H!2WG1NRC zqE-lz^7zXHu&Yi{X8o$u;`m9XbgHzk^NzsUyr&oE#`XEo`p)G5ql`vTT_Sm?lSfbOAKS0%=;!DH~ct8{GKfg zDKqJcQQP)h&(Y_D_rPsy!IdOl!|QRpp(@^+0zG#>`{ob*ZEq$5#S<%4HAopa`t4JuY#4 z6Sh9V)v9AzpC5627d}4sKFY^DNG3kxYgm857Za+#;y1xD+c)6&@=J}0*REVBH z5@lL0a7WLKug9qADREEf=?J)Q%TddY9}sW;3C&GQ=vUgBe76L)Y@xPoZ2!6=+B$05 zQkcaY5lu?5asCVKarBHV*Iub3su675YA+09vT0Sk+_9=ofpWs@={>CN}Y{b#7alDRZA8s)H_>uIX z@$_)lz~F8EWq>6dUBZbaoKBzZ8n}&TBP(}fG{o2gyNNJJ#37_;OFQ;5PD6~^L2Soi z?8G4wKgd%f5&DBQ`u&*4%k*js4RL(>k!Yr3>N0XyW%L1>rjk-q&Rjy_CeEL~%Oyzc zBfgFxv9&-4F?hX0j1h8G8F2@LF}b)LW516PZc!NbI-p h4o4s1WBw0DpK|mCPpB^GOLj8XTUO(1e2eeV`7em~aLxb# literal 0 HcmV?d00001 diff --git a/java/benchmarks/build/classes/java/test/javabushka/client/lettuce/LettuceClientIT.class b/java/benchmarks/build/classes/java/test/javabushka/client/lettuce/LettuceClientIT.class new file mode 100644 index 0000000000000000000000000000000000000000..80e5e8ce5a991801fcebcf5cd8edc75dc592a836 GIT binary patch literal 2526 zcmb7G>r&fB6#mwLZ5(llxwM3q63WFk1gB|BnnEr>32|aV3obOh3$qx3kQhm3hCV7YXipv{2vg!#WXAH~m9tkw%@@pxi1;&)pM%~@s)r(crkd{|8rRUYFvRDp& z=l#K>nJxrHVjXh#H{LwtP+FY32E*hO7#yy=q$)BdORca?@~? zs9Qsi5_MEf+m-Wy+_0@Ch@XE=<86WT-r=1C-K@(rZZY!Jg-VwBdPl>%7!XL*Yyl&8 zT{@-8w67ZEb=7kWt2P}M%$&5U+k3jRONHU(ed*{PSuvVH+)iOg!}}N(7`U8;sG)#X zlU`Z(2xdrEU@ljRVH!1w_zGwh>z-j2XB|gBEE}%pGZ@t{h8$a@s+-liN&FS*)=iHd z9t5elXcZS?!0RwH^??f-#xX(K`%H{?26{gP^_wwFT1*@l0P|~UOtNB&s$v3nRmDCK zSpPr8isSu;bg9yOsNo}g%tot8OO;H%kcX?1H>W!nW-}Us>c9IMKEVUBWT6B`V*-7H z;k1SsJfxwk498*&V;XHupn2ZjlEy$$J9^bM0I*|N=YuIY}U_Tgc(w{5Vh z<1yKez31$2fgUv_4Ba$-lF!vWJH51hD|O2=_T-x38gwyhS+?i5H9gR~Q!DP&X<3|; zTec$!bTe`|yX8rTXIW3Wsx$1mQ_%K`M3h7;j8l(hoD}kX#2!?fF?{c*IWND#q=~d5m4h3%PMR)&1DTPLXgJ-(6X-apv zY}>o_{g`1CN!U5V%Hh6@s$X9ixV+jn+TaHu@6siKbtLI{4$O*Kb4c8R51V%0;J1%c2Y=^@)XsvU}2vf}G zGDtFRlWT%+hTw-UAHS1a^O5EEBkqd)RkD`CYlz>tNZ@g(1hnA^*IJ-}SqtgrDM> zf=>sST@6h2cLC_*47(Mf6 z#F&y8#dEx16sNJ5fzE_#DN0pcrYKXfYby3*+&jY5dV`D70wyD|Yk?19ut`IVC-koJ zbc!*4gikMGjQAM6fnLZ{m0YpofXC;wPv8rz@KD-}Xjnw*oFnpc8XhZI&FIjJQjrOBxnI#+4RoC3O)VHFz#gDzg3 zJ`fX}!7k8C&PgmTo*MGn|8juH|5!7P+ouwQD?3hkC-N^)I+fjVO2jl$rI6+CtLdQ-LkdE4jZ_ntprpMRgx=0LYamB2)SsTaHL z+7>#0bqV#kx=OQps&njTiC^1zPJh@YsWkJAqx~;QH<`UzJ7#w!-I|qkE%*BEnAphM z9m;(zERn|;Ch-Wjt(~#!xv5F)#T@tWxWcuIGGB+o9nm0fBoPFE+@o9D6}>Gl3tDWh!UW_U~?b6aYsiN?&b z^;gQ-cKRgl$(>=>q@R0Z+J{fGdN^a!JF*q$CvMc9!IGC0bZAOX<{5)0yDy}6>{>qU z*o5ERum6~K+_AF@Tf0ho&py@1X3r#q8l55=bpA3Q(vRhs;=mTkX(?H$W1v&A*k|pt zS5rQHy>{)x?Tr`Co!s`F-+Z5n^Fi6BRfQ{d@&(*1o7S?s{!Byv@$3TsW3_e)duL_t zw#uJqD*1ZO<@eX59{aojQL0Z zuZTM)tqC_2R1e{S&3N3;tOYAygOUV_*=te+lx2CXDr@&IDBK>(A!>OY{ND6 z{sfcy*(aASUEeV`(O~-TmV@VaRJ9fQ_050Gc33iP_K8fFmp+PaR}6Mq`KDh!<&&Y> zf4p(3Emv2&sYAo&pRL7b+&}E%ln^iM7dkM5Vb-TsW(B{u3p5U}e`wKox2b74;}5>t z;=fB6?2jk$*CqTs-0I@P@kB7*$iD3n(x|C* ztHk@uN`qhNPQQNUBgzEyyeWY-zhtGRWENxOv#(xP%8G&c%!`$QK@*QYFOY8JJk}e0 zJ5MN3BsP5q&-6y7Z8y4gb2mN>(urDoEul6uY0=D83whn{vq>brC^>e9$M=`NUB;r^ zMV;~w*8ku?R_mwkkYQ-EA$|VYxa{?%Y3JYXx36Qoas0A`3QG!$Xp2Ca$JZ^!YqPS# zmj7CI^K!JD^N*Q{lJ|<+95!B=Aeb0Y_GR0{u;^tAqvu7x?YyilcmLKlNyi?=tXsNg z-`rX!-ptdwSzTh2Yw3ylCzfqjSMJp@tvKD&Byx%8W8b^0rPtqC>&{gZ^?r3EajQmN zV%V`cO*(nTPb|wfzc2GQ*}OLjbG+78tNnj9-Gu;9g!9>tN8ZT@?BXbvS%&ruk2lSS8Vp@ zM#Y<(bi2b|-B|a#{9EU>Rz>rlydP?n{BEkwNQ{noXj;$H`f}YeM<>58#cda6rhPjZ z`NreT0q*A8KD{??JWE(}vC8wyRD)j^n*yh3EeGLxr`{XZPw~(QrMF6 zcP7AHh_Ng4(dmS~HB(x78^1&fFZpCA$Dz9Af!+VU^*TZS+Rm^(+u!r@bl;0^o-Y@R ze*dU_^(=UijQ^^zW1M2{OI&K1=DmHeP-5~FB%YaOz8Wf*KPz?$JAdL%wOeBra z`V^mjP<;vkApMttOicZ-+7;a#^x73>(vn7AMttUAscX@V1{now#efPT2mm?JmIa&9 nkYWkl6!c;VX3mnvQaq+$6jA}+tibjIu!RMLMnG5Tvx9g52pE#0 literal 0 HcmV?d00001 diff --git a/java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html b/java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html new file mode 100644 index 0000000000..d72630017f --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html @@ -0,0 +1,142 @@ + + + + + +Test results - Class javabushka.client.jedis.JedisClientIT + + + + + +
+

Class javabushka.client.jedis.JedisClientIT

+
+
+ + + + + +
+
+ + + + + + + +
+
+
4
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
14.703s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
someLibraryMethodReturnsTrue0.002spassed
testResourceInfo0.001spassed
testResourceInfoBySection0.142spassed
testResourceSetGet14.558spassed
+
+
+

Standard output

+ +
Avg. time in ms per SET: 0.07751362659
+SET p50 latency in ms: 0.0456
+SET p90 latency in ms: 0.070699
+SET p99 latency in ms: 0.127282
+SET std dev in ms: 0.665195671610232
+Avg. time in ms per GET: 0.06613250047
+GET p50 latency in ms: 0.040224
+GET p90 latency in ms: 0.058583
+GET p99 latency in ms: 0.10689
+GET std dev in ms: 0.6044885619384261
+
+
+
+
+

Standard error

+ +
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
+SLF4J: Defaulting to no-operation (NOP) logger implementation
+SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
+
+
+
+
+ +
+ + diff --git a/java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html b/java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html new file mode 100644 index 0000000000..2c4bf39157 --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html @@ -0,0 +1,115 @@ + + + + + +Test results - Class javabushka.client.lettuce.LettuceClientIT + + + + + +
+

Class javabushka.client.lettuce.LettuceClientIT

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
19.114s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
testResourceSetGet19.114spassed
+
+
+

Standard output

+ +
Avg. time in ms per SET: 0.09530544199
+SET p50 latency in ms: 0.055105
+SET p90 latency in ms: 0.089829
+SET p99 latency in ms: 0.184804
+SET std dev in ms: 0.7259927555734456
+Avg. time in ms per GET: 0.08870054313
+GET p50 latency in ms: 0.052371
+GET p90 latency in ms: 0.081338
+GET p99 latency in ms: 0.145727
+GET std dev in ms: 0.6983375291436595
+
+
+
+
+ +
+ + diff --git a/java/benchmarks/build/reports/tests/test/css/base-style.css b/java/benchmarks/build/reports/tests/test/css/base-style.css new file mode 100644 index 0000000000..4afa73e3dd --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/java/benchmarks/build/reports/tests/test/css/style.css b/java/benchmarks/build/reports/tests/test/css/style.css new file mode 100644 index 0000000000..3dc4913e7a --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/java/benchmarks/build/reports/tests/test/index.html b/java/benchmarks/build/reports/tests/test/index.html new file mode 100644 index 0000000000..f03c715ec6 --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/index.html @@ -0,0 +1,153 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
5
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
33.817s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Packages

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageTestsFailuresIgnoredDurationSuccess rate
+javabushka.client.jedis +40014.703s100%
+javabushka.client.lettuce +10019.114s100%
+
+
+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+javabushka.client.jedis.JedisClientIT +40014.703s100%
+javabushka.client.lettuce.LettuceClientIT +10019.114s100%
+
+
+ +
+ + diff --git a/java/benchmarks/build/reports/tests/test/js/report.js b/java/benchmarks/build/reports/tests/test/js/report.js new file mode 100644 index 0000000000..83bab4a19f --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html b/java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html new file mode 100644 index 0000000000..6fe5059ebd --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package javabushka.client.jedis + + + + + +
+

Package javabushka.client.jedis

+ +
+ + + + + +
+
+ + + + + + + +
+
+
4
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
14.703s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+JedisClientIT +40014.703s100%
+
+
+ +
+ + diff --git a/java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html b/java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html new file mode 100644 index 0000000000..72ed2f2290 --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package javabushka.client.lettuce + + + + + +
+

Package javabushka.client.lettuce

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
19.114s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+LettuceClientIT +10019.114s100%
+
+
+ +
+ + diff --git a/java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml b/java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml new file mode 100644 index 0000000000..f76c23081b --- /dev/null +++ b/java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml @@ -0,0 +1,23 @@ + + + + + + + + + + diff --git a/java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml b/java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml new file mode 100644 index 0000000000..15ab216e63 --- /dev/null +++ b/java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml @@ -0,0 +1,17 @@ + + + + + + + diff --git a/java/benchmarks/build/test-results/test/binary/output.bin b/java/benchmarks/build/test-results/test/binary/output.bin new file mode 100644 index 0000000000000000000000000000000000000000..76f5d5a3a126375fb8bd3081dabee2c02a09ac91 GIT binary patch literal 990 zcmZ{i+iKfD5QbwHZ16+0LrT;1qVk?*555Q_v?-L(7StCI)>>B432774x9_g3;DXn; z;-7E7`A1jt*?s!-D86stF)J&ZgKME`vmCZnHVkmx_C+#OJMkwe>#j;tm$`EL)E0&9 zAIc`T{dKasn$PYg$QQfIo-0>2MF2JJ=eD!GA88x7{qghHC(jO}5MZ{pO~AEHAfyu^ zwHEfyb({72a5zkFdyDn9&FzrvU0uCDw}4&S!|u6vdk@d8^ScbmYBqoK@&2Vqz?HRy zvVnR4?*r-A-y0waQ3@%SOriFEFiBUl4>A~ute zZE{I!aY;~Waeir0a%ymDiF;}Z79oaJQyC$85}g^CmSMUmD>WsvSkDVY!dyd~DzK@W z@2ayf&O&yHXI@&qQ)O^!a!F=>9&QLVZ7(fn{!Ser~Ey wW>QgNQKfHcNk)E3P-;nOQC@LKQE4h(Nd_jUDN`9(C!)I?Lx2GqdScTU0BB*aK>z>% literal 0 HcmV?d00001 diff --git a/java/benchmarks/build/tmp/compileJava/previous-compilation-data.bin b/java/benchmarks/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..6e1548148fc2e70edbaa1e9bd2596ac50d9e49cb GIT binary patch literal 38419 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 literal 0 HcmV?d00001 diff --git a/java/benchmarks/build/tmp/compileTestJava/compileTransaction/stash-dir/JedisClientIT.class.uniqueId0 b/java/benchmarks/build/tmp/compileTestJava/compileTransaction/stash-dir/JedisClientIT.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..5480044a03743ee4719cdf7fc8c9b963a7cfe602 GIT binary patch literal 3464 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 connection; + + public void connectToRedis() { + client = RedisClient.create("redis://localhost:6379"); + connection = client.connect(); + lettuceSync = connection.sync(); + } + + public void set(String key, String value) { + lettuceSync.set(key, value); + } + + public String get(String key) { + return (String) lettuceSync.get(key); + } + + public void closeConnection() { + connection.close(); + client.shutdown(); + } +} diff --git a/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java b/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java new file mode 100644 index 0000000000..ba5d6f5bfe --- /dev/null +++ b/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java @@ -0,0 +1,68 @@ +package javabushka.client; + +import javabushka.client.LatencyResults; +import java.util.ArrayList; +import java.util.stream.Collectors; +import java.util.Collections; + +public class Benchmarking { + static final int SIZE_SET_KEYSPACE = 3000000; + + public static String generateKeySet() { + return (Math.floor(Math.random() * SIZE_SET_KEYSPACE) + 1) + ""; + } + + public interface Operation { + void go(); + } + + public static ArrayList getLatencies(int iterations, Operation op) { + ArrayList latencies = new ArrayList(); + for (int i = 0; i latencies, int percentile) { + return latencies.get((int) Math.ceil((percentile / 100.0) * latencies.size())); + } + + private static double stdDeviation(ArrayList latencies, Double avgLatency) { + double stdDeviation = latencies.stream() + .mapToDouble(Long::doubleValue) + .reduce(0.0, (stdDev, latency) -> stdDev + Math.pow(latency - avgLatency, 2)); + return Math.sqrt(stdDeviation / latencies.size()); + } + + // This has the side-effect of sorting the latencies ArrayList + public static LatencyResults calculateResults(ArrayList latencies) { + Double avgLatency = latencies + .stream() + .collect(Collectors.summingLong(Long::longValue)) / Double.valueOf(latencies.size()); + + Collections.sort(latencies); + return new LatencyResults( + avgLatency, + percentile(latencies, 50), + percentile(latencies, 90), + percentile(latencies, 99), + stdDeviation(latencies, avgLatency) + ); + } + + public static void printResults(String operation, LatencyResults results) { + System.out.println( + "Avg. time in ms per " + operation + ": " + results.avgLatency / 1000000.0 + ); + System.out.println(operation + " p50 latency in ms: " + results.p50Latency / 1000000.0); + System.out.println(operation + " p90 latency in ms: " + results.p90Latency / 1000000.0); + System.out.println(operation + " p99 latency in ms: " + results.p99Latency / 1000000.0); + System.out.println(operation + " std dev in ms: " + results.stdDeviation / 1000000.0); + } + +} \ No newline at end of file diff --git a/java/benchmarks/src/test/java/javabushka/client/LatencyResults.java b/java/benchmarks/src/test/java/javabushka/client/LatencyResults.java new file mode 100644 index 0000000000..320ec07f74 --- /dev/null +++ b/java/benchmarks/src/test/java/javabushka/client/LatencyResults.java @@ -0,0 +1,24 @@ +package javabushka.client; + +// Raw timing results in nanoseconds +public class LatencyResults { + public final double avgLatency; + public final long p50Latency; + public final long p90Latency; + public final long p99Latency; + public final double stdDeviation; + + public LatencyResults( + double avgLatency, + long p50Latency, + long p90Latency, + long p99Latency, + double stdDeviation + ) { + this.avgLatency = avgLatency; + this.p50Latency = p50Latency; + this.p90Latency = p90Latency; + this.p99Latency = p99Latency; + this.stdDeviation = stdDeviation; + } +} diff --git a/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java b/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java new file mode 100644 index 0000000000..249be43fc2 --- /dev/null +++ b/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java @@ -0,0 +1,66 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package javabushka.client.jedis; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import javabushka.client.Benchmarking; +import org.junit.Before; +import org.junit.Test; + +public class JedisClientIT { + + JedisClient jedisClient; + + @Before + public void initializeJedisClient() { + jedisClient = new JedisClient(); + jedisClient.connectToRedis(); + } + + @Test public void someLibraryMethodReturnsTrue() { + JedisClient classUnderTest = new JedisClient(); + assertTrue("someLibraryMethod should return 'true'", classUnderTest.someLibraryMethod()); + } + + @Test public void testResourceInfo() { + String result = jedisClient.info(); + + assertTrue(result.length() > 0); + } + + @Test public void testResourceInfoBySection() { + String section = "Server"; + String result = jedisClient.info(section); + + assertTrue(result.length() > 0); + assertTrue(result.startsWith("# " + section)); + } + + @Test public void testResourceSetGet() { + int iterations = 100000; + String value = "my-value"; + + Benchmarking.printResults( + "SET", + Benchmarking.calculateResults( + Benchmarking.getLatencies( + iterations, + () -> jedisClient.set(Benchmarking.generateKeySet(), value) + ) + ) + ); + Benchmarking.printResults( + "GET", + Benchmarking.calculateResults( + Benchmarking.getLatencies( + iterations, + () -> jedisClient.get(Benchmarking.generateKeySet()) + ) + ) + ); + } +} + diff --git a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java new file mode 100644 index 0000000000..da986ac7c7 --- /dev/null +++ b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java @@ -0,0 +1,51 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package javabushka.client.lettuce; + +import static org.junit.Assert.assertEquals; + +import javabushka.client.Benchmarking; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class LettuceClientIT { + + LettuceClient lettuceClient; + + @Before + public void initializeJedisClient() { + lettuceClient = new LettuceClient(); + lettuceClient.connectToRedis(); + } + + @After + public void closeConnection() { + lettuceClient.closeConnection(); + } + + @Test public void testResourceSetGet() { + int iterations = 100000; + String value = "my-value"; + + Benchmarking.printResults( + "SET", + Benchmarking.calculateResults( + Benchmarking.getLatencies( + iterations, + () -> lettuceClient.set(Benchmarking.generateKeySet(), value) + ) + ) + ); + Benchmarking.printResults( + "GET", + Benchmarking.calculateResults( + Benchmarking.getLatencies( + iterations, + () -> lettuceClient.get(Benchmarking.generateKeySet()) + ) + ) + ); + } +} diff --git a/java/changes.diff b/java/changes.diff new file mode 100644 index 0000000000..aa01c5888e --- /dev/null +++ b/java/changes.diff @@ -0,0 +1,210 @@ +diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle +index 083fd57..20a4142 100644 +--- a/java/benchmarks/build.gradle ++++ b/java/benchmarks/build.gradle +@@ -27,3 +27,11 @@ java { + languageVersion = JavaLanguageVersion.of(17) + } + } ++ ++tasks.withType(Test) { ++ testLogging { ++ exceptionFormat "full" ++ events "started", "skipped", "passed", "failed" ++ showStandardStreams true ++ } ++} +diff --git a/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java b/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java +new file mode 100644 +index 0000000..ba5d6f5 +--- /dev/null ++++ b/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java +@@ -0,0 +1,68 @@ ++package javabushka.client; ++ ++import javabushka.client.LatencyResults; ++import java.util.ArrayList; ++import java.util.stream.Collectors; ++import java.util.Collections; ++ ++public class Benchmarking { ++ static final int SIZE_SET_KEYSPACE = 3000000; ++ ++ public static String generateKeySet() { ++ return (Math.floor(Math.random() * SIZE_SET_KEYSPACE) + 1) + ""; ++ } ++ ++ public interface Operation { ++ void go(); ++ } ++ ++ public static ArrayList getLatencies(int iterations, Operation op) { ++ ArrayList latencies = new ArrayList(); ++ for (int i = 0; i latencies, int percentile) { ++ return latencies.get((int) Math.ceil((percentile / 100.0) * latencies.size())); ++ } ++ ++ private static double stdDeviation(ArrayList latencies, Double avgLatency) { ++ double stdDeviation = latencies.stream() ++ .mapToDouble(Long::doubleValue) ++ .reduce(0.0, (stdDev, latency) -> stdDev + Math.pow(latency - avgLatency, 2)); ++ return Math.sqrt(stdDeviation / latencies.size()); ++ } ++ ++ // This has the side-effect of sorting the latencies ArrayList ++ public static LatencyResults calculateResults(ArrayList latencies) { ++ Double avgLatency = latencies ++ .stream() ++ .collect(Collectors.summingLong(Long::longValue)) / Double.valueOf(latencies.size()); ++ ++ Collections.sort(latencies); ++ return new LatencyResults( ++ avgLatency, ++ percentile(latencies, 50), ++ percentile(latencies, 90), ++ percentile(latencies, 99), ++ stdDeviation(latencies, avgLatency) ++ ); ++ } ++ ++ public static void printResults(String operation, LatencyResults results) { ++ System.out.println( ++ "Avg. time in ms per " + operation + ": " + results.avgLatency / 1000000.0 ++ ); ++ System.out.println(operation + " p50 latency in ms: " + results.p50Latency / 1000000.0); ++ System.out.println(operation + " p90 latency in ms: " + results.p90Latency / 1000000.0); ++ System.out.println(operation + " p99 latency in ms: " + results.p99Latency / 1000000.0); ++ System.out.println(operation + " std dev in ms: " + results.stdDeviation / 1000000.0); ++ } ++ ++} +\ No newline at end of file +diff --git a/java/benchmarks/src/test/java/javabushka/client/LatencyResults.java b/java/benchmarks/src/test/java/javabushka/client/LatencyResults.java +new file mode 100644 +index 0000000..320ec07 +--- /dev/null ++++ b/java/benchmarks/src/test/java/javabushka/client/LatencyResults.java +@@ -0,0 +1,24 @@ ++package javabushka.client; ++ ++// Raw timing results in nanoseconds ++public class LatencyResults { ++ public final double avgLatency; ++ public final long p50Latency; ++ public final long p90Latency; ++ public final long p99Latency; ++ public final double stdDeviation; ++ ++ public LatencyResults( ++ double avgLatency, ++ long p50Latency, ++ long p90Latency, ++ long p99Latency, ++ double stdDeviation ++ ) { ++ this.avgLatency = avgLatency; ++ this.p50Latency = p50Latency; ++ this.p90Latency = p90Latency; ++ this.p99Latency = p99Latency; ++ this.stdDeviation = stdDeviation; ++ } ++} +diff --git a/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java b/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java +index 86b2ae0..249be43 100644 +--- a/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java ++++ b/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java +@@ -6,6 +6,7 @@ package javabushka.client.jedis; + import static org.junit.Assert.assertEquals; + import static org.junit.Assert.assertTrue; + ++import javabushka.client.Benchmarking; + import org.junit.Before; + import org.junit.Test; + +@@ -39,12 +40,27 @@ public class JedisClientIT { + } + + @Test public void testResourceSetGet() { +- String key = "name"; ++ int iterations = 100000; + String value = "my-value"; + +- jedisClient.set(key, value); +- String result = jedisClient.get(key); +- +- assertEquals(value, result); ++ Benchmarking.printResults( ++ "SET", ++ Benchmarking.calculateResults( ++ Benchmarking.getLatencies( ++ iterations, ++ () -> jedisClient.set(Benchmarking.generateKeySet(), value) ++ ) ++ ) ++ ); ++ Benchmarking.printResults( ++ "GET", ++ Benchmarking.calculateResults( ++ Benchmarking.getLatencies( ++ iterations, ++ () -> jedisClient.get(Benchmarking.generateKeySet()) ++ ) ++ ) ++ ); + } + } ++ +diff --git a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java +index 20100e0..da986ac 100644 +--- a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java ++++ b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java +@@ -5,6 +5,7 @@ package javabushka.client.lettuce; + + import static org.junit.Assert.assertEquals; + ++import javabushka.client.Benchmarking; + import org.junit.After; + import org.junit.Before; + import org.junit.Test; +@@ -25,12 +26,26 @@ public class LettuceClientIT { + } + + @Test public void testResourceSetGet() { +- String key = "name"; ++ int iterations = 100000; + String value = "my-value"; + +- lettuceClient.set(key, value); +- String result = lettuceClient.get(key); +- +- assertEquals(value, result); ++ Benchmarking.printResults( ++ "SET", ++ Benchmarking.calculateResults( ++ Benchmarking.getLatencies( ++ iterations, ++ () -> lettuceClient.set(Benchmarking.generateKeySet(), value) ++ ) ++ ) ++ ); ++ Benchmarking.printResults( ++ "GET", ++ Benchmarking.calculateResults( ++ Benchmarking.getLatencies( ++ iterations, ++ () -> lettuceClient.get(Benchmarking.generateKeySet()) ++ ) ++ ) ++ ); + } + } diff --git a/java/gradle/wrapper/gradle-wrapper.jar b/java/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..7f93135c49b765f8051ef9d0a6055ff8e46073d8 GIT binary patch literal 63721 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鯊%1Et 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⁢ zv5o9#E7!G0XmdzfsS{efPNi`1b44~SZ4Z8fuX!I}#8g+(wxzQwUT#Xb2(tbY1+EUhGKoT@KEU9Ktl>_0 z%bjDJg;#*gtJZv!-Zs`?^}v5eKmnbjqlvnSzE@_SP|LG_PJ6CYU+6zY6>92%E+ z=j@TZf-iW4(%U{lnYxQA;7Q!b;^brF8n0D>)`q5>|WDDXLrqYU_tKN2>=#@~OE7grMnNh?UOz-O~6 z6%rHy{#h9K0AT+lDC7q4{hw^|q6*Ry;;L%Q@)Ga}$60_q%D)rv(CtS$CQbpq9|y1e zRSrN4;$Jyl{m5bZw`$8TGvb}(LpY{-cQ)fcyJv7l3S52TLXVDsphtv&aPuDk1OzCA z4A^QtC(!11`IsNx_HnSy?>EKpHJWT^wmS~hc^p^zIIh@9f6U@I2 zC=Mve{j2^)mS#U$e{@Q?SO6%LDsXz@SY+=cK_QMmXBIU)j!$ajc-zLx3V60EXJ!qC zi<%2x8Q24YN+&8U@CIlN zrZkcT9yh%LrlGS9`G)KdP(@9Eo-AQz@8GEFWcb7U=a0H^ZVbLmz{+&M7W(nXJ4sN8 zJLR7eeK(K8`2-}j(T7JsO`L!+CvbueT%izanm-^A1Dn{`1Nw`9P?cq;7no+XfC`K(GO9?O^5zNIt4M+M8LM0=7Gz8UA@Z0N+lg+cX)NfazRu z5D)~HA^(u%w^cz+@2@_#S|u>GpB+j4KzQ^&Wcl9f z&hG#bCA(Yk0D&t&aJE^xME^&E-&xGHhXn%}psEIj641H+Nl-}boj;)Zt*t(4wZ5DN z@GXF$bL=&pBq-#vkTkh>7hl%K5|3 z{`Vn9b$iR-SoGENp}bn4;fR3>9sA%X2@1L3aE9yTra;Wb#_`xWwLSLdfu+PAu+o3| zGVnpzPr=ch{uuoHjtw7+_!L_2;knQ!DuDl0R`|%jr+}jFzXtrHIKc323?JO{l&;VF z*L1+}JU7%QJOg|5|Tc|D8fN zJORAg=_vsy{ak|o);@)Yh8Lkcg@$FG3k@ep36BRa^>~UmnRPziS>Z=`Jb2x*Q#`%A zU*i3&Vg?TluO@X0O;r2Jl6LKLUOVhSqg1*qOt^|8*c7 zo(298@+r$k_wQNGHv{|$tW(T8L+4_`FQ{kEW5Jgg{yf7ey4ss_(SNKfz(N9lx&a;< je(UuV8hP?p&}TPdm1I$XmG#(RzlD&B2izSj9sl%y5~4qc literal 0 HcmV?d00001 diff --git a/java/gradle/wrapper/gradle-wrapper.properties b/java/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..ac72c34e8a --- /dev/null +++ b/java/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/java/gradlew b/java/gradlew new file mode 100755 index 0000000000..0adc8e1a53 --- /dev/null +++ b/java/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/java/gradlew.bat b/java/gradlew.bat new file mode 100644 index 0000000000..6689b85bee --- /dev/null +++ b/java/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/java/lib/build.gradle b/java/lib/build.gradle new file mode 100644 index 0000000000..cc06cd1213 --- /dev/null +++ b/java/lib/build.gradle @@ -0,0 +1,34 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * This generated file contains a sample Java library project to get you started. + * For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.3/userguide/building_java_projects.html in the Gradle documentation. + */ + +plugins { + // Apply the java-library plugin for API and implementation separation. + id 'java-library' +} + +repositories { + // Use Maven Central for resolving dependencies. + mavenCentral() +} + +dependencies { + // Use JUnit test framework. + testImplementation 'junit:junit:4.13.2' + + // This dependency is exported to consumers, that is to say found on their compile classpath. + api 'org.apache.commons:commons-math3:3.6.1' + + // This dependency is used internally, and not exposed to consumers on their own compile classpath. + implementation 'com.google.guava:guava:32.1.1-jre' +} + +// Apply a specific Java toolchain to ease working on different environments. +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} diff --git a/java/lib/build/classes/java/main/javabushka/Library.class b/java/lib/build/classes/java/main/javabushka/Library.class new file mode 100644 index 0000000000000000000000000000000000000000..202633586d599ba4834aca4781d62386a0bdf118 GIT binary patch literal 352 zcmZWkyH3ME5S(?KI2c0`iyxo^gzyLOXppE(C_pLb&dv#6aD39)M&h4nsE{c506q$_ zYpj686*HRMnK|v}*ZT*6bHpJ$3o}qqn+7HlVh<#I5*zqk-QkfZU?m`5pH?hj_%Ic}8vY&(->tWZ9b&(IdM!3SL z?y)n4IQ9c;5n5Ph=q!wsWH%u?hyy%{uz^j|rp+js6eK3OuvQq-7V`3^M~DntC+S@M zwKGzU&TqWrr&L>%+!K}%8XxqKX4g}x#APwfgz51tr%asc0nhu~NFP_ph8s)Euw4@U zdjSu3&ak_%%T>9yooQ?ha+3T-4T-1Z-}ny{!R%ZW%E_tdODl=~LMiRIlUfmbJDne* zVhyi#VFu!(^vc`S^?mKk?~Q$I(KGw62Ie1{>^4OSc}9Ne^*z}4vb;mqmw^>LBOA>c z@Ep4oF}$E^tsK52??L0=2)^E9C5^*3KM?&ydydpXojO+0B%BV`O2nCzxI%0q#7pcE Ra+f+i^FDco1F|(7{sni?owNV| literal 0 HcmV?d00001 diff --git a/java/lib/build/libs/lib.jar b/java/lib/build/libs/lib.jar new file mode 100644 index 0000000000000000000000000000000000000000..77f1a996552b93a2c207a0cde3f2505656498e79 GIT binary patch literal 723 zcmWIWW@Zs#VBp|jNSv$|&Hw~VAOZ+Df!NnI#8KDN&rP41Apk|;rh2A#(m(~0Kn&E5 zQ0VLE=jrAe9HQsz_SyH$X&-N0y^Flwx?1PXoZlQ|aK-q+(??I4kPKVARRzUXZlGaV ziDijNrNtT9i757hl(Nq-wR#6slEBEoAc3mXCo`!iv8YlnIVZ8WIMv_U?}&lOoatxP zygAEp%G+fI)`qql`|=fuquAE7IoO zJO2E(bwh9pCsR*Si{`Noj?GgmL@IS>{r(fRF65@*BH_C)-t`#Vx*dOHhJaD}q}piP zjy)GHas77TIDa-sa9L~KmC*guPTk{*+&oEinaEeCh_^e$53jqVo4EW(e5ucj?P+Um z_J+i!PCNX~+NmhHDtZ<7Td$ye%Ocequ4lII5O26+YGXd*Y0nW0y9(C5Joh=zX9y_g zeDc}P+Y{Z>lIv6Z<3fA$hoAmMpR^_asH8K`u4fGJW@Hj!#vP5ofC2&mhPRF&8Xl?W z+R!5vq!V9yBYM0-G=i*Nh^i4KmIJ(5*+42; Ofba*9J_<|~3=9Ckh0YZK literal 0 HcmV?d00001 diff --git a/java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html b/java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html new file mode 100644 index 0000000000..3031b841d0 --- /dev/null +++ b/java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html @@ -0,0 +1,96 @@ + + + + + +Test results - Class javabushka.LibraryTest + + + + + +
+

Class javabushka.LibraryTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.002s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
someLibraryMethodReturnsTrue0.002spassed
+
+
+ +
+ + diff --git a/java/lib/build/reports/tests/test/css/base-style.css b/java/lib/build/reports/tests/test/css/base-style.css new file mode 100644 index 0000000000..4afa73e3dd --- /dev/null +++ b/java/lib/build/reports/tests/test/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/java/lib/build/reports/tests/test/css/style.css b/java/lib/build/reports/tests/test/css/style.css new file mode 100644 index 0000000000..3dc4913e7a --- /dev/null +++ b/java/lib/build/reports/tests/test/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/java/lib/build/reports/tests/test/index.html b/java/lib/build/reports/tests/test/index.html new file mode 100644 index 0000000000..837e00ab79 --- /dev/null +++ b/java/lib/build/reports/tests/test/index.html @@ -0,0 +1,133 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.002s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Packages

+ + + + + + + + + + + + + + + + + + + + + +
PackageTestsFailuresIgnoredDurationSuccess rate
+javabushka +1000.002s100%
+
+
+

Classes

+ + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+javabushka.LibraryTest +1000.002s100%
+
+
+ +
+ + diff --git a/java/lib/build/reports/tests/test/js/report.js b/java/lib/build/reports/tests/test/js/report.js new file mode 100644 index 0000000000..83bab4a19f --- /dev/null +++ b/java/lib/build/reports/tests/test/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/java/lib/build/reports/tests/test/packages/javabushka.html b/java/lib/build/reports/tests/test/packages/javabushka.html new file mode 100644 index 0000000000..c50fe5999a --- /dev/null +++ b/java/lib/build/reports/tests/test/packages/javabushka.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package javabushka + + + + + +
+

Package javabushka

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.002s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+LibraryTest +1000.002s100%
+
+
+ +
+ + diff --git a/java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml b/java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml new file mode 100644 index 0000000000..d06e1fe97d --- /dev/null +++ b/java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/java/lib/build/test-results/test/binary/output.bin b/java/lib/build/test-results/test/binary/output.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/java/lib/build/test-results/test/binary/output.bin.idx b/java/lib/build/test-results/test/binary/output.bin.idx new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/java/lib/build/test-results/test/binary/results.bin b/java/lib/build/test-results/test/binary/results.bin new file mode 100644 index 0000000000000000000000000000000000000000..f5767307578ed46df57c9e327fa93b66a3c43c2d GIT binary patch literal 128 zcmZQ(WSX9pSeBSnTAY!csOOWJRFqg$8IoFDf+*GIr-_(+f Z{FI>7lG38Q;*g@!RJ@W5Oi)vb82})PFZTcd literal 0 HcmV?d00001 diff --git a/java/lib/build/tmp/compileJava/previous-compilation-data.bin b/java/lib/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..28d5565cd61893d10507bce77ba30fa1dca615b3 GIT binary patch literal 2859 zcmb7GYgAKL7CzgcP&M=@SQXS#MNu(FO9ez!27?hagg1(>dWkp5C6{~S%?%J=hzTGs zUkE5nt*upjfcU6FtAZ9P)Uj%*S_kK4N2g=!YpF|})-LCScD3_s*2=wW<*ajZ_TJz3 z?S1w=fV4pRpt39`hsm^AO=d=c3OrCTmnkul9a~=n-d?sS;Z?%Rt4~{o%iRdANB{Hu zHVN)a`Vmj!MP5Try_nq}6&pp-$g=}bF`Z_M!a(HUL?x=QFnTj%WL2DC5b>t8#*~nV zK8>kQBDUvDK4tb!dp#MGL1ZxTA--e?c>_5`$v6~k)tgwonUxF@lg;Lel6k-|RA`eq zemE+YSc@pheyDJzjo}sksHk^70+k7_1M1BIY zeMNcSE#!K_#te6&&2_gdkJXERhY?w(v%Us72*%R7ISHYR?y zPL~j!n3zP8NeU`*)mUCCD*IhSMH(t)TuGH#$(oKF61#ws5Cj{~FGL&c8K{^wFg9Ms zyOsa>wlVNYw??Qx^OwCHs~3^Q#B&M#+p1?QtP-P6-g==sYW~uvucW~#mHn0`FVnu8 z9JL&6WMzgE*cA*aq&WFZDz+(t^Re(eHPuBHaJUX*72I` zWFbx@7P6A~N~kEuRS)+wLWw97_Z2zguLmcnzx!pr4&J2F{n2}LJ7=^ zDh0G5qzsTFGfPnps9c~&-9q`$g2fGON4c#gW#iOv+vioK7g{SIVH4;!!<;RUx)tW~ z3WXwf8#NVJ9DUV3mgpBpbu66wXP+&(ODaLT9RjN$sTyKb8KH_AKu*po1WZ<-I}o`JNp>c2bJ9fXXZqm)#54s>F}4UB7vzId1c<@fV_A8=D?k2MK?K6xDlx zifx%Pt=nA`wgHD6x)gi2O5N7;_}2C<6~{B)hnTz!JaXVs$Bi$mFSLF*dUef}cRO|i z`GCgwkjj|N$h29!*tGh9kso)=*-`V487*n+_5k^aZrDpTlUM`K>SZPVIa^iL6Eo;l zW5y55*S3VU?t|ERh^vDAG_Y_0PzlG<=BhW@@%@q=&IV0p(7MST19p~g4Lt}8Rvn^r zO{{=J2O1xp-(1JF4XqkEZjI-xnRtK8oXhh!kG~uF)T`;uxOg*wW^xV__ zt;C(_e|shPx17Fjo6=x@k2~B1qSu zoAIoz84_AxLDVM{JIk0qrE=Nmk;c#MS+fmqra1@8+WS96h?h@6;%SJEIzv-tlSPT; zS;oq?QX^61@xAL0d`lk8UZg8KRDT4Y+t>!_XCX~IM-wNQ1u<9njMfXoV`;-QA^h*N z^2D}@|Ne18?8|l_9Y8*(0EeBYj`gCTw@DJ!Ly0{M?ak`Zd;8}!92!26>qMQ9)&=AX zAQyo6{s~a2wYMZV!RV(Lfq(Q(+BME&&U3G!+h>|%CTlJN`I36QMA>9goJy<+o_YuA zUev_iw3W1v*DtvYR5q9qT>ocheu)Ti&h#_~HR;@aB zqU=~f_4E87ZW~Vr1T&F_{#F6KI{ZImOWk&^ciSS% zZHqh#-9ZZp=%__baN9wV`z96cn^d~+QHks5=;?$Cpb7KNqA7d-7vTHopzsc+3kO{b zl+jGLnH+N;R}^!YC^G7o0} literal 0 HcmV?d00001 diff --git a/java/lib/build/tmp/compileTestJava/previous-compilation-data.bin b/java/lib/build/tmp/compileTestJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..08a1bf7d5fb3fc7dd6ce4bb2f2ad4410e30da8d6 GIT binary patch literal 3207 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 literal 0 HcmV?d00001 diff --git a/java/lib/build/tmp/jar/MANIFEST.MF b/java/lib/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000000..58630c02ef --- /dev/null +++ b/java/lib/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/java/lib/src/main/java/javabushka/Library.java b/java/lib/src/main/java/javabushka/Library.java new file mode 100644 index 0000000000..ff87ce99ce --- /dev/null +++ b/java/lib/src/main/java/javabushka/Library.java @@ -0,0 +1,10 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package javabushka; + +public class Library { + public boolean someLibraryMethod() { + return true; + } +} diff --git a/java/lib/src/test/java/javabushka/LibraryTest.java b/java/lib/src/test/java/javabushka/LibraryTest.java new file mode 100644 index 0000000000..0676a72ab8 --- /dev/null +++ b/java/lib/src/test/java/javabushka/LibraryTest.java @@ -0,0 +1,14 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package javabushka; + +import org.junit.Test; +import static org.junit.Assert.*; + +public class LibraryTest { + @Test public void someLibraryMethodReturnsTrue() { + Library classUnderTest = new Library(); + assertTrue("someLibraryMethod should return 'true'", classUnderTest.someLibraryMethod()); + } +} diff --git a/java/settings.gradle b/java/settings.gradle new file mode 100644 index 0000000000..f4ab308fd0 --- /dev/null +++ b/java/settings.gradle @@ -0,0 +1,15 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.3/userguide/building_swift_projects.html in the Gradle documentation. + */ + +plugins { + // Apply the foojay-resolver plugin to allow automatic download of JDKs + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.4.0' +} + +rootProject.name = 'javabushka' +include('lib') +include('benchmarks') From 5990767f06094d250c46f717c824d84366dccb2a Mon Sep 17 00:00:00 2001 From: Jonathan Louie Date: Thu, 7 Sep 2023 17:54:15 -0700 Subject: [PATCH 02/81] Start ignoring .gradle files --- java/.gitignore | 5 +++++ java/.gradle/8.3/checksums/checksums.lock | Bin 17 -> 0 bytes .../dependencies-accessors.lock | Bin 17 -> 0 bytes .../8.3/dependencies-accessors/gc.properties | 0 .../8.3/executionHistory/executionHistory.bin | Bin 78284 -> 0 bytes .../8.3/executionHistory/executionHistory.lock | Bin 17 -> 0 bytes java/.gradle/8.3/fileChanges/last-build.bin | Bin 1 -> 0 bytes java/.gradle/8.3/fileHashes/fileHashes.bin | Bin 20697 -> 0 bytes java/.gradle/8.3/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .../8.3/fileHashes/resourceHashesCache.bin | Bin 18871 -> 0 bytes java/.gradle/8.3/gc.properties | 0 .../buildOutputCleanup/buildOutputCleanup.lock | Bin 17 -> 0 bytes .../.gradle/buildOutputCleanup/cache.properties | 2 -- java/.gradle/buildOutputCleanup/outputFiles.bin | Bin 19613 -> 0 bytes java/.gradle/file-system.probe | Bin 8 -> 0 bytes java/.gradle/vcs-1/gc.properties | 0 16 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 java/.gitignore delete mode 100644 java/.gradle/8.3/checksums/checksums.lock delete mode 100644 java/.gradle/8.3/dependencies-accessors/dependencies-accessors.lock delete mode 100644 java/.gradle/8.3/dependencies-accessors/gc.properties delete mode 100644 java/.gradle/8.3/executionHistory/executionHistory.bin delete mode 100644 java/.gradle/8.3/executionHistory/executionHistory.lock delete mode 100644 java/.gradle/8.3/fileChanges/last-build.bin delete mode 100644 java/.gradle/8.3/fileHashes/fileHashes.bin delete mode 100644 java/.gradle/8.3/fileHashes/fileHashes.lock delete mode 100644 java/.gradle/8.3/fileHashes/resourceHashesCache.bin delete mode 100644 java/.gradle/8.3/gc.properties delete mode 100644 java/.gradle/buildOutputCleanup/buildOutputCleanup.lock delete mode 100644 java/.gradle/buildOutputCleanup/cache.properties delete mode 100644 java/.gradle/buildOutputCleanup/outputFiles.bin delete mode 100644 java/.gradle/file-system.probe delete mode 100644 java/.gradle/vcs-1/gc.properties diff --git a/java/.gitignore b/java/.gitignore new file mode 100644 index 0000000000..1b6985c009 --- /dev/null +++ b/java/.gitignore @@ -0,0 +1,5 @@ +# Ignore Gradle project-specific cache directory +.gradle + +# Ignore Gradle build output directory +build diff --git a/java/.gradle/8.3/checksums/checksums.lock b/java/.gradle/8.3/checksums/checksums.lock deleted file mode 100644 index 4d7dc379235fd25b65af61a4fe1e8e36ae8f02b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 ScmZSf^x4jQ#;>`C0SW*q)dOq* diff --git a/java/.gradle/8.3/dependencies-accessors/dependencies-accessors.lock b/java/.gradle/8.3/dependencies-accessors/dependencies-accessors.lock deleted file mode 100644 index 2c220632c8e62ceb41f0e70ad45a9a8d910fc5d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZQpJA33)_2qtV1}FdkJhueZ diff --git a/java/.gradle/8.3/dependencies-accessors/gc.properties b/java/.gradle/8.3/dependencies-accessors/gc.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/java/.gradle/8.3/executionHistory/executionHistory.bin b/java/.gradle/8.3/executionHistory/executionHistory.bin deleted file mode 100644 index d8e78a38daa55f7ccefbd7712e43049b34e65dc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78284 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 diff --git a/java/.gradle/8.3/executionHistory/executionHistory.lock b/java/.gradle/8.3/executionHistory/executionHistory.lock deleted file mode 100644 index 9eb5ac82f594855606c8aa33a2d65181d1b411f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZS1pKZR}<@)zo3=qHr05?wrqyPW_ diff --git a/java/.gradle/8.3/fileChanges/last-build.bin b/java/.gradle/8.3/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/java/.gradle/8.3/fileHashes/fileHashes.bin b/java/.gradle/8.3/fileHashes/fileHashes.bin deleted file mode 100644 index 33e5f52cbc87c44c4cecea32ec4acb2bbd8f44e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20697 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 Lu7Ga(LcH+{FFO9s diff --git a/java/.gradle/8.3/gc.properties b/java/.gradle/8.3/gc.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/java/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/java/.gradle/buildOutputCleanup/buildOutputCleanup.lock deleted file mode 100644 index a70269903cac8ed3d78ad1a50897a704a1ba452c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZQ(H`P3B+o1WG0Ro%>BDe!c diff --git a/java/.gradle/buildOutputCleanup/cache.properties b/java/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index 8e4ae79e89..0000000000 --- a/java/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Wed Sep 06 20:33:36 PDT 2023 -gradle.version=8.3 diff --git a/java/.gradle/buildOutputCleanup/outputFiles.bin b/java/.gradle/buildOutputCleanup/outputFiles.bin deleted file mode 100644 index b453ac1dbefb5ef369d454af308cd29da6de174e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19613 zcmeI&eM}Q~7{Kv!ptz}36k<{4GN+>H$N(XuDhLC%-d%$bf-j9u%gfl%xv{|z!6^w; zt1v_<%xFy%@Lh=7NtFoWk8NceC`*-}BTg_YWa1S;*6ba{1hI z4|m^&zaX09@@!e{{29oz4}_Z69{%EJY?Pt|F3W1n)?VuQ{P=0jZmTg%kbzDIkQt6xB`bL`-(1x4~tVE-ia)>eJruaU+vu>UxE zd#2?p!7Fkd?Ds?e?s=iaQq6V3e1*%)!rqmg>plka-so3thdhg057?NCCFos2fp&ZC zHU)E4D*E+)TW<761^ZzBFZ4cHMsjA3RR#N-(H;IVRbBTr*TJjN-O732t}Vr8=ISVy z|1!O>N7s0Uxk~SH`?$-mbyrq^KSUoFne924o^%2BB%)8PaR0rbHNBWQ{~@}3QG8{J zbz(kqK}4TXb0t9kI6)8d3iO$3ZQ4nX6>^wIcFdm~;=Ns7Yh^C3!V`*!x5^^|Q$k_> zJ@g<&PX46)qJuEM1wFVj>{i*@6*1s1p}*>HN-!OJu#vf{&E@5WT(66dHpBkC=%Ghu z5BQJY?#`UIqA&INCfhgQMk&lI(W6>yOR~Pa`zLep4mw}3qh$Gs_K%sX_M?kUf}w5v zDGPW4dhELXiyISz;rCY+i5^$5I>{ls<;CXtW$5v}MnlKk$Iw~GM^BvH)Lb&>%1YRu zjlTR$(fZi5=4-IW1AS!{H}>wsY54gTqHFx3iszfPaG%0G^fltW-D$?&MX>)z^tIC* zc}>Z+)0vBh(6t#;%wD$ALGbnHNvXOz<$=On=IR{u)Jh;s~XX_9{yHsR_yL)E}lcj?;JPwHakb}RDcRl0V+TR zr~nn90#twsPys4H1*iZOpaN8Y3Qz$mKn17(6`%rCfC^9nDnJFO02QDDRDcRl0V+TR zr~nn90;9FSLg#}$>--w}=k+l|Z?b=h6Go-{cTYO9%}?tp>7L<;^izIXS4lTZMf$U( cGb5A#+vbtokMydMiL~Kx_6+AL>C8X!H^4SMP5=M^ diff --git a/java/.gradle/file-system.probe b/java/.gradle/file-system.probe deleted file mode 100644 index 2578d60fb58d9bf5ae61816d3137ae37f5aa6b26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 PcmZQzVC>4>e5Dfr2)+Xe diff --git a/java/.gradle/vcs-1/gc.properties b/java/.gradle/vcs-1/gc.properties deleted file mode 100644 index e69de29bb2..0000000000 From 6ae93f5ed6364e24d93cb6483f52271c1ad31eae Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Tue, 3 Oct 2023 13:35:07 -0700 Subject: [PATCH 03/81] Update gitignore and remove generated files from git Signed-off-by: acarbonetto --- .gitignore | 3 + .../javabushka/client/jedis/JedisClient.class | Bin 1354 -> 0 bytes .../client/lettuce/LettuceClient.class | Bin 1706 -> 0 bytes .../client/Benchmarking$Operation.class | Bin 250 -> 0 bytes .../test/javabushka/client/Benchmarking.class | Bin 5246 -> 0 bytes .../javabushka/client/LatencyResults.class | Bin 581 -> 0 bytes .../client/jedis/JedisClientIT.class | Bin 3456 -> 0 bytes .../client/lettuce/LettuceClientIT.class | Bin 2526 -> 0 bytes java/benchmarks/build/libs/benchmarks.jar | Bin 2423 -> 0 bytes ...javabushka.client.jedis.JedisClientIT.html | 142 ------------- ...bushka.client.lettuce.LettuceClientIT.html | 115 ----------- .../reports/tests/test/css/base-style.css | 179 ---------------- .../build/reports/tests/test/css/style.css | 84 -------- .../build/reports/tests/test/index.html | 153 -------------- .../build/reports/tests/test/js/report.js | 194 ------------------ .../packages/javabushka.client.jedis.html | 103 ---------- .../packages/javabushka.client.lettuce.html | 103 ---------- ...-javabushka.client.jedis.JedisClientIT.xml | 23 --- ...abushka.client.lettuce.LettuceClientIT.xml | 17 -- .../build/test-results/test/binary/output.bin | Bin 990 -> 0 bytes .../test-results/test/binary/output.bin.idx | Bin 104 -> 0 bytes .../test-results/test/binary/results.bin | Bin 466 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 38419 -> 0 bytes .../stash-dir/JedisClientIT.class.uniqueId0 | Bin 3464 -> 0 bytes .../previous-compilation-data.bin | Bin 39190 -> 0 bytes java/benchmarks/build/tmp/jar/MANIFEST.MF | 2 - .../java/main/javabushka/Library.class | Bin 352 -> 0 bytes .../java/test/javabushka/LibraryTest.class | Bin 681 -> 0 bytes java/lib/build/libs/lib.jar | Bin 723 -> 0 bytes .../test/classes/javabushka.LibraryTest.html | 96 --------- .../reports/tests/test/css/base-style.css | 179 ---------------- .../build/reports/tests/test/css/style.css | 84 -------- java/lib/build/reports/tests/test/index.html | 133 ------------ .../lib/build/reports/tests/test/js/report.js | 194 ------------------ .../tests/test/packages/javabushka.html | 103 ---------- .../test/TEST-javabushka.LibraryTest.xml | 7 - .../build/test-results/test/binary/output.bin | 0 .../test-results/test/binary/output.bin.idx | Bin 1 -> 0 bytes .../test-results/test/binary/results.bin | Bin 128 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 2859 -> 0 bytes .../previous-compilation-data.bin | Bin 3207 -> 0 bytes java/lib/build/tmp/jar/MANIFEST.MF | 2 - submodules/redis-rs | 1 - 43 files changed, 3 insertions(+), 1914 deletions(-) delete mode 100644 java/benchmarks/build/classes/java/main/javabushka/client/jedis/JedisClient.class delete mode 100644 java/benchmarks/build/classes/java/main/javabushka/client/lettuce/LettuceClient.class delete mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking$Operation.class delete mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking.class delete mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/LatencyResults.class delete mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/jedis/JedisClientIT.class delete mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/lettuce/LettuceClientIT.class delete mode 100644 java/benchmarks/build/libs/benchmarks.jar delete mode 100644 java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html delete mode 100644 java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html delete mode 100644 java/benchmarks/build/reports/tests/test/css/base-style.css delete mode 100644 java/benchmarks/build/reports/tests/test/css/style.css delete mode 100644 java/benchmarks/build/reports/tests/test/index.html delete mode 100644 java/benchmarks/build/reports/tests/test/js/report.js delete mode 100644 java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html delete mode 100644 java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html delete mode 100644 java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml delete mode 100644 java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml delete mode 100644 java/benchmarks/build/test-results/test/binary/output.bin delete mode 100644 java/benchmarks/build/test-results/test/binary/output.bin.idx delete mode 100644 java/benchmarks/build/test-results/test/binary/results.bin delete mode 100644 java/benchmarks/build/tmp/compileJava/previous-compilation-data.bin delete mode 100644 java/benchmarks/build/tmp/compileTestJava/compileTransaction/stash-dir/JedisClientIT.class.uniqueId0 delete mode 100644 java/benchmarks/build/tmp/compileTestJava/previous-compilation-data.bin delete mode 100644 java/benchmarks/build/tmp/jar/MANIFEST.MF delete mode 100644 java/lib/build/classes/java/main/javabushka/Library.class delete mode 100644 java/lib/build/classes/java/test/javabushka/LibraryTest.class delete mode 100644 java/lib/build/libs/lib.jar delete mode 100644 java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html delete mode 100644 java/lib/build/reports/tests/test/css/base-style.css delete mode 100644 java/lib/build/reports/tests/test/css/style.css delete mode 100644 java/lib/build/reports/tests/test/index.html delete mode 100644 java/lib/build/reports/tests/test/js/report.js delete mode 100644 java/lib/build/reports/tests/test/packages/javabushka.html delete mode 100644 java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml delete mode 100644 java/lib/build/test-results/test/binary/output.bin delete mode 100644 java/lib/build/test-results/test/binary/output.bin.idx delete mode 100644 java/lib/build/test-results/test/binary/results.bin delete mode 100644 java/lib/build/tmp/compileJava/previous-compilation-data.bin delete mode 100644 java/lib/build/tmp/compileTestJava/previous-compilation-data.bin delete mode 100644 java/lib/build/tmp/jar/MANIFEST.MF delete mode 160000 submodules/redis-rs diff --git a/.gitignore b/.gitignore index 92ac3aaf47..10981abe53 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,10 @@ Cargo.lock *.pdb dump.rdb .env +.idea benchmarks/results +benchmarks/build +lib/build # lock files diff --git a/java/benchmarks/build/classes/java/main/javabushka/client/jedis/JedisClient.class b/java/benchmarks/build/classes/java/main/javabushka/client/jedis/JedisClient.class deleted file mode 100644 index e0af5d106f08fedece943280f1d632c44c98dbe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1354 zcma)+ZBNrs6vzK}8*~rd*d|OKgz+G-4P=T>n2B#lNHj$akQsf~jmiq8HEl=2ck+cM z3W+9u0Kbag!FbMHvn?A{U+lEEz2|>^=k$N~^Y^zO0JiZYi3p+!Vk$;3Dv&+V&-JRM z+sD;cjT58k3yeNBZPR}y5G|GK3gQB@u5n~~)uv?{w(nI>7kV&l-k% zs5dNnlGpgF)pgh8b?`9ew@go9Sr+@pcxwVV&p9(Rv*GIQ#h&4}oFnO+cLJHFW7}k@ zLua48LL48+E&|2yFTj2xO~s=$)3KRwXu1Nc|2LXCft(r_0wd?T)uwin2hwJ{Cik9| z2JX0IgNtB+>=mI?BIrj3qo~k59TSQrT2<-F??x(D5TEHLf-*&Z4J1&ZsCG7B4ePWL zxPuLfoV-p~-WQ2|<0^@PKSHAd6SNAb*L;PXl~~KE8ODkIWt9Z&M8(TY~e6 zYHmgcBQuskU(+xw+ZgJ$v@-?)~-q`wsvQ@iLAcL?lFI^rDYp=twxb=&o})>hXyEg=}bsnuMadSoNq8h$$#Ld_Cb zvLRE@KRo!d3Y$_J3xgU11t&mF3o_C$7^t3#sfYey_#veI&YD685`Wv@75b$ z)&4-Gjg^g>rFspA`nudvuPeG`yFG_?%T9qRTC}SKK3Fm={Z-?nqB{p_#Ux9*#AoqP zbqxL;7^7a@a2fnW|6@cbKr(3616wpSjaOK?K;L$5*+WwLSU=-L+QykwJ5|jFvAk4< z04!XFz(ffOnTySFq8TdN4M)@W3_siOWH0lGG#^8BmjMxa=whH1ypP43rVtF9wC}+d z-E_nVeY6(HqR^YsyEpe0?2|aMO)LKmD)U2HW&Z$n@QA(`9ygue5+FY}n@daI5Ie_U zF83LOUvTXl<9s`Qfk}pQ%(alyh>}MNF{Fv+FcBXKMVW0z$>RxObBg=!Xt4>QhxTUbpHrN)>?#Fil0931y#ZX8&9ec<~1v Cte-Ie diff --git a/java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking$Operation.class b/java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking$Operation.class deleted file mode 100644 index f4611d8d91a50da0c7a272635794db0760152ae9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmaKnF%E)25JmrhvVv&z0#+8<$O&vTG1^FBV!x0Hptu-z@o*L%z(W}q3u9$7e~Lfz z-+#XD4**LH1suZcByTclbbgjmS{AHKv|^R!7g?VRl}+O-*U}V~66g>{tvf2E%AzI+H5Or1p0)@|7b$EQ;O?#DYa%z@V_h` g!DiYP09mRoJiECNb~@<6|7d{FYG9p~38;Lc0k?bSc@73>r~WAu%hP=t!B@-p3yABObhsuW(ZN#D`-&Bi1h`~ z^_c0TfHI+_a{8WOIvnlx#v+Gf(%~i*&Dcm+w4osxu_s<9S+V+q!L|buO^N4nY*BF; zE+>vz<3=ZhE(!B9RJ2H#0}0(oNxhhg?JNfPlR6W=B--U&-Zd@tu2j*6c4j$iWps`B ztc<#vHoA_qnb>nM7KT8Fia2%(EYQZsQo>&h_UIl3W-`(KYJhGPeUN z_Sw13-jK1v@Z*4rgSeImxhZgpZQZ#NAcyDR58*kuPQf7+*F$5r=egZsrcxvcGs6xn z&*sL)*mTYU?dM2AfqgH4ZbIiQ+PP1t7y@xn63#*b8@+bt&2bHS_=}AbMN-9x?C`P_ zqZ^QI7Q$hSDoDv@WF32G&%t&cp*Uh%I}B6BxFo;wA-kGgdl_UESSoUu;N(0~Za^$= zVid@l8FtuWZxE7>V)X+Go+}WM^9sqbN3%$mlh^3kT*}IZumCrzxCze_2$5bAkc#C6LS15D&Fdhx6F=*5p>4hq2f+=ti_!hhT@F9TjG9em~DC@*e0Xo zPd4rQRJ_4u|y~bXwjK?Ye;N{O(x5qxsS$4G!wVW`lq+6YZCj-V@T?pCa_$+L7P8}9b*zO2zIP4B< zrHKW7mX;Xp<)-9hp{&nHrZp=kqv`*ju_?ObwxZozM0GwV2!uUBxJ@pw{pnhqKUvmq zCF?GclX$!2CD2mTqFVrkb?EkvJC%^`Dmu4Fe9k6t0c)yF19OgTb&Y$A+K%eHX6gr6 zP-gy==S6X@Gn9-&-2!VaY>}*#(#8gdv>Gop*YMD{)a#*}B8Mk<8j~zeYIACPl1+FQdSZ%a4H9fo_?Zar)D>XIkeMwL5E)5=;IZM;{vM$DmXMG)T);RpDkf*(l| z{;@!fy`|as80iUfRF~&GGO=?S@6_ZefGgkbb<P7(aiWRsbO5KlN=X1IsCvGori*vdGmk>W6PXmMiAHWBB z{}A7NxQC|$?teU72z;25X5IzwB@HJbq`-%Jd6mPU>PL809R=KnkMgYyQ=qCnxq)XY z`3p}&sY1o*G!|7PX0QZYMlPMVq;lRgPSLtt<12Kal=m&CvHZYEtnBr-u3B*?YNv70 z)4_PjrZYY zRd|ItgWJGPd6g@B!*NIWCa>_#uJCPM;oDu|JH5hpIkVqm%ko{if-3_tR(C7vaV4*9 z{C_|@l1#kpT&I>s@MU(K{EgtN_!>lINb;)deJ^d4aIB)Po;gS-t8mve-kWgPBHzHZ zo^q(L;gJR_@J$whq>2iBi%))*(YN{L!*}pq-UA$4i|_F%PRJhS+fVQawSI%&;ScuH vqxcgZwV(cqzvCaa&cE#IzwPVe_Vr15<#IRS>yd8L7Z~x>n)Tk3xaGoDJugfN1lAf`w%i ziF!Ob{G~cfl`T}hsn!q0@QQ`n9B$1g7+$lm&N8ep8no3+%Sev{frb5cr_*USdjgsB z@jwYIcXgmHrw@HKxs`pNkaBnINxvs2n%{FU6WwW&-01#i>zKsfjHeS%U1;7``Rn?C z=V6n=6kR!s5?_m|68lavnM^XdN;27?Ob4Rw4T_uedPbV&0NZ(maQ0#tjvZsksbyo7 zoSG4%>a3YDR$r(og)NFZFesLgK^Z1pvVbamE3~qPI##hw>=|+tZR*{n%oU3hNyYNg WNyP%QNyQR*tIfBjt%5f3|LiY%h-dcz diff --git a/java/benchmarks/build/classes/java/test/javabushka/client/jedis/JedisClientIT.class b/java/benchmarks/build/classes/java/test/javabushka/client/jedis/JedisClientIT.class deleted file mode 100644 index f6a062a108adf08ab2aae0eb09a527c036a23ce3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3456 zcmcInX?GJ<7=CVAnh=IIq%5svsZi)bX+RW&qLx;cKnmJ~BH+R_xlN~?%+#4lwYYDn zxZ}nrkKg?4ISM^^jz7TTPg0N1of*QU4agS{hsoXE=Y8JgzW41P|J?o^z!SKUL<~)F zG;3Ie7J<~PzMyAJ-706!PR+`qC(v@lung}>fu_Fx$v6@MJJg}6syj2MXNsmFEiW@G zONN^{rM_eSN)mB2t;QN?ajezQiZ+3r4075Et&C_b+LlG` z1$#mfN?^UfF4wNeoH6C-&f>WAX6#b8J7ZVPQnw?$s$+HcdQMgLDwvHLHlagc-3k%k z2N#og2wib(*02Rz=`!0XXJ)JPQRb-YN{22>>i(cWM1hTcz5#(#^PXc^<>8C{lS)&! zhKI3TpxLmdZGrWD{VR_q(Sx0F?9$MSzPbPfSPYOUt+F@clglb{1B%&h!uC;50(*EQ zFP#PHD4iLlb1xmzfK~(bX{N~|8ulxZO%;7kj@edG_s$#M3`ee~Tb`>ZKBnOS4$^ck zIi9Qb1vWI&aj^;F>W>K=7D!YU_bljURVHwR^z+9GX$U;2;VFy=#LD!E3?Tj^+p>k> zm7WW%sh1p;R&l1HJ9CUe&)IqD=$>I)%$`w<#qqR;V>m9bb!Emy1qHOS^m4jKFhjZm zqkY*1Ng5T2=n9=&^$as})N%C1oZ)&tgOeJvIK>zjb+cGCi9aFTs_9X~q0p1dq#BtR z@LCK-ec+siahxITd1jwi13lOvJPqtv2B=c%8Aj`bidGC0Dq4Ag{DTIn5$AijN`>W| zhDmitTFcT>;gYB2VqSVGm7mjaLFHu=qoL-PG(3+NICmv4Veh@HtGkK)le{Nmc8M3Y zEoWHrOtms4oq|4PawVO!8H!2WG1NRC zqE-lz^7zXHu&Yi{X8o$u;`m9XbgHzk^NzsUyr&oE#`XEo`p)G5ql`vTT_Sm?lSfbOAKS0%=;!DH~ct8{GKfg zDKqJcQQP)h&(Y_D_rPsy!IdOl!|QRpp(@^+0zG#>`{ob*ZEq$5#S<%4HAopa`t4JuY#4 z6Sh9V)v9AzpC5627d}4sKFY^DNG3kxYgm857Za+#;y1xD+c)6&@=J}0*REVBH z5@lL0a7WLKug9qADREEf=?J)Q%TddY9}sW;3C&GQ=vUgBe76L)Y@xPoZ2!6=+B$05 zQkcaY5lu?5asCVKarBHV*Iub3su675YA+09vT0Sk+_9=ofpWs@={>CN}Y{b#7alDRZA8s)H_>uIX z@$_)lz~F8EWq>6dUBZbaoKBzZ8n}&TBP(}fG{o2gyNNJJ#37_;OFQ;5PD6~^L2Soi z?8G4wKgd%f5&DBQ`u&*4%k*js4RL(>k!Yr3>N0XyW%L1>rjk-q&Rjy_CeEL~%Oyzc zBfgFxv9&-4F?hX0j1h8G8F2@LF}b)LW516PZc!NbI-p h4o4s1WBw0DpK|mCPpB^GOLj8XTUO(1e2eeV`7em~aLxb# diff --git a/java/benchmarks/build/classes/java/test/javabushka/client/lettuce/LettuceClientIT.class b/java/benchmarks/build/classes/java/test/javabushka/client/lettuce/LettuceClientIT.class deleted file mode 100644 index 80e5e8ce5a991801fcebcf5cd8edc75dc592a836..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2526 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 diff --git a/java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html b/java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html deleted file mode 100644 index d72630017f..0000000000 --- a/java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - -Test results - Class javabushka.client.jedis.JedisClientIT - - - - - -
-

Class javabushka.client.jedis.JedisClientIT

-
-
- - - - - -
-
- - - - - - - -
-
-
4
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
14.703s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Tests

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TestDurationResult
someLibraryMethodReturnsTrue0.002spassed
testResourceInfo0.001spassed
testResourceInfoBySection0.142spassed
testResourceSetGet14.558spassed
-
-
-

Standard output

- -
Avg. time in ms per SET: 0.07751362659
-SET p50 latency in ms: 0.0456
-SET p90 latency in ms: 0.070699
-SET p99 latency in ms: 0.127282
-SET std dev in ms: 0.665195671610232
-Avg. time in ms per GET: 0.06613250047
-GET p50 latency in ms: 0.040224
-GET p90 latency in ms: 0.058583
-GET p99 latency in ms: 0.10689
-GET std dev in ms: 0.6044885619384261
-
-
-
-
-

Standard error

- -
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
-SLF4J: Defaulting to no-operation (NOP) logger implementation
-SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
-
-
-
-
- -
- - diff --git a/java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html b/java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html deleted file mode 100644 index 2c4bf39157..0000000000 --- a/java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Test results - Class javabushka.client.lettuce.LettuceClientIT - - - - - -
-

Class javabushka.client.lettuce.LettuceClientIT

- -
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
19.114s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Tests

- - - - - - - - - - - - - -
TestDurationResult
testResourceSetGet19.114spassed
-
-
-

Standard output

- -
Avg. time in ms per SET: 0.09530544199
-SET p50 latency in ms: 0.055105
-SET p90 latency in ms: 0.089829
-SET p99 latency in ms: 0.184804
-SET std dev in ms: 0.7259927555734456
-Avg. time in ms per GET: 0.08870054313
-GET p50 latency in ms: 0.052371
-GET p90 latency in ms: 0.081338
-GET p99 latency in ms: 0.145727
-GET std dev in ms: 0.6983375291436595
-
-
-
-
- -
- - diff --git a/java/benchmarks/build/reports/tests/test/css/base-style.css b/java/benchmarks/build/reports/tests/test/css/base-style.css deleted file mode 100644 index 4afa73e3dd..0000000000 --- a/java/benchmarks/build/reports/tests/test/css/base-style.css +++ /dev/null @@ -1,179 +0,0 @@ - -body { - margin: 0; - padding: 0; - font-family: sans-serif; - font-size: 12pt; -} - -body, a, a:visited { - color: #303030; -} - -#content { - padding-left: 50px; - padding-right: 50px; - padding-top: 30px; - padding-bottom: 30px; -} - -#content h1 { - font-size: 160%; - margin-bottom: 10px; -} - -#footer { - margin-top: 100px; - font-size: 80%; - white-space: nowrap; -} - -#footer, #footer a { - color: #a0a0a0; -} - -#line-wrapping-toggle { - vertical-align: middle; -} - -#label-for-line-wrapping-toggle { - vertical-align: middle; -} - -ul { - margin-left: 0; -} - -h1, h2, h3 { - white-space: nowrap; -} - -h2 { - font-size: 120%; -} - -ul.tabLinks { - padding-left: 0; - padding-top: 10px; - padding-bottom: 10px; - overflow: auto; - min-width: 800px; - width: auto !important; - width: 800px; -} - -ul.tabLinks li { - float: left; - height: 100%; - list-style: none; - padding-left: 10px; - padding-right: 10px; - padding-top: 5px; - padding-bottom: 5px; - margin-bottom: 0; - -moz-border-radius: 7px; - border-radius: 7px; - margin-right: 25px; - border: solid 1px #d4d4d4; - background-color: #f0f0f0; -} - -ul.tabLinks li:hover { - background-color: #fafafa; -} - -ul.tabLinks li.selected { - background-color: #c5f0f5; - border-color: #c5f0f5; -} - -ul.tabLinks a { - font-size: 120%; - display: block; - outline: none; - text-decoration: none; - margin: 0; - padding: 0; -} - -ul.tabLinks li h2 { - margin: 0; - padding: 0; -} - -div.tab { -} - -div.selected { - display: block; -} - -div.deselected { - display: none; -} - -div.tab table { - min-width: 350px; - width: auto !important; - width: 350px; - border-collapse: collapse; -} - -div.tab th, div.tab table { - border-bottom: solid #d0d0d0 1px; -} - -div.tab th { - text-align: left; - white-space: nowrap; - padding-left: 6em; -} - -div.tab th:first-child { - padding-left: 0; -} - -div.tab td { - white-space: nowrap; - padding-left: 6em; - padding-top: 5px; - padding-bottom: 5px; -} - -div.tab td:first-child { - padding-left: 0; -} - -div.tab td.numeric, div.tab th.numeric { - text-align: right; -} - -span.code { - display: inline-block; - margin-top: 0em; - margin-bottom: 1em; -} - -span.code pre { - font-size: 11pt; - padding-top: 10px; - padding-bottom: 10px; - padding-left: 10px; - padding-right: 10px; - margin: 0; - background-color: #f7f7f7; - border: solid 1px #d0d0d0; - min-width: 700px; - width: auto !important; - width: 700px; -} - -span.wrapped pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: break-all; -} - -label.hidden { - display: none; -} \ No newline at end of file diff --git a/java/benchmarks/build/reports/tests/test/css/style.css b/java/benchmarks/build/reports/tests/test/css/style.css deleted file mode 100644 index 3dc4913e7a..0000000000 --- a/java/benchmarks/build/reports/tests/test/css/style.css +++ /dev/null @@ -1,84 +0,0 @@ - -#summary { - margin-top: 30px; - margin-bottom: 40px; -} - -#summary table { - border-collapse: collapse; -} - -#summary td { - vertical-align: top; -} - -.breadcrumbs, .breadcrumbs a { - color: #606060; -} - -.infoBox { - width: 110px; - padding-top: 15px; - padding-bottom: 15px; - text-align: center; -} - -.infoBox p { - margin: 0; -} - -.counter, .percent { - font-size: 120%; - font-weight: bold; - margin-bottom: 8px; -} - -#duration { - width: 125px; -} - -#successRate, .summaryGroup { - border: solid 2px #d0d0d0; - -moz-border-radius: 10px; - border-radius: 10px; -} - -#successRate { - width: 140px; - margin-left: 35px; -} - -#successRate .percent { - font-size: 180%; -} - -.success, .success a { - color: #008000; -} - -div.success, #successRate.success { - background-color: #bbd9bb; - border-color: #008000; -} - -.failures, .failures a { - color: #b60808; -} - -.skipped, .skipped a { - color: #c09853; -} - -div.failures, #successRate.failures { - background-color: #ecdada; - border-color: #b60808; -} - -ul.linkList { - padding-left: 0; -} - -ul.linkList li { - list-style: none; - margin-bottom: 5px; -} diff --git a/java/benchmarks/build/reports/tests/test/index.html b/java/benchmarks/build/reports/tests/test/index.html deleted file mode 100644 index f03c715ec6..0000000000 --- a/java/benchmarks/build/reports/tests/test/index.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - -Test results - Test Summary - - - - - -
-

Test Summary

-
- - - - - -
-
- - - - - - - -
-
-
5
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
33.817s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Packages

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PackageTestsFailuresIgnoredDurationSuccess rate
-javabushka.client.jedis -40014.703s100%
-javabushka.client.lettuce -10019.114s100%
-
-
-

Classes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-javabushka.client.jedis.JedisClientIT -40014.703s100%
-javabushka.client.lettuce.LettuceClientIT -10019.114s100%
-
-
- -
- - diff --git a/java/benchmarks/build/reports/tests/test/js/report.js b/java/benchmarks/build/reports/tests/test/js/report.js deleted file mode 100644 index 83bab4a19f..0000000000 --- a/java/benchmarks/build/reports/tests/test/js/report.js +++ /dev/null @@ -1,194 +0,0 @@ -(function (window, document) { - "use strict"; - - var tabs = {}; - - function changeElementClass(element, classValue) { - if (element.getAttribute("className")) { - element.setAttribute("className", classValue); - } else { - element.setAttribute("class", classValue); - } - } - - function getClassAttribute(element) { - if (element.getAttribute("className")) { - return element.getAttribute("className"); - } else { - return element.getAttribute("class"); - } - } - - function addClass(element, classValue) { - changeElementClass(element, getClassAttribute(element) + " " + classValue); - } - - function removeClass(element, classValue) { - changeElementClass(element, getClassAttribute(element).replace(classValue, "")); - } - - function initTabs() { - var container = document.getElementById("tabs"); - - tabs.tabs = findTabs(container); - tabs.titles = findTitles(tabs.tabs); - tabs.headers = findHeaders(container); - tabs.select = select; - tabs.deselectAll = deselectAll; - tabs.select(0); - - return true; - } - - function getCheckBox() { - return document.getElementById("line-wrapping-toggle"); - } - - function getLabelForCheckBox() { - return document.getElementById("label-for-line-wrapping-toggle"); - } - - function findCodeBlocks() { - var spans = document.getElementById("tabs").getElementsByTagName("span"); - var codeBlocks = []; - for (var i = 0; i < spans.length; ++i) { - if (spans[i].className.indexOf("code") >= 0) { - codeBlocks.push(spans[i]); - } - } - return codeBlocks; - } - - function forAllCodeBlocks(operation) { - var codeBlocks = findCodeBlocks(); - - for (var i = 0; i < codeBlocks.length; ++i) { - operation(codeBlocks[i], "wrapped"); - } - } - - function toggleLineWrapping() { - var checkBox = getCheckBox(); - - if (checkBox.checked) { - forAllCodeBlocks(addClass); - } else { - forAllCodeBlocks(removeClass); - } - } - - function initControls() { - if (findCodeBlocks().length > 0) { - var checkBox = getCheckBox(); - var label = getLabelForCheckBox(); - - checkBox.onclick = toggleLineWrapping; - checkBox.checked = false; - - removeClass(label, "hidden"); - } - } - - function switchTab() { - var id = this.id.substr(1); - - for (var i = 0; i < tabs.tabs.length; i++) { - if (tabs.tabs[i].id === id) { - tabs.select(i); - break; - } - } - - return false; - } - - function select(i) { - this.deselectAll(); - - changeElementClass(this.tabs[i], "tab selected"); - changeElementClass(this.headers[i], "selected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var h2 = document.createElement("H2"); - - h2.appendChild(document.createTextNode(this.titles[i])); - this.headers[i].appendChild(h2); - } - - function deselectAll() { - for (var i = 0; i < this.tabs.length; i++) { - changeElementClass(this.tabs[i], "tab deselected"); - changeElementClass(this.headers[i], "deselected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var a = document.createElement("A"); - - a.setAttribute("id", "ltab" + i); - a.setAttribute("href", "#tab" + i); - a.onclick = switchTab; - a.appendChild(document.createTextNode(this.titles[i])); - - this.headers[i].appendChild(a); - } - } - - function findTabs(container) { - return findChildElements(container, "DIV", "tab"); - } - - function findHeaders(container) { - var owner = findChildElements(container, "UL", "tabLinks"); - return findChildElements(owner[0], "LI", null); - } - - function findTitles(tabs) { - var titles = []; - - for (var i = 0; i < tabs.length; i++) { - var tab = tabs[i]; - var header = findChildElements(tab, "H2", null)[0]; - - header.parentNode.removeChild(header); - - if (header.innerText) { - titles.push(header.innerText); - } else { - titles.push(header.textContent); - } - } - - return titles; - } - - function findChildElements(container, name, targetClass) { - var elements = []; - var children = container.childNodes; - - for (var i = 0; i < children.length; i++) { - var child = children.item(i); - - if (child.nodeType === 1 && child.nodeName === name) { - if (targetClass && child.className.indexOf(targetClass) < 0) { - continue; - } - - elements.push(child); - } - } - - return elements; - } - - // Entry point. - - window.onload = function() { - initTabs(); - initControls(); - }; -} (window, window.document)); \ No newline at end of file diff --git a/java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html b/java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html deleted file mode 100644 index 6fe5059ebd..0000000000 --- a/java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -Test results - Package javabushka.client.jedis - - - - - -
-

Package javabushka.client.jedis

- -
- - - - - -
-
- - - - - - - -
-
-
4
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
14.703s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Classes

- - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-JedisClientIT -40014.703s100%
-
-
- -
- - diff --git a/java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html b/java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html deleted file mode 100644 index 72ed2f2290..0000000000 --- a/java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -Test results - Package javabushka.client.lettuce - - - - - -
-

Package javabushka.client.lettuce

- -
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
19.114s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Classes

- - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-LettuceClientIT -10019.114s100%
-
-
- -
- - diff --git a/java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml b/java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml deleted file mode 100644 index f76c23081b..0000000000 --- a/java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - diff --git a/java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml b/java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml deleted file mode 100644 index 15ab216e63..0000000000 --- a/java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - diff --git a/java/benchmarks/build/test-results/test/binary/output.bin b/java/benchmarks/build/test-results/test/binary/output.bin deleted file mode 100644 index 76f5d5a3a126375fb8bd3081dabee2c02a09ac91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 990 zcmZ{i+iKfD5QbwHZ16+0LrT;1qVk?*555Q_v?-L(7StCI)>>B432774x9_g3;DXn; z;-7E7`A1jt*?s!-D86stF)J&ZgKME`vmCZnHVkmx_C+#OJMkwe>#j;tm$`EL)E0&9 zAIc`T{dKasn$PYg$QQfIo-0>2MF2JJ=eD!GA88x7{qghHC(jO}5MZ{pO~AEHAfyu^ zwHEfyb({72a5zkFdyDn9&FzrvU0uCDw}4&S!|u6vdk@d8^ScbmYBqoK@&2Vqz?HRy zvVnR4?*r-A-y0waQ3@%SOriFEFiBUl4>A~ute zZE{I!aY;~Waeir0a%ymDiF;}Z79oaJQyC$85}g^CmSMUmD>WsvSkDVY!dyd~DzK@W z@2ayf&O&yHXI@&qQ)O^!a!F=>9&QLVZ7(fn{!Ser~Ey wW>QgNQKfHcNk)E3P-;nOQC@LKQE4h(Nd_jUDN`9(C!)I?Lx2GqdScTU0BB*aK>z>% diff --git a/java/benchmarks/build/tmp/compileJava/previous-compilation-data.bin b/java/benchmarks/build/tmp/compileJava/previous-compilation-data.bin deleted file mode 100644 index 6e1548148fc2e70edbaa1e9bd2596ac50d9e49cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38419 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 diff --git a/java/benchmarks/build/tmp/compileTestJava/compileTransaction/stash-dir/JedisClientIT.class.uniqueId0 b/java/benchmarks/build/tmp/compileTestJava/compileTransaction/stash-dir/JedisClientIT.class.uniqueId0 deleted file mode 100644 index 5480044a03743ee4719cdf7fc8c9b963a7cfe602..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3464 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 Ra+f+i^FDco1F|(7{sni?owNV| diff --git a/java/lib/build/libs/lib.jar b/java/lib/build/libs/lib.jar deleted file mode 100644 index 77f1a996552b93a2c207a0cde3f2505656498e79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 723 zcmWIWW@Zs#VBp|jNSv$|&Hw~VAOZ+Df!NnI#8KDN&rP41Apk|;rh2A#(m(~0Kn&E5 zQ0VLE=jrAe9HQsz_SyH$X&-N0y^Flwx?1PXoZlQ|aK-q+(??I4kPKVARRzUXZlGaV ziDijNrNtT9i757hl(Nq-wR#6slEBEoAc3mXCo`!iv8YlnIVZ8WIMv_U?}&lOoatxP zygAEp%G+fI)`qql`|=fuquAE7IoO zJO2E(bwh9pCsR*Si{`Noj?GgmL@IS>{r(fRF65@*BH_C)-t`#Vx*dOHhJaD}q}piP zjy)GHas77TIDa-sa9L~KmC*guPTk{*+&oEinaEeCh_^e$53jqVo4EW(e5ucj?P+Um z_J+i!PCNX~+NmhHDtZ<7Td$ye%Ocequ4lII5O26+YGXd*Y0nW0y9(C5Joh=zX9y_g zeDc}P+Y{Z>lIv6Z<3fA$hoAmMpR^_asH8K`u4fGJW@Hj!#vP5ofC2&mhPRF&8Xl?W z+R!5vq!V9yBYM0-G=i*Nh^i4KmIJ(5*+42; Ofba*9J_<|~3=9Ckh0YZK diff --git a/java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html b/java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html deleted file mode 100644 index 3031b841d0..0000000000 --- a/java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - -Test results - Class javabushka.LibraryTest - - - - - -
-

Class javabushka.LibraryTest

- -
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
0.002s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Tests

- - - - - - - - - - - - - -
TestDurationResult
someLibraryMethodReturnsTrue0.002spassed
-
-
- -
- - diff --git a/java/lib/build/reports/tests/test/css/base-style.css b/java/lib/build/reports/tests/test/css/base-style.css deleted file mode 100644 index 4afa73e3dd..0000000000 --- a/java/lib/build/reports/tests/test/css/base-style.css +++ /dev/null @@ -1,179 +0,0 @@ - -body { - margin: 0; - padding: 0; - font-family: sans-serif; - font-size: 12pt; -} - -body, a, a:visited { - color: #303030; -} - -#content { - padding-left: 50px; - padding-right: 50px; - padding-top: 30px; - padding-bottom: 30px; -} - -#content h1 { - font-size: 160%; - margin-bottom: 10px; -} - -#footer { - margin-top: 100px; - font-size: 80%; - white-space: nowrap; -} - -#footer, #footer a { - color: #a0a0a0; -} - -#line-wrapping-toggle { - vertical-align: middle; -} - -#label-for-line-wrapping-toggle { - vertical-align: middle; -} - -ul { - margin-left: 0; -} - -h1, h2, h3 { - white-space: nowrap; -} - -h2 { - font-size: 120%; -} - -ul.tabLinks { - padding-left: 0; - padding-top: 10px; - padding-bottom: 10px; - overflow: auto; - min-width: 800px; - width: auto !important; - width: 800px; -} - -ul.tabLinks li { - float: left; - height: 100%; - list-style: none; - padding-left: 10px; - padding-right: 10px; - padding-top: 5px; - padding-bottom: 5px; - margin-bottom: 0; - -moz-border-radius: 7px; - border-radius: 7px; - margin-right: 25px; - border: solid 1px #d4d4d4; - background-color: #f0f0f0; -} - -ul.tabLinks li:hover { - background-color: #fafafa; -} - -ul.tabLinks li.selected { - background-color: #c5f0f5; - border-color: #c5f0f5; -} - -ul.tabLinks a { - font-size: 120%; - display: block; - outline: none; - text-decoration: none; - margin: 0; - padding: 0; -} - -ul.tabLinks li h2 { - margin: 0; - padding: 0; -} - -div.tab { -} - -div.selected { - display: block; -} - -div.deselected { - display: none; -} - -div.tab table { - min-width: 350px; - width: auto !important; - width: 350px; - border-collapse: collapse; -} - -div.tab th, div.tab table { - border-bottom: solid #d0d0d0 1px; -} - -div.tab th { - text-align: left; - white-space: nowrap; - padding-left: 6em; -} - -div.tab th:first-child { - padding-left: 0; -} - -div.tab td { - white-space: nowrap; - padding-left: 6em; - padding-top: 5px; - padding-bottom: 5px; -} - -div.tab td:first-child { - padding-left: 0; -} - -div.tab td.numeric, div.tab th.numeric { - text-align: right; -} - -span.code { - display: inline-block; - margin-top: 0em; - margin-bottom: 1em; -} - -span.code pre { - font-size: 11pt; - padding-top: 10px; - padding-bottom: 10px; - padding-left: 10px; - padding-right: 10px; - margin: 0; - background-color: #f7f7f7; - border: solid 1px #d0d0d0; - min-width: 700px; - width: auto !important; - width: 700px; -} - -span.wrapped pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: break-all; -} - -label.hidden { - display: none; -} \ No newline at end of file diff --git a/java/lib/build/reports/tests/test/css/style.css b/java/lib/build/reports/tests/test/css/style.css deleted file mode 100644 index 3dc4913e7a..0000000000 --- a/java/lib/build/reports/tests/test/css/style.css +++ /dev/null @@ -1,84 +0,0 @@ - -#summary { - margin-top: 30px; - margin-bottom: 40px; -} - -#summary table { - border-collapse: collapse; -} - -#summary td { - vertical-align: top; -} - -.breadcrumbs, .breadcrumbs a { - color: #606060; -} - -.infoBox { - width: 110px; - padding-top: 15px; - padding-bottom: 15px; - text-align: center; -} - -.infoBox p { - margin: 0; -} - -.counter, .percent { - font-size: 120%; - font-weight: bold; - margin-bottom: 8px; -} - -#duration { - width: 125px; -} - -#successRate, .summaryGroup { - border: solid 2px #d0d0d0; - -moz-border-radius: 10px; - border-radius: 10px; -} - -#successRate { - width: 140px; - margin-left: 35px; -} - -#successRate .percent { - font-size: 180%; -} - -.success, .success a { - color: #008000; -} - -div.success, #successRate.success { - background-color: #bbd9bb; - border-color: #008000; -} - -.failures, .failures a { - color: #b60808; -} - -.skipped, .skipped a { - color: #c09853; -} - -div.failures, #successRate.failures { - background-color: #ecdada; - border-color: #b60808; -} - -ul.linkList { - padding-left: 0; -} - -ul.linkList li { - list-style: none; - margin-bottom: 5px; -} diff --git a/java/lib/build/reports/tests/test/index.html b/java/lib/build/reports/tests/test/index.html deleted file mode 100644 index 837e00ab79..0000000000 --- a/java/lib/build/reports/tests/test/index.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - -Test results - Test Summary - - - - - -
-

Test Summary

-
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
0.002s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Packages

- - - - - - - - - - - - - - - - - - - - - -
PackageTestsFailuresIgnoredDurationSuccess rate
-javabushka -1000.002s100%
-
-
-

Classes

- - - - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-javabushka.LibraryTest -1000.002s100%
-
-
- -
- - diff --git a/java/lib/build/reports/tests/test/js/report.js b/java/lib/build/reports/tests/test/js/report.js deleted file mode 100644 index 83bab4a19f..0000000000 --- a/java/lib/build/reports/tests/test/js/report.js +++ /dev/null @@ -1,194 +0,0 @@ -(function (window, document) { - "use strict"; - - var tabs = {}; - - function changeElementClass(element, classValue) { - if (element.getAttribute("className")) { - element.setAttribute("className", classValue); - } else { - element.setAttribute("class", classValue); - } - } - - function getClassAttribute(element) { - if (element.getAttribute("className")) { - return element.getAttribute("className"); - } else { - return element.getAttribute("class"); - } - } - - function addClass(element, classValue) { - changeElementClass(element, getClassAttribute(element) + " " + classValue); - } - - function removeClass(element, classValue) { - changeElementClass(element, getClassAttribute(element).replace(classValue, "")); - } - - function initTabs() { - var container = document.getElementById("tabs"); - - tabs.tabs = findTabs(container); - tabs.titles = findTitles(tabs.tabs); - tabs.headers = findHeaders(container); - tabs.select = select; - tabs.deselectAll = deselectAll; - tabs.select(0); - - return true; - } - - function getCheckBox() { - return document.getElementById("line-wrapping-toggle"); - } - - function getLabelForCheckBox() { - return document.getElementById("label-for-line-wrapping-toggle"); - } - - function findCodeBlocks() { - var spans = document.getElementById("tabs").getElementsByTagName("span"); - var codeBlocks = []; - for (var i = 0; i < spans.length; ++i) { - if (spans[i].className.indexOf("code") >= 0) { - codeBlocks.push(spans[i]); - } - } - return codeBlocks; - } - - function forAllCodeBlocks(operation) { - var codeBlocks = findCodeBlocks(); - - for (var i = 0; i < codeBlocks.length; ++i) { - operation(codeBlocks[i], "wrapped"); - } - } - - function toggleLineWrapping() { - var checkBox = getCheckBox(); - - if (checkBox.checked) { - forAllCodeBlocks(addClass); - } else { - forAllCodeBlocks(removeClass); - } - } - - function initControls() { - if (findCodeBlocks().length > 0) { - var checkBox = getCheckBox(); - var label = getLabelForCheckBox(); - - checkBox.onclick = toggleLineWrapping; - checkBox.checked = false; - - removeClass(label, "hidden"); - } - } - - function switchTab() { - var id = this.id.substr(1); - - for (var i = 0; i < tabs.tabs.length; i++) { - if (tabs.tabs[i].id === id) { - tabs.select(i); - break; - } - } - - return false; - } - - function select(i) { - this.deselectAll(); - - changeElementClass(this.tabs[i], "tab selected"); - changeElementClass(this.headers[i], "selected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var h2 = document.createElement("H2"); - - h2.appendChild(document.createTextNode(this.titles[i])); - this.headers[i].appendChild(h2); - } - - function deselectAll() { - for (var i = 0; i < this.tabs.length; i++) { - changeElementClass(this.tabs[i], "tab deselected"); - changeElementClass(this.headers[i], "deselected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var a = document.createElement("A"); - - a.setAttribute("id", "ltab" + i); - a.setAttribute("href", "#tab" + i); - a.onclick = switchTab; - a.appendChild(document.createTextNode(this.titles[i])); - - this.headers[i].appendChild(a); - } - } - - function findTabs(container) { - return findChildElements(container, "DIV", "tab"); - } - - function findHeaders(container) { - var owner = findChildElements(container, "UL", "tabLinks"); - return findChildElements(owner[0], "LI", null); - } - - function findTitles(tabs) { - var titles = []; - - for (var i = 0; i < tabs.length; i++) { - var tab = tabs[i]; - var header = findChildElements(tab, "H2", null)[0]; - - header.parentNode.removeChild(header); - - if (header.innerText) { - titles.push(header.innerText); - } else { - titles.push(header.textContent); - } - } - - return titles; - } - - function findChildElements(container, name, targetClass) { - var elements = []; - var children = container.childNodes; - - for (var i = 0; i < children.length; i++) { - var child = children.item(i); - - if (child.nodeType === 1 && child.nodeName === name) { - if (targetClass && child.className.indexOf(targetClass) < 0) { - continue; - } - - elements.push(child); - } - } - - return elements; - } - - // Entry point. - - window.onload = function() { - initTabs(); - initControls(); - }; -} (window, window.document)); \ No newline at end of file diff --git a/java/lib/build/reports/tests/test/packages/javabushka.html b/java/lib/build/reports/tests/test/packages/javabushka.html deleted file mode 100644 index c50fe5999a..0000000000 --- a/java/lib/build/reports/tests/test/packages/javabushka.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -Test results - Package javabushka - - - - - -
-

Package javabushka

- -
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
0.002s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Classes

- - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-LibraryTest -1000.002s100%
-
-
- -
- - diff --git a/java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml b/java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml deleted file mode 100644 index d06e1fe97d..0000000000 --- a/java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/java/lib/build/test-results/test/binary/output.bin b/java/lib/build/test-results/test/binary/output.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/java/lib/build/test-results/test/binary/output.bin.idx b/java/lib/build/test-results/test/binary/output.bin.idx deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/java/lib/build/test-results/test/binary/results.bin b/java/lib/build/test-results/test/binary/results.bin deleted file mode 100644 index f5767307578ed46df57c9e327fa93b66a3c43c2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZQ(WSX9pSeBSnTAY!csOOWJRFqg$8IoFDf+*GIr-_(+f Z{FI>7lG38Q;*g@!RJ@W5Oi)vb82})PFZTcd diff --git a/java/lib/build/tmp/compileJava/previous-compilation-data.bin b/java/lib/build/tmp/compileJava/previous-compilation-data.bin deleted file mode 100644 index 28d5565cd61893d10507bce77ba30fa1dca615b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2859 zcmb7GYgAKL7CzgcP&M=@SQXS#MNu(FO9ez!27?hagg1(>dWkp5C6{~S%?%J=hzTGs zUkE5nt*upjfcU6FtAZ9P)Uj%*S_kK4N2g=!YpF|})-LCScD3_s*2=wW<*ajZ_TJz3 z?S1w=fV4pRpt39`hsm^AO=d=c3OrCTmnkul9a~=n-d?sS;Z?%Rt4~{o%iRdANB{Hu zHVN)a`Vmj!MP5Try_nq}6&pp-$g=}bF`Z_M!a(HUL?x=QFnTj%WL2DC5b>t8#*~nV zK8>kQBDUvDK4tb!dp#MGL1ZxTA--e?c>_5`$v6~k)tgwonUxF@lg;Lel6k-|RA`eq zemE+YSc@pheyDJzjo}sksHk^70+k7_1M1BIY zeMNcSE#!K_#te6&&2_gdkJXERhY?w(v%Us72*%R7ISHYR?y zPL~j!n3zP8NeU`*)mUCCD*IhSMH(t)TuGH#$(oKF61#ws5Cj{~FGL&c8K{^wFg9Ms zyOsa>wlVNYw??Qx^OwCHs~3^Q#B&M#+p1?QtP-P6-g==sYW~uvucW~#mHn0`FVnu8 z9JL&6WMzgE*cA*aq&WFZDz+(t^Re(eHPuBHaJUX*72I` zWFbx@7P6A~N~kEuRS)+wLWw97_Z2zguLmcnzx!pr4&J2F{n2}LJ7=^ zDh0G5qzsTFGfPnps9c~&-9q`$g2fGON4c#gW#iOv+vioK7g{SIVH4;!!<;RUx)tW~ z3WXwf8#NVJ9DUV3mgpBpbu66wXP+&(ODaLT9RjN$sTyKb8KH_AKu*po1WZ<-I}o`JNp>c2bJ9fXXZqm)#54s>F}4UB7vzId1c<@fV_A8=D?k2MK?K6xDlx zifx%Pt=nA`wgHD6x)gi2O5N7;_}2C<6~{B)hnTz!JaXVs$Bi$mFSLF*dUef}cRO|i z`GCgwkjj|N$h29!*tGh9kso)=*-`V487*n+_5k^aZrDpTlUM`K>SZPVIa^iL6Eo;l zW5y55*S3VU?t|ERh^vDAG_Y_0PzlG<=BhW@@%@q=&IV0p(7MST19p~g4Lt}8Rvn^r zO{{=J2O1xp-(1JF4XqkEZjI-xnRtK8oXhh!kG~uF)T`;uxOg*wW^xV__ zt;C(_e|shPx17Fjo6=x@k2~B1qSu zoAIoz84_AxLDVM{JIk0qrE=Nmk;c#MS+fmqra1@8+WS96h?h@6;%SJEIzv-tlSPT; zS;oq?QX^61@xAL0d`lk8UZg8KRDT4Y+t>!_XCX~IM-wNQ1u<9njMfXoV`;-QA^h*N z^2D}@|Ne18?8|l_9Y8*(0EeBYj`gCTw@DJ!Ly0{M?ak`Zd;8}!92!26>qMQ9)&=AX zAQyo6{s~a2wYMZV!RV(Lfq(Q(+BME&&U3G!+h>|%CTlJN`I36QMA>9goJy<+o_YuA zUev_iw3W1v*DtvYR5q9qT>ocheu)Ti&h#_~HR;@aB zqU=~f_4E87ZW~Vr1T&F_{#F6KI{ZImOWk&^ciSS% zZHqh#-9ZZp=%__baN9wV`z96cn^d~+QHks5=;?$Cpb7KNqA7d-7vTHopzsc+3kO{b zl+jGLnH+N;R}^!YC^G7o0} diff --git a/java/lib/build/tmp/compileTestJava/previous-compilation-data.bin b/java/lib/build/tmp/compileTestJava/previous-compilation-data.bin deleted file mode 100644 index 08a1bf7d5fb3fc7dd6ce4bb2f2ad4410e30da8d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3207 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 diff --git a/java/lib/build/tmp/jar/MANIFEST.MF b/java/lib/build/tmp/jar/MANIFEST.MF deleted file mode 100644 index 58630c02ef..0000000000 --- a/java/lib/build/tmp/jar/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - diff --git a/submodules/redis-rs b/submodules/redis-rs deleted file mode 160000 index ca6b9cb57a..0000000000 --- a/submodules/redis-rs +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ca6b9cb57a78d9164febe3878eff68043ab5bed0 From 8203c4d5f2c14d8ea955de657a6f3a19f36a9803 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Fri, 8 Sep 2023 13:30:53 -0700 Subject: [PATCH 04/81] Update gitignore and remove generated files from git Signed-off-by: acarbonetto --- .gitignore | 3 --- .vscode/launch.json | 42 ------------------------------------------ .vscode/settings.json | 37 ------------------------------------- .vscode/tasks.json | 41 ----------------------------------------- java/.gitignore | 1 + 5 files changed, 1 insertion(+), 123 deletions(-) delete mode 100644 .vscode/launch.json delete mode 100644 .vscode/settings.json delete mode 100644 .vscode/tasks.json diff --git a/.gitignore b/.gitignore index 10981abe53..92ac3aaf47 100644 --- a/.gitignore +++ b/.gitignore @@ -15,10 +15,7 @@ Cargo.lock *.pdb dump.rdb .env -.idea benchmarks/results -benchmarks/build -lib/build # lock files diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index d13870c92e..0000000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - // Use IntelliSense to find out which attributes exist for C# debugging - // Use hover for the description of the existing attributes - // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md - "name": ".NET Core Launch (console)", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build", - // If you have changed target frameworks, make sure to update the program path. - "program": "${workspaceFolder}/csharp/tests/bin/Debug/net6.0/tests.dll", - "args": [], - "cwd": "${workspaceFolder}/csharp/tests", - // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": ".NET Core Attach", - "type": "coreclr", - "request": "attach" - }, - { - "name": "C# benchmark Launch (console)", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build", - "program": "${workspaceFolder}/benchmarks/csharp/bin/Debug/net6.0/csharp_benchmark.dll", - "args": [], - "cwd": "${workspaceFolder}/benchmarks/csharp", - "console": "internalConsole", - "stopAtEntry": true - }, - { - "name": ".NET Core Attach", - "type": "coreclr", - "request": "attach" - } - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 70ac6dd315..0000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "editor.insertSpaces": true, - "editor.tabSize": 4, - "editor.codeActionsOnSave": { - "source.organizeImports": true - }, - "editor.formatOnSave": true, - "files.insertFinalNewline": true, - "files.trimFinalNewlines": true, - "python.formatting.provider": "black", - "rust-analyzer.linkedProjects": [ - "babushka-core/Cargo.toml", - "python/Cargo.toml", - "node/rust-client/Cargo.toml", - "logger_core/Cargo.toml", - "csharp/lib/Cargo.toml", - "submodules/redis-rs/Cargo.toml", - "benchmarks/rust/Cargo.toml" - ], - "rust-analyzer.runnableEnv": { - "REDISRS_SERVER_TYPE": "tcp" - }, - "python.testing.pytestArgs": ["python"], - "python.testing.unittestEnabled": false, - "python.testing.pytestEnabled": true, - "[yaml]": { - "editor.tabSize": 4 - }, - "python.linting.flake8Enabled": false, - "python.linting.enabled": true, - "python.linting.flake8Args": [ - "--extend-ignore=E203", - "--max-line-length=127" - ], - "python.formatting.blackArgs": ["--target-version", "py36"], - "isort.args": ["--profile", "black"] -} diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index f5f11a93a9..0000000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "build", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/csharp/tests/tests.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/csharp/tests/tests.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "--project", - "${workspaceFolder}/csharp/tests/tests.csproj" - ], - "problemMatcher": "$msCompile" - } - ] -} \ No newline at end of file diff --git a/java/.gitignore b/java/.gitignore index 1b6985c009..c68362cbb2 100644 --- a/java/.gitignore +++ b/java/.gitignore @@ -3,3 +3,4 @@ # Ignore Gradle build output directory build +.idea From e517744a7d80712f08fc0dbdd362d3553ee5bf43 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Fri, 8 Sep 2023 13:45:34 -0700 Subject: [PATCH 05/81] Update gitignore and remove generated files from git Signed-off-by: acarbonetto --- java/changes.diff | 210 ---------------------------------------------- 1 file changed, 210 deletions(-) delete mode 100644 java/changes.diff diff --git a/java/changes.diff b/java/changes.diff deleted file mode 100644 index aa01c5888e..0000000000 --- a/java/changes.diff +++ /dev/null @@ -1,210 +0,0 @@ -diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle -index 083fd57..20a4142 100644 ---- a/java/benchmarks/build.gradle -+++ b/java/benchmarks/build.gradle -@@ -27,3 +27,11 @@ java { - languageVersion = JavaLanguageVersion.of(17) - } - } -+ -+tasks.withType(Test) { -+ testLogging { -+ exceptionFormat "full" -+ events "started", "skipped", "passed", "failed" -+ showStandardStreams true -+ } -+} -diff --git a/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java b/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java -new file mode 100644 -index 0000000..ba5d6f5 ---- /dev/null -+++ b/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java -@@ -0,0 +1,68 @@ -+package javabushka.client; -+ -+import javabushka.client.LatencyResults; -+import java.util.ArrayList; -+import java.util.stream.Collectors; -+import java.util.Collections; -+ -+public class Benchmarking { -+ static final int SIZE_SET_KEYSPACE = 3000000; -+ -+ public static String generateKeySet() { -+ return (Math.floor(Math.random() * SIZE_SET_KEYSPACE) + 1) + ""; -+ } -+ -+ public interface Operation { -+ void go(); -+ } -+ -+ public static ArrayList getLatencies(int iterations, Operation op) { -+ ArrayList latencies = new ArrayList(); -+ for (int i = 0; i latencies, int percentile) { -+ return latencies.get((int) Math.ceil((percentile / 100.0) * latencies.size())); -+ } -+ -+ private static double stdDeviation(ArrayList latencies, Double avgLatency) { -+ double stdDeviation = latencies.stream() -+ .mapToDouble(Long::doubleValue) -+ .reduce(0.0, (stdDev, latency) -> stdDev + Math.pow(latency - avgLatency, 2)); -+ return Math.sqrt(stdDeviation / latencies.size()); -+ } -+ -+ // This has the side-effect of sorting the latencies ArrayList -+ public static LatencyResults calculateResults(ArrayList latencies) { -+ Double avgLatency = latencies -+ .stream() -+ .collect(Collectors.summingLong(Long::longValue)) / Double.valueOf(latencies.size()); -+ -+ Collections.sort(latencies); -+ return new LatencyResults( -+ avgLatency, -+ percentile(latencies, 50), -+ percentile(latencies, 90), -+ percentile(latencies, 99), -+ stdDeviation(latencies, avgLatency) -+ ); -+ } -+ -+ public static void printResults(String operation, LatencyResults results) { -+ System.out.println( -+ "Avg. time in ms per " + operation + ": " + results.avgLatency / 1000000.0 -+ ); -+ System.out.println(operation + " p50 latency in ms: " + results.p50Latency / 1000000.0); -+ System.out.println(operation + " p90 latency in ms: " + results.p90Latency / 1000000.0); -+ System.out.println(operation + " p99 latency in ms: " + results.p99Latency / 1000000.0); -+ System.out.println(operation + " std dev in ms: " + results.stdDeviation / 1000000.0); -+ } -+ -+} -\ No newline at end of file -diff --git a/java/benchmarks/src/test/java/javabushka/client/LatencyResults.java b/java/benchmarks/src/test/java/javabushka/client/LatencyResults.java -new file mode 100644 -index 0000000..320ec07 ---- /dev/null -+++ b/java/benchmarks/src/test/java/javabushka/client/LatencyResults.java -@@ -0,0 +1,24 @@ -+package javabushka.client; -+ -+// Raw timing results in nanoseconds -+public class LatencyResults { -+ public final double avgLatency; -+ public final long p50Latency; -+ public final long p90Latency; -+ public final long p99Latency; -+ public final double stdDeviation; -+ -+ public LatencyResults( -+ double avgLatency, -+ long p50Latency, -+ long p90Latency, -+ long p99Latency, -+ double stdDeviation -+ ) { -+ this.avgLatency = avgLatency; -+ this.p50Latency = p50Latency; -+ this.p90Latency = p90Latency; -+ this.p99Latency = p99Latency; -+ this.stdDeviation = stdDeviation; -+ } -+} -diff --git a/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java b/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java -index 86b2ae0..249be43 100644 ---- a/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java -+++ b/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java -@@ -6,6 +6,7 @@ package javabushka.client.jedis; - import static org.junit.Assert.assertEquals; - import static org.junit.Assert.assertTrue; - -+import javabushka.client.Benchmarking; - import org.junit.Before; - import org.junit.Test; - -@@ -39,12 +40,27 @@ public class JedisClientIT { - } - - @Test public void testResourceSetGet() { -- String key = "name"; -+ int iterations = 100000; - String value = "my-value"; - -- jedisClient.set(key, value); -- String result = jedisClient.get(key); -- -- assertEquals(value, result); -+ Benchmarking.printResults( -+ "SET", -+ Benchmarking.calculateResults( -+ Benchmarking.getLatencies( -+ iterations, -+ () -> jedisClient.set(Benchmarking.generateKeySet(), value) -+ ) -+ ) -+ ); -+ Benchmarking.printResults( -+ "GET", -+ Benchmarking.calculateResults( -+ Benchmarking.getLatencies( -+ iterations, -+ () -> jedisClient.get(Benchmarking.generateKeySet()) -+ ) -+ ) -+ ); - } - } -+ -diff --git a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java -index 20100e0..da986ac 100644 ---- a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java -+++ b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java -@@ -5,6 +5,7 @@ package javabushka.client.lettuce; - - import static org.junit.Assert.assertEquals; - -+import javabushka.client.Benchmarking; - import org.junit.After; - import org.junit.Before; - import org.junit.Test; -@@ -25,12 +26,26 @@ public class LettuceClientIT { - } - - @Test public void testResourceSetGet() { -- String key = "name"; -+ int iterations = 100000; - String value = "my-value"; - -- lettuceClient.set(key, value); -- String result = lettuceClient.get(key); -- -- assertEquals(value, result); -+ Benchmarking.printResults( -+ "SET", -+ Benchmarking.calculateResults( -+ Benchmarking.getLatencies( -+ iterations, -+ () -> lettuceClient.set(Benchmarking.generateKeySet(), value) -+ ) -+ ) -+ ); -+ Benchmarking.printResults( -+ "GET", -+ Benchmarking.calculateResults( -+ Benchmarking.getLatencies( -+ iterations, -+ () -> lettuceClient.get(Benchmarking.generateKeySet()) -+ ) -+ ) -+ ); - } - } From 2a11e9a164c9e64587551fff31b10f9b3909ef1b Mon Sep 17 00:00:00 2001 From: Jonathan Louie Date: Fri, 8 Sep 2023 14:58:41 -0700 Subject: [PATCH 06/81] Add benchmarks for GET non-existing --- .../src/test/java/javabushka/client/Benchmarking.java | 6 ++++++ .../test/java/javabushka/client/jedis/JedisClientIT.java | 9 +++++++++ .../java/javabushka/client/lettuce/LettuceClientIT.java | 9 +++++++++ 3 files changed, 24 insertions(+) diff --git a/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java b/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java index ba5d6f5bfe..cbae7e1e5a 100644 --- a/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java +++ b/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java @@ -6,7 +6,13 @@ import java.util.Collections; public class Benchmarking { + static final int SIZE_GET_KEYSPACE = 3750000; static final int SIZE_SET_KEYSPACE = 3000000; + + public static String generateKeyGet() { + int range = SIZE_GET_KEYSPACE - SIZE_SET_KEYSPACE; + return Math.floor(Math.random() * range + SIZE_SET_KEYSPACE + 1) + ""; + } public static String generateKeySet() { return (Math.floor(Math.random() * SIZE_SET_KEYSPACE) + 1) + ""; diff --git a/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java b/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java index 249be43fc2..c4396ce08a 100644 --- a/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java +++ b/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java @@ -61,6 +61,15 @@ public void initializeJedisClient() { ) ) ); + Benchmarking.printResults( + "GET non-existing", + Benchmarking.calculateResults( + Benchmarking.getLatencies( + iterations, + () -> jedisClient.get(Benchmarking.generateKeyGet()) + ) + ) + ); } } diff --git a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java index da986ac7c7..6956d40d43 100644 --- a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java +++ b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java @@ -47,5 +47,14 @@ public void closeConnection() { ) ) ); + Benchmarking.printResults( + "GET non-existing", + Benchmarking.calculateResults( + Benchmarking.getLatencies( + iterations, + () -> lettuceClient.get(Benchmarking.generateKeyGet()) + ) + ) + ); } } From cbb0dcb3ebbfbc4001079042b43339654af97d9f Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Fri, 8 Sep 2023 15:36:45 -0700 Subject: [PATCH 07/81] Revert "Update gitignore and remove generated files from git" This reverts commit d9b26a6664c6bd4426e7fa417d43e70e124338fa. --- .../javabushka/client/jedis/JedisClient.class | Bin 0 -> 1354 bytes .../client/lettuce/LettuceClient.class | Bin 0 -> 1706 bytes .../client/Benchmarking$Operation.class | Bin 0 -> 250 bytes .../test/javabushka/client/Benchmarking.class | Bin 0 -> 5246 bytes .../javabushka/client/LatencyResults.class | Bin 0 -> 581 bytes .../client/jedis/JedisClientIT.class | Bin 0 -> 3456 bytes .../client/lettuce/LettuceClientIT.class | Bin 0 -> 2526 bytes java/benchmarks/build/libs/benchmarks.jar | Bin 0 -> 2423 bytes ...javabushka.client.jedis.JedisClientIT.html | 142 +++++++++++++ ...bushka.client.lettuce.LettuceClientIT.html | 115 +++++++++++ .../reports/tests/test/css/base-style.css | 179 ++++++++++++++++ .../build/reports/tests/test/css/style.css | 84 ++++++++ .../build/reports/tests/test/index.html | 153 ++++++++++++++ .../build/reports/tests/test/js/report.js | 194 ++++++++++++++++++ .../packages/javabushka.client.jedis.html | 103 ++++++++++ .../packages/javabushka.client.lettuce.html | 103 ++++++++++ ...-javabushka.client.jedis.JedisClientIT.xml | 23 +++ ...abushka.client.lettuce.LettuceClientIT.xml | 17 ++ .../build/test-results/test/binary/output.bin | Bin 0 -> 990 bytes .../test-results/test/binary/output.bin.idx | Bin 0 -> 104 bytes .../test-results/test/binary/results.bin | Bin 0 -> 466 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 38419 bytes .../stash-dir/JedisClientIT.class.uniqueId0 | Bin 0 -> 3464 bytes .../previous-compilation-data.bin | Bin 0 -> 39190 bytes java/benchmarks/build/tmp/jar/MANIFEST.MF | 2 + .../java/main/javabushka/Library.class | Bin 0 -> 352 bytes .../java/test/javabushka/LibraryTest.class | Bin 0 -> 681 bytes java/lib/build/libs/lib.jar | Bin 0 -> 723 bytes .../test/classes/javabushka.LibraryTest.html | 96 +++++++++ .../reports/tests/test/css/base-style.css | 179 ++++++++++++++++ .../build/reports/tests/test/css/style.css | 84 ++++++++ java/lib/build/reports/tests/test/index.html | 133 ++++++++++++ .../lib/build/reports/tests/test/js/report.js | 194 ++++++++++++++++++ .../tests/test/packages/javabushka.html | 103 ++++++++++ .../test/TEST-javabushka.LibraryTest.xml | 7 + .../build/test-results/test/binary/output.bin | 0 .../test-results/test/binary/output.bin.idx | Bin 0 -> 1 bytes .../test-results/test/binary/results.bin | Bin 0 -> 128 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 2859 bytes .../previous-compilation-data.bin | Bin 0 -> 3207 bytes java/lib/build/tmp/jar/MANIFEST.MF | 2 + submodules/redis-rs | 1 + 42 files changed, 1914 insertions(+) create mode 100644 java/benchmarks/build/classes/java/main/javabushka/client/jedis/JedisClient.class create mode 100644 java/benchmarks/build/classes/java/main/javabushka/client/lettuce/LettuceClient.class create mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking$Operation.class create mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking.class create mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/LatencyResults.class create mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/jedis/JedisClientIT.class create mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/lettuce/LettuceClientIT.class create mode 100644 java/benchmarks/build/libs/benchmarks.jar create mode 100644 java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html create mode 100644 java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html create mode 100644 java/benchmarks/build/reports/tests/test/css/base-style.css create mode 100644 java/benchmarks/build/reports/tests/test/css/style.css create mode 100644 java/benchmarks/build/reports/tests/test/index.html create mode 100644 java/benchmarks/build/reports/tests/test/js/report.js create mode 100644 java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html create mode 100644 java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html create mode 100644 java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml create mode 100644 java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml create mode 100644 java/benchmarks/build/test-results/test/binary/output.bin create mode 100644 java/benchmarks/build/test-results/test/binary/output.bin.idx create mode 100644 java/benchmarks/build/test-results/test/binary/results.bin create mode 100644 java/benchmarks/build/tmp/compileJava/previous-compilation-data.bin create mode 100644 java/benchmarks/build/tmp/compileTestJava/compileTransaction/stash-dir/JedisClientIT.class.uniqueId0 create mode 100644 java/benchmarks/build/tmp/compileTestJava/previous-compilation-data.bin create mode 100644 java/benchmarks/build/tmp/jar/MANIFEST.MF create mode 100644 java/lib/build/classes/java/main/javabushka/Library.class create mode 100644 java/lib/build/classes/java/test/javabushka/LibraryTest.class create mode 100644 java/lib/build/libs/lib.jar create mode 100644 java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html create mode 100644 java/lib/build/reports/tests/test/css/base-style.css create mode 100644 java/lib/build/reports/tests/test/css/style.css create mode 100644 java/lib/build/reports/tests/test/index.html create mode 100644 java/lib/build/reports/tests/test/js/report.js create mode 100644 java/lib/build/reports/tests/test/packages/javabushka.html create mode 100644 java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml create mode 100644 java/lib/build/test-results/test/binary/output.bin create mode 100644 java/lib/build/test-results/test/binary/output.bin.idx create mode 100644 java/lib/build/test-results/test/binary/results.bin create mode 100644 java/lib/build/tmp/compileJava/previous-compilation-data.bin create mode 100644 java/lib/build/tmp/compileTestJava/previous-compilation-data.bin create mode 100644 java/lib/build/tmp/jar/MANIFEST.MF create mode 160000 submodules/redis-rs diff --git a/java/benchmarks/build/classes/java/main/javabushka/client/jedis/JedisClient.class b/java/benchmarks/build/classes/java/main/javabushka/client/jedis/JedisClient.class new file mode 100644 index 0000000000000000000000000000000000000000..e0af5d106f08fedece943280f1d632c44c98dbe5 GIT binary patch literal 1354 zcma)+ZBNrs6vzK}8*~rd*d|OKgz+G-4P=T>n2B#lNHj$akQsf~jmiq8HEl=2ck+cM z3W+9u0Kbag!FbMHvn?A{U+lEEz2|>^=k$N~^Y^zO0JiZYi3p+!Vk$;3Dv&+V&-JRM z+sD;cjT58k3yeNBZPR}y5G|GK3gQB@u5n~~)uv?{w(nI>7kV&l-k% zs5dNnlGpgF)pgh8b?`9ew@go9Sr+@pcxwVV&p9(Rv*GIQ#h&4}oFnO+cLJHFW7}k@ zLua48LL48+E&|2yFTj2xO~s=$)3KRwXu1Nc|2LXCft(r_0wd?T)uwin2hwJ{Cik9| z2JX0IgNtB+>=mI?BIrj3qo~k59TSQrT2<-F??x(D5TEHLf-*&Z4J1&ZsCG7B4ePWL zxPuLfoV-p~-WQ2|<0^@PKSHAd6SNAb*L;PXl~~KE8ODkIWt9Z&M8(TY~e6 zYHmgcBQuskU(+xw+ZgJ$v@-?)~-q`wsvQ@iLAcL?lFI^rDYp=twxb=&o})>hXyEg=}bsnuMadSoNq8h$$#Ld_Cb zvLRE@KRo!d3Y$_J3xgU11t&mF3o_C$7^t3#sfYey_#veI&YD685`Wv@75b$ z)&4-Gjg^g>rFspA`nudvuPeG`yFG_?%T9qRTC}SKK3Fm={Z-?nqB{p_#Ux9*#AoqP zbqxL;7^7a@a2fnW|6@cbKr(3616wpSjaOK?K;L$5*+WwLSU=-L+QykwJ5|jFvAk4< z04!XFz(ffOnTySFq8TdN4M)@W3_siOWH0lGG#^8BmjMxa=whH1ypP43rVtF9wC}+d z-E_nVeY6(HqR^YsyEpe0?2|aMO)LKmD)U2HW&Z$n@QA(`9ygue5+FY}n@daI5Ie_U zF83LOUvTXl<9s`Qfk}pQ%(alyh>}MNF{Fv+FcBXKMVW0z$>RxObBg=!Xt4>QhxTUbpHrN)>?#Fil0931y#ZX8&9ec<~1v Cte-Ie literal 0 HcmV?d00001 diff --git a/java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking$Operation.class b/java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking$Operation.class new file mode 100644 index 0000000000000000000000000000000000000000..f4611d8d91a50da0c7a272635794db0760152ae9 GIT binary patch literal 250 zcmaKnF%E)25JmrhvVv&z0#+8<$O&vTG1^FBV!x0Hptu-z@o*L%z(W}q3u9$7e~Lfz z-+#XD4**LH1suZcByTclbbgjmS{AHKv|^R!7g?VRl}+O-*U}V~66g>{tvf2E%AzI+H5Or1p0)@|7b$EQ;O?#DYa%z@V_h` g!DiYP09mRoJiECNb~@<6|7d{FYG9p~38;Lc0k?bSc@73>r~WAu%hP=t!B@-p3yABObhsuW(ZN#D`-&Bi1h`~ z^_c0TfHI+_a{8WOIvnlx#v+Gf(%~i*&Dcm+w4osxu_s<9S+V+q!L|buO^N4nY*BF; zE+>vz<3=ZhE(!B9RJ2H#0}0(oNxhhg?JNfPlR6W=B--U&-Zd@tu2j*6c4j$iWps`B ztc<#vHoA_qnb>nM7KT8Fia2%(EYQZsQo>&h_UIl3W-`(KYJhGPeUN z_Sw13-jK1v@Z*4rgSeImxhZgpZQZ#NAcyDR58*kuPQf7+*F$5r=egZsrcxvcGs6xn z&*sL)*mTYU?dM2AfqgH4ZbIiQ+PP1t7y@xn63#*b8@+bt&2bHS_=}AbMN-9x?C`P_ zqZ^QI7Q$hSDoDv@WF32G&%t&cp*Uh%I}B6BxFo;wA-kGgdl_UESSoUu;N(0~Za^$= zVid@l8FtuWZxE7>V)X+Go+}WM^9sqbN3%$mlh^3kT*}IZumCrzxCze_2$5bAkc#C6LS15D&Fdhx6F=*5p>4hq2f+=ti_!hhT@F9TjG9em~DC@*e0Xo zPd4rQRJ_4u|y~bXwjK?Ye;N{O(x5qxsS$4G!wVW`lq+6YZCj-V@T?pCa_$+L7P8}9b*zO2zIP4B< zrHKW7mX;Xp<)-9hp{&nHrZp=kqv`*ju_?ObwxZozM0GwV2!uUBxJ@pw{pnhqKUvmq zCF?GclX$!2CD2mTqFVrkb?EkvJC%^`Dmu4Fe9k6t0c)yF19OgTb&Y$A+K%eHX6gr6 zP-gy==S6X@Gn9-&-2!VaY>}*#(#8gdv>Gop*YMD{)a#*}B8Mk<8j~zeYIACPl1+FQdSZ%a4H9fo_?Zar)D>XIkeMwL5E)5=;IZM;{vM$DmXMG)T);RpDkf*(l| z{;@!fy`|as80iUfRF~&GGO=?S@6_ZefGgkbb<P7(aiWRsbO5KlN=X1IsCvGori*vdGmk>W6PXmMiAHWBB z{}A7NxQC|$?teU72z;25X5IzwB@HJbq`-%Jd6mPU>PL809R=KnkMgYyQ=qCnxq)XY z`3p}&sY1o*G!|7PX0QZYMlPMVq;lRgPSLtt<12Kal=m&CvHZYEtnBr-u3B*?YNv70 z)4_PjrZYY zRd|ItgWJGPd6g@B!*NIWCa>_#uJCPM;oDu|JH5hpIkVqm%ko{if-3_tR(C7vaV4*9 z{C_|@l1#kpT&I>s@MU(K{EgtN_!>lINb;)deJ^d4aIB)Po;gS-t8mve-kWgPBHzHZ zo^q(L;gJR_@J$whq>2iBi%))*(YN{L!*}pq-UA$4i|_F%PRJhS+fVQawSI%&;ScuH vqxcgZwV(cqzvCaa&cE#IzwPVe_Vr15<#IRS>yd8L7Z~x>n)Tk3xaGoDJugfN1lAf`w%i ziF!Ob{G~cfl`T}hsn!q0@QQ`n9B$1g7+$lm&N8ep8no3+%Sev{frb5cr_*USdjgsB z@jwYIcXgmHrw@HKxs`pNkaBnINxvs2n%{FU6WwW&-01#i>zKsfjHeS%U1;7``Rn?C z=V6n=6kR!s5?_m|68lavnM^XdN;27?Ob4Rw4T_uedPbV&0NZ(maQ0#tjvZsksbyo7 zoSG4%>a3YDR$r(og)NFZFesLgK^Z1pvVbamE3~qPI##hw>=|+tZR*{n%oU3hNyYNg WNyP%QNyQR*tIfBjt%5f3|LiY%h-dcz literal 0 HcmV?d00001 diff --git a/java/benchmarks/build/classes/java/test/javabushka/client/jedis/JedisClientIT.class b/java/benchmarks/build/classes/java/test/javabushka/client/jedis/JedisClientIT.class new file mode 100644 index 0000000000000000000000000000000000000000..f6a062a108adf08ab2aae0eb09a527c036a23ce3 GIT binary patch literal 3456 zcmcInX?GJ<7=CVAnh=IIq%5svsZi)bX+RW&qLx;cKnmJ~BH+R_xlN~?%+#4lwYYDn zxZ}nrkKg?4ISM^^jz7TTPg0N1of*QU4agS{hsoXE=Y8JgzW41P|J?o^z!SKUL<~)F zG;3Ie7J<~PzMyAJ-706!PR+`qC(v@lung}>fu_Fx$v6@MJJg}6syj2MXNsmFEiW@G zONN^{rM_eSN)mB2t;QN?ajezQiZ+3r4075Et&C_b+LlG` z1$#mfN?^UfF4wNeoH6C-&f>WAX6#b8J7ZVPQnw?$s$+HcdQMgLDwvHLHlagc-3k%k z2N#og2wib(*02Rz=`!0XXJ)JPQRb-YN{22>>i(cWM1hTcz5#(#^PXc^<>8C{lS)&! zhKI3TpxLmdZGrWD{VR_q(Sx0F?9$MSzPbPfSPYOUt+F@clglb{1B%&h!uC;50(*EQ zFP#PHD4iLlb1xmzfK~(bX{N~|8ulxZO%;7kj@edG_s$#M3`ee~Tb`>ZKBnOS4$^ck zIi9Qb1vWI&aj^;F>W>K=7D!YU_bljURVHwR^z+9GX$U;2;VFy=#LD!E3?Tj^+p>k> zm7WW%sh1p;R&l1HJ9CUe&)IqD=$>I)%$`w<#qqR;V>m9bb!Emy1qHOS^m4jKFhjZm zqkY*1Ng5T2=n9=&^$as})N%C1oZ)&tgOeJvIK>zjb+cGCi9aFTs_9X~q0p1dq#BtR z@LCK-ec+siahxITd1jwi13lOvJPqtv2B=c%8Aj`bidGC0Dq4Ag{DTIn5$AijN`>W| zhDmitTFcT>;gYB2VqSVGm7mjaLFHu=qoL-PG(3+NICmv4Veh@HtGkK)le{Nmc8M3Y zEoWHrOtms4oq|4PawVO!8H!2WG1NRC zqE-lz^7zXHu&Yi{X8o$u;`m9XbgHzk^NzsUyr&oE#`XEo`p)G5ql`vTT_Sm?lSfbOAKS0%=;!DH~ct8{GKfg zDKqJcQQP)h&(Y_D_rPsy!IdOl!|QRpp(@^+0zG#>`{ob*ZEq$5#S<%4HAopa`t4JuY#4 z6Sh9V)v9AzpC5627d}4sKFY^DNG3kxYgm857Za+#;y1xD+c)6&@=J}0*REVBH z5@lL0a7WLKug9qADREEf=?J)Q%TddY9}sW;3C&GQ=vUgBe76L)Y@xPoZ2!6=+B$05 zQkcaY5lu?5asCVKarBHV*Iub3su675YA+09vT0Sk+_9=ofpWs@={>CN}Y{b#7alDRZA8s)H_>uIX z@$_)lz~F8EWq>6dUBZbaoKBzZ8n}&TBP(}fG{o2gyNNJJ#37_;OFQ;5PD6~^L2Soi z?8G4wKgd%f5&DBQ`u&*4%k*js4RL(>k!Yr3>N0XyW%L1>rjk-q&Rjy_CeEL~%Oyzc zBfgFxv9&-4F?hX0j1h8G8F2@LF}b)LW516PZc!NbI-p h4o4s1WBw0DpK|mCPpB^GOLj8XTUO(1e2eeV`7em~aLxb# literal 0 HcmV?d00001 diff --git a/java/benchmarks/build/classes/java/test/javabushka/client/lettuce/LettuceClientIT.class b/java/benchmarks/build/classes/java/test/javabushka/client/lettuce/LettuceClientIT.class new file mode 100644 index 0000000000000000000000000000000000000000..80e5e8ce5a991801fcebcf5cd8edc75dc592a836 GIT binary patch literal 2526 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 literal 0 HcmV?d00001 diff --git a/java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html b/java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html new file mode 100644 index 0000000000..d72630017f --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html @@ -0,0 +1,142 @@ + + + + + +Test results - Class javabushka.client.jedis.JedisClientIT + + + + + +
+

Class javabushka.client.jedis.JedisClientIT

+
+
+ + + + + +
+
+ + + + + + + +
+
+
4
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
14.703s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
someLibraryMethodReturnsTrue0.002spassed
testResourceInfo0.001spassed
testResourceInfoBySection0.142spassed
testResourceSetGet14.558spassed
+
+
+

Standard output

+ +
Avg. time in ms per SET: 0.07751362659
+SET p50 latency in ms: 0.0456
+SET p90 latency in ms: 0.070699
+SET p99 latency in ms: 0.127282
+SET std dev in ms: 0.665195671610232
+Avg. time in ms per GET: 0.06613250047
+GET p50 latency in ms: 0.040224
+GET p90 latency in ms: 0.058583
+GET p99 latency in ms: 0.10689
+GET std dev in ms: 0.6044885619384261
+
+
+
+
+

Standard error

+ +
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
+SLF4J: Defaulting to no-operation (NOP) logger implementation
+SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
+
+
+
+
+ +
+ + diff --git a/java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html b/java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html new file mode 100644 index 0000000000..2c4bf39157 --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html @@ -0,0 +1,115 @@ + + + + + +Test results - Class javabushka.client.lettuce.LettuceClientIT + + + + + +
+

Class javabushka.client.lettuce.LettuceClientIT

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
19.114s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
testResourceSetGet19.114spassed
+
+
+

Standard output

+ +
Avg. time in ms per SET: 0.09530544199
+SET p50 latency in ms: 0.055105
+SET p90 latency in ms: 0.089829
+SET p99 latency in ms: 0.184804
+SET std dev in ms: 0.7259927555734456
+Avg. time in ms per GET: 0.08870054313
+GET p50 latency in ms: 0.052371
+GET p90 latency in ms: 0.081338
+GET p99 latency in ms: 0.145727
+GET std dev in ms: 0.6983375291436595
+
+
+
+
+ +
+ + diff --git a/java/benchmarks/build/reports/tests/test/css/base-style.css b/java/benchmarks/build/reports/tests/test/css/base-style.css new file mode 100644 index 0000000000..4afa73e3dd --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/java/benchmarks/build/reports/tests/test/css/style.css b/java/benchmarks/build/reports/tests/test/css/style.css new file mode 100644 index 0000000000..3dc4913e7a --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/java/benchmarks/build/reports/tests/test/index.html b/java/benchmarks/build/reports/tests/test/index.html new file mode 100644 index 0000000000..f03c715ec6 --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/index.html @@ -0,0 +1,153 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
5
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
33.817s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Packages

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageTestsFailuresIgnoredDurationSuccess rate
+javabushka.client.jedis +40014.703s100%
+javabushka.client.lettuce +10019.114s100%
+
+
+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+javabushka.client.jedis.JedisClientIT +40014.703s100%
+javabushka.client.lettuce.LettuceClientIT +10019.114s100%
+
+
+ +
+ + diff --git a/java/benchmarks/build/reports/tests/test/js/report.js b/java/benchmarks/build/reports/tests/test/js/report.js new file mode 100644 index 0000000000..83bab4a19f --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html b/java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html new file mode 100644 index 0000000000..6fe5059ebd --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package javabushka.client.jedis + + + + + +
+

Package javabushka.client.jedis

+ +
+ + + + + +
+
+ + + + + + + +
+
+
4
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
14.703s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+JedisClientIT +40014.703s100%
+
+
+ +
+ + diff --git a/java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html b/java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html new file mode 100644 index 0000000000..72ed2f2290 --- /dev/null +++ b/java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package javabushka.client.lettuce + + + + + +
+

Package javabushka.client.lettuce

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
19.114s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+LettuceClientIT +10019.114s100%
+
+
+ +
+ + diff --git a/java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml b/java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml new file mode 100644 index 0000000000..f76c23081b --- /dev/null +++ b/java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml @@ -0,0 +1,23 @@ + + + + + + + + + + diff --git a/java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml b/java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml new file mode 100644 index 0000000000..15ab216e63 --- /dev/null +++ b/java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml @@ -0,0 +1,17 @@ + + + + + + + diff --git a/java/benchmarks/build/test-results/test/binary/output.bin b/java/benchmarks/build/test-results/test/binary/output.bin new file mode 100644 index 0000000000000000000000000000000000000000..76f5d5a3a126375fb8bd3081dabee2c02a09ac91 GIT binary patch literal 990 zcmZ{i+iKfD5QbwHZ16+0LrT;1qVk?*555Q_v?-L(7StCI)>>B432774x9_g3;DXn; z;-7E7`A1jt*?s!-D86stF)J&ZgKME`vmCZnHVkmx_C+#OJMkwe>#j;tm$`EL)E0&9 zAIc`T{dKasn$PYg$QQfIo-0>2MF2JJ=eD!GA88x7{qghHC(jO}5MZ{pO~AEHAfyu^ zwHEfyb({72a5zkFdyDn9&FzrvU0uCDw}4&S!|u6vdk@d8^ScbmYBqoK@&2Vqz?HRy zvVnR4?*r-A-y0waQ3@%SOriFEFiBUl4>A~ute zZE{I!aY;~Waeir0a%ymDiF;}Z79oaJQyC$85}g^CmSMUmD>WsvSkDVY!dyd~DzK@W z@2ayf&O&yHXI@&qQ)O^!a!F=>9&QLVZ7(fn{!Ser~Ey wW>QgNQKfHcNk)E3P-;nOQC@LKQE4h(Nd_jUDN`9(C!)I?Lx2GqdScTU0BB*aK>z>% literal 0 HcmV?d00001 diff --git a/java/benchmarks/build/tmp/compileJava/previous-compilation-data.bin b/java/benchmarks/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..6e1548148fc2e70edbaa1e9bd2596ac50d9e49cb GIT binary patch literal 38419 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 literal 0 HcmV?d00001 diff --git a/java/benchmarks/build/tmp/compileTestJava/compileTransaction/stash-dir/JedisClientIT.class.uniqueId0 b/java/benchmarks/build/tmp/compileTestJava/compileTransaction/stash-dir/JedisClientIT.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..5480044a03743ee4719cdf7fc8c9b963a7cfe602 GIT binary patch literal 3464 zcmcInX>$}+6g_XU%w*_fi4e#_U;+pj6A=}%>wII znfMx9PU0bS#IZ%gR&1kWwlkHUDO02Lao3d&B}?l5OP+`V8+-f!0#S3GV^~u|mwP9a zr%nwIV~0S!VO_HY*7x+TUYbM~cEzz+ z%OyGK%u7f4Oe>!Q6r={N8tzjplLHzKDw9nmeO8XzRzdeJ8s0SDTu-+=S5Z8q;V_Oc zbbfL?SIrA-sO95w9mI_v6L?G@QCiqLubX9=z%c3OPUKS%II7_Z921C5Q4<+J{71EA z@c1NPCXe=T$(D)JRW_I933vl6s2SI;FA|!??;;P9XQ7iK@l<9#W~a zT+lF~_DIW=v{bs}S-Fsto+{;MG+a`3S;uUs@f8iv;yI38$xYaOujs0FV($d^$*5iA zMqQgVEP1Y6nv_mnpEUU;m9?3Q3EeT&IQ&@eO&iQecMYXhbwSo8cY*4khHe_yWu!q0 zw2zl9&nU?W!!-zh+_G%XFGr%&bET_{$ZNJE3AANZLmKycmm4&imV(K?bHOT-zjUcU zYXn4nAw;XkUlxE}b_z1%cb!JZFEZs*m3@^u0?j#3FU*eVb7A!DD*;BBje^=l0&#cw zEfrnGY@JdGNg7_b-x#3C2sHS6U!cR(OOr*tYqe3={`<}{_cdD#bDGTgA)Yk+JVtcS zl`bHRDwu5HBiBwoR*alEEF-s=KgcNH!m0^BiPS#j{C9*y^pohYK;-A?e#HenXIjTLB zz?<9-J39qqdpn7D@NOLMX}E#+1$L~8E$gR&#Pw^-k*z63M}PkRao$&is>wjws76)O zzJT}BrWK8A8*nqpJIY5IJd`>5M2$Yx;Hqncmf7+=Hw3!a!z_bWaVeCIWe&*wQx^HYI2-egPk_fXzqR%KhWMpBX!;e&zF&~Mjn=zREnLJU z--rKhwS+qvEH?Ipt?_zPbPuUkZ~@>b`|62!8V-nR4l*BSA) zx#F!AGngf!Nh@BQ|3X_FUB^~>FIBwXq;I8AZ>m452+;YyvHofX{d<scs|s;P_!gvf3I`o07AtvJW#vRh*gFI4mg}s~pQgHuFdu0!iX3e?h8Rn*#?k!t$ZX|mOoQf2z4Bq*ABnBE zvK}-wHHl`M6W82FkC#j^#wXJJtz2PIk4ZqO+D+lA#(&zUoZK`m&!9*<4>@)(FqJEy zBeW6pp)`a}qtj@Ug;R*B#59_ZQe{6KmT_~IyJDI&UprTsYVd~f@c&TS4D%^7X+AQw zE1d@4rj3F(N6==8rp%`K$?TLW+26N^(ovdV1dTRFIAt!)Ppy`zT2!fbTETDPImE46iUmJKVwut6Oz1l9O`C2L5WO#r(&8lxy zt?$Ao=Qh8&bal%T$x`VuVmYybSV^p+`N5rX^=ewcU)ib0t)cm=WmYO12W%}6N?ojj zSBf$C(S#An>)r*Iov&fM&~l8Htru?47aE92lF%k}hy}VdKWC7&haNo4!OGcLroi-R z{(r9wX#URDN;hX)LtwYFtwN?UqWRlexd6*>;gPK1CEwgPg_5b4{@tWLX-t?98wtXc zqRCAScZg|$u1XiBLTT?|Mmy$WW#edNFVm7c+bQva_}t;u2LgM0CurMRFFqI{A*E7t zsfA<{v6$ZDcNk$~(!>x_99KyXEGU#M%Dxt1JcSBy=W} z1mOZ2u2Q-xZIlXZn-xBq5qL{`pwwVjjMhWuf(IJ^N>t`rYFe<$%2{n?Lp^F89x-fh zYxb_|TlwW%mcP4{Z|$n>X0TUhpLDl7&CgXOvvTsF`8vC*JV4>OyF5QXv-iD|*uG$7 zOUH`X{l*8#gPMnQ4wG6(Xub-iT6UC9^VIjXlAfZABI%l^=@PAQ zIu=FU2ufxJR9XhVJlv92IlGrXAXd8W+7nHeoS_@W(4}YT#5p<s1-ZCcE97bip!5Ok zQ{m?R5MJcYj@To(aW6<$q1;ylm#*NhW%eF;Z{?V{wYCZ0$~zv7Ugr}W^O#N)(}^c^ z;whadfv*C^&tS{;N~OI*cAQ=cn~+h82(iQrFWOW);5BKAGOBE$OxC^U>yRG)h zUc-yhR)#l}o296g}Zu*99@|I4#qZ33e(4=&8b#ZgW-c#D4aFu_c zWJJA#n@2TQ+-`dOD6KKx@1JbX86WAAIy&(Q)~bhl>{V7S4p;+R$-w{G;(Wq zi+m4zevRhDsA{BZex?hX=;CI&NekUr3&UDL*_AFY>1}kH*FyZ>*4D+2hl}FhPlJA9ylo-H;>u`{-mp zUHpq~^qVeCqyK@uSUI^UWCOqonTO0alWvJ$(&_psSsiPfa^>HOm0k%Sjv|C7LU z#;x86&DRBT0W*9>e#rsGNSAfx%{Ci~Rl%Em5V0>J@5Th%gcc0(OX)huq&Rqjlg!l$xOjnju$4k?Czq)%!isVm zM`v(qc(3;pi!6gL{&q)iS*>2PX2m6hyo~5yLCC9!kc@{Lt<_)`Hm>@H*I?I5a5e6( zcwp4M>}fWSS8Z!uRX3-^^6quS{05?%fM_Nn(q&0N3;0bZD=Zn7m&+8kJ#;*3O~5d_ zk4)?icMjFPi3n2=;VopF7M6<8ylrh?(s9X@v)}4_7DfNQ|C;uRJHF#KB2Gh0 z?;w(NL^A^+GZE7)MBr9>Ks99e6gU6$JErG$=%*Go z2-}RjXW>&?RxW&(RGN3|+~?E2iyl6|hY-04k%xdm=L3oM5ccBeW;k=DaMBNdI=Q5v zbk}G9cUA=mQ3%q$kI;f-?lK!U@F!s4lXI)4_)l`8uVa$vhCN?;A0VRL4}mpqa)m8~ zp9ya+{;H1JykyN}tqBL*W|cfb^b_cYxY?BjQ#=MEV5L ze2VCoAkt?DQHl`H5kjX7xDKfYm1(?yU8>az>?QC>tuTbwa^SABJvc^SDnp$8u|8hE z-Q}qH53LE@t_p;#M1-#pq6+jYj*e}s2EI_Ca?twzeR$*Xrc~rt4!w*s+vWY+pTf zUY6Ic<{N3dAJx?(WCJ2;M5Lb)NfSaeBgB@LK{-;{!d@As(Mnl}3LJDBFog2w@UA63 z{d`S~Le=FLbKzKnw}IE`FNkqFBK?YpI}k}HLUh5_yD9s0vsSxVV;bLpb8gn(5KlTD z>Jt?H`{j`B_sfdsPl=yZ_#GjCAkuj~z+)RL=U!ONO+^K+)5-0A>t423+D@A|G4!_I zf}aT4hY0%-^IwSMH$waYLI>bxtG|iaQIvM<|K~VXifxv-(Q(70w8uM+ynnV|Y>;r` zi6<)dLM7g))CV>9MF~HYSmBS-f?efKGDw=`GH@eUIQ6Yl=XrYM;5t+ub{Ylm2^aXD1!f6~dD}OzpAy+)CXQJjg&IVox@S;n3`(4Z{hS;8 zirPhuxyPb3A2)^KJiJh8?hKzz$11qTBXifrI83^d_&N?1UO+_`QPCxoxQr4yS5TV2 z_1{F|DtyJmRThte$n376pt}mn+k;4wnBku`{i$uuz7tUFJ;S8`Ix4<_Y9^qPMARe+ zm1-r!@~$eVyKVx(R<4lvV=3r=nHLmbWxtOGv4^IAZgU%OT>Q`8DYsB*Dk=&`Z^PP< zk}K`((qL&9nGGKBbUiI@9HhIhCPkt9GSRZmw@*XP6MZsv?sn3hQT(518!4{94|F3{KrqMbN z73ZVm?gEq+q=Z^yFy$!(0+dPxUiht9|7Mw5p2pm!(h650_fgRURP+#)UP2!Mwfn4G zTx7Oa(RdW^n?5s^yYU5a(8suXZR?j=MX2~ODh)!{g7i}s8Ey}F+H~k}f#Ph6-OSs? zsPqYH`VCTF>QM3%Dyc__21>JA5KN;HcJ#OKqQ1rbKD2#@ zlTxu_vX!);{>H-3C}dY=c+UHw=X_OTm%RDawt(;Iai$41Zl-h}YoRu5Zx3Ev$uA%N z^wq{)YEa8F|gYae$gb#xjsD|VMB8kEb&k|(o zjqp6za$wOT-)O5bS9}>_KZc1vLpy+B9>^eq7{rQT1{9JCrP2xf5M0Xb0UkI8%g9vr zlt1FjZ`9~rzdN+2eArB;U2*eq1`*1Dq&W<3ak6rS#H#oBf$R2)nW;VxPJdXFX>s@j zLmbYKo@8hip;!b^;|6trO1__Z*ybR!k&Q<7J*Ujpwfps4cRR(ag z;|_CURWlaw>4)Xlw_j&SZZLEc7~14DMj|XASIClpoick0C|Wc&wYq5U>d#(0FRt@R zo2X=l_$Gr)VHiI_Zo$1)`#tnisqHGA`XWeh@d?8N_KH|_!1SivsJQv{o(aq$~o!8M%#hA&UEQZakPLogJrDe(i)# z+vtoghPazyl1KjrH!Gc$H=z=E@^=2T;w$p`?;;)I{g15w&Jg`znD171Fz_-ga+c6H zUX9#8v6#O6fTV|E(aX>jVLxHJ05sXj@ciw&eSckJAD;30Dwmz3)!N4(`x&BN45Qx+ zsxYK1$e&ICd8zE%i6VifI%K*iaeR(UyQ%LKC3%D*PUmu zaGQLC%!9R%<;9eGGbKJuO<$(akE!X;l(y3YnDAIAyr@hY3uMxKTwPUI5EBv^=U^rT zPY)=6jbxF+yj3N-2GIi>D~hM-g)qruOv!O3B*1?dRJ^+Eb#?4ei~YmfpZpBWzjLKO zlqn5k5+|6%v~VUZY!K1_pAPjHAZ2RoB$E~bN$%gxfb(db`>62p#=zJghdOc#y_T0o zFeRs$+L27+G?O5rfIh&525lOP2D+TpXPARlu7Cs^9~yMOFKdlWOal_#JVB#nL=01O zmZ^D;X&TEU&ohnVnB)Z}aS@(#3BCjsB}h_@SxvkQPgN=ukijTb;5WcR&tlv6^NSqk zX?rvkCO!N&<_Z%Mdow(=Zowkf$&yhu%L;`%N9=LA$^@*&4DUHH>;!SV@pu1>J?JX# z;_P^)=o(YAckoGTkJz>QiX8HY1Z&?t70Kz>ndA+oIDu)}#sDQsWP&w2+sW&aaJL&^kcy2)K- zS=1W}3Io11biu0P)`<1>Pix9D^7`$vndDujs1~6zKfPHCXtA{q#{ZFxF01 zUQ{mJ{)}l{%G7<%6qhmeUNDK5On@KDnS<$@jhjjZo&xJ+RKOc5r9A~af`V28YusGj zR5Bpm?sD4eN6Ypv7)CP|-#Vy$?G=-#VnPOJYKD(m%H|93ecyZ8v96Q4kww)^QtLIS zm(p1c(L;svb3=os&8XP$fBQzS`;Ynb5U&G2QnHcUDB!Rl#G+rbZp5B721FvX%w zI_`CaxqrI%Gok573+AuhwU%$0ChwSJEt7c9Bt9^qECeoK`pIB_PS@wO zF{O3%FHBkxh0Lg3!G7>1pS#}KubR_7?Q?sBztfwPcBbSjlZ<5YJHV{|vsE>oe|U(G z?)t=md1;^Czp?IE+R4=HVw#G&fysk8AJ95Uy&%t6J$%W0joj}3(>8m)F(u!bP?_~0 z>+sXh{~dkKIhIXsJX1U-ec7QOOoJXK*~^r)BOvadpg(|;;Z=5==s8DAjLlx!X^wn- zEufDn?Pffr;|=0H_7FEX<~HXxzg{wj)z2h?#z4D8v`RO1G|@U%@q1Kg=yzCv&}7qz_B% z%QE$2>3v~z{CUFTKIyZUe+wJ8)1M^_U`e$C;Xw{=uC~g3&XASuRa|*? z<$1gG_GqK>;txwof>^r2EHaNC!lDKLH6Uum2Xy=*ddET-xb`HMva|6aTa{M*n@+(aaU|qR;AU)EI@a#I`5k1}d8bZS=jAvSWF2^r)M= zuSljVZr%@PiBGb~2$t{^YYXICkt`^BU6rRT}2^| zrg+ZKX!QLju%=MO@ij;t70)8CvBcL|(i<%81eSRsi%4QYa-R;u3}GY#K~PNCI8cch zuGcZw>Esf=Z3+6~(w(uDH(6u~OMHu^okmXuLabb^tRb#bcTSC-aVSS?v<5e$%O&LL z%@a8)b&ZQ%|>a#CA%ccx@ zZ*-SsxLX6~#g5K!$_cCOA=di^0SVS(1$YW7}9f)MlBBk{nn*tUsuOMw1<_)ePTgF$xdeD zVWW^$p!h;&){fiL%3_Z#xVjOwMNR5iWCP2*k)`>WC2nGo2@L&AI@V0_Nv?qWdFk!D zA?}S?o3%z3OfM;X)!D)#TUp{ZmMD$>g$1o%S4v|XA8r`&YVzi{qRus;<_{F{?JVLe z@FD^j5q4*z;JU9%%ZTEX5o1d4^mVX=oh&krahe78ewd-R`k>F<*ly;iPmA|IDeGd9 z-7I5^dWI#wy0O%HMDM_HTSfKTG|;= z6qK1zRSdvxU96mOH|+4j+m(4?f!m0Rt_*jbqinG!TjIsm3qZWtfQ2Z1*r4dPayPXv zn`-A+IpLS{g)7hKZSz_ev$x^F?@iu*Y_UHZ%C!KvQ>obJ<_g-#Wk2gPdWek~ld*aE zK9eKWfoxF_TRWJo8NxO_#wNA+kZ2ue(?aCx|FQ&`Z73TuIR~q~azM&5+)JbTJr}cX zK4gR+Id(oQj7@qnE%8jteOkwPd0E8pRe`*zXOEm)m?SiSum))n>U_xg2xwA75jnVZf-WA{0 z?lIrwb0pg!mi3c~cTLu>Julh!YpC|p#;WfZRj1j)D7I89nhnXl$`!=8NH$Is@4F4T zoLjz{xVL}k88%r6BHU&gjO-n_Drgb*Us$%pazzYVe3ng~V*~GFfqxY5uOa7Qrz+)M zIfb+vpO=PYI(7vI{7#&FTR-D$99!oM>VYqp|F|Er;?AahX#cY@*R+3LU_%N3ppPM| zZm7<;*)wze=|;;JKEB8n|7M+M=s{lUs)XCJ}~YU8`=V9_?B5o-y&VighlU$)opR# z`6-nxzRlM5Mbp@Tz_=&|TPSx1)lqKaf#1t_QKI)JAhTkB_qo`fIFQcP&tQ`cOnpOK z%i@K`klou)dE6cPmFC@jE|Yqnk7wxhMom8J{Mp!a+@91CY_}{nnavj8W$Wg!jqb4_ zCXd;|tE^&J3o13awVSJ~kA;U14{q?VUfwsO z5z$_{gXQ#uO+ICdT3J*o|LA$S)0N1*>%D@ZKKax-wS;Z@jICM97CvX|ma#=zUs%b= zOFH%fcxPv)mbv1ws#C|7uBv(+|D-r|4pi$qKHq${#a zy=FB|5AUmFZ+gWhtJp*}8`7rNAX6}Ks@;ZNLux<=mWlJsGE%A#}4=v1jacI_2ZgzNXe$~)-Y~5P6^ab-h?C?Jf#1^8FmHB38!x_bX zW1{SKr&cX0`oK2$$R_L9!UpCx$OiGJZzHbm$VyeFhZH}LIGp+Q6Pu`K6GQ`>cHGH| z8fa0;29*R9Nx%MF>GQH?oDhKEq-v`$6nSjgRs8;LO(g#jBW@$8{b5 z{6-U-Y-Ve=06*EHHa2+){Q`F@ouD}kughIW|@HLOi{;BhfKQTUL_lRu`D~9*7H~nNA^|6V5HnHM79jitc z<4=E&){V2=ac%b=8CUY*{iI)P(Qh`?3{<)MkHRzcWq#{^zruX4kQPPEAGYZLTY8iO zjr{F9x|#UFSOk3i=5ugfg*j(_=9@qLUp zhwNY{GV#%YQ#Uu(jr$r=)X`~QdT6{42U0XM9Q|gt*ziHeNI&Pad*KD@slFV-j{}a% zABNX#l}=W2XEVHWab!#b%WS5mFnYbl8=w0D9C08=>cw8`%f_Rv`krNkT#etgd+do^ z^=oDjXLB%zbS^+cI8;7o<6x__$EVyl`8&_e(&jcg{jQQz)NqVL9_L7QYlL#3z=NJN z;Kf!7HJ%pY#B(h!v2cH_OD}rfS{laD@kUda_}T9IET0n{OV;fQ@HoHi-(&rBeYLu>j;(Qji9DP^@02eb{7kmuD;k(@)WSnMO%|vXDss9#c~2_ z$PxHij`2B;K`e(j&w;s_I9Lbfu%LHpk6nQ4|E6YIQ2bJZ$=e+rV+}`r3a^}Mh)=u7 z*>s6xq(uqe@Zj6>DvwGg^V!1*^86*mmpP&<9MM${8PAbi;|MRI@yK-`Oa^l>Fo-9+ z0m6VO9+=Y_Y|&gFH}#2p=ES#K)B%T5K0K~Z;0O~rk~l^-cnZ9+)z#mzv&nJ&g>U0k ze8e${V{o3C%%OSN;^+H)jv?4E{EoAqp-vQl51LW z*lpW^?Zdm;R#*n)aK!gGrX?r^1dfP{wF|rTy2hZN=A}L~{dF#=G-`&c)z8*N$ug z`6G_#1LG=M1e{bR(;rjYq;OCb?s0N`g!YDkDWfa{P!FHm7m6uM1Qb8V$^X}ZEqet! zw(pV|1ul5P(S6DhzF@{9;4cGMJ)Ik7YWdA}Td{K2g5Y5#9Q|h;gHn#!bB=a5{Tkx} zQU>cdzW^P8!3t{R&;$Px80C|wYd!1m{0F?~kP}N^a>#OyQ0p$I0)z(@oV^kns=R0U zLG+oO8)OpJHK2hU?K5{ydDjk|Mr+`jt8CSR(Av&pKsQ|{i2$b`srKb+kkyqeRMd=H<=Y}Sf3=aUa%$b z7f1Y?14&OP2lB|n#fn7NbeHbZe3w@a5hL^ea12Dr9Q;Mu4e`Ct<6M9)rZJ}`VXH4!?8h|;K>Xnuav0tEI}flt>E~|?vdwVji&px+$)mBPj_1j)*j=M$GH-3t_CdFEcjr&ca31r zF#hz(2DbNdL%GmlHN$5%RaQL%+OsNx3|9VM%imQ2%N}vyKo-kS0duY4I z48t>zx;76)a!pTjb)&dsCA|@ihIwo#ETIXff?ygoJjiLxrp2$FXkByHMx^SV;p#X; zhYkC1vHQXITj|9vM|0K{+?pE0wK&Tap5tm>L9lq_Cj(E}6kJg=S&jS*(@J5d<{QRx ziSra$aa`zVQjyOLKVji6MUtW~PaRhM!y2s`dx2|ukxRa%TYaG88&98f`R+1y%9xFq z_Sazd%u8II%UtOd?zWpuYzG8Ai?6RH9@;s_Y94w0diB9Y$FFjsK?^%O$y;;A40(Iu z#JD%)=$BJk;<@5$T%i}R3Up~H(iLSL^jYI>!l_lGDr$yb=ZbG|4HCGziCi*}fniBN zn=>_04fpP?ueA7Cgd|_XAC#^EJ8o~gczWh~Q zH~yf5|4I4l)cl!wnOxH>uDMn=rDjet7%hZua@mJbcC!kf8cohx&kJ_HQGS;z$>B=w zarI(QZ?+FR7X&7Qc|RZ>|M0Hlh;34~MZmbL3Y|p{GV{2?d@hW96#yZClFIBsaY1QH z3C@DR$pWQcZPS}i^wf2QT;Y8#sr3LTRJwS;4apXQb>*eze{^nDE90)eHhRb<9&rhx zh)WCko06&(Fd}J&ulhb|85Z7dsy)VS{Gx?|Gmp7sF<1PAYxI;W`VA9E1JJs+#Lw+h zCb@;2Tzhog>C86=Y>G;_o1SqcrCjnkmnZ|R-~z_<5*Q1au2Kc_&Cap{7WRfy4)Txz zrtQ2KcZ>XLbH%%X72!2@#N+Gw9u-`10437+zTWMp+=WFGf)<&iELvhw$rZoiN&^rI zVp?Q6d&2W8#b!dwH|wh$uh~>_$!f077shMg*IxNx!3LS1d|}b7(C-mr(Rl-{mE)4e z)NqA$6!5XJHU4E*SEF{|q^Wir&OUE`!_|GumEL9jLEnLF1_xa|@U#A7kDGeDOIVjN zVW~mRHkfYZT?L7*hKB$eBhi`I#%V_yfiIb2AU8mSE58EB#l6_@CKz zr->_V=9;%~H8Z(bHn$a+^|yOmxzovXf)94ADtFWGhmi+_ZA<;SjlhxM4mhBr16z2>ELR1a&@{u5em?wbgUb6=6_ugeD#S_$x)ldYcufv zW3@S=E8n=n@7zs4xSBm&-Cpjd1mq_rEUG7!j9@>xeV|DSdnImxP9JdTFE}{yXMSDv zmouULT;VUSFpe?kx>hv42olyWP2X_*sol+~Lpi^>(m!1B0N3y+Cfc1vA4FX7i(_gR zdG!7scjDsb+?Rf)8$2Csx-Kuj2f34<}IRtQG(c2)IpK|vH)GQ(k5o$j9HMpsx* z3=SQ`$m5tK6oby<4l2BEnKmNmc}$tltR$Z~U+8`8Fid&^(+tPJc|*wxF?7Z{n0Xxwb~(Lc#Hd|q4vs}lhYPN(W!<`p ziNlzHp*uct;W!0NeX+={Nw>;Oem))}uVIqwnD8@lmqV>+P{@BY=~-sFM#rhsV|FgN zc>^O8FmWO#O~RnxynP4db)GG7sGhQV>!p%1&cwYnvmPd6#7zvwuTwD4Ye<7!VF=I+ zPkDI%-q!q1MZ!hFoQ$KXr*C0oDkiy2iP4=}X==+5@u6eQ-ICQSc6&`~Pfx=P?qFm( zCdmMGxWt0c4HZ1|{H;o^3;p`yql;^$fnQBBG1Dw;V>YI97cq!hsupF|xBp&3wC?<~GI{(4&o3C+jtReF(hf}0i4k2G zG?oWo+^&rSI94W>8a}6&QBb;n_wM4V{@iX%_Zvoj$A}*wfgX$&WUW-XQbXj>>3YY- z{YE?eESR|C#E+2E>aA?I(q4?b4FI*+fO%(>tl*_%_88+!B_2zEVq_mC>Bo#eBlUyB z5&K*;CoA?GeEsUJ+BjpjK_(j<<&mB|u@}$8n`%T+ z9k$konYsG%q<%b2f1XJxBY;OuvN&Ra@aiac!DVqf5AKvS&#*r6Cv?ivLoPu)BA5rV z4dFpu=IR79bzi6J9bkq${`{h2cz9%Y>G)$j(Q%$hD9<2_XL^Ds4(DlqVO(RBqt@q9 z>?Ax@20exJ2}{;{(hja2KD_MYN|SeAB6zx|czP!p;JTQ&|F#d(g-5Kp^DA10eUQ)I z9?27*=1BsOC?1r!gXk})-S{-S#TsKuEJn^dTph9#4Ugs-pW$hiaV@a16dokK-FY?SU@iZ^`DS^+=S zYLaNQCKs8IJdri_%etIvJfrJ8F<^Z+sLgu7Su9(8^m1{|$M`xsolK|V?ToqI2|Q^c z&m@Uwn#?0_@-&-JECqz?pp@IdWP39G77uVH3N{4mZjQ9HZ0~IGy?A-=%e_T$8&Y}1 zZE8RD;B4}9H|oWnF*J@cPS_i~=0{!{&*Bb`Naqn5AYytZPzrOvGA8?fJUdJd3+LNe+*=$0KriL>~2s^Ynb!1OTbf4}m8X z0Fi^&Sv>sF*IPLryqx13S#Bmfyq6G#Jn?-Vd6o45XosZQ)ymlw^8Ch|dz^d%Rz?3Q zKmE1mR?(P;JTOT!T+1Ar+;KFZz}sx{kU9I-6#hc-(&3{`ODuoh^Vo26NpV5hlSe#@ zA|CmeCyYV6&~CIC)DDUa+~$O4%EEdNpQ(qXn?{r;(Vp;xPk9z+=_Rl%wJJFOXFQs> ziyVJFdH04}wRRa64<8icKM8dyk9^J(wP93b&EFh#WPIu`cA{zDQg!;U_EAx(~ z`MDdxmZ>wzhbupS<(Xe)b%2#Z1*pPHWibQWR@Tpv9qpMhC1HuAlSdF{xX$e2#S1^m z@3NL!@4q>5_l+(dc?)`r&fD_~w8ENXnj;e2wIy@*b@OzeK*56FF23mQB4lv*Z$GiK zFW2t-#uI<%Nq+EjE9n{ZC?4dzw;D2UT3Y_V9+mpy0{@KbJv^e92PYGLf;w9LJ$Y+} zYow%9Z)^?jcsX9w(7v*|u#acb&)fWqC;H9XO#T6iRnS&Qq7T3o6q>4|eDL2YN8EH* zZgji6l#b4u|1+v)_3?X9fi_(|`(*bSa&6>+VZ@0cJ)V61Jf7H(4^o)V}= z?Jbm5#<*VpX~x1GS6lZ)hVaQ_eBp7vG?Xv>g>2seI%xf9f4s)GA|tFF+q0|nkwzHb zOwV+Z8c0w<-$mvsW>>i_k z`*Os=7(RIxK7vCMRTdf1&++wcav(vo-Gy7O9oO$T(eH*y(&z~b zWBJ<4@)&rnz?UR& zFY>9_NSz`Ap(StVP4*QeU$$)${5er5bic$WFY_VgxdJyqUjdo}mbk`{{j+lpA2W=4 zb3w9kNyVwFd@`OdsT`b*3qKfoIjb|(71^3m{$Pzk(KWvKI$zHlr7HZhcI@noRrr_K z4K`VfWeGcP@Zq4J8NN+7&c@q^Q&^^(eVe;GPL#mcPUMS{_#2b?!kc{YYeov67WBV1 zv-%duMJ20Ygdo=#c%0y8U6N+^OI_#qdvC8iIFQO0-sVfSc7RLtdc9+U#?D2XTUMj8 zblu;vX?*b=zR({TgqBu5IBL9SRJ_Lc7{z(R6GsZt`N9l7j4<*u!35k~9dLh+7#)Hx zw5->ZMtH(`>$|1npp0AD%!>5jleU@D?2A{k)B1SZ|XAnfF1t{sV*{`me(qR=cQK!y+HdZW!}R z`^b!n2Ym7&U-F1g6!8h7j)7@>V&E%^?j)`2+wy7id;M`Ay^w&%e6pBt_JptR{1kX- zr7i&*bd$NsY%Ot?qOYf$b8$l6`h&(HlW(1S#ut_Hw>;;Y_^>cYyzpP)izh{{xNt?M z`Ni4D&L7*$_`(-_@+BXjfk@Wi;7Oa(z};}snwvdivpY^7J+Qc(5A%d(c;yY#9osHS zj7R;BS98%*i!1ozN)2YogWnZ617ICjQ}N za8AOO)1`=h_fLQ0U+&d>@-<)d9jk%w{V!vNJUvi!5&!UM1d8c9t!%aEghj zh|c=@flqwo!weFH5)(bc_BWxwW{fKhHF4dwaM*7S-g4lifhha7YRKGPX_Zm+<~qLl zC%y#;5zNFHj)2%Wf@4DtuQQ%5G>RrJdmQ}ZFKK2rQhsG0{w#Tak?^;-hq>HT z!V)=QpZOwBP7{3Qrp9+gyYp`>avSm0aUpW%(MNVOU)05gG~Ga#q4@@X@T4K8W^F^$ zqKFng*~%BTQO>Rv0cTe^Ga|(0NRGAV#he{eH|cA9;fve(x&cTu7udj=FPZOVT@<^~ z_T`KAvW9zK`D6!Q+{u@A@g>W;K^$;4bS;(Odk&9})|B5R7k^GrIplht|Hd~t!}<>U zqF`VMaH|eZ>fJJ?t1;NfG^oC?X4ntD`Bz>54-X$Zh3T_@qJI%q3-h?(;b`Ng zjLSV|LN-onfAu^-Kwicy@q{Z|Z_F@s53R~ruwhNe%guoTagab7EFkXy01aH7u>Hlg zk4e^+<(-q=Q@odq2@!yZj|sq`+QJ`5QQ>1ciF-3`&h2)okbLNUebxK8z}z+zK88es z`a=xO+pex~HBf2&_@}9J^%wVbVFL1mfc(wqhG_7LKmF&|JmZ-rjuWtDl|9Yj0_|wZ z=S}3_@~(as`6Tz^v;(Khc0HJZn+*S5Fwk`gt~s zqHR)^jKN(;#|m`2xX>Ofi?{JDwwm_RKFAig4iBZgQ1J7YF< zw7W@3R_jZ(Rtu;QPGyhJa zo+`W^Tj5=>hhBfj}A-T3>oPQX*W32V^>=>jrCAj}ki7x=>fFVLpv z_R3NhplwH& zx?s93J8o6d+-CSzOcC7^h;s#!P;}5R`?mxx<;+}hGi;=%c}VZkfAa*Ae1UO+z_d_6 z-WNcg4(Dg6lQR#%!2XU!s_;9XN9+s3aTNxa_DSoog zH&G&j&riHxU$*|oP3HEOs`t_J9z7HoJQC;@3G~jO7Z|Z9_+`zaxWriwrTLGKNoKv* zt^fI0Kokq0BsmY!Wmp!`dp%~&m`k767QFVHBYYx|JQe7d2sEDwq+Q$!6e|VkP=7eX z!OBsV%f(;TRqyFESbsyE8l^ogpg{gyK$Z!FF9dqOU>p%x*LPc-h1c9Ep}k+N8CTasgQ(kZKK%L(W=k^2w|+diRsVWv^GC^0luN zkgo*7N(`P>@>9QS^}8V#Zp2P3>3A0Ur%E8L78t)4Xx0eK-w2HFvEG7pDwQtpKtZU} z(V#PHU0?mvz{7Qzf8UYXQmxW)MOv&Z*}j;zz1a$mzktEg76Noz4a zvC!h(8TLxi`t+_9_X?hUdM3c{%u|d$?2gW8Y4%vS&(Ngjy}=^n`(0XWc z_c-#`)=vUBh!3_idC{ZLZP82TtQ)qpzL4|7wq5{dXc{O5RsgPTuX!Y@&faoI?1FtO zrDpvBjRH8L^BKJD-;+4jU<9Qny65{?MjtCt$!o^+#&k6a44MUGi$K!A1P~Vx+Etw- z-?DHs@0P(7&Kh)0VynQQO+bDTn6?WH@3FoLXkLpt1T=5!Jy@rJ7UB%&a$SIX6abr; zcT0Z4L6Ed$x!c22K~HkK1mbRi)RX-U$fFv8Fy<5R{K##yrM9(e&!?px=U=VVNL3L8L5lPu%D3hKH-0|vbMMWsHD%43*;7`VvWICk&l$gsS{R(R-lP{8w_N>` z+@MdcYe?xEQEJ8%n4-i7NY0|egs7N!X6ZkFdhQ+FQ8X?k$G69X(!EG2OsTaBGYV$H z{#|f$5z{}^c5fKB{z7=&)KY5--qW~DA@dX4$-78!pz6ux3BR6@&&b_q zvrRCxv23ahrDjX1Rf(NoHLX=2GigOua{k)7%{iaA2jcB0g*~O=K&iLG9&rirhrW*#b%k2$M2)HCONv#TDL8#k-tz)ZnEAto^2m^BD^emddpE9c zNOz&u-4VG`a6T9;&SN+?F-IpYrhal!=#4c0S?G})rEsV8Jt(+i6Tl&E{I2U=))p2& z1P;42yP~gbQHm#JP#~+3W9+o`Xr%1W3Ab_8so?=J1zwcGoBGXJaFv3|2ai+vP%zEF z&-aIt*K)3JdAxS?JKxe*YrPs9x-+j)t37zv0hJth#>TDE%4ffvk=jonkJLX3z{3!!pv2wXp|6m#&trQc`&-Rl$5+_rVKZ9uFrn9|!80)ud}|BVTq?_1O~)gx+x z6HQMs(>j_%DYY<4ZM_MMz`L_azN6OcEoeEJvgY=w>Emt-vGLw9!?%yRaLLfh-Qx89 zHqRTB`b}zSIJIobrU(idpN5%nX?uFIPK{(n@2Q}-$FI%|kEFDsC~XhkEvR$<4mfag z2H2>oul|7zntS&2w$-`u6Wpsx7$jl6KdzRiJjs(6W2#mirbV%iqhnMFwcLo z|woY=$l=ilG#DDE-4Dw_}f0otxA5;6*thRN4MFYR_XS-69omNURUwTzw!* z%Zi@#m!W;6;n+AzD^m^?Pdwo`xpI!v*kgxck82n@Zof-u+mV+hoZ_D^UOUWiO6^X; z#GMzun;TE5B~ajuNu?aa(R-eFn0%4(Ku*TMU<(kVp-rIAVL)(r{&(rGbJ)clZpHeHHQEK^=+MELDu-$`Ck->v_ z2XWn!ga34{c<@m@Tkql0Z>Ij8C&HoI|Bn2p!h2V0)rp+ePQ9o?O7Wc1FQS&!faD_! zPEv8ktn!D+Iq3&hm2ECe6}fRSGMH&Fsmu!WsfYQ6y=oq3ksBzo5};dxx>Gn zzxvEhvll;(ug(kheMxE83ZC<^pve1&pEvgI`E6Z?#*6X8@GA;-7N5&7Y+^NqMW?k5 zTVGZDIA`_43QFUW2uz{X?ZcAlC%+wfY4%qe7UdR(zorzuu;t&W}Zrx{R{4r(fjyg*5j?(a# z6F=3-e@2C@7l`}Dw#Nl75AV~Mh&AjdXE~WpU#z(zDgElO%VBV6i}`smy3v`cIE8%JN9za>^~!SG*D`dq_d~#VVgBK41S)=y|KD=?v=l$ z#vg2=)ZUY*>=oD1FJy`gi_R~mGEA=yx&Gpr39YzD zgNGW{?cu(#2-I#nO7+2mBe$mKEj6VTX0&dSax;B?;r%&X6*u1Lwii) zvkJBpSvrcaO4HCI4P|4Ze%U%R-+FWUi4YD>)p+|=1OJ~3z5ZjLDVVl83tHEb)`EL- z(7k@XIT!eC3(SV>r?gjWk_@$?bu)yQXyT^b_cIPLxph9E=ZI>(r=OFGaQ0GbTIVut zU_OkILLntcb++*vFE!r z7ugfq4Ikznc~m3Bt!LUbUmCu1cC5umt0Rv>YZtI7kY^+J;qKZAzoEHucz=2jZEKFfB8g)XFfX9=|=0i(>ftM z4|>3hunSyW2N#U@^3Tw&(OOfpH*)F8$DX7%uYpQ_#<{`LGhE#FY0jK-98O(z@-Z_^qvwB{XJ zJC-(xqsN$tC3i`q4#B?n?p;Qlcrph255d)ATVU5&8atBaz8QC?GkI=U>L;8m`3p z%dq#b3OnzDpF?Y+BfbvJ(VUt{YbVhL_h`i%K?*OQ2Mt|xH*DJ5<@-LG?y2e1+q!gL zGOguK%(bf%wia6dc;%1pmvDys9uYq!g;w0BH4JIOAL~YpQh)MY!uWN5Zc`Tab&gM^ z6=}47I&F|a!|{!c%40aed2uTixc=CcE4}TK9@A=1$SfyE4&F>{2%2^LM4rVj{|vXedt?7o z7y%kIWFr+ld`e5}+q3f$uNr@!_SH{QUyRA8)z<0Zb~kpE{=(eKtM`ZQFX*vaSwJhS z;0%v8uDJW!j(6cFm(%pN*CA61X~lC|{h|uIIEF*^&HlQ!6McJf|M3>f(w`O<(YnPn z@YWI-9N6)MZBt+Z`lEa*Js;&Bd5!M%e3dQUiTJeI`Xi{F$Z=W1A=D>$J2DgqJGZppZ#J;4LzM_{rr7B>S!KKuL_=GlB)%2JeTK_GrQ%f7v(TaC8D4f9e!+8rO9yF}(!=YEX(_D)_J)85#9)H#K zzt_{6DPq{5U$*t}cb${Bny%X`{lHmb`gH@XXry(U=w z2jj$A-@T)UD zZg2CLs9!tT@B^*ZOM{I42z>^x-olmo-(Bv^2&uS`!aeL3P~LIu6Rp!nFL}r_#L9yO z$Bq!qUpB{m3S5EZs-J{}RI^Ta6^7Ed;umhuh4l>5-CRk^R zIXRZ*e!?x`(eJc@qBp*wd(4B)7x5~8X&(<~_+1k(Q;S*R@yOU=x9@N>Q@r$+_zeEF zJ7Vsk1j7WKph<>qaPf@)n2n#}Ri%QT$(JzjYd-jNjk zInmm)^4B#dnk}%x5-;0kBC^8pt`-~+fM-MD$*SDiqhT&#-*2~ekeqw4wqofetab$6 zX3?A(_kHHCX~F5^M!w(5onnm*F5^`;SmPe&1}B4)3A=(SicL}PTE;fqSzahmn9gv4 zBSYc0Po;;&&q|c+wHGArcdiiPW6_%%pIMad)cpR$kSoshf7;?zcG$okj|mk^PCpUh zIosAIIvQH(RVK~7xX%OoI$(82tUtw73f=Ra$nfe-U2&Fg^Tcp>M?4)zd4cS1BgiY^e6a3U90tru0Pb+16~l?YOhAb8%E>@jC9S zt61TKSFR}n-`azzn=TX!JQZ1bTH~y%&WyT-6?Y)nh`XviM&qwtf?tQ;I=Qhd_Mp1xRdzRMLBiZ(aS1Kd0A`+`d5kdhRpyPG*hY1>E9}oM^Eqg+@P5!)F7#jOr|98g+6)aXwRKy|9mi*Q=jV+V-;IGU#s;x? zZ5c;-W~;2QY=6x=?c#BVk8OW_PIqG*R@}uJ_m!sS_5;?Z5?)){eS3T2&<@R3?nfa$ zDb{ZJbZL8%h27oY)@@b4$79Vm#D#2^{QI+3jf(Q3-9yJ-m0fC2z&aX%_L#1dsvZ-4N|cFeQc15;pGpwKLFjJJQkQ0g{65q329g-9mDp$sT}yk(TNVX92%s} zL7sm-+yZY!W?+S%d@~L^J3P5|gesa> zroV3dgd26aSR+UdHq;&*mb1wt_{c7qL0>LfH!%;ZJ;G{g&)~Gjrp51Di|^LXUo+Oe z(UaZP{1~r(f>%Ao22-9vb;{>-UXf$3qKQt=zMs+P-rZ$ga>RkM%EyWV40lEYxoJ|Y zcXG+wb$`WpuN$TlcKDx(@C2rw(5#F=kcf!rKC6*>tyFFI@nLf4{EBv9e-XG7}FyfHoxPSH> z3;Dq@e0~WA0j`JLKWrF3*GHUco2;|{$ipYGrC7HNYnJ2H&Vm=v^nLIy(5`Y7xQt>N z6%?%~YRVt;&yNRgY;#L~i9yAF1@jkFY-|`-w6Ni)3eRufO&@;LHhymfR)39k>o_rd z;7JqydVyw7nX>uhr9%f!xX&@K#Bdc-4;x;3kihQ9*cr|KXd$^XwYUl^98}(5cxPjf z&mPAfuB#WX9_i=(!scAm+-J4r)p%(QUiucVdLpO=L2?XERT4K{q!_pNp2>c=bEdSl z{NbA&d%jAp!|)n3Trz62Np1-fe-l)8dy4@t*76+&{ag?4|9wN-KZ%z-6w3~s;yMJm z_t5yc_6*Jzt3yRqlfU`y!}5Kt^>}Fm*02Mg1-Jo=E-pNHc$oXzSF5a>&3`=H(TLUa z_$%=_=eNVNN4~$>?CoRwyV1&xO<2(Yj7sOLQ5CZdD}Max-~c45%dB++89el(s%PoHrh zH0BtSHDzk$Z=T&4-kyQ8U#53`Hi&M%b#vEP;W~fH)E*c&3^KkKI0ih>P84L=u-5)4 zkQh}J{-)!)>0#ZTRUh$^WZ5SSSJ#d~KKSSHL(!-@{@QQ9GRcTuojvcunLa#b2KdDH z&kX+YutQ^fj{f`Lz6H{mhK#Neqh-u!nlKvuw^cx;b8MJ$bZ&^@n#fC>v+v#&ytv5d zm@)=t%$O7boSHOeknwJ8H7e7_?v%DcRfx{Az+o$U9VEDI%yO&s-Cv#1nQa?#eCVE8 z7L2YXv)V}*CIXsPuea5{e*fD`*Ku15j$diHXvHY5@h&mseHS>=+wT}9c}es8 za^BRZI zLt?Wla<7KlGHP}VY>1QBQD-@83M|(wH_k}h?mKe&%BA*P4zx8$Ya=eqrknS?_AxZ(Vp4!e(+kO=gq9Hl3ZnoHb`Eo$F9Q!o~qUJP0XHN za@fyHTJFQBUt?BJ=_C&wrW|Qc4mHf#@CUnDFYZC%Z`T=xFJn+HR62itT)JquR`9YV z>!-E4+#DwM_G5G!#80Job8Sr4j_p`w&zkXnSVU|N^Jg^b$cFuq(nWvIoUd_Z_M90T z_l`fmJb+PKuZIuWTKv7LdBKpK>%TUbV^wVu$fyM|u%q=F7_au)m2KRP6ZQJ<51e1T zbD>c%qx%qEbimmW+9p36J`&$=<}AoKa)ukiXeIH%+*(?=a3Atte8qIVxiIUg{!gLI zvRZO-JKehT%7Kiyf4Xmt^79q_P!-1L-e7c{gwbL$3+JPx(Bpq+%^au4S=84&B2SFZ z1O|=z>P`6BvnjVPMHxB&dXrfjEDeV)+kNafne@Wq<{ukY`nY!)A9Oj^#`zS%=teTj zq8RO4%u;8#b4#{OpqZmNZC@w-YMX4g!S0^W>#$Qaqjj56#4zfO;BbL$oyg*A9~45n zjKHp)muK2;O}WG9#xe>gI6?x=(%W$*Gdb8ZLHx;DQYCq{Y%!j6{C4dR>xAo%1sH~8 zA=iL7X03zDFSsi`a+gi3M#AG#=jfMSx1;Vdig-ppfzeN7G~N=YEOBUFoqO7T<@Rgh z9Z#A@Ctt=ZlNjB5jKYLx&4a3*9t+tw`S+IFuL?M!EhDFFN@g@u81+`peFj;8WuBK>r8l#iWD7tV4bPjpOX!ov61~d-k+y2L~ovXBZ zTGifiWA~9C#>bSs$YKm0Fq$5`JDhA-8t^vJar|xWFFiM>&Kv3T?yulK&*^Q;VH6J; z4Ns*K8I)-F$i>2^q{v9|z=OZ}O)dj3%E2>W%k#~KetOR_+1q|}_nY}ed5rEOM&FpZ zE`x8Gc3|%Mqwgd~nsfiq$rtx5f6S=O*28M+ZZ5HD<&IEa6PUG9(^UL~Q9NY~o-z9Q zj6ned+TWnwgT>~%FEtl#JmoZlsB@J0j=(j-DQk& zk7M_7Vw_D7Ut2V5wz-M-u=IMvj~dI$8O006;3c#6IZvtKZEpHakt{ps>&h&VdNn;P zc*TITS`Swo8b5v6^U6`W@6&8v&b4u_U=*(z^#*<=bo>t3sfD{_yTIn0Dco3f>kTb@ z5~r9l`pBiQDn{)M1FX6lI*~l81Xukh&v=7=>vCCMdeSm=!p==KjQU$fF{MG2CBd(T zJ1r{aVk+)%x8a2Izg(zg6m^X5J7z^aqn{xhnI$A2uwp#1jTymld^~d3n(rb;&+-d9wd{1l;pY>Z7{zDe5Wy>IUxTG7iWJ~H~B81T>BRK7C2)arR`;geyBdSXYXJA$&~eT6L#4}c8n=&;GnWVVj{XhFQz`cKeik_L!CZv;8XjXQb?(f6a`AJybnxAZ&=8peBm>X3c2x^*K5#%vs$Y z5uEYg%zuN ziCt>VYF}pIUhqY!4GUYY+jlAZ$4l`3&pCg3e(?1QJ)7`@$&wB}cAPFS_N{xFtG4ED z!Mvosr)*h;9jk87YWKoj3$TjrKFQzPJjwV9U0Jo}3|CU*z-l?NnpapjSXL}h9$YBX zwb{Giifmg)qJ5Odv0e3na@?_e+LU3#Z7RoqQY_T2E&eT=hqViaoYaY>58e?BcMaRt zq;O&tYv5Jp_dN$%BU+FCa!jydbmNpTXIA0D>erCx=8xFz!^i(S(qeQHML&VB33 zs=1L7aA%1pV(0dwusTrYq2t+47p>gf)_06Ga1?s53Qtzy#p-*r@boHq19~$KKDfZ% z>~91ACujBKmuolhuCfXrR{a{QxX$YPvhWf*L4z+{JIdSWdyT(cy@Y4D<*KJm{aBrF z8nmng=h1ujrlp7D-jmbMHH+T*vx)!~9)E5XZO4C~b4(kOoi}$u$hg$+M@}*eWEDZI zdN2$Ax6?q<#c`Hd*@CsF7qCIw5;r9r{ti>)+ATjkzI}3T@=QmQw7<1N*tMZ7+{`5J zOKjIRcz8PF#<3;eylJaaLuh*dBV!)d!5D}?Yrs=UnWI7^_}D! z#TwjVb>oG^iH?nb>De~PbHS-KlfK({r{pWmXjbPot2sq!zxm&OFyigdhx28A*0aqP z{3MHEHSVw)L1N{D7Vi|#!gttwI&tas+WY&bZT=&cRm8EncUgmYRwsc4i!G4_$1psA zk;KAlUx#lhxlzv1NwYUv-AiW{&+9vPZ9038)rl7-!v`LLqeCEt7G>Q11bwDf@%WtT zx`J}MN(nBVaJXb)O-1S0YiX7<-|a0(VRi4bOP&aV_^{2=oxgsGmX}SsgIe^YbH8q! zmCAySoXKFnbGC^l_2)*I&z`-?el>?mV>QxQ%?uVi#hI{zm0sc_$Kq-54R3oUnY=7v z#LZLE_u+2}Cq-qkIuBrc>1=5J_LIlqhb#DeQ_$p9=_91eeKdXo5)yr4itQ$J{!wh=*p9WRskJwd@S%oW; z$bv!9V*KdTk2|s!PuD;Tx~?5GeZnf9va8n^!jx4c>sPJk-DwYZ`)4IRu4KzIR@a10 z;Nn^QDcd-fU+6hi zl+nBIcXg{jO3vitGy6?Aa_7wE@5VQ48|_HmR>rEAvj)$^FUV><0o`;Acu~%X zl_lfrIqCansAn&JVq)-;RlH)CSHt;Kcn>a*yL0wchl=Ea$wjY2?|;)0!o@~r!M~i| z6;`v^YRsDUlqX#kteOj`0aILckHzoETf1o7+K+)x9KN>};Tii+PSiLPclgiqyKd~; zsb>C~RaCP2RqW~-uA!1&$KTPJHr;V-;yQ)v+4H}8je5hbb5N;<58i)b-~Pk+&f-rC zHC-*Y|77>{PTi2z*)^>0TXtEQ?3(g=p5l)mww$;5xiQ{t!*u6&cWYTi9c%E8)vags z8(6q$(SNc9Zh92#U(t7?XzJv0rs(R!T>VCNX%njnwkFgAdkxByCw`L}7gyz&8JQi* z9e?)3!h~j4(ZViUV?X04M1-BUy#rwA1Dr(-9H$Bnz$D8cs zO?{oLW*6{1l?xzGIqsM4War%%=p5ay_VlKGX*a8JUj|Bg;MCn-y*2EQ`M;NqS9tNO zd)Rd!SdCgy0I!qAc-AemLvt7W+I8$#^SJ3=I=$?wkF3Ebc1(=`?gaP2QXn=vo)hV> z^4sJ61zHdJo@L*zTW_ek%19L+I4Yt0Slsi;?3bU0bdSDqA@Nw@Pv(8bsyZgBOE0R9 zF;&$uQ&l8!%vIqs#9{c0Lyu5mp$a77T0N{T+?2a6c$40$u800TZuxOX^Z2-QNau@X z6(?$c39re|M8XD3RsE|1D^*yyaKe@}#6c&-{;;^W`@B>4_&xr=j(jSZ%t4}ZNr0?C zu5T@C=cdwV1_$vfqaa8G#6kuTLm^Bz zP)*cTsSUr6$>O-O?V=tWB`v0`q$QFn<^zrN;g@$FtP_j2K)GaIJHJAXqM)3>O-8Ek zWy&ZN4RKK>u8_wIy>L4}MDkIFVjzthB+tcYC$z#wjt&7RkfT32Nce;$MN2rZ*={a^ zU+qyoB3E9N*c2!v)24JgKS3Tx#S6oj9&x%HorQuiA{0jm*7Ab|$e8o*w_fC+i2lc& zM<0VT`f#K8$l=ldK8`thyz*CN<441m`e^clyS=-2IYDub3kSIoSS>()0Q)~N9;)CR zLiYfO$j21WeN+lPQ>7lr6CKtUvoW~rz^9>}6cfFpP+B7IcO zyNb~>Ql<+!q@6`2gl4n^>$P=R;0-G@UCLkuZbB4H%7t)I2Px+&Ym%Z)l5+_4 z0Qj;Iy(BA-Lg7$IFtBW3(cB_6S&J$t^pPOISoIND4A-sX{RPqhL$oD}38o?`V>*!^ z!k`RD;^%Sy(G;TK=${-sO3Y9xcP$rb&0KOd|3rjPf z#0zOuOvqp4#7bJ3Xz5+4qbx;)%1Iuy)j?TWmPwy;< zk}FaR@pXxXyq%v3lhXpGiZ6wnNnKEqzqktdLn4@RQ4TkS3KusDI+$#+xAc)PME;2?mOhlEutpLSiI?m( zZ34#z`%5ZWk`I&=1n`YyR$>;$WSAMI9(DHNwDID&tZ;}6yOZeB!zSd zihBD4khL8zExbdS_mB`xP87vKT%emEbJ0x#VdmWe_$4E~L-G>%D2z))(k)#20 zNG1^2Q0f3oBM?6S8Q`iCrs+oMm-GCnPN5&?DvrPfa%)*Col9S5JY<(8?cBE%Dj?Oo z5~1e=mdH^$A(6>PRT6-e5|j&Zyl8QS&U5s)enIA35mt4U~7`=p;pa}#-fxL=a2W**C2;Wc%5GKY=s1ibh z%&`!vl?;jjeHW3nED$;sxKt5j@cRUzzzTpTmXg*6^HDVv6$MByXlkKC z?nR*^g<43nV4`*b4q?;nB;LVCouo+`9x5;`dPowi#9q=eXHhf*9LR)%G{`dtNRgG+ zzs_I?`-jbsLxv56U>_+A9K#rd9mf=2%O?dPeu+R3AJ&jQxF~HQEFz+@THeCXdgv~}fNt=DbS@E$=o*An zh~7kWC|?z#MK#Glhe`lUSR)Of5uqePuNL?xN+GEOg4Y*HlGTt!(gs?P3t>(Qi~LBv zpQ#Z6q`udJUJ(i=Atmc60$kDHoO`UCaHtg01RA+~U#>qFhSKU4e4 z0FkTIWGYCNKsb_MkgiJQxAS{t2o~3W)y}F3DOcz}AVtPE2H@}jS)jyN#f3U#jw_(+ zOQrSrgD^`Lz%K!nGEQv6eXG(bOTxFfjcknQ5`|)+P`|ENL&$ZrD2}x3Gp*(>ArFEs ziKLTdOcrq=g;Ge#a4~T7R1$hE0GxD!3r)!aILMCb30=^z8UaeI8Pd2~8EIV%Op1I- z03W4FfpWH_S#Vz(AkW9BnUrV|pf-T2*X7AD+;^d`;&3tkC@bfJV$IFK(Nrdm7rKkQ zu#=>YLLH=xvk3JN2vg^S;6L|g9%($x$43N$=JABUmo(}FlB}s9lGnoT5jct*XiwUk z_MxxSeslm`AS#6QV=hpNo;(qJ$Y;ZD0uzFFQFxDM&Z0unB?I%$9MT1Z&-HUWWCd{! z2s$_5^qe9-@&r1t@9!Z(mq`wYr!rD{fWO-js-f~v5)hm(NgF|ba)7ii)l*ke_K^_1 z0vvIG#0lri2*g6raAhfMT=rw^L8UqQv zE;-WRpwV`e7e&VK3MPENNaoLNmDI|7xoxse##LA>dnEish0E_2*vUunBwQiy;D3b@g#URcQ%UJsM!9ew zKvt-vd5Uw!?J%o7wT6_c{q94D7wg__R0GS7fpUa?glMe>AbB~K|z`K?3@Qdm;Ily{+xqY$>F5$|> z(l()oN(iSxN`!Bv+(^ z260}kEMEe1+MM9l%FqXb`%#DtVa0qYgU!e)Quf|Of(2{PlB6h&7&{1&y6g#jCqa$? z2aQAr2=j@-=qQ3U=}a)dL=6Fj4ko8R7bd3#)IRqz?+z0rOJXv4)gn`sE-G4f5% zoIJ)tY$!72n~7dX?fHrF=aN8`V3k{ZL&kzBl^M$lR4#JunFd)1w}$OvE(?2PE%GZ; zXQ_kGQtl@$qMwT^sZ?P--6DP<^pRPyNun^uh-bm;5hE99%ja^+owN;BrWLejaJpNQ zo&iv65+YeIU;PDuYgH<^RhN zQ2@yUwbhw4#7>6X2n^*RPk>T$fsxGNGxkXs5~wKNkf&s!{Y(}4KwQ{QcOd0Dq<}Y| zl^;MOKL{($pXe89sb~;FmsOe>bc@7@zK|jSQ~fr?I3{9r4OWWk zThSr1*!;jTl*#qs5%bE5DN!+%q)B3^TSCGxdsvh}+5#$|3?&j$`I2T8V-+ysk|FlF zObvuS8vcl_7QL3;qWxKCCQ|OkWYeES&ML{gd$RX9O5}>uu%rAVe#XgS4OQEuT{KD| z4Fc(!3UE-AWI|ZnDGd-jreDi%;SyXTc!yCi83VBBvLRO#O%d5iWMwkw8Yq{P9uOrV zfcH65xG^wx1%N{)Rv|zxk=Ur{e^4qXSdjwsl0ah`ML}tp+DQz04Ji~cbqPz#;SzR4 z*i^e*!-OKj0mT3+tbVeZ6X|9Z&WwBVsQ zf)COti9nE$Z6qCZ&=iRCVkM5UiyYKN(t2o=PSVOH&)qFG9lxtx8kU$j?;1CV~?L*YqKsOLPO&1t~a7#X=S$xgqEQVNKk9A?!z4 z0o2vb5>?C#qh3<(HCP-_PG!)~GU#QAhsRhUo#;6(V4?Ku^Pix^mmVl1;x?-R8<22q z;PEC9@3#+ZNjv`)tjGd#zU2B21m`nd{tBrRRMSGJ2~0p2;OjktRz4X#M^PdNTzghP z1>_2GJEF^^?pg_Q8fd8<#9`48H^2)O6)i=crX;R*RL|A{FWz|SF;!gWXi8?N7i>z07@ZxN=_Wt5xDkJHP5L*XhE?VnWF z2oYF{*9ipOz>ic0;};6>^Suf6tfK;XgXB=1 ztlx`b0zDNY&!tPHM04%t2H-3T2;3v}f`XSo2x*{H5(U>v5{beT&VmUb$mM5>>}1X~ zG%K4l*n|S}FBurT_#P~Vk1A2H^VrUh7lJun1B?O`nRk+Yr=?P9@dHbRa}lG5P!|5u z-pYUz@+pLcrBY&e5eut~MFo%|Dq)EtUCOT$1@ryH=s77d;KV6|aKC3O4caElQn8a0 zEAS;Zg44rkXNin$k%CQ_L0S$ zwLl6P*jy;ZyCI6>gDmfaG~R&W&;#KwO^sfX|5}hM2g~*o32V5)gh$3IFqg_+6ma^@>*tWl zsRDNofgqua34{;53>cJ`B$|08a$=oX6FM5Yr4}5GM8Av`aZxEC_A{QB5E@jODj@v1 zH?IofqJJG$h144sRYMx5LyqjAiqEa!9x_XaGvc!i9VfuyTn7z^G+61StS7ZyqHMtG zMva8hBGd$+-?QKjXnewdti+)8dXU1r&VY26nEzR^}mv1<*!nj2AY7c@B*h|7*vFvBZ)^ zzCcdU|0%@7f&w7U>ry&RQ3sU$oZEba_?Q05K*0Z!8~2f>&OpJ0RE0bXw!F|ymH(`m zMnZ9}v&>zNVhJIl!TU2Pp48Xx%O8|6$dFN1Q~^FBbP>Xw6ajJoXXWQZb`Q!417t1K zpxI>sh+od=`+)Sh7|DV-(Y>q)(Q7>P5aRz|8-n?OBLcI4`$C!`C;$_ni$Mh>?aOTt zLbFkTYyf`V(C4JiSPGQ@oDd*0#&?-0*`fEsd}#%?Q;Cy1;2Ts8$BQ3BUFW-q9&sMa zlBiHInFBS9gXEsdeb``YkmQNVSaV@G*N6F_5+X9EEMazl2ihJggCSAwZk9p?++-ds z`WFxyOuYga{fosJLLy@AWsBm4_P`W7C{#fj2Ta9{G&&Is147A&hpGuJrKS3og!~!U z9Pj`fjx~*%NSP#X><}2nMcyPG2+hyD!5;}ew9W`dlHVX5aJO9ttp8U> zs0pCUJDC10mt297#9K;y4=Hd%{*myi9Ql#zLD-iNi37sXpTwcLrckcmOtd6Z=QD@S zWrz=I-ob#)j|1H?fe%}^cBD)ap2pt;J)I)_Fyy#DV5#4{w64yNUY>PSACBVB4-HDebRnQ2}&cdL5bU1|o@|2WEPO9QgTjfM2f4a=;P0$p*b9 zy`UPvse=kg1t%|v`x*#+cVFchYmDm$O)~p<=>S zQ0+iF8VCgQFAlVMUIJe^-YObZoI&Oeb{JMbwHB}wT*G=&iCV>jYOsFQp&D8`qGCTI&TI*5PC&##a? zFiD*OerbKXkvv%L9sv87pErb51~-NKw~LhyyCAYX1e~Q6y7vb!IP=i2>17FA_>mGT zF}QOFbiP_yFH;2`kQ#BXI1*+u(G5LBMzTzPD*c)b7PatWMMPIbz0lUd&oyRYc>Z0G z=sIbapA-cF9O@6XfmZQM8qLPZYdA!{5UFxQTp+h$8YE@xOE|buBX*Qns-jR*@GTD& z!*Kv`?pTRyWnN@=$Q&vFZQ~vfS&*tev)Zisb3mi(fKMai5H0=Bi_8{?44OF(5az(~ zm%IO+OdxbJux9d*xMpIcCnPLv{j0n$anO6EWL%`E$;;k z&_&Yta3~^!lq9-UIgOkFPwCn8l3Z5t7Q!}n_J40!9_dzKz>fj;PeKp!m2kS~8OZ@= zauwpdS8xu-1UzC8=H8@1ee{QrfE+%mR;p(xkmOtiRT$+%IdQ*GZIF=7hZ-@kpb*F( zFmFL+dQND=fP|4!NgOAPib+Z*i@ZRc7%BWt*UWZb*hc(RFPQ1*uojf z1Ka=F4tZQ!Zl|hdue#bnRm)LTaYa?zNp-3-!Bmk*WfBRXA_NXMRW(=D)o!Xo}qqn+7HlVh<#I5*zqk-QkfZU?m`5pH?hj_%Ic}8vY&(->tWZ9b&(IdM!3SL z?y)n4IQ9c;5n5Ph=q!wsWH%u?hyy%{uz^j|rp+js6eK3OuvQq-7V`3^M~DntC+S@M zwKGzU&TqWrr&L>%+!K}%8XxqKX4g}x#APwfgz51tr%asc0nhu~NFP_ph8s)Euw4@U zdjSu3&ak_%%T>9yooQ?ha+3T-4T-1Z-}ny{!R%ZW%E_tdODl=~LMiRIlUfmbJDne* zVhyi#VFu!(^vc`S^?mKk?~Q$I(KGw62Ie1{>^4OSc}9Ne^*z}4vb;mqmw^>LBOA>c z@Ep4oF}$E^tsK52??L0=2)^E9C5^*3KM?&ydydpXojO+0B%BV`O2nCzxI%0q#7pcE Ra+f+i^FDco1F|(7{sni?owNV| literal 0 HcmV?d00001 diff --git a/java/lib/build/libs/lib.jar b/java/lib/build/libs/lib.jar new file mode 100644 index 0000000000000000000000000000000000000000..77f1a996552b93a2c207a0cde3f2505656498e79 GIT binary patch literal 723 zcmWIWW@Zs#VBp|jNSv$|&Hw~VAOZ+Df!NnI#8KDN&rP41Apk|;rh2A#(m(~0Kn&E5 zQ0VLE=jrAe9HQsz_SyH$X&-N0y^Flwx?1PXoZlQ|aK-q+(??I4kPKVARRzUXZlGaV ziDijNrNtT9i757hl(Nq-wR#6slEBEoAc3mXCo`!iv8YlnIVZ8WIMv_U?}&lOoatxP zygAEp%G+fI)`qql`|=fuquAE7IoO zJO2E(bwh9pCsR*Si{`Noj?GgmL@IS>{r(fRF65@*BH_C)-t`#Vx*dOHhJaD}q}piP zjy)GHas77TIDa-sa9L~KmC*guPTk{*+&oEinaEeCh_^e$53jqVo4EW(e5ucj?P+Um z_J+i!PCNX~+NmhHDtZ<7Td$ye%Ocequ4lII5O26+YGXd*Y0nW0y9(C5Joh=zX9y_g zeDc}P+Y{Z>lIv6Z<3fA$hoAmMpR^_asH8K`u4fGJW@Hj!#vP5ofC2&mhPRF&8Xl?W z+R!5vq!V9yBYM0-G=i*Nh^i4KmIJ(5*+42; Ofba*9J_<|~3=9Ckh0YZK literal 0 HcmV?d00001 diff --git a/java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html b/java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html new file mode 100644 index 0000000000..3031b841d0 --- /dev/null +++ b/java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html @@ -0,0 +1,96 @@ + + + + + +Test results - Class javabushka.LibraryTest + + + + + +
+

Class javabushka.LibraryTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.002s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
someLibraryMethodReturnsTrue0.002spassed
+
+
+ +
+ + diff --git a/java/lib/build/reports/tests/test/css/base-style.css b/java/lib/build/reports/tests/test/css/base-style.css new file mode 100644 index 0000000000..4afa73e3dd --- /dev/null +++ b/java/lib/build/reports/tests/test/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/java/lib/build/reports/tests/test/css/style.css b/java/lib/build/reports/tests/test/css/style.css new file mode 100644 index 0000000000..3dc4913e7a --- /dev/null +++ b/java/lib/build/reports/tests/test/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/java/lib/build/reports/tests/test/index.html b/java/lib/build/reports/tests/test/index.html new file mode 100644 index 0000000000..837e00ab79 --- /dev/null +++ b/java/lib/build/reports/tests/test/index.html @@ -0,0 +1,133 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.002s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Packages

+ + + + + + + + + + + + + + + + + + + + + +
PackageTestsFailuresIgnoredDurationSuccess rate
+javabushka +1000.002s100%
+
+
+

Classes

+ + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+javabushka.LibraryTest +1000.002s100%
+
+
+ +
+ + diff --git a/java/lib/build/reports/tests/test/js/report.js b/java/lib/build/reports/tests/test/js/report.js new file mode 100644 index 0000000000..83bab4a19f --- /dev/null +++ b/java/lib/build/reports/tests/test/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/java/lib/build/reports/tests/test/packages/javabushka.html b/java/lib/build/reports/tests/test/packages/javabushka.html new file mode 100644 index 0000000000..c50fe5999a --- /dev/null +++ b/java/lib/build/reports/tests/test/packages/javabushka.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package javabushka + + + + + +
+

Package javabushka

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.002s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+LibraryTest +1000.002s100%
+
+
+ +
+ + diff --git a/java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml b/java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml new file mode 100644 index 0000000000..d06e1fe97d --- /dev/null +++ b/java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/java/lib/build/test-results/test/binary/output.bin b/java/lib/build/test-results/test/binary/output.bin new file mode 100644 index 0000000000..e69de29bb2 diff --git a/java/lib/build/test-results/test/binary/output.bin.idx b/java/lib/build/test-results/test/binary/output.bin.idx new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/java/lib/build/test-results/test/binary/results.bin b/java/lib/build/test-results/test/binary/results.bin new file mode 100644 index 0000000000000000000000000000000000000000..f5767307578ed46df57c9e327fa93b66a3c43c2d GIT binary patch literal 128 zcmZQ(WSX9pSeBSnTAY!csOOWJRFqg$8IoFDf+*GIr-_(+f Z{FI>7lG38Q;*g@!RJ@W5Oi)vb82})PFZTcd literal 0 HcmV?d00001 diff --git a/java/lib/build/tmp/compileJava/previous-compilation-data.bin b/java/lib/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..28d5565cd61893d10507bce77ba30fa1dca615b3 GIT binary patch literal 2859 zcmb7GYgAKL7CzgcP&M=@SQXS#MNu(FO9ez!27?hagg1(>dWkp5C6{~S%?%J=hzTGs zUkE5nt*upjfcU6FtAZ9P)Uj%*S_kK4N2g=!YpF|})-LCScD3_s*2=wW<*ajZ_TJz3 z?S1w=fV4pRpt39`hsm^AO=d=c3OrCTmnkul9a~=n-d?sS;Z?%Rt4~{o%iRdANB{Hu zHVN)a`Vmj!MP5Try_nq}6&pp-$g=}bF`Z_M!a(HUL?x=QFnTj%WL2DC5b>t8#*~nV zK8>kQBDUvDK4tb!dp#MGL1ZxTA--e?c>_5`$v6~k)tgwonUxF@lg;Lel6k-|RA`eq zemE+YSc@pheyDJzjo}sksHk^70+k7_1M1BIY zeMNcSE#!K_#te6&&2_gdkJXERhY?w(v%Us72*%R7ISHYR?y zPL~j!n3zP8NeU`*)mUCCD*IhSMH(t)TuGH#$(oKF61#ws5Cj{~FGL&c8K{^wFg9Ms zyOsa>wlVNYw??Qx^OwCHs~3^Q#B&M#+p1?QtP-P6-g==sYW~uvucW~#mHn0`FVnu8 z9JL&6WMzgE*cA*aq&WFZDz+(t^Re(eHPuBHaJUX*72I` zWFbx@7P6A~N~kEuRS)+wLWw97_Z2zguLmcnzx!pr4&J2F{n2}LJ7=^ zDh0G5qzsTFGfPnps9c~&-9q`$g2fGON4c#gW#iOv+vioK7g{SIVH4;!!<;RUx)tW~ z3WXwf8#NVJ9DUV3mgpBpbu66wXP+&(ODaLT9RjN$sTyKb8KH_AKu*po1WZ<-I}o`JNp>c2bJ9fXXZqm)#54s>F}4UB7vzId1c<@fV_A8=D?k2MK?K6xDlx zifx%Pt=nA`wgHD6x)gi2O5N7;_}2C<6~{B)hnTz!JaXVs$Bi$mFSLF*dUef}cRO|i z`GCgwkjj|N$h29!*tGh9kso)=*-`V487*n+_5k^aZrDpTlUM`K>SZPVIa^iL6Eo;l zW5y55*S3VU?t|ERh^vDAG_Y_0PzlG<=BhW@@%@q=&IV0p(7MST19p~g4Lt}8Rvn^r zO{{=J2O1xp-(1JF4XqkEZjI-xnRtK8oXhh!kG~uF)T`;uxOg*wW^xV__ zt;C(_e|shPx17Fjo6=x@k2~B1qSu zoAIoz84_AxLDVM{JIk0qrE=Nmk;c#MS+fmqra1@8+WS96h?h@6;%SJEIzv-tlSPT; zS;oq?QX^61@xAL0d`lk8UZg8KRDT4Y+t>!_XCX~IM-wNQ1u<9njMfXoV`;-QA^h*N z^2D}@|Ne18?8|l_9Y8*(0EeBYj`gCTw@DJ!Ly0{M?ak`Zd;8}!92!26>qMQ9)&=AX zAQyo6{s~a2wYMZV!RV(Lfq(Q(+BME&&U3G!+h>|%CTlJN`I36QMA>9goJy<+o_YuA zUev_iw3W1v*DtvYR5q9qT>ocheu)Ti&h#_~HR;@aB zqU=~f_4E87ZW~Vr1T&F_{#F6KI{ZImOWk&^ciSS% zZHqh#-9ZZp=%__baN9wV`z96cn^d~+QHks5=;?$Cpb7KNqA7d-7vTHopzsc+3kO{b zl+jGLnH+N;R}^!YC^G7o0} literal 0 HcmV?d00001 diff --git a/java/lib/build/tmp/compileTestJava/previous-compilation-data.bin b/java/lib/build/tmp/compileTestJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..08a1bf7d5fb3fc7dd6ce4bb2f2ad4410e30da8d6 GIT binary patch literal 3207 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 literal 0 HcmV?d00001 diff --git a/java/lib/build/tmp/jar/MANIFEST.MF b/java/lib/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000000..58630c02ef --- /dev/null +++ b/java/lib/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/submodules/redis-rs b/submodules/redis-rs new file mode 160000 index 0000000000..694fb7b1ec --- /dev/null +++ b/submodules/redis-rs @@ -0,0 +1 @@ +Subproject commit 694fb7b1ec1a826cc5a8e936a6c6eb7610b3ec65 From 5f51a5b47b370344e529e1399a6c0145cab8a2ec Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Fri, 8 Sep 2023 15:47:00 -0700 Subject: [PATCH 08/81] fix redis-rs submodules Signed-off-by: acarbonetto --- java/.gitignore | 1 - .../javabushka/client/jedis/JedisClient.class | Bin 1354 -> 0 bytes .../client/lettuce/LettuceClient.class | Bin 1706 -> 0 bytes .../client/Benchmarking$Operation.class | Bin 250 -> 0 bytes .../test/javabushka/client/Benchmarking.class | Bin 5246 -> 0 bytes .../javabushka/client/LatencyResults.class | Bin 581 -> 0 bytes .../client/jedis/JedisClientIT.class | Bin 3456 -> 0 bytes .../client/lettuce/LettuceClientIT.class | Bin 2526 -> 0 bytes java/benchmarks/build/libs/benchmarks.jar | Bin 2423 -> 0 bytes ...javabushka.client.jedis.JedisClientIT.html | 142 ------------- ...bushka.client.lettuce.LettuceClientIT.html | 115 ----------- .../reports/tests/test/css/base-style.css | 179 ---------------- .../build/reports/tests/test/css/style.css | 84 -------- .../build/reports/tests/test/index.html | 153 -------------- .../build/reports/tests/test/js/report.js | 194 ------------------ .../packages/javabushka.client.jedis.html | 103 ---------- .../packages/javabushka.client.lettuce.html | 103 ---------- ...-javabushka.client.jedis.JedisClientIT.xml | 23 --- ...abushka.client.lettuce.LettuceClientIT.xml | 17 -- .../build/test-results/test/binary/output.bin | Bin 990 -> 0 bytes .../test-results/test/binary/output.bin.idx | Bin 104 -> 0 bytes .../test-results/test/binary/results.bin | Bin 466 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 38419 -> 0 bytes .../stash-dir/JedisClientIT.class.uniqueId0 | Bin 3464 -> 0 bytes .../previous-compilation-data.bin | Bin 39190 -> 0 bytes java/benchmarks/build/tmp/jar/MANIFEST.MF | 2 - .../java/main/javabushka/Library.class | Bin 352 -> 0 bytes .../java/test/javabushka/LibraryTest.class | Bin 681 -> 0 bytes java/lib/build/libs/lib.jar | Bin 723 -> 0 bytes .../test/classes/javabushka.LibraryTest.html | 96 --------- .../reports/tests/test/css/base-style.css | 179 ---------------- .../build/reports/tests/test/css/style.css | 84 -------- java/lib/build/reports/tests/test/index.html | 133 ------------ .../lib/build/reports/tests/test/js/report.js | 194 ------------------ .../tests/test/packages/javabushka.html | 103 ---------- .../test/TEST-javabushka.LibraryTest.xml | 7 - .../build/test-results/test/binary/output.bin | 0 .../test-results/test/binary/output.bin.idx | Bin 1 -> 0 bytes .../test-results/test/binary/results.bin | Bin 128 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 2859 -> 0 bytes .../previous-compilation-data.bin | Bin 3207 -> 0 bytes java/lib/build/tmp/jar/MANIFEST.MF | 2 - 42 files changed, 1914 deletions(-) delete mode 100644 java/benchmarks/build/classes/java/main/javabushka/client/jedis/JedisClient.class delete mode 100644 java/benchmarks/build/classes/java/main/javabushka/client/lettuce/LettuceClient.class delete mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking$Operation.class delete mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking.class delete mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/LatencyResults.class delete mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/jedis/JedisClientIT.class delete mode 100644 java/benchmarks/build/classes/java/test/javabushka/client/lettuce/LettuceClientIT.class delete mode 100644 java/benchmarks/build/libs/benchmarks.jar delete mode 100644 java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html delete mode 100644 java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html delete mode 100644 java/benchmarks/build/reports/tests/test/css/base-style.css delete mode 100644 java/benchmarks/build/reports/tests/test/css/style.css delete mode 100644 java/benchmarks/build/reports/tests/test/index.html delete mode 100644 java/benchmarks/build/reports/tests/test/js/report.js delete mode 100644 java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html delete mode 100644 java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html delete mode 100644 java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml delete mode 100644 java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml delete mode 100644 java/benchmarks/build/test-results/test/binary/output.bin delete mode 100644 java/benchmarks/build/test-results/test/binary/output.bin.idx delete mode 100644 java/benchmarks/build/test-results/test/binary/results.bin delete mode 100644 java/benchmarks/build/tmp/compileJava/previous-compilation-data.bin delete mode 100644 java/benchmarks/build/tmp/compileTestJava/compileTransaction/stash-dir/JedisClientIT.class.uniqueId0 delete mode 100644 java/benchmarks/build/tmp/compileTestJava/previous-compilation-data.bin delete mode 100644 java/benchmarks/build/tmp/jar/MANIFEST.MF delete mode 100644 java/lib/build/classes/java/main/javabushka/Library.class delete mode 100644 java/lib/build/classes/java/test/javabushka/LibraryTest.class delete mode 100644 java/lib/build/libs/lib.jar delete mode 100644 java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html delete mode 100644 java/lib/build/reports/tests/test/css/base-style.css delete mode 100644 java/lib/build/reports/tests/test/css/style.css delete mode 100644 java/lib/build/reports/tests/test/index.html delete mode 100644 java/lib/build/reports/tests/test/js/report.js delete mode 100644 java/lib/build/reports/tests/test/packages/javabushka.html delete mode 100644 java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml delete mode 100644 java/lib/build/test-results/test/binary/output.bin delete mode 100644 java/lib/build/test-results/test/binary/output.bin.idx delete mode 100644 java/lib/build/test-results/test/binary/results.bin delete mode 100644 java/lib/build/tmp/compileJava/previous-compilation-data.bin delete mode 100644 java/lib/build/tmp/compileTestJava/previous-compilation-data.bin delete mode 100644 java/lib/build/tmp/jar/MANIFEST.MF diff --git a/java/.gitignore b/java/.gitignore index c68362cbb2..1b6985c009 100644 --- a/java/.gitignore +++ b/java/.gitignore @@ -3,4 +3,3 @@ # Ignore Gradle build output directory build -.idea diff --git a/java/benchmarks/build/classes/java/main/javabushka/client/jedis/JedisClient.class b/java/benchmarks/build/classes/java/main/javabushka/client/jedis/JedisClient.class deleted file mode 100644 index e0af5d106f08fedece943280f1d632c44c98dbe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1354 zcma)+ZBNrs6vzK}8*~rd*d|OKgz+G-4P=T>n2B#lNHj$akQsf~jmiq8HEl=2ck+cM z3W+9u0Kbag!FbMHvn?A{U+lEEz2|>^=k$N~^Y^zO0JiZYi3p+!Vk$;3Dv&+V&-JRM z+sD;cjT58k3yeNBZPR}y5G|GK3gQB@u5n~~)uv?{w(nI>7kV&l-k% zs5dNnlGpgF)pgh8b?`9ew@go9Sr+@pcxwVV&p9(Rv*GIQ#h&4}oFnO+cLJHFW7}k@ zLua48LL48+E&|2yFTj2xO~s=$)3KRwXu1Nc|2LXCft(r_0wd?T)uwin2hwJ{Cik9| z2JX0IgNtB+>=mI?BIrj3qo~k59TSQrT2<-F??x(D5TEHLf-*&Z4J1&ZsCG7B4ePWL zxPuLfoV-p~-WQ2|<0^@PKSHAd6SNAb*L;PXl~~KE8ODkIWt9Z&M8(TY~e6 zYHmgcBQuskU(+xw+ZgJ$v@-?)~-q`wsvQ@iLAcL?lFI^rDYp=twxb=&o})>hXyEg=}bsnuMadSoNq8h$$#Ld_Cb zvLRE@KRo!d3Y$_J3xgU11t&mF3o_C$7^t3#sfYey_#veI&YD685`Wv@75b$ z)&4-Gjg^g>rFspA`nudvuPeG`yFG_?%T9qRTC}SKK3Fm={Z-?nqB{p_#Ux9*#AoqP zbqxL;7^7a@a2fnW|6@cbKr(3616wpSjaOK?K;L$5*+WwLSU=-L+QykwJ5|jFvAk4< z04!XFz(ffOnTySFq8TdN4M)@W3_siOWH0lGG#^8BmjMxa=whH1ypP43rVtF9wC}+d z-E_nVeY6(HqR^YsyEpe0?2|aMO)LKmD)U2HW&Z$n@QA(`9ygue5+FY}n@daI5Ie_U zF83LOUvTXl<9s`Qfk}pQ%(alyh>}MNF{Fv+FcBXKMVW0z$>RxObBg=!Xt4>QhxTUbpHrN)>?#Fil0931y#ZX8&9ec<~1v Cte-Ie diff --git a/java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking$Operation.class b/java/benchmarks/build/classes/java/test/javabushka/client/Benchmarking$Operation.class deleted file mode 100644 index f4611d8d91a50da0c7a272635794db0760152ae9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmaKnF%E)25JmrhvVv&z0#+8<$O&vTG1^FBV!x0Hptu-z@o*L%z(W}q3u9$7e~Lfz z-+#XD4**LH1suZcByTclbbgjmS{AHKv|^R!7g?VRl}+O-*U}V~66g>{tvf2E%AzI+H5Or1p0)@|7b$EQ;O?#DYa%z@V_h` g!DiYP09mRoJiECNb~@<6|7d{FYG9p~38;Lc0k?bSc@73>r~WAu%hP=t!B@-p3yABObhsuW(ZN#D`-&Bi1h`~ z^_c0TfHI+_a{8WOIvnlx#v+Gf(%~i*&Dcm+w4osxu_s<9S+V+q!L|buO^N4nY*BF; zE+>vz<3=ZhE(!B9RJ2H#0}0(oNxhhg?JNfPlR6W=B--U&-Zd@tu2j*6c4j$iWps`B ztc<#vHoA_qnb>nM7KT8Fia2%(EYQZsQo>&h_UIl3W-`(KYJhGPeUN z_Sw13-jK1v@Z*4rgSeImxhZgpZQZ#NAcyDR58*kuPQf7+*F$5r=egZsrcxvcGs6xn z&*sL)*mTYU?dM2AfqgH4ZbIiQ+PP1t7y@xn63#*b8@+bt&2bHS_=}AbMN-9x?C`P_ zqZ^QI7Q$hSDoDv@WF32G&%t&cp*Uh%I}B6BxFo;wA-kGgdl_UESSoUu;N(0~Za^$= zVid@l8FtuWZxE7>V)X+Go+}WM^9sqbN3%$mlh^3kT*}IZumCrzxCze_2$5bAkc#C6LS15D&Fdhx6F=*5p>4hq2f+=ti_!hhT@F9TjG9em~DC@*e0Xo zPd4rQRJ_4u|y~bXwjK?Ye;N{O(x5qxsS$4G!wVW`lq+6YZCj-V@T?pCa_$+L7P8}9b*zO2zIP4B< zrHKW7mX;Xp<)-9hp{&nHrZp=kqv`*ju_?ObwxZozM0GwV2!uUBxJ@pw{pnhqKUvmq zCF?GclX$!2CD2mTqFVrkb?EkvJC%^`Dmu4Fe9k6t0c)yF19OgTb&Y$A+K%eHX6gr6 zP-gy==S6X@Gn9-&-2!VaY>}*#(#8gdv>Gop*YMD{)a#*}B8Mk<8j~zeYIACPl1+FQdSZ%a4H9fo_?Zar)D>XIkeMwL5E)5=;IZM;{vM$DmXMG)T);RpDkf*(l| z{;@!fy`|as80iUfRF~&GGO=?S@6_ZefGgkbb<P7(aiWRsbO5KlN=X1IsCvGori*vdGmk>W6PXmMiAHWBB z{}A7NxQC|$?teU72z;25X5IzwB@HJbq`-%Jd6mPU>PL809R=KnkMgYyQ=qCnxq)XY z`3p}&sY1o*G!|7PX0QZYMlPMVq;lRgPSLtt<12Kal=m&CvHZYEtnBr-u3B*?YNv70 z)4_PjrZYY zRd|ItgWJGPd6g@B!*NIWCa>_#uJCPM;oDu|JH5hpIkVqm%ko{if-3_tR(C7vaV4*9 z{C_|@l1#kpT&I>s@MU(K{EgtN_!>lINb;)deJ^d4aIB)Po;gS-t8mve-kWgPBHzHZ zo^q(L;gJR_@J$whq>2iBi%))*(YN{L!*}pq-UA$4i|_F%PRJhS+fVQawSI%&;ScuH vqxcgZwV(cqzvCaa&cE#IzwPVe_Vr15<#IRS>yd8L7Z~x>n)Tk3xaGoDJugfN1lAf`w%i ziF!Ob{G~cfl`T}hsn!q0@QQ`n9B$1g7+$lm&N8ep8no3+%Sev{frb5cr_*USdjgsB z@jwYIcXgmHrw@HKxs`pNkaBnINxvs2n%{FU6WwW&-01#i>zKsfjHeS%U1;7``Rn?C z=V6n=6kR!s5?_m|68lavnM^XdN;27?Ob4Rw4T_uedPbV&0NZ(maQ0#tjvZsksbyo7 zoSG4%>a3YDR$r(og)NFZFesLgK^Z1pvVbamE3~qPI##hw>=|+tZR*{n%oU3hNyYNg WNyP%QNyQR*tIfBjt%5f3|LiY%h-dcz diff --git a/java/benchmarks/build/classes/java/test/javabushka/client/jedis/JedisClientIT.class b/java/benchmarks/build/classes/java/test/javabushka/client/jedis/JedisClientIT.class deleted file mode 100644 index f6a062a108adf08ab2aae0eb09a527c036a23ce3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3456 zcmcInX?GJ<7=CVAnh=IIq%5svsZi)bX+RW&qLx;cKnmJ~BH+R_xlN~?%+#4lwYYDn zxZ}nrkKg?4ISM^^jz7TTPg0N1of*QU4agS{hsoXE=Y8JgzW41P|J?o^z!SKUL<~)F zG;3Ie7J<~PzMyAJ-706!PR+`qC(v@lung}>fu_Fx$v6@MJJg}6syj2MXNsmFEiW@G zONN^{rM_eSN)mB2t;QN?ajezQiZ+3r4075Et&C_b+LlG` z1$#mfN?^UfF4wNeoH6C-&f>WAX6#b8J7ZVPQnw?$s$+HcdQMgLDwvHLHlagc-3k%k z2N#og2wib(*02Rz=`!0XXJ)JPQRb-YN{22>>i(cWM1hTcz5#(#^PXc^<>8C{lS)&! zhKI3TpxLmdZGrWD{VR_q(Sx0F?9$MSzPbPfSPYOUt+F@clglb{1B%&h!uC;50(*EQ zFP#PHD4iLlb1xmzfK~(bX{N~|8ulxZO%;7kj@edG_s$#M3`ee~Tb`>ZKBnOS4$^ck zIi9Qb1vWI&aj^;F>W>K=7D!YU_bljURVHwR^z+9GX$U;2;VFy=#LD!E3?Tj^+p>k> zm7WW%sh1p;R&l1HJ9CUe&)IqD=$>I)%$`w<#qqR;V>m9bb!Emy1qHOS^m4jKFhjZm zqkY*1Ng5T2=n9=&^$as})N%C1oZ)&tgOeJvIK>zjb+cGCi9aFTs_9X~q0p1dq#BtR z@LCK-ec+siahxITd1jwi13lOvJPqtv2B=c%8Aj`bidGC0Dq4Ag{DTIn5$AijN`>W| zhDmitTFcT>;gYB2VqSVGm7mjaLFHu=qoL-PG(3+NICmv4Veh@HtGkK)le{Nmc8M3Y zEoWHrOtms4oq|4PawVO!8H!2WG1NRC zqE-lz^7zXHu&Yi{X8o$u;`m9XbgHzk^NzsUyr&oE#`XEo`p)G5ql`vTT_Sm?lSfbOAKS0%=;!DH~ct8{GKfg zDKqJcQQP)h&(Y_D_rPsy!IdOl!|QRpp(@^+0zG#>`{ob*ZEq$5#S<%4HAopa`t4JuY#4 z6Sh9V)v9AzpC5627d}4sKFY^DNG3kxYgm857Za+#;y1xD+c)6&@=J}0*REVBH z5@lL0a7WLKug9qADREEf=?J)Q%TddY9}sW;3C&GQ=vUgBe76L)Y@xPoZ2!6=+B$05 zQkcaY5lu?5asCVKarBHV*Iub3su675YA+09vT0Sk+_9=ofpWs@={>CN}Y{b#7alDRZA8s)H_>uIX z@$_)lz~F8EWq>6dUBZbaoKBzZ8n}&TBP(}fG{o2gyNNJJ#37_;OFQ;5PD6~^L2Soi z?8G4wKgd%f5&DBQ`u&*4%k*js4RL(>k!Yr3>N0XyW%L1>rjk-q&Rjy_CeEL~%Oyzc zBfgFxv9&-4F?hX0j1h8G8F2@LF}b)LW516PZc!NbI-p h4o4s1WBw0DpK|mCPpB^GOLj8XTUO(1e2eeV`7em~aLxb# diff --git a/java/benchmarks/build/classes/java/test/javabushka/client/lettuce/LettuceClientIT.class b/java/benchmarks/build/classes/java/test/javabushka/client/lettuce/LettuceClientIT.class deleted file mode 100644 index 80e5e8ce5a991801fcebcf5cd8edc75dc592a836..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2526 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 diff --git a/java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html b/java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html deleted file mode 100644 index d72630017f..0000000000 --- a/java/benchmarks/build/reports/tests/test/classes/javabushka.client.jedis.JedisClientIT.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - -Test results - Class javabushka.client.jedis.JedisClientIT - - - - - -
-

Class javabushka.client.jedis.JedisClientIT

-
-
- - - - - -
-
- - - - - - - -
-
-
4
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
14.703s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Tests

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TestDurationResult
someLibraryMethodReturnsTrue0.002spassed
testResourceInfo0.001spassed
testResourceInfoBySection0.142spassed
testResourceSetGet14.558spassed
-
-
-

Standard output

- -
Avg. time in ms per SET: 0.07751362659
-SET p50 latency in ms: 0.0456
-SET p90 latency in ms: 0.070699
-SET p99 latency in ms: 0.127282
-SET std dev in ms: 0.665195671610232
-Avg. time in ms per GET: 0.06613250047
-GET p50 latency in ms: 0.040224
-GET p90 latency in ms: 0.058583
-GET p99 latency in ms: 0.10689
-GET std dev in ms: 0.6044885619384261
-
-
-
-
-

Standard error

- -
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
-SLF4J: Defaulting to no-operation (NOP) logger implementation
-SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
-
-
-
-
- -
- - diff --git a/java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html b/java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html deleted file mode 100644 index 2c4bf39157..0000000000 --- a/java/benchmarks/build/reports/tests/test/classes/javabushka.client.lettuce.LettuceClientIT.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - -Test results - Class javabushka.client.lettuce.LettuceClientIT - - - - - -
-

Class javabushka.client.lettuce.LettuceClientIT

- -
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
19.114s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Tests

- - - - - - - - - - - - - -
TestDurationResult
testResourceSetGet19.114spassed
-
-
-

Standard output

- -
Avg. time in ms per SET: 0.09530544199
-SET p50 latency in ms: 0.055105
-SET p90 latency in ms: 0.089829
-SET p99 latency in ms: 0.184804
-SET std dev in ms: 0.7259927555734456
-Avg. time in ms per GET: 0.08870054313
-GET p50 latency in ms: 0.052371
-GET p90 latency in ms: 0.081338
-GET p99 latency in ms: 0.145727
-GET std dev in ms: 0.6983375291436595
-
-
-
-
- -
- - diff --git a/java/benchmarks/build/reports/tests/test/css/base-style.css b/java/benchmarks/build/reports/tests/test/css/base-style.css deleted file mode 100644 index 4afa73e3dd..0000000000 --- a/java/benchmarks/build/reports/tests/test/css/base-style.css +++ /dev/null @@ -1,179 +0,0 @@ - -body { - margin: 0; - padding: 0; - font-family: sans-serif; - font-size: 12pt; -} - -body, a, a:visited { - color: #303030; -} - -#content { - padding-left: 50px; - padding-right: 50px; - padding-top: 30px; - padding-bottom: 30px; -} - -#content h1 { - font-size: 160%; - margin-bottom: 10px; -} - -#footer { - margin-top: 100px; - font-size: 80%; - white-space: nowrap; -} - -#footer, #footer a { - color: #a0a0a0; -} - -#line-wrapping-toggle { - vertical-align: middle; -} - -#label-for-line-wrapping-toggle { - vertical-align: middle; -} - -ul { - margin-left: 0; -} - -h1, h2, h3 { - white-space: nowrap; -} - -h2 { - font-size: 120%; -} - -ul.tabLinks { - padding-left: 0; - padding-top: 10px; - padding-bottom: 10px; - overflow: auto; - min-width: 800px; - width: auto !important; - width: 800px; -} - -ul.tabLinks li { - float: left; - height: 100%; - list-style: none; - padding-left: 10px; - padding-right: 10px; - padding-top: 5px; - padding-bottom: 5px; - margin-bottom: 0; - -moz-border-radius: 7px; - border-radius: 7px; - margin-right: 25px; - border: solid 1px #d4d4d4; - background-color: #f0f0f0; -} - -ul.tabLinks li:hover { - background-color: #fafafa; -} - -ul.tabLinks li.selected { - background-color: #c5f0f5; - border-color: #c5f0f5; -} - -ul.tabLinks a { - font-size: 120%; - display: block; - outline: none; - text-decoration: none; - margin: 0; - padding: 0; -} - -ul.tabLinks li h2 { - margin: 0; - padding: 0; -} - -div.tab { -} - -div.selected { - display: block; -} - -div.deselected { - display: none; -} - -div.tab table { - min-width: 350px; - width: auto !important; - width: 350px; - border-collapse: collapse; -} - -div.tab th, div.tab table { - border-bottom: solid #d0d0d0 1px; -} - -div.tab th { - text-align: left; - white-space: nowrap; - padding-left: 6em; -} - -div.tab th:first-child { - padding-left: 0; -} - -div.tab td { - white-space: nowrap; - padding-left: 6em; - padding-top: 5px; - padding-bottom: 5px; -} - -div.tab td:first-child { - padding-left: 0; -} - -div.tab td.numeric, div.tab th.numeric { - text-align: right; -} - -span.code { - display: inline-block; - margin-top: 0em; - margin-bottom: 1em; -} - -span.code pre { - font-size: 11pt; - padding-top: 10px; - padding-bottom: 10px; - padding-left: 10px; - padding-right: 10px; - margin: 0; - background-color: #f7f7f7; - border: solid 1px #d0d0d0; - min-width: 700px; - width: auto !important; - width: 700px; -} - -span.wrapped pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: break-all; -} - -label.hidden { - display: none; -} \ No newline at end of file diff --git a/java/benchmarks/build/reports/tests/test/css/style.css b/java/benchmarks/build/reports/tests/test/css/style.css deleted file mode 100644 index 3dc4913e7a..0000000000 --- a/java/benchmarks/build/reports/tests/test/css/style.css +++ /dev/null @@ -1,84 +0,0 @@ - -#summary { - margin-top: 30px; - margin-bottom: 40px; -} - -#summary table { - border-collapse: collapse; -} - -#summary td { - vertical-align: top; -} - -.breadcrumbs, .breadcrumbs a { - color: #606060; -} - -.infoBox { - width: 110px; - padding-top: 15px; - padding-bottom: 15px; - text-align: center; -} - -.infoBox p { - margin: 0; -} - -.counter, .percent { - font-size: 120%; - font-weight: bold; - margin-bottom: 8px; -} - -#duration { - width: 125px; -} - -#successRate, .summaryGroup { - border: solid 2px #d0d0d0; - -moz-border-radius: 10px; - border-radius: 10px; -} - -#successRate { - width: 140px; - margin-left: 35px; -} - -#successRate .percent { - font-size: 180%; -} - -.success, .success a { - color: #008000; -} - -div.success, #successRate.success { - background-color: #bbd9bb; - border-color: #008000; -} - -.failures, .failures a { - color: #b60808; -} - -.skipped, .skipped a { - color: #c09853; -} - -div.failures, #successRate.failures { - background-color: #ecdada; - border-color: #b60808; -} - -ul.linkList { - padding-left: 0; -} - -ul.linkList li { - list-style: none; - margin-bottom: 5px; -} diff --git a/java/benchmarks/build/reports/tests/test/index.html b/java/benchmarks/build/reports/tests/test/index.html deleted file mode 100644 index f03c715ec6..0000000000 --- a/java/benchmarks/build/reports/tests/test/index.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - -Test results - Test Summary - - - - - -
-

Test Summary

-
- - - - - -
-
- - - - - - - -
-
-
5
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
33.817s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Packages

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PackageTestsFailuresIgnoredDurationSuccess rate
-javabushka.client.jedis -40014.703s100%
-javabushka.client.lettuce -10019.114s100%
-
-
-

Classes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-javabushka.client.jedis.JedisClientIT -40014.703s100%
-javabushka.client.lettuce.LettuceClientIT -10019.114s100%
-
-
- -
- - diff --git a/java/benchmarks/build/reports/tests/test/js/report.js b/java/benchmarks/build/reports/tests/test/js/report.js deleted file mode 100644 index 83bab4a19f..0000000000 --- a/java/benchmarks/build/reports/tests/test/js/report.js +++ /dev/null @@ -1,194 +0,0 @@ -(function (window, document) { - "use strict"; - - var tabs = {}; - - function changeElementClass(element, classValue) { - if (element.getAttribute("className")) { - element.setAttribute("className", classValue); - } else { - element.setAttribute("class", classValue); - } - } - - function getClassAttribute(element) { - if (element.getAttribute("className")) { - return element.getAttribute("className"); - } else { - return element.getAttribute("class"); - } - } - - function addClass(element, classValue) { - changeElementClass(element, getClassAttribute(element) + " " + classValue); - } - - function removeClass(element, classValue) { - changeElementClass(element, getClassAttribute(element).replace(classValue, "")); - } - - function initTabs() { - var container = document.getElementById("tabs"); - - tabs.tabs = findTabs(container); - tabs.titles = findTitles(tabs.tabs); - tabs.headers = findHeaders(container); - tabs.select = select; - tabs.deselectAll = deselectAll; - tabs.select(0); - - return true; - } - - function getCheckBox() { - return document.getElementById("line-wrapping-toggle"); - } - - function getLabelForCheckBox() { - return document.getElementById("label-for-line-wrapping-toggle"); - } - - function findCodeBlocks() { - var spans = document.getElementById("tabs").getElementsByTagName("span"); - var codeBlocks = []; - for (var i = 0; i < spans.length; ++i) { - if (spans[i].className.indexOf("code") >= 0) { - codeBlocks.push(spans[i]); - } - } - return codeBlocks; - } - - function forAllCodeBlocks(operation) { - var codeBlocks = findCodeBlocks(); - - for (var i = 0; i < codeBlocks.length; ++i) { - operation(codeBlocks[i], "wrapped"); - } - } - - function toggleLineWrapping() { - var checkBox = getCheckBox(); - - if (checkBox.checked) { - forAllCodeBlocks(addClass); - } else { - forAllCodeBlocks(removeClass); - } - } - - function initControls() { - if (findCodeBlocks().length > 0) { - var checkBox = getCheckBox(); - var label = getLabelForCheckBox(); - - checkBox.onclick = toggleLineWrapping; - checkBox.checked = false; - - removeClass(label, "hidden"); - } - } - - function switchTab() { - var id = this.id.substr(1); - - for (var i = 0; i < tabs.tabs.length; i++) { - if (tabs.tabs[i].id === id) { - tabs.select(i); - break; - } - } - - return false; - } - - function select(i) { - this.deselectAll(); - - changeElementClass(this.tabs[i], "tab selected"); - changeElementClass(this.headers[i], "selected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var h2 = document.createElement("H2"); - - h2.appendChild(document.createTextNode(this.titles[i])); - this.headers[i].appendChild(h2); - } - - function deselectAll() { - for (var i = 0; i < this.tabs.length; i++) { - changeElementClass(this.tabs[i], "tab deselected"); - changeElementClass(this.headers[i], "deselected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var a = document.createElement("A"); - - a.setAttribute("id", "ltab" + i); - a.setAttribute("href", "#tab" + i); - a.onclick = switchTab; - a.appendChild(document.createTextNode(this.titles[i])); - - this.headers[i].appendChild(a); - } - } - - function findTabs(container) { - return findChildElements(container, "DIV", "tab"); - } - - function findHeaders(container) { - var owner = findChildElements(container, "UL", "tabLinks"); - return findChildElements(owner[0], "LI", null); - } - - function findTitles(tabs) { - var titles = []; - - for (var i = 0; i < tabs.length; i++) { - var tab = tabs[i]; - var header = findChildElements(tab, "H2", null)[0]; - - header.parentNode.removeChild(header); - - if (header.innerText) { - titles.push(header.innerText); - } else { - titles.push(header.textContent); - } - } - - return titles; - } - - function findChildElements(container, name, targetClass) { - var elements = []; - var children = container.childNodes; - - for (var i = 0; i < children.length; i++) { - var child = children.item(i); - - if (child.nodeType === 1 && child.nodeName === name) { - if (targetClass && child.className.indexOf(targetClass) < 0) { - continue; - } - - elements.push(child); - } - } - - return elements; - } - - // Entry point. - - window.onload = function() { - initTabs(); - initControls(); - }; -} (window, window.document)); \ No newline at end of file diff --git a/java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html b/java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html deleted file mode 100644 index 6fe5059ebd..0000000000 --- a/java/benchmarks/build/reports/tests/test/packages/javabushka.client.jedis.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -Test results - Package javabushka.client.jedis - - - - - -
-

Package javabushka.client.jedis

- -
- - - - - -
-
- - - - - - - -
-
-
4
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
14.703s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Classes

- - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-JedisClientIT -40014.703s100%
-
-
- -
- - diff --git a/java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html b/java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html deleted file mode 100644 index 72ed2f2290..0000000000 --- a/java/benchmarks/build/reports/tests/test/packages/javabushka.client.lettuce.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -Test results - Package javabushka.client.lettuce - - - - - -
-

Package javabushka.client.lettuce

- -
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
19.114s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Classes

- - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-LettuceClientIT -10019.114s100%
-
-
- -
- - diff --git a/java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml b/java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml deleted file mode 100644 index f76c23081b..0000000000 --- a/java/benchmarks/build/test-results/test/TEST-javabushka.client.jedis.JedisClientIT.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - diff --git a/java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml b/java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml deleted file mode 100644 index 15ab216e63..0000000000 --- a/java/benchmarks/build/test-results/test/TEST-javabushka.client.lettuce.LettuceClientIT.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - diff --git a/java/benchmarks/build/test-results/test/binary/output.bin b/java/benchmarks/build/test-results/test/binary/output.bin deleted file mode 100644 index 76f5d5a3a126375fb8bd3081dabee2c02a09ac91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 990 zcmZ{i+iKfD5QbwHZ16+0LrT;1qVk?*555Q_v?-L(7StCI)>>B432774x9_g3;DXn; z;-7E7`A1jt*?s!-D86stF)J&ZgKME`vmCZnHVkmx_C+#OJMkwe>#j;tm$`EL)E0&9 zAIc`T{dKasn$PYg$QQfIo-0>2MF2JJ=eD!GA88x7{qghHC(jO}5MZ{pO~AEHAfyu^ zwHEfyb({72a5zkFdyDn9&FzrvU0uCDw}4&S!|u6vdk@d8^ScbmYBqoK@&2Vqz?HRy zvVnR4?*r-A-y0waQ3@%SOriFEFiBUl4>A~ute zZE{I!aY;~Waeir0a%ymDiF;}Z79oaJQyC$85}g^CmSMUmD>WsvSkDVY!dyd~DzK@W z@2ayf&O&yHXI@&qQ)O^!a!F=>9&QLVZ7(fn{!Ser~Ey wW>QgNQKfHcNk)E3P-;nOQC@LKQE4h(Nd_jUDN`9(C!)I?Lx2GqdScTU0BB*aK>z>% diff --git a/java/benchmarks/build/tmp/compileJava/previous-compilation-data.bin b/java/benchmarks/build/tmp/compileJava/previous-compilation-data.bin deleted file mode 100644 index 6e1548148fc2e70edbaa1e9bd2596ac50d9e49cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38419 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 diff --git a/java/benchmarks/build/tmp/compileTestJava/compileTransaction/stash-dir/JedisClientIT.class.uniqueId0 b/java/benchmarks/build/tmp/compileTestJava/compileTransaction/stash-dir/JedisClientIT.class.uniqueId0 deleted file mode 100644 index 5480044a03743ee4719cdf7fc8c9b963a7cfe602..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3464 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 Ra+f+i^FDco1F|(7{sni?owNV| diff --git a/java/lib/build/libs/lib.jar b/java/lib/build/libs/lib.jar deleted file mode 100644 index 77f1a996552b93a2c207a0cde3f2505656498e79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 723 zcmWIWW@Zs#VBp|jNSv$|&Hw~VAOZ+Df!NnI#8KDN&rP41Apk|;rh2A#(m(~0Kn&E5 zQ0VLE=jrAe9HQsz_SyH$X&-N0y^Flwx?1PXoZlQ|aK-q+(??I4kPKVARRzUXZlGaV ziDijNrNtT9i757hl(Nq-wR#6slEBEoAc3mXCo`!iv8YlnIVZ8WIMv_U?}&lOoatxP zygAEp%G+fI)`qql`|=fuquAE7IoO zJO2E(bwh9pCsR*Si{`Noj?GgmL@IS>{r(fRF65@*BH_C)-t`#Vx*dOHhJaD}q}piP zjy)GHas77TIDa-sa9L~KmC*guPTk{*+&oEinaEeCh_^e$53jqVo4EW(e5ucj?P+Um z_J+i!PCNX~+NmhHDtZ<7Td$ye%Ocequ4lII5O26+YGXd*Y0nW0y9(C5Joh=zX9y_g zeDc}P+Y{Z>lIv6Z<3fA$hoAmMpR^_asH8K`u4fGJW@Hj!#vP5ofC2&mhPRF&8Xl?W z+R!5vq!V9yBYM0-G=i*Nh^i4KmIJ(5*+42; Ofba*9J_<|~3=9Ckh0YZK diff --git a/java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html b/java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html deleted file mode 100644 index 3031b841d0..0000000000 --- a/java/lib/build/reports/tests/test/classes/javabushka.LibraryTest.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - -Test results - Class javabushka.LibraryTest - - - - - -
-

Class javabushka.LibraryTest

- -
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
0.002s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Tests

- - - - - - - - - - - - - -
TestDurationResult
someLibraryMethodReturnsTrue0.002spassed
-
-
- -
- - diff --git a/java/lib/build/reports/tests/test/css/base-style.css b/java/lib/build/reports/tests/test/css/base-style.css deleted file mode 100644 index 4afa73e3dd..0000000000 --- a/java/lib/build/reports/tests/test/css/base-style.css +++ /dev/null @@ -1,179 +0,0 @@ - -body { - margin: 0; - padding: 0; - font-family: sans-serif; - font-size: 12pt; -} - -body, a, a:visited { - color: #303030; -} - -#content { - padding-left: 50px; - padding-right: 50px; - padding-top: 30px; - padding-bottom: 30px; -} - -#content h1 { - font-size: 160%; - margin-bottom: 10px; -} - -#footer { - margin-top: 100px; - font-size: 80%; - white-space: nowrap; -} - -#footer, #footer a { - color: #a0a0a0; -} - -#line-wrapping-toggle { - vertical-align: middle; -} - -#label-for-line-wrapping-toggle { - vertical-align: middle; -} - -ul { - margin-left: 0; -} - -h1, h2, h3 { - white-space: nowrap; -} - -h2 { - font-size: 120%; -} - -ul.tabLinks { - padding-left: 0; - padding-top: 10px; - padding-bottom: 10px; - overflow: auto; - min-width: 800px; - width: auto !important; - width: 800px; -} - -ul.tabLinks li { - float: left; - height: 100%; - list-style: none; - padding-left: 10px; - padding-right: 10px; - padding-top: 5px; - padding-bottom: 5px; - margin-bottom: 0; - -moz-border-radius: 7px; - border-radius: 7px; - margin-right: 25px; - border: solid 1px #d4d4d4; - background-color: #f0f0f0; -} - -ul.tabLinks li:hover { - background-color: #fafafa; -} - -ul.tabLinks li.selected { - background-color: #c5f0f5; - border-color: #c5f0f5; -} - -ul.tabLinks a { - font-size: 120%; - display: block; - outline: none; - text-decoration: none; - margin: 0; - padding: 0; -} - -ul.tabLinks li h2 { - margin: 0; - padding: 0; -} - -div.tab { -} - -div.selected { - display: block; -} - -div.deselected { - display: none; -} - -div.tab table { - min-width: 350px; - width: auto !important; - width: 350px; - border-collapse: collapse; -} - -div.tab th, div.tab table { - border-bottom: solid #d0d0d0 1px; -} - -div.tab th { - text-align: left; - white-space: nowrap; - padding-left: 6em; -} - -div.tab th:first-child { - padding-left: 0; -} - -div.tab td { - white-space: nowrap; - padding-left: 6em; - padding-top: 5px; - padding-bottom: 5px; -} - -div.tab td:first-child { - padding-left: 0; -} - -div.tab td.numeric, div.tab th.numeric { - text-align: right; -} - -span.code { - display: inline-block; - margin-top: 0em; - margin-bottom: 1em; -} - -span.code pre { - font-size: 11pt; - padding-top: 10px; - padding-bottom: 10px; - padding-left: 10px; - padding-right: 10px; - margin: 0; - background-color: #f7f7f7; - border: solid 1px #d0d0d0; - min-width: 700px; - width: auto !important; - width: 700px; -} - -span.wrapped pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: break-all; -} - -label.hidden { - display: none; -} \ No newline at end of file diff --git a/java/lib/build/reports/tests/test/css/style.css b/java/lib/build/reports/tests/test/css/style.css deleted file mode 100644 index 3dc4913e7a..0000000000 --- a/java/lib/build/reports/tests/test/css/style.css +++ /dev/null @@ -1,84 +0,0 @@ - -#summary { - margin-top: 30px; - margin-bottom: 40px; -} - -#summary table { - border-collapse: collapse; -} - -#summary td { - vertical-align: top; -} - -.breadcrumbs, .breadcrumbs a { - color: #606060; -} - -.infoBox { - width: 110px; - padding-top: 15px; - padding-bottom: 15px; - text-align: center; -} - -.infoBox p { - margin: 0; -} - -.counter, .percent { - font-size: 120%; - font-weight: bold; - margin-bottom: 8px; -} - -#duration { - width: 125px; -} - -#successRate, .summaryGroup { - border: solid 2px #d0d0d0; - -moz-border-radius: 10px; - border-radius: 10px; -} - -#successRate { - width: 140px; - margin-left: 35px; -} - -#successRate .percent { - font-size: 180%; -} - -.success, .success a { - color: #008000; -} - -div.success, #successRate.success { - background-color: #bbd9bb; - border-color: #008000; -} - -.failures, .failures a { - color: #b60808; -} - -.skipped, .skipped a { - color: #c09853; -} - -div.failures, #successRate.failures { - background-color: #ecdada; - border-color: #b60808; -} - -ul.linkList { - padding-left: 0; -} - -ul.linkList li { - list-style: none; - margin-bottom: 5px; -} diff --git a/java/lib/build/reports/tests/test/index.html b/java/lib/build/reports/tests/test/index.html deleted file mode 100644 index 837e00ab79..0000000000 --- a/java/lib/build/reports/tests/test/index.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - -Test results - Test Summary - - - - - -
-

Test Summary

-
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
0.002s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Packages

- - - - - - - - - - - - - - - - - - - - - -
PackageTestsFailuresIgnoredDurationSuccess rate
-javabushka -1000.002s100%
-
-
-

Classes

- - - - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-javabushka.LibraryTest -1000.002s100%
-
-
- -
- - diff --git a/java/lib/build/reports/tests/test/js/report.js b/java/lib/build/reports/tests/test/js/report.js deleted file mode 100644 index 83bab4a19f..0000000000 --- a/java/lib/build/reports/tests/test/js/report.js +++ /dev/null @@ -1,194 +0,0 @@ -(function (window, document) { - "use strict"; - - var tabs = {}; - - function changeElementClass(element, classValue) { - if (element.getAttribute("className")) { - element.setAttribute("className", classValue); - } else { - element.setAttribute("class", classValue); - } - } - - function getClassAttribute(element) { - if (element.getAttribute("className")) { - return element.getAttribute("className"); - } else { - return element.getAttribute("class"); - } - } - - function addClass(element, classValue) { - changeElementClass(element, getClassAttribute(element) + " " + classValue); - } - - function removeClass(element, classValue) { - changeElementClass(element, getClassAttribute(element).replace(classValue, "")); - } - - function initTabs() { - var container = document.getElementById("tabs"); - - tabs.tabs = findTabs(container); - tabs.titles = findTitles(tabs.tabs); - tabs.headers = findHeaders(container); - tabs.select = select; - tabs.deselectAll = deselectAll; - tabs.select(0); - - return true; - } - - function getCheckBox() { - return document.getElementById("line-wrapping-toggle"); - } - - function getLabelForCheckBox() { - return document.getElementById("label-for-line-wrapping-toggle"); - } - - function findCodeBlocks() { - var spans = document.getElementById("tabs").getElementsByTagName("span"); - var codeBlocks = []; - for (var i = 0; i < spans.length; ++i) { - if (spans[i].className.indexOf("code") >= 0) { - codeBlocks.push(spans[i]); - } - } - return codeBlocks; - } - - function forAllCodeBlocks(operation) { - var codeBlocks = findCodeBlocks(); - - for (var i = 0; i < codeBlocks.length; ++i) { - operation(codeBlocks[i], "wrapped"); - } - } - - function toggleLineWrapping() { - var checkBox = getCheckBox(); - - if (checkBox.checked) { - forAllCodeBlocks(addClass); - } else { - forAllCodeBlocks(removeClass); - } - } - - function initControls() { - if (findCodeBlocks().length > 0) { - var checkBox = getCheckBox(); - var label = getLabelForCheckBox(); - - checkBox.onclick = toggleLineWrapping; - checkBox.checked = false; - - removeClass(label, "hidden"); - } - } - - function switchTab() { - var id = this.id.substr(1); - - for (var i = 0; i < tabs.tabs.length; i++) { - if (tabs.tabs[i].id === id) { - tabs.select(i); - break; - } - } - - return false; - } - - function select(i) { - this.deselectAll(); - - changeElementClass(this.tabs[i], "tab selected"); - changeElementClass(this.headers[i], "selected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var h2 = document.createElement("H2"); - - h2.appendChild(document.createTextNode(this.titles[i])); - this.headers[i].appendChild(h2); - } - - function deselectAll() { - for (var i = 0; i < this.tabs.length; i++) { - changeElementClass(this.tabs[i], "tab deselected"); - changeElementClass(this.headers[i], "deselected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var a = document.createElement("A"); - - a.setAttribute("id", "ltab" + i); - a.setAttribute("href", "#tab" + i); - a.onclick = switchTab; - a.appendChild(document.createTextNode(this.titles[i])); - - this.headers[i].appendChild(a); - } - } - - function findTabs(container) { - return findChildElements(container, "DIV", "tab"); - } - - function findHeaders(container) { - var owner = findChildElements(container, "UL", "tabLinks"); - return findChildElements(owner[0], "LI", null); - } - - function findTitles(tabs) { - var titles = []; - - for (var i = 0; i < tabs.length; i++) { - var tab = tabs[i]; - var header = findChildElements(tab, "H2", null)[0]; - - header.parentNode.removeChild(header); - - if (header.innerText) { - titles.push(header.innerText); - } else { - titles.push(header.textContent); - } - } - - return titles; - } - - function findChildElements(container, name, targetClass) { - var elements = []; - var children = container.childNodes; - - for (var i = 0; i < children.length; i++) { - var child = children.item(i); - - if (child.nodeType === 1 && child.nodeName === name) { - if (targetClass && child.className.indexOf(targetClass) < 0) { - continue; - } - - elements.push(child); - } - } - - return elements; - } - - // Entry point. - - window.onload = function() { - initTabs(); - initControls(); - }; -} (window, window.document)); \ No newline at end of file diff --git a/java/lib/build/reports/tests/test/packages/javabushka.html b/java/lib/build/reports/tests/test/packages/javabushka.html deleted file mode 100644 index c50fe5999a..0000000000 --- a/java/lib/build/reports/tests/test/packages/javabushka.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -Test results - Package javabushka - - - - - -
-

Package javabushka

- -
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
0.002s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Classes

- - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-LibraryTest -1000.002s100%
-
-
- -
- - diff --git a/java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml b/java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml deleted file mode 100644 index d06e1fe97d..0000000000 --- a/java/lib/build/test-results/test/TEST-javabushka.LibraryTest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/java/lib/build/test-results/test/binary/output.bin b/java/lib/build/test-results/test/binary/output.bin deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/java/lib/build/test-results/test/binary/output.bin.idx b/java/lib/build/test-results/test/binary/output.bin.idx deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/java/lib/build/test-results/test/binary/results.bin b/java/lib/build/test-results/test/binary/results.bin deleted file mode 100644 index f5767307578ed46df57c9e327fa93b66a3c43c2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZQ(WSX9pSeBSnTAY!csOOWJRFqg$8IoFDf+*GIr-_(+f Z{FI>7lG38Q;*g@!RJ@W5Oi)vb82})PFZTcd diff --git a/java/lib/build/tmp/compileJava/previous-compilation-data.bin b/java/lib/build/tmp/compileJava/previous-compilation-data.bin deleted file mode 100644 index 28d5565cd61893d10507bce77ba30fa1dca615b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2859 zcmb7GYgAKL7CzgcP&M=@SQXS#MNu(FO9ez!27?hagg1(>dWkp5C6{~S%?%J=hzTGs zUkE5nt*upjfcU6FtAZ9P)Uj%*S_kK4N2g=!YpF|})-LCScD3_s*2=wW<*ajZ_TJz3 z?S1w=fV4pRpt39`hsm^AO=d=c3OrCTmnkul9a~=n-d?sS;Z?%Rt4~{o%iRdANB{Hu zHVN)a`Vmj!MP5Try_nq}6&pp-$g=}bF`Z_M!a(HUL?x=QFnTj%WL2DC5b>t8#*~nV zK8>kQBDUvDK4tb!dp#MGL1ZxTA--e?c>_5`$v6~k)tgwonUxF@lg;Lel6k-|RA`eq zemE+YSc@pheyDJzjo}sksHk^70+k7_1M1BIY zeMNcSE#!K_#te6&&2_gdkJXERhY?w(v%Us72*%R7ISHYR?y zPL~j!n3zP8NeU`*)mUCCD*IhSMH(t)TuGH#$(oKF61#ws5Cj{~FGL&c8K{^wFg9Ms zyOsa>wlVNYw??Qx^OwCHs~3^Q#B&M#+p1?QtP-P6-g==sYW~uvucW~#mHn0`FVnu8 z9JL&6WMzgE*cA*aq&WFZDz+(t^Re(eHPuBHaJUX*72I` zWFbx@7P6A~N~kEuRS)+wLWw97_Z2zguLmcnzx!pr4&J2F{n2}LJ7=^ zDh0G5qzsTFGfPnps9c~&-9q`$g2fGON4c#gW#iOv+vioK7g{SIVH4;!!<;RUx)tW~ z3WXwf8#NVJ9DUV3mgpBpbu66wXP+&(ODaLT9RjN$sTyKb8KH_AKu*po1WZ<-I}o`JNp>c2bJ9fXXZqm)#54s>F}4UB7vzId1c<@fV_A8=D?k2MK?K6xDlx zifx%Pt=nA`wgHD6x)gi2O5N7;_}2C<6~{B)hnTz!JaXVs$Bi$mFSLF*dUef}cRO|i z`GCgwkjj|N$h29!*tGh9kso)=*-`V487*n+_5k^aZrDpTlUM`K>SZPVIa^iL6Eo;l zW5y55*S3VU?t|ERh^vDAG_Y_0PzlG<=BhW@@%@q=&IV0p(7MST19p~g4Lt}8Rvn^r zO{{=J2O1xp-(1JF4XqkEZjI-xnRtK8oXhh!kG~uF)T`;uxOg*wW^xV__ zt;C(_e|shPx17Fjo6=x@k2~B1qSu zoAIoz84_AxLDVM{JIk0qrE=Nmk;c#MS+fmqra1@8+WS96h?h@6;%SJEIzv-tlSPT; zS;oq?QX^61@xAL0d`lk8UZg8KRDT4Y+t>!_XCX~IM-wNQ1u<9njMfXoV`;-QA^h*N z^2D}@|Ne18?8|l_9Y8*(0EeBYj`gCTw@DJ!Ly0{M?ak`Zd;8}!92!26>qMQ9)&=AX zAQyo6{s~a2wYMZV!RV(Lfq(Q(+BME&&U3G!+h>|%CTlJN`I36QMA>9goJy<+o_YuA zUev_iw3W1v*DtvYR5q9qT>ocheu)Ti&h#_~HR;@aB zqU=~f_4E87ZW~Vr1T&F_{#F6KI{ZImOWk&^ciSS% zZHqh#-9ZZp=%__baN9wV`z96cn^d~+QHks5=;?$Cpb7KNqA7d-7vTHopzsc+3kO{b zl+jGLnH+N;R}^!YC^G7o0} diff --git a/java/lib/build/tmp/compileTestJava/previous-compilation-data.bin b/java/lib/build/tmp/compileTestJava/previous-compilation-data.bin deleted file mode 100644 index 08a1bf7d5fb3fc7dd6ce4bb2f2ad4410e30da8d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3207 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 diff --git a/java/lib/build/tmp/jar/MANIFEST.MF b/java/lib/build/tmp/jar/MANIFEST.MF deleted file mode 100644 index 58630c02ef..0000000000 --- a/java/lib/build/tmp/jar/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - From 52df67228cf411e81ba95fa7d7a484d26337ff87 Mon Sep 17 00:00:00 2001 From: Jonathan Louie Date: Wed, 13 Sep 2023 16:04:03 -0700 Subject: [PATCH 09/81] Randomize commands in Java benchmarks --- .../java/javabushka/client/Benchmarking.java | 99 +++++++++++++------ .../java/javabushka/client/ChosenAction.java | 7 ++ .../client/jedis/JedisClientIT.java | 33 ++----- .../client/lettuce/LettuceClientIT.java | 34 ++----- 4 files changed, 93 insertions(+), 80 deletions(-) create mode 100644 java/benchmarks/src/test/java/javabushka/client/ChosenAction.java diff --git a/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java b/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java index cbae7e1e5a..ff5c6878eb 100644 --- a/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java +++ b/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java @@ -1,14 +1,29 @@ package javabushka.client; import javabushka.client.LatencyResults; +import javabushka.client.ChosenAction; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import java.util.stream.Collectors; import java.util.Collections; public class Benchmarking { + static final double PROB_GET = 0.8; + static final double PROB_GET_EXISTING_KEY = 0.8; static final int SIZE_GET_KEYSPACE = 3750000; static final int SIZE_SET_KEYSPACE = 3000000; + private static ChosenAction chooseAction() { + if (Math.random() > PROB_GET) { + return ChosenAction.SET; + } + if (Math.random() > PROB_GET_EXISTING_KEY) { + return ChosenAction.GET_NON_EXISTING; + } + return ChosenAction.GET_EXISTING; + } + public static String generateKeyGet() { int range = SIZE_GET_KEYSPACE - SIZE_SET_KEYSPACE; return Math.floor(Math.random() * range + SIZE_SET_KEYSPACE + 1) + ""; @@ -22,17 +37,29 @@ public interface Operation { void go(); } - public static ArrayList getLatencies(int iterations, Operation op) { - ArrayList latencies = new ArrayList(); + public static Map> getLatencies(int iterations, Map actions) { + Map> latencies = new HashMap>(); + for (ChosenAction action : actions.keySet()) { + latencies.put(action, new ArrayList()); + } + for (int i = 0; i actionLatencies = latencies.get(action); + addLatency(op, actionLatencies); } + return latencies; } + private static void addLatency(Operation op, ArrayList latencies) { + long before = System.nanoTime(); + op.go(); + long after = System.nanoTime(); + latencies.add(after - before); + } + // Assumption: latencies is sorted in ascending order private static Long percentile(ArrayList latencies, int percentile) { return latencies.get((int) Math.ceil((percentile / 100.0) * latencies.size())); @@ -45,30 +72,42 @@ private static double stdDeviation(ArrayList latencies, Double avgLatency) return Math.sqrt(stdDeviation / latencies.size()); } - // This has the side-effect of sorting the latencies ArrayList - public static LatencyResults calculateResults(ArrayList latencies) { - Double avgLatency = latencies - .stream() - .collect(Collectors.summingLong(Long::longValue)) / Double.valueOf(latencies.size()); - - Collections.sort(latencies); - return new LatencyResults( - avgLatency, - percentile(latencies, 50), - percentile(latencies, 90), - percentile(latencies, 99), - stdDeviation(latencies, avgLatency) - ); - } + // This has the side-effect of sorting each latencies ArrayList + public static Map calculateResults(Map> actionLatencies) { + Map results = new HashMap(); + + for (Map.Entry> entry : actionLatencies.entrySet()) { + ChosenAction action = entry.getKey(); + ArrayList latencies = entry.getValue(); - public static void printResults(String operation, LatencyResults results) { - System.out.println( - "Avg. time in ms per " + operation + ": " + results.avgLatency / 1000000.0 - ); - System.out.println(operation + " p50 latency in ms: " + results.p50Latency / 1000000.0); - System.out.println(operation + " p90 latency in ms: " + results.p90Latency / 1000000.0); - System.out.println(operation + " p99 latency in ms: " + results.p99Latency / 1000000.0); - System.out.println(operation + " std dev in ms: " + results.stdDeviation / 1000000.0); + Double avgLatency = latencies + .stream() + .collect(Collectors.summingLong(Long::longValue)) / Double.valueOf(latencies.size()); + + Collections.sort(latencies); + results.put(action, new LatencyResults( + avgLatency, + percentile(latencies, 50), + percentile(latencies, 90), + percentile(latencies, 99), + stdDeviation(latencies, avgLatency) + )); + } + + return results; } -} \ No newline at end of file + public static void printResults(Map resultsMap) { + for (Map.Entry entry : resultsMap.entrySet()) { + ChosenAction action = entry.getKey(); + LatencyResults results = entry.getValue(); + System.out.println( + "Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0 + ); + System.out.println(action + " p50 latency in ms: " + results.p50Latency / 1000000.0); + System.out.println(action + " p90 latency in ms: " + results.p90Latency / 1000000.0); + System.out.println(action + " p99 latency in ms: " + results.p99Latency / 1000000.0); + System.out.println(action + " std dev in ms: " + results.stdDeviation / 1000000.0); + } + } +} diff --git a/java/benchmarks/src/test/java/javabushka/client/ChosenAction.java b/java/benchmarks/src/test/java/javabushka/client/ChosenAction.java new file mode 100644 index 0000000000..6cecf9d478 --- /dev/null +++ b/java/benchmarks/src/test/java/javabushka/client/ChosenAction.java @@ -0,0 +1,7 @@ +package javabushka.client; + +public enum ChosenAction { + GET_NON_EXISTING, + GET_EXISTING, + SET +} diff --git a/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java b/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java index c4396ce08a..07b0e382dc 100644 --- a/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java +++ b/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java @@ -7,8 +7,12 @@ import static org.junit.Assert.assertTrue; import javabushka.client.Benchmarking; +import javabushka.client.Benchmarking.Operation; +import javabushka.client.ChosenAction; import org.junit.Before; import org.junit.Test; +import java.util.HashMap; +import java.util.Map; public class JedisClientIT { @@ -43,31 +47,14 @@ public void initializeJedisClient() { int iterations = 100000; String value = "my-value"; + Map actions = new HashMap(); + actions.put(ChosenAction.GET_EXISTING, () -> jedisClient.get(Benchmarking.generateKeySet())); + actions.put(ChosenAction.GET_NON_EXISTING, () -> jedisClient.get(Benchmarking.generateKeyGet())); + actions.put(ChosenAction.SET, () -> jedisClient.set(Benchmarking.generateKeySet(), value)); + Benchmarking.printResults( - "SET", - Benchmarking.calculateResults( - Benchmarking.getLatencies( - iterations, - () -> jedisClient.set(Benchmarking.generateKeySet(), value) - ) - ) - ); - Benchmarking.printResults( - "GET", - Benchmarking.calculateResults( - Benchmarking.getLatencies( - iterations, - () -> jedisClient.get(Benchmarking.generateKeySet()) - ) - ) - ); - Benchmarking.printResults( - "GET non-existing", Benchmarking.calculateResults( - Benchmarking.getLatencies( - iterations, - () -> jedisClient.get(Benchmarking.generateKeyGet()) - ) + Benchmarking.getLatencies(iterations, actions) ) ); } diff --git a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java index 6956d40d43..b90f327b55 100644 --- a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java +++ b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java @@ -6,9 +6,12 @@ import static org.junit.Assert.assertEquals; import javabushka.client.Benchmarking; +import javabushka.client.Benchmarking.Operation; +import javabushka.client.ChosenAction; import org.junit.After; import org.junit.Before; import org.junit.Test; +import java.util.HashMap; public class LettuceClientIT { @@ -29,32 +32,9 @@ public void closeConnection() { int iterations = 100000; String value = "my-value"; - Benchmarking.printResults( - "SET", - Benchmarking.calculateResults( - Benchmarking.getLatencies( - iterations, - () -> lettuceClient.set(Benchmarking.generateKeySet(), value) - ) - ) - ); - Benchmarking.printResults( - "GET", - Benchmarking.calculateResults( - Benchmarking.getLatencies( - iterations, - () -> lettuceClient.get(Benchmarking.generateKeySet()) - ) - ) - ); - Benchmarking.printResults( - "GET non-existing", - Benchmarking.calculateResults( - Benchmarking.getLatencies( - iterations, - () -> lettuceClient.get(Benchmarking.generateKeyGet()) - ) - ) - ); + HashMap actions = new HashMap(); + actions.put(ChosenAction.GET_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeySet())); + actions.put(ChosenAction.GET_NON_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeyGet())); + actions.put(ChosenAction.SET, () -> lettuceClient.set(Benchmarking.generateKeySet(), value)); } } From 84f0efc3e8d432726f1ab020ad4171bd3db08c26 Mon Sep 17 00:00:00 2001 From: Jonathan Louie Date: Thu, 14 Sep 2023 16:09:11 -0700 Subject: [PATCH 10/81] rename chooseAction to randomAction --- .../src/test/java/javabushka/client/Benchmarking.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java b/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java index ff5c6878eb..84723d5178 100644 --- a/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java +++ b/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java @@ -14,7 +14,7 @@ public class Benchmarking { static final int SIZE_GET_KEYSPACE = 3750000; static final int SIZE_SET_KEYSPACE = 3000000; - private static ChosenAction chooseAction() { + private static ChosenAction randomAction() { if (Math.random() > PROB_GET) { return ChosenAction.SET; } @@ -44,7 +44,7 @@ public static Map> getLatencies(int iterations, Ma } for (int i = 0; i actionLatencies = latencies.get(action); addLatency(op, actionLatencies); From 1983974e42ad3b7a47e555ff116d25672e998e5f Mon Sep 17 00:00:00 2001 From: Andrew Carbonetto Date: Tue, 19 Sep 2023 18:24:20 -0700 Subject: [PATCH 11/81] Add a Java benchmarking app (#7) * Add a java app to run benchmarks --------- Signed-off-by: acarbonetto --- java/README.md | 45 +++- java/benchmarks/build.gradle | 13 +- .../javabushka/client/BenchmarkingApp.java | 252 ++++++++++++++++++ .../javabushka/client/jedis/JedisClient.java | 11 +- .../client/lettuce/LettuceAsyncClient.java | 52 ++++ .../client/utils}/Benchmarking.java | 33 ++- .../client/utils}/ChosenAction.java | 2 +- .../client/utils}/LatencyResults.java | 2 +- .../client/jedis/JedisClientIT.java | 9 +- .../client/lettuce/LettuceAsyncClientIT.java | 76 ++++++ .../client/lettuce/LettuceClientIT.java | 9 +- 11 files changed, 476 insertions(+), 28 deletions(-) create mode 100644 java/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java create mode 100644 java/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java rename java/benchmarks/src/{test/java/javabushka/client => main/java/javabushka/client/utils}/Benchmarking.java (76%) rename java/benchmarks/src/{test/java/javabushka/client => main/java/javabushka/client/utils}/ChosenAction.java (70%) rename java/benchmarks/src/{test/java/javabushka/client => main/java/javabushka/client/utils}/LatencyResults.java (94%) create mode 100644 java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java diff --git a/java/README.md b/java/README.md index 5666e124db..a22fb4cf24 100644 --- a/java/README.md +++ b/java/README.md @@ -1,5 +1,40 @@ -TODO: --[] create benchmarks folder --[] add code for jedis test --[] add gradle task to run jedis tests --[] \ No newline at end of file +# Summary - Java Wrapper + +This module contains a Java-client wrapper that connects to the `Babushka`-rust-client. The rust client connects to +redis, while this wrapper provides Java-language binding. The objective of this wrapper is to provide a thin-wrapper +language api to enhance performance and limit cpu cycles at scale. + +## Organization + +The Java client (javabushka) contains the following parts: + +1. A Java client (lib folder): wrapper to rust-client +2. An examples script: to sanity test javabushka and similar java-clients against a redis host +3. A benchmark app: to performance benchmark test javabushka and similar java-clients against a redis host + +## Building + +You can assemble the Java clients benchmarks by compiling using `./gradlew build`. + +## Benchmarks + +You can run benchmarks using `./gradlew run`. You can set arguments using the args flag like: + +```shell +./gradle run --args="--clients lettuce" +``` + +The following arguments are accepted: +* `configuration`: Release or Debug configuration +* `resultsFile`: the results output file +* `concurrentTasks`: Number of concurrent tasks +* `clients`: one of: all|jedis|lettuce|babushka +* `clientCount`: Client count +* `host`: redis server host url +* `port`: redis server port number +* `tls`: redis TLS configured + +### Troubleshooting + +* If you're unable to connect to redis (such as timeout), check your port or the TLS flag +* Only server-side certificates are supported by the TLS configured redis diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle index 20a41422de..3b57a0575f 100644 --- a/java/benchmarks/build.gradle +++ b/java/benchmarks/build.gradle @@ -1,6 +1,6 @@ plugins { - // Apply the java-library plugin for API and implementation separation. - id 'java-library' + // Apply the application plugin to add support for building a CLI application in Java. + id 'application' } repositories { @@ -12,13 +12,11 @@ dependencies { // Use JUnit test framework. testImplementation 'junit:junit:4.13.2' - // This dependency is exported to consumers, that is to say found on their compile classpath. - api 'org.apache.commons:commons-math3:3.6.1' - // This dependency is used internally, and not exposed to consumers on their own compile classpath. implementation 'com.google.guava:guava:32.1.1-jre' implementation 'redis.clients:jedis:4.4.3' implementation 'io.lettuce:lettuce-core:6.2.6.RELEASE' + implementation 'commons-cli:commons-cli:1.5.0' } // Apply a specific Java toolchain to ease working on different environments. @@ -28,6 +26,11 @@ java { } } +application { + // Define the main class for the application. + mainClass = 'javabushka.client.BenchmarkingApp' +} + tasks.withType(Test) { testLogging { exceptionFormat "full" diff --git a/java/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java b/java/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java new file mode 100644 index 0000000000..d17e127727 --- /dev/null +++ b/java/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java @@ -0,0 +1,252 @@ +package javabushka.client; + +import java.io.FileWriter; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; +import javabushka.client.jedis.JedisClient; +import javabushka.client.lettuce.LettuceAsyncClient; +import javabushka.client.utils.Benchmarking; +import javabushka.client.utils.ChosenAction; +import javabushka.client.utils.LatencyResults; +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.DefaultParser; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; + +/** + * Benchmarking app for reporting performance of various redis-rs Java-clients + */ +public class BenchmarkingApp { + + // main application entrypoint + public static void main(String[] args) { + + // create the parser + CommandLineParser parser = new DefaultParser(); + Options options = getOptions(); + RunConfiguration runConfiguration = new RunConfiguration(); + try { + // parse the command line arguments + CommandLine line = parser.parse(options, args); + runConfiguration = verifyOptions(line); + } + catch (ParseException exp) { + // oops, something went wrong + System.err.println("Parsing failed. Reason: " + exp.getMessage()); + } + + try { + switch (runConfiguration.clients) { + case ALL: + testJedisClientResourceSetGet(runConfiguration); + testLettuceClientResourceSetGet(runConfiguration); + System.out.println("Babushka not yet configured"); + break; + case JEDIS: + testJedisClientResourceSetGet(runConfiguration); + break; + case LETTUCE: + testLettuceClientResourceSetGet(runConfiguration); + break; + case BABUSHKA: + System.out.println("Babushka not yet configured"); + break; + } + } catch (IOException ioException) { + System.out.println("Error writing to results file"); + ioException.printStackTrace(); + } + + if (runConfiguration.resultsFile.isPresent()) { + try { + runConfiguration.resultsFile.get().close(); + } catch (IOException ioException) { + System.out.println("Error closing results file"); + } + } + + } + + private static Options getOptions() { + // create the Options + Options options = new Options(); + + options.addOption("c", "configuration", true, "Configuration flag [Release]"); + options.addOption("f", "resultsFile", true, "Result filepath []"); + options.addOption("C", "concurrentTasks", true, "Number of concurrent tasks [1 10 100]"); + options.addOption("l", "clients", true, "one of: all|jedis|lettuce|babushka [all]"); + options.addOption("h", "host", true, "host url [localhost]"); + options.addOption("p", "port", true, "port number [port]"); + options.addOption("n", "clientCount", true, "Client count [1]"); + options.addOption("t", "tls", false, "TLS [true]"); + + return options; + } + + private static RunConfiguration verifyOptions(CommandLine line) throws ParseException { + RunConfiguration runConfiguration = new RunConfiguration(); + if (line.hasOption("configuration")) { + String configuration = line.getOptionValue("configuration"); + if (configuration.equalsIgnoreCase("Release") || configuration.equalsIgnoreCase("Debug")) { + runConfiguration.configuration = configuration; + } else { + throw new ParseException("Invalid run configuration (Release|Debug)"); + } + } + + if (line.hasOption("resultsFile")) { + try { + runConfiguration.resultsFile = Optional.of(new FileWriter(line.getOptionValue("resultsFile"))); + } catch (IOException e) { + throw new ParseException("Unable to write to resultsFile."); + } + } + + if (line.hasOption("concurrentTasks")) { + String concurrentTasks = line.getOptionValue("concurrentTasks"); + + // remove optional square brackets + if (concurrentTasks.startsWith("[") && concurrentTasks.endsWith("]")) { + concurrentTasks = concurrentTasks.substring(1, concurrentTasks.length() - 1); + } + // check if it's the correct format + if (!concurrentTasks.matches("\\d+(\\s+\\d+)?")) { + throw new ParseException("Invalid concurrentTasks"); + } + // split the string into a list of integers + runConfiguration.concurrentTasks = + Arrays.stream(concurrentTasks.split("\\s+")) + .map(Integer::parseInt) + .collect(Collectors.toList()); + } + + if (line.hasOption("clients")) { + String clients = line.getOptionValue("clients"); + if (ClientName.ALL.isEqual(clients)) { + runConfiguration.clients = ClientName.ALL; + } else if (ClientName.JEDIS.isEqual(clients)) { + runConfiguration.clients = ClientName.JEDIS; + } else if (ClientName.LETTUCE.isEqual(clients)) { + runConfiguration.clients = ClientName.LETTUCE; + } else if (ClientName.BABUSHKA.isEqual(clients)) { + runConfiguration.clients = ClientName.BABUSHKA; + } else { + throw new ParseException("Invalid clients option: all|jedis|lettuce|babushka"); + } + } + + if (line.hasOption("host")) { + runConfiguration.host = line.getOptionValue("host"); + } + + if (line.hasOption("clientCount")) { + runConfiguration.clientCount = Integer.parseInt(line.getOptionValue("clientCount")); + } + + if (line.hasOption("tls")) { + runConfiguration.tls = Boolean.parseBoolean(line.getOptionValue("tls")); + } + + return runConfiguration; + } + + private static void testJedisClientResourceSetGet(RunConfiguration runConfiguration) throws IOException { + JedisClient jedisClient = new JedisClient(); + jedisClient.connectToRedis(runConfiguration.host, runConfiguration.port); + + int iterations = 100000; + String value = "my-value"; + + if (runConfiguration.resultsFile.isPresent()) { + runConfiguration.resultsFile.get().write("JEDIS client Benchmarking: "); + } else { + System.out.println("JEDIS client Benchmarking: "); + } + + Map actions = new HashMap<>(); + actions.put(ChosenAction.GET_EXISTING, () -> jedisClient.get(Benchmarking.generateKeySet())); + actions.put(ChosenAction.GET_NON_EXISTING, () -> jedisClient.get(Benchmarking.generateKeyGet())); + actions.put(ChosenAction.SET, () -> jedisClient.set(Benchmarking.generateKeySet(), value)); + + Benchmarking.printResults( + Benchmarking.calculateResults(Benchmarking.getLatencies(iterations, actions)), + runConfiguration.resultsFile + ); + } + + private static LettuceAsyncClient initializeLettuceClient() { + LettuceAsyncClient lettuceClient = new LettuceAsyncClient(); + lettuceClient.connectToRedis(); + return lettuceClient; + } + + private static void testLettuceClientResourceSetGet(RunConfiguration runConfiguration) throws IOException { + LettuceAsyncClient lettuceClient = initializeLettuceClient(); + + int iterations = 100000; + String value = "my-value"; + + if (runConfiguration.resultsFile.isPresent()) { + runConfiguration.resultsFile.get().write("LETTUCE client Benchmarking: "); + } else { + System.out.println("LETTUCE client Benchmarking: "); + } + + HashMap actions = new HashMap<>(); + actions.put(ChosenAction.GET_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeySet())); + actions.put(ChosenAction.GET_NON_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeyGet())); + actions.put(ChosenAction.SET, () -> lettuceClient.set(Benchmarking.generateKeySet(), value)); + + Benchmarking.printResults( + Benchmarking.calculateResults(Benchmarking.getLatencies(iterations, actions)), + runConfiguration.resultsFile + ); + } + + public enum ClientName { + JEDIS("Jedis"), + LETTUCE("Lettuce"), + BABUSHKA("Babushka"), + ALL("All"); + + private String name; + private ClientName(String name) { + this.name = name; + } + + @Override + public String toString() { return this.name; } + + public boolean isEqual(String other) { + return this.toString().equalsIgnoreCase(other); + } + } + + public static class RunConfiguration { + public String configuration; + public Optional resultsFile; + public List concurrentTasks; + public ClientName clients; + public String host; + public int port; + public int clientCount; + public boolean tls; + + public RunConfiguration() { + configuration = "Release"; + resultsFile = Optional.empty(); + concurrentTasks = List.of(1, 10, 100); + clients = ClientName.ALL; + host = "localhost"; + port = 6379; + clientCount = 1; + tls = true; + } + } +} diff --git a/java/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java b/java/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java index 225c4fc440..224817740f 100644 --- a/java/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java +++ b/java/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java @@ -8,16 +8,23 @@ public class JedisClient { + public final static String DEFAULT_HOST = "localhost"; + public final static int DEFAULT_PORT = 6379; + Jedis jedisResource; public boolean someLibraryMethod() { return true; } - public void connectToRedis() { - JedisPool pool = new JedisPool("localhost", 6379); + public void connectToRedis(String host, int port) { + JedisPool pool = new JedisPool(host, port); jedisResource = pool.getResource(); } + public void connectToRedis() { + connectToRedis(DEFAULT_HOST, DEFAULT_PORT); + } + public String info() { return jedisResource.info(); } diff --git a/java/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java b/java/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java new file mode 100644 index 0000000000..74cb2871d7 --- /dev/null +++ b/java/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java @@ -0,0 +1,52 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package javabushka.client.lettuce; + +import io.lettuce.core.RedisClient; +import io.lettuce.core.RedisFuture; +import io.lettuce.core.api.StatefulRedisConnection; +import io.lettuce.core.api.async.RedisAsyncCommands; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class LettuceAsyncClient { + + RedisClient client; + RedisAsyncCommands lettuceSync; + StatefulRedisConnection connection; + + public final long MAX_TIMEOUT_MS = 1000; + + public void connectToRedis() { + client = RedisClient.create("redis://localhost:6379"); + connection = client.connect(); + lettuceSync = connection.async(); + } + + public RedisFuture set(String key, String value) { + RedisFuture future = lettuceSync.set(key, value); + return future; + } + + public RedisFuture get(String key) { + RedisFuture future = lettuceSync.get(key); + return future; + } + + public Object waitForResult(RedisFuture future) + throws ExecutionException, InterruptedException, TimeoutException { + return this.waitForResult(future, MAX_TIMEOUT_MS); + } + + public Object waitForResult(RedisFuture future, long timeoutMS) + throws ExecutionException, InterruptedException, TimeoutException { + return future.get(timeoutMS, TimeUnit.MILLISECONDS); + } + + public void closeConnection() { + connection.close(); + client.shutdown(); + } +} diff --git a/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java b/java/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java similarity index 76% rename from java/benchmarks/src/test/java/javabushka/client/Benchmarking.java rename to java/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java index 84723d5178..de8ee3b7f0 100644 --- a/java/benchmarks/src/test/java/javabushka/client/Benchmarking.java +++ b/java/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java @@ -1,10 +1,11 @@ -package javabushka.client; +package javabushka.client.utils; -import javabushka.client.LatencyResults; -import javabushka.client.ChosenAction; +import java.io.FileWriter; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; import java.util.Collections; @@ -97,10 +98,36 @@ public static Map calculateResults(Map calculatedResults, Optional resultsFile) throws IOException { + if (resultsFile.isPresent()) { + printResults(calculatedResults, resultsFile.get()); + } else { + printResults(calculatedResults); + } + } + + public static void printResults(Map resultsMap, FileWriter resultsFile) throws IOException { + for (Map.Entry entry : resultsMap.entrySet()) { + ChosenAction action = entry.getKey(); + LatencyResults results = entry.getValue(); + + resultsFile.write( + "Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0); + resultsFile.write( + action + " p50 latency in ms: " + results.p50Latency / 1000000.0); + resultsFile.write( + action + " p90 latency in ms: " + results.p90Latency / 1000000.0); + resultsFile.write( + action + " p99 latency in ms: " + results.p99Latency / 1000000.0); + resultsFile.write(action + " std dev in ms: " + results.stdDeviation / 1000000.0); + } + } + public static void printResults(Map resultsMap) { for (Map.Entry entry : resultsMap.entrySet()) { ChosenAction action = entry.getKey(); LatencyResults results = entry.getValue(); + System.out.println( "Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0 ); diff --git a/java/benchmarks/src/test/java/javabushka/client/ChosenAction.java b/java/benchmarks/src/main/java/javabushka/client/utils/ChosenAction.java similarity index 70% rename from java/benchmarks/src/test/java/javabushka/client/ChosenAction.java rename to java/benchmarks/src/main/java/javabushka/client/utils/ChosenAction.java index 6cecf9d478..48f4367308 100644 --- a/java/benchmarks/src/test/java/javabushka/client/ChosenAction.java +++ b/java/benchmarks/src/main/java/javabushka/client/utils/ChosenAction.java @@ -1,4 +1,4 @@ -package javabushka.client; +package javabushka.client.utils; public enum ChosenAction { GET_NON_EXISTING, diff --git a/java/benchmarks/src/test/java/javabushka/client/LatencyResults.java b/java/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java similarity index 94% rename from java/benchmarks/src/test/java/javabushka/client/LatencyResults.java rename to java/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java index 320ec07f74..2cb4593746 100644 --- a/java/benchmarks/src/test/java/javabushka/client/LatencyResults.java +++ b/java/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java @@ -1,4 +1,4 @@ -package javabushka.client; +package javabushka.client.utils; // Raw timing results in nanoseconds public class LatencyResults { diff --git a/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java b/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java index 07b0e382dc..3ec7c59e79 100644 --- a/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java +++ b/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java @@ -3,12 +3,11 @@ */ package javabushka.client.jedis; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import javabushka.client.Benchmarking; -import javabushka.client.Benchmarking.Operation; -import javabushka.client.ChosenAction; +import javabushka.client.utils.ChosenAction; +import javabushka.client.utils.Benchmarking; + import org.junit.Before; import org.junit.Test; import java.util.HashMap; @@ -47,7 +46,7 @@ public void initializeJedisClient() { int iterations = 100000; String value = "my-value"; - Map actions = new HashMap(); + Map actions = new HashMap<>(); actions.put(ChosenAction.GET_EXISTING, () -> jedisClient.get(Benchmarking.generateKeySet())); actions.put(ChosenAction.GET_NON_EXISTING, () -> jedisClient.get(Benchmarking.generateKeyGet())); actions.put(ChosenAction.SET, () -> jedisClient.set(Benchmarking.generateKeySet(), value)); diff --git a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java new file mode 100644 index 0000000000..c5b2277733 --- /dev/null +++ b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java @@ -0,0 +1,76 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package javabushka.client.lettuce; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import io.lettuce.core.RedisFuture; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class LettuceAsyncClientIT { + + LettuceAsyncClient lettuceClient; + + LettuceAsyncClient otherLettuceClient; + + @Before + public void initializeJedisClient() { + lettuceClient = new LettuceAsyncClient(); + lettuceClient.connectToRedis(); + + otherLettuceClient = new LettuceAsyncClient(); + otherLettuceClient.connectToRedis(); + } + + @After + public void closeConnection() { + lettuceClient.closeConnection(); + otherLettuceClient.closeConnection(); + } + + @Test public void testResourceSetGet() { + String key = "key1"; + String value = "my-value-1"; + + String otherKey = "key2"; + String otherValue = "my-value-2"; + + RedisFuture setResult = lettuceClient.set(key, value); + RedisFuture otherSetResult = otherLettuceClient.set(otherKey, otherValue); + + // and wait for both clients + try { + lettuceClient.waitForResult(setResult); + } catch (Exception e) { + assertTrue("Can SET redis result without Exception", false); + } + try { + otherLettuceClient.waitForResult(otherSetResult); + } catch (Exception e) { + assertTrue("Can SET other redis result without Exception", false); + } + + RedisFuture getResult = lettuceClient.get(key); + RedisFuture otherGetResult = otherLettuceClient.get(otherKey); + String result = "invalid"; + String otherResult = "invalid"; + try { + result = (String) lettuceClient.waitForResult(getResult); + } catch (Exception e) { + assertTrue("Can GET redis result without Exception", false); + } + + try { + otherResult = (String) otherLettuceClient.waitForResult(otherGetResult); + } catch (Exception e) { + assertTrue("Can GET other redis result without Exception", false); + } + + assertEquals(value, result); + assertEquals(otherValue, otherResult); + } +} diff --git a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java index b90f327b55..8f72fa9744 100644 --- a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java +++ b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java @@ -3,11 +3,8 @@ */ package javabushka.client.lettuce; -import static org.junit.Assert.assertEquals; - -import javabushka.client.Benchmarking; -import javabushka.client.Benchmarking.Operation; -import javabushka.client.ChosenAction; +import javabushka.client.utils.ChosenAction; +import javabushka.client.utils.Benchmarking; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -32,7 +29,7 @@ public void closeConnection() { int iterations = 100000; String value = "my-value"; - HashMap actions = new HashMap(); + HashMap actions = new HashMap<>(); actions.put(ChosenAction.GET_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeySet())); actions.put(ChosenAction.GET_NON_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeyGet())); actions.put(ChosenAction.SET, () -> lettuceClient.set(Benchmarking.generateKeySet(), value)); From 6c1fb4560ddccbf8bbb037fafb5b50fae8735e53 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Wed, 20 Sep 2023 00:40:10 -0700 Subject: [PATCH 12/81] Add Readme and update install_and_test script to runJava Signed-off-by: acarbonetto --- benchmarks/install_and_test.sh | 34 +++++++++++++++++-- java/README.md | 2 +- .../java-2-2023-09-20-00-01-35.json | 1 + .../javabushka/client/BenchmarkingApp.java | 3 +- 4 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 java/benchmarks/java-2-2023-09-20-00-01-35.json diff --git a/benchmarks/install_and_test.sh b/benchmarks/install_and_test.sh index 2a7853a412..9f23492520 100755 --- a/benchmarks/install_and_test.sh +++ b/benchmarks/install_and_test.sh @@ -24,12 +24,14 @@ runAllBenchmarks=1 runPython=0 runNode=0 runCsharp=0 +runJava=0 runRust=0 concurrentTasks="1 10 100 1000" dataSize="100 4000" clientCount="1" chosenClients="all" host="localhost" +port=6379 tlsFlag="--tls" function runPythonBenchmark(){ @@ -68,6 +70,14 @@ function runCSharpBenchmark(){ dotnet run --configuration Release --resultsFile=../$1 --dataSize $2 --concurrentTasks $concurrentTasks --clients $chosenClients --host $host --clientCount $clientCount $tlsFlag $portFlag } +function runJavaBenchmark(){ + cd ${BENCH_FOLDER}/../java + echo "./gradlew run --args=\"--resultsFile=${BENCH_FOLDER}/$1 --clients $chosenClients --host $host --port $port\"" +# ./gradlew run --args="--resultsFile=../$1 --dataSize $2 --concurrentTasks $concurrentTasks --clients $chosenClients --host $host --port $port --clientCount $clientCount $tlsFlag" + ./gradlew run --args="--resultsFile=${BENCH_FOLDER}/$1 --clients $chosenClients --host $host --port $port" + cd ${BENCH_FOLDER}/java +} + function runRustBenchmark(){ rustConcurrentTasks= for value in $concurrentTasks @@ -185,6 +195,21 @@ do runAllBenchmarks=0 runNode=1 ;; + -java) + runAllBenchmarks=0 + runJava=1 + chosenClients="Babushka" + ;; + -lettuce) + runAllBenchmarks=0 + runJava=1 + chosenClients="Lettuce" + ;; + -lettuce) + runAllBenchmarks=0 + runJava=1 + chosenClients="Jedis" + ;; -csharp) runAllBenchmarks=0 runCsharp=1 @@ -242,6 +267,13 @@ do runCSharpBenchmark $csharpResults $currentDataSize fi + if [ $runAllBenchmarks == 1 ] || [ $runJava == 1 ]; + then + javaResults=$(resultFileName java $currentDataSize) + resultFiles+=$javaResults" " + runJavaBenchmark $javaResults $currentDataSize + fi + if [ $runAllBenchmarks == 1 ] || [ $runRust == 1 ]; then rustResults=$(resultFileName rust $currentDataSize) @@ -250,8 +282,6 @@ do fi done - - flushDB if [ $writeResultsCSV == 1 ]; diff --git a/java/README.md b/java/README.md index a22fb4cf24..9f19374828 100644 --- a/java/README.md +++ b/java/README.md @@ -21,7 +21,7 @@ You can assemble the Java clients benchmarks by compiling using `./gradlew build You can run benchmarks using `./gradlew run`. You can set arguments using the args flag like: ```shell -./gradle run --args="--clients lettuce" +./gradlew run --args="--clients lettuce" ``` The following arguments are accepted: diff --git a/java/benchmarks/java-2-2023-09-20-00-01-35.json b/java/benchmarks/java-2-2023-09-20-00-01-35.json new file mode 100644 index 0000000000..aa38b95cf5 --- /dev/null +++ b/java/benchmarks/java-2-2023-09-20-00-01-35.json @@ -0,0 +1 @@ +LETTUCE client Benchmarking: Avg. time in ms per SET: 6.255784328470447E-4SET p50 latency in ms: 2.91E-4SET p90 latency in ms: 8.33E-4SET p99 latency in ms: 0.007625SET std dev in ms: 0.00217342597058043Avg. time in ms per GET_EXISTING: 6.61669922332828E-4GET_EXISTING p50 latency in ms: 2.5E-4GET_EXISTING p90 latency in ms: 6.25E-4GET_EXISTING p99 latency in ms: 0.007875GET_EXISTING std dev in ms: 0.021820083844063233Avg. time in ms per GET_NON_EXISTING: 5.872813472792927E-4GET_NON_EXISTING p50 latency in ms: 2.5E-4GET_NON_EXISTING p90 latency in ms: 7.08E-4GET_NON_EXISTING p99 latency in ms: 0.008291GET_NON_EXISTING std dev in ms: 0.0021284746375641456 \ No newline at end of file diff --git a/java/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java b/java/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java index d17e127727..e57e3e5bc2 100644 --- a/java/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java @@ -12,7 +12,6 @@ import javabushka.client.lettuce.LettuceAsyncClient; import javabushka.client.utils.Benchmarking; import javabushka.client.utils.ChosenAction; -import javabushka.client.utils.LatencyResults; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; @@ -82,7 +81,7 @@ private static Options getOptions() { options.addOption("C", "concurrentTasks", true, "Number of concurrent tasks [1 10 100]"); options.addOption("l", "clients", true, "one of: all|jedis|lettuce|babushka [all]"); options.addOption("h", "host", true, "host url [localhost]"); - options.addOption("p", "port", true, "port number [port]"); + options.addOption("p", "port", true, "port number [6379]"); options.addOption("n", "clientCount", true, "Client count [1]"); options.addOption("t", "tls", false, "TLS [true]"); From 46d0cf669f7b988068633351e5fb21d45a5f2d0e Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Wed, 20 Sep 2023 00:42:14 -0700 Subject: [PATCH 13/81] Add Readme and update install_and_test script to runJava Signed-off-by: acarbonetto --- java/benchmarks/java-2-2023-09-20-00-01-35.json | 1 - 1 file changed, 1 deletion(-) delete mode 100644 java/benchmarks/java-2-2023-09-20-00-01-35.json diff --git a/java/benchmarks/java-2-2023-09-20-00-01-35.json b/java/benchmarks/java-2-2023-09-20-00-01-35.json deleted file mode 100644 index aa38b95cf5..0000000000 --- a/java/benchmarks/java-2-2023-09-20-00-01-35.json +++ /dev/null @@ -1 +0,0 @@ -LETTUCE client Benchmarking: Avg. time in ms per SET: 6.255784328470447E-4SET p50 latency in ms: 2.91E-4SET p90 latency in ms: 8.33E-4SET p99 latency in ms: 0.007625SET std dev in ms: 0.00217342597058043Avg. time in ms per GET_EXISTING: 6.61669922332828E-4GET_EXISTING p50 latency in ms: 2.5E-4GET_EXISTING p90 latency in ms: 6.25E-4GET_EXISTING p99 latency in ms: 0.007875GET_EXISTING std dev in ms: 0.021820083844063233Avg. time in ms per GET_NON_EXISTING: 5.872813472792927E-4GET_NON_EXISTING p50 latency in ms: 2.5E-4GET_NON_EXISTING p90 latency in ms: 7.08E-4GET_NON_EXISTING p99 latency in ms: 0.008291GET_NON_EXISTING std dev in ms: 0.0021284746375641456 \ No newline at end of file From d526f969aee00c2a81a31aa008b8788b8c748d99 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Thu, 21 Sep 2023 17:37:59 -0700 Subject: [PATCH 14/81] Combine java pipeline and java benchmarks (#8) * Merge Pull Request #5 - Add java pipeline. Also changed: * Merged two projects. * Updated CI. * Fixed tests and updated `junit` version. * Spotless. * Add new gradle tasks. Signed-off-by: Yury-Fridlyand --- .github/workflows/java-benchmark.yml | 46 +++++ .github/workflows/java.yml | 63 ++++++ .gitignore | 11 ++ java/.cargo/config.toml | 3 + java/.gitignore | 3 + java/Cargo.toml | 21 ++ java/README.md | 14 +- .../javabushka/client/jedis/JedisClient.java | 43 ---- .../client/lettuce/LettuceAsyncClient.java | 52 ----- .../client/lettuce/LettuceClient.java | 34 ---- .../javabushka/client/utils/Benchmarking.java | 140 ------------- .../client/utils/LatencyResults.java | 24 --- .../client/jedis/JedisClientIT.java | 61 ------ .../client/lettuce/LettuceAsyncClientIT.java | 76 -------- .../client/lettuce/LettuceClientIT.java | 37 ---- java/{ => jabushka}/benchmarks/build.gradle | 2 +- .../javabushka/client/BenchmarkingApp.java | 34 ++-- .../javabushka/client/jedis/JedisClient.java | 44 +++++ .../client/lettuce/LettuceAsyncClient.java | 52 +++++ .../client/lettuce/LettuceClient.java | 34 ++++ .../javabushka/client/utils/Benchmarking.java | 141 ++++++++++++++ .../javabushka/client/utils/ChosenAction.java | 6 +- .../client/utils/LatencyResults.java | 19 ++ .../client/jedis/JedisClientIT.java | 61 ++++++ .../client/lettuce/LettuceAsyncClientIT.java | 77 ++++++++ .../client/lettuce/LettuceClientIT.java | 39 ++++ java/jabushka/build.gradle | 100 ++++++++++ java/jabushka/gradle.properties | 2 + .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 java/{ => jabushka}/gradlew | 0 java/{ => jabushka}/gradlew.bat | 184 +++++++++--------- java/jabushka/integTest/build.gradle | 0 java/jabushka/jabushka/build.gradle | 46 +++++ java/jabushka/settings.gradle | 5 + java/lib/build.gradle | 34 ---- .../lib/src/main/java/javabushka/Library.java | 10 - .../src/test/java/javabushka/LibraryTest.java | 14 -- java/settings.gradle | 15 -- java/src/lib.rs | 0 40 files changed, 892 insertions(+), 655 deletions(-) create mode 100644 .github/workflows/java-benchmark.yml create mode 100644 .github/workflows/java.yml create mode 100644 java/.cargo/config.toml create mode 100644 java/Cargo.toml delete mode 100644 java/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java delete mode 100644 java/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java delete mode 100644 java/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java delete mode 100644 java/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java delete mode 100644 java/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java delete mode 100644 java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java delete mode 100644 java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java delete mode 100644 java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java rename java/{ => jabushka}/benchmarks/build.gradle (94%) rename java/{ => jabushka}/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java (92%) create mode 100644 java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java create mode 100644 java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java create mode 100644 java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java create mode 100644 java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java rename java/{ => jabushka}/benchmarks/src/main/java/javabushka/client/utils/ChosenAction.java (56%) create mode 100644 java/jabushka/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java create mode 100644 java/jabushka/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java create mode 100644 java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java create mode 100644 java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java create mode 100644 java/jabushka/build.gradle create mode 100644 java/jabushka/gradle.properties rename java/{ => jabushka}/gradle/wrapper/gradle-wrapper.jar (100%) rename java/{ => jabushka}/gradle/wrapper/gradle-wrapper.properties (100%) rename java/{ => jabushka}/gradlew (100%) rename java/{ => jabushka}/gradlew.bat (96%) mode change 100644 => 100755 create mode 100644 java/jabushka/integTest/build.gradle create mode 100644 java/jabushka/jabushka/build.gradle create mode 100644 java/jabushka/settings.gradle delete mode 100644 java/lib/build.gradle delete mode 100644 java/lib/src/main/java/javabushka/Library.java delete mode 100644 java/lib/src/test/java/javabushka/LibraryTest.java delete mode 100644 java/settings.gradle create mode 100644 java/src/lib.rs diff --git a/.github/workflows/java-benchmark.yml b/.github/workflows/java-benchmark.yml new file mode 100644 index 0000000000..88303fd3a4 --- /dev/null +++ b/.github/workflows/java-benchmark.yml @@ -0,0 +1,46 @@ +name: Java client benchmarks + +on: + workflow_dispatch: + inputs: + name: + required: false + type: string + +run-name: ${{ inputs.name == '' && format('{0} @ {1}', github.ref_name, github.sha) || inputs.name }} + +jobs: + java-benchmark: + strategy: + matrix: + java: + - 11 + - 17 + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up JDK ${{ matrix.java }} + uses: actions/setup-java@v3 + with: + distribution: "temurin" + java-version: ${{ matrix.java }} + + - name: Start Redis + run: docker run -p 6379:6379 -p 8001:8001 -d redis/redis-stack + + - name: Run benchmarks + working-directory: java/jabushka + run: ./gradlew :benchmark:run + + - name: Upload test reports + if: always() + continue-on-error: true + uses: actions/upload-artifact@v3 + with: + name: test-reports-${{ matrix.java }} + path: | + java/jabushka/benchmarks/build/reports/** diff --git a/.github/workflows/java.yml b/.github/workflows/java.yml new file mode 100644 index 0000000000..1927cbe58f --- /dev/null +++ b/.github/workflows/java.yml @@ -0,0 +1,63 @@ +name: SQL Java CI + +on: + pull_request: + push: + paths: + - "java/**" + - ".github/workflows/java.yml" + +# Run only most latest job on a branch and cancel previous ones +concurrency: + group: ${{ github.head_ref || github.ref }} + cancel-in-progress: true + +jobs: + build-and-test-java-client: + strategy: + # Run all jobs + fail-fast: false + matrix: + java: + - 11 + - 17 + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up JDK ${{ matrix.java }} + uses: actions/setup-java@v3 + with: + distribution: "temurin" + java-version: ${{ matrix.java }} + + - name: Install and run protoc (protobuf) + run: | + sudo apt update + sudo apt install -y protobuf-compiler + mkdir -p java/jabushka/jabushka/src/main/java/org/babushka/jabushka/generated + protoc -Iprotobuf=babushka-core/src/protobuf/ --java_out=java/jabushka/jabushka/src/main/java/org/babushka/jabushka/generated babushka-core/src/protobuf/*.proto + + - name: Build rust part + working-directory: java + run: cargo build + + - name: Start Redis + run: docker run -p 6379:6379 -p 8001:8001 -d redis/redis-stack + + - name: Build java part + working-directory: java/jabushka + run: ./gradlew --continue build + + - name: Upload test reports + if: always() + continue-on-error: true + uses: actions/upload-artifact@v3 + with: + name: test-reports-${{ matrix.java }} + path: | + java/jabushka/jabushka/build/reports/** + java/jabushka/integTest/build/reports/** diff --git a/.gitignore b/.gitignore index 92ac3aaf47..ad4f5014ba 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ debug/ target/ +# Git stuff +.worktrees + # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html Cargo.lock @@ -17,6 +20,14 @@ dump.rdb .env benchmarks/results +# IDE generaged files +.vs +.vscode +.idea + +# MacOS metadata +.DS_Store + # lock files yarn.lock diff --git a/java/.cargo/config.toml b/java/.cargo/config.toml new file mode 100644 index 0000000000..24a6f21533 --- /dev/null +++ b/java/.cargo/config.toml @@ -0,0 +1,3 @@ +[env] +BABUSHKA_NAME = { value = "BabushkaPy", force = true } +BABUSHKA_VERSION = "0.1.0" diff --git a/java/.gitignore b/java/.gitignore index 1b6985c009..8f60484e5a 100644 --- a/java/.gitignore +++ b/java/.gitignore @@ -3,3 +3,6 @@ # Ignore Gradle build output directory build + +# Ignore generated files (e.g. protobuf) +generated diff --git a/java/Cargo.toml b/java/Cargo.toml new file mode 100644 index 0000000000..ccde88c26d --- /dev/null +++ b/java/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "jabushka" +version = "0.0.0" +edition = "2021" +license = "BSD-3-Clause" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[lib] +name = "jabushka" +crate-type = ["cdylib"] + +[dependencies] +redis = { path = "../submodules/redis-rs/redis", features = ["aio", "tokio-comp", "connection-manager", "tls", "tokio-rustls-comp"] } +babushka = { path = "../babushka-core" } +tokio = { version = "^1", features = ["rt", "macros", "rt-multi-thread", "time"] } +logger_core = {path = "../logger_core"} +tracing-subscriber = "0.3.16" + +[profile.release] +lto = true +debug = true diff --git a/java/README.md b/java/README.md index 9f19374828..69b38c9cde 100644 --- a/java/README.md +++ b/java/README.md @@ -1,7 +1,7 @@ # Summary - Java Wrapper -This module contains a Java-client wrapper that connects to the `Babushka`-rust-client. The rust client connects to -redis, while this wrapper provides Java-language binding. The objective of this wrapper is to provide a thin-wrapper +This module contains a Java-client wrapper that connects to the `Babushka`-rust-client. The rust client connects to +redis, while this wrapper provides Java-language binding. The objective of this wrapper is to provide a thin-wrapper language api to enhance performance and limit cpu cycles at scale. ## Organization @@ -16,9 +16,17 @@ The Java client (javabushka) contains the following parts: You can assemble the Java clients benchmarks by compiling using `./gradlew build`. +## Code style + +Code style is enforced by spotless with Google Java Format. The build fails if code formatted incorrectly, but you can auto-format code with `./gradlew spotlessApply`. +Run this command before every commit to keep code in the same style. +These IDE plugins can auto-format code on file save or by single click: +* [For Intellij IDEA](https://plugins.jetbrains.com/plugin/18321-spotless-gradle) +* [For VS Code](https://marketplace.visualstudio.com/items?itemName=richardwillis.vscode-spotless-gradle) + ## Benchmarks -You can run benchmarks using `./gradlew run`. You can set arguments using the args flag like: +You can run benchmarks using `./gradlew run`. You can set arguments using the args flag like: ```shell ./gradlew run --args="--clients lettuce" diff --git a/java/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java b/java/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java deleted file mode 100644 index 224817740f..0000000000 --- a/java/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javabushka.client.jedis; - -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisPool; - -public class JedisClient { - - public final static String DEFAULT_HOST = "localhost"; - public final static int DEFAULT_PORT = 6379; - - Jedis jedisResource; - public boolean someLibraryMethod() { - return true; - } - - public void connectToRedis(String host, int port) { - JedisPool pool = new JedisPool(host, port); - jedisResource = pool.getResource(); - } - - public void connectToRedis() { - connectToRedis(DEFAULT_HOST, DEFAULT_PORT); - } - - public String info() { - return jedisResource.info(); - } - - public String info(String section) { - return jedisResource.info(section); - } - - public void set(String key, String value) { - jedisResource.set(key, value); - } - - public String get(String key) { - return jedisResource.get(key); - } -} diff --git a/java/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java b/java/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java deleted file mode 100644 index 74cb2871d7..0000000000 --- a/java/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javabushka.client.lettuce; - -import io.lettuce.core.RedisClient; -import io.lettuce.core.RedisFuture; -import io.lettuce.core.api.StatefulRedisConnection; -import io.lettuce.core.api.async.RedisAsyncCommands; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -public class LettuceAsyncClient { - - RedisClient client; - RedisAsyncCommands lettuceSync; - StatefulRedisConnection connection; - - public final long MAX_TIMEOUT_MS = 1000; - - public void connectToRedis() { - client = RedisClient.create("redis://localhost:6379"); - connection = client.connect(); - lettuceSync = connection.async(); - } - - public RedisFuture set(String key, String value) { - RedisFuture future = lettuceSync.set(key, value); - return future; - } - - public RedisFuture get(String key) { - RedisFuture future = lettuceSync.get(key); - return future; - } - - public Object waitForResult(RedisFuture future) - throws ExecutionException, InterruptedException, TimeoutException { - return this.waitForResult(future, MAX_TIMEOUT_MS); - } - - public Object waitForResult(RedisFuture future, long timeoutMS) - throws ExecutionException, InterruptedException, TimeoutException { - return future.get(timeoutMS, TimeUnit.MILLISECONDS); - } - - public void closeConnection() { - connection.close(); - client.shutdown(); - } -} diff --git a/java/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java b/java/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java deleted file mode 100644 index ea12367f60..0000000000 --- a/java/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javabushka.client.lettuce; - -import io.lettuce.core.RedisClient; -import io.lettuce.core.api.StatefulRedisConnection; -import io.lettuce.core.api.sync.RedisStringCommands; - -public class LettuceClient { - - RedisClient client; - RedisStringCommands lettuceSync; - StatefulRedisConnection connection; - - public void connectToRedis() { - client = RedisClient.create("redis://localhost:6379"); - connection = client.connect(); - lettuceSync = connection.sync(); - } - - public void set(String key, String value) { - lettuceSync.set(key, value); - } - - public String get(String key) { - return (String) lettuceSync.get(key); - } - - public void closeConnection() { - connection.close(); - client.shutdown(); - } -} diff --git a/java/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java b/java/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java deleted file mode 100644 index de8ee3b7f0..0000000000 --- a/java/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java +++ /dev/null @@ -1,140 +0,0 @@ -package javabushka.client.utils; - -import java.io.FileWriter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Collectors; -import java.util.Collections; - -public class Benchmarking { - static final double PROB_GET = 0.8; - static final double PROB_GET_EXISTING_KEY = 0.8; - static final int SIZE_GET_KEYSPACE = 3750000; - static final int SIZE_SET_KEYSPACE = 3000000; - - private static ChosenAction randomAction() { - if (Math.random() > PROB_GET) { - return ChosenAction.SET; - } - if (Math.random() > PROB_GET_EXISTING_KEY) { - return ChosenAction.GET_NON_EXISTING; - } - return ChosenAction.GET_EXISTING; - } - - public static String generateKeyGet() { - int range = SIZE_GET_KEYSPACE - SIZE_SET_KEYSPACE; - return Math.floor(Math.random() * range + SIZE_SET_KEYSPACE + 1) + ""; - } - - public static String generateKeySet() { - return (Math.floor(Math.random() * SIZE_SET_KEYSPACE) + 1) + ""; - } - - public interface Operation { - void go(); - } - - public static Map> getLatencies(int iterations, Map actions) { - Map> latencies = new HashMap>(); - for (ChosenAction action : actions.keySet()) { - latencies.put(action, new ArrayList()); - } - - for (int i = 0; i actionLatencies = latencies.get(action); - addLatency(op, actionLatencies); - } - - return latencies; - } - - private static void addLatency(Operation op, ArrayList latencies) { - long before = System.nanoTime(); - op.go(); - long after = System.nanoTime(); - latencies.add(after - before); - } - - // Assumption: latencies is sorted in ascending order - private static Long percentile(ArrayList latencies, int percentile) { - return latencies.get((int) Math.ceil((percentile / 100.0) * latencies.size())); - } - - private static double stdDeviation(ArrayList latencies, Double avgLatency) { - double stdDeviation = latencies.stream() - .mapToDouble(Long::doubleValue) - .reduce(0.0, (stdDev, latency) -> stdDev + Math.pow(latency - avgLatency, 2)); - return Math.sqrt(stdDeviation / latencies.size()); - } - - // This has the side-effect of sorting each latencies ArrayList - public static Map calculateResults(Map> actionLatencies) { - Map results = new HashMap(); - - for (Map.Entry> entry : actionLatencies.entrySet()) { - ChosenAction action = entry.getKey(); - ArrayList latencies = entry.getValue(); - - Double avgLatency = latencies - .stream() - .collect(Collectors.summingLong(Long::longValue)) / Double.valueOf(latencies.size()); - - Collections.sort(latencies); - results.put(action, new LatencyResults( - avgLatency, - percentile(latencies, 50), - percentile(latencies, 90), - percentile(latencies, 99), - stdDeviation(latencies, avgLatency) - )); - } - - return results; - } - - public static void printResults(Map calculatedResults, Optional resultsFile) throws IOException { - if (resultsFile.isPresent()) { - printResults(calculatedResults, resultsFile.get()); - } else { - printResults(calculatedResults); - } - } - - public static void printResults(Map resultsMap, FileWriter resultsFile) throws IOException { - for (Map.Entry entry : resultsMap.entrySet()) { - ChosenAction action = entry.getKey(); - LatencyResults results = entry.getValue(); - - resultsFile.write( - "Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0); - resultsFile.write( - action + " p50 latency in ms: " + results.p50Latency / 1000000.0); - resultsFile.write( - action + " p90 latency in ms: " + results.p90Latency / 1000000.0); - resultsFile.write( - action + " p99 latency in ms: " + results.p99Latency / 1000000.0); - resultsFile.write(action + " std dev in ms: " + results.stdDeviation / 1000000.0); - } - } - - public static void printResults(Map resultsMap) { - for (Map.Entry entry : resultsMap.entrySet()) { - ChosenAction action = entry.getKey(); - LatencyResults results = entry.getValue(); - - System.out.println( - "Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0 - ); - System.out.println(action + " p50 latency in ms: " + results.p50Latency / 1000000.0); - System.out.println(action + " p90 latency in ms: " + results.p90Latency / 1000000.0); - System.out.println(action + " p99 latency in ms: " + results.p99Latency / 1000000.0); - System.out.println(action + " std dev in ms: " + results.stdDeviation / 1000000.0); - } - } -} diff --git a/java/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java b/java/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java deleted file mode 100644 index 2cb4593746..0000000000 --- a/java/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java +++ /dev/null @@ -1,24 +0,0 @@ -package javabushka.client.utils; - -// Raw timing results in nanoseconds -public class LatencyResults { - public final double avgLatency; - public final long p50Latency; - public final long p90Latency; - public final long p99Latency; - public final double stdDeviation; - - public LatencyResults( - double avgLatency, - long p50Latency, - long p90Latency, - long p99Latency, - double stdDeviation - ) { - this.avgLatency = avgLatency; - this.p50Latency = p50Latency; - this.p90Latency = p90Latency; - this.p99Latency = p99Latency; - this.stdDeviation = stdDeviation; - } -} diff --git a/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java b/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java deleted file mode 100644 index 3ec7c59e79..0000000000 --- a/java/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javabushka.client.jedis; - -import static org.junit.Assert.assertTrue; - -import javabushka.client.utils.ChosenAction; -import javabushka.client.utils.Benchmarking; - -import org.junit.Before; -import org.junit.Test; -import java.util.HashMap; -import java.util.Map; - -public class JedisClientIT { - - JedisClient jedisClient; - - @Before - public void initializeJedisClient() { - jedisClient = new JedisClient(); - jedisClient.connectToRedis(); - } - - @Test public void someLibraryMethodReturnsTrue() { - JedisClient classUnderTest = new JedisClient(); - assertTrue("someLibraryMethod should return 'true'", classUnderTest.someLibraryMethod()); - } - - @Test public void testResourceInfo() { - String result = jedisClient.info(); - - assertTrue(result.length() > 0); - } - - @Test public void testResourceInfoBySection() { - String section = "Server"; - String result = jedisClient.info(section); - - assertTrue(result.length() > 0); - assertTrue(result.startsWith("# " + section)); - } - - @Test public void testResourceSetGet() { - int iterations = 100000; - String value = "my-value"; - - Map actions = new HashMap<>(); - actions.put(ChosenAction.GET_EXISTING, () -> jedisClient.get(Benchmarking.generateKeySet())); - actions.put(ChosenAction.GET_NON_EXISTING, () -> jedisClient.get(Benchmarking.generateKeyGet())); - actions.put(ChosenAction.SET, () -> jedisClient.set(Benchmarking.generateKeySet(), value)); - - Benchmarking.printResults( - Benchmarking.calculateResults( - Benchmarking.getLatencies(iterations, actions) - ) - ); - } -} - diff --git a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java deleted file mode 100644 index c5b2277733..0000000000 --- a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javabushka.client.lettuce; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import io.lettuce.core.RedisFuture; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -public class LettuceAsyncClientIT { - - LettuceAsyncClient lettuceClient; - - LettuceAsyncClient otherLettuceClient; - - @Before - public void initializeJedisClient() { - lettuceClient = new LettuceAsyncClient(); - lettuceClient.connectToRedis(); - - otherLettuceClient = new LettuceAsyncClient(); - otherLettuceClient.connectToRedis(); - } - - @After - public void closeConnection() { - lettuceClient.closeConnection(); - otherLettuceClient.closeConnection(); - } - - @Test public void testResourceSetGet() { - String key = "key1"; - String value = "my-value-1"; - - String otherKey = "key2"; - String otherValue = "my-value-2"; - - RedisFuture setResult = lettuceClient.set(key, value); - RedisFuture otherSetResult = otherLettuceClient.set(otherKey, otherValue); - - // and wait for both clients - try { - lettuceClient.waitForResult(setResult); - } catch (Exception e) { - assertTrue("Can SET redis result without Exception", false); - } - try { - otherLettuceClient.waitForResult(otherSetResult); - } catch (Exception e) { - assertTrue("Can SET other redis result without Exception", false); - } - - RedisFuture getResult = lettuceClient.get(key); - RedisFuture otherGetResult = otherLettuceClient.get(otherKey); - String result = "invalid"; - String otherResult = "invalid"; - try { - result = (String) lettuceClient.waitForResult(getResult); - } catch (Exception e) { - assertTrue("Can GET redis result without Exception", false); - } - - try { - otherResult = (String) otherLettuceClient.waitForResult(otherGetResult); - } catch (Exception e) { - assertTrue("Can GET other redis result without Exception", false); - } - - assertEquals(value, result); - assertEquals(otherValue, otherResult); - } -} diff --git a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java b/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java deleted file mode 100644 index 8f72fa9744..0000000000 --- a/java/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javabushka.client.lettuce; - -import javabushka.client.utils.ChosenAction; -import javabushka.client.utils.Benchmarking; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import java.util.HashMap; - -public class LettuceClientIT { - - LettuceClient lettuceClient; - - @Before - public void initializeJedisClient() { - lettuceClient = new LettuceClient(); - lettuceClient.connectToRedis(); - } - - @After - public void closeConnection() { - lettuceClient.closeConnection(); - } - - @Test public void testResourceSetGet() { - int iterations = 100000; - String value = "my-value"; - - HashMap actions = new HashMap<>(); - actions.put(ChosenAction.GET_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeySet())); - actions.put(ChosenAction.GET_NON_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeyGet())); - actions.put(ChosenAction.SET, () -> lettuceClient.set(Benchmarking.generateKeySet(), value)); - } -} diff --git a/java/benchmarks/build.gradle b/java/jabushka/benchmarks/build.gradle similarity index 94% rename from java/benchmarks/build.gradle rename to java/jabushka/benchmarks/build.gradle index 3b57a0575f..5e21fe3ea6 100644 --- a/java/benchmarks/build.gradle +++ b/java/jabushka/benchmarks/build.gradle @@ -10,7 +10,7 @@ repositories { dependencies { // Use JUnit test framework. - testImplementation 'junit:junit:4.13.2' + testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2' // This dependency is used internally, and not exposed to consumers on their own compile classpath. implementation 'com.google.guava:guava:32.1.1-jre' diff --git a/java/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java similarity index 92% rename from java/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java rename to java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java index e57e3e5bc2..c0341c8da3 100644 --- a/java/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java @@ -18,9 +18,7 @@ import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; -/** - * Benchmarking app for reporting performance of various redis-rs Java-clients - */ +/** Benchmarking app for reporting performance of various redis-rs Java-clients */ public class BenchmarkingApp { // main application entrypoint @@ -34,8 +32,7 @@ public static void main(String[] args) { // parse the command line arguments CommandLine line = parser.parse(options, args); runConfiguration = verifyOptions(line); - } - catch (ParseException exp) { + } catch (ParseException exp) { // oops, something went wrong System.err.println("Parsing failed. Reason: " + exp.getMessage()); } @@ -69,7 +66,6 @@ public static void main(String[] args) { System.out.println("Error closing results file"); } } - } private static Options getOptions() { @@ -101,7 +97,8 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce if (line.hasOption("resultsFile")) { try { - runConfiguration.resultsFile = Optional.of(new FileWriter(line.getOptionValue("resultsFile"))); + runConfiguration.resultsFile = + Optional.of(new FileWriter(line.getOptionValue("resultsFile"))); } catch (IOException e) { throw new ParseException("Unable to write to resultsFile."); } @@ -155,7 +152,8 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce return runConfiguration; } - private static void testJedisClientResourceSetGet(RunConfiguration runConfiguration) throws IOException { + private static void testJedisClientResourceSetGet(RunConfiguration runConfiguration) + throws IOException { JedisClient jedisClient = new JedisClient(); jedisClient.connectToRedis(runConfiguration.host, runConfiguration.port); @@ -170,13 +168,13 @@ private static void testJedisClientResourceSetGet(RunConfiguration runConfigurat Map actions = new HashMap<>(); actions.put(ChosenAction.GET_EXISTING, () -> jedisClient.get(Benchmarking.generateKeySet())); - actions.put(ChosenAction.GET_NON_EXISTING, () -> jedisClient.get(Benchmarking.generateKeyGet())); + actions.put( + ChosenAction.GET_NON_EXISTING, () -> jedisClient.get(Benchmarking.generateKeyGet())); actions.put(ChosenAction.SET, () -> jedisClient.set(Benchmarking.generateKeySet(), value)); Benchmarking.printResults( Benchmarking.calculateResults(Benchmarking.getLatencies(iterations, actions)), - runConfiguration.resultsFile - ); + runConfiguration.resultsFile); } private static LettuceAsyncClient initializeLettuceClient() { @@ -185,7 +183,8 @@ private static LettuceAsyncClient initializeLettuceClient() { return lettuceClient; } - private static void testLettuceClientResourceSetGet(RunConfiguration runConfiguration) throws IOException { + private static void testLettuceClientResourceSetGet(RunConfiguration runConfiguration) + throws IOException { LettuceAsyncClient lettuceClient = initializeLettuceClient(); int iterations = 100000; @@ -199,13 +198,13 @@ private static void testLettuceClientResourceSetGet(RunConfiguration runConfigur HashMap actions = new HashMap<>(); actions.put(ChosenAction.GET_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeySet())); - actions.put(ChosenAction.GET_NON_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeyGet())); + actions.put( + ChosenAction.GET_NON_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeyGet())); actions.put(ChosenAction.SET, () -> lettuceClient.set(Benchmarking.generateKeySet(), value)); Benchmarking.printResults( Benchmarking.calculateResults(Benchmarking.getLatencies(iterations, actions)), - runConfiguration.resultsFile - ); + runConfiguration.resultsFile); } public enum ClientName { @@ -215,12 +214,15 @@ public enum ClientName { ALL("All"); private String name; + private ClientName(String name) { this.name = name; } @Override - public String toString() { return this.name; } + public String toString() { + return this.name; + } public boolean isEqual(String other) { return this.toString().equalsIgnoreCase(other); diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java new file mode 100644 index 0000000000..b3f9e3ee69 --- /dev/null +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java @@ -0,0 +1,44 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package javabushka.client.jedis; + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; + +public class JedisClient { + + public static final String DEFAULT_HOST = "localhost"; + public static final int DEFAULT_PORT = 6379; + + Jedis jedisResource; + + public boolean someLibraryMethod() { + return true; + } + + public void connectToRedis(String host, int port) { + JedisPool pool = new JedisPool(host, port); + jedisResource = pool.getResource(); + } + + public void connectToRedis() { + connectToRedis(DEFAULT_HOST, DEFAULT_PORT); + } + + public String info() { + return jedisResource.info(); + } + + public String info(String section) { + return jedisResource.info(section); + } + + public void set(String key, String value) { + jedisResource.set(key, value); + } + + public String get(String key) { + return jedisResource.get(key); + } +} diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java new file mode 100644 index 0000000000..6c0c8f5083 --- /dev/null +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java @@ -0,0 +1,52 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package javabushka.client.lettuce; + +import io.lettuce.core.RedisClient; +import io.lettuce.core.RedisFuture; +import io.lettuce.core.api.StatefulRedisConnection; +import io.lettuce.core.api.async.RedisAsyncCommands; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class LettuceAsyncClient { + + RedisClient client; + RedisAsyncCommands lettuceSync; + StatefulRedisConnection connection; + + public final long MAX_TIMEOUT_MS = 1000; + + public void connectToRedis() { + client = RedisClient.create("redis://localhost:6379"); + connection = client.connect(); + lettuceSync = connection.async(); + } + + public RedisFuture set(String key, String value) { + RedisFuture future = lettuceSync.set(key, value); + return future; + } + + public RedisFuture get(String key) { + RedisFuture future = lettuceSync.get(key); + return future; + } + + public Object waitForResult(RedisFuture future) + throws ExecutionException, InterruptedException, TimeoutException { + return this.waitForResult(future, MAX_TIMEOUT_MS); + } + + public Object waitForResult(RedisFuture future, long timeoutMS) + throws ExecutionException, InterruptedException, TimeoutException { + return future.get(timeoutMS, TimeUnit.MILLISECONDS); + } + + public void closeConnection() { + connection.close(); + client.shutdown(); + } +} diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java new file mode 100644 index 0000000000..c0dc6a38f0 --- /dev/null +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java @@ -0,0 +1,34 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package javabushka.client.lettuce; + +import io.lettuce.core.RedisClient; +import io.lettuce.core.api.StatefulRedisConnection; +import io.lettuce.core.api.sync.RedisStringCommands; + +public class LettuceClient { + + RedisClient client; + RedisStringCommands lettuceSync; + StatefulRedisConnection connection; + + public void connectToRedis() { + client = RedisClient.create("redis://localhost:6379"); + connection = client.connect(); + lettuceSync = connection.sync(); + } + + public void set(String key, String value) { + lettuceSync.set(key, value); + } + + public String get(String key) { + return (String) lettuceSync.get(key); + } + + public void closeConnection() { + connection.close(); + client.shutdown(); + } +} diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java new file mode 100644 index 0000000000..182b062c99 --- /dev/null +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java @@ -0,0 +1,141 @@ +package javabushka.client.utils; + +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +public class Benchmarking { + static final double PROB_GET = 0.8; + static final double PROB_GET_EXISTING_KEY = 0.8; + static final int SIZE_GET_KEYSPACE = 3750000; + static final int SIZE_SET_KEYSPACE = 3000000; + + private static ChosenAction randomAction() { + if (Math.random() > PROB_GET) { + return ChosenAction.SET; + } + if (Math.random() > PROB_GET_EXISTING_KEY) { + return ChosenAction.GET_NON_EXISTING; + } + return ChosenAction.GET_EXISTING; + } + + public static String generateKeyGet() { + int range = SIZE_GET_KEYSPACE - SIZE_SET_KEYSPACE; + return Math.floor(Math.random() * range + SIZE_SET_KEYSPACE + 1) + ""; + } + + public static String generateKeySet() { + return (Math.floor(Math.random() * SIZE_SET_KEYSPACE) + 1) + ""; + } + + public interface Operation { + void go(); + } + + public static Map> getLatencies( + int iterations, Map actions) { + Map> latencies = new HashMap>(); + for (ChosenAction action : actions.keySet()) { + latencies.put(action, new ArrayList()); + } + + for (int i = 0; i < iterations; i++) { + ChosenAction action = randomAction(); + Operation op = actions.get(action); + ArrayList actionLatencies = latencies.get(action); + addLatency(op, actionLatencies); + } + + return latencies; + } + + private static void addLatency(Operation op, ArrayList latencies) { + long before = System.nanoTime(); + op.go(); + long after = System.nanoTime(); + latencies.add(after - before); + } + + // Assumption: latencies is sorted in ascending order + private static Long percentile(ArrayList latencies, int percentile) { + return latencies.get((int) Math.ceil((percentile / 100.0) * latencies.size())); + } + + private static double stdDeviation(ArrayList latencies, Double avgLatency) { + double stdDeviation = + latencies.stream() + .mapToDouble(Long::doubleValue) + .reduce(0.0, (stdDev, latency) -> stdDev + Math.pow(latency - avgLatency, 2)); + return Math.sqrt(stdDeviation / latencies.size()); + } + + // This has the side-effect of sorting each latencies ArrayList + public static Map calculateResults( + Map> actionLatencies) { + Map results = new HashMap(); + + for (Map.Entry> entry : actionLatencies.entrySet()) { + ChosenAction action = entry.getKey(); + ArrayList latencies = entry.getValue(); + + Double avgLatency = + latencies.stream().collect(Collectors.summingLong(Long::longValue)) + / Double.valueOf(latencies.size()); + + Collections.sort(latencies); + results.put( + action, + new LatencyResults( + avgLatency, + percentile(latencies, 50), + percentile(latencies, 90), + percentile(latencies, 99), + stdDeviation(latencies, avgLatency))); + } + + return results; + } + + public static void printResults( + Map calculatedResults, Optional resultsFile) + throws IOException { + if (resultsFile.isPresent()) { + printResults(calculatedResults, resultsFile.get()); + } else { + printResults(calculatedResults); + } + } + + public static void printResults( + Map resultsMap, FileWriter resultsFile) throws IOException { + for (Map.Entry entry : resultsMap.entrySet()) { + ChosenAction action = entry.getKey(); + LatencyResults results = entry.getValue(); + + resultsFile.write("Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0); + resultsFile.write(action + " p50 latency in ms: " + results.p50Latency / 1000000.0); + resultsFile.write(action + " p90 latency in ms: " + results.p90Latency / 1000000.0); + resultsFile.write(action + " p99 latency in ms: " + results.p99Latency / 1000000.0); + resultsFile.write(action + " std dev in ms: " + results.stdDeviation / 1000000.0); + } + } + + public static void printResults(Map resultsMap) { + for (Map.Entry entry : resultsMap.entrySet()) { + ChosenAction action = entry.getKey(); + LatencyResults results = entry.getValue(); + + System.out.println("Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0); + System.out.println(action + " p50 latency in ms: " + results.p50Latency / 1000000.0); + System.out.println(action + " p90 latency in ms: " + results.p90Latency / 1000000.0); + System.out.println(action + " p99 latency in ms: " + results.p99Latency / 1000000.0); + System.out.println(action + " std dev in ms: " + results.stdDeviation / 1000000.0); + } + } +} diff --git a/java/benchmarks/src/main/java/javabushka/client/utils/ChosenAction.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/ChosenAction.java similarity index 56% rename from java/benchmarks/src/main/java/javabushka/client/utils/ChosenAction.java rename to java/jabushka/benchmarks/src/main/java/javabushka/client/utils/ChosenAction.java index 48f4367308..0bded99ddc 100644 --- a/java/benchmarks/src/main/java/javabushka/client/utils/ChosenAction.java +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/ChosenAction.java @@ -1,7 +1,7 @@ package javabushka.client.utils; public enum ChosenAction { - GET_NON_EXISTING, - GET_EXISTING, - SET + GET_NON_EXISTING, + GET_EXISTING, + SET } diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java new file mode 100644 index 0000000000..d81deaa7fe --- /dev/null +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java @@ -0,0 +1,19 @@ +package javabushka.client.utils; + +// Raw timing results in nanoseconds +public class LatencyResults { + public final double avgLatency; + public final long p50Latency; + public final long p90Latency; + public final long p99Latency; + public final double stdDeviation; + + public LatencyResults( + double avgLatency, long p50Latency, long p90Latency, long p99Latency, double stdDeviation) { + this.avgLatency = avgLatency; + this.p50Latency = p50Latency; + this.p90Latency = p90Latency; + this.p99Latency = p99Latency; + this.stdDeviation = stdDeviation; + } +} diff --git a/java/jabushka/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java b/java/jabushka/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java new file mode 100644 index 0000000000..09a0e7ef35 --- /dev/null +++ b/java/jabushka/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java @@ -0,0 +1,61 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package javabushka.client.jedis; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.HashMap; +import java.util.Map; +import javabushka.client.utils.Benchmarking; +import javabushka.client.utils.ChosenAction; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +public class JedisClientIT { + + private static JedisClient jedisClient; + + @BeforeAll + static void initializeJedisClient() { + jedisClient = new JedisClient(); + jedisClient.connectToRedis(); + } + + @Test + public void someLibraryMethodReturnsTrue() { + JedisClient classUnderTest = new JedisClient(); + assertTrue(classUnderTest.someLibraryMethod(), "someLibraryMethod should return 'true'"); + } + + @Test + public void testResourceInfo() { + String result = jedisClient.info(); + + assertTrue(result.length() > 0); + } + + @Test + public void testResourceInfoBySection() { + String section = "Server"; + String result = jedisClient.info(section); + + assertTrue(result.length() > 0); + assertTrue(result.startsWith("# " + section)); + } + + @Test + public void testResourceSetGet() { + int iterations = 100000; + String value = "my-value"; + + Map actions = new HashMap<>(); + actions.put(ChosenAction.GET_EXISTING, () -> jedisClient.get(Benchmarking.generateKeySet())); + actions.put( + ChosenAction.GET_NON_EXISTING, () -> jedisClient.get(Benchmarking.generateKeyGet())); + actions.put(ChosenAction.SET, () -> jedisClient.set(Benchmarking.generateKeySet(), value)); + + Benchmarking.printResults( + Benchmarking.calculateResults(Benchmarking.getLatencies(iterations, actions))); + } +} diff --git a/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java b/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java new file mode 100644 index 0000000000..ddc03c77a2 --- /dev/null +++ b/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java @@ -0,0 +1,77 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package javabushka.client.lettuce; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; + +import io.lettuce.core.RedisFuture; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +public class LettuceAsyncClientIT { + + private static LettuceAsyncClient lettuceClient; + + private static LettuceAsyncClient otherLettuceClient; + + @BeforeAll + static void initializeJedisClient() { + lettuceClient = new LettuceAsyncClient(); + lettuceClient.connectToRedis(); + + otherLettuceClient = new LettuceAsyncClient(); + otherLettuceClient.connectToRedis(); + } + + @AfterAll + static void closeConnection() { + lettuceClient.closeConnection(); + otherLettuceClient.closeConnection(); + } + + @Test + public void testResourceSetGet() { + String key = "key1"; + String value = "my-value-1"; + + String otherKey = "key2"; + String otherValue = "my-value-2"; + + RedisFuture setResult = lettuceClient.set(key, value); + RedisFuture otherSetResult = otherLettuceClient.set(otherKey, otherValue); + + // and wait for both clients + try { + lettuceClient.waitForResult(setResult); + } catch (Exception e) { + fail("Can SET redis result without Exception"); + } + try { + otherLettuceClient.waitForResult(otherSetResult); + } catch (Exception e) { + fail("Can SET other redis result without Exception"); + } + + RedisFuture getResult = lettuceClient.get(key); + RedisFuture otherGetResult = otherLettuceClient.get(otherKey); + String result = "invalid"; + String otherResult = "invalid"; + try { + result = (String) lettuceClient.waitForResult(getResult); + } catch (Exception e) { + fail("Can GET redis result without Exception"); + } + + try { + otherResult = (String) otherLettuceClient.waitForResult(otherGetResult); + } catch (Exception e) { + fail("Can GET other redis result without Exception"); + } + + assertEquals(value, result); + assertEquals(otherValue, otherResult); + } +} diff --git a/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java b/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java new file mode 100644 index 0000000000..5180489876 --- /dev/null +++ b/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java @@ -0,0 +1,39 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package javabushka.client.lettuce; + +import java.util.HashMap; +import javabushka.client.utils.Benchmarking; +import javabushka.client.utils.ChosenAction; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +public class LettuceClientIT { + + private static LettuceClient lettuceClient; + + @BeforeAll + static void initializeJedisClient() { + lettuceClient = new LettuceClient(); + lettuceClient.connectToRedis(); + } + + @AfterAll + static void closeConnection() { + lettuceClient.closeConnection(); + } + + @Test + public void testResourceSetGet() { + int iterations = 100000; + String value = "my-value"; + + HashMap actions = new HashMap<>(); + actions.put(ChosenAction.GET_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeySet())); + actions.put( + ChosenAction.GET_NON_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeyGet())); + actions.put(ChosenAction.SET, () -> lettuceClient.set(Benchmarking.generateKeySet(), value)); + } +} diff --git a/java/jabushka/build.gradle b/java/jabushka/build.gradle new file mode 100644 index 0000000000..340f2c98cb --- /dev/null +++ b/java/jabushka/build.gradle @@ -0,0 +1,100 @@ +plugins { + id 'java' + id 'java-library' + id 'io.freefair.lombok' version '6.4.0' + id 'jacoco' + id 'com.diffplug.spotless' version '6.19.0' +} + +repositories { + mavenCentral() +} + +subprojects { + repositories { + mavenCentral() + } + // minimal java compatibility level + plugins.withId('java') { + sourceCompatibility = targetCompatibility = "11" + } + tasks.withType(Test) { + useJUnitPlatform() + + testLogging { + exceptionFormat "full" + events "started", "skipped", "passed", "failed" + showStandardStreams true + } + // TODO: add jacoco with code coverage + // finalizedBy jacocoTestReport, jacocoTestCoverageVerification + } +} + +dependencies { + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter', version: '5.9.2' +} + +// Apply a specific Java toolchain to ease working on different environments. +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +// JaCoCo section (code coverage by unit tests) +jacoco { + toolVersion = "0.8.9" +} +jacocoTestReport { + reports { + xml.configure { enabled false } + csv.configure { enabled false } + } + afterEvaluate { + classDirectories.setFrom(files(classDirectories.files.collect { + fileTree(dir: it) + })) + } +} +jacocoTestCoverageVerification { + violationRules { + rule { + element = 'CLASS' + excludes = [ + ] + limit { + counter = 'LINE' + minimum = 1.0 + } + limit { + counter = 'BRANCH' + minimum = 1.0 + } + } + } + afterEvaluate { + classDirectories.setFrom(files(classDirectories.files.collect { + fileTree(dir: it) + })) + } +} +// TODO: add jacoco with code coverage +// check.dependsOn jacocoTestCoverageVerification +// End of JaCoCo section + +// Spotless section (code style) +spotless { + java { + target fileTree('.') { + include '**/*.java' + exclude '**/build/**', '**/build-*/**', '**/generated/**' + } + importOrder() + removeUnusedImports() + trimTrailingWhitespace() + endWithNewline() + googleJavaFormat('1.17.0').reflowLongStrings().groupArtifact('com.google.googlejavaformat:google-java-format') + } +} +// End of Spotless section diff --git a/java/jabushka/gradle.properties b/java/jabushka/gradle.properties new file mode 100644 index 0000000000..3013c32a31 --- /dev/null +++ b/java/jabushka/gradle.properties @@ -0,0 +1,2 @@ +version=1.13.0 +org.gradle.jvmargs=-Duser.language=en -Duser.country=US diff --git a/java/gradle/wrapper/gradle-wrapper.jar b/java/jabushka/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from java/gradle/wrapper/gradle-wrapper.jar rename to java/jabushka/gradle/wrapper/gradle-wrapper.jar diff --git a/java/gradle/wrapper/gradle-wrapper.properties b/java/jabushka/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from java/gradle/wrapper/gradle-wrapper.properties rename to java/jabushka/gradle/wrapper/gradle-wrapper.properties diff --git a/java/gradlew b/java/jabushka/gradlew similarity index 100% rename from java/gradlew rename to java/jabushka/gradlew diff --git a/java/gradlew.bat b/java/jabushka/gradlew.bat old mode 100644 new mode 100755 similarity index 96% rename from java/gradlew.bat rename to java/jabushka/gradlew.bat index 6689b85bee..93e3f59f13 --- a/java/gradlew.bat +++ b/java/jabushka/gradlew.bat @@ -1,92 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/java/jabushka/integTest/build.gradle b/java/jabushka/integTest/build.gradle new file mode 100644 index 0000000000..e69de29bb2 diff --git a/java/jabushka/jabushka/build.gradle b/java/jabushka/jabushka/build.gradle new file mode 100644 index 0000000000..b60dc6adfc --- /dev/null +++ b/java/jabushka/jabushka/build.gradle @@ -0,0 +1,46 @@ +import java.nio.file.Paths + +plugins { + id 'java-library' +} + +repositories { + mavenCentral() +} + +dependencies { + implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.24.3' +} + +tasks.register('protobuf', Exec) { + doFirst { + project.mkdir(Paths.get(project.projectDir.path, 'src/main/java/org/babushka/jabushka/generated').toString()) + } + commandLine 'protoc', + '-Iprotobuf=babushka-core/src/protobuf/', + '--java_out=java/jabushka/jabushka/src/main/java/org/babushka/jabushka/generated', + 'babushka-core/src/protobuf/connection_request.proto', + 'babushka-core/src/protobuf/redis_request.proto', + 'babushka-core/src/protobuf/response.proto' + workingDir Paths.get(project.rootDir.path, '../..').toFile() +} + +tasks.register('buildRust', Exec) { + commandLine 'cargo', 'build' + workingDir project.rootDir +} + +tasks.register('buildWithRust') { + dependsOn 'buildRust' + finalizedBy 'build' +} + +tasks.register('buildWithProto') { + dependsOn 'protobuf' + finalizedBy 'build' +} + +tasks.register('buildAll') { + dependsOn 'protobuf', 'buildRust' + finalizedBy 'build' +} diff --git a/java/jabushka/settings.gradle b/java/jabushka/settings.gradle new file mode 100644 index 0000000000..f549b8010a --- /dev/null +++ b/java/jabushka/settings.gradle @@ -0,0 +1,5 @@ +rootProject.name = 'babushka' + +include 'jabushka' +include 'integTest' +include 'benchmarks' diff --git a/java/lib/build.gradle b/java/lib/build.gradle deleted file mode 100644 index cc06cd1213..0000000000 --- a/java/lib/build.gradle +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * This generated file contains a sample Java library project to get you started. - * For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.3/userguide/building_java_projects.html in the Gradle documentation. - */ - -plugins { - // Apply the java-library plugin for API and implementation separation. - id 'java-library' -} - -repositories { - // Use Maven Central for resolving dependencies. - mavenCentral() -} - -dependencies { - // Use JUnit test framework. - testImplementation 'junit:junit:4.13.2' - - // This dependency is exported to consumers, that is to say found on their compile classpath. - api 'org.apache.commons:commons-math3:3.6.1' - - // This dependency is used internally, and not exposed to consumers on their own compile classpath. - implementation 'com.google.guava:guava:32.1.1-jre' -} - -// Apply a specific Java toolchain to ease working on different environments. -java { - toolchain { - languageVersion = JavaLanguageVersion.of(17) - } -} diff --git a/java/lib/src/main/java/javabushka/Library.java b/java/lib/src/main/java/javabushka/Library.java deleted file mode 100644 index ff87ce99ce..0000000000 --- a/java/lib/src/main/java/javabushka/Library.java +++ /dev/null @@ -1,10 +0,0 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javabushka; - -public class Library { - public boolean someLibraryMethod() { - return true; - } -} diff --git a/java/lib/src/test/java/javabushka/LibraryTest.java b/java/lib/src/test/java/javabushka/LibraryTest.java deleted file mode 100644 index 0676a72ab8..0000000000 --- a/java/lib/src/test/java/javabushka/LibraryTest.java +++ /dev/null @@ -1,14 +0,0 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javabushka; - -import org.junit.Test; -import static org.junit.Assert.*; - -public class LibraryTest { - @Test public void someLibraryMethodReturnsTrue() { - Library classUnderTest = new Library(); - assertTrue("someLibraryMethod should return 'true'", classUnderTest.someLibraryMethod()); - } -} diff --git a/java/settings.gradle b/java/settings.gradle deleted file mode 100644 index f4ab308fd0..0000000000 --- a/java/settings.gradle +++ /dev/null @@ -1,15 +0,0 @@ -/* - * This file was generated by the Gradle 'init' task. - * - * The settings file is used to specify which projects to include in your build. - * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.3/userguide/building_swift_projects.html in the Gradle documentation. - */ - -plugins { - // Apply the foojay-resolver plugin to allow automatic download of JDKs - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.4.0' -} - -rootProject.name = 'javabushka' -include('lib') -include('benchmarks') diff --git a/java/src/lib.rs b/java/src/lib.rs new file mode 100644 index 0000000000..e69de29bb2 From 436da8f66d3c27b234fcba929e430cfcb95fff4e Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Mon, 25 Sep 2023 13:58:01 -0700 Subject: [PATCH 15/81] Add sync and async clients both to tests. (#12) * Add sync and async clients both to tests. Signed-off-by: Yury-Fridlyand * Minor fixes. Signed-off-by: Yury-Fridlyand --------- Signed-off-by: Yury-Fridlyand --- .../java/javabushka/client/AsyncClient.java | 16 +++ .../javabushka/client/BenchmarkingApp.java | 126 +++++++----------- .../main/java/javabushka/client/Client.java | 13 ++ .../java/javabushka/client/SyncClient.java | 7 + .../javabushka/client/jedis/JedisClient.java | 33 ++++- .../client/jedis/JedisPseudoAsyncClient.java | 39 ++++++ .../client/lettuce/LettuceAsyncClient.java | 61 ++++++--- .../client/lettuce/LettuceClient.java | 34 ++++- .../javabushka/client/utils/Benchmarking.java | 50 ++++++- .../client/utils/ConnectionSettings.java | 13 ++ .../client/lettuce/LettuceAsyncClientIT.java | 8 +- 11 files changed, 284 insertions(+), 116 deletions(-) create mode 100644 java/jabushka/benchmarks/src/main/java/javabushka/client/AsyncClient.java create mode 100644 java/jabushka/benchmarks/src/main/java/javabushka/client/Client.java create mode 100644 java/jabushka/benchmarks/src/main/java/javabushka/client/SyncClient.java create mode 100644 java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisPseudoAsyncClient.java create mode 100644 java/jabushka/benchmarks/src/main/java/javabushka/client/utils/ConnectionSettings.java diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/AsyncClient.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/AsyncClient.java new file mode 100644 index 0000000000..da06e6b234 --- /dev/null +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/AsyncClient.java @@ -0,0 +1,16 @@ +package javabushka.client; + +import java.util.concurrent.Future; + +public interface AsyncClient extends Client { + + long DEFAULT_TIMEOUT = 1000; + + Future asyncSet(String key, String value); + + Future asyncGet(String key); + + T waitForResult(Future future); + + T waitForResult(Future future, long timeout); +} diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java index c0341c8da3..36fc5df715 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java @@ -3,15 +3,14 @@ import java.io.FileWriter; import java.io.IOException; import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import javabushka.client.jedis.JedisClient; +import javabushka.client.jedis.JedisPseudoAsyncClient; import javabushka.client.lettuce.LettuceAsyncClient; +import javabushka.client.lettuce.LettuceClient; import javabushka.client.utils.Benchmarking; -import javabushka.client.utils.ChosenAction; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; @@ -37,26 +36,41 @@ public static void main(String[] args) { System.err.println("Parsing failed. Reason: " + exp.getMessage()); } - try { - switch (runConfiguration.clients) { + for (ClientName client : runConfiguration.clients) { + switch (client) { case ALL: - testJedisClientResourceSetGet(runConfiguration); - testLettuceClientResourceSetGet(runConfiguration); + testClientSetGet(new JedisClient(), runConfiguration); + testClientSetGet(new LettuceClient(), runConfiguration); + testAsyncClientSetGet(new JedisPseudoAsyncClient(), runConfiguration); + testAsyncClientSetGet(new LettuceAsyncClient(), runConfiguration); + System.out.println("Babushka not yet configured"); + break; + case ALL_ASYNC: + testAsyncClientSetGet(new JedisPseudoAsyncClient(), runConfiguration); + testAsyncClientSetGet(new LettuceAsyncClient(), runConfiguration); + System.out.println("Babushka not yet configured"); + break; + case ALL_SYNC: + testClientSetGet(new JedisClient(), runConfiguration); + testClientSetGet(new LettuceClient(), runConfiguration); System.out.println("Babushka not yet configured"); break; case JEDIS: - testJedisClientResourceSetGet(runConfiguration); + testClientSetGet(new JedisClient(), runConfiguration); + break; + case JEDIS_ASYNC: + testAsyncClientSetGet(new JedisPseudoAsyncClient(), runConfiguration); break; case LETTUCE: - testLettuceClientResourceSetGet(runConfiguration); + testClientSetGet(new LettuceClient(), runConfiguration); + break; + case LETTUCE_ASYNC: + testAsyncClientSetGet(new LettuceAsyncClient(), runConfiguration); break; case BABUSHKA: System.out.println("Babushka not yet configured"); break; } - } catch (IOException ioException) { - System.out.println("Error writing to results file"); - ioException.printStackTrace(); } if (runConfiguration.resultsFile.isPresent()) { @@ -123,18 +137,11 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce } if (line.hasOption("clients")) { - String clients = line.getOptionValue("clients"); - if (ClientName.ALL.isEqual(clients)) { - runConfiguration.clients = ClientName.ALL; - } else if (ClientName.JEDIS.isEqual(clients)) { - runConfiguration.clients = ClientName.JEDIS; - } else if (ClientName.LETTUCE.isEqual(clients)) { - runConfiguration.clients = ClientName.LETTUCE; - } else if (ClientName.BABUSHKA.isEqual(clients)) { - runConfiguration.clients = ClientName.BABUSHKA; - } else { - throw new ParseException("Invalid clients option: all|jedis|lettuce|babushka"); - } + String[] clients = line.getOptionValue("clients").split(","); + runConfiguration.clients = + Arrays.stream(clients) + .map(c -> Enum.valueOf(ClientName.class, c.toUpperCase())) + .toArray(ClientName[]::new); } if (line.hasOption("host")) { @@ -152,66 +159,27 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce return runConfiguration; } - private static void testJedisClientResourceSetGet(RunConfiguration runConfiguration) - throws IOException { - JedisClient jedisClient = new JedisClient(); - jedisClient.connectToRedis(runConfiguration.host, runConfiguration.port); - - int iterations = 100000; - String value = "my-value"; - - if (runConfiguration.resultsFile.isPresent()) { - runConfiguration.resultsFile.get().write("JEDIS client Benchmarking: "); - } else { - System.out.println("JEDIS client Benchmarking: "); - } - - Map actions = new HashMap<>(); - actions.put(ChosenAction.GET_EXISTING, () -> jedisClient.get(Benchmarking.generateKeySet())); - actions.put( - ChosenAction.GET_NON_EXISTING, () -> jedisClient.get(Benchmarking.generateKeyGet())); - actions.put(ChosenAction.SET, () -> jedisClient.set(Benchmarking.generateKeySet(), value)); - - Benchmarking.printResults( - Benchmarking.calculateResults(Benchmarking.getLatencies(iterations, actions)), - runConfiguration.resultsFile); + private static void testClientSetGet(Client client, RunConfiguration runConfiguration) { + System.out.printf("%n =====> %s <===== %n%n", client.getName()); + Benchmarking.printResults(Benchmarking.measurePerformance(client, runConfiguration, false)); + System.out.println(); } - private static LettuceAsyncClient initializeLettuceClient() { - LettuceAsyncClient lettuceClient = new LettuceAsyncClient(); - lettuceClient.connectToRedis(); - return lettuceClient; - } - - private static void testLettuceClientResourceSetGet(RunConfiguration runConfiguration) - throws IOException { - LettuceAsyncClient lettuceClient = initializeLettuceClient(); - - int iterations = 100000; - String value = "my-value"; - - if (runConfiguration.resultsFile.isPresent()) { - runConfiguration.resultsFile.get().write("LETTUCE client Benchmarking: "); - } else { - System.out.println("LETTUCE client Benchmarking: "); - } - - HashMap actions = new HashMap<>(); - actions.put(ChosenAction.GET_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeySet())); - actions.put( - ChosenAction.GET_NON_EXISTING, () -> lettuceClient.get(Benchmarking.generateKeyGet())); - actions.put(ChosenAction.SET, () -> lettuceClient.set(Benchmarking.generateKeySet(), value)); - - Benchmarking.printResults( - Benchmarking.calculateResults(Benchmarking.getLatencies(iterations, actions)), - runConfiguration.resultsFile); + private static void testAsyncClientSetGet(AsyncClient client, RunConfiguration runConfiguration) { + System.out.printf("%n =====> %s <===== %n%n", client.getName()); + Benchmarking.printResults(Benchmarking.measurePerformance(client, runConfiguration, true)); + System.out.println(); } public enum ClientName { JEDIS("Jedis"), + JEDIS_ASYNC("Jedis async"), LETTUCE("Lettuce"), + LETTUCE_ASYNC("Lettuce async"), BABUSHKA("Babushka"), - ALL("All"); + ALL("All"), + ALL_SYNC("All sync"), + ALL_ASYNC("All async"); private String name; @@ -233,7 +201,7 @@ public static class RunConfiguration { public String configuration; public Optional resultsFile; public List concurrentTasks; - public ClientName clients; + public ClientName[] clients; public String host; public int port; public int clientCount; @@ -243,11 +211,11 @@ public RunConfiguration() { configuration = "Release"; resultsFile = Optional.empty(); concurrentTasks = List.of(1, 10, 100); - clients = ClientName.ALL; + clients = new ClientName[] {ClientName.ALL}; host = "localhost"; port = 6379; clientCount = 1; - tls = true; + tls = false; } } } diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/Client.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/Client.java new file mode 100644 index 0000000000..91b97b56cd --- /dev/null +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/Client.java @@ -0,0 +1,13 @@ +package javabushka.client; + +import javabushka.client.utils.ConnectionSettings; + +public interface Client { + void connectToRedis(); + + void connectToRedis(ConnectionSettings connectionSettings); + + default void closeConnection() {} + + String getName(); +} diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/SyncClient.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/SyncClient.java new file mode 100644 index 0000000000..f14bdce5e1 --- /dev/null +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/SyncClient.java @@ -0,0 +1,7 @@ +package javabushka.client; + +public interface SyncClient extends Client { + void set(String key, String value); + + String get(String key); +} diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java index b3f9e3ee69..30ba659b87 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java @@ -3,27 +3,46 @@ */ package javabushka.client.jedis; +import javabushka.client.SyncClient; +import javabushka.client.utils.ConnectionSettings; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; -public class JedisClient { +public class JedisClient implements SyncClient { public static final String DEFAULT_HOST = "localhost"; public static final int DEFAULT_PORT = 6379; - Jedis jedisResource; + protected Jedis jedisResource; public boolean someLibraryMethod() { return true; } - public void connectToRedis(String host, int port) { - JedisPool pool = new JedisPool(host, port); + @Override + public void connectToRedis() { + JedisPool pool = new JedisPool(DEFAULT_HOST, DEFAULT_PORT); jedisResource = pool.getResource(); } - public void connectToRedis() { - connectToRedis(DEFAULT_HOST, DEFAULT_PORT); + @Override + public void closeConnection() { + try { + jedisResource.close(); + } catch (Exception ignored) { + } + } + + @Override + public String getName() { + return "Jedis"; + } + + @Override + public void connectToRedis(ConnectionSettings connectionSettings) { + jedisResource = + new Jedis(connectionSettings.host, connectionSettings.port, connectionSettings.useSsl); + jedisResource.connect(); } public String info() { @@ -34,10 +53,12 @@ public String info(String section) { return jedisResource.info(section); } + @Override public void set(String key, String value) { jedisResource.set(key, value); } + @Override public String get(String key) { return jedisResource.get(key); } diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisPseudoAsyncClient.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisPseudoAsyncClient.java new file mode 100644 index 0000000000..2f6bcd7611 --- /dev/null +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisPseudoAsyncClient.java @@ -0,0 +1,39 @@ +package javabushka.client.jedis; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import javabushka.client.AsyncClient; + +// Jedis doesn't provide async API +// https://github.com/redis/jedis/issues/241 +public class JedisPseudoAsyncClient extends JedisClient implements AsyncClient { + @Override + public Future asyncSet(String key, String value) { + return CompletableFuture.runAsync(() -> super.set(key, value)); + } + + @Override + public Future asyncGet(String key) { + return CompletableFuture.supplyAsync(() -> super.get(key)); + } + + @Override + public T waitForResult(Future future) { + return waitForResult(future, DEFAULT_TIMEOUT); + } + + @Override + public T waitForResult(Future future, long timeout) { + try { + return future.get(timeout, TimeUnit.MILLISECONDS); + } catch (Exception ignored) { + return null; + } + } + + @Override + public String getName() { + return "Jedis pseudo-async"; + } +} diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java index 6c0c8f5083..f93ae104d1 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java @@ -7,46 +7,67 @@ import io.lettuce.core.RedisFuture; import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.async.RedisAsyncCommands; -import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; +import javabushka.client.AsyncClient; +import javabushka.client.utils.ConnectionSettings; -public class LettuceAsyncClient { +public class LettuceAsyncClient implements AsyncClient { RedisClient client; - RedisAsyncCommands lettuceSync; + RedisAsyncCommands asyncCommands; StatefulRedisConnection connection; - public final long MAX_TIMEOUT_MS = 1000; - + @Override public void connectToRedis() { - client = RedisClient.create("redis://localhost:6379"); + connectToRedis(new ConnectionSettings("localhost", 6379, false)); + } + + @Override + public void connectToRedis(ConnectionSettings connectionSettings) { + client = + RedisClient.create( + String.format( + "%s://%s:%d", + connectionSettings.useSsl ? "rediss" : "redis", + connectionSettings.host, + connectionSettings.port)); connection = client.connect(); - lettuceSync = connection.async(); + asyncCommands = connection.async(); } - public RedisFuture set(String key, String value) { - RedisFuture future = lettuceSync.set(key, value); - return future; + @Override + public RedisFuture asyncSet(String key, String value) { + return asyncCommands.set(key, value); } - public RedisFuture get(String key) { - RedisFuture future = lettuceSync.get(key); - return future; + @Override + public RedisFuture asyncGet(String key) { + return asyncCommands.get(key); } - public Object waitForResult(RedisFuture future) - throws ExecutionException, InterruptedException, TimeoutException { - return this.waitForResult(future, MAX_TIMEOUT_MS); + @Override + public Object waitForResult(Future future) { + return waitForResult(future, DEFAULT_TIMEOUT); } - public Object waitForResult(RedisFuture future, long timeoutMS) - throws ExecutionException, InterruptedException, TimeoutException { - return future.get(timeoutMS, TimeUnit.MILLISECONDS); + @Override + public Object waitForResult(Future future, long timeoutMS) { + try { + return future.get(timeoutMS, TimeUnit.MILLISECONDS); + } catch (Exception ignored) { + return null; + } } + @Override public void closeConnection() { connection.close(); client.shutdown(); } + + @Override + public String getName() { + return "Lettuce Async"; + } } diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java index c0dc6a38f0..6fa237666d 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java @@ -6,29 +6,51 @@ import io.lettuce.core.RedisClient; import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.sync.RedisStringCommands; +import javabushka.client.SyncClient; +import javabushka.client.utils.ConnectionSettings; -public class LettuceClient { +public class LettuceClient implements SyncClient { RedisClient client; - RedisStringCommands lettuceSync; + RedisStringCommands syncCommands; StatefulRedisConnection connection; + @Override public void connectToRedis() { - client = RedisClient.create("redis://localhost:6379"); + connectToRedis(new ConnectionSettings("localhost", 6379, false)); + } + + @Override + public void connectToRedis(ConnectionSettings connectionSettings) { + client = + RedisClient.create( + String.format( + "%s://%s:%d", + connectionSettings.useSsl ? "rediss" : "redis", + connectionSettings.host, + connectionSettings.port)); connection = client.connect(); - lettuceSync = connection.sync(); + syncCommands = connection.sync(); } + @Override public void set(String key, String value) { - lettuceSync.set(key, value); + syncCommands.set(key, value); } + @Override public String get(String key) { - return (String) lettuceSync.get(key); + return (String) syncCommands.get(key); } + @Override public void closeConnection() { connection.close(); client.shutdown(); } + + @Override + public String getName() { + return "Lettuce"; + } } diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java index 182b062c99..9f8744720e 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java @@ -8,6 +8,10 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; +import javabushka.client.AsyncClient; +import javabushka.client.BenchmarkingApp; +import javabushka.client.Client; +import javabushka.client.SyncClient; public class Benchmarking { static final double PROB_GET = 0.8; @@ -64,7 +68,13 @@ private static void addLatency(Operation op, ArrayList latencies) { // Assumption: latencies is sorted in ascending order private static Long percentile(ArrayList latencies, int percentile) { - return latencies.get((int) Math.ceil((percentile / 100.0) * latencies.size())); + int N = latencies.size(); + double n = (N - 1) * percentile / 100. + 1; + if (n == 1d) return latencies.get(0); + else if (n == N) return latencies.get(N - 1); + int k = (int) n; + double d = n - k; + return Math.round(latencies.get(k - 1) + d * (latencies.get(k) - latencies.get(k - 1))); } private static double stdDeviation(ArrayList latencies, Double avgLatency) { @@ -138,4 +148,42 @@ public static void printResults(Map resultsMap) { System.out.println(action + " std dev in ms: " + results.stdDeviation / 1000000.0); } } + + public static Map measurePerformance( + Client client, BenchmarkingApp.RunConfiguration config, boolean async) { + client.connectToRedis(new ConnectionSettings(config.host, config.port, config.tls)); + + int iterations = 10000; + String value = "my-value"; + + if (config.resultsFile.isPresent()) { + try { + config.resultsFile.get().write(client.getName() + " client Benchmarking: "); + } catch (Exception ignored) { + } + } else { + System.out.printf("%s client Benchmarking: %n", client.getName()); + } + + Map actions = new HashMap<>(); + actions.put( + ChosenAction.GET_EXISTING, + async + ? () -> ((AsyncClient) client).asyncGet(Benchmarking.generateKeySet()) + : () -> ((SyncClient) client).get(Benchmarking.generateKeySet())); + actions.put( + ChosenAction.GET_NON_EXISTING, + async + ? () -> ((AsyncClient) client).asyncGet(Benchmarking.generateKeyGet()) + : () -> ((SyncClient) client).get(Benchmarking.generateKeyGet())); + actions.put( + ChosenAction.SET, + async + ? () -> ((AsyncClient) client).asyncSet(Benchmarking.generateKeySet(), value) + : () -> ((SyncClient) client).set(Benchmarking.generateKeySet(), value)); + + var results = Benchmarking.calculateResults(Benchmarking.getLatencies(iterations, actions)); + client.closeConnection(); + return results; + } } diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/ConnectionSettings.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/ConnectionSettings.java new file mode 100644 index 0000000000..725f604ce7 --- /dev/null +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/ConnectionSettings.java @@ -0,0 +1,13 @@ +package javabushka.client.utils; + +public class ConnectionSettings { + public String host; + public int port; + public boolean useSsl; + + public ConnectionSettings(String host, int port, boolean useSsl) { + this.host = host; + this.port = port; + this.useSsl = useSsl; + } +} diff --git a/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java b/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java index ddc03c77a2..336f1f92ec 100644 --- a/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java +++ b/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java @@ -40,8 +40,8 @@ public void testResourceSetGet() { String otherKey = "key2"; String otherValue = "my-value-2"; - RedisFuture setResult = lettuceClient.set(key, value); - RedisFuture otherSetResult = otherLettuceClient.set(otherKey, otherValue); + RedisFuture setResult = lettuceClient.asyncSet(key, value); + RedisFuture otherSetResult = otherLettuceClient.asyncSet(otherKey, otherValue); // and wait for both clients try { @@ -55,8 +55,8 @@ public void testResourceSetGet() { fail("Can SET other redis result without Exception"); } - RedisFuture getResult = lettuceClient.get(key); - RedisFuture otherGetResult = otherLettuceClient.get(otherKey); + RedisFuture getResult = lettuceClient.asyncGet(key); + RedisFuture otherGetResult = otherLettuceClient.asyncGet(otherKey); String result = "invalid"; String otherResult = "invalid"; try { From 016f5f6d87aaf730f3fb971f772d758d08220519 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Mon, 25 Sep 2023 15:10:47 -0700 Subject: [PATCH 16/81] Move duplicated logic in benchmark JS scripts to a single file, and convert to TypeScript. (#456) removed duplicated logic and refactored to typescript Signed-off-by: acarbonetto --- benchmarks/install_and_test.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/benchmarks/install_and_test.sh b/benchmarks/install_and_test.sh index 9f23492520..60b4c218ad 100755 --- a/benchmarks/install_and_test.sh +++ b/benchmarks/install_and_test.sh @@ -282,6 +282,8 @@ do fi done + + flushDB if [ $writeResultsCSV == 1 ]; From e57c1ffb6efa9a3f8361f53c337561bd417cce1b Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Mon, 25 Sep 2023 17:25:41 -0700 Subject: [PATCH 17/81] Add dataSize option to java benchmark. (#11) * Add Jedis and Lettuce benchmarks * Start ignoring .gradle files * Update gitignore and remove generated files from git Signed-off-by: acarbonetto * Update gitignore and remove generated files from git Signed-off-by: acarbonetto * Update gitignore and remove generated files from git Signed-off-by: acarbonetto * Add benchmarks for GET non-existing * Revert "Update gitignore and remove generated files from git" This reverts commit d9b26a6664c6bd4426e7fa417d43e70e124338fa. * fix redis-rs submodules Signed-off-by: acarbonetto * Randomize commands in Java benchmarks * rename chooseAction to randomAction * Add a Java benchmarking app (#7) * Add a java app to run benchmarks --------- Signed-off-by: acarbonetto * Add Readme and update install_and_test script to runJava Signed-off-by: acarbonetto * Add Readme and update install_and_test script to runJava Signed-off-by: acarbonetto * Combine java pipeline and java benchmarks (#8) * Merge Pull Request #5 - Add java pipeline. Also changed: * Merged two projects. * Updated CI. * Fixed tests and updated `junit` version. * Spotless. * Add new gradle tasks. Signed-off-by: Yury-Fridlyand * Add sync and async clients both to tests. (#12) * Add sync and async clients both to tests. Signed-off-by: Yury-Fridlyand * Minor fixes. Signed-off-by: Yury-Fridlyand --------- Signed-off-by: Yury-Fridlyand * Add dataSize option to java benchmark. Signed-off-by: Yury-Fridlyand --------- Signed-off-by: acarbonetto Signed-off-by: Yury-Fridlyand Co-authored-by: Jonathan Louie Co-authored-by: acarbonetto Co-authored-by: jonathanl-bq <72158117+jonathanl-bq@users.noreply.github.com> --- benchmarks/install_and_test.sh | 25 +++++++++++++++++-- java/jabushka/benchmarks/build.gradle | 1 + .../javabushka/client/BenchmarkingApp.java | 7 ++++++ .../javabushka/client/utils/Benchmarking.java | 3 ++- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/benchmarks/install_and_test.sh b/benchmarks/install_and_test.sh index 60b4c218ad..86953ad5fb 100755 --- a/benchmarks/install_and_test.sh +++ b/benchmarks/install_and_test.sh @@ -78,6 +78,14 @@ function runJavaBenchmark(){ cd ${BENCH_FOLDER}/java } +function runJavaBenchmark(){ + cd ${BENCH_FOLDER}/../java + echo "./gradlew run --args=\"--resultsFile=${BENCH_FOLDER}/$1 --clients $chosenClients --host $host --port $port\"" +# ./gradlew run --args="--resultsFile=../$1 --dataSize $2 --concurrentTasks $concurrentTasks --clients $chosenClients --host $host --port $port --clientCount $clientCount $tlsFlag" + ./gradlew run --args="--resultsFile=${BENCH_FOLDER}/$1 --clients $chosenClients --host $host --port $port" + cd ${BENCH_FOLDER}/java +} + function runRustBenchmark(){ rustConcurrentTasks= for value in $concurrentTasks @@ -210,6 +218,21 @@ do runJava=1 chosenClients="Jedis" ;; + -java) + runAllBenchmarks=0 + runJava=1 + chosenClients="Babushka" + ;; + -lettuce) + runAllBenchmarks=0 + runJava=1 + chosenClients="Lettuce" + ;; + -lettuce) + runAllBenchmarks=0 + runJava=1 + chosenClients="Jedis" + ;; -csharp) runAllBenchmarks=0 runCsharp=1 @@ -282,8 +305,6 @@ do fi done - - flushDB if [ $writeResultsCSV == 1 ]; diff --git a/java/jabushka/benchmarks/build.gradle b/java/jabushka/benchmarks/build.gradle index 5e21fe3ea6..b6c89b2695 100644 --- a/java/jabushka/benchmarks/build.gradle +++ b/java/jabushka/benchmarks/build.gradle @@ -17,6 +17,7 @@ dependencies { implementation 'redis.clients:jedis:4.4.3' implementation 'io.lettuce:lettuce-core:6.2.6.RELEASE' implementation 'commons-cli:commons-cli:1.5.0' + implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.13.0' } // Apply a specific Java toolchain to ease working on different environments. diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java index 36fc5df715..6f8f23f1f9 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java @@ -88,6 +88,7 @@ private static Options getOptions() { options.addOption("c", "configuration", true, "Configuration flag [Release]"); options.addOption("f", "resultsFile", true, "Result filepath []"); + options.addOption("d", "dataSize", true, "Data block size [20]"); options.addOption("C", "concurrentTasks", true, "Number of concurrent tasks [1 10 100]"); options.addOption("l", "clients", true, "one of: all|jedis|lettuce|babushka [all]"); options.addOption("h", "host", true, "host url [localhost]"); @@ -118,6 +119,10 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce } } + if (line.hasOption("dataSize")) { + runConfiguration.dataSize = Integer.parseInt(line.getOptionValue("dataSize")); + } + if (line.hasOption("concurrentTasks")) { String concurrentTasks = line.getOptionValue("concurrentTasks"); @@ -200,6 +205,7 @@ public boolean isEqual(String other) { public static class RunConfiguration { public String configuration; public Optional resultsFile; + public int dataSize; public List concurrentTasks; public ClientName[] clients; public String host; @@ -210,6 +216,7 @@ public static class RunConfiguration { public RunConfiguration() { configuration = "Release"; resultsFile = Optional.empty(); + dataSize = 20; concurrentTasks = List.of(1, 10, 100); clients = new ClientName[] {ClientName.ALL}; host = "localhost"; diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java b/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java index 9f8744720e..9555bba2cc 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java +++ b/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java @@ -12,6 +12,7 @@ import javabushka.client.BenchmarkingApp; import javabushka.client.Client; import javabushka.client.SyncClient; +import org.apache.commons.lang3.RandomStringUtils; public class Benchmarking { static final double PROB_GET = 0.8; @@ -154,7 +155,7 @@ public static Map measurePerformance( client.connectToRedis(new ConnectionSettings(config.host, config.port, config.tls)); int iterations = 10000; - String value = "my-value"; + String value = RandomStringUtils.randomAlphanumeric(config.dataSize); if (config.resultsFile.isPresent()) { try { From 8664d05c2a0cc8188a576a35762aa63345a68875 Mon Sep 17 00:00:00 2001 From: Andrew Carbonetto Date: Tue, 26 Sep 2023 15:27:11 -0700 Subject: [PATCH 18/81] Rename jabushka to javababushka (#14) Signed-off-by: acarbonetto --- java/Cargo.toml | 4 ++-- java/{jabushka => }/benchmarks/build.gradle | 2 +- .../java/javababushka/benchmarks}/AsyncClient.java | 2 +- .../javababushka/benchmarks}/BenchmarkingApp.java | 12 ++++++------ .../main/java/javababushka/benchmarks}/Client.java | 4 ++-- .../java/javababushka/benchmarks}/SyncClient.java | 2 +- .../javababushka/benchmarks}/jedis/JedisClient.java | 6 +++--- .../benchmarks}/jedis/JedisPseudoAsyncClient.java | 4 ++-- .../benchmarks}/lettuce/LettuceAsyncClient.java | 6 +++--- .../benchmarks}/lettuce/LettuceClient.java | 6 +++--- .../benchmarks}/utils/Benchmarking.java | 10 +++++----- .../benchmarks}/utils/ChosenAction.java | 2 +- .../benchmarks}/utils/ConnectionSettings.java | 2 +- .../benchmarks}/utils/LatencyResults.java | 2 +- .../benchmarks}/jedis/JedisClientIT.java | 6 +++--- .../benchmarks}/lettuce/LettuceAsyncClientIT.java | 2 +- .../benchmarks}/lettuce/LettuceClientIT.java | 6 +++--- java/{jabushka => }/build.gradle | 0 java/{jabushka/jabushka => client}/build.gradle | 0 java/{jabushka => }/gradle.properties | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 java/{jabushka => }/gradlew | 0 java/{jabushka => }/gradlew.bat | 0 java/{jabushka => }/integTest/build.gradle | 0 java/jabushka/settings.gradle | 5 ----- java/settings.gradle | 5 +++++ 27 files changed, 44 insertions(+), 44 deletions(-) rename java/{jabushka => }/benchmarks/build.gradle (95%) rename java/{jabushka/benchmarks/src/main/java/javabushka/client => benchmarks/src/main/java/javababushka/benchmarks}/AsyncClient.java (90%) rename java/{jabushka/benchmarks/src/main/java/javabushka/client => benchmarks/src/main/java/javababushka/benchmarks}/BenchmarkingApp.java (96%) rename java/{jabushka/benchmarks/src/main/java/javabushka/client => benchmarks/src/main/java/javababushka/benchmarks}/Client.java (66%) rename java/{jabushka/benchmarks/src/main/java/javabushka/client => benchmarks/src/main/java/javababushka/benchmarks}/SyncClient.java (77%) rename java/{jabushka/benchmarks/src/main/java/javabushka/client => benchmarks/src/main/java/javababushka/benchmarks}/jedis/JedisClient.java (90%) rename java/{jabushka/benchmarks/src/main/java/javabushka/client => benchmarks/src/main/java/javababushka/benchmarks}/jedis/JedisPseudoAsyncClient.java (92%) rename java/{jabushka/benchmarks/src/main/java/javabushka/client => benchmarks/src/main/java/javababushka/benchmarks}/lettuce/LettuceAsyncClient.java (92%) rename java/{jabushka/benchmarks/src/main/java/javabushka/client => benchmarks/src/main/java/javababushka/benchmarks}/lettuce/LettuceClient.java (89%) rename java/{jabushka/benchmarks/src/main/java/javabushka/client => benchmarks/src/main/java/javababushka/benchmarks}/utils/Benchmarking.java (97%) rename java/{jabushka/benchmarks/src/main/java/javabushka/client => benchmarks/src/main/java/javababushka/benchmarks}/utils/ChosenAction.java (64%) rename java/{jabushka/benchmarks/src/main/java/javabushka/client => benchmarks/src/main/java/javababushka/benchmarks}/utils/ConnectionSettings.java (86%) rename java/{jabushka/benchmarks/src/main/java/javabushka/client => benchmarks/src/main/java/javababushka/benchmarks}/utils/LatencyResults.java (93%) rename java/{jabushka/benchmarks/src/test/java/javabushka/client => benchmarks/src/test/java/javababushka/benchmarks}/jedis/JedisClientIT.java (92%) rename java/{jabushka/benchmarks/src/test/java/javabushka/client => benchmarks/src/test/java/javababushka/benchmarks}/lettuce/LettuceAsyncClientIT.java (98%) rename java/{jabushka/benchmarks/src/test/java/javabushka/client => benchmarks/src/test/java/javababushka/benchmarks}/lettuce/LettuceClientIT.java (87%) rename java/{jabushka => }/build.gradle (100%) rename java/{jabushka/jabushka => client}/build.gradle (100%) rename java/{jabushka => }/gradle.properties (100%) rename java/{jabushka => }/gradle/wrapper/gradle-wrapper.jar (100%) rename java/{jabushka => }/gradle/wrapper/gradle-wrapper.properties (100%) rename java/{jabushka => }/gradlew (100%) rename java/{jabushka => }/gradlew.bat (100%) rename java/{jabushka => }/integTest/build.gradle (100%) delete mode 100644 java/jabushka/settings.gradle create mode 100644 java/settings.gradle diff --git a/java/Cargo.toml b/java/Cargo.toml index ccde88c26d..01ecb23e4c 100644 --- a/java/Cargo.toml +++ b/java/Cargo.toml @@ -1,12 +1,12 @@ [package] -name = "jabushka" +name = "javababushka" version = "0.0.0" edition = "2021" license = "BSD-3-Clause" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [lib] -name = "jabushka" +name = "javababushka" crate-type = ["cdylib"] [dependencies] diff --git a/java/jabushka/benchmarks/build.gradle b/java/benchmarks/build.gradle similarity index 95% rename from java/jabushka/benchmarks/build.gradle rename to java/benchmarks/build.gradle index b6c89b2695..8d9e500284 100644 --- a/java/jabushka/benchmarks/build.gradle +++ b/java/benchmarks/build.gradle @@ -29,7 +29,7 @@ java { application { // Define the main class for the application. - mainClass = 'javabushka.client.BenchmarkingApp' + mainClass = 'javababushka.benchmarks.BenchmarkingApp' } tasks.withType(Test) { diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/AsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/AsyncClient.java similarity index 90% rename from java/jabushka/benchmarks/src/main/java/javabushka/client/AsyncClient.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/AsyncClient.java index da06e6b234..a688775084 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/AsyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/AsyncClient.java @@ -1,4 +1,4 @@ -package javabushka.client; +package javababushka.benchmarks; import java.util.concurrent.Future; diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java similarity index 96% rename from java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 6f8f23f1f9..ad19929d06 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -1,4 +1,4 @@ -package javabushka.client; +package javababushka.benchmarks; import java.io.FileWriter; import java.io.IOException; @@ -6,11 +6,11 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; -import javabushka.client.jedis.JedisClient; -import javabushka.client.jedis.JedisPseudoAsyncClient; -import javabushka.client.lettuce.LettuceAsyncClient; -import javabushka.client.lettuce.LettuceClient; -import javabushka.client.utils.Benchmarking; +import javababushka.benchmarks.jedis.JedisClient; +import javababushka.benchmarks.lettuce.LettuceAsyncClient; +import javababushka.benchmarks.lettuce.LettuceClient; +import javababushka.benchmarks.utils.Benchmarking; +import javababushka.benchmarks.jedis.JedisPseudoAsyncClient; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/Client.java b/java/benchmarks/src/main/java/javababushka/benchmarks/Client.java similarity index 66% rename from java/jabushka/benchmarks/src/main/java/javabushka/client/Client.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/Client.java index 91b97b56cd..16ab36847d 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/Client.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/Client.java @@ -1,6 +1,6 @@ -package javabushka.client; +package javababushka.benchmarks; -import javabushka.client.utils.ConnectionSettings; +import javababushka.benchmarks.utils.ConnectionSettings; public interface Client { void connectToRedis(); diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/SyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/SyncClient.java similarity index 77% rename from java/jabushka/benchmarks/src/main/java/javabushka/client/SyncClient.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/SyncClient.java index f14bdce5e1..c99174af3d 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/SyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/SyncClient.java @@ -1,4 +1,4 @@ -package javabushka.client; +package javababushka.benchmarks; public interface SyncClient extends Client { void set(String key, String value); diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisClient.java similarity index 90% rename from java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisClient.java index 30ba659b87..214a6cae10 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisClient.java @@ -1,10 +1,10 @@ /* * This Java source file was generated by the Gradle 'init' task. */ -package javabushka.client.jedis; +package javababushka.benchmarks.jedis; -import javabushka.client.SyncClient; -import javabushka.client.utils.ConnectionSettings; +import javababushka.benchmarks.SyncClient; +import javababushka.benchmarks.utils.ConnectionSettings; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisPseudoAsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisPseudoAsyncClient.java similarity index 92% rename from java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisPseudoAsyncClient.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisPseudoAsyncClient.java index 2f6bcd7611..598c455d1e 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/jedis/JedisPseudoAsyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisPseudoAsyncClient.java @@ -1,9 +1,9 @@ -package javabushka.client.jedis; +package javababushka.benchmarks.jedis; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import javabushka.client.AsyncClient; +import javababushka.benchmarks.AsyncClient; // Jedis doesn't provide async API // https://github.com/redis/jedis/issues/241 diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceAsyncClient.java similarity index 92% rename from java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceAsyncClient.java index f93ae104d1..1b8c4ba9b7 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceAsyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceAsyncClient.java @@ -1,7 +1,7 @@ /* * This Java source file was generated by the Gradle 'init' task. */ -package javabushka.client.lettuce; +package javababushka.benchmarks.lettuce; import io.lettuce.core.RedisClient; import io.lettuce.core.RedisFuture; @@ -9,8 +9,8 @@ import io.lettuce.core.api.async.RedisAsyncCommands; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import javabushka.client.AsyncClient; -import javabushka.client.utils.ConnectionSettings; +import javababushka.benchmarks.AsyncClient; +import javababushka.benchmarks.utils.ConnectionSettings; public class LettuceAsyncClient implements AsyncClient { diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceClient.java similarity index 89% rename from java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceClient.java index 6fa237666d..e4e1830bda 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/lettuce/LettuceClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceClient.java @@ -1,13 +1,13 @@ /* * This Java source file was generated by the Gradle 'init' task. */ -package javabushka.client.lettuce; +package javababushka.benchmarks.lettuce; import io.lettuce.core.RedisClient; import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.sync.RedisStringCommands; -import javabushka.client.SyncClient; -import javabushka.client.utils.ConnectionSettings; +import javababushka.benchmarks.SyncClient; +import javababushka.benchmarks.utils.ConnectionSettings; public class LettuceClient implements SyncClient { diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java similarity index 97% rename from java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 9555bba2cc..6a2ec95755 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -1,4 +1,4 @@ -package javabushka.client.utils; +package javababushka.benchmarks.utils; import java.io.FileWriter; import java.io.IOException; @@ -8,10 +8,10 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; -import javabushka.client.AsyncClient; -import javabushka.client.BenchmarkingApp; -import javabushka.client.Client; -import javabushka.client.SyncClient; +import javababushka.benchmarks.AsyncClient; +import javababushka.benchmarks.BenchmarkingApp; +import javababushka.benchmarks.Client; +import javababushka.benchmarks.SyncClient; import org.apache.commons.lang3.RandomStringUtils; public class Benchmarking { diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/ChosenAction.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java similarity index 64% rename from java/jabushka/benchmarks/src/main/java/javabushka/client/utils/ChosenAction.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java index 0bded99ddc..bd9f01fd90 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/ChosenAction.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java @@ -1,4 +1,4 @@ -package javabushka.client.utils; +package javababushka.benchmarks.utils; public enum ChosenAction { GET_NON_EXISTING, diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/ConnectionSettings.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java similarity index 86% rename from java/jabushka/benchmarks/src/main/java/javabushka/client/utils/ConnectionSettings.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java index 725f604ce7..2989d8b3b3 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/ConnectionSettings.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java @@ -1,4 +1,4 @@ -package javabushka.client.utils; +package javababushka.benchmarks.utils; public class ConnectionSettings { public String host; diff --git a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java similarity index 93% rename from java/jabushka/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java index d81deaa7fe..8e2baa3a2b 100644 --- a/java/jabushka/benchmarks/src/main/java/javabushka/client/utils/LatencyResults.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java @@ -1,4 +1,4 @@ -package javabushka.client.utils; +package javababushka.benchmarks.utils; // Raw timing results in nanoseconds public class LatencyResults { diff --git a/java/jabushka/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java b/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java similarity index 92% rename from java/jabushka/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java rename to java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java index 09a0e7ef35..ec40c00bb0 100644 --- a/java/jabushka/benchmarks/src/test/java/javabushka/client/jedis/JedisClientIT.java +++ b/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java @@ -1,14 +1,14 @@ /* * This Java source file was generated by the Gradle 'init' task. */ -package javabushka.client.jedis; +package javababushka.benchmarks.jedis; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.HashMap; import java.util.Map; -import javabushka.client.utils.Benchmarking; -import javabushka.client.utils.ChosenAction; +import javababushka.benchmarks.utils.Benchmarking; +import javababushka.benchmarks.utils.ChosenAction; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java b/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceAsyncClientIT.java similarity index 98% rename from java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java rename to java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceAsyncClientIT.java index 336f1f92ec..c051c1b2a4 100644 --- a/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceAsyncClientIT.java +++ b/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceAsyncClientIT.java @@ -1,7 +1,7 @@ /* * This Java source file was generated by the Gradle 'init' task. */ -package javabushka.client.lettuce; +package javababushka.benchmarks.lettuce; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; diff --git a/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java b/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceClientIT.java similarity index 87% rename from java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java rename to java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceClientIT.java index 5180489876..445cc5b584 100644 --- a/java/jabushka/benchmarks/src/test/java/javabushka/client/lettuce/LettuceClientIT.java +++ b/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceClientIT.java @@ -1,11 +1,11 @@ /* * This Java source file was generated by the Gradle 'init' task. */ -package javabushka.client.lettuce; +package javababushka.benchmarks.lettuce; import java.util.HashMap; -import javabushka.client.utils.Benchmarking; -import javabushka.client.utils.ChosenAction; +import javababushka.benchmarks.utils.Benchmarking; +import javababushka.benchmarks.utils.ChosenAction; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/java/jabushka/build.gradle b/java/build.gradle similarity index 100% rename from java/jabushka/build.gradle rename to java/build.gradle diff --git a/java/jabushka/jabushka/build.gradle b/java/client/build.gradle similarity index 100% rename from java/jabushka/jabushka/build.gradle rename to java/client/build.gradle diff --git a/java/jabushka/gradle.properties b/java/gradle.properties similarity index 100% rename from java/jabushka/gradle.properties rename to java/gradle.properties diff --git a/java/jabushka/gradle/wrapper/gradle-wrapper.jar b/java/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from java/jabushka/gradle/wrapper/gradle-wrapper.jar rename to java/gradle/wrapper/gradle-wrapper.jar diff --git a/java/jabushka/gradle/wrapper/gradle-wrapper.properties b/java/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from java/jabushka/gradle/wrapper/gradle-wrapper.properties rename to java/gradle/wrapper/gradle-wrapper.properties diff --git a/java/jabushka/gradlew b/java/gradlew similarity index 100% rename from java/jabushka/gradlew rename to java/gradlew diff --git a/java/jabushka/gradlew.bat b/java/gradlew.bat similarity index 100% rename from java/jabushka/gradlew.bat rename to java/gradlew.bat diff --git a/java/jabushka/integTest/build.gradle b/java/integTest/build.gradle similarity index 100% rename from java/jabushka/integTest/build.gradle rename to java/integTest/build.gradle diff --git a/java/jabushka/settings.gradle b/java/jabushka/settings.gradle deleted file mode 100644 index f549b8010a..0000000000 --- a/java/jabushka/settings.gradle +++ /dev/null @@ -1,5 +0,0 @@ -rootProject.name = 'babushka' - -include 'jabushka' -include 'integTest' -include 'benchmarks' diff --git a/java/settings.gradle b/java/settings.gradle new file mode 100644 index 0000000000..c392c65247 --- /dev/null +++ b/java/settings.gradle @@ -0,0 +1,5 @@ +rootProject.name = 'javababushka' + +include 'client' +include 'integTest' +include 'benchmarks' From b15f93e49dde8a0eb3d1aae26bb8500f7f5d3d2a Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 27 Sep 2023 10:02:38 -0700 Subject: [PATCH 19/81] Add missing renames. (#17) Signed-off-by: Yury-Fridlyand --- .github/workflows/java-benchmark.yml | 4 ++-- .github/workflows/java.yml | 10 +++++----- java/README.md | 6 +++--- java/client/build.gradle | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/java-benchmark.yml b/.github/workflows/java-benchmark.yml index 88303fd3a4..a26167b39c 100644 --- a/.github/workflows/java-benchmark.yml +++ b/.github/workflows/java-benchmark.yml @@ -33,7 +33,7 @@ jobs: run: docker run -p 6379:6379 -p 8001:8001 -d redis/redis-stack - name: Run benchmarks - working-directory: java/jabushka + working-directory: java run: ./gradlew :benchmark:run - name: Upload test reports @@ -43,4 +43,4 @@ jobs: with: name: test-reports-${{ matrix.java }} path: | - java/jabushka/benchmarks/build/reports/** + java/benchmarks/build/reports/** diff --git a/.github/workflows/java.yml b/.github/workflows/java.yml index 1927cbe58f..716746ed21 100644 --- a/.github/workflows/java.yml +++ b/.github/workflows/java.yml @@ -38,8 +38,8 @@ jobs: run: | sudo apt update sudo apt install -y protobuf-compiler - mkdir -p java/jabushka/jabushka/src/main/java/org/babushka/jabushka/generated - protoc -Iprotobuf=babushka-core/src/protobuf/ --java_out=java/jabushka/jabushka/src/main/java/org/babushka/jabushka/generated babushka-core/src/protobuf/*.proto + mkdir -p java/client/src/main/java/org/babushka/javababushka/generated + protoc -Iprotobuf=babushka-core/src/protobuf/ --java_out=java/client/src/main/java/org/babushka/javababushka/generated babushka-core/src/protobuf/*.proto - name: Build rust part working-directory: java @@ -49,7 +49,7 @@ jobs: run: docker run -p 6379:6379 -p 8001:8001 -d redis/redis-stack - name: Build java part - working-directory: java/jabushka + working-directory: java run: ./gradlew --continue build - name: Upload test reports @@ -59,5 +59,5 @@ jobs: with: name: test-reports-${{ matrix.java }} path: | - java/jabushka/jabushka/build/reports/** - java/jabushka/integTest/build/reports/** + java/client/build/reports/** + java/integTest/build/reports/** diff --git a/java/README.md b/java/README.md index 69b38c9cde..66afd3c3b6 100644 --- a/java/README.md +++ b/java/README.md @@ -6,11 +6,11 @@ language api to enhance performance and limit cpu cycles at scale. ## Organization -The Java client (javabushka) contains the following parts: +The Java client (javababushka) contains the following parts: 1. A Java client (lib folder): wrapper to rust-client -2. An examples script: to sanity test javabushka and similar java-clients against a redis host -3. A benchmark app: to performance benchmark test javabushka and similar java-clients against a redis host +2. An examples script: to sanity test javababushka and similar java-clients against a redis host +3. A benchmark app: to performance benchmark test javababushka and similar java-clients against a redis host ## Building diff --git a/java/client/build.gradle b/java/client/build.gradle index b60dc6adfc..d99f81ba7a 100644 --- a/java/client/build.gradle +++ b/java/client/build.gradle @@ -14,11 +14,11 @@ dependencies { tasks.register('protobuf', Exec) { doFirst { - project.mkdir(Paths.get(project.projectDir.path, 'src/main/java/org/babushka/jabushka/generated').toString()) + project.mkdir(Paths.get(project.projectDir.path, 'src/main/java/org/babushka/javababushka/generated').toString()) } commandLine 'protoc', '-Iprotobuf=babushka-core/src/protobuf/', - '--java_out=java/jabushka/jabushka/src/main/java/org/babushka/jabushka/generated', + '--java_out=java/client/src/main/java/org/babushka/javababushka/generated', 'babushka-core/src/protobuf/connection_request.proto', 'babushka-core/src/protobuf/redis_request.proto', 'babushka-core/src/protobuf/response.proto' From 1bab56a57d2dbd16d680b16b0a340ede146e8f8e Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Thu, 5 Oct 2023 14:01:59 -0700 Subject: [PATCH 20/81] Add option to run tests on multiple clients in concurrency (#16) * Add option to run tests on multiple clients in concurrency * Common pool of iterations. * Awaiting result from async methods. Signed-off-by: Yury-Fridlyand * minor fix Signed-off-by: Yury-Fridlyand * Change while-loop; Spotless Apply Signed-off-by: acarbonetto --------- Signed-off-by: Yury-Fridlyand Signed-off-by: acarbonetto Co-authored-by: acarbonetto --- .../benchmarks/BenchmarkingApp.java | 93 +++++----- .../benchmarks/utils/Benchmarking.java | 168 ++++++++++++------ 2 files changed, 167 insertions(+), 94 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index ad19929d06..66ea1f5029 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -1,16 +1,18 @@ package javababushka.benchmarks; +import static javababushka.benchmarks.utils.Benchmarking.testClientSetGet; + import java.io.FileWriter; import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; +import java.util.stream.Stream; import javababushka.benchmarks.jedis.JedisClient; +import javababushka.benchmarks.jedis.JedisPseudoAsyncClient; import javababushka.benchmarks.lettuce.LettuceAsyncClient; import javababushka.benchmarks.lettuce.LettuceClient; -import javababushka.benchmarks.utils.Benchmarking; -import javababushka.benchmarks.jedis.JedisPseudoAsyncClient; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; @@ -38,34 +40,17 @@ public static void main(String[] args) { for (ClientName client : runConfiguration.clients) { switch (client) { - case ALL: - testClientSetGet(new JedisClient(), runConfiguration); - testClientSetGet(new LettuceClient(), runConfiguration); - testAsyncClientSetGet(new JedisPseudoAsyncClient(), runConfiguration); - testAsyncClientSetGet(new LettuceAsyncClient(), runConfiguration); - System.out.println("Babushka not yet configured"); - break; - case ALL_ASYNC: - testAsyncClientSetGet(new JedisPseudoAsyncClient(), runConfiguration); - testAsyncClientSetGet(new LettuceAsyncClient(), runConfiguration); - System.out.println("Babushka not yet configured"); - break; - case ALL_SYNC: - testClientSetGet(new JedisClient(), runConfiguration); - testClientSetGet(new LettuceClient(), runConfiguration); - System.out.println("Babushka not yet configured"); - break; case JEDIS: - testClientSetGet(new JedisClient(), runConfiguration); + testClientSetGet(JedisClient::new, runConfiguration, false); break; case JEDIS_ASYNC: - testAsyncClientSetGet(new JedisPseudoAsyncClient(), runConfiguration); + testClientSetGet(JedisPseudoAsyncClient::new, runConfiguration, true); break; case LETTUCE: - testClientSetGet(new LettuceClient(), runConfiguration); + testClientSetGet(LettuceClient::new, runConfiguration, false); break; case LETTUCE_ASYNC: - testAsyncClientSetGet(new LettuceAsyncClient(), runConfiguration); + testClientSetGet(LettuceAsyncClient::new, runConfiguration, true); break; case BABUSHKA: System.out.println("Babushka not yet configured"); @@ -90,7 +75,8 @@ private static Options getOptions() { options.addOption("f", "resultsFile", true, "Result filepath []"); options.addOption("d", "dataSize", true, "Data block size [20]"); options.addOption("C", "concurrentTasks", true, "Number of concurrent tasks [1 10 100]"); - options.addOption("l", "clients", true, "one of: all|jedis|lettuce|babushka [all]"); + options.addOption( + "l", "clients", true, "one of: all|jedis|jedis_async|lettuce|lettuce_async|babushka [all]"); options.addOption("h", "host", true, "host url [localhost]"); options.addOption("p", "port", true, "port number [6379]"); options.addOption("n", "clientCount", true, "Client count [1]"); @@ -146,6 +132,30 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce runConfiguration.clients = Arrays.stream(clients) .map(c -> Enum.valueOf(ClientName.class, c.toUpperCase())) + .flatMap( + e -> { + switch (e) { + case ALL: + return Stream.of( + ClientName.JEDIS, + ClientName.JEDIS_ASYNC, + ClientName.BABUSHKA, + ClientName.LETTUCE, + ClientName.LETTUCE_ASYNC); + case ALL_ASYNC: + return Stream.of( + ClientName.JEDIS_ASYNC, + // ClientName.BABUSHKA, + ClientName.LETTUCE_ASYNC); + case ALL_SYNC: + return Stream.of( + ClientName.JEDIS, + // ClientName.BABUSHKA, + ClientName.LETTUCE); + default: + return Stream.of(e); + } + }) .toArray(ClientName[]::new); } @@ -154,7 +164,15 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce } if (line.hasOption("clientCount")) { - runConfiguration.clientCount = Integer.parseInt(line.getOptionValue("clientCount")); + String clientCount = line.getOptionValue("clientCount"); + + // check if it's the correct format + if (!clientCount.matches("\\d+(\\s+\\d+)?")) { + throw new ParseException("Invalid concurrentTasks"); + } + // split the string into a list of integers + runConfiguration.clientCount = + Arrays.stream(clientCount.split("\\s+")).mapToInt(Integer::parseInt).toArray(); } if (line.hasOption("tls")) { @@ -164,18 +182,6 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce return runConfiguration; } - private static void testClientSetGet(Client client, RunConfiguration runConfiguration) { - System.out.printf("%n =====> %s <===== %n%n", client.getName()); - Benchmarking.printResults(Benchmarking.measurePerformance(client, runConfiguration, false)); - System.out.println(); - } - - private static void testAsyncClientSetGet(AsyncClient client, RunConfiguration runConfiguration) { - System.out.printf("%n =====> %s <===== %n%n", client.getName()); - Benchmarking.printResults(Benchmarking.measurePerformance(client, runConfiguration, true)); - System.out.println(); - } - public enum ClientName { JEDIS("Jedis"), JEDIS_ASYNC("Jedis async"), @@ -210,18 +216,23 @@ public static class RunConfiguration { public ClientName[] clients; public String host; public int port; - public int clientCount; + public int[] clientCount; public boolean tls; + public boolean debugLogging = false; public RunConfiguration() { configuration = "Release"; resultsFile = Optional.empty(); dataSize = 20; - concurrentTasks = List.of(1, 10, 100); - clients = new ClientName[] {ClientName.ALL}; + concurrentTasks = List.of(10, 100); + clients = + new ClientName[] { + // ClientName.BABUSHKA, + ClientName.JEDIS, ClientName.JEDIS_ASYNC, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC + }; host = "localhost"; port = 6379; - clientCount = 1; + clientCount = new int[] {1, 2}; tls = false; } } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 6a2ec95755..bae34c9373 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -1,24 +1,30 @@ package javababushka.benchmarks.utils; import java.io.FileWriter; -import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Supplier; import java.util.stream.Collectors; import javababushka.benchmarks.AsyncClient; import javababushka.benchmarks.BenchmarkingApp; import javababushka.benchmarks.Client; import javababushka.benchmarks.SyncClient; import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.tuple.Pair; public class Benchmarking { static final double PROB_GET = 0.8; static final double PROB_GET_EXISTING_KEY = 0.8; static final int SIZE_GET_KEYSPACE = 3750000; static final int SIZE_SET_KEYSPACE = 3000000; + static final int ASYNC_OPERATION_TIMEOUT_SEC = 1; private static ChosenAction randomAction() { if (Math.random() > PROB_GET) { @@ -40,31 +46,19 @@ public static String generateKeySet() { } public interface Operation { - void go(); + void go() throws Exception; } - public static Map> getLatencies( - int iterations, Map actions) { - Map> latencies = new HashMap>(); - for (ChosenAction action : actions.keySet()) { - latencies.put(action, new ArrayList()); - } - - for (int i = 0; i < iterations; i++) { - ChosenAction action = randomAction(); - Operation op = actions.get(action); - ArrayList actionLatencies = latencies.get(action); - addLatency(op, actionLatencies); - } - - return latencies; - } - - private static void addLatency(Operation op, ArrayList latencies) { + private static Pair getLatency(Map actions) { + var action = randomAction(); long before = System.nanoTime(); - op.go(); + try { + actions.get(action).go(); + } catch (Exception e) { + // timed out - exception from Future::get + } long after = System.nanoTime(); - latencies.add(after - before); + return Pair.of(action, after - before); } // Assumption: latencies is sorted in ascending order @@ -114,8 +108,7 @@ public static Map calculateResults( } public static void printResults( - Map calculatedResults, Optional resultsFile) - throws IOException { + Map calculatedResults, Optional resultsFile) { if (resultsFile.isPresent()) { printResults(calculatedResults, resultsFile.get()); } else { @@ -124,16 +117,19 @@ public static void printResults( } public static void printResults( - Map resultsMap, FileWriter resultsFile) throws IOException { + Map resultsMap, FileWriter resultsFile) { for (Map.Entry entry : resultsMap.entrySet()) { ChosenAction action = entry.getKey(); LatencyResults results = entry.getValue(); - resultsFile.write("Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0); - resultsFile.write(action + " p50 latency in ms: " + results.p50Latency / 1000000.0); - resultsFile.write(action + " p90 latency in ms: " + results.p90Latency / 1000000.0); - resultsFile.write(action + " p99 latency in ms: " + results.p99Latency / 1000000.0); - resultsFile.write(action + " std dev in ms: " + results.stdDeviation / 1000000.0); + try { + resultsFile.write("Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0); + resultsFile.write(action + " p50 latency in ms: " + results.p50Latency / 1000000.0); + resultsFile.write(action + " p90 latency in ms: " + results.p90Latency / 1000000.0); + resultsFile.write(action + " p99 latency in ms: " + results.p99Latency / 1000000.0); + resultsFile.write(action + " std dev in ms: " + results.stdDeviation / 1000000.0); + } catch (Exception ignored) { + } } } @@ -150,41 +146,107 @@ public static void printResults(Map resultsMap) { } } - public static Map measurePerformance( - Client client, BenchmarkingApp.RunConfiguration config, boolean async) { - client.connectToRedis(new ConnectionSettings(config.host, config.port, config.tls)); - - int iterations = 10000; - String value = RandomStringUtils.randomAlphanumeric(config.dataSize); - - if (config.resultsFile.isPresent()) { - try { - config.resultsFile.get().write(client.getName() + " client Benchmarking: "); - } catch (Exception ignored) { + public static void testClientSetGet( + Supplier clientCreator, BenchmarkingApp.RunConfiguration config, boolean async) { + for (int concurrentNum : config.concurrentTasks) { + int iterations = Math.min(Math.max(100000, concurrentNum * 10000), 10000000); + for (int clientNum : config.clientCount) { + System.out.printf( + "%n =====> %s <===== %d clients %d concurrent %n%n", + clientCreator.get().getName(), clientNum, concurrentNum); + AtomicInteger iterationCounter = new AtomicInteger(0); + Map> actionResults = + Map.of( + ChosenAction.GET_EXISTING, new ArrayList<>(), + ChosenAction.GET_NON_EXISTING, new ArrayList<>(), + ChosenAction.SET, new ArrayList<>()); + List tasks = new ArrayList<>(); + + for (int i = 0; i < concurrentNum; ) { + for (int j = 0; j < clientNum; j++) { + i++; + int finalI = i; + int finalJ = j; + var client = clientCreator.get(); + client.connectToRedis(new ConnectionSettings(config.host, config.port, config.tls)); + tasks.add( + () -> { + if (config.debugLogging) { + System.out.printf( + "%n concurrent = %d/%d, client# = %d/%d%n", + finalI, concurrentNum, finalJ + 1, clientNum); + } + int iterationIncrement = iterationCounter.getAndIncrement(); + while (iterationIncrement < iterations) { + if (config.debugLogging) { + System.out.printf( + "> iteration = %d/%d, client# = %d/%d%n", + iterationIncrement + 1, iterations, finalJ + 1, clientNum); + } + // operate and calculate tik-tok + Pair result = + measurePerformance(client, config.dataSize, async); + actionResults.get(result.getLeft()).add(result.getRight()); + + iterationIncrement = iterationCounter.getAndIncrement(); + } + }); + } + } + if (config.debugLogging) { + System.out.printf("%s client Benchmarking: %n", clientCreator.get().getName()); + System.out.printf( + "===> concurrentNum = %d, clientNum = %d, tasks = %d%n", + concurrentNum, clientNum, tasks.size()); + } + tasks.stream() + .map(CompletableFuture::runAsync) + .forEach( + f -> { + try { + f.get(); + } catch (Exception e) { + e.printStackTrace(); + } + }); + + printResults(calculateResults(actionResults), config.resultsFile); } - } else { - System.out.printf("%s client Benchmarking: %n", client.getName()); } - Map actions = new HashMap<>(); + System.out.println(); + } + + public static Pair measurePerformance( + Client client, int dataSize, boolean async) { + + String value = RandomStringUtils.randomAlphanumeric(dataSize); + Map actions = new HashMap<>(); actions.put( ChosenAction.GET_EXISTING, async - ? () -> ((AsyncClient) client).asyncGet(Benchmarking.generateKeySet()) - : () -> ((SyncClient) client).get(Benchmarking.generateKeySet())); + ? () -> + ((AsyncClient) client) + .asyncGet(generateKeySet()) + .get(ASYNC_OPERATION_TIMEOUT_SEC, TimeUnit.SECONDS) + : () -> ((SyncClient) client).get(generateKeySet())); actions.put( ChosenAction.GET_NON_EXISTING, async - ? () -> ((AsyncClient) client).asyncGet(Benchmarking.generateKeyGet()) - : () -> ((SyncClient) client).get(Benchmarking.generateKeyGet())); + ? () -> + ((AsyncClient) client) + .asyncGet(generateKeyGet()) + .get(ASYNC_OPERATION_TIMEOUT_SEC, TimeUnit.SECONDS) + : () -> ((SyncClient) client).get(generateKeyGet())); actions.put( ChosenAction.SET, async - ? () -> ((AsyncClient) client).asyncSet(Benchmarking.generateKeySet(), value) - : () -> ((SyncClient) client).set(Benchmarking.generateKeySet(), value)); + ? () -> + ((AsyncClient) client) + .asyncSet(generateKeySet(), value) + .get(ASYNC_OPERATION_TIMEOUT_SEC, TimeUnit.SECONDS) + : () -> ((SyncClient) client).set(generateKeySet(), value)); - var results = Benchmarking.calculateResults(Benchmarking.getLatencies(iterations, actions)); - client.closeConnection(); - return results; + return getLatency(actions); } } From d99d27a7194a55e0ca1e7fac073fc4ef6d11a199 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Fri, 6 Oct 2023 14:08:29 -0700 Subject: [PATCH 21/81] Update redis-rs to match main branch Signed-off-by: acarbonetto --- submodules/redis-rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/redis-rs b/submodules/redis-rs index 694fb7b1ec..ca6b9cb57a 160000 --- a/submodules/redis-rs +++ b/submodules/redis-rs @@ -1 +1 @@ -Subproject commit 694fb7b1ec1a826cc5a8e936a6c6eb7610b3ec65 +Subproject commit ca6b9cb57a78d9164febe3878eff68043ab5bed0 From 540f49a2d79c8a14a9d9bc6aa0afb540994f3e84 Mon Sep 17 00:00:00 2001 From: Andrew Carbonetto Date: Fri, 6 Oct 2023 15:52:19 -0700 Subject: [PATCH 22/81] Create clients only once per iteration (#19) Signed-off-by: acarbonetto --- .../benchmarks/utils/Benchmarking.java | 65 ++++++++++--------- .../benchmarks/jedis/JedisClientIT.java | 3 - 2 files changed, 35 insertions(+), 33 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index bae34c9373..14818f46b4 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Optional; @@ -150,10 +151,10 @@ public static void testClientSetGet( Supplier clientCreator, BenchmarkingApp.RunConfiguration config, boolean async) { for (int concurrentNum : config.concurrentTasks) { int iterations = Math.min(Math.max(100000, concurrentNum * 10000), 10000000); - for (int clientNum : config.clientCount) { + for (int clientCount : config.clientCount) { System.out.printf( "%n =====> %s <===== %d clients %d concurrent %n%n", - clientCreator.get().getName(), clientNum, concurrentNum); + clientCreator.get().getName(), clientCount, concurrentNum); AtomicInteger iterationCounter = new AtomicInteger(0); Map> actionResults = Map.of( @@ -162,42 +163,46 @@ public static void testClientSetGet( ChosenAction.SET, new ArrayList<>()); List tasks = new ArrayList<>(); - for (int i = 0; i < concurrentNum; ) { - for (int j = 0; j < clientNum; j++) { - i++; - int finalI = i; - int finalJ = j; - var client = clientCreator.get(); - client.connectToRedis(new ConnectionSettings(config.host, config.port, config.tls)); - tasks.add( - () -> { + // create clients + List clients = new LinkedList<>(); + for (int cc = 0; cc < clientCount; cc++) { + Client newClient = clientCreator.get(); + newClient.connectToRedis(new ConnectionSettings(config.host, config.port, config.tls)); + clients.add(newClient); + } + + for (int taskNum = 0; taskNum < concurrentNum; taskNum++) { + final int taskNumDebugging = taskNum; + tasks.add( + () -> { + int iterationIncrement = iterationCounter.getAndIncrement(); + int clientIndex = iterationIncrement % clients.size(); + + if (config.debugLogging) { + System.out.printf( + "%n concurrent = %d/%d, client# = %d/%d%n", + taskNumDebugging, concurrentNum, clientIndex + 1, clientCount); + } + while (iterationIncrement < iterations) { if (config.debugLogging) { System.out.printf( - "%n concurrent = %d/%d, client# = %d/%d%n", - finalI, concurrentNum, finalJ + 1, clientNum); + "> iteration = %d/%d, client# = %d/%d%n", + iterationIncrement + 1, iterations, clientIndex + 1, clientCount); } - int iterationIncrement = iterationCounter.getAndIncrement(); - while (iterationIncrement < iterations) { - if (config.debugLogging) { - System.out.printf( - "> iteration = %d/%d, client# = %d/%d%n", - iterationIncrement + 1, iterations, finalJ + 1, clientNum); - } - // operate and calculate tik-tok - Pair result = - measurePerformance(client, config.dataSize, async); - actionResults.get(result.getLeft()).add(result.getRight()); - - iterationIncrement = iterationCounter.getAndIncrement(); - } - }); - } + // operate and calculate tik-tok + Pair result = + measurePerformance(clients.get(clientIndex), config.dataSize, async); + actionResults.get(result.getLeft()).add(result.getRight()); + + iterationIncrement = iterationCounter.getAndIncrement(); + } + }); } if (config.debugLogging) { System.out.printf("%s client Benchmarking: %n", clientCreator.get().getName()); System.out.printf( "===> concurrentNum = %d, clientNum = %d, tasks = %d%n", - concurrentNum, clientNum, tasks.size()); + concurrentNum, clientCount, tasks.size()); } tasks.stream() .map(CompletableFuture::runAsync) diff --git a/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java b/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java index ec40c00bb0..d1669d36e0 100644 --- a/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java +++ b/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java @@ -54,8 +54,5 @@ public void testResourceSetGet() { actions.put( ChosenAction.GET_NON_EXISTING, () -> jedisClient.get(Benchmarking.generateKeyGet())); actions.put(ChosenAction.SET, () -> jedisClient.set(Benchmarking.generateKeySet(), value)); - - Benchmarking.printResults( - Benchmarking.calculateResults(Benchmarking.getLatencies(iterations, actions))); } } From 035ef20266ed9110c27789c9f0be97d94e4b0782 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Tue, 10 Oct 2023 08:23:17 -0700 Subject: [PATCH 23/81] Add Java-client benchmarking app Signed-off-by: acarbonetto --- .../benchmarks/BenchmarkingApp.java | 237 ++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java new file mode 100644 index 0000000000..c071ac01ae --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -0,0 +1,237 @@ +package javababushka.benchmarks; + +import java.io.FileWriter; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.DefaultParser; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; + +/** Benchmarking app for reporting performance of various redis-rs Java-clients */ +public class BenchmarkingApp { + + // main application entrypoint + public static void main(String[] args) { + + // create the parser + CommandLineParser parser = new DefaultParser(); + Options options = getOptions(); + RunConfiguration runConfiguration = new RunConfiguration(); + try { + // parse the command line arguments + CommandLine line = parser.parse(options, args); + runConfiguration = verifyOptions(line); + } catch (ParseException exp) { + // oops, something went wrong + System.err.println("Parsing failed. Reason: " + exp.getMessage()); + } + + for (ClientName client : runConfiguration.clients) { + switch (client) { + case JEDIS: + // run testClientSetGet on JEDI sync client + System.out.println("Run JEDI sync client"); + break; + case JEDIS_ASYNC: + // run testClientSetGet on JEDI pseudo-async client + System.out.println("Run JEDI pseudo-async client"); + break; + case LETTUCE: + // run testClientSetGet on LETTUCE sync client + System.out.println("Run LETTUCE sync client"); + break; + case LETTUCE_ASYNC: + // run testClientSetGet on LETTUCE async client + System.out.println("Run LETTUCE async client"); + break; + case BABUSHKA: + System.out.println("Babushka not yet configured"); + break; + } + } + + if (runConfiguration.resultsFile.isPresent()) { + try { + runConfiguration.resultsFile.get().close(); + } catch (IOException ioException) { + System.out.println("Error closing results file"); + } + } + } + + private static Options getOptions() { + // create the Options + Options options = new Options(); + + options.addOption("c", "configuration", true, "Configuration flag [Release]"); + options.addOption("f", "resultsFile", true, "Result filepath []"); + options.addOption("d", "dataSize", true, "Data block size [20]"); + options.addOption("C", "concurrentTasks", true, "Number of concurrent tasks [1 10 100]"); + options.addOption( + "l", "clients", true, "one of: all|jedis|jedis_async|lettuce|lettuce_async|babushka [all]"); + options.addOption("h", "host", true, "host url [localhost]"); + options.addOption("p", "port", true, "port number [6379]"); + options.addOption("n", "clientCount", true, "Client count [1]"); + options.addOption("t", "tls", false, "TLS [true]"); + + return options; + } + + private static RunConfiguration verifyOptions(CommandLine line) throws ParseException { + RunConfiguration runConfiguration = new RunConfiguration(); + if (line.hasOption("configuration")) { + String configuration = line.getOptionValue("configuration"); + if (configuration.equalsIgnoreCase("Release") || configuration.equalsIgnoreCase("Debug")) { + runConfiguration.configuration = configuration; + } else { + throw new ParseException("Invalid run configuration (Release|Debug)"); + } + } + + if (line.hasOption("resultsFile")) { + try { + runConfiguration.resultsFile = + Optional.of(new FileWriter(line.getOptionValue("resultsFile"))); + } catch (IOException e) { + throw new ParseException("Unable to write to resultsFile."); + } + } + + if (line.hasOption("dataSize")) { + runConfiguration.dataSize = Integer.parseInt(line.getOptionValue("dataSize")); + } + + if (line.hasOption("concurrentTasks")) { + String concurrentTasks = line.getOptionValue("concurrentTasks"); + + // remove optional square brackets + if (concurrentTasks.startsWith("[") && concurrentTasks.endsWith("]")) { + concurrentTasks = concurrentTasks.substring(1, concurrentTasks.length() - 1); + } + // check if it's the correct format + if (!concurrentTasks.matches("\\d+(\\s+\\d+)?")) { + throw new ParseException("Invalid concurrentTasks"); + } + // split the string into a list of integers + runConfiguration.concurrentTasks = + Arrays.stream(concurrentTasks.split("\\s+")) + .map(Integer::parseInt) + .collect(Collectors.toList()); + } + + if (line.hasOption("clients")) { + String[] clients = line.getOptionValue("clients").split(","); + runConfiguration.clients = + Arrays.stream(clients) + .map(c -> Enum.valueOf(ClientName.class, c.toUpperCase())) + .flatMap( + e -> { + switch (e) { + case ALL: + return Stream.of( + ClientName.JEDIS, + ClientName.JEDIS_ASYNC, + ClientName.BABUSHKA, + ClientName.LETTUCE, + ClientName.LETTUCE_ASYNC); + case ALL_ASYNC: + return Stream.of( + ClientName.JEDIS_ASYNC, + // ClientName.BABUSHKA, + ClientName.LETTUCE_ASYNC); + case ALL_SYNC: + return Stream.of( + ClientName.JEDIS, + // ClientName.BABUSHKA, + ClientName.LETTUCE); + default: + return Stream.of(e); + } + }) + .toArray(ClientName[]::new); + } + + if (line.hasOption("host")) { + runConfiguration.host = line.getOptionValue("host"); + } + + if (line.hasOption("clientCount")) { + String clientCount = line.getOptionValue("clientCount"); + + // check if it's the correct format + if (!clientCount.matches("\\d+(\\s+\\d+)?")) { + throw new ParseException("Invalid concurrentTasks"); + } + // split the string into a list of integers + runConfiguration.clientCount = + Arrays.stream(clientCount.split("\\s+")).mapToInt(Integer::parseInt).toArray(); + } + + if (line.hasOption("tls")) { + runConfiguration.tls = Boolean.parseBoolean(line.getOptionValue("tls")); + } + + return runConfiguration; + } + + public enum ClientName { + JEDIS("Jedis"), + JEDIS_ASYNC("Jedis async"), + LETTUCE("Lettuce"), + LETTUCE_ASYNC("Lettuce async"), + BABUSHKA("Babushka"), + ALL("All"), + ALL_SYNC("All sync"), + ALL_ASYNC("All async"); + + private String name; + + private ClientName(String name) { + this.name = name; + } + + @Override + public String toString() { + return this.name; + } + + public boolean isEqual(String other) { + return this.toString().equalsIgnoreCase(other); + } + } + + public static class RunConfiguration { + public String configuration; + public Optional resultsFile; + public int dataSize; + public List concurrentTasks; + public ClientName[] clients; + public String host; + public int port; + public int[] clientCount; + public boolean tls; + public boolean debugLogging = false; + + public RunConfiguration() { + configuration = "Release"; + resultsFile = Optional.empty(); + dataSize = 20; + concurrentTasks = List.of(10, 100); + clients = + new ClientName[] { + // ClientName.BABUSHKA, + ClientName.JEDIS, ClientName.JEDIS_ASYNC, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC + }; + host = "localhost"; + port = 6379; + clientCount = new int[] {1, 2}; + tls = false; + } + } +} \ No newline at end of file From 0883985da5d80ea2578228d67702e9aed5c0188b Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Tue, 10 Oct 2023 10:27:25 -0700 Subject: [PATCH 24/81] spotless apply Signed-off-by: acarbonetto --- java/README.md | 2 +- .../benchmarks/BenchmarkingApp.java | 63 ++++++++----------- 2 files changed, 28 insertions(+), 37 deletions(-) diff --git a/java/README.md b/java/README.md index 12ae1966f2..e21777aa57 100644 --- a/java/README.md +++ b/java/README.md @@ -29,7 +29,7 @@ These IDE plugins can auto-format code on file save or by single click: You can run benchmarks using `./gradlew run`. You can set arguments using the args flag like: ```shell -./gradlew run --args="--clients lettuce" +./gradlew run --args="--resultsFile=output.csv --dataSize \"2 5\" --concurrentTasks \"2 10\" --clients all --host localhost --port 6279 --clientCount \"2 5\" --tls" ``` The following arguments are accepted: diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index c071ac01ae..3f9a5ecaa9 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -3,9 +3,7 @@ import java.io.FileWriter; import java.io.IOException; import java.util.Arrays; -import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; @@ -103,26 +101,8 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce } } - if (line.hasOption("dataSize")) { - runConfiguration.dataSize = Integer.parseInt(line.getOptionValue("dataSize")); - } - if (line.hasOption("concurrentTasks")) { - String concurrentTasks = line.getOptionValue("concurrentTasks"); - - // remove optional square brackets - if (concurrentTasks.startsWith("[") && concurrentTasks.endsWith("]")) { - concurrentTasks = concurrentTasks.substring(1, concurrentTasks.length() - 1); - } - // check if it's the correct format - if (!concurrentTasks.matches("\\d+(\\s+\\d+)?")) { - throw new ParseException("Invalid concurrentTasks"); - } - // split the string into a list of integers - runConfiguration.concurrentTasks = - Arrays.stream(concurrentTasks.split("\\s+")) - .map(Integer::parseInt) - .collect(Collectors.toList()); + runConfiguration.concurrentTasks = parseIntListOption(line.getOptionValue("concurrentTasks")); } if (line.hasOption("clients")) { @@ -162,15 +142,11 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce } if (line.hasOption("clientCount")) { - String clientCount = line.getOptionValue("clientCount"); + runConfiguration.clientCount = parseIntListOption(line.getOptionValue("clientCount")); + } - // check if it's the correct format - if (!clientCount.matches("\\d+(\\s+\\d+)?")) { - throw new ParseException("Invalid concurrentTasks"); - } - // split the string into a list of integers - runConfiguration.clientCount = - Arrays.stream(clientCount.split("\\s+")).mapToInt(Integer::parseInt).toArray(); + if (line.hasOption("dataSize")) { + runConfiguration.dataSize = parseIntListOption(line.getOptionValue("dataSize")); } if (line.hasOption("tls")) { @@ -180,6 +156,21 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce return runConfiguration; } + private static int[] parseIntListOption(String line) throws ParseException { + String lineValue = line; + + // remove optional square brackets + if (lineValue.startsWith("[") && lineValue.endsWith("]")) { + lineValue = lineValue.substring(1, lineValue.length() - 1); + } + // check if it's the correct format + if (!lineValue.matches("\\d+(\\s+\\d+)?")) { + throw new ParseException("Invalid option: " + line); + } + // split the string into a list of integers + return Arrays.stream(lineValue.split("\\s+")).mapToInt(Integer::parseInt).toArray(); + } + public enum ClientName { JEDIS("Jedis"), JEDIS_ASYNC("Jedis async"), @@ -209,8 +200,8 @@ public boolean isEqual(String other) { public static class RunConfiguration { public String configuration; public Optional resultsFile; - public int dataSize; - public List concurrentTasks; + public int[] dataSize; + public int[] concurrentTasks; public ClientName[] clients; public String host; public int port; @@ -221,12 +212,12 @@ public static class RunConfiguration { public RunConfiguration() { configuration = "Release"; resultsFile = Optional.empty(); - dataSize = 20; - concurrentTasks = List.of(10, 100); + dataSize = new int[] {20}; + concurrentTasks = new int[] {10, 100}; clients = new ClientName[] { - // ClientName.BABUSHKA, - ClientName.JEDIS, ClientName.JEDIS_ASYNC, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC + // ClientName.BABUSHKA, + ClientName.JEDIS, ClientName.JEDIS_ASYNC, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC }; host = "localhost"; port = 6379; @@ -234,4 +225,4 @@ public RunConfiguration() { tls = false; } } -} \ No newline at end of file +} From d15ade1782e2a2c6770271af6e8c622107519091 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Tue, 10 Oct 2023 10:45:15 -0700 Subject: [PATCH 25/81] Update on command line options Signed-off-by: acarbonetto --- .../benchmarks/BenchmarkingApp.java | 58 ++++++++++++++++--- 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 3f9a5ecaa9..4ace9930d7 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -8,6 +8,8 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; +import org.apache.commons.cli.HelpFormatter; +import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; @@ -24,6 +26,14 @@ public static void main(String[] args) { try { // parse the command line arguments CommandLine line = parser.parse(options, args); + + // generate the help statement + if (line.hasOption("help")) { + HelpFormatter formatter = new HelpFormatter(); + formatter.printHelp("javababushka", options); + return; + } + runConfiguration = verifyOptions(line); } catch (ParseException exp) { // oops, something went wrong @@ -67,22 +77,52 @@ private static Options getOptions() { // create the Options Options options = new Options(); - options.addOption("c", "configuration", true, "Configuration flag [Release]"); - options.addOption("f", "resultsFile", true, "Result filepath []"); - options.addOption("d", "dataSize", true, "Data block size [20]"); - options.addOption("C", "concurrentTasks", true, "Number of concurrent tasks [1 10 100]"); + options.addOption(Option.builder("help").desc("print this message").build()); + options.addOption( + Option.builder("configuration") + .hasArg(true) + .desc("Configuration flag [Release]") + .build()); + options.addOption( + Option.builder("resultsFile") + .hasArg(true) + .desc("Result filepath []") + .build()); + options.addOption( + Option.builder("dataSize") + .hasArg(true) + .desc("Data block size [20]") + .build()); options.addOption( - "l", "clients", true, "one of: all|jedis|jedis_async|lettuce|lettuce_async|babushka [all]"); - options.addOption("h", "host", true, "host url [localhost]"); - options.addOption("p", "port", true, "port number [6379]"); - options.addOption("n", "clientCount", true, "Client count [1]"); - options.addOption("t", "tls", false, "TLS [true]"); + Option.builder("concurrentTasks") + .hasArg(true) + .desc("Number of concurrent tasks [1 10 100]") + .build()); + options.addOption( + Option.builder("clients") + .hasArg(true) + .desc("one of: all|jedis|jedis_async|lettuce|lettuce_async|babushka [all]") + .build()); + options.addOption(Option.builder("host").hasArg(true).desc("").build()); + options.addOption( + Option.builder("port") + .hasArg(true) + .desc("one of: port number [6379]") + .build()); + options.addOption( + Option.builder("clientCount") + .hasArg(true) + .desc("Number of cliens to run [1]") + .build()); + options.addOption( + Option.builder("tls").hasArg(true).desc("TLS [false]").build()); return options; } private static RunConfiguration verifyOptions(CommandLine line) throws ParseException { RunConfiguration runConfiguration = new RunConfiguration(); + if (line.hasOption("configuration")) { String configuration = line.getOptionValue("configuration"); if (configuration.equalsIgnoreCase("Release") || configuration.equalsIgnoreCase("Debug")) { From e3634bafe7c5cde629728c8ccfd447a0aee78312 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Tue, 10 Oct 2023 10:50:45 -0700 Subject: [PATCH 26/81] Update README Signed-off-by: acarbonetto --- java/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/java/README.md b/java/README.md index e21777aa57..40bb289a8a 100644 --- a/java/README.md +++ b/java/README.md @@ -29,7 +29,8 @@ These IDE plugins can auto-format code on file save or by single click: You can run benchmarks using `./gradlew run`. You can set arguments using the args flag like: ```shell -./gradlew run --args="--resultsFile=output.csv --dataSize \"2 5\" --concurrentTasks \"2 10\" --clients all --host localhost --port 6279 --clientCount \"2 5\" --tls" +./gradlew run --args="-help" +./gradlew run --args="-resultsFile=output.csv -dataSize \"2 5\" -concurrentTasks \"2 10\" -clients all -host localhost -port 6279 -clientCount \"2 5\" -tls" ``` The following arguments are accepted: From 500a043975c7a63929ea559c1b5b4f00779d3fc9 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Tue, 10 Oct 2023 15:20:08 -0700 Subject: [PATCH 27/81] Spotless apply: Signed-off-by: acarbonetto --- .../benchmarks/BenchmarkingApp.java | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 4ace9930d7..576a54cea0 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -79,20 +79,10 @@ private static Options getOptions() { options.addOption(Option.builder("help").desc("print this message").build()); options.addOption( - Option.builder("configuration") - .hasArg(true) - .desc("Configuration flag [Release]") - .build()); - options.addOption( - Option.builder("resultsFile") - .hasArg(true) - .desc("Result filepath []") - .build()); + Option.builder("configuration").hasArg(true).desc("Configuration flag [Release]").build()); options.addOption( - Option.builder("dataSize") - .hasArg(true) - .desc("Data block size [20]") - .build()); + Option.builder("resultsFile").hasArg(true).desc("Result filepath []").build()); + options.addOption(Option.builder("dataSize").hasArg(true).desc("Data block size [20]").build()); options.addOption( Option.builder("concurrentTasks") .hasArg(true) @@ -105,17 +95,10 @@ private static Options getOptions() { .build()); options.addOption(Option.builder("host").hasArg(true).desc("").build()); options.addOption( - Option.builder("port") - .hasArg(true) - .desc("one of: port number [6379]") - .build()); - options.addOption( - Option.builder("clientCount") - .hasArg(true) - .desc("Number of cliens to run [1]") - .build()); + Option.builder("port").hasArg(true).desc("one of: port number [6379]").build()); options.addOption( - Option.builder("tls").hasArg(true).desc("TLS [false]").build()); + Option.builder("clientCount").hasArg(true).desc("Number of cliens to run [1]").build()); + options.addOption(Option.builder("tls").hasArg(true).desc("TLS [false]").build()); return options; } From 0bf1678f78663bff985395b6696be9978fc36bef Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Wed, 11 Oct 2023 11:59:28 -0700 Subject: [PATCH 28/81] Update README example Signed-off-by: acarbonetto --- java/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/README.md b/java/README.md index 40bb289a8a..f7c3216c2f 100644 --- a/java/README.md +++ b/java/README.md @@ -30,7 +30,7 @@ You can run benchmarks using `./gradlew run`. You can set arguments using the ar ```shell ./gradlew run --args="-help" -./gradlew run --args="-resultsFile=output.csv -dataSize \"2 5\" -concurrentTasks \"2 10\" -clients all -host localhost -port 6279 -clientCount \"2 5\" -tls" +./gradlew run --args="-resultsFile=output.csv -dataSize \"100 1000\" -concurrentTasks \"10 100\" -clients all -host localhost -port 6279 -clientCount \"1 5\" -tls" ``` The following arguments are accepted: From 12efc63a7e3af669a7eec365765230f2e8b4dea9 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Wed, 11 Oct 2023 12:16:41 -0700 Subject: [PATCH 29/81] update commandline defaults for review comments Signed-off-by: acarbonetto --- .../benchmarks/BenchmarkingApp.java | 69 +++++++++++-------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 576a54cea0..9be52a5082 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -13,7 +13,7 @@ import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; -/** Benchmarking app for reporting performance of various redis-rs Java-clients */ +/** Benchmarking app for reporting performance of various Redis Java-clients */ public class BenchmarkingApp { // main application entrypoint @@ -43,12 +43,12 @@ public static void main(String[] args) { for (ClientName client : runConfiguration.clients) { switch (client) { case JEDIS: - // run testClientSetGet on JEDI sync client - System.out.println("Run JEDI sync client"); + // run testClientSetGet on JEDIS sync client + System.out.println("Run JEDIS sync client"); break; case JEDIS_ASYNC: - // run testClientSetGet on JEDI pseudo-async client - System.out.println("Run JEDI pseudo-async client"); + // run testClientSetGet on JEDIS pseudo-async client + System.out.println("Run JEDIS pseudo-async client"); break; case LETTUCE: // run testClientSetGet on LETTUCE sync client @@ -58,8 +58,8 @@ public static void main(String[] args) { // run testClientSetGet on LETTUCE async client System.out.println("Run LETTUCE async client"); break; - case BABUSHKA: - System.out.println("Babushka not yet configured"); + case BABUSHKA_ASYNC: + System.out.println("Babushka async not yet configured"); break; } } @@ -68,7 +68,7 @@ public static void main(String[] args) { try { runConfiguration.resultsFile.get().close(); } catch (IOException ioException) { - System.out.println("Error closing results file"); + System.out.println("Error closing results file: " + ioException.getLocalizedMessage()); } } } @@ -81,23 +81,29 @@ private static Options getOptions() { options.addOption( Option.builder("configuration").hasArg(true).desc("Configuration flag [Release]").build()); options.addOption( - Option.builder("resultsFile").hasArg(true).desc("Result filepath []").build()); - options.addOption(Option.builder("dataSize").hasArg(true).desc("Data block size [20]").build()); + Option.builder("resultsFile") + .hasArg(true) + .desc("Result filepath (stdout if empty) []") + .build()); + options.addOption( + Option.builder("dataSize").hasArg(true).desc("Data block size [100 4000]").build()); options.addOption( Option.builder("concurrentTasks") .hasArg(true) - .desc("Number of concurrent tasks [1 10 100]") + .desc("Number of concurrent tasks [100, 1000]") .build()); options.addOption( Option.builder("clients") .hasArg(true) - .desc("one of: all|jedis|jedis_async|lettuce|lettuce_async|babushka [all]") + .desc( + "one of:" + + " all|jedis|jedis_async|lettuce|lettuce_async|babushka_async|all_async|all_sync" + + " [all]") .build()); - options.addOption(Option.builder("host").hasArg(true).desc("").build()); + options.addOption(Option.builder("host").hasArg(true).desc("Hostname [localhost]").build()); + options.addOption(Option.builder("port").hasArg(true).desc("Port number [6379]").build()); options.addOption( - Option.builder("port").hasArg(true).desc("one of: port number [6379]").build()); - options.addOption( - Option.builder("clientCount").hasArg(true).desc("Number of cliens to run [1]").build()); + Option.builder("clientCount").hasArg(true).desc("Number of clients to run [1]").build()); options.addOption(Option.builder("tls").hasArg(true).desc("TLS [false]").build()); return options; @@ -111,16 +117,21 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce if (configuration.equalsIgnoreCase("Release") || configuration.equalsIgnoreCase("Debug")) { runConfiguration.configuration = configuration; } else { - throw new ParseException("Invalid run configuration (Release|Debug)"); + throw new ParseException( + "Invalid run configuration (" + configuration + "), must be (Release|Debug)"); } } if (line.hasOption("resultsFile")) { + String resultsFileName = line.getOptionValue("resultsFile"); try { - runConfiguration.resultsFile = - Optional.of(new FileWriter(line.getOptionValue("resultsFile"))); - } catch (IOException e) { - throw new ParseException("Unable to write to resultsFile."); + runConfiguration.resultsFile = Optional.of(new FileWriter(resultsFileName)); + } catch (IOException ioException) { + throw new ParseException( + "Unable to write to resultsFile (" + + resultsFileName + + "): " + + ioException.getMessage()); } } @@ -140,18 +151,18 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce return Stream.of( ClientName.JEDIS, ClientName.JEDIS_ASYNC, - ClientName.BABUSHKA, + // ClientName.BABUSHKA_ASYNC, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC); case ALL_ASYNC: return Stream.of( ClientName.JEDIS_ASYNC, - // ClientName.BABUSHKA, + // ClientName.BABUSHKA_ASYNC, ClientName.LETTUCE_ASYNC); case ALL_SYNC: return Stream.of( ClientName.JEDIS, - // ClientName.BABUSHKA, + // ClientName.BABUSHKA_ASYNC, ClientName.LETTUCE); default: return Stream.of(e); @@ -199,7 +210,7 @@ public enum ClientName { JEDIS_ASYNC("Jedis async"), LETTUCE("Lettuce"), LETTUCE_ASYNC("Lettuce async"), - BABUSHKA("Babushka"), + BABUSHKA_ASYNC("Babushka async"), ALL("All"), ALL_SYNC("All sync"), ALL_ASYNC("All async"); @@ -235,16 +246,16 @@ public static class RunConfiguration { public RunConfiguration() { configuration = "Release"; resultsFile = Optional.empty(); - dataSize = new int[] {20}; - concurrentTasks = new int[] {10, 100}; + dataSize = new int[] {100, 4000}; + concurrentTasks = new int[] {100, 1000}; clients = new ClientName[] { - // ClientName.BABUSHKA, + // ClientName.BABUSHKA_ASYNC, ClientName.JEDIS, ClientName.JEDIS_ASYNC, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC }; host = "localhost"; port = 6379; - clientCount = new int[] {1, 2}; + clientCount = new int[] {1}; tls = false; } } From 951aa8bf6863865a5f900a64536d4dea22c166fc Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Wed, 11 Oct 2023 12:40:15 -0700 Subject: [PATCH 30/81] Remove TLS flag argument from option Signed-off-by: acarbonetto --- .../src/main/java/javababushka/benchmarks/BenchmarkingApp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 9be52a5082..78dc2b5d86 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -104,7 +104,7 @@ private static Options getOptions() { options.addOption(Option.builder("port").hasArg(true).desc("Port number [6379]").build()); options.addOption( Option.builder("clientCount").hasArg(true).desc("Number of clients to run [1]").build()); - options.addOption(Option.builder("tls").hasArg(true).desc("TLS [false]").build()); + options.addOption(Option.builder("tls").hasArg(false).desc("TLS [false]").build()); return options; } From adc0bb6604d783b14550e5bdbf795012cd4804e6 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Tue, 10 Oct 2023 08:37:14 -0700 Subject: [PATCH 31/81] Add lettuce clients for benchmarking Signed-off-by: acarbonetto --- .../benchmarks/BenchmarkingApp.java | 11 +- .../benchmarks/clients/AsyncClient.java | 19 ++ .../benchmarks/clients/Client.java | 16 ++ .../clients/LettuceAsyncClient.java | 73 +++++ .../benchmarks/clients/LettuceClient.java | 56 ++++ .../benchmarks/clients/SyncClient.java | 10 + .../benchmarks/utils/Benchmarking.java | 260 ++++++++++++++++++ .../benchmarks/utils/ChosenAction.java | 10 + .../benchmarks/utils/ConnectionSettings.java | 16 ++ .../benchmarks/utils/LatencyResults.java | 21 ++ 10 files changed, 488 insertions(+), 4 deletions(-) create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/clients/Client.java create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceAsyncClient.java create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceClient.java create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/clients/SyncClient.java create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 78dc2b5d86..55b25dbb0d 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -1,10 +1,15 @@ package javababushka.benchmarks; +import static javababushka.benchmarks.utils.Benchmarking.testClientSetGet; + import java.io.FileWriter; import java.io.IOException; import java.util.Arrays; import java.util.Optional; import java.util.stream.Stream; +import javababushka.benchmarks.clients.LettuceClient; +import javababushka.benchmarks.clients.LettuceAsyncClient; +import javababushka.benchmarks.clients.LettuceClient; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; @@ -51,12 +56,10 @@ public static void main(String[] args) { System.out.println("Run JEDIS pseudo-async client"); break; case LETTUCE: - // run testClientSetGet on LETTUCE sync client - System.out.println("Run LETTUCE sync client"); + testClientSetGet(LettuceClient::new, runConfiguration, false); break; case LETTUCE_ASYNC: - // run testClientSetGet on LETTUCE async client - System.out.println("Run LETTUCE async client"); + testClientSetGet(LettuceAsyncClient::new, runConfiguration, true); break; case BABUSHKA_ASYNC: System.out.println("Babushka async not yet configured"); diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java new file mode 100644 index 0000000000..6413829eab --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java @@ -0,0 +1,19 @@ +package javababushka.benchmarks.clients; + +import java.util.concurrent.Future; + +/** + * A Redis client with async capabilities + */ +public interface AsyncClient extends Client { + + long DEFAULT_TIMEOUT = 1000; + + Future asyncSet(String key, String value); + + Future asyncGet(String key); + + T waitForResult(Future future); + + T waitForResult(Future future, long timeout); +} \ No newline at end of file diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/Client.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/Client.java new file mode 100644 index 0000000000..a3376ccbec --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/Client.java @@ -0,0 +1,16 @@ +package javababushka.benchmarks.clients; + +import javababushka.benchmarks.utils.ConnectionSettings; + +/** + * A Redis client interface + */ +public interface Client { + void connectToRedis(); + + void connectToRedis(ConnectionSettings connectionSettings); + + default void closeConnection() {} + + String getName(); +} \ No newline at end of file diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceAsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceAsyncClient.java new file mode 100644 index 0000000000..40cfd50543 --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceAsyncClient.java @@ -0,0 +1,73 @@ +package javababushka.benchmarks.clients; + +import io.lettuce.core.RedisClient; +import io.lettuce.core.RedisFuture; +import io.lettuce.core.api.StatefulRedisConnection; +import io.lettuce.core.api.async.RedisAsyncCommands; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import javababushka.benchmarks.utils.ConnectionSettings; + +/** + * A Lettuce client with async capabilities + * see: https://lettuce.io/ + */ +public class LettuceAsyncClient implements AsyncClient { + + RedisClient client; + RedisAsyncCommands asyncCommands; + StatefulRedisConnection connection; + + @Override + public void connectToRedis() { + connectToRedis(new ConnectionSettings("localhost", 6379, false)); + } + + @Override + public void connectToRedis(ConnectionSettings connectionSettings) { + client = + RedisClient.create( + String.format( + "%s://%s:%d", + connectionSettings.useSsl ? "rediss" : "redis", + connectionSettings.host, + connectionSettings.port)); + connection = client.connect(); + asyncCommands = connection.async(); + } + + @Override + public RedisFuture asyncSet(String key, String value) { + return asyncCommands.set(key, value); + } + + @Override + public RedisFuture asyncGet(String key) { + return asyncCommands.get(key); + } + + @Override + public Object waitForResult(Future future) { + return waitForResult(future, DEFAULT_TIMEOUT); + } + + @Override + public Object waitForResult(Future future, long timeoutMS) { + try { + return future.get(timeoutMS, TimeUnit.MILLISECONDS); + } catch (Exception ignored) { + return null; + } + } + + @Override + public void closeConnection() { + connection.close(); + client.shutdown(); + } + + @Override + public String getName() { + return "Lettuce Async"; + } +} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceClient.java new file mode 100644 index 0000000000..0ce80fac0f --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceClient.java @@ -0,0 +1,56 @@ +package javababushka.benchmarks.clients; + +import io.lettuce.core.RedisClient; +import io.lettuce.core.api.StatefulRedisConnection; +import io.lettuce.core.api.sync.RedisStringCommands; +import javababushka.benchmarks.utils.ConnectionSettings; + +/** + * A Lettuce client with sync capabilities + * see: https://lettuce.io/ + */ +public class LettuceClient implements SyncClient { + + RedisClient client; + RedisStringCommands syncCommands; + StatefulRedisConnection connection; + + @Override + public void connectToRedis() { + connectToRedis(new ConnectionSettings("localhost", 6379, false)); + } + + @Override + public void connectToRedis(ConnectionSettings connectionSettings) { + client = + RedisClient.create( + String.format( + "%s://%s:%d", + connectionSettings.useSsl ? "rediss" : "redis", + connectionSettings.host, + connectionSettings.port)); + connection = client.connect(); + syncCommands = connection.sync(); + } + + @Override + public void set(String key, String value) { + syncCommands.set(key, value); + } + + @Override + public String get(String key) { + return (String) syncCommands.get(key); + } + + @Override + public void closeConnection() { + connection.close(); + client.shutdown(); + } + + @Override + public String getName() { + return "Lettuce"; + } +} \ No newline at end of file diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/SyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/SyncClient.java new file mode 100644 index 0000000000..fa9ebd397e --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/SyncClient.java @@ -0,0 +1,10 @@ +package javababushka.benchmarks.clients; + +/** + * A Redis client with sync capabilities + */ +public interface SyncClient extends Client { + void set(String key, String value); + + String get(String key); +} \ No newline at end of file diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java new file mode 100644 index 0000000000..b73394a3eb --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -0,0 +1,260 @@ +package javababushka.benchmarks.utils; + +import java.io.FileWriter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import javababushka.benchmarks.clients.AsyncClient; +import javababushka.benchmarks.BenchmarkingApp; +import javababushka.benchmarks.clients.Client; +import javababushka.benchmarks.clients.SyncClient; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.tuple.Pair; + +/** + * Class to calculate latency on client-actions + */ +public class Benchmarking { + static final double PROB_GET = 0.8; + static final double PROB_GET_EXISTING_KEY = 0.8; + static final int SIZE_GET_KEYSPACE = 3750000; + static final int SIZE_SET_KEYSPACE = 3000000; + static final int ASYNC_OPERATION_TIMEOUT_SEC = 1; + + private static ChosenAction randomAction() { + if (Math.random() > PROB_GET) { + return ChosenAction.SET; + } + if (Math.random() > PROB_GET_EXISTING_KEY) { + return ChosenAction.GET_NON_EXISTING; + } + return ChosenAction.GET_EXISTING; + } + + public static String generateKeyGet() { + int range = SIZE_GET_KEYSPACE - SIZE_SET_KEYSPACE; + return Math.floor(Math.random() * range + SIZE_SET_KEYSPACE + 1) + ""; + } + + public static String generateKeySet() { + return (Math.floor(Math.random() * SIZE_SET_KEYSPACE) + 1) + ""; + } + + public interface Operation { + void go() throws Exception; + } + + private static Pair getLatency(Map actions) { + var action = randomAction(); + long before = System.nanoTime(); + try { + actions.get(action).go(); + } catch (Exception e) { + // timed out - exception from Future::get + } + long after = System.nanoTime(); + return Pair.of(action, after - before); + } + + // Assumption: latencies is sorted in ascending order + private static Long percentile(ArrayList latencies, int percentile) { + int N = latencies.size(); + double n = (N - 1) * percentile / 100. + 1; + if (n == 1d) return latencies.get(0); + else if (n == N) return latencies.get(N - 1); + int k = (int) n; + double d = n - k; + return Math.round(latencies.get(k - 1) + d * (latencies.get(k) - latencies.get(k - 1))); + } + + private static double stdDeviation(ArrayList latencies, Double avgLatency) { + double stdDeviation = + latencies.stream() + .mapToDouble(Long::doubleValue) + .reduce(0.0, (stdDev, latency) -> stdDev + Math.pow(latency - avgLatency, 2)); + return Math.sqrt(stdDeviation / latencies.size()); + } + + // This has the side-effect of sorting each latencies ArrayList + public static Map calculateResults( + Map> actionLatencies) { + Map results = new HashMap(); + + for (Map.Entry> entry : actionLatencies.entrySet()) { + ChosenAction action = entry.getKey(); + ArrayList latencies = entry.getValue(); + + Double avgLatency = + latencies.stream().collect(Collectors.summingLong(Long::longValue)) + / Double.valueOf(latencies.size()); + + Collections.sort(latencies); + results.put( + action, + new LatencyResults( + avgLatency, + percentile(latencies, 50), + percentile(latencies, 90), + percentile(latencies, 99), + stdDeviation(latencies, avgLatency))); + } + + return results; + } + + public static void printResults( + Map calculatedResults, Optional resultsFile) { + if (resultsFile.isPresent()) { + printResults(calculatedResults, resultsFile.get()); + } else { + printResults(calculatedResults); + } + } + + public static void printResults( + Map resultsMap, FileWriter resultsFile) { + for (Map.Entry entry : resultsMap.entrySet()) { + ChosenAction action = entry.getKey(); + LatencyResults results = entry.getValue(); + + try { + resultsFile.write("Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0); + resultsFile.write(action + " p50 latency in ms: " + results.p50Latency / 1000000.0); + resultsFile.write(action + " p90 latency in ms: " + results.p90Latency / 1000000.0); + resultsFile.write(action + " p99 latency in ms: " + results.p99Latency / 1000000.0); + resultsFile.write(action + " std dev in ms: " + results.stdDeviation / 1000000.0); + } catch (Exception ignored) { + } + } + } + + public static void printResults(Map resultsMap) { + for (Map.Entry entry : resultsMap.entrySet()) { + ChosenAction action = entry.getKey(); + LatencyResults results = entry.getValue(); + + System.out.println("Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0); + System.out.println(action + " p50 latency in ms: " + results.p50Latency / 1000000.0); + System.out.println(action + " p90 latency in ms: " + results.p90Latency / 1000000.0); + System.out.println(action + " p99 latency in ms: " + results.p99Latency / 1000000.0); + System.out.println(action + " std dev in ms: " + results.stdDeviation / 1000000.0); + } + } + + public static void testClientSetGet( + Supplier clientCreator, BenchmarkingApp.RunConfiguration config, boolean async) { + for (int concurrentNum : config.concurrentTasks) { + int iterations = Math.min(Math.max(100000, concurrentNum * 10000), 10000000); + for (int clientCount : config.clientCount) { + System.out.printf( + "%n =====> %s <===== %d clients %d concurrent %n%n", + clientCreator.get().getName(), clientCount, concurrentNum); + AtomicInteger iterationCounter = new AtomicInteger(0); + Map> actionResults = + Map.of( + ChosenAction.GET_EXISTING, new ArrayList<>(), + ChosenAction.GET_NON_EXISTING, new ArrayList<>(), + ChosenAction.SET, new ArrayList<>()); + List tasks = new ArrayList<>(); + + // create clients + List clients = new LinkedList<>(); + for (int cc = 0; cc < clientCount; cc++) { + Client newClient = clientCreator.get(); + newClient.connectToRedis(new ConnectionSettings(config.host, config.port, config.tls)); + clients.add(newClient); + } + + for (int taskNum = 0; taskNum < concurrentNum; taskNum++) { + final int taskNumDebugging = taskNum; + tasks.add( + () -> { + int iterationIncrement = iterationCounter.getAndIncrement(); + int clientIndex = iterationIncrement % clients.size(); + + if (config.debugLogging) { + System.out.printf( + "%n concurrent = %d/%d, client# = %d/%d%n", + taskNumDebugging, concurrentNum, clientIndex + 1, clientCount); + } + while (iterationIncrement < iterations) { + if (config.debugLogging) { + System.out.printf( + "> iteration = %d/%d, client# = %d/%d%n", + iterationIncrement + 1, iterations, clientIndex + 1, clientCount); + } + // operate and calculate tik-tok + Pair result = + measurePerformance(clients.get(clientIndex), config.dataSize, async); + actionResults.get(result.getLeft()).add(result.getRight()); + + iterationIncrement = iterationCounter.getAndIncrement(); + } + }); + } + if (config.debugLogging) { + System.out.printf("%s client Benchmarking: %n", clientCreator.get().getName()); + System.out.printf( + "===> concurrentNum = %d, clientNum = %d, tasks = %d%n", + concurrentNum, clientCount, tasks.size()); + } + tasks.stream() + .map(CompletableFuture::runAsync) + .forEach( + f -> { + try { + f.get(); + } catch (Exception e) { + e.printStackTrace(); + } + }); + + printResults(calculateResults(actionResults), config.resultsFile); + } + } + + System.out.println(); + } + + public static Pair measurePerformance( + Client client, int dataSize, boolean async) { + + String value = RandomStringUtils.randomAlphanumeric(dataSize); + Map actions = new HashMap<>(); + actions.put( + ChosenAction.GET_EXISTING, + async + ? () -> + ((AsyncClient) client) + .asyncGet(generateKeySet()) + .get(ASYNC_OPERATION_TIMEOUT_SEC, TimeUnit.SECONDS) + : () -> ((SyncClient) client).get(generateKeySet())); + actions.put( + ChosenAction.GET_NON_EXISTING, + async + ? () -> + ((AsyncClient) client) + .asyncGet(generateKeyGet()) + .get(ASYNC_OPERATION_TIMEOUT_SEC, TimeUnit.SECONDS) + : () -> ((SyncClient) client).get(generateKeyGet())); + actions.put( + ChosenAction.SET, + async + ? () -> + ((AsyncClient) client) + .asyncSet(generateKeySet(), value) + .get(ASYNC_OPERATION_TIMEOUT_SEC, TimeUnit.SECONDS) + : () -> ((SyncClient) client).set(generateKeySet(), value)); + + return getLatency(actions); + } +} \ No newline at end of file diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java new file mode 100644 index 0000000000..3cc685139e --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java @@ -0,0 +1,10 @@ +package javababushka.benchmarks.utils; + +/** + * enum for actions + */ +public enum ChosenAction { + GET_NON_EXISTING, + GET_EXISTING, + SET +} \ No newline at end of file diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java new file mode 100644 index 0000000000..f1aee3d06a --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java @@ -0,0 +1,16 @@ +package javababushka.benchmarks.utils; + +/** + * Redis-client settings + */ +public class ConnectionSettings { + public String host; + public int port; + public boolean useSsl; + + public ConnectionSettings(String host, int port, boolean useSsl) { + this.host = host; + this.port = port; + this.useSsl = useSsl; + } +} \ No newline at end of file diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java new file mode 100644 index 0000000000..054623b8f0 --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java @@ -0,0 +1,21 @@ +package javababushka.benchmarks.utils; + +/** + * Raw timing results in nanoseconds + */ +public class LatencyResults { + public final double avgLatency; + public final long p50Latency; + public final long p90Latency; + public final long p99Latency; + public final double stdDeviation; + + public LatencyResults( + double avgLatency, long p50Latency, long p90Latency, long p99Latency, double stdDeviation) { + this.avgLatency = avgLatency; + this.p50Latency = p50Latency; + this.p90Latency = p90Latency; + this.p99Latency = p99Latency; + this.stdDeviation = stdDeviation; + } +} \ No newline at end of file From 9fc90221cbf070c81f29f66bfd3f95bf6e8460b9 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Tue, 10 Oct 2023 08:39:15 -0700 Subject: [PATCH 32/81] Spotless apply Signed-off-by: acarbonetto --- .../benchmarks/BenchmarkingApp.java | 1 - .../benchmarks/clients/AsyncClient.java | 6 ++--- .../benchmarks/clients/Client.java | 6 ++--- .../clients/LettuceAsyncClient.java | 5 +--- .../benchmarks/clients/LettuceClient.java | 7 ++--- .../benchmarks/clients/SyncClient.java | 6 ++--- .../benchmarks/utils/Benchmarking.java | 26 +++++++++---------- .../benchmarks/utils/ChosenAction.java | 6 ++--- .../benchmarks/utils/ConnectionSettings.java | 6 ++--- .../benchmarks/utils/LatencyResults.java | 6 ++--- 10 files changed, 27 insertions(+), 48 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 55b25dbb0d..9756115cc1 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -7,7 +7,6 @@ import java.util.Arrays; import java.util.Optional; import java.util.stream.Stream; -import javababushka.benchmarks.clients.LettuceClient; import javababushka.benchmarks.clients.LettuceAsyncClient; import javababushka.benchmarks.clients.LettuceClient; import org.apache.commons.cli.CommandLine; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java index 6413829eab..f35a233cfa 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java @@ -2,9 +2,7 @@ import java.util.concurrent.Future; -/** - * A Redis client with async capabilities - */ +/** A Redis client with async capabilities */ public interface AsyncClient extends Client { long DEFAULT_TIMEOUT = 1000; @@ -16,4 +14,4 @@ public interface AsyncClient extends Client { T waitForResult(Future future); T waitForResult(Future future, long timeout); -} \ No newline at end of file +} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/Client.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/Client.java index a3376ccbec..d95f31f25d 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/Client.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/Client.java @@ -2,9 +2,7 @@ import javababushka.benchmarks.utils.ConnectionSettings; -/** - * A Redis client interface - */ +/** A Redis client interface */ public interface Client { void connectToRedis(); @@ -13,4 +11,4 @@ public interface Client { default void closeConnection() {} String getName(); -} \ No newline at end of file +} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceAsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceAsyncClient.java index 40cfd50543..7251953845 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceAsyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceAsyncClient.java @@ -8,10 +8,7 @@ import java.util.concurrent.TimeUnit; import javababushka.benchmarks.utils.ConnectionSettings; -/** - * A Lettuce client with async capabilities - * see: https://lettuce.io/ - */ +/** A Lettuce client with async capabilities see: https://lettuce.io/ */ public class LettuceAsyncClient implements AsyncClient { RedisClient client; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceClient.java index 0ce80fac0f..674fb729b0 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceClient.java @@ -5,10 +5,7 @@ import io.lettuce.core.api.sync.RedisStringCommands; import javababushka.benchmarks.utils.ConnectionSettings; -/** - * A Lettuce client with sync capabilities - * see: https://lettuce.io/ - */ +/** A Lettuce client with sync capabilities see: https://lettuce.io/ */ public class LettuceClient implements SyncClient { RedisClient client; @@ -53,4 +50,4 @@ public void closeConnection() { public String getName() { return "Lettuce"; } -} \ No newline at end of file +} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/SyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/SyncClient.java index fa9ebd397e..603f91e936 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/SyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/SyncClient.java @@ -1,10 +1,8 @@ package javababushka.benchmarks.clients; -/** - * A Redis client with sync capabilities - */ +/** A Redis client with sync capabilities */ public interface SyncClient extends Client { void set(String key, String value); String get(String key); -} \ No newline at end of file +} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index b73394a3eb..6956944fd0 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -13,16 +13,14 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; import java.util.stream.Collectors; -import javababushka.benchmarks.clients.AsyncClient; import javababushka.benchmarks.BenchmarkingApp; +import javababushka.benchmarks.clients.AsyncClient; import javababushka.benchmarks.clients.Client; import javababushka.benchmarks.clients.SyncClient; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.tuple.Pair; -/** - * Class to calculate latency on client-actions - */ +/** Class to calculate latency on client-actions */ public class Benchmarking { static final double PROB_GET = 0.8; static final double PROB_GET_EXISTING_KEY = 0.8; @@ -234,27 +232,27 @@ public static Pair measurePerformance( ChosenAction.GET_EXISTING, async ? () -> - ((AsyncClient) client) - .asyncGet(generateKeySet()) - .get(ASYNC_OPERATION_TIMEOUT_SEC, TimeUnit.SECONDS) + ((AsyncClient) client) + .asyncGet(generateKeySet()) + .get(ASYNC_OPERATION_TIMEOUT_SEC, TimeUnit.SECONDS) : () -> ((SyncClient) client).get(generateKeySet())); actions.put( ChosenAction.GET_NON_EXISTING, async ? () -> - ((AsyncClient) client) - .asyncGet(generateKeyGet()) - .get(ASYNC_OPERATION_TIMEOUT_SEC, TimeUnit.SECONDS) + ((AsyncClient) client) + .asyncGet(generateKeyGet()) + .get(ASYNC_OPERATION_TIMEOUT_SEC, TimeUnit.SECONDS) : () -> ((SyncClient) client).get(generateKeyGet())); actions.put( ChosenAction.SET, async ? () -> - ((AsyncClient) client) - .asyncSet(generateKeySet(), value) - .get(ASYNC_OPERATION_TIMEOUT_SEC, TimeUnit.SECONDS) + ((AsyncClient) client) + .asyncSet(generateKeySet(), value) + .get(ASYNC_OPERATION_TIMEOUT_SEC, TimeUnit.SECONDS) : () -> ((SyncClient) client).set(generateKeySet(), value)); return getLatency(actions); } -} \ No newline at end of file +} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java index 3cc685139e..b6bfe118ee 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java @@ -1,10 +1,8 @@ package javababushka.benchmarks.utils; -/** - * enum for actions - */ +/** enum for actions */ public enum ChosenAction { GET_NON_EXISTING, GET_EXISTING, SET -} \ No newline at end of file +} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java index f1aee3d06a..1866908835 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java @@ -1,8 +1,6 @@ package javababushka.benchmarks.utils; -/** - * Redis-client settings - */ +/** Redis-client settings */ public class ConnectionSettings { public String host; public int port; @@ -13,4 +11,4 @@ public ConnectionSettings(String host, int port, boolean useSsl) { this.port = port; this.useSsl = useSsl; } -} \ No newline at end of file +} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java index 054623b8f0..4f62f840c0 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java @@ -1,8 +1,6 @@ package javababushka.benchmarks.utils; -/** - * Raw timing results in nanoseconds - */ +/** Raw timing results in nanoseconds */ public class LatencyResults { public final double avgLatency; public final long p50Latency; @@ -18,4 +16,4 @@ public LatencyResults( this.p99Latency = p99Latency; this.stdDeviation = stdDeviation; } -} \ No newline at end of file +} From 111fc26eb135fc9997df3bdda98eb9672d772590 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Tue, 10 Oct 2023 09:59:17 -0700 Subject: [PATCH 33/81] Add Jedis clients Signed-off-by: acarbonetto --- .../benchmarks/clients/JedisClient.java | 58 +++++++++++++++++++ .../clients/JedisPseudoAsyncClient.java | 42 ++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisClient.java create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisPseudoAsyncClient.java diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisClient.java new file mode 100644 index 0000000000..d48e0eeeea --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisClient.java @@ -0,0 +1,58 @@ +package javababushka.benchmarks.clients; + +import javababushka.benchmarks.utils.ConnectionSettings; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; + +/** A jedis client with sync capabilities. See: https://github.com/redis/jedis */ +public class JedisClient implements SyncClient { + + public static final String DEFAULT_HOST = "localhost"; + public static final int DEFAULT_PORT = 6379; + + protected Jedis jedisResource; + + @Override + public void connectToRedis() { + JedisPool pool = new JedisPool(DEFAULT_HOST, DEFAULT_PORT); + jedisResource = pool.getResource(); + } + + @Override + public void closeConnection() { + try { + jedisResource.close(); + } catch (Exception ignored) { + } + } + + @Override + public String getName() { + return "Jedis"; + } + + @Override + public void connectToRedis(ConnectionSettings connectionSettings) { + jedisResource = + new Jedis(connectionSettings.host, connectionSettings.port, connectionSettings.useSsl); + jedisResource.connect(); + } + + public String info() { + return jedisResource.info(); + } + + public String info(String section) { + return jedisResource.info(section); + } + + @Override + public void set(String key, String value) { + jedisResource.set(key, value); + } + + @Override + public String get(String key) { + return jedisResource.get(key); + } +} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisPseudoAsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisPseudoAsyncClient.java new file mode 100644 index 0000000000..1aff543c6f --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisPseudoAsyncClient.java @@ -0,0 +1,42 @@ +package javababushka.benchmarks.clients; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +/** + * A jedis client with pseudo-sync capabilities. Jedis doesn't provide async API + * https://github.com/redis/jedis/issues/241 + * + *

See: https://github.com/redis/jedis + */ +public class JedisPseudoAsyncClient extends JedisClient implements AsyncClient { + @Override + public Future asyncSet(String key, String value) { + return CompletableFuture.runAsync(() -> super.set(key, value)); + } + + @Override + public Future asyncGet(String key) { + return CompletableFuture.supplyAsync(() -> super.get(key)); + } + + @Override + public T waitForResult(Future future) { + return waitForResult(future, DEFAULT_TIMEOUT); + } + + @Override + public T waitForResult(Future future, long timeout) { + try { + return future.get(timeout, TimeUnit.MILLISECONDS); + } catch (Exception ignored) { + return null; + } + } + + @Override + public String getName() { + return "Jedis pseudo-async"; + } +} From 9236e9a4d09434a0a6cf808ad83be859d684aa1b Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Tue, 10 Oct 2023 10:00:29 -0700 Subject: [PATCH 34/81] Add to app Signed-off-by: acarbonetto --- .../main/java/javababushka/benchmarks/BenchmarkingApp.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 9756115cc1..a94438e96d 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -7,6 +7,8 @@ import java.util.Arrays; import java.util.Optional; import java.util.stream.Stream; +import javababushka.benchmarks.clients.JedisClient; +import javababushka.benchmarks.clients.JedisPseudoAsyncClient; import javababushka.benchmarks.clients.LettuceAsyncClient; import javababushka.benchmarks.clients.LettuceClient; import org.apache.commons.cli.CommandLine; @@ -48,11 +50,11 @@ public static void main(String[] args) { switch (client) { case JEDIS: // run testClientSetGet on JEDIS sync client - System.out.println("Run JEDIS sync client"); + testClientSetGet(JedisClient::new, runConfiguration, false); break; case JEDIS_ASYNC: // run testClientSetGet on JEDIS pseudo-async client - System.out.println("Run JEDIS pseudo-async client"); + testClientSetGet(JedisPseudoAsyncClient::new, runConfiguration, true); break; case LETTUCE: testClientSetGet(LettuceClient::new, runConfiguration, false); From 49654c3f36fd1a445e80703ffcc1777da75ad7df Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Tue, 10 Oct 2023 15:54:39 -0700 Subject: [PATCH 35/81] Add for-loop for data size list Signed-off-by: acarbonetto --- .../benchmarks/utils/Benchmarking.java | 147 ++++++++++-------- 1 file changed, 82 insertions(+), 65 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 6956944fd0..fc1a2a7fce 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -27,6 +27,10 @@ public class Benchmarking { static final int SIZE_GET_KEYSPACE = 3750000; static final int SIZE_SET_KEYSPACE = 3000000; static final int ASYNC_OPERATION_TIMEOUT_SEC = 1; + static final double LATENCY_NORMALIZATION = 1000000.0; + static final int LATENCY_MIN = 100000; + static final int LATENCY_MAX = 10000000; + static final int LATENCY_MULTIPLIER = 10000; private static ChosenAction randomAction() { if (Math.random() > PROB_GET) { @@ -125,11 +129,16 @@ public static void printResults( LatencyResults results = entry.getValue(); try { - resultsFile.write("Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0); - resultsFile.write(action + " p50 latency in ms: " + results.p50Latency / 1000000.0); - resultsFile.write(action + " p90 latency in ms: " + results.p90Latency / 1000000.0); - resultsFile.write(action + " p99 latency in ms: " + results.p99Latency / 1000000.0); - resultsFile.write(action + " std dev in ms: " + results.stdDeviation / 1000000.0); + resultsFile.write( + "Avg. time in ms per " + action + ": " + results.avgLatency / LATENCY_NORMALIZATION); + resultsFile.write( + action + " p50 latency in ms: " + results.p50Latency / LATENCY_NORMALIZATION); + resultsFile.write( + action + " p90 latency in ms: " + results.p90Latency / LATENCY_NORMALIZATION); + resultsFile.write( + action + " p99 latency in ms: " + results.p99Latency / LATENCY_NORMALIZATION); + resultsFile.write( + action + " std dev in ms: " + results.stdDeviation / LATENCY_NORMALIZATION); } catch (Exception ignored) { } } @@ -140,83 +149,91 @@ public static void printResults(Map resultsMap) { ChosenAction action = entry.getKey(); LatencyResults results = entry.getValue(); - System.out.println("Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0); - System.out.println(action + " p50 latency in ms: " + results.p50Latency / 1000000.0); - System.out.println(action + " p90 latency in ms: " + results.p90Latency / 1000000.0); - System.out.println(action + " p99 latency in ms: " + results.p99Latency / 1000000.0); - System.out.println(action + " std dev in ms: " + results.stdDeviation / 1000000.0); + System.out.println( + "Avg. time in ms per " + action + ": " + results.avgLatency / LATENCY_NORMALIZATION); + System.out.println( + action + " p50 latency in ms: " + results.p50Latency / LATENCY_NORMALIZATION); + System.out.println( + action + " p90 latency in ms: " + results.p90Latency / LATENCY_NORMALIZATION); + System.out.println( + action + " p99 latency in ms: " + results.p99Latency / LATENCY_NORMALIZATION); + System.out.println( + action + " std dev in ms: " + results.stdDeviation / LATENCY_NORMALIZATION); } } public static void testClientSetGet( Supplier clientCreator, BenchmarkingApp.RunConfiguration config, boolean async) { for (int concurrentNum : config.concurrentTasks) { - int iterations = Math.min(Math.max(100000, concurrentNum * 10000), 10000000); + int iterations = + Math.min(Math.max(LATENCY_MIN, concurrentNum * LATENCY_MULTIPLIER), LATENCY_MAX); for (int clientCount : config.clientCount) { - System.out.printf( - "%n =====> %s <===== %d clients %d concurrent %n%n", - clientCreator.get().getName(), clientCount, concurrentNum); - AtomicInteger iterationCounter = new AtomicInteger(0); - Map> actionResults = - Map.of( - ChosenAction.GET_EXISTING, new ArrayList<>(), - ChosenAction.GET_NON_EXISTING, new ArrayList<>(), - ChosenAction.SET, new ArrayList<>()); - List tasks = new ArrayList<>(); + for (int dataSize : config.dataSize) { + System.out.printf( + "%n =====> %s <===== %d clients %d concurrent %d data %n%n", + clientCreator.get().getName(), clientCount, concurrentNum, dataSize); + AtomicInteger iterationCounter = new AtomicInteger(0); + Map> actionResults = + Map.of( + ChosenAction.GET_EXISTING, new ArrayList<>(), + ChosenAction.GET_NON_EXISTING, new ArrayList<>(), + ChosenAction.SET, new ArrayList<>()); + List tasks = new ArrayList<>(); - // create clients - List clients = new LinkedList<>(); - for (int cc = 0; cc < clientCount; cc++) { - Client newClient = clientCreator.get(); - newClient.connectToRedis(new ConnectionSettings(config.host, config.port, config.tls)); - clients.add(newClient); - } + // create clients + List clients = new LinkedList<>(); + for (int cc = 0; cc < clientCount; cc++) { + Client newClient = clientCreator.get(); + newClient.connectToRedis(new ConnectionSettings(config.host, config.port, config.tls)); + clients.add(newClient); + } - for (int taskNum = 0; taskNum < concurrentNum; taskNum++) { - final int taskNumDebugging = taskNum; - tasks.add( - () -> { - int iterationIncrement = iterationCounter.getAndIncrement(); - int clientIndex = iterationIncrement % clients.size(); + for (int taskNum = 0; taskNum < concurrentNum; taskNum++) { + final int taskNumDebugging = taskNum; + tasks.add( + () -> { + int iterationIncrement = iterationCounter.getAndIncrement(); + int clientIndex = iterationIncrement % clients.size(); - if (config.debugLogging) { - System.out.printf( - "%n concurrent = %d/%d, client# = %d/%d%n", - taskNumDebugging, concurrentNum, clientIndex + 1, clientCount); - } - while (iterationIncrement < iterations) { if (config.debugLogging) { System.out.printf( - "> iteration = %d/%d, client# = %d/%d%n", - iterationIncrement + 1, iterations, clientIndex + 1, clientCount); + "%n concurrent = %d/%d, client# = %d/%d%n", + taskNumDebugging, concurrentNum, clientIndex + 1, clientCount); } - // operate and calculate tik-tok - Pair result = - measurePerformance(clients.get(clientIndex), config.dataSize, async); - actionResults.get(result.getLeft()).add(result.getRight()); + while (iterationIncrement < iterations) { + if (config.debugLogging) { + System.out.printf( + "> iteration = %d/%d, client# = %d/%d%n", + iterationIncrement + 1, iterations, clientIndex + 1, clientCount); + } + // operate and calculate tik-tok + Pair result = + measurePerformance(clients.get(clientIndex), dataSize, async); + actionResults.get(result.getLeft()).add(result.getRight()); - iterationIncrement = iterationCounter.getAndIncrement(); - } - }); - } - if (config.debugLogging) { - System.out.printf("%s client Benchmarking: %n", clientCreator.get().getName()); - System.out.printf( - "===> concurrentNum = %d, clientNum = %d, tasks = %d%n", - concurrentNum, clientCount, tasks.size()); - } - tasks.stream() - .map(CompletableFuture::runAsync) - .forEach( - f -> { - try { - f.get(); - } catch (Exception e) { - e.printStackTrace(); + iterationIncrement = iterationCounter.getAndIncrement(); } }); + } + if (config.debugLogging) { + System.out.printf("%s client Benchmarking: %n", clientCreator.get().getName()); + System.out.printf( + "===> concurrentNum = %d, clientNum = %d, tasks = %d%n", + concurrentNum, clientCount, tasks.size()); + } + tasks.stream() + .map(CompletableFuture::runAsync) + .forEach( + f -> { + try { + f.get(); + } catch (Exception e) { + e.printStackTrace(); + } + }); - printResults(calculateResults(actionResults), config.resultsFile); + printResults(calculateResults(actionResults), config.resultsFile); + } } } From b3284c1b5864618281a8cfe49ef3640a85f0a8d5 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Wed, 11 Oct 2023 13:42:30 -0700 Subject: [PATCH 36/81] Add TPS for all async items Signed-off-by: acarbonetto --- .../benchmarks/utils/Benchmarking.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index fc1a2a7fce..70f17facec 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -1,6 +1,7 @@ package javababushka.benchmarks.utils; import java.io.FileWriter; +import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -221,6 +222,7 @@ public static void testClientSetGet( "===> concurrentNum = %d, clientNum = %d, tasks = %d%n", concurrentNum, clientCount, tasks.size()); } + long before = System.nanoTime(); tasks.stream() .map(CompletableFuture::runAsync) .forEach( @@ -231,8 +233,22 @@ public static void testClientSetGet( e.printStackTrace(); } }); + long after = System.nanoTime(); + // print results per action printResults(calculateResults(actionResults), config.resultsFile); + + // print TPS + if (config.resultsFile.isPresent()) { + try { + config.resultsFile.get().append( + "Avg. time in ms: " + (after - before) / iterations / LATENCY_NORMALIZATION); + } catch (IOException ignored) { + } + } else { + System.out.println( + "Avg. time in ms: " + (after - before) / iterations / LATENCY_NORMALIZATION); + } } } } From 8f1dfa5e59429ffb44e4efcb2e3ff1eb8335744c Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Wed, 11 Oct 2023 13:43:45 -0700 Subject: [PATCH 37/81] spotless apply Signed-off-by: acarbonetto --- .../java/javababushka/benchmarks/utils/Benchmarking.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 70f17facec..1bd05b3993 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -241,8 +241,11 @@ public static void testClientSetGet( // print TPS if (config.resultsFile.isPresent()) { try { - config.resultsFile.get().append( - "Avg. time in ms: " + (after - before) / iterations / LATENCY_NORMALIZATION); + config + .resultsFile + .get() + .append( + "Avg. time in ms: " + (after - before) / iterations / LATENCY_NORMALIZATION); } catch (IOException ignored) { } } else { From 7f690cf2a0475fb7799e41f2876b040ca2ef7585 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Wed, 11 Oct 2023 14:19:13 -0700 Subject: [PATCH 38/81] Fix TPS calculations Signed-off-by: acarbonetto --- .../benchmarks/utils/Benchmarking.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 1bd05b3993..1289c29c58 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -32,6 +32,7 @@ public class Benchmarking { static final int LATENCY_MIN = 100000; static final int LATENCY_MAX = 10000000; static final int LATENCY_MULTIPLIER = 10000; + static final double TPS_NORMALIZATION = 1000000000.0; // nano to seconds private static ChosenAction randomAction() { if (Math.random() > PROB_GET) { @@ -130,15 +131,15 @@ public static void printResults( LatencyResults results = entry.getValue(); try { - resultsFile.write( + resultsFile.append( "Avg. time in ms per " + action + ": " + results.avgLatency / LATENCY_NORMALIZATION); - resultsFile.write( + resultsFile.append( action + " p50 latency in ms: " + results.p50Latency / LATENCY_NORMALIZATION); - resultsFile.write( + resultsFile.append( action + " p90 latency in ms: " + results.p90Latency / LATENCY_NORMALIZATION); - resultsFile.write( + resultsFile.append( action + " p99 latency in ms: " + results.p99Latency / LATENCY_NORMALIZATION); - resultsFile.write( + resultsFile.append( action + " std dev in ms: " + results.stdDeviation / LATENCY_NORMALIZATION); } catch (Exception ignored) { } @@ -244,13 +245,13 @@ public static void testClientSetGet( config .resultsFile .get() - .append( - "Avg. time in ms: " + (after - before) / iterations / LATENCY_NORMALIZATION); + .append("TPS: %s%n" + (iterations / ((after - before) / TPS_NORMALIZATION))); } catch (IOException ignored) { } } else { - System.out.println( - "Avg. time in ms: " + (after - before) / iterations / LATENCY_NORMALIZATION); + System.out.println("Runtime: " + ((after - before) / TPS_NORMALIZATION)); + System.out.println("Iterations: " + iterations); + System.out.printf("TPS: %s%n", (iterations / ((after - before) / TPS_NORMALIZATION))); } } } From d00a655564465ca063fa4bbf032e5bec7bdf3a65 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Wed, 11 Oct 2023 14:34:55 -0700 Subject: [PATCH 39/81] Accept TLS as a flag Signed-off-by: acarbonetto --- .../main/java/javababushka/benchmarks/BenchmarkingApp.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 78dc2b5d86..ae87c269f7 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -183,9 +183,7 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce runConfiguration.dataSize = parseIntListOption(line.getOptionValue("dataSize")); } - if (line.hasOption("tls")) { - runConfiguration.tls = Boolean.parseBoolean(line.getOptionValue("tls")); - } + runConfiguration.tls = line.hasOption("tls"); return runConfiguration; } From 8dcfec0cb398611ed4b4d14774b6f7cddd055276 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Thu, 12 Oct 2023 11:11:34 -0700 Subject: [PATCH 40/81] Start threads; then wait for results Signed-off-by: acarbonetto --- .../benchmarks/utils/Benchmarking.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 1289c29c58..646ee4a809 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -224,16 +224,26 @@ public static void testClientSetGet( concurrentNum, clientCount, tasks.size()); } long before = System.nanoTime(); - tasks.stream() - .map(CompletableFuture::runAsync) - .forEach( - f -> { - try { - f.get(); - } catch (Exception e) { - e.printStackTrace(); - } - }); + + // create threads and add them to the asyncpool. + // This will start execution of all the concurrent tasks. + List asyncTasks = + tasks.stream().map(CompletableFuture::runAsync).collect(Collectors.toList()); + try { + // wait 1 second before waiting for threads to complete + Thread.sleep(1000); + } catch (InterruptedException interruptedException) { + interruptedException.printStackTrace(); + } + // wait for all futures to complete + asyncTasks.forEach( + future -> { + try { + future.get(); + } catch (Exception e) { + e.printStackTrace(); + } + }); long after = System.nanoTime(); // print results per action From a615f8ae6ecb963f52abec7ba0154fc9c4502c36 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Wed, 18 Oct 2023 13:00:17 -0700 Subject: [PATCH 41/81] Add java-jni client Signed-off-by: acarbonetto --- java/Cargo.toml | 2 +- java/benchmarks/build.gradle | 4 + java/benchmarks/hs_err_pid70704.log | 898 +++ .../benchmarks/BenchmarkingApp.java | 5 + .../benchmarks/clients/JniSyncClient.java | 307 + .../benchmarks/utils/Benchmarking.java | 6 +- .../benchmarks/utils/LatencyResults.java | 5 +- .../client/ConnectionRequestOuterClass.java | 4289 ++++++++++ .../java/javababushka/client/RedisClient.java | 27 + .../client/RedisRequestOuterClass.java | 6972 +++++++++++++++++ .../client/ResponseOuterClass.java | 2283 ++++++ java/src/lib.rs | 76 + 12 files changed, 14871 insertions(+), 3 deletions(-) create mode 100644 java/benchmarks/hs_err_pid70704.log create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java create mode 100644 java/benchmarks/src/main/java/javababushka/client/ConnectionRequestOuterClass.java create mode 100644 java/benchmarks/src/main/java/javababushka/client/RedisClient.java create mode 100644 java/benchmarks/src/main/java/javababushka/client/RedisRequestOuterClass.java create mode 100644 java/benchmarks/src/main/java/javababushka/client/ResponseOuterClass.java diff --git a/java/Cargo.toml b/java/Cargo.toml index 8046f3578c..197bb4d4bc 100644 --- a/java/Cargo.toml +++ b/java/Cargo.toml @@ -1,4 +1,3 @@ - [package] name = "javababushka" version = "0.0.0" @@ -16,6 +15,7 @@ babushka = { path = "../babushka-core" } tokio = { version = "^1", features = ["rt", "macros", "rt-multi-thread", "time"] } logger_core = {path = "../logger_core"} tracing-subscriber = "0.3.16" +jni = "0.21.1" [profile.release] lto = true diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle index 8d9e500284..1fb3c2a7e1 100644 --- a/java/benchmarks/build.gradle +++ b/java/benchmarks/build.gradle @@ -18,6 +18,9 @@ dependencies { implementation 'io.lettuce:lettuce-core:6.2.6.RELEASE' implementation 'commons-cli:commons-cli:1.5.0' implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.13.0' + + // https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java + implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.24.3' } // Apply a specific Java toolchain to ease working on different environments. @@ -30,6 +33,7 @@ java { application { // Define the main class for the application. mainClass = 'javababushka.benchmarks.BenchmarkingApp' + applicationDefaultJvmArgs += "-Djava.library.path=${projectDir}/../target/debug" } tasks.withType(Test) { diff --git a/java/benchmarks/hs_err_pid70704.log b/java/benchmarks/hs_err_pid70704.log new file mode 100644 index 0000000000..1916741072 --- /dev/null +++ b/java/benchmarks/hs_err_pid70704.log @@ -0,0 +1,898 @@ +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x000000013000c7b0, pid=70704, tid=8451 +# +# JRE version: OpenJDK Runtime Environment Corretto-17.0.3.6.1 (17.0.3+6) (build 17.0.3+6-LTS) +# Java VM: OpenJDK 64-Bit Server VM Corretto-17.0.3.6.1 (17.0.3+6-LTS, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, bsd-aarch64) +# Problematic frame: +# C [libjavababushka.dylib+0xc7b0] Java_javababushka_client_RedisClient_valueFromPointer+0x50 +# +# No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again +# +# If you would like to submit a bug report, please visit: +# https://github.com/corretto/corretto-17/issues/ +# The crash happened outside the Java Virtual Machine in native code. +# See problematic frame for where to report the bug. +# + +--------------- S U M M A R Y ------------ + +Command Line: -Djava.library.path=/Users/andrewc/git/bq/babushka-go/java/benchmarks/../target/debug -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant javababushka.benchmarks.BenchmarkingApp -clients babushka_jni -dataSize 10 -concurrentTasks 1 -clientCount 1 + +Host: "MacBookPro18,2" arm64, 10 cores, 64G, Darwin 22.6.0, macOS 13.6 (22G120) +Time: Wed Oct 18 12:45:41 2023 PDT elapsed time: 0.328538 seconds (0d 0h 0m 0s) + +--------------- T H R E A D --------------- + +Current thread (0x0000000137808200): JavaThread "main" [_thread_in_native, id=8451, stack(0x000000016f8d0000,0x000000016fad3000)] + +Stack: [0x000000016f8d0000,0x000000016fad3000], sp=0x000000016fad2800, free space=2058k +Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) +C [libjavababushka.dylib+0xc7b0] Java_javababushka_client_RedisClient_valueFromPointer+0x50 +j javababushka.client.RedisClient.valueFromPointer(J)Ljava/lang/Object;+0 +j javababushka.benchmarks.clients.JniSyncClient.connectToRedis(Ljavababushka/benchmarks/utils/ConnectionSettings;)V+12 +j javababushka.benchmarks.utils.Benchmarking.testClientSetGet(Ljava/util/function/Supplier;Ljavababushka/benchmarks/BenchmarkingApp$RunConfiguration;Z)V+261 +j javababushka.benchmarks.BenchmarkingApp.main([Ljava/lang/String;)V+219 +v ~StubRoutines::call_stub +V [libjvm.dylib+0x46bf5c] JavaCalls::call_helper(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*)+0x390 +V [libjvm.dylib+0x4d0898] jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, JavaThread*)+0x110 +V [libjvm.dylib+0x4d3f1c] jni_CallStaticVoidMethod+0x130 +C [libjli.dylib+0x5310] JavaMain+0xa80 +C [libjli.dylib+0x7608] ThreadJavaMain+0xc +C [libsystem_pthread.dylib+0x6fa8] _pthread_start+0x94 + +Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) +j javababushka.client.RedisClient.valueFromPointer(J)Ljava/lang/Object;+0 +j javababushka.benchmarks.clients.JniSyncClient.connectToRedis(Ljavababushka/benchmarks/utils/ConnectionSettings;)V+12 +j javababushka.benchmarks.utils.Benchmarking.testClientSetGet(Ljava/util/function/Supplier;Ljavababushka/benchmarks/BenchmarkingApp$RunConfiguration;Z)V+261 +j javababushka.benchmarks.BenchmarkingApp.main([Ljava/lang/String;)V+219 +v ~StubRoutines::call_stub + +siginfo: si_signo: 11 (SIGSEGV), si_code: 2 (SEGV_ACCERR), si_addr: 0x0000000000000000 + +Register to memory mapping: + + x0=0x00000001378084a8 points into unknown readable memory: 0x00000001022f28c8 | c8 28 2f 02 01 00 00 00 + x1=0x000000016fad2908 is pointing into the stack for thread: 0x0000000137808200 + x2=0x0 is NULL + x3=0x0 is NULL + x4=0x0000000000000001 is an unknown value + x5=0x0 is NULL + x6=0x00000000000000d6 is an unknown value + x7=0x0000000137808200 is a thread + x8=0x0 is NULL + x9=0x0000000137808538 points into unknown readable memory: 0x0000000000000004 | 04 00 00 00 00 00 00 00 +x10=0x000000013000c760: Java_javababushka_client_RedisClient_valueFromPointer+0 in /Users/andrewc/git/bq/babushka-go/java/target/debug/libjavababushka.dylib at 0x0000000130000000 +x11=0x0000000000000002 is an unknown value +x12={method} {0x0000000122424fc8} 'valueFromPointer' '(J)Ljava/lang/Object;' in 'javababushka/client/RedisClient' +x13={method} {0x0000000122424fc8} 'valueFromPointer' '(J)Ljava/lang/Object;' in 'javababushka/client/RedisClient' +x14=0x000000009aa4306a is an unknown value +x15=0x000000009a842ffb is an unknown value +x16=0x000000019a414d04: pthread_jit_write_protect_np+0 in /usr/lib/system/libsystem_pthread.dylib at 0x000000019a40d000 +x17=0x000000043fa3c270 is an oop: java.lang.Class +{0x000000043fa3c270} - klass: 'java/lang/Class' + - ---- fields (total size 14 words): + - private volatile transient 'classRedefinedCount' 'I' @12 0 + - private volatile transient 'cachedConstructor' 'Ljava/lang/reflect/Constructor;' @40 NULL (0) + - private transient 'name' 'Ljava/lang/String;' @44 "javababushka.client.RedisClient"{0x000000043fa3c2f0} (87f4785e) + - private transient 'module' 'Ljava/lang/Module;' @48 a 'java/lang/Module'{0x00000007ff7571e8} (ffeeae3d) + - private final 'classLoader' 'Ljava/lang/ClassLoader;' @52 a 'jdk/internal/loader/ClassLoaders$AppClassLoader'{0x00000007ff756a60} (ffeead4c) + - private transient 'classData' 'Ljava/lang/Object;' @56 NULL (0) + - private transient 'packageName' 'Ljava/lang/String;' @60 "javababushka.client"{0x000000043fa3b420} (87f47684) + - private final 'componentType' 'Ljava/lang/Class;' @64 NULL (0) + - private volatile transient 'reflectionData' 'Ljava/lang/ref/SoftReference;' @68 NULL (0) + - private volatile transient 'genericInfo' 'Lsun/reflect/generics/repository/ClassRepository;' @72 NULL (0) + - private volatile transient 'enumConstants' '[Ljava/lang/Object;' @76 NULL (0) + - private volatile transient 'enumConstantDirectory' 'Ljava/util/Map;' @80 NULL (0) + - private volatile transient 'annotationData' 'Ljava/lang/Class$AnnotationData;' @84 NULL (0) + - private volatile transient 'annotationType' 'Lsun/reflect/annotation/AnnotationType;' @88 NULL (0) + - transient 'classValueMap' 'Ljava/lang/ClassValue$ClassValueMap;' @92 NULL (0) + - signature: Ljavababushka/client/RedisClient; + - fake entry for mirror: 'javababushka/client/RedisClient' + - fake entry for array: NULL + - fake entry for oop_size: 14 + - fake entry for static_oop_field_count: 0 +x18=0x0 is NULL +x19=0x000000010a16773c is at code_begin+60 in an Interpreter codelet +result handlers for native calls [0x000000010a167700, 0x000000010a167780] 128 bytes +x20=0x000000016fad2890 is pointing into the stack for thread: 0x0000000137808200 +x21=0x0000000102340458: _ZN19TemplateInterpreter13_active_tableE+0 in /Users/andrewc/Library/Java/JavaVirtualMachines/corretto-17.0.3/Contents/Home/lib/server/libjvm.dylib at 0x00000001016d8000 +x22=0x0 is NULL +x23=0x000000010a1687c0 is at code_begin+0 in an Interpreter codelet +method entry point (kind = zerolocals) [0x000000010a1687c0, 0x000000010a168ac0] 768 bytes +x24=0x000000016fad2918 is pointing into the stack for thread: 0x0000000137808200 +x25=0x0000000000000001 is an unknown value +x26=0x0000000122425298 is pointing into metadata +x27=0x0 is NULL +x28=0x0000000137808200 is a thread + + +Registers: + x0=0x00000001378084a8 x1=0x000000016fad2908 x2=0x0000000000000000 x3=0x0000000000000000 + x4=0x0000000000000001 x5=0x0000000000000000 x6=0x00000000000000d6 x7=0x0000000137808200 + x8=0x0000000000000000 x9=0x0000000137808538 x10=0x000000013000c760 x11=0x0000000000000002 +x12=0x0000000122424fc8 x13=0x0000000122424fc8 x14=0x000000009aa4306a x15=0x000000009a842ffb +x16=0x000000019a414d04 x17=0x000000043fa3c270 x18=0x0000000000000000 x19=0x000000010a16773c +x20=0x000000016fad2890 x21=0x0000000102340458 x22=0x0000000000000000 x23=0x000000010a1687c0 +x24=0x000000016fad2918 x25=0x0000000000000001 x26=0x0000000122425298 x27=0x0000000000000000 +x28=0x0000000137808200 fp=0x000000016fad2880 lr=0x000000013000c788 sp=0x000000016fad2800 +pc=0x000000013000c7b0 cpsr=0x0000000040001000 +Top of Stack: (sp=0x000000016fad2800) +0x000000016fad2800: 0000000000000000 0000000122424fc8 +0x000000016fad2810: 00000001378084a8 0000000000000000 +0x000000016fad2820: 0000000000000000 0000000000000000 +0x000000016fad2830: 0000000000000000 0000000122424fc8 +0x000000016fad2840: 0000000137808200 0000000122424fc8 +0x000000016fad2850: 0000000000000000 00000001378084a8 +0x000000016fad2860: 000000016fad2908 0000000000000000 +0x000000016fad2870: 000000016fad28f0 000000010a1697a0 +0x000000016fad2880: 000000016fad28f0 000000010a1698ac +0x000000016fad2890: 000000010a1696cc 0000000122424fc8 +0x000000016fad28a0: 000000016fad28a0 0000000000000000 +0x000000016fad28b0: 000000016fad2918 0000000122425298 +0x000000016fad28c0: 000000043fa3c270 0000000000000000 +0x000000016fad28d0: 0000000000000000 0000000122424fc8 +0x000000016fad28e0: 0000000000000000 000000016fad28e0 +0x000000016fad28f0: 000000016fad2970 000000010a165d80 +0x000000016fad2900: 0000000000000000 000000043fa3c270 +0x000000016fad2910: 0000000000000000 0000000000000000 +0x000000016fad2920: 000000016fad2920 0000000122417584 +0x000000016fad2930: 000000016fad29b8 000000012241a410 +0x000000016fad2940: 000000043fa032d0 0000000000000000 +0x000000016fad2950: 0000000000000000 000000012241dba0 +0x000000016fad2960: 000000016fad2910 000000016fad2940 +0x000000016fad2970: 000000016fad2a10 000000010a166508 +0x000000016fad2980: 000000016fad2a10 0000000000000000 +0x000000016fad2990: 0000000000000000 0000000000000000 +0x000000016fad29a0: 0000000000000000 0000000000000000 +0x000000016fad29b0: 000000043fa3ab60 000000043fa39b28 +0x000000016fad29c0: 000000016fad29c0 000000012241bccd +0x000000016fad29d0: 000000016fad2ae8 0000000122422c68 +0x000000016fad29e0: 000000043fa2e050 0000000000000000 +0x000000016fad29f0: 0000000000000000 000000012241bf98 + +Instructions: (pc=0x000000013000c7b0) +0x000000013000c6b0: 911c2021 9403407c f90013e0 14000001 +0x000000013000c6c0: f94013e0 9404861a f9000fe0 14000001 +0x000000013000c6d0: f9400fe8 f90037e8 14000001 910543e0 +0x000000013000c6e0: 941906e8 17ffffc8 d10323a0 9401fa53 +0x000000013000c6f0: 14000001 940485f2 f9000be0 14000001 +0x000000013000c700: f9400be8 f90037e8 17fffff5 941b4d60 +0x000000013000c710: f85d03a0 941b4ebe d10243a0 940b69b7 +0x000000013000c720: 17fffffc f81d03a0 aa0103e8 b81d83a8 +0x000000013000c730: 17fffffa d101c3a0 9401fa40 14000001 +0x000000013000c740: 940485df f90007e0 14000001 f94007e8 +0x000000013000c750: f90037e8 d10243a0 940b69a8 17ffffaa +0x000000013000c760: d10243ff a9087bfd 910203fd aa0003e8 +0x000000013000c770: f9000be8 aa0203e0 f81d83a8 f81e03a1 +0x000000013000c780: f81e83a0 9403b985 f90017e0 f94017e8 +0x000000013000c790: f9000fe8 f90013e8 f2400908 1a9f07e8 +0x000000013000c7a0: 37000188 14000001 f9400be0 f9400fe8 +0x000000013000c7b0: 3dc00100 9100c3e1 3d800fe0 3dc00500 +0x000000013000c7c0: 3d8013e0 97ffff2a f90007e0 1400000e +0x000000013000c7d0: f94013e1 52800108 aa0803e0 90004d22 +0x000000013000c7e0: 911d4042 941b4d07 9100a3e0 94020f50 +0x000000013000c7f0: 1400000c f81f03a0 aa0103e8 b81f83a8 +0x000000013000c800: 17fffffa 9100a3e0 94020f49 f94007e0 +0x000000013000c810: a9487bfd 910243ff d65f03c0 941b4d1c +0x000000013000c820: f85f03a0 941b4e7a d10583ff a9146ffc +0x000000013000c830: a9157bfd 910543fd aa0003e8 f9000be2 +0x000000013000c840: 9100c3e0 f9000fe0 f9001be8 f81c83a1 +0x000000013000c850: f81d03a2 381c73bf 381c63bf 9100e3e8 +0x000000013000c860: f90007e8 94040a15 f94007e0 90004d21 +0x000000013000c870: 911da021 94034156 f9400be1 aa0003e8 +0x000000013000c880: f9400fe0 f90013e8 f81d83a8 9101e3e8 +0x000000013000c890: f90017e8 9403c5c2 f94017e0 90004d21 +0x000000013000c8a0: 911e0021 94033f4f f9003be0 52800028 + + +Stack slot to memory mapping: +stack at sp + 0 slots: 0x0 is NULL +stack at sp + 1 slots: {method} {0x0000000122424fc8} 'valueFromPointer' '(J)Ljava/lang/Object;' in 'javababushka/client/RedisClient' +stack at sp + 2 slots: 0x00000001378084a8 points into unknown readable memory: 0x00000001022f28c8 | c8 28 2f 02 01 00 00 00 +stack at sp + 3 slots: 0x0 is NULL +stack at sp + 4 slots: 0x0 is NULL +stack at sp + 5 slots: 0x0 is NULL +stack at sp + 6 slots: 0x0 is NULL +stack at sp + 7 slots: {method} {0x0000000122424fc8} 'valueFromPointer' '(J)Ljava/lang/Object;' in 'javababushka/client/RedisClient' + + +--------------- P R O C E S S --------------- + +Threads class SMR info: +_java_thread_list=0x00006000033ad420, length=11, elements={ +0x0000000137808200, 0x0000000137011600, 0x0000000137016400, 0x000000013796ae00, +0x000000013796b400, 0x0000000137969000, 0x0000000127816200, 0x0000000127816800, +0x0000000127816e00, 0x000000012280a800, 0x0000000137969600 +} + +Java Threads: ( => current thread ) +=>0x0000000137808200 JavaThread "main" [_thread_in_native, id=8451, stack(0x000000016f8d0000,0x000000016fad3000)] + 0x0000000137011600 JavaThread "Reference Handler" daemon [_thread_blocked, id=18691, stack(0x0000000170724000,0x0000000170927000)] + 0x0000000137016400 JavaThread "Finalizer" daemon [_thread_blocked, id=32515, stack(0x0000000170930000,0x0000000170b33000)] + 0x000000013796ae00 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=23299, stack(0x0000000170c54000,0x0000000170e57000)] + 0x000000013796b400 JavaThread "Service Thread" daemon [_thread_blocked, id=23811, stack(0x0000000170e60000,0x0000000171063000)] + 0x0000000137969000 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=30467, stack(0x000000017106c000,0x000000017126f000)] + 0x0000000127816200 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=24323, stack(0x0000000171278000,0x000000017147b000)] + 0x0000000127816800 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=24835, stack(0x0000000171484000,0x0000000171687000)] + 0x0000000127816e00 JavaThread "Sweeper thread" daemon [_thread_blocked, id=25347, stack(0x0000000171690000,0x0000000171893000)] + 0x000000012280a800 JavaThread "Notification Thread" daemon [_thread_blocked, id=25603, stack(0x000000017189c000,0x0000000171a9f000)] + 0x0000000137969600 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=29187, stack(0x0000000171cb4000,0x0000000171eb7000)] + +Other Threads: + 0x0000000100a06270 VMThread "VM Thread" [stack: 0x0000000170518000,0x000000017071b000] [id=19203] + 0x0000000100c05dc0 WatcherThread [stack: 0x0000000171aa8000,0x0000000171cab000] [id=25859] + 0x0000000136f06890 GCTaskThread "GC Thread#0" [stack: 0x000000016fadc000,0x000000016fcdf000] [id=14595] + 0x0000000136f06f40 ConcurrentGCThread "G1 Main Marker" [stack: 0x000000016fce8000,0x000000016feeb000] [id=14083] + 0x0000000136f077c0 ConcurrentGCThread "G1 Conc#0" [stack: 0x000000016fef4000,0x00000001700f7000] [id=21507] + 0x0000000136f098f0 ConcurrentGCThread "G1 Refine#0" [stack: 0x0000000170100000,0x0000000170303000] [id=17411] + 0x0000000136f0a190 ConcurrentGCThread "G1 Service" [stack: 0x000000017030c000,0x000000017050f000] [id=17667] + +Threads with active compile tasks: + +VM state: not at safepoint (normal execution) + +VM Mutex/Monitor currently owned by a thread: None + +Heap address: 0x0000000400000000, size: 16384 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 + +CDS archive(s) mapped at: [0x0000000800000000-0x0000000800bd4000-0x0000000800bd4000), size 12402688, SharedBaseAddress: 0x0000000800000000, ArchiveRelocationMode: 0. +Compressed class space mapped at: 0x0000000800c00000-0x0000000840c00000, reserved size: 1073741824 +Narrow klass base: 0x0000000800000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 + +GC Precious Log: + CPUs: 10 total, 10 available + Memory: 65536M + Large Page Support: Disabled + NUMA Support: Disabled + Compressed Oops: Enabled (Zero based) + Heap Region Size: 8M + Heap Min Capacity: 8M + Heap Initial Capacity: 1G + Heap Max Capacity: 16G + Pre-touch: Disabled + Parallel Workers: 9 + Concurrent Workers: 2 + Concurrent Refinement Workers: 9 + Periodic GC: Disabled + +Heap: + garbage-first heap total 1064960K, used 8160K [0x0000000400000000, 0x0000000800000000) + region size 8192K, 1 young (8192K), 0 survivors (0K) + Metaspace used 548K, committed 704K, reserved 1056768K + class space used 53K, committed 128K, reserved 1048576K + +Heap Regions: E=young(eden), S=young(survivor), O=old, HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, OA=open archive, CA=closed archive, TAMS=top-at-mark-start (previous, next) +| 0|0x0000000400000000, 0x0000000400000000, 0x0000000400800000| 0%| F| |TAMS 0x0000000400000000, 0x0000000400000000| Untracked +| 1|0x0000000400800000, 0x0000000400800000, 0x0000000401000000| 0%| F| |TAMS 0x0000000400800000, 0x0000000400800000| Untracked +| 2|0x0000000401000000, 0x0000000401000000, 0x0000000401800000| 0%| F| |TAMS 0x0000000401000000, 0x0000000401000000| Untracked +| 3|0x0000000401800000, 0x0000000401800000, 0x0000000402000000| 0%| F| |TAMS 0x0000000401800000, 0x0000000401800000| Untracked +| 4|0x0000000402000000, 0x0000000402000000, 0x0000000402800000| 0%| F| |TAMS 0x0000000402000000, 0x0000000402000000| Untracked +| 5|0x0000000402800000, 0x0000000402800000, 0x0000000403000000| 0%| F| |TAMS 0x0000000402800000, 0x0000000402800000| Untracked +| 6|0x0000000403000000, 0x0000000403000000, 0x0000000403800000| 0%| F| |TAMS 0x0000000403000000, 0x0000000403000000| Untracked +| 7|0x0000000403800000, 0x0000000403800000, 0x0000000404000000| 0%| F| |TAMS 0x0000000403800000, 0x0000000403800000| Untracked +| 8|0x0000000404000000, 0x0000000404000000, 0x0000000404800000| 0%| F| |TAMS 0x0000000404000000, 0x0000000404000000| Untracked +| 9|0x0000000404800000, 0x0000000404800000, 0x0000000405000000| 0%| F| |TAMS 0x0000000404800000, 0x0000000404800000| Untracked +| 10|0x0000000405000000, 0x0000000405000000, 0x0000000405800000| 0%| F| |TAMS 0x0000000405000000, 0x0000000405000000| Untracked +| 11|0x0000000405800000, 0x0000000405800000, 0x0000000406000000| 0%| F| |TAMS 0x0000000405800000, 0x0000000405800000| Untracked +| 12|0x0000000406000000, 0x0000000406000000, 0x0000000406800000| 0%| F| |TAMS 0x0000000406000000, 0x0000000406000000| Untracked +| 13|0x0000000406800000, 0x0000000406800000, 0x0000000407000000| 0%| F| |TAMS 0x0000000406800000, 0x0000000406800000| Untracked +| 14|0x0000000407000000, 0x0000000407000000, 0x0000000407800000| 0%| F| |TAMS 0x0000000407000000, 0x0000000407000000| Untracked +| 15|0x0000000407800000, 0x0000000407800000, 0x0000000408000000| 0%| F| |TAMS 0x0000000407800000, 0x0000000407800000| Untracked +| 16|0x0000000408000000, 0x0000000408000000, 0x0000000408800000| 0%| F| |TAMS 0x0000000408000000, 0x0000000408000000| Untracked +| 17|0x0000000408800000, 0x0000000408800000, 0x0000000409000000| 0%| F| |TAMS 0x0000000408800000, 0x0000000408800000| Untracked +| 18|0x0000000409000000, 0x0000000409000000, 0x0000000409800000| 0%| F| |TAMS 0x0000000409000000, 0x0000000409000000| Untracked +| 19|0x0000000409800000, 0x0000000409800000, 0x000000040a000000| 0%| F| |TAMS 0x0000000409800000, 0x0000000409800000| Untracked +| 20|0x000000040a000000, 0x000000040a000000, 0x000000040a800000| 0%| F| |TAMS 0x000000040a000000, 0x000000040a000000| Untracked +| 21|0x000000040a800000, 0x000000040a800000, 0x000000040b000000| 0%| F| |TAMS 0x000000040a800000, 0x000000040a800000| Untracked +| 22|0x000000040b000000, 0x000000040b000000, 0x000000040b800000| 0%| F| |TAMS 0x000000040b000000, 0x000000040b000000| Untracked +| 23|0x000000040b800000, 0x000000040b800000, 0x000000040c000000| 0%| F| |TAMS 0x000000040b800000, 0x000000040b800000| Untracked +| 24|0x000000040c000000, 0x000000040c000000, 0x000000040c800000| 0%| F| |TAMS 0x000000040c000000, 0x000000040c000000| Untracked +| 25|0x000000040c800000, 0x000000040c800000, 0x000000040d000000| 0%| F| |TAMS 0x000000040c800000, 0x000000040c800000| Untracked +| 26|0x000000040d000000, 0x000000040d000000, 0x000000040d800000| 0%| F| |TAMS 0x000000040d000000, 0x000000040d000000| Untracked +| 27|0x000000040d800000, 0x000000040d800000, 0x000000040e000000| 0%| F| |TAMS 0x000000040d800000, 0x000000040d800000| Untracked +| 28|0x000000040e000000, 0x000000040e000000, 0x000000040e800000| 0%| F| |TAMS 0x000000040e000000, 0x000000040e000000| Untracked +| 29|0x000000040e800000, 0x000000040e800000, 0x000000040f000000| 0%| F| |TAMS 0x000000040e800000, 0x000000040e800000| Untracked +| 30|0x000000040f000000, 0x000000040f000000, 0x000000040f800000| 0%| F| |TAMS 0x000000040f000000, 0x000000040f000000| Untracked +| 31|0x000000040f800000, 0x000000040f800000, 0x0000000410000000| 0%| F| |TAMS 0x000000040f800000, 0x000000040f800000| Untracked +| 32|0x0000000410000000, 0x0000000410000000, 0x0000000410800000| 0%| F| |TAMS 0x0000000410000000, 0x0000000410000000| Untracked +| 33|0x0000000410800000, 0x0000000410800000, 0x0000000411000000| 0%| F| |TAMS 0x0000000410800000, 0x0000000410800000| Untracked +| 34|0x0000000411000000, 0x0000000411000000, 0x0000000411800000| 0%| F| |TAMS 0x0000000411000000, 0x0000000411000000| Untracked +| 35|0x0000000411800000, 0x0000000411800000, 0x0000000412000000| 0%| F| |TAMS 0x0000000411800000, 0x0000000411800000| Untracked +| 36|0x0000000412000000, 0x0000000412000000, 0x0000000412800000| 0%| F| |TAMS 0x0000000412000000, 0x0000000412000000| Untracked +| 37|0x0000000412800000, 0x0000000412800000, 0x0000000413000000| 0%| F| |TAMS 0x0000000412800000, 0x0000000412800000| Untracked +| 38|0x0000000413000000, 0x0000000413000000, 0x0000000413800000| 0%| F| |TAMS 0x0000000413000000, 0x0000000413000000| Untracked +| 39|0x0000000413800000, 0x0000000413800000, 0x0000000414000000| 0%| F| |TAMS 0x0000000413800000, 0x0000000413800000| Untracked +| 40|0x0000000414000000, 0x0000000414000000, 0x0000000414800000| 0%| F| |TAMS 0x0000000414000000, 0x0000000414000000| Untracked +| 41|0x0000000414800000, 0x0000000414800000, 0x0000000415000000| 0%| F| |TAMS 0x0000000414800000, 0x0000000414800000| Untracked +| 42|0x0000000415000000, 0x0000000415000000, 0x0000000415800000| 0%| F| |TAMS 0x0000000415000000, 0x0000000415000000| Untracked +| 43|0x0000000415800000, 0x0000000415800000, 0x0000000416000000| 0%| F| |TAMS 0x0000000415800000, 0x0000000415800000| Untracked +| 44|0x0000000416000000, 0x0000000416000000, 0x0000000416800000| 0%| F| |TAMS 0x0000000416000000, 0x0000000416000000| Untracked +| 45|0x0000000416800000, 0x0000000416800000, 0x0000000417000000| 0%| F| |TAMS 0x0000000416800000, 0x0000000416800000| Untracked +| 46|0x0000000417000000, 0x0000000417000000, 0x0000000417800000| 0%| F| |TAMS 0x0000000417000000, 0x0000000417000000| Untracked +| 47|0x0000000417800000, 0x0000000417800000, 0x0000000418000000| 0%| F| |TAMS 0x0000000417800000, 0x0000000417800000| Untracked +| 48|0x0000000418000000, 0x0000000418000000, 0x0000000418800000| 0%| F| |TAMS 0x0000000418000000, 0x0000000418000000| Untracked +| 49|0x0000000418800000, 0x0000000418800000, 0x0000000419000000| 0%| F| |TAMS 0x0000000418800000, 0x0000000418800000| Untracked +| 50|0x0000000419000000, 0x0000000419000000, 0x0000000419800000| 0%| F| |TAMS 0x0000000419000000, 0x0000000419000000| Untracked +| 51|0x0000000419800000, 0x0000000419800000, 0x000000041a000000| 0%| F| |TAMS 0x0000000419800000, 0x0000000419800000| Untracked +| 52|0x000000041a000000, 0x000000041a000000, 0x000000041a800000| 0%| F| |TAMS 0x000000041a000000, 0x000000041a000000| Untracked +| 53|0x000000041a800000, 0x000000041a800000, 0x000000041b000000| 0%| F| |TAMS 0x000000041a800000, 0x000000041a800000| Untracked +| 54|0x000000041b000000, 0x000000041b000000, 0x000000041b800000| 0%| F| |TAMS 0x000000041b000000, 0x000000041b000000| Untracked +| 55|0x000000041b800000, 0x000000041b800000, 0x000000041c000000| 0%| F| |TAMS 0x000000041b800000, 0x000000041b800000| Untracked +| 56|0x000000041c000000, 0x000000041c000000, 0x000000041c800000| 0%| F| |TAMS 0x000000041c000000, 0x000000041c000000| Untracked +| 57|0x000000041c800000, 0x000000041c800000, 0x000000041d000000| 0%| F| |TAMS 0x000000041c800000, 0x000000041c800000| Untracked +| 58|0x000000041d000000, 0x000000041d000000, 0x000000041d800000| 0%| F| |TAMS 0x000000041d000000, 0x000000041d000000| Untracked +| 59|0x000000041d800000, 0x000000041d800000, 0x000000041e000000| 0%| F| |TAMS 0x000000041d800000, 0x000000041d800000| Untracked +| 60|0x000000041e000000, 0x000000041e000000, 0x000000041e800000| 0%| F| |TAMS 0x000000041e000000, 0x000000041e000000| Untracked +| 61|0x000000041e800000, 0x000000041e800000, 0x000000041f000000| 0%| F| |TAMS 0x000000041e800000, 0x000000041e800000| Untracked +| 62|0x000000041f000000, 0x000000041f000000, 0x000000041f800000| 0%| F| |TAMS 0x000000041f000000, 0x000000041f000000| Untracked +| 63|0x000000041f800000, 0x000000041f800000, 0x0000000420000000| 0%| F| |TAMS 0x000000041f800000, 0x000000041f800000| Untracked +| 64|0x0000000420000000, 0x0000000420000000, 0x0000000420800000| 0%| F| |TAMS 0x0000000420000000, 0x0000000420000000| Untracked +| 65|0x0000000420800000, 0x0000000420800000, 0x0000000421000000| 0%| F| |TAMS 0x0000000420800000, 0x0000000420800000| Untracked +| 66|0x0000000421000000, 0x0000000421000000, 0x0000000421800000| 0%| F| |TAMS 0x0000000421000000, 0x0000000421000000| Untracked +| 67|0x0000000421800000, 0x0000000421800000, 0x0000000422000000| 0%| F| |TAMS 0x0000000421800000, 0x0000000421800000| Untracked +| 68|0x0000000422000000, 0x0000000422000000, 0x0000000422800000| 0%| F| |TAMS 0x0000000422000000, 0x0000000422000000| Untracked +| 69|0x0000000422800000, 0x0000000422800000, 0x0000000423000000| 0%| F| |TAMS 0x0000000422800000, 0x0000000422800000| Untracked +| 70|0x0000000423000000, 0x0000000423000000, 0x0000000423800000| 0%| F| |TAMS 0x0000000423000000, 0x0000000423000000| Untracked +| 71|0x0000000423800000, 0x0000000423800000, 0x0000000424000000| 0%| F| |TAMS 0x0000000423800000, 0x0000000423800000| Untracked +| 72|0x0000000424000000, 0x0000000424000000, 0x0000000424800000| 0%| F| |TAMS 0x0000000424000000, 0x0000000424000000| Untracked +| 73|0x0000000424800000, 0x0000000424800000, 0x0000000425000000| 0%| F| |TAMS 0x0000000424800000, 0x0000000424800000| Untracked +| 74|0x0000000425000000, 0x0000000425000000, 0x0000000425800000| 0%| F| |TAMS 0x0000000425000000, 0x0000000425000000| Untracked +| 75|0x0000000425800000, 0x0000000425800000, 0x0000000426000000| 0%| F| |TAMS 0x0000000425800000, 0x0000000425800000| Untracked +| 76|0x0000000426000000, 0x0000000426000000, 0x0000000426800000| 0%| F| |TAMS 0x0000000426000000, 0x0000000426000000| Untracked +| 77|0x0000000426800000, 0x0000000426800000, 0x0000000427000000| 0%| F| |TAMS 0x0000000426800000, 0x0000000426800000| Untracked +| 78|0x0000000427000000, 0x0000000427000000, 0x0000000427800000| 0%| F| |TAMS 0x0000000427000000, 0x0000000427000000| Untracked +| 79|0x0000000427800000, 0x0000000427800000, 0x0000000428000000| 0%| F| |TAMS 0x0000000427800000, 0x0000000427800000| Untracked +| 80|0x0000000428000000, 0x0000000428000000, 0x0000000428800000| 0%| F| |TAMS 0x0000000428000000, 0x0000000428000000| Untracked +| 81|0x0000000428800000, 0x0000000428800000, 0x0000000429000000| 0%| F| |TAMS 0x0000000428800000, 0x0000000428800000| Untracked +| 82|0x0000000429000000, 0x0000000429000000, 0x0000000429800000| 0%| F| |TAMS 0x0000000429000000, 0x0000000429000000| Untracked +| 83|0x0000000429800000, 0x0000000429800000, 0x000000042a000000| 0%| F| |TAMS 0x0000000429800000, 0x0000000429800000| Untracked +| 84|0x000000042a000000, 0x000000042a000000, 0x000000042a800000| 0%| F| |TAMS 0x000000042a000000, 0x000000042a000000| Untracked +| 85|0x000000042a800000, 0x000000042a800000, 0x000000042b000000| 0%| F| |TAMS 0x000000042a800000, 0x000000042a800000| Untracked +| 86|0x000000042b000000, 0x000000042b000000, 0x000000042b800000| 0%| F| |TAMS 0x000000042b000000, 0x000000042b000000| Untracked +| 87|0x000000042b800000, 0x000000042b800000, 0x000000042c000000| 0%| F| |TAMS 0x000000042b800000, 0x000000042b800000| Untracked +| 88|0x000000042c000000, 0x000000042c000000, 0x000000042c800000| 0%| F| |TAMS 0x000000042c000000, 0x000000042c000000| Untracked +| 89|0x000000042c800000, 0x000000042c800000, 0x000000042d000000| 0%| F| |TAMS 0x000000042c800000, 0x000000042c800000| Untracked +| 90|0x000000042d000000, 0x000000042d000000, 0x000000042d800000| 0%| F| |TAMS 0x000000042d000000, 0x000000042d000000| Untracked +| 91|0x000000042d800000, 0x000000042d800000, 0x000000042e000000| 0%| F| |TAMS 0x000000042d800000, 0x000000042d800000| Untracked +| 92|0x000000042e000000, 0x000000042e000000, 0x000000042e800000| 0%| F| |TAMS 0x000000042e000000, 0x000000042e000000| Untracked +| 93|0x000000042e800000, 0x000000042e800000, 0x000000042f000000| 0%| F| |TAMS 0x000000042e800000, 0x000000042e800000| Untracked +| 94|0x000000042f000000, 0x000000042f000000, 0x000000042f800000| 0%| F| |TAMS 0x000000042f000000, 0x000000042f000000| Untracked +| 95|0x000000042f800000, 0x000000042f800000, 0x0000000430000000| 0%| F| |TAMS 0x000000042f800000, 0x000000042f800000| Untracked +| 96|0x0000000430000000, 0x0000000430000000, 0x0000000430800000| 0%| F| |TAMS 0x0000000430000000, 0x0000000430000000| Untracked +| 97|0x0000000430800000, 0x0000000430800000, 0x0000000431000000| 0%| F| |TAMS 0x0000000430800000, 0x0000000430800000| Untracked +| 98|0x0000000431000000, 0x0000000431000000, 0x0000000431800000| 0%| F| |TAMS 0x0000000431000000, 0x0000000431000000| Untracked +| 99|0x0000000431800000, 0x0000000431800000, 0x0000000432000000| 0%| F| |TAMS 0x0000000431800000, 0x0000000431800000| Untracked +| 100|0x0000000432000000, 0x0000000432000000, 0x0000000432800000| 0%| F| |TAMS 0x0000000432000000, 0x0000000432000000| Untracked +| 101|0x0000000432800000, 0x0000000432800000, 0x0000000433000000| 0%| F| |TAMS 0x0000000432800000, 0x0000000432800000| Untracked +| 102|0x0000000433000000, 0x0000000433000000, 0x0000000433800000| 0%| F| |TAMS 0x0000000433000000, 0x0000000433000000| Untracked +| 103|0x0000000433800000, 0x0000000433800000, 0x0000000434000000| 0%| F| |TAMS 0x0000000433800000, 0x0000000433800000| Untracked +| 104|0x0000000434000000, 0x0000000434000000, 0x0000000434800000| 0%| F| |TAMS 0x0000000434000000, 0x0000000434000000| Untracked +| 105|0x0000000434800000, 0x0000000434800000, 0x0000000435000000| 0%| F| |TAMS 0x0000000434800000, 0x0000000434800000| Untracked +| 106|0x0000000435000000, 0x0000000435000000, 0x0000000435800000| 0%| F| |TAMS 0x0000000435000000, 0x0000000435000000| Untracked +| 107|0x0000000435800000, 0x0000000435800000, 0x0000000436000000| 0%| F| |TAMS 0x0000000435800000, 0x0000000435800000| Untracked +| 108|0x0000000436000000, 0x0000000436000000, 0x0000000436800000| 0%| F| |TAMS 0x0000000436000000, 0x0000000436000000| Untracked +| 109|0x0000000436800000, 0x0000000436800000, 0x0000000437000000| 0%| F| |TAMS 0x0000000436800000, 0x0000000436800000| Untracked +| 110|0x0000000437000000, 0x0000000437000000, 0x0000000437800000| 0%| F| |TAMS 0x0000000437000000, 0x0000000437000000| Untracked +| 111|0x0000000437800000, 0x0000000437800000, 0x0000000438000000| 0%| F| |TAMS 0x0000000437800000, 0x0000000437800000| Untracked +| 112|0x0000000438000000, 0x0000000438000000, 0x0000000438800000| 0%| F| |TAMS 0x0000000438000000, 0x0000000438000000| Untracked +| 113|0x0000000438800000, 0x0000000438800000, 0x0000000439000000| 0%| F| |TAMS 0x0000000438800000, 0x0000000438800000| Untracked +| 114|0x0000000439000000, 0x0000000439000000, 0x0000000439800000| 0%| F| |TAMS 0x0000000439000000, 0x0000000439000000| Untracked +| 115|0x0000000439800000, 0x0000000439800000, 0x000000043a000000| 0%| F| |TAMS 0x0000000439800000, 0x0000000439800000| Untracked +| 116|0x000000043a000000, 0x000000043a000000, 0x000000043a800000| 0%| F| |TAMS 0x000000043a000000, 0x000000043a000000| Untracked +| 117|0x000000043a800000, 0x000000043a800000, 0x000000043b000000| 0%| F| |TAMS 0x000000043a800000, 0x000000043a800000| Untracked +| 118|0x000000043b000000, 0x000000043b000000, 0x000000043b800000| 0%| F| |TAMS 0x000000043b000000, 0x000000043b000000| Untracked +| 119|0x000000043b800000, 0x000000043b800000, 0x000000043c000000| 0%| F| |TAMS 0x000000043b800000, 0x000000043b800000| Untracked +| 120|0x000000043c000000, 0x000000043c000000, 0x000000043c800000| 0%| F| |TAMS 0x000000043c000000, 0x000000043c000000| Untracked +| 121|0x000000043c800000, 0x000000043c800000, 0x000000043d000000| 0%| F| |TAMS 0x000000043c800000, 0x000000043c800000| Untracked +| 122|0x000000043d000000, 0x000000043d000000, 0x000000043d800000| 0%| F| |TAMS 0x000000043d000000, 0x000000043d000000| Untracked +| 123|0x000000043d800000, 0x000000043d800000, 0x000000043e000000| 0%| F| |TAMS 0x000000043d800000, 0x000000043d800000| Untracked +| 124|0x000000043e000000, 0x000000043e000000, 0x000000043e800000| 0%| F| |TAMS 0x000000043e000000, 0x000000043e000000| Untracked +| 125|0x000000043e800000, 0x000000043e800000, 0x000000043f000000| 0%| F| |TAMS 0x000000043e800000, 0x000000043e800000| Untracked +| 126|0x000000043f000000, 0x000000043f000000, 0x000000043f800000| 0%| F| |TAMS 0x000000043f000000, 0x000000043f000000| Untracked +| 127|0x000000043f800000, 0x000000043fae14b8, 0x0000000440000000| 36%| E| |TAMS 0x000000043f800000, 0x000000043f800000| Complete +|2046|0x00000007ff000000, 0x00000007ff778000, 0x00000007ff800000| 93%|OA| |TAMS 0x00000007ff000000, 0x00000007ff000000| Untracked +|2047|0x00000007ff800000, 0x00000007ff880000, 0x0000000800000000| 6%|CA| |TAMS 0x00000007ff800000, 0x00000007ff800000| Untracked + +Card table byte_map: [0x000000011b160000,0x000000011d160000] _byte_map_base: 0x0000000119160000 + +Marking Bits (Prev, Next): (CMBitMap*) 0x000000013780b810, (CMBitMap*) 0x000000013780b850 + Prev Bits: [0x0000000140000000, 0x0000000150000000) + Next Bits: [0x0000000150000000, 0x0000000160000000) + +Polling page: 0x00000001006d4000 + +Metaspace: + +Usage: + Non-class: 495.26 KB used. + Class: 53.48 KB used. + Both: 548.73 KB used. + +Virtual space: + Non-class space: 8.00 MB reserved, 576.00 KB ( 7%) committed, 1 nodes. + Class space: 1.00 GB reserved, 128.00 KB ( <1%) committed, 1 nodes. + Both: 1.01 GB reserved, 704.00 KB ( <1%) committed. + +Chunk freelists: + Non-Class: 3.85 MB + Class: 3.73 MB + Both: 7.58 MB + +MaxMetaspaceSize: unlimited +CompressedClassSpaceSize: 1.00 GB +Initial GC threshold: 21.00 MB +Current GC threshold: 21.00 MB +CDS: on +MetaspaceReclaimPolicy: balanced + - commit_granule_bytes: 65536. + - commit_granule_words: 8192. + - virtual_space_node_default_size: 1048576. + - enlarge_chunks_in_place: 1. + - new_chunks_are_fully_committed: 0. + - uncommit_free_chunks: 1. + - use_allocation_guard: 0. + - handle_deallocations: 1. + + +Internal statistics: + +num_allocs_failed_limit: 0. +num_arena_births: 6. +num_arena_deaths: 0. +num_vsnodes_births: 2. +num_vsnodes_deaths: 0. +num_space_committed: 11. +num_space_uncommitted: 0. +num_chunks_returned_to_freelist: 0. +num_chunks_taken_from_freelist: 18. +num_chunk_merges: 0. +num_chunk_splits: 9. +num_chunks_enlarged: 9. +num_purges: 0. +num_inconsistent_stats: 0. + +CodeHeap 'non-profiled nmethods': size=120032Kb used=37Kb max_used=37Kb free=119994Kb + bounds [0x0000000111c28000, 0x0000000111e98000, 0x0000000119160000] +CodeHeap 'profiled nmethods': size=120016Kb used=153Kb max_used=153Kb free=119862Kb + bounds [0x000000010a6f4000, 0x000000010a964000, 0x0000000111c28000] +CodeHeap 'non-nmethods': size=5712Kb used=1085Kb max_used=1093Kb free=4626Kb + bounds [0x000000010a160000, 0x000000010a3d0000, 0x000000010a6f4000] + total_blobs=497 nmethods=127 adapters=287 + compilation: enabled + stopped_count=0, restarted_count=0 + full_count=0 + +Compilation events (20 events): +Event: 0.051 Thread 0x0000000127816800 107 1 java.lang.invoke.MethodType::ptypes (5 bytes) +Event: 0.051 Thread 0x0000000127816800 nmethod 107 0x0000000111c2eb90 code [0x0000000111c2ed00, 0x0000000111c2ede8] +Event: 0.051 Thread 0x0000000127816800 111 1 java.util.ArrayList::size (5 bytes) +Event: 0.051 Thread 0x0000000127816800 nmethod 111 0x0000000111c2f490 code [0x0000000111c2f600, 0x0000000111c2f6e8] +Event: 0.051 Thread 0x0000000127816800 113 1 java.lang.invoke.MethodType::form (5 bytes) +Event: 0.051 Thread 0x0000000127816800 nmethod 113 0x0000000111c2fd90 code [0x0000000111c2ff00, 0x0000000111c2ffe8] +Event: 0.051 Thread 0x0000000127816800 117 3 java.lang.invoke.MethodType::hashCode (53 bytes) +Event: 0.051 Thread 0x0000000127816800 nmethod 117 0x000000010a715790 code [0x000000010a715980, 0x000000010a715d88] +Event: 0.051 Thread 0x0000000127816800 118 3 java.util.regex.Pattern::has (15 bytes) +Event: 0.051 Thread 0x0000000127816800 nmethod 118 0x000000010a715f10 code [0x000000010a7160c0, 0x000000010a716268] +Event: 0.051 Thread 0x0000000127816800 120 3 java.lang.invoke.MethodType::makeImpl (109 bytes) +Event: 0.051 Thread 0x0000000127816800 nmethod 120 0x000000010a716310 code [0x000000010a716640, 0x000000010a717528] +Event: 0.051 Thread 0x0000000127816800 122 3 java.lang.Class::getClassLoader (28 bytes) +Event: 0.052 Thread 0x0000000127816800 nmethod 122 0x000000010a717a10 code [0x000000010a717cc0, 0x000000010a718708] +Event: 0.052 Thread 0x0000000127816800 121 1 java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry::hashCode (5 bytes) +Event: 0.052 Thread 0x0000000127816800 nmethod 121 0x0000000111c31290 code [0x0000000111c31400, 0x0000000111c314e8] +Event: 0.053 Thread 0x0000000127816800 126 3 java.lang.StringLatin1::replace (198 bytes) +Event: 0.054 Thread 0x0000000127816800 nmethod 126 0x000000010a718a90 code [0x000000010a718d80, 0x000000010a719b78] +Event: 0.054 Thread 0x0000000127816800 127 3 java.util.Arrays::copyOf (19 bytes) +Event: 0.054 Thread 0x0000000127816800 nmethod 127 0x000000010a71a090 code [0x000000010a71a240, 0x000000010a71a558] + +GC Heap History (0 events): +No events + +Deoptimization events (0 events): +No events + +Classes unloaded (0 events): +No events + +Classes redefined (0 events): +No events + +Internal exceptions (0 events): +No events + +VM Operations (0 events): +No events + +Events (20 events): +Event: 0.047 loading class java/util/stream/SpinedBuffer +Event: 0.047 loading class java/util/stream/AbstractSpinedBuffer +Event: 0.047 loading class java/util/stream/AbstractSpinedBuffer done +Event: 0.047 loading class java/util/stream/SpinedBuffer done +Event: 0.047 loading class java/util/stream/Nodes$SpinedNodeBuilder done +Event: 0.048 loading class java/lang/NoSuchFieldError +Event: 0.048 loading class java/lang/NoSuchFieldError done +Event: 0.049 loading class java/net/ProtocolFamily +Event: 0.049 loading class java/net/ProtocolFamily done +Event: 0.049 loading class java/net/SocketAddress +Event: 0.049 loading class java/net/SocketAddress done +Event: 0.049 loading class java/net/UnixDomainSocketAddress +Event: 0.049 loading class java/net/UnixDomainSocketAddress done +Event: 0.049 loading class java/lang/InterruptedException +Event: 0.049 loading class java/lang/InterruptedException done +Event: 0.051 loading class java/util/Formatter$FixedString +Event: 0.051 loading class java/util/Formatter$FixedString done +Event: 0.054 Loading shared library /Users/andrewc/Library/Java/JavaVirtualMachines/corretto-17.0.3/Contents/Home/lib/libjavababushka.dylib failed, dlopen(/Users/andrewc/Library/Java/JavaVirtualMachines/corretto-17.0.3/Contents/Home/lib/libjavababushka.dylib, 0x0001): +Event: 0.054 Loading shared library /Users/andrewc/Library/Java/JavaVirtualMachines/corretto-17.0.3/Contents/Home/lib/libjavababushka.jnilib failed, dlopen(/Users/andrewc/Library/Java/JavaVirtualMachines/corretto-17.0.3/Contents/Home/lib/libjavababushka.jnilib, 0x0001 +Event: 0.325 Loaded shared library /Users/andrewc/git/bq/babushka-go/java/target/debug/libjavababushka.dylib + + +Dynamic libraries: +0x0000000100634000 /Users/andrewc/Library/Java/JavaVirtualMachines/corretto-17.0.3/Contents/Home/lib/libjli.dylib +0x00000001a5cec000 /usr/lib/libz.1.dylib +0x00000001a5da6000 /usr/lib/libSystem.B.dylib +0x00000001a5da0000 /usr/lib/system/libcache.dylib +0x00000001a5d5c000 /usr/lib/system/libcommonCrypto.dylib +0x00000001a5d87000 /usr/lib/system/libcompiler_rt.dylib +0x00000001a5d7d000 /usr/lib/system/libcopyfile.dylib +0x000000019a1a9000 /usr/lib/system/libcorecrypto.dylib +0x000000019a260000 /usr/lib/system/libdispatch.dylib +0x000000019a41a000 /usr/lib/system/libdyld.dylib +0x00000001a5d96000 /usr/lib/system/libkeymgr.dylib +0x00000001a5d36000 /usr/lib/system/libmacho.dylib +0x00000001a533b000 /usr/lib/system/libquarantine.dylib +0x00000001a5d93000 /usr/lib/system/libremovefile.dylib +0x000000019f0c8000 /usr/lib/system/libsystem_asl.dylib +0x000000019a145000 /usr/lib/system/libsystem_blocks.dylib +0x000000019a2ab000 /usr/lib/system/libsystem_c.dylib +0x00000001a5d8b000 /usr/lib/system/libsystem_collections.dylib +0x00000001a477a000 /usr/lib/system/libsystem_configuration.dylib +0x00000001a3810000 /usr/lib/system/libsystem_containermanager.dylib +0x00000001a5a2a000 /usr/lib/system/libsystem_coreservices.dylib +0x000000019d20f000 /usr/lib/system/libsystem_darwin.dylib +0x00000001a5d97000 /usr/lib/system/libsystem_dnssd.dylib +0x000000019a2a8000 /usr/lib/system/libsystem_featureflags.dylib +0x000000019a446000 /usr/lib/system/libsystem_info.dylib +0x00000001a5cfe000 /usr/lib/system/libsystem_m.dylib +0x000000019a234000 /usr/lib/system/libsystem_malloc.dylib +0x000000019f046000 /usr/lib/system/libsystem_networkextension.dylib +0x000000019d679000 /usr/lib/system/libsystem_notify.dylib +0x00000001a477f000 /usr/lib/system/libsystem_sandbox.dylib +0x00000001a5d90000 /usr/lib/system/libsystem_secinit.dylib +0x000000019a3d3000 /usr/lib/system/libsystem_kernel.dylib +0x000000019a43f000 /usr/lib/system/libsystem_platform.dylib +0x000000019a40d000 /usr/lib/system/libsystem_pthread.dylib +0x00000001a0890000 /usr/lib/system/libsystem_symptoms.dylib +0x000000019a18e000 /usr/lib/system/libsystem_trace.dylib +0x00000001a5d6a000 /usr/lib/system/libunwind.dylib +0x000000019a14a000 /usr/lib/system/libxpc.dylib +0x000000019a3b7000 /usr/lib/libc++abi.dylib +0x000000019a070000 /usr/lib/libobjc.A.dylib +0x00000001a5d75000 /usr/lib/liboah.dylib +0x000000019a32a000 /usr/lib/libc++.1.dylib +0x00000001b2a05000 /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa +0x000000019d6de000 /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit +0x00000001a00e0000 /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData +0x000000019b40d000 /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation +0x000000019e5ee000 /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation +0x0000000209014000 /System/Library/PrivateFrameworks/CollectionViewCore.framework/Versions/A/CollectionViewCore +0x00000001acd1b000 /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices +0x00000001a405e000 /System/Library/PrivateFrameworks/XCTTargetBootstrap.framework/Versions/A/XCTTargetBootstrap +0x00000001a87b8000 /System/Library/PrivateFrameworks/InternationalSupport.framework/Versions/A/InternationalSupport +0x00000001a883f000 /System/Library/PrivateFrameworks/UserActivity.framework/Versions/A/UserActivity +0x000000022111a000 /System/Library/PrivateFrameworks/WindowManagement.framework/Versions/A/WindowManagement +0x000000019b0da000 /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration +0x00000001a7c9b000 /usr/lib/libspindump.dylib +0x000000019e794000 /System/Library/Frameworks/UniformTypeIdentifiers.framework/Versions/A/UniformTypeIdentifiers +0x00000001a206a000 /usr/lib/libapp_launch_measurement.dylib +0x00000001a151c000 /System/Library/PrivateFrameworks/CoreAnalytics.framework/Versions/A/CoreAnalytics +0x00000001a2071000 /System/Library/PrivateFrameworks/CoreAutoLayout.framework/Versions/A/CoreAutoLayout +0x00000001a3864000 /System/Library/Frameworks/Metal.framework/Versions/A/Metal +0x00000001a478b000 /usr/lib/liblangid.dylib +0x00000001a4064000 /System/Library/PrivateFrameworks/CoreSVG.framework/Versions/A/CoreSVG +0x000000019f0fe000 /System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight +0x000000019f52a000 /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics +0x00000001ad3f7000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate +0x00000001a7708000 /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices +0x00000001a3842000 /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface +0x00000001a154a000 /usr/lib/libDiagnosticMessagesClient.dylib +0x00000001b081b000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices +0x00000001a4046000 /System/Library/PrivateFrameworks/DFRFoundation.framework/Versions/A/DFRFoundation +0x000000019cf5b000 /usr/lib/libicucore.A.dylib +0x00000001a9750000 /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox +0x00000001a87c3000 /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore +0x00000001c0003000 /System/Library/PrivateFrameworks/TextInput.framework/Versions/A/TextInput +0x000000019f061000 /usr/lib/libMobileGestalt.dylib +0x00000001a3d12000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox +0x00000001a19d9000 /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore +0x000000019cba5000 /System/Library/Frameworks/Security.framework/Versions/A/Security +0x00000001acd5b000 /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition +0x00000001a1da9000 /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI +0x000000019c511000 /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio +0x00000001a1627000 /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration +0x00000001a80dc000 /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport +0x000000019f05f000 /usr/lib/libenergytrace.dylib +0x000000019d59e000 /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit +0x00000001ad146000 /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices +0x00000001a1ff7000 /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis +0x00000001ff018000 /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL +0x00000001a20bb000 /usr/lib/libxml2.2.dylib +0x00000001a5243000 /System/Library/PrivateFrameworks/MobileKeyBag.framework/Versions/A/MobileKeyBag +0x000000019fb71000 /System/Library/Frameworks/ColorSync.framework/Versions/A/ColorSync +0x000000019a473000 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation +0x00000001a43a0000 /System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage +0x000000019c32e000 /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText +0x00000001a409c000 /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO +0x00000001a5dac000 /System/Library/PrivateFrameworks/SoftLinking.framework/Versions/A/SoftLinking +0x00000001a6042000 /usr/lib/libcompression.dylib +0x00000001a8713000 /System/Library/PrivateFrameworks/TextureIO.framework/Versions/A/TextureIO +0x00000001a73d5000 /usr/lib/libate.dylib +0x00000001a728e000 /usr/lib/liblzma.5.dylib +0x00000001a5da8000 /usr/lib/libfakelink.dylib +0x000000019ec83000 /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork +0x00000001a5ee6000 /usr/lib/libarchive.2.dylib +0x00000001ab07f000 /System/Library/Frameworks/Combine.framework/Versions/A/Combine +0x00000001a912f000 /usr/lib/swift/libswiftCore.dylib +0x00000001bd08b000 /usr/lib/swift/libswiftCoreFoundation.dylib +0x00000001baffa000 /usr/lib/swift/libswiftDarwin.dylib +0x00000001ae693000 /usr/lib/swift/libswiftDispatch.dylib +0x00000001bd0ac000 /usr/lib/swift/libswiftIOKit.dylib +0x00000001b0c51000 /usr/lib/swift/libswiftObjectiveC.dylib +0x00000001bd09f000 /usr/lib/swift/libswiftXPC.dylib +0x0000000227ba3000 /usr/lib/swift/libswift_Concurrency.dylib +0x0000000227cf1000 /usr/lib/swift/libswift_StringProcessing.dylib +0x00000001b0c55000 /usr/lib/swift/libswiftos.dylib +0x000000019d522000 /System/Library/PrivateFrameworks/CoreServicesInternal.framework/Versions/A/CoreServicesInternal +0x00000001a5362000 /usr/lib/libbsm.0.dylib +0x00000001a5d3c000 /usr/lib/system/libkxld.dylib +0x00000001a2033000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents +0x000000019d21a000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore +0x00000001a158e000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata +0x00000001a5a30000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices +0x00000001a5f6e000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit +0x00000001a0812000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE +0x000000019a94d000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices +0x00000001a7237000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices +0x00000001a2040000 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList +0x00000001a600c000 /usr/lib/libapple_nghttp2.dylib +0x000000019ec7f000 /usr/lib/libnetwork.dylib +0x00000001a04c1000 /usr/lib/libsqlite3.dylib +0x00000001a0899000 /System/Library/Frameworks/Network.framework/Versions/A/Network +0x0000000226c82000 /usr/lib/libCoreEntitlements.dylib +0x0000000212c17000 /System/Library/PrivateFrameworks/MessageSecurity.framework/Versions/A/MessageSecurity +0x00000001a04a7000 /System/Library/PrivateFrameworks/ProtocolBuffer.framework/Versions/A/ProtocolBuffer +0x00000001a5958000 /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression +0x00000001a534a000 /usr/lib/libcoretls.dylib +0x00000001a72a7000 /usr/lib/libcoretls_cfhelpers.dylib +0x00000001a603c000 /usr/lib/libpam.2.dylib +0x00000001a7313000 /usr/lib/libxar.1.dylib +0x00000001a76e2000 /usr/lib/libheimdal-asn1.dylib +0x00000001a5dad000 /usr/lib/libpcap.A.dylib +0x00000001a0886000 /usr/lib/libdns_services.dylib +0x00000001a4787000 /System/Library/PrivateFrameworks/AppleSystemInfo.framework/Versions/A/AppleSystemInfo +0x00000001a503e000 /System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/Versions/A/IOMobileFramebuffer +0x00000001a5a1d000 /usr/lib/libbz2.1.0.dylib +0x00000001a533e000 /usr/lib/libCheckFix.dylib +0x000000019f0e0000 /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC +0x00000001a478d000 /System/Library/PrivateFrameworks/CoreNLP.framework/Versions/A/CoreNLP +0x00000001a154c000 /System/Library/PrivateFrameworks/MetadataUtilities.framework/Versions/A/MetadataUtilities +0x00000001a5374000 /usr/lib/libmecab.dylib +0x000000019b164000 /usr/lib/libCRFSuite.dylib +0x00000001a53d0000 /usr/lib/libgermantok.dylib +0x00000001a5fe5000 /usr/lib/libThaiTokenizer.dylib +0x00000001a1630000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage +0x00000001ad11d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib +0x00000001a7359000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib +0x00000001a4f3d000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib +0x000000019ad05000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib +0x00000001a6117000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib +0x00000001a53d3000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib +0x00000001a6027000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib +0x00000001a6112000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib +0x00000001a4882000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib +0x000000019b072000 /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparse.dylib +0x0000000211e45000 /System/Library/PrivateFrameworks/MIL.framework/Versions/A/MIL +0x00000001a5de2000 /usr/lib/libiconv.2.dylib +0x00000001a5d35000 /usr/lib/libcharset.1.dylib +0x00000001a2013000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory +0x00000001a2003000 /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory +0x00000001a72a9000 /System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS +0x00000001a5279000 /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation +0x00000001a7322000 /usr/lib/libutil.dylib +0x0000000210c99000 /System/Library/PrivateFrameworks/InstalledContentLibrary.framework/Versions/A/InstalledContentLibrary +0x000000019d561000 /System/Library/PrivateFrameworks/CoreServicesStore.framework/Versions/A/CoreServicesStore +0x00000002079a7000 /System/Library/PrivateFrameworks/AppleMobileFileIntegrity.framework/Versions/A/AppleMobileFileIntegrity +0x00000001bd06b000 /usr/lib/libmis.dylib +0x00000001cb25c000 /System/Library/PrivateFrameworks/MobileSystemServices.framework/Versions/A/MobileSystemServices +0x00000001e67bc000 /System/Library/PrivateFrameworks/ConfigProfileHelper.framework/Versions/A/ConfigProfileHelper +0x00000001a5fe7000 /System/Library/PrivateFrameworks/AppleSauce.framework/Versions/A/AppleSauce +0x000000019bdd3000 /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling +0x00000001a7326000 /usr/lib/libxslt.1.dylib +0x00000001a5ed4000 /usr/lib/libcmph.dylib +0x00000001a502b000 /System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji +0x00000001a487c000 /System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData +0x000000019b02a000 /System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon +0x00000001a530b000 /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement +0x0000000226e25000 /usr/lib/libTLE.dylib +0x0000000227c41000 /usr/lib/swift/libswift_RegexParser.dylib +0x00000001a7fa1000 /System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG +0x00000001a76c7000 /usr/lib/libexpat.1.dylib +0x00000001a8573000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib +0x00000001a859e000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib +0x00000001a8689000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib +0x00000001a7fe7000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib +0x00000001a862e000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib +0x00000001a8625000 /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib +0x00000001a3b9f000 /System/Library/PrivateFrameworks/FontServices.framework/libFontParser.dylib +0x00000001a07b3000 /System/Library/PrivateFrameworks/RunningBoardServices.framework/Versions/A/RunningBoardServices +0x00000001b31b0000 /System/Library/PrivateFrameworks/IOSurfaceAccelerator.framework/Versions/A/IOSurfaceAccelerator +0x00000001a80d8000 /System/Library/PrivateFrameworks/WatchdogClient.framework/Versions/A/WatchdogClient +0x000000019bf4f000 /System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay +0x00000001a3a76000 /System/Library/Frameworks/CoreMedia.framework/Versions/A/CoreMedia +0x00000001a385a000 /System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator +0x00000001a21a4000 /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo +0x00000001a603a000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders +0x00000001a8119000 /System/Library/Frameworks/VideoToolbox.framework/Versions/A/VideoToolbox +0x00000001a06f0000 /System/Library/PrivateFrameworks/BaseBoard.framework/Versions/A/BaseBoard +0x00000001a8620000 /System/Library/PrivateFrameworks/GPUWrangler.framework/Versions/A/GPUWrangler +0x00000001a8600000 /System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment +0x00000001a8628000 /System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay +0x000000020d2b6000 /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/libllvm-flatbuffers.dylib +0x00000001ff00b000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib +0x000000020d2b2000 /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/libGPUCompilerUtils.dylib +0x00000001a868f000 /System/Library/PrivateFrameworks/CMCaptureCore.framework/Versions/A/CMCaptureCore +0x000000020199f000 /System/Library/Frameworks/ExtensionFoundation.framework/Versions/A/ExtensionFoundation +0x00000001aee56000 /System/Library/PrivateFrameworks/CoreTime.framework/Versions/A/CoreTime +0x00000001a7c86000 /System/Library/PrivateFrameworks/AppServerSupport.framework/Versions/A/AppServerSupport +0x00000001aa034000 /System/Library/PrivateFrameworks/perfdata.framework/Versions/A/perfdata +0x000000019c06f000 /System/Library/PrivateFrameworks/AudioToolboxCore.framework/Versions/A/AudioToolboxCore +0x00000001a3a4d000 /System/Library/PrivateFrameworks/caulk.framework/Versions/A/caulk +0x00000001a98eb000 /usr/lib/libAudioStatistics.dylib +0x00000001bc4a9000 /System/Library/PrivateFrameworks/SystemPolicy.framework/Versions/A/SystemPolicy +0x00000001a9b8b000 /usr/lib/libSMC.dylib +0x00000001b28ce000 /System/Library/Frameworks/CoreMIDI.framework/Versions/A/CoreMIDI +0x00000001a8540000 /usr/lib/libAudioToolboxUtility.dylib +0x00000001b8125000 /System/Library/PrivateFrameworks/OSAServicesClient.framework/Versions/A/OSAServicesClient +0x00000001aa042000 /usr/lib/libperfcheck.dylib +0x00000001a75b2000 /System/Library/PrivateFrameworks/PlugInKit.framework/Versions/A/PlugInKit +0x00000001a526b000 /System/Library/PrivateFrameworks/AssertionServices.framework/Versions/A/AssertionServices +0x00000001ff06d000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib +0x00000001ff02c000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib +0x00000001ff207000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib +0x00000001ff035000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib +0x00000001ff029000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib +0x0000000226e04000 /usr/lib/libRosetta.dylib +0x00000001ff012000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib +0x00000001a46fe000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSCore.framework/Versions/A/MPSCore +0x00000001a58ce000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSImage.framework/Versions/A/MPSImage +0x00000001a53e8000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNeuralNetwork.framework/Versions/A/MPSNeuralNetwork +0x00000001a57d0000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSMatrix.framework/Versions/A/MPSMatrix +0x00000001a55e2000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSRayIntersector.framework/Versions/A/MPSRayIntersector +0x00000001a57ff000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNDArray.framework/Versions/A/MPSNDArray +0x0000000202e6f000 /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSFunctions.framework/Versions/A/MPSFunctions +0x000000019abca000 /System/Library/PrivateFrameworks/MetalTools.framework/Versions/A/MetalTools +0x00000001a4785000 /System/Library/PrivateFrameworks/AggregateDictionary.framework/Versions/A/AggregateDictionary +0x00000001a746a000 /usr/lib/libIOReport.dylib +0x00000001b1aba000 /System/Library/PrivateFrameworks/ASEProcessing.framework/Versions/A/ASEProcessing +0x0000000215ca1000 /System/Library/PrivateFrameworks/PhotosensitivityProcessing.framework/Versions/A/PhotosensitivityProcessing +0x00000001a7824000 /System/Library/PrivateFrameworks/GraphVisualizer.framework/Versions/A/GraphVisualizer +0x000000020d1d3000 /System/Library/PrivateFrameworks/FontServices.framework/Versions/A/FontServices +0x00000001a7c44000 /System/Library/PrivateFrameworks/OTSVG.framework/Versions/A/OTSVG +0x00000001a1d57000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib +0x00000001a7c90000 /System/Library/PrivateFrameworks/FontServices.framework/libhvf.dylib +0x000000020d1d4000 /System/Library/PrivateFrameworks/FontServices.framework/libXTFontStaticRegistryData.dylib +0x00000001c78c8000 /usr/lib/swift/libswiftMetal.dylib +0x00000001bff69000 /usr/lib/swift/libswiftsimd.dylib +0x000000021fc72000 /System/Library/PrivateFrameworks/VideoToolboxParavirtualizationSupport.framework/Versions/A/VideoToolboxParavirtualizationSupport +0x00000001a767b000 /System/Library/PrivateFrameworks/AppleVA.framework/Versions/A/AppleVA +0x00000001a992b000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS +0x000000019fc63000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices +0x00000001a869b000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore +0x00000001a9ce4000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD +0x00000001a9cd8000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy +0x00000001a98ff000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis +0x00000001a8659000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATSUI.framework/Versions/A/ATSUI +0x00000001a9c6b000 /usr/lib/libcups.2.dylib +0x00000001aa050000 /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos +0x00000001aa061000 /System/Library/Frameworks/GSS.framework/Versions/A/GSS +0x00000001a999d000 /usr/lib/libresolv.9.dylib +0x00000001a7ca0000 /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal +0x00000001b0bd3000 /System/Library/Frameworks/Kerberos.framework/Versions/A/Libraries/libHeimdalProxy.dylib +0x00000001aa0b9000 /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth +0x0000000200ba7000 /System/Library/Frameworks/AVFAudio.framework/Versions/A/AVFAudio +0x00000001b8174000 /System/Library/PrivateFrameworks/AXCoreUtilities.framework/Versions/A/AXCoreUtilities +0x00000001a9877000 /System/Library/PrivateFrameworks/AudioSession.framework/Versions/A/AudioSession +0x00000001aae31000 /System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth +0x00000001a777d000 /System/Library/PrivateFrameworks/MediaExperience.framework/Versions/A/MediaExperience +0x00000001a9716000 /System/Library/PrivateFrameworks/AudioSession.framework/libSessionUtility.dylib +0x00000001a9cf0000 /System/Library/PrivateFrameworks/AudioResourceArbitration.framework/Versions/A/AudioResourceArbitration +0x00000001add59000 /System/Library/PrivateFrameworks/PowerLog.framework/Versions/A/PowerLog +0x00000001adc98000 /System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth +0x00000001b0bd4000 /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit +0x00000001a50ca000 /System/Library/PrivateFrameworks/CoreUtils.framework/Versions/A/CoreUtils +0x000000020baa6000 /System/Library/PrivateFrameworks/CoreUtilsExtras.framework/Versions/A/CoreUtilsExtras +0x0000000210b2f000 /System/Library/PrivateFrameworks/IO80211.framework/Versions/A/IO80211 +0x00000001a76ed000 /System/Library/PrivateFrameworks/IconFoundation.framework/Versions/A/IconFoundation +0x00000001acd47000 /System/Library/PrivateFrameworks/SpeechRecognitionCore.framework/Versions/A/SpeechRecognitionCore +0x00000001016d8000 /Users/andrewc/Library/Java/JavaVirtualMachines/corretto-17.0.3/Contents/Home/lib/server/libjvm.dylib +0x00000001006e8000 /Users/andrewc/Library/Java/JavaVirtualMachines/corretto-17.0.3/Contents/Home/lib/libjimage.dylib +0x0000000100730000 /Users/andrewc/Library/Java/JavaVirtualMachines/corretto-17.0.3/Contents/Home/lib/libjava.dylib +0x00000001009c4000 /Users/andrewc/Library/Java/JavaVirtualMachines/corretto-17.0.3/Contents/Home/lib/libnio.dylib +0x0000000100d24000 /Users/andrewc/Library/Java/JavaVirtualMachines/corretto-17.0.3/Contents/Home/lib/libnet.dylib +0x00000001009e4000 /Users/andrewc/Library/Java/JavaVirtualMachines/corretto-17.0.3/Contents/Home/lib/libzip.dylib +0x0000000130000000 /Users/andrewc/git/bq/babushka-go/java/target/debug/libjavababushka.dylib + + +VM Arguments: +jvm_args: -Djava.library.path=/Users/andrewc/git/bq/babushka-go/java/benchmarks/../target/debug -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant +java_command: javababushka.benchmarks.BenchmarkingApp -clients babushka_jni -dataSize 10 -concurrentTasks 1 -clientCount 1 +java_class_path (initial): /Users/andrewc/git/bq/babushka-go/java/benchmarks/build/classes/java/main:/Users/andrewc/git/bq/babushka-go/java/benchmarks/build/resources/main:/Users/andrewc/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/32.1.1-jre/ad575652d84153075dd41ec6177ccb15251262b2/guava-32.1.1-jre.jar:/Users/andrewc/.gradle/caches/modules-2/files-2.1/redis.clients/jedis/4.4.3/a3841f38753f75ec0aa1f48f4b26ecb9434ce1fe/jedis-4.4.3.jar:/Users/andrewc/.gradle/caches/modules-2/files-2.1/io.lettuce/lettuce-core/6.2.6.RELEASE/4d1c1700a271903b15384bf90c28471d750420ec/lettuce-core-6.2.6.RELEASE.jar:/Users/andrewc/.gradle/caches/modules-2/files-2.1/commons-cli/commons-cli/1.5.0/dc98be5d5390230684a092589d70ea76a147925c/commons-cli-1.5.0.jar:/Users/andrewc/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.13.0/b7263237aa89c1f99b327197c41d0669707a462e/commons-lang3-3.13.0.jar:/Users/andrewc/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protobuf-java/3.24.3/8e0f08a59c21e3f17121667489a005a8df091af0/protobuf-java-3.24.3.jar:/Users/andrewc/.gradle/caches/modules-2/files-2.1/com.google.guava/failureaccess/1.0.1/1dcf1de382a0bf95a3d8b0849546c88bac1292c9/failureaccess-1.0.1.jar:/Users/andrewc/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/3.0.2/25ea2e8b0c338a877313bd4672d3fe056ea78f0d/jsr305-3.0.2.jar:/Users/andrewc/.gradle/caches/modules-2/files-2.1/org.checkerframework/checker-qual/3.33.0/de2b60b62da487644fc11f734e73c8b0b431238f/checker-qual-3.33.0.jar:/Users/andrewc/.gradle/caches/modules-2/files-2.1/com.google.errorprone/error_prone_annotations/2.18.0/89b684257096f548fa39a7df9fdaa409d4d4df91/error_prone_annotations-2.18.0.jar:/Users/andrewc/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.36/6c62681a2f655b49963a5983b8b0950a6120ae14/slf4j-api-1.7.36.jar:/Users/andrewc/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-pool2/2.11.1/8970fd110c965f285ed4c6e40be7630c62db6f68/commons-pool2-2.11.1.jar:/Us +Launcher Type: SUN_STANDARD + +[Global flags] + intx CICompilerCount = 4 {product} {ergonomic} + uint ConcGCThreads = 2 {product} {ergonomic} + uint G1ConcRefinementThreads = 9 {product} {ergonomic} + size_t G1HeapRegionSize = 8388608 {product} {ergonomic} + uintx GCDrainStackTargetSize = 64 {product} {ergonomic} + size_t InitialHeapSize = 1073741824 {product} {ergonomic} + size_t MarkStackSize = 4194304 {product} {ergonomic} + size_t MaxHeapSize = 17179869184 {product} {ergonomic} + size_t MaxNewSize = 10301210624 {product} {ergonomic} + size_t MinHeapDeltaBytes = 8388608 {product} {ergonomic} + size_t MinHeapSize = 8388608 {product} {ergonomic} + uintx NonNMethodCodeHeapSize = 5839564 {pd product} {ergonomic} + uintx NonProfiledCodeHeapSize = 122909338 {pd product} {ergonomic} + uintx ProfiledCodeHeapSize = 122909338 {pd product} {ergonomic} + uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} + bool SegmentedCodeCache = true {product} {ergonomic} + size_t SoftMaxHeapSize = 17179869184 {manageable} {ergonomic} + bool UseCompressedClassPointers = true {product lp64_product} {ergonomic} + bool UseCompressedOops = true {product lp64_product} {ergonomic} + bool UseG1GC = true {product} {ergonomic} + bool UseNUMA = false {product} {ergonomic} + bool UseNUMAInterleaving = false {product} {ergonomic} + +Logging: +Log output configuration: + #0: stdout all=warning uptime,level,tags + #1: stderr all=off uptime,level,tags + +Environment Variables: +JAVA_HOME=/Users/andrewc/Library/Java/JavaVirtualMachines/corretto-17.0.3/Contents/Home +PATH=/opt/homebrew/opt/node@16/bin:/usr/local/mysql/bin:/opt/homebrew/opt/ruby/bin:/Users/andrewc/Library/Python/3.8/bin:/opt/homebrew/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/MacGPG2/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Users/andrewc/.cargo/bin +SHELL=/bin/zsh +LC_CTYPE=en_CA.UTF-8 + +Signal Handlers: + SIGSEGV: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO + SIGBUS: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO + SIGFPE: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO + SIGPIPE: javaSignalHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO + SIGXFSZ: javaSignalHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO + SIGILL: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO + SIGUSR2: SR_handler in libjvm.dylib, mask=00100000000000000000000000000000, flags=SA_RESTART|SA_SIGINFO + SIGHUP: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO + SIGINT: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO + SIGTERM: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO + SIGQUIT: UserHandler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO + *** Handler was modified! + *** Expected: javaSignalHandler in libjvm.dylib, mask=11100110100111111111111111111111, flags=SA_RESTART|SA_SIGINFO + SIGTRAP: crash_handler in libjvm.dylib, mask=11100110000111110111111111111111, flags=SA_RESTART|SA_SIGINFO + + +--------------- S Y S T E M --------------- + +OS: +uname: Darwin 22.6.0 Darwin Kernel Version 22.6.0: Fri Sep 15 13:41:28 PDT 2023; root:xnu-8796.141.3.700.8~1/RELEASE_ARM64_T6000 arm64 +OS uptime: 2 days 3:32 hours +rlimit (soft/hard): STACK 8176k/65520k , CORE 0k/infinity , NPROC 10666/16000 , NOFILE 10240/infinity , AS infinity/infinity , CPU infinity/infinity , DATA infinity/infinity , FSIZE infinity/infinity , MEMLOCK infinity/infinity , RSS infinity/infinity +load average: 2.36 3.48 4.55 + +CPU: total 10 (initial active 10) 0x61:0x0:0x1b588bb3:0, fp, simd, crc, lse + +Memory: 16k page, physical 67108864k(1300816k free), swap 0k(0k free) + +vm_info: OpenJDK 64-Bit Server VM (17.0.3+6-LTS) for bsd-aarch64 JRE (17.0.3+6-LTS), built on Apr 16 2022 17:14:31 by "jenkins" with clang Apple LLVM 13.0.0 (clang-1300.0.29.30) + +END. diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 7cbe8093e1..6a2eb1f1db 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -9,6 +9,7 @@ import java.util.stream.Stream; import javababushka.benchmarks.clients.JedisClient; import javababushka.benchmarks.clients.JedisPseudoAsyncClient; +import javababushka.benchmarks.clients.JniSyncClient; import javababushka.benchmarks.clients.LettuceAsyncClient; import javababushka.benchmarks.clients.LettuceClient; import org.apache.commons.cli.CommandLine; @@ -62,6 +63,9 @@ public static void main(String[] args) { case LETTUCE_ASYNC: testClientSetGet(LettuceAsyncClient::new, runConfiguration, true); break; + case BABUSHKA_JNI: + testClientSetGet(JniSyncClient::new, runConfiguration, true); + break; case BABUSHKA_ASYNC: System.out.println("Babushka async not yet configured"); break; @@ -212,6 +216,7 @@ public enum ClientName { JEDIS_ASYNC("Jedis async"), LETTUCE("Lettuce"), LETTUCE_ASYNC("Lettuce async"), + BABUSHKA_JNI("JNI sync"), BABUSHKA_ASYNC("Babushka async"), ALL("All"), ALL_SYNC("All sync"), diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java new file mode 100644 index 0000000000..02c3cf3f9e --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java @@ -0,0 +1,307 @@ +package javababushka.benchmarks.clients; + +import java.io.IOException; +import java.net.StandardProtocolFamily; +import java.net.UnixDomainSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; +import java.util.ArrayList; +import java.util.Arrays; +import javababushka.benchmarks.utils.ConnectionSettings; +import javababushka.client.RedisClient; +import org.apache.commons.lang3.tuple.MutablePair; +import org.apache.commons.lang3.tuple.Pair; +import redis_request.RedisRequestOuterClass; +import response.ResponseOuterClass; + +/** A JNI-built client using Unix Domain Sockets with async capabilities */ +public class JniSyncClient implements SyncClient { + + private static int MAX_TIMEOUT = 1000; + + private RedisClient client; + + private SocketChannel channel; + + private boolean isChannelWriting = false; + + @Override + public void connectToRedis() { + connectToRedis(new ConnectionSettings("localhost", 6379, false)); + } + + @Override + public void connectToRedis(ConnectionSettings connectionSettings) { + + // Create redis client + client = new RedisClient(); + + // Get socket listener address/path + RedisClient.startSocketListenerExternal(client); + + int timeout = 0; + int maxTimeout = 1000; + while (client.socketPath == null && timeout < maxTimeout) { + timeout++; + try { + Thread.sleep(250); + } catch (InterruptedException exception) { + // ignored + } + } + + System.out.println("Socket Path: " + client.socketPath); + UnixDomainSocketAddress socketAddress = UnixDomainSocketAddress.of(client.socketPath); + + // Start the socket listener + try { + channel = SocketChannel.open(StandardProtocolFamily.UNIX); + channel.connect(socketAddress); + } catch (IOException ioException) { + ioException.printStackTrace(); + return; + } + + String host = connectionSettings.host; + int port = connectionSettings.port; + connection_request.ConnectionRequestOuterClass.TlsMode tls = + connectionSettings.useSsl + ? + // TODO: secure or insecure TLS? + connection_request.ConnectionRequestOuterClass.TlsMode.SecureTls + : connection_request.ConnectionRequestOuterClass.TlsMode.NoTls; + + connection_request.ConnectionRequestOuterClass.ConnectionRequest request = + connection_request.ConnectionRequestOuterClass.ConnectionRequest.newBuilder() + .addAddresses( + connection_request.ConnectionRequestOuterClass.AddressInfo.newBuilder() + .setHost(host) + .setPort(port)) + .setTlsMode(tls) + .setClusterModeEnabled(false) + // In millis + .setResponseTimeout(250) + // In millis + .setClientCreationTimeout(2500) + .setReadFromReplicaStrategy( + connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy + .AlwaysFromPrimary) + .setConnectionRetryStrategy( + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.newBuilder() + .setNumberOfRetries(1) + .setFactor(1) + .setExponentBase(1)) + .setAuthenticationInfo( + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.newBuilder() + .setPassword("") + .setUsername("default")) + .setDatabaseId(0) + .build(); + + makeConnection(request); + } + + @Override + public void set(String key, String value) { + + int futureIdx = 1; + RedisRequestOuterClass.Command.ArgsArray args = + RedisRequestOuterClass.Command.ArgsArray.newBuilder().addArgs(key).addArgs(value).build(); + RedisRequestOuterClass.RedisRequest request = + RedisRequestOuterClass.RedisRequest.newBuilder() + .setCallbackIdx(futureIdx) + .setSingleCommand( + RedisRequestOuterClass.Command.newBuilder() + .setRequestType(RedisRequestOuterClass.RequestType.SetString) + .setArgsArray(args)) + .setRoute( + RedisRequestOuterClass.Routes.newBuilder() + .setSimpleRoutes(RedisRequestOuterClass.SimpleRoutes.AllNodes)) + .build(); + + ResponseOuterClass.Response response = makeRedisRequest(request); + // nothing to do with the response + } + + @Override + public String get(String key) { + int futureIdx = 1; + RedisRequestOuterClass.RedisRequest getStringRequest = + RedisRequestOuterClass.RedisRequest.newBuilder() + .setCallbackIdx(futureIdx) + .setSingleCommand( + RedisRequestOuterClass.Command.newBuilder() + .setRequestType(RedisRequestOuterClass.RequestType.GetString) + .setArgsArray( + RedisRequestOuterClass.Command.ArgsArray.newBuilder().addArgs(key))) + .setRoute( + RedisRequestOuterClass.Routes.newBuilder() + .setSimpleRoutes(RedisRequestOuterClass.SimpleRoutes.AllNodes)) + .build(); + + ResponseOuterClass.Response response = makeRedisRequest(getStringRequest); + return response.toString(); + } + + @Override + public void closeConnection() {} + + @Override + public String getName() { + return "JNI (with UDS) Sync"; + } + + // Left is length of message, right is position + private static Pair decodeVarint(byte[] buffer, int pos) throws Exception { + long mask = ((long) 1 << 32) - 1; + int shift = 0; + long result = 0; + while (true) { + byte b = buffer[pos]; + result |= (b & 0x7F) << shift; + pos += 1; + if ((b & 0x80) == 0) { + result &= mask; + // result = (int) result; + return new MutablePair<>(result, pos); + } + shift += 7; + if (shift >= 64) { + throw new Exception("Too many bytes when decoding varint."); + } + } + } + + private static ResponseOuterClass.Response decodeMessage(byte[] buffer) throws Exception { + Pair pair = decodeVarint(buffer, 0); + int startIdx = (int) pair.getRight(); + byte[] responseBytes = + Arrays.copyOfRange(buffer, startIdx, startIdx + (int) (long) pair.getLeft()); + ResponseOuterClass.Response response = ResponseOuterClass.Response.parseFrom(responseBytes); + return response; + } + + private static Byte[] varintBytes(int value) { + ArrayList output = new ArrayList(); + int bits = value & 0x7F; + value >>= 7; + while (value > 0) { + output.add(new Byte((byte) (0x80 | bits))); + bits = value & 0x7F; + value >>= 7; + } + output.add(new Byte((byte) bits)); + Byte[] arr = new Byte[] {}; + return output.toArray(arr); + } + + private static byte[] readSocketMessage(SocketChannel channel) throws IOException { + ByteBuffer buffer = ByteBuffer.allocate(1024); + int bytesRead = channel.read(buffer); + if (bytesRead <= 0) { + return null; + } + + byte[] bytes = new byte[bytesRead]; + buffer.flip(); + buffer.get(bytes); + return bytes; + } + + private ResponseOuterClass.Response makeConnection( + connection_request.ConnectionRequestOuterClass.ConnectionRequest request) { + Byte[] varint = varintBytes(request.toByteArray().length); + + // System.out.println("Request: \n" + request.toString()); + ByteBuffer buffer = ByteBuffer.allocate(1024); + buffer.clear(); + for (Byte b : varint) { + buffer.put(b); + } + buffer.put(request.toByteArray()); + buffer.flip(); + while (isChannelWriting) { + try { + Thread.sleep(250); + } catch (InterruptedException interruptedException) { + // ignore... + } + } + isChannelWriting = true; + while (buffer.hasRemaining()) { + try { + channel.write(buffer); + } catch (IOException ioException) { + // ignore... + } + } + isChannelWriting = false; + + ResponseOuterClass.Response response = null; + int timeout = 0; + try { + byte[] responseBuffer = readSocketMessage(channel); + while (responseBuffer == null && timeout < MAX_TIMEOUT) { + Thread.sleep(250); + timeout++; + responseBuffer = readSocketMessage(channel); + } + + response = decodeMessage(responseBuffer); + } catch (Exception e) { + e.printStackTrace(); + } + return response; + } + + private ResponseOuterClass.Response makeRedisRequest( + RedisRequestOuterClass.RedisRequest request) { + Byte[] varint = varintBytes(request.toByteArray().length); + + // System.out.println("Request: \n" + request.toString()); + ByteBuffer buffer = ByteBuffer.allocate(1024); + buffer.clear(); + for (Byte b : varint) { + buffer.put(b); + } + buffer.put(request.toByteArray()); + buffer.flip(); + while (isChannelWriting) { + try { + Thread.sleep(250); + } catch (InterruptedException interruptedException) { + // ignore... + } + } + isChannelWriting = true; + while (buffer.hasRemaining()) { + try { + channel.write(buffer); + } catch (IOException ioException) { + // ignore... + } + } + isChannelWriting = false; + + int timeout = 0; + byte[] responseBuffer = null; + while (responseBuffer == null && timeout < MAX_TIMEOUT) { + timeout++; + try { + responseBuffer = readSocketMessage(channel); + Thread.sleep(250); + } catch (IOException | InterruptedException exception) { + // ignore... + } + } + + // nothing to do with the responseBuffer message + ResponseOuterClass.Response response = null; + try { + response = decodeMessage(responseBuffer); + } catch (Exception e) { + e.printStackTrace(); + } + return response; + } +} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 646ee4a809..938e8e6f20 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -109,7 +109,9 @@ public static Map calculateResults( percentile(latencies, 50), percentile(latencies, 90), percentile(latencies, 99), - stdDeviation(latencies, avgLatency))); + stdDeviation(latencies, avgLatency), + latencies.size() + )); } return results; @@ -161,6 +163,8 @@ public static void printResults(Map resultsMap) { action + " p99 latency in ms: " + results.p99Latency / LATENCY_NORMALIZATION); System.out.println( action + " std dev in ms: " + results.stdDeviation / LATENCY_NORMALIZATION); + System.out.println( + action + " total hits: " + results.totalHits); } } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java index 4f62f840c0..f35c8023e5 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java @@ -8,12 +8,15 @@ public class LatencyResults { public final long p99Latency; public final double stdDeviation; + public final int totalHits; + public LatencyResults( - double avgLatency, long p50Latency, long p90Latency, long p99Latency, double stdDeviation) { + double avgLatency, long p50Latency, long p90Latency, long p99Latency, double stdDeviation, int totalHits) { this.avgLatency = avgLatency; this.p50Latency = p50Latency; this.p90Latency = p90Latency; this.p99Latency = p99Latency; this.stdDeviation = stdDeviation; + this.totalHits = totalHits; } } diff --git a/java/benchmarks/src/main/java/javababushka/client/ConnectionRequestOuterClass.java b/java/benchmarks/src/main/java/javababushka/client/ConnectionRequestOuterClass.java new file mode 100644 index 0000000000..3a9d695168 --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/client/ConnectionRequestOuterClass.java @@ -0,0 +1,4289 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: connection_request.proto + +package connection_request; + +public final class ConnectionRequestOuterClass { + private ConnectionRequestOuterClass() {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); + } + + /** Protobuf enum {@code connection_request.ReadFromReplicaStrategy} */ + public enum ReadFromReplicaStrategy implements com.google.protobuf.ProtocolMessageEnum { + /** AlwaysFromPrimary = 0; */ + AlwaysFromPrimary(0), + /** RoundRobin = 1; */ + RoundRobin(1), + /** LowestLatency = 2; */ + LowestLatency(2), + /** AZAffinity = 3; */ + AZAffinity(3), + UNRECOGNIZED(-1), + ; + + /** AlwaysFromPrimary = 0; */ + public static final int AlwaysFromPrimary_VALUE = 0; + + /** RoundRobin = 1; */ + public static final int RoundRobin_VALUE = 1; + + /** LowestLatency = 2; */ + public static final int LowestLatency_VALUE = 2; + + /** AZAffinity = 3; */ + public static final int AZAffinity_VALUE = 3; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ReadFromReplicaStrategy valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static ReadFromReplicaStrategy forNumber(int value) { + switch (value) { + case 0: + return AlwaysFromPrimary; + case 1: + return RoundRobin; + case 2: + return LowestLatency; + case 3: + return AZAffinity; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public ReadFromReplicaStrategy findValueByNumber(int number) { + return ReadFromReplicaStrategy.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return connection_request.ConnectionRequestOuterClass.getDescriptor().getEnumTypes().get(0); + } + + private static final ReadFromReplicaStrategy[] VALUES = values(); + + public static ReadFromReplicaStrategy valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private ReadFromReplicaStrategy(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:connection_request.ReadFromReplicaStrategy) + } + + /** Protobuf enum {@code connection_request.TlsMode} */ + public enum TlsMode implements com.google.protobuf.ProtocolMessageEnum { + /** NoTls = 0; */ + NoTls(0), + /** SecureTls = 1; */ + SecureTls(1), + /** InsecureTls = 2; */ + InsecureTls(2), + UNRECOGNIZED(-1), + ; + + /** NoTls = 0; */ + public static final int NoTls_VALUE = 0; + + /** SecureTls = 1; */ + public static final int SecureTls_VALUE = 1; + + /** InsecureTls = 2; */ + public static final int InsecureTls_VALUE = 2; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static TlsMode valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static TlsMode forNumber(int value) { + switch (value) { + case 0: + return NoTls; + case 1: + return SecureTls; + case 2: + return InsecureTls; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public TlsMode findValueByNumber(int number) { + return TlsMode.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return connection_request.ConnectionRequestOuterClass.getDescriptor().getEnumTypes().get(1); + } + + private static final TlsMode[] VALUES = values(); + + public static TlsMode valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private TlsMode(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:connection_request.TlsMode) + } + + public interface AddressInfoOrBuilder + extends + // @@protoc_insertion_point(interface_extends:connection_request.AddressInfo) + com.google.protobuf.MessageOrBuilder { + + /** + * string host = 1; + * + * @return The host. + */ + java.lang.String getHost(); + + /** + * string host = 1; + * + * @return The bytes for host. + */ + com.google.protobuf.ByteString getHostBytes(); + + /** + * uint32 port = 2; + * + * @return The port. + */ + int getPort(); + } + + /** Protobuf type {@code connection_request.AddressInfo} */ + public static final class AddressInfo extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:connection_request.AddressInfo) + AddressInfoOrBuilder { + private static final long serialVersionUID = 0L; + + // Use AddressInfo.newBuilder() to construct. + private AddressInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private AddressInfo() { + host_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new AddressInfo(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_AddressInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_AddressInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.AddressInfo.class, + connection_request.ConnectionRequestOuterClass.AddressInfo.Builder.class); + } + + public static final int HOST_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object host_ = ""; + + /** + * string host = 1; + * + * @return The host. + */ + @java.lang.Override + public java.lang.String getHost() { + java.lang.Object ref = host_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + host_ = s; + return s; + } + } + + /** + * string host = 1; + * + * @return The bytes for host. + */ + @java.lang.Override + public com.google.protobuf.ByteString getHostBytes() { + java.lang.Object ref = host_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + host_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PORT_FIELD_NUMBER = 2; + private int port_ = 0; + + /** + * uint32 port = 2; + * + * @return The port. + */ + @java.lang.Override + public int getPort() { + return port_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(host_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, host_); + } + if (port_ != 0) { + output.writeUInt32(2, port_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(host_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, host_); + } + if (port_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeUInt32Size(2, port_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof connection_request.ConnectionRequestOuterClass.AddressInfo)) { + return super.equals(obj); + } + connection_request.ConnectionRequestOuterClass.AddressInfo other = + (connection_request.ConnectionRequestOuterClass.AddressInfo) obj; + + if (!getHost().equals(other.getHost())) return false; + if (getPort() != other.getPort()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + HOST_FIELD_NUMBER; + hash = (53 * hash) + getHost().hashCode(); + hash = (37 * hash) + PORT_FIELD_NUMBER; + hash = (53 * hash) + getPort(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.AddressInfo parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.AddressInfo parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + connection_request.ConnectionRequestOuterClass.AddressInfo prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code connection_request.AddressInfo} */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:connection_request.AddressInfo) + connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_AddressInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_AddressInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.AddressInfo.class, + connection_request.ConnectionRequestOuterClass.AddressInfo.Builder.class); + } + + // Construct using connection_request.ConnectionRequestOuterClass.AddressInfo.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + host_ = ""; + port_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_AddressInfo_descriptor; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AddressInfo + getDefaultInstanceForType() { + return connection_request.ConnectionRequestOuterClass.AddressInfo.getDefaultInstance(); + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AddressInfo build() { + connection_request.ConnectionRequestOuterClass.AddressInfo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AddressInfo buildPartial() { + connection_request.ConnectionRequestOuterClass.AddressInfo result = + new connection_request.ConnectionRequestOuterClass.AddressInfo(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + connection_request.ConnectionRequestOuterClass.AddressInfo result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.host_ = host_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.port_ = port_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof connection_request.ConnectionRequestOuterClass.AddressInfo) { + return mergeFrom((connection_request.ConnectionRequestOuterClass.AddressInfo) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(connection_request.ConnectionRequestOuterClass.AddressInfo other) { + if (other + == connection_request.ConnectionRequestOuterClass.AddressInfo.getDefaultInstance()) + return this; + if (!other.getHost().isEmpty()) { + host_ = other.host_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.getPort() != 0) { + setPort(other.getPort()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + host_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + port_ = input.readUInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object host_ = ""; + + /** + * string host = 1; + * + * @return The host. + */ + public java.lang.String getHost() { + java.lang.Object ref = host_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + host_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * string host = 1; + * + * @return The bytes for host. + */ + public com.google.protobuf.ByteString getHostBytes() { + java.lang.Object ref = host_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + host_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * string host = 1; + * + * @param value The host to set. + * @return This builder for chaining. + */ + public Builder setHost(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + host_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * string host = 1; + * + * @return This builder for chaining. + */ + public Builder clearHost() { + host_ = getDefaultInstance().getHost(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * string host = 1; + * + * @param value The bytes for host to set. + * @return This builder for chaining. + */ + public Builder setHostBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + host_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private int port_; + + /** + * uint32 port = 2; + * + * @return The port. + */ + @java.lang.Override + public int getPort() { + return port_; + } + + /** + * uint32 port = 2; + * + * @param value The port to set. + * @return This builder for chaining. + */ + public Builder setPort(int value) { + + port_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * uint32 port = 2; + * + * @return This builder for chaining. + */ + public Builder clearPort() { + bitField0_ = (bitField0_ & ~0x00000002); + port_ = 0; + onChanged(); + return this; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:connection_request.AddressInfo) + } + + // @@protoc_insertion_point(class_scope:connection_request.AddressInfo) + private static final connection_request.ConnectionRequestOuterClass.AddressInfo + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.AddressInfo(); + } + + public static connection_request.ConnectionRequestOuterClass.AddressInfo getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AddressInfo parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AddressInfo getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface AuthenticationInfoOrBuilder + extends + // @@protoc_insertion_point(interface_extends:connection_request.AuthenticationInfo) + com.google.protobuf.MessageOrBuilder { + + /** + * string password = 1; + * + * @return The password. + */ + java.lang.String getPassword(); + + /** + * string password = 1; + * + * @return The bytes for password. + */ + com.google.protobuf.ByteString getPasswordBytes(); + + /** + * string username = 2; + * + * @return The username. + */ + java.lang.String getUsername(); + + /** + * string username = 2; + * + * @return The bytes for username. + */ + com.google.protobuf.ByteString getUsernameBytes(); + } + + /** Protobuf type {@code connection_request.AuthenticationInfo} */ + public static final class AuthenticationInfo extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:connection_request.AuthenticationInfo) + AuthenticationInfoOrBuilder { + private static final long serialVersionUID = 0L; + + // Use AuthenticationInfo.newBuilder() to construct. + private AuthenticationInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private AuthenticationInfo() { + password_ = ""; + username_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new AuthenticationInfo(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_AuthenticationInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_AuthenticationInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.class, + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder.class); + } + + public static final int PASSWORD_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object password_ = ""; + + /** + * string password = 1; + * + * @return The password. + */ + @java.lang.Override + public java.lang.String getPassword() { + java.lang.Object ref = password_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + password_ = s; + return s; + } + } + + /** + * string password = 1; + * + * @return The bytes for password. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPasswordBytes() { + java.lang.Object ref = password_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + password_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int USERNAME_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object username_ = ""; + + /** + * string username = 2; + * + * @return The username. + */ + @java.lang.Override + public java.lang.String getUsername() { + java.lang.Object ref = username_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + username_ = s; + return s; + } + } + + /** + * string username = 2; + * + * @return The bytes for username. + */ + @java.lang.Override + public com.google.protobuf.ByteString getUsernameBytes() { + java.lang.Object ref = username_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + username_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(password_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, password_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(username_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, username_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(password_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, password_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(username_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, username_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof connection_request.ConnectionRequestOuterClass.AuthenticationInfo)) { + return super.equals(obj); + } + connection_request.ConnectionRequestOuterClass.AuthenticationInfo other = + (connection_request.ConnectionRequestOuterClass.AuthenticationInfo) obj; + + if (!getPassword().equals(other.getPassword())) return false; + if (!getUsername().equals(other.getUsername())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PASSWORD_FIELD_NUMBER; + hash = (53 * hash) + getPassword().hashCode(); + hash = (37 * hash) + USERNAME_FIELD_NUMBER; + hash = (53 * hash) + getUsername().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + connection_request.ConnectionRequestOuterClass.AuthenticationInfo prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code connection_request.AuthenticationInfo} */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:connection_request.AuthenticationInfo) + connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_AuthenticationInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_AuthenticationInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.class, + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder.class); + } + + // Construct using + // connection_request.ConnectionRequestOuterClass.AuthenticationInfo.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + password_ = ""; + username_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_AuthenticationInfo_descriptor; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo + getDefaultInstanceForType() { + return connection_request.ConnectionRequestOuterClass.AuthenticationInfo + .getDefaultInstance(); + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo build() { + connection_request.ConnectionRequestOuterClass.AuthenticationInfo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo buildPartial() { + connection_request.ConnectionRequestOuterClass.AuthenticationInfo result = + new connection_request.ConnectionRequestOuterClass.AuthenticationInfo(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + connection_request.ConnectionRequestOuterClass.AuthenticationInfo result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.password_ = password_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.username_ = username_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof connection_request.ConnectionRequestOuterClass.AuthenticationInfo) { + return mergeFrom( + (connection_request.ConnectionRequestOuterClass.AuthenticationInfo) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + connection_request.ConnectionRequestOuterClass.AuthenticationInfo other) { + if (other + == connection_request.ConnectionRequestOuterClass.AuthenticationInfo + .getDefaultInstance()) return this; + if (!other.getPassword().isEmpty()) { + password_ = other.password_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getUsername().isEmpty()) { + username_ = other.username_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + password_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + username_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object password_ = ""; + + /** + * string password = 1; + * + * @return The password. + */ + public java.lang.String getPassword() { + java.lang.Object ref = password_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + password_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * string password = 1; + * + * @return The bytes for password. + */ + public com.google.protobuf.ByteString getPasswordBytes() { + java.lang.Object ref = password_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + password_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * string password = 1; + * + * @param value The password to set. + * @return This builder for chaining. + */ + public Builder setPassword(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + password_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * string password = 1; + * + * @return This builder for chaining. + */ + public Builder clearPassword() { + password_ = getDefaultInstance().getPassword(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * string password = 1; + * + * @param value The bytes for password to set. + * @return This builder for chaining. + */ + public Builder setPasswordBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + password_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object username_ = ""; + + /** + * string username = 2; + * + * @return The username. + */ + public java.lang.String getUsername() { + java.lang.Object ref = username_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + username_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * string username = 2; + * + * @return The bytes for username. + */ + public com.google.protobuf.ByteString getUsernameBytes() { + java.lang.Object ref = username_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + username_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * string username = 2; + * + * @param value The username to set. + * @return This builder for chaining. + */ + public Builder setUsername(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + username_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * string username = 2; + * + * @return This builder for chaining. + */ + public Builder clearUsername() { + username_ = getDefaultInstance().getUsername(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * string username = 2; + * + * @param value The bytes for username to set. + * @return This builder for chaining. + */ + public Builder setUsernameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + username_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:connection_request.AuthenticationInfo) + } + + // @@protoc_insertion_point(class_scope:connection_request.AuthenticationInfo) + private static final connection_request.ConnectionRequestOuterClass.AuthenticationInfo + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.AuthenticationInfo(); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AuthenticationInfo parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface ConnectionRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:connection_request.ConnectionRequest) + com.google.protobuf.MessageOrBuilder { + + /** repeated .connection_request.AddressInfo addresses = 1; */ + java.util.List getAddressesList(); + + /** repeated .connection_request.AddressInfo addresses = 1; */ + connection_request.ConnectionRequestOuterClass.AddressInfo getAddresses(int index); + + /** repeated .connection_request.AddressInfo addresses = 1; */ + int getAddressesCount(); + + /** repeated .connection_request.AddressInfo addresses = 1; */ + java.util.List + getAddressesOrBuilderList(); + + /** repeated .connection_request.AddressInfo addresses = 1; */ + connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder getAddressesOrBuilder( + int index); + + /** + * .connection_request.TlsMode tls_mode = 2; + * + * @return The enum numeric value on the wire for tlsMode. + */ + int getTlsModeValue(); + + /** + * .connection_request.TlsMode tls_mode = 2; + * + * @return The tlsMode. + */ + connection_request.ConnectionRequestOuterClass.TlsMode getTlsMode(); + + /** + * bool cluster_mode_enabled = 3; + * + * @return The clusterModeEnabled. + */ + boolean getClusterModeEnabled(); + + /** + * uint32 response_timeout = 4; + * + * @return The responseTimeout. + */ + int getResponseTimeout(); + + /** + * uint32 client_creation_timeout = 5; + * + * @return The clientCreationTimeout. + */ + int getClientCreationTimeout(); + + /** + * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; + * + * @return The enum numeric value on the wire for readFromReplicaStrategy. + */ + int getReadFromReplicaStrategyValue(); + + /** + * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; + * + * @return The readFromReplicaStrategy. + */ + connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy + getReadFromReplicaStrategy(); + + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; + * + * @return Whether the connectionRetryStrategy field is set. + */ + boolean hasConnectionRetryStrategy(); + + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; + * + * @return The connectionRetryStrategy. + */ + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + getConnectionRetryStrategy(); + + /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder + getConnectionRetryStrategyOrBuilder(); + + /** + * .connection_request.AuthenticationInfo authentication_info = 8; + * + * @return Whether the authenticationInfo field is set. + */ + boolean hasAuthenticationInfo(); + + /** + * .connection_request.AuthenticationInfo authentication_info = 8; + * + * @return The authenticationInfo. + */ + connection_request.ConnectionRequestOuterClass.AuthenticationInfo getAuthenticationInfo(); + + /** .connection_request.AuthenticationInfo authentication_info = 8; */ + connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder + getAuthenticationInfoOrBuilder(); + + /** + * uint32 database_id = 9; + * + * @return The databaseId. + */ + int getDatabaseId(); + } + + /** + * + * + *

+   * IMPORTANT - if you add fields here, you probably need to add them also in client/mod.rs:`sanitized_request_string`.
+   * 
+ * + * Protobuf type {@code connection_request.ConnectionRequest} + */ + public static final class ConnectionRequest extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:connection_request.ConnectionRequest) + ConnectionRequestOrBuilder { + private static final long serialVersionUID = 0L; + + // Use ConnectionRequest.newBuilder() to construct. + private ConnectionRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private ConnectionRequest() { + addresses_ = java.util.Collections.emptyList(); + tlsMode_ = 0; + readFromReplicaStrategy_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new ConnectionRequest(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_ConnectionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_ConnectionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.ConnectionRequest.class, + connection_request.ConnectionRequestOuterClass.ConnectionRequest.Builder.class); + } + + public static final int ADDRESSES_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private java.util.List addresses_; + + /** repeated .connection_request.AddressInfo addresses = 1; */ + @java.lang.Override + public java.util.List + getAddressesList() { + return addresses_; + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + @java.lang.Override + public java.util.List< + ? extends connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder> + getAddressesOrBuilderList() { + return addresses_; + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + @java.lang.Override + public int getAddressesCount() { + return addresses_.size(); + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AddressInfo getAddresses(int index) { + return addresses_.get(index); + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder + getAddressesOrBuilder(int index) { + return addresses_.get(index); + } + + public static final int TLS_MODE_FIELD_NUMBER = 2; + private int tlsMode_ = 0; + + /** + * .connection_request.TlsMode tls_mode = 2; + * + * @return The enum numeric value on the wire for tlsMode. + */ + @java.lang.Override + public int getTlsModeValue() { + return tlsMode_; + } + + /** + * .connection_request.TlsMode tls_mode = 2; + * + * @return The tlsMode. + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.TlsMode getTlsMode() { + connection_request.ConnectionRequestOuterClass.TlsMode result = + connection_request.ConnectionRequestOuterClass.TlsMode.forNumber(tlsMode_); + return result == null + ? connection_request.ConnectionRequestOuterClass.TlsMode.UNRECOGNIZED + : result; + } + + public static final int CLUSTER_MODE_ENABLED_FIELD_NUMBER = 3; + private boolean clusterModeEnabled_ = false; + + /** + * bool cluster_mode_enabled = 3; + * + * @return The clusterModeEnabled. + */ + @java.lang.Override + public boolean getClusterModeEnabled() { + return clusterModeEnabled_; + } + + public static final int RESPONSE_TIMEOUT_FIELD_NUMBER = 4; + private int responseTimeout_ = 0; + + /** + * uint32 response_timeout = 4; + * + * @return The responseTimeout. + */ + @java.lang.Override + public int getResponseTimeout() { + return responseTimeout_; + } + + public static final int CLIENT_CREATION_TIMEOUT_FIELD_NUMBER = 5; + private int clientCreationTimeout_ = 0; + + /** + * uint32 client_creation_timeout = 5; + * + * @return The clientCreationTimeout. + */ + @java.lang.Override + public int getClientCreationTimeout() { + return clientCreationTimeout_; + } + + public static final int READ_FROM_REPLICA_STRATEGY_FIELD_NUMBER = 6; + private int readFromReplicaStrategy_ = 0; + + /** + * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; + * + * @return The enum numeric value on the wire for readFromReplicaStrategy. + */ + @java.lang.Override + public int getReadFromReplicaStrategyValue() { + return readFromReplicaStrategy_; + } + + /** + * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; + * + * @return The readFromReplicaStrategy. + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy + getReadFromReplicaStrategy() { + connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy result = + connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy.forNumber( + readFromReplicaStrategy_); + return result == null + ? connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy.UNRECOGNIZED + : result; + } + + public static final int CONNECTION_RETRY_STRATEGY_FIELD_NUMBER = 7; + private connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + connectionRetryStrategy_; + + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; + * + * @return Whether the connectionRetryStrategy field is set. + */ + @java.lang.Override + public boolean hasConnectionRetryStrategy() { + return connectionRetryStrategy_ != null; + } + + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; + * + * @return The connectionRetryStrategy. + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + getConnectionRetryStrategy() { + return connectionRetryStrategy_ == null + ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + .getDefaultInstance() + : connectionRetryStrategy_; + } + + /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder + getConnectionRetryStrategyOrBuilder() { + return connectionRetryStrategy_ == null + ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + .getDefaultInstance() + : connectionRetryStrategy_; + } + + public static final int AUTHENTICATION_INFO_FIELD_NUMBER = 8; + private connection_request.ConnectionRequestOuterClass.AuthenticationInfo authenticationInfo_; + + /** + * .connection_request.AuthenticationInfo authentication_info = 8; + * + * @return Whether the authenticationInfo field is set. + */ + @java.lang.Override + public boolean hasAuthenticationInfo() { + return authenticationInfo_ != null; + } + + /** + * .connection_request.AuthenticationInfo authentication_info = 8; + * + * @return The authenticationInfo. + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo + getAuthenticationInfo() { + return authenticationInfo_ == null + ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance() + : authenticationInfo_; + } + + /** .connection_request.AuthenticationInfo authentication_info = 8; */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder + getAuthenticationInfoOrBuilder() { + return authenticationInfo_ == null + ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance() + : authenticationInfo_; + } + + public static final int DATABASE_ID_FIELD_NUMBER = 9; + private int databaseId_ = 0; + + /** + * uint32 database_id = 9; + * + * @return The databaseId. + */ + @java.lang.Override + public int getDatabaseId() { + return databaseId_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < addresses_.size(); i++) { + output.writeMessage(1, addresses_.get(i)); + } + if (tlsMode_ != connection_request.ConnectionRequestOuterClass.TlsMode.NoTls.getNumber()) { + output.writeEnum(2, tlsMode_); + } + if (clusterModeEnabled_ != false) { + output.writeBool(3, clusterModeEnabled_); + } + if (responseTimeout_ != 0) { + output.writeUInt32(4, responseTimeout_); + } + if (clientCreationTimeout_ != 0) { + output.writeUInt32(5, clientCreationTimeout_); + } + if (readFromReplicaStrategy_ + != connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy + .AlwaysFromPrimary.getNumber()) { + output.writeEnum(6, readFromReplicaStrategy_); + } + if (connectionRetryStrategy_ != null) { + output.writeMessage(7, getConnectionRetryStrategy()); + } + if (authenticationInfo_ != null) { + output.writeMessage(8, getAuthenticationInfo()); + } + if (databaseId_ != 0) { + output.writeUInt32(9, databaseId_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < addresses_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, addresses_.get(i)); + } + if (tlsMode_ != connection_request.ConnectionRequestOuterClass.TlsMode.NoTls.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, tlsMode_); + } + if (clusterModeEnabled_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(3, clusterModeEnabled_); + } + if (responseTimeout_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeUInt32Size(4, responseTimeout_); + } + if (clientCreationTimeout_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeUInt32Size(5, clientCreationTimeout_); + } + if (readFromReplicaStrategy_ + != connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy + .AlwaysFromPrimary.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(6, readFromReplicaStrategy_); + } + if (connectionRetryStrategy_ != null) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 7, getConnectionRetryStrategy()); + } + if (authenticationInfo_ != null) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize(8, getAuthenticationInfo()); + } + if (databaseId_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeUInt32Size(9, databaseId_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof connection_request.ConnectionRequestOuterClass.ConnectionRequest)) { + return super.equals(obj); + } + connection_request.ConnectionRequestOuterClass.ConnectionRequest other = + (connection_request.ConnectionRequestOuterClass.ConnectionRequest) obj; + + if (!getAddressesList().equals(other.getAddressesList())) return false; + if (tlsMode_ != other.tlsMode_) return false; + if (getClusterModeEnabled() != other.getClusterModeEnabled()) return false; + if (getResponseTimeout() != other.getResponseTimeout()) return false; + if (getClientCreationTimeout() != other.getClientCreationTimeout()) return false; + if (readFromReplicaStrategy_ != other.readFromReplicaStrategy_) return false; + if (hasConnectionRetryStrategy() != other.hasConnectionRetryStrategy()) return false; + if (hasConnectionRetryStrategy()) { + if (!getConnectionRetryStrategy().equals(other.getConnectionRetryStrategy())) return false; + } + if (hasAuthenticationInfo() != other.hasAuthenticationInfo()) return false; + if (hasAuthenticationInfo()) { + if (!getAuthenticationInfo().equals(other.getAuthenticationInfo())) return false; + } + if (getDatabaseId() != other.getDatabaseId()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getAddressesCount() > 0) { + hash = (37 * hash) + ADDRESSES_FIELD_NUMBER; + hash = (53 * hash) + getAddressesList().hashCode(); + } + hash = (37 * hash) + TLS_MODE_FIELD_NUMBER; + hash = (53 * hash) + tlsMode_; + hash = (37 * hash) + CLUSTER_MODE_ENABLED_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getClusterModeEnabled()); + hash = (37 * hash) + RESPONSE_TIMEOUT_FIELD_NUMBER; + hash = (53 * hash) + getResponseTimeout(); + hash = (37 * hash) + CLIENT_CREATION_TIMEOUT_FIELD_NUMBER; + hash = (53 * hash) + getClientCreationTimeout(); + hash = (37 * hash) + READ_FROM_REPLICA_STRATEGY_FIELD_NUMBER; + hash = (53 * hash) + readFromReplicaStrategy_; + if (hasConnectionRetryStrategy()) { + hash = (37 * hash) + CONNECTION_RETRY_STRATEGY_FIELD_NUMBER; + hash = (53 * hash) + getConnectionRetryStrategy().hashCode(); + } + if (hasAuthenticationInfo()) { + hash = (37 * hash) + AUTHENTICATION_INFO_FIELD_NUMBER; + hash = (53 * hash) + getAuthenticationInfo().hashCode(); + } + hash = (37 * hash) + DATABASE_ID_FIELD_NUMBER; + hash = (53 * hash) + getDatabaseId(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + connection_request.ConnectionRequestOuterClass.ConnectionRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * + * + *
+     * IMPORTANT - if you add fields here, you probably need to add them also in client/mod.rs:`sanitized_request_string`.
+     * 
+ * + * Protobuf type {@code connection_request.ConnectionRequest} + */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:connection_request.ConnectionRequest) + connection_request.ConnectionRequestOuterClass.ConnectionRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_ConnectionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_ConnectionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.ConnectionRequest.class, + connection_request.ConnectionRequestOuterClass.ConnectionRequest.Builder.class); + } + + // Construct using + // connection_request.ConnectionRequestOuterClass.ConnectionRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (addressesBuilder_ == null) { + addresses_ = java.util.Collections.emptyList(); + } else { + addresses_ = null; + addressesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + tlsMode_ = 0; + clusterModeEnabled_ = false; + responseTimeout_ = 0; + clientCreationTimeout_ = 0; + readFromReplicaStrategy_ = 0; + connectionRetryStrategy_ = null; + if (connectionRetryStrategyBuilder_ != null) { + connectionRetryStrategyBuilder_.dispose(); + connectionRetryStrategyBuilder_ = null; + } + authenticationInfo_ = null; + if (authenticationInfoBuilder_ != null) { + authenticationInfoBuilder_.dispose(); + authenticationInfoBuilder_ = null; + } + databaseId_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_ConnectionRequest_descriptor; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRequest + getDefaultInstanceForType() { + return connection_request.ConnectionRequestOuterClass.ConnectionRequest + .getDefaultInstance(); + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRequest build() { + connection_request.ConnectionRequestOuterClass.ConnectionRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRequest buildPartial() { + connection_request.ConnectionRequestOuterClass.ConnectionRequest result = + new connection_request.ConnectionRequestOuterClass.ConnectionRequest(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields( + connection_request.ConnectionRequestOuterClass.ConnectionRequest result) { + if (addressesBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + addresses_ = java.util.Collections.unmodifiableList(addresses_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.addresses_ = addresses_; + } else { + result.addresses_ = addressesBuilder_.build(); + } + } + + private void buildPartial0( + connection_request.ConnectionRequestOuterClass.ConnectionRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.tlsMode_ = tlsMode_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.clusterModeEnabled_ = clusterModeEnabled_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.responseTimeout_ = responseTimeout_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.clientCreationTimeout_ = clientCreationTimeout_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.readFromReplicaStrategy_ = readFromReplicaStrategy_; + } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.connectionRetryStrategy_ = + connectionRetryStrategyBuilder_ == null + ? connectionRetryStrategy_ + : connectionRetryStrategyBuilder_.build(); + } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.authenticationInfo_ = + authenticationInfoBuilder_ == null + ? authenticationInfo_ + : authenticationInfoBuilder_.build(); + } + if (((from_bitField0_ & 0x00000100) != 0)) { + result.databaseId_ = databaseId_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof connection_request.ConnectionRequestOuterClass.ConnectionRequest) { + return mergeFrom( + (connection_request.ConnectionRequestOuterClass.ConnectionRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + connection_request.ConnectionRequestOuterClass.ConnectionRequest other) { + if (other + == connection_request.ConnectionRequestOuterClass.ConnectionRequest + .getDefaultInstance()) return this; + if (addressesBuilder_ == null) { + if (!other.addresses_.isEmpty()) { + if (addresses_.isEmpty()) { + addresses_ = other.addresses_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureAddressesIsMutable(); + addresses_.addAll(other.addresses_); + } + onChanged(); + } + } else { + if (!other.addresses_.isEmpty()) { + if (addressesBuilder_.isEmpty()) { + addressesBuilder_.dispose(); + addressesBuilder_ = null; + addresses_ = other.addresses_; + bitField0_ = (bitField0_ & ~0x00000001); + addressesBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders + ? getAddressesFieldBuilder() + : null; + } else { + addressesBuilder_.addAllMessages(other.addresses_); + } + } + } + if (other.tlsMode_ != 0) { + setTlsModeValue(other.getTlsModeValue()); + } + if (other.getClusterModeEnabled() != false) { + setClusterModeEnabled(other.getClusterModeEnabled()); + } + if (other.getResponseTimeout() != 0) { + setResponseTimeout(other.getResponseTimeout()); + } + if (other.getClientCreationTimeout() != 0) { + setClientCreationTimeout(other.getClientCreationTimeout()); + } + if (other.readFromReplicaStrategy_ != 0) { + setReadFromReplicaStrategyValue(other.getReadFromReplicaStrategyValue()); + } + if (other.hasConnectionRetryStrategy()) { + mergeConnectionRetryStrategy(other.getConnectionRetryStrategy()); + } + if (other.hasAuthenticationInfo()) { + mergeAuthenticationInfo(other.getAuthenticationInfo()); + } + if (other.getDatabaseId() != 0) { + setDatabaseId(other.getDatabaseId()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + connection_request.ConnectionRequestOuterClass.AddressInfo m = + input.readMessage( + connection_request.ConnectionRequestOuterClass.AddressInfo.parser(), + extensionRegistry); + if (addressesBuilder_ == null) { + ensureAddressesIsMutable(); + addresses_.add(m); + } else { + addressesBuilder_.addMessage(m); + } + break; + } // case 10 + case 16: + { + tlsMode_ = input.readEnum(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: + { + clusterModeEnabled_ = input.readBool(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 32: + { + responseTimeout_ = input.readUInt32(); + bitField0_ |= 0x00000008; + break; + } // case 32 + case 40: + { + clientCreationTimeout_ = input.readUInt32(); + bitField0_ |= 0x00000010; + break; + } // case 40 + case 48: + { + readFromReplicaStrategy_ = input.readEnum(); + bitField0_ |= 0x00000020; + break; + } // case 48 + case 58: + { + input.readMessage( + getConnectionRetryStrategyFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000040; + break; + } // case 58 + case 66: + { + input.readMessage( + getAuthenticationInfoFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000080; + break; + } // case 66 + case 72: + { + databaseId_ = input.readUInt32(); + bitField0_ |= 0x00000100; + break; + } // case 72 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.util.List + addresses_ = java.util.Collections.emptyList(); + + private void ensureAddressesIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + addresses_ = + new java.util.ArrayList( + addresses_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.AddressInfo, + connection_request.ConnectionRequestOuterClass.AddressInfo.Builder, + connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder> + addressesBuilder_; + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public java.util.List + getAddressesList() { + if (addressesBuilder_ == null) { + return java.util.Collections.unmodifiableList(addresses_); + } else { + return addressesBuilder_.getMessageList(); + } + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public int getAddressesCount() { + if (addressesBuilder_ == null) { + return addresses_.size(); + } else { + return addressesBuilder_.getCount(); + } + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public connection_request.ConnectionRequestOuterClass.AddressInfo getAddresses(int index) { + if (addressesBuilder_ == null) { + return addresses_.get(index); + } else { + return addressesBuilder_.getMessage(index); + } + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public Builder setAddresses( + int index, connection_request.ConnectionRequestOuterClass.AddressInfo value) { + if (addressesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAddressesIsMutable(); + addresses_.set(index, value); + onChanged(); + } else { + addressesBuilder_.setMessage(index, value); + } + return this; + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public Builder setAddresses( + int index, + connection_request.ConnectionRequestOuterClass.AddressInfo.Builder builderForValue) { + if (addressesBuilder_ == null) { + ensureAddressesIsMutable(); + addresses_.set(index, builderForValue.build()); + onChanged(); + } else { + addressesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public Builder addAddresses( + connection_request.ConnectionRequestOuterClass.AddressInfo value) { + if (addressesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAddressesIsMutable(); + addresses_.add(value); + onChanged(); + } else { + addressesBuilder_.addMessage(value); + } + return this; + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public Builder addAddresses( + int index, connection_request.ConnectionRequestOuterClass.AddressInfo value) { + if (addressesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAddressesIsMutable(); + addresses_.add(index, value); + onChanged(); + } else { + addressesBuilder_.addMessage(index, value); + } + return this; + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public Builder addAddresses( + connection_request.ConnectionRequestOuterClass.AddressInfo.Builder builderForValue) { + if (addressesBuilder_ == null) { + ensureAddressesIsMutable(); + addresses_.add(builderForValue.build()); + onChanged(); + } else { + addressesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public Builder addAddresses( + int index, + connection_request.ConnectionRequestOuterClass.AddressInfo.Builder builderForValue) { + if (addressesBuilder_ == null) { + ensureAddressesIsMutable(); + addresses_.add(index, builderForValue.build()); + onChanged(); + } else { + addressesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public Builder addAllAddresses( + java.lang.Iterable + values) { + if (addressesBuilder_ == null) { + ensureAddressesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, addresses_); + onChanged(); + } else { + addressesBuilder_.addAllMessages(values); + } + return this; + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public Builder clearAddresses() { + if (addressesBuilder_ == null) { + addresses_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + addressesBuilder_.clear(); + } + return this; + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public Builder removeAddresses(int index) { + if (addressesBuilder_ == null) { + ensureAddressesIsMutable(); + addresses_.remove(index); + onChanged(); + } else { + addressesBuilder_.remove(index); + } + return this; + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public connection_request.ConnectionRequestOuterClass.AddressInfo.Builder getAddressesBuilder( + int index) { + return getAddressesFieldBuilder().getBuilder(index); + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder + getAddressesOrBuilder(int index) { + if (addressesBuilder_ == null) { + return addresses_.get(index); + } else { + return addressesBuilder_.getMessageOrBuilder(index); + } + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public java.util.List< + ? extends connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder> + getAddressesOrBuilderList() { + if (addressesBuilder_ != null) { + return addressesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(addresses_); + } + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public connection_request.ConnectionRequestOuterClass.AddressInfo.Builder + addAddressesBuilder() { + return getAddressesFieldBuilder() + .addBuilder( + connection_request.ConnectionRequestOuterClass.AddressInfo.getDefaultInstance()); + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public connection_request.ConnectionRequestOuterClass.AddressInfo.Builder addAddressesBuilder( + int index) { + return getAddressesFieldBuilder() + .addBuilder( + index, + connection_request.ConnectionRequestOuterClass.AddressInfo.getDefaultInstance()); + } + + /** repeated .connection_request.AddressInfo addresses = 1; */ + public java.util.List + getAddressesBuilderList() { + return getAddressesFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.AddressInfo, + connection_request.ConnectionRequestOuterClass.AddressInfo.Builder, + connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder> + getAddressesFieldBuilder() { + if (addressesBuilder_ == null) { + addressesBuilder_ = + new com.google.protobuf.RepeatedFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.AddressInfo, + connection_request.ConnectionRequestOuterClass.AddressInfo.Builder, + connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder>( + addresses_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean()); + addresses_ = null; + } + return addressesBuilder_; + } + + private int tlsMode_ = 0; + + /** + * .connection_request.TlsMode tls_mode = 2; + * + * @return The enum numeric value on the wire for tlsMode. + */ + @java.lang.Override + public int getTlsModeValue() { + return tlsMode_; + } + + /** + * .connection_request.TlsMode tls_mode = 2; + * + * @param value The enum numeric value on the wire for tlsMode to set. + * @return This builder for chaining. + */ + public Builder setTlsModeValue(int value) { + tlsMode_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * .connection_request.TlsMode tls_mode = 2; + * + * @return The tlsMode. + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.TlsMode getTlsMode() { + connection_request.ConnectionRequestOuterClass.TlsMode result = + connection_request.ConnectionRequestOuterClass.TlsMode.forNumber(tlsMode_); + return result == null + ? connection_request.ConnectionRequestOuterClass.TlsMode.UNRECOGNIZED + : result; + } + + /** + * .connection_request.TlsMode tls_mode = 2; + * + * @param value The tlsMode to set. + * @return This builder for chaining. + */ + public Builder setTlsMode(connection_request.ConnectionRequestOuterClass.TlsMode value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + tlsMode_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * .connection_request.TlsMode tls_mode = 2; + * + * @return This builder for chaining. + */ + public Builder clearTlsMode() { + bitField0_ = (bitField0_ & ~0x00000002); + tlsMode_ = 0; + onChanged(); + return this; + } + + private boolean clusterModeEnabled_; + + /** + * bool cluster_mode_enabled = 3; + * + * @return The clusterModeEnabled. + */ + @java.lang.Override + public boolean getClusterModeEnabled() { + return clusterModeEnabled_; + } + + /** + * bool cluster_mode_enabled = 3; + * + * @param value The clusterModeEnabled to set. + * @return This builder for chaining. + */ + public Builder setClusterModeEnabled(boolean value) { + + clusterModeEnabled_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * bool cluster_mode_enabled = 3; + * + * @return This builder for chaining. + */ + public Builder clearClusterModeEnabled() { + bitField0_ = (bitField0_ & ~0x00000004); + clusterModeEnabled_ = false; + onChanged(); + return this; + } + + private int responseTimeout_; + + /** + * uint32 response_timeout = 4; + * + * @return The responseTimeout. + */ + @java.lang.Override + public int getResponseTimeout() { + return responseTimeout_; + } + + /** + * uint32 response_timeout = 4; + * + * @param value The responseTimeout to set. + * @return This builder for chaining. + */ + public Builder setResponseTimeout(int value) { + + responseTimeout_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * uint32 response_timeout = 4; + * + * @return This builder for chaining. + */ + public Builder clearResponseTimeout() { + bitField0_ = (bitField0_ & ~0x00000008); + responseTimeout_ = 0; + onChanged(); + return this; + } + + private int clientCreationTimeout_; + + /** + * uint32 client_creation_timeout = 5; + * + * @return The clientCreationTimeout. + */ + @java.lang.Override + public int getClientCreationTimeout() { + return clientCreationTimeout_; + } + + /** + * uint32 client_creation_timeout = 5; + * + * @param value The clientCreationTimeout to set. + * @return This builder for chaining. + */ + public Builder setClientCreationTimeout(int value) { + + clientCreationTimeout_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * uint32 client_creation_timeout = 5; + * + * @return This builder for chaining. + */ + public Builder clearClientCreationTimeout() { + bitField0_ = (bitField0_ & ~0x00000010); + clientCreationTimeout_ = 0; + onChanged(); + return this; + } + + private int readFromReplicaStrategy_ = 0; + + /** + * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; + * + * @return The enum numeric value on the wire for readFromReplicaStrategy. + */ + @java.lang.Override + public int getReadFromReplicaStrategyValue() { + return readFromReplicaStrategy_; + } + + /** + * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; + * + * @param value The enum numeric value on the wire for readFromReplicaStrategy to set. + * @return This builder for chaining. + */ + public Builder setReadFromReplicaStrategyValue(int value) { + readFromReplicaStrategy_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; + * + * @return The readFromReplicaStrategy. + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy + getReadFromReplicaStrategy() { + connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy result = + connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy.forNumber( + readFromReplicaStrategy_); + return result == null + ? connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy.UNRECOGNIZED + : result; + } + + /** + * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; + * + * @param value The readFromReplicaStrategy to set. + * @return This builder for chaining. + */ + public Builder setReadFromReplicaStrategy( + connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000020; + readFromReplicaStrategy_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; + * + * @return This builder for chaining. + */ + public Builder clearReadFromReplicaStrategy() { + bitField0_ = (bitField0_ & ~0x00000020); + readFromReplicaStrategy_ = 0; + onChanged(); + return this; + } + + private connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + connectionRetryStrategy_; + private com.google.protobuf.SingleFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy, + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder, + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder> + connectionRetryStrategyBuilder_; + + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; + * + * @return Whether the connectionRetryStrategy field is set. + */ + public boolean hasConnectionRetryStrategy() { + return ((bitField0_ & 0x00000040) != 0); + } + + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; + * + * @return The connectionRetryStrategy. + */ + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + getConnectionRetryStrategy() { + if (connectionRetryStrategyBuilder_ == null) { + return connectionRetryStrategy_ == null + ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + .getDefaultInstance() + : connectionRetryStrategy_; + } else { + return connectionRetryStrategyBuilder_.getMessage(); + } + } + + /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ + public Builder setConnectionRetryStrategy( + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy value) { + if (connectionRetryStrategyBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + connectionRetryStrategy_ = value; + } else { + connectionRetryStrategyBuilder_.setMessage(value); + } + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ + public Builder setConnectionRetryStrategy( + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder + builderForValue) { + if (connectionRetryStrategyBuilder_ == null) { + connectionRetryStrategy_ = builderForValue.build(); + } else { + connectionRetryStrategyBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ + public Builder mergeConnectionRetryStrategy( + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy value) { + if (connectionRetryStrategyBuilder_ == null) { + if (((bitField0_ & 0x00000040) != 0) + && connectionRetryStrategy_ != null + && connectionRetryStrategy_ + != connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + .getDefaultInstance()) { + getConnectionRetryStrategyBuilder().mergeFrom(value); + } else { + connectionRetryStrategy_ = value; + } + } else { + connectionRetryStrategyBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ + public Builder clearConnectionRetryStrategy() { + bitField0_ = (bitField0_ & ~0x00000040); + connectionRetryStrategy_ = null; + if (connectionRetryStrategyBuilder_ != null) { + connectionRetryStrategyBuilder_.dispose(); + connectionRetryStrategyBuilder_ = null; + } + onChanged(); + return this; + } + + /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder + getConnectionRetryStrategyBuilder() { + bitField0_ |= 0x00000040; + onChanged(); + return getConnectionRetryStrategyFieldBuilder().getBuilder(); + } + + /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder + getConnectionRetryStrategyOrBuilder() { + if (connectionRetryStrategyBuilder_ != null) { + return connectionRetryStrategyBuilder_.getMessageOrBuilder(); + } else { + return connectionRetryStrategy_ == null + ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + .getDefaultInstance() + : connectionRetryStrategy_; + } + } + + /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ + private com.google.protobuf.SingleFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy, + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder, + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder> + getConnectionRetryStrategyFieldBuilder() { + if (connectionRetryStrategyBuilder_ == null) { + connectionRetryStrategyBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy, + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder, + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder>( + getConnectionRetryStrategy(), getParentForChildren(), isClean()); + connectionRetryStrategy_ = null; + } + return connectionRetryStrategyBuilder_; + } + + private connection_request.ConnectionRequestOuterClass.AuthenticationInfo authenticationInfo_; + private com.google.protobuf.SingleFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.AuthenticationInfo, + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder, + connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder> + authenticationInfoBuilder_; + + /** + * .connection_request.AuthenticationInfo authentication_info = 8; + * + * @return Whether the authenticationInfo field is set. + */ + public boolean hasAuthenticationInfo() { + return ((bitField0_ & 0x00000080) != 0); + } + + /** + * .connection_request.AuthenticationInfo authentication_info = 8; + * + * @return The authenticationInfo. + */ + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo + getAuthenticationInfo() { + if (authenticationInfoBuilder_ == null) { + return authenticationInfo_ == null + ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo + .getDefaultInstance() + : authenticationInfo_; + } else { + return authenticationInfoBuilder_.getMessage(); + } + } + + /** .connection_request.AuthenticationInfo authentication_info = 8; */ + public Builder setAuthenticationInfo( + connection_request.ConnectionRequestOuterClass.AuthenticationInfo value) { + if (authenticationInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + authenticationInfo_ = value; + } else { + authenticationInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** .connection_request.AuthenticationInfo authentication_info = 8; */ + public Builder setAuthenticationInfo( + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder + builderForValue) { + if (authenticationInfoBuilder_ == null) { + authenticationInfo_ = builderForValue.build(); + } else { + authenticationInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** .connection_request.AuthenticationInfo authentication_info = 8; */ + public Builder mergeAuthenticationInfo( + connection_request.ConnectionRequestOuterClass.AuthenticationInfo value) { + if (authenticationInfoBuilder_ == null) { + if (((bitField0_ & 0x00000080) != 0) + && authenticationInfo_ != null + && authenticationInfo_ + != connection_request.ConnectionRequestOuterClass.AuthenticationInfo + .getDefaultInstance()) { + getAuthenticationInfoBuilder().mergeFrom(value); + } else { + authenticationInfo_ = value; + } + } else { + authenticationInfoBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** .connection_request.AuthenticationInfo authentication_info = 8; */ + public Builder clearAuthenticationInfo() { + bitField0_ = (bitField0_ & ~0x00000080); + authenticationInfo_ = null; + if (authenticationInfoBuilder_ != null) { + authenticationInfoBuilder_.dispose(); + authenticationInfoBuilder_ = null; + } + onChanged(); + return this; + } + + /** .connection_request.AuthenticationInfo authentication_info = 8; */ + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder + getAuthenticationInfoBuilder() { + bitField0_ |= 0x00000080; + onChanged(); + return getAuthenticationInfoFieldBuilder().getBuilder(); + } + + /** .connection_request.AuthenticationInfo authentication_info = 8; */ + public connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder + getAuthenticationInfoOrBuilder() { + if (authenticationInfoBuilder_ != null) { + return authenticationInfoBuilder_.getMessageOrBuilder(); + } else { + return authenticationInfo_ == null + ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo + .getDefaultInstance() + : authenticationInfo_; + } + } + + /** .connection_request.AuthenticationInfo authentication_info = 8; */ + private com.google.protobuf.SingleFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.AuthenticationInfo, + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder, + connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder> + getAuthenticationInfoFieldBuilder() { + if (authenticationInfoBuilder_ == null) { + authenticationInfoBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.AuthenticationInfo, + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder, + connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder>( + getAuthenticationInfo(), getParentForChildren(), isClean()); + authenticationInfo_ = null; + } + return authenticationInfoBuilder_; + } + + private int databaseId_; + + /** + * uint32 database_id = 9; + * + * @return The databaseId. + */ + @java.lang.Override + public int getDatabaseId() { + return databaseId_; + } + + /** + * uint32 database_id = 9; + * + * @param value The databaseId to set. + * @return This builder for chaining. + */ + public Builder setDatabaseId(int value) { + + databaseId_ = value; + bitField0_ |= 0x00000100; + onChanged(); + return this; + } + + /** + * uint32 database_id = 9; + * + * @return This builder for chaining. + */ + public Builder clearDatabaseId() { + bitField0_ = (bitField0_ & ~0x00000100); + databaseId_ = 0; + onChanged(); + return this; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:connection_request.ConnectionRequest) + } + + // @@protoc_insertion_point(class_scope:connection_request.ConnectionRequest) + private static final connection_request.ConnectionRequestOuterClass.ConnectionRequest + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.ConnectionRequest(); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ConnectionRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRequest + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface ConnectionRetryStrategyOrBuilder + extends + // @@protoc_insertion_point(interface_extends:connection_request.ConnectionRetryStrategy) + com.google.protobuf.MessageOrBuilder { + + /** + * uint32 number_of_retries = 1; + * + * @return The numberOfRetries. + */ + int getNumberOfRetries(); + + /** + * uint32 factor = 2; + * + * @return The factor. + */ + int getFactor(); + + /** + * uint32 exponent_base = 3; + * + * @return The exponentBase. + */ + int getExponentBase(); + } + + /** Protobuf type {@code connection_request.ConnectionRetryStrategy} */ + public static final class ConnectionRetryStrategy extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:connection_request.ConnectionRetryStrategy) + ConnectionRetryStrategyOrBuilder { + private static final long serialVersionUID = 0L; + + // Use ConnectionRetryStrategy.newBuilder() to construct. + private ConnectionRetryStrategy(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private ConnectionRetryStrategy() {} + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new ConnectionRetryStrategy(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_ConnectionRetryStrategy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.class, + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder.class); + } + + public static final int NUMBER_OF_RETRIES_FIELD_NUMBER = 1; + private int numberOfRetries_ = 0; + + /** + * uint32 number_of_retries = 1; + * + * @return The numberOfRetries. + */ + @java.lang.Override + public int getNumberOfRetries() { + return numberOfRetries_; + } + + public static final int FACTOR_FIELD_NUMBER = 2; + private int factor_ = 0; + + /** + * uint32 factor = 2; + * + * @return The factor. + */ + @java.lang.Override + public int getFactor() { + return factor_; + } + + public static final int EXPONENT_BASE_FIELD_NUMBER = 3; + private int exponentBase_ = 0; + + /** + * uint32 exponent_base = 3; + * + * @return The exponentBase. + */ + @java.lang.Override + public int getExponentBase() { + return exponentBase_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (numberOfRetries_ != 0) { + output.writeUInt32(1, numberOfRetries_); + } + if (factor_ != 0) { + output.writeUInt32(2, factor_); + } + if (exponentBase_ != 0) { + output.writeUInt32(3, exponentBase_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (numberOfRetries_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeUInt32Size(1, numberOfRetries_); + } + if (factor_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeUInt32Size(2, factor_); + } + if (exponentBase_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeUInt32Size(3, exponentBase_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj + instanceof connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy)) { + return super.equals(obj); + } + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy other = + (connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy) obj; + + if (getNumberOfRetries() != other.getNumberOfRetries()) return false; + if (getFactor() != other.getFactor()) return false; + if (getExponentBase() != other.getExponentBase()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NUMBER_OF_RETRIES_FIELD_NUMBER; + hash = (53 * hash) + getNumberOfRetries(); + hash = (37 * hash) + FACTOR_FIELD_NUMBER; + hash = (53 * hash) + getFactor(); + hash = (37 * hash) + EXPONENT_BASE_FIELD_NUMBER; + hash = (53 * hash) + getExponentBase(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code connection_request.ConnectionRetryStrategy} */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:connection_request.ConnectionRetryStrategy) + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_ConnectionRetryStrategy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.class, + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder + .class); + } + + // Construct using + // connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + numberOfRetries_ = 0; + factor_ = 0; + exponentBase_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return connection_request.ConnectionRequestOuterClass + .internal_static_connection_request_ConnectionRetryStrategy_descriptor; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + getDefaultInstanceForType() { + return connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + .getDefaultInstance(); + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy build() { + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy result = + buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy buildPartial() { + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy result = + new connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0( + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.numberOfRetries_ = numberOfRetries_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.factor_ = factor_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.exponentBase_ = exponentBase_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other + instanceof connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy) { + return mergeFrom( + (connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom( + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy other) { + if (other + == connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + .getDefaultInstance()) return this; + if (other.getNumberOfRetries() != 0) { + setNumberOfRetries(other.getNumberOfRetries()); + } + if (other.getFactor() != 0) { + setFactor(other.getFactor()); + } + if (other.getExponentBase() != 0) { + setExponentBase(other.getExponentBase()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + numberOfRetries_ = input.readUInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: + { + factor_ = input.readUInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: + { + exponentBase_ = input.readUInt32(); + bitField0_ |= 0x00000004; + break; + } // case 24 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private int numberOfRetries_; + + /** + * uint32 number_of_retries = 1; + * + * @return The numberOfRetries. + */ + @java.lang.Override + public int getNumberOfRetries() { + return numberOfRetries_; + } + + /** + * uint32 number_of_retries = 1; + * + * @param value The numberOfRetries to set. + * @return This builder for chaining. + */ + public Builder setNumberOfRetries(int value) { + + numberOfRetries_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * uint32 number_of_retries = 1; + * + * @return This builder for chaining. + */ + public Builder clearNumberOfRetries() { + bitField0_ = (bitField0_ & ~0x00000001); + numberOfRetries_ = 0; + onChanged(); + return this; + } + + private int factor_; + + /** + * uint32 factor = 2; + * + * @return The factor. + */ + @java.lang.Override + public int getFactor() { + return factor_; + } + + /** + * uint32 factor = 2; + * + * @param value The factor to set. + * @return This builder for chaining. + */ + public Builder setFactor(int value) { + + factor_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * uint32 factor = 2; + * + * @return This builder for chaining. + */ + public Builder clearFactor() { + bitField0_ = (bitField0_ & ~0x00000002); + factor_ = 0; + onChanged(); + return this; + } + + private int exponentBase_; + + /** + * uint32 exponent_base = 3; + * + * @return The exponentBase. + */ + @java.lang.Override + public int getExponentBase() { + return exponentBase_; + } + + /** + * uint32 exponent_base = 3; + * + * @param value The exponentBase to set. + * @return This builder for chaining. + */ + public Builder setExponentBase(int value) { + + exponentBase_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * uint32 exponent_base = 3; + * + * @return This builder for chaining. + */ + public Builder clearExponentBase() { + bitField0_ = (bitField0_ & ~0x00000004); + exponentBase_ = 0; + onChanged(); + return this; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:connection_request.ConnectionRetryStrategy) + } + + // @@protoc_insertion_point(class_scope:connection_request.ConnectionRetryStrategy) + private static final connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = + new connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy(); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ConnectionRetryStrategy parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy + getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_connection_request_AddressInfo_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_connection_request_AddressInfo_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_connection_request_AuthenticationInfo_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_connection_request_AuthenticationInfo_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_connection_request_ConnectionRequest_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_connection_request_ConnectionRequest_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_connection_request_ConnectionRetryStrategy_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + + static { + java.lang.String[] descriptorData = { + "\n\030connection_request.proto\022\022connection_r" + + "equest\")\n\013AddressInfo\022\014\n\004host\030\001 \001(\t\022\014\n\004p" + + "ort\030\002 \001(\r\"8\n\022AuthenticationInfo\022\020\n\010passw" + + "ord\030\001 \001(\t\022\020\n\010username\030\002 \001(\t\"\312\003\n\021Connecti" + + "onRequest\0222\n\taddresses\030\001 \003(\0132\037.connectio" + + "n_request.AddressInfo\022-\n\010tls_mode\030\002 \001(\0162" + + "\033.connection_request.TlsMode\022\034\n\024cluster_" + + "mode_enabled\030\003 \001(\010\022\030\n\020response_timeout\030\004" + + " \001(\r\022\037\n\027client_creation_timeout\030\005 \001(\r\022O\n" + + "\032read_from_replica_strategy\030\006 \001(\0162+.conn" + + "ection_request.ReadFromReplicaStrategy\022N" + + "\n\031connection_retry_strategy\030\007 \001(\0132+.conn" + + "ection_request.ConnectionRetryStrategy\022C" + + "\n\023authentication_info\030\010 \001(\0132&.connection" + + "_request.AuthenticationInfo\022\023\n\013database_" + + "id\030\t \001(\r\"[\n\027ConnectionRetryStrategy\022\031\n\021n" + + "umber_of_retries\030\001 \001(\r\022\016\n\006factor\030\002 \001(\r\022\025" + + "\n\rexponent_base\030\003 \001(\r*c\n\027ReadFromReplica" + + "Strategy\022\025\n\021AlwaysFromPrimary\020\000\022\016\n\nRound" + + "Robin\020\001\022\021\n\rLowestLatency\020\002\022\016\n\nAZAffinity" + + "\020\003*4\n\007TlsMode\022\t\n\005NoTls\020\000\022\r\n\tSecureTls\020\001\022" + + "\017\n\013InsecureTls\020\002b\006proto3" + }; + descriptor = + com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( + descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {}); + internal_static_connection_request_AddressInfo_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_connection_request_AddressInfo_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_connection_request_AddressInfo_descriptor, + new java.lang.String[] { + "Host", "Port", + }); + internal_static_connection_request_AuthenticationInfo_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_connection_request_AuthenticationInfo_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_connection_request_AuthenticationInfo_descriptor, + new java.lang.String[] { + "Password", "Username", + }); + internal_static_connection_request_ConnectionRequest_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_connection_request_ConnectionRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_connection_request_ConnectionRequest_descriptor, + new java.lang.String[] { + "Addresses", + "TlsMode", + "ClusterModeEnabled", + "ResponseTimeout", + "ClientCreationTimeout", + "ReadFromReplicaStrategy", + "ConnectionRetryStrategy", + "AuthenticationInfo", + "DatabaseId", + }); + internal_static_connection_request_ConnectionRetryStrategy_descriptor = + getDescriptor().getMessageTypes().get(3); + internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_connection_request_ConnectionRetryStrategy_descriptor, + new java.lang.String[] { + "NumberOfRetries", "Factor", "ExponentBase", + }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/java/benchmarks/src/main/java/javababushka/client/RedisClient.java b/java/benchmarks/src/main/java/javababushka/client/RedisClient.java new file mode 100644 index 0000000000..4f267de6e5 --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/client/RedisClient.java @@ -0,0 +1,27 @@ +package javababushka.client; + +public class RedisClient { + public static native void startSocketListenerExternal(RedisClient callback); + + public static native Object valueFromPointer(long pointer); + + static { + System.loadLibrary("javababushka"); + } + + public String socketPath; + + public void startSocketListener(RedisClient client) { + client.startSocketListenerExternal(client); + } + + public void initCallback(String socketPath, String errorMessage) throws Exception { + if (errorMessage != null) { + throw new Exception("Failed to initialize the socket connection: " + errorMessage); + } else if (socketPath == null) { + throw new Exception("Received null as the socketPath"); + } else { + this.socketPath = socketPath; + } + } +} diff --git a/java/benchmarks/src/main/java/javababushka/client/RedisRequestOuterClass.java b/java/benchmarks/src/main/java/javababushka/client/RedisRequestOuterClass.java new file mode 100644 index 0000000000..3b5022e1bb --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/client/RedisRequestOuterClass.java @@ -0,0 +1,6972 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: redis_request.proto + +package redis_request; + +public final class RedisRequestOuterClass { + private RedisRequestOuterClass() {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); + } + + /** Protobuf enum {@code redis_request.SimpleRoutes} */ + public enum SimpleRoutes implements com.google.protobuf.ProtocolMessageEnum { + /** AllNodes = 0; */ + AllNodes(0), + /** AllPrimaries = 1; */ + AllPrimaries(1), + /** Random = 2; */ + Random(2), + UNRECOGNIZED(-1), + ; + + /** AllNodes = 0; */ + public static final int AllNodes_VALUE = 0; + + /** AllPrimaries = 1; */ + public static final int AllPrimaries_VALUE = 1; + + /** Random = 2; */ + public static final int Random_VALUE = 2; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static SimpleRoutes valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static SimpleRoutes forNumber(int value) { + switch (value) { + case 0: + return AllNodes; + case 1: + return AllPrimaries; + case 2: + return Random; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public SimpleRoutes findValueByNumber(int number) { + return SimpleRoutes.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return redis_request.RedisRequestOuterClass.getDescriptor().getEnumTypes().get(0); + } + + private static final SimpleRoutes[] VALUES = values(); + + public static SimpleRoutes valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private SimpleRoutes(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:redis_request.SimpleRoutes) + } + + /** Protobuf enum {@code redis_request.SlotTypes} */ + public enum SlotTypes implements com.google.protobuf.ProtocolMessageEnum { + /** Primary = 0; */ + Primary(0), + /** Replica = 1; */ + Replica(1), + UNRECOGNIZED(-1), + ; + + /** Primary = 0; */ + public static final int Primary_VALUE = 0; + + /** Replica = 1; */ + public static final int Replica_VALUE = 1; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static SlotTypes valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static SlotTypes forNumber(int value) { + switch (value) { + case 0: + return Primary; + case 1: + return Replica; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public SlotTypes findValueByNumber(int number) { + return SlotTypes.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return redis_request.RedisRequestOuterClass.getDescriptor().getEnumTypes().get(1); + } + + private static final SlotTypes[] VALUES = values(); + + public static SlotTypes valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private SlotTypes(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:redis_request.SlotTypes) + } + + /** Protobuf enum {@code redis_request.RequestType} */ + public enum RequestType implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+     * / Invalid request type
+     * 
+ * + * InvalidRequest = 0; + */ + InvalidRequest(0), + /** + * + * + *
+     * / An unknown command, where all arguments are defined by the user.
+     * 
+ * + * CustomCommand = 1; + */ + CustomCommand(1), + /** + * + * + *
+     * / Type of a get string request.
+     * 
+ * + * GetString = 2; + */ + GetString(2), + /** + * + * + *
+     * / Type of a set string request.
+     * 
+ * + * SetString = 3; + */ + SetString(3), + /** Ping = 4; */ + Ping(4), + /** Info = 5; */ + Info(5), + /** Del = 6; */ + Del(6), + /** Select = 7; */ + Select(7), + /** ConfigGet = 8; */ + ConfigGet(8), + /** ConfigSet = 9; */ + ConfigSet(9), + /** ConfigResetStat = 10; */ + ConfigResetStat(10), + /** ConfigRewrite = 11; */ + ConfigRewrite(11), + /** ClientGetName = 12; */ + ClientGetName(12), + /** ClientGetRedir = 13; */ + ClientGetRedir(13), + /** ClientId = 14; */ + ClientId(14), + /** ClientInfo = 15; */ + ClientInfo(15), + /** ClientKill = 16; */ + ClientKill(16), + /** ClientList = 17; */ + ClientList(17), + /** ClientNoEvict = 18; */ + ClientNoEvict(18), + /** ClientNoTouch = 19; */ + ClientNoTouch(19), + /** ClientPause = 20; */ + ClientPause(20), + /** ClientReply = 21; */ + ClientReply(21), + /** ClientSetInfo = 22; */ + ClientSetInfo(22), + /** ClientSetName = 23; */ + ClientSetName(23), + /** ClientUnblock = 24; */ + ClientUnblock(24), + /** ClientUnpause = 25; */ + ClientUnpause(25), + /** Expire = 26; */ + Expire(26), + /** HashSet = 27; */ + HashSet(27), + /** HashGet = 28; */ + HashGet(28), + /** HashDel = 29; */ + HashDel(29), + /** HashExists = 30; */ + HashExists(30), + /** MGet = 31; */ + MGet(31), + /** MSet = 32; */ + MSet(32), + /** Incr = 33; */ + Incr(33), + /** IncrBy = 34; */ + IncrBy(34), + /** Decr = 35; */ + Decr(35), + /** IncrByFloat = 36; */ + IncrByFloat(36), + /** DecrBy = 37; */ + DecrBy(37), + UNRECOGNIZED(-1), + ; + + /** + * + * + *
+     * / Invalid request type
+     * 
+ * + * InvalidRequest = 0; + */ + public static final int InvalidRequest_VALUE = 0; + + /** + * + * + *
+     * / An unknown command, where all arguments are defined by the user.
+     * 
+ * + * CustomCommand = 1; + */ + public static final int CustomCommand_VALUE = 1; + + /** + * + * + *
+     * / Type of a get string request.
+     * 
+ * + * GetString = 2; + */ + public static final int GetString_VALUE = 2; + + /** + * + * + *
+     * / Type of a set string request.
+     * 
+ * + * SetString = 3; + */ + public static final int SetString_VALUE = 3; + + /** Ping = 4; */ + public static final int Ping_VALUE = 4; + + /** Info = 5; */ + public static final int Info_VALUE = 5; + + /** Del = 6; */ + public static final int Del_VALUE = 6; + + /** Select = 7; */ + public static final int Select_VALUE = 7; + + /** ConfigGet = 8; */ + public static final int ConfigGet_VALUE = 8; + + /** ConfigSet = 9; */ + public static final int ConfigSet_VALUE = 9; + + /** ConfigResetStat = 10; */ + public static final int ConfigResetStat_VALUE = 10; + + /** ConfigRewrite = 11; */ + public static final int ConfigRewrite_VALUE = 11; + + /** ClientGetName = 12; */ + public static final int ClientGetName_VALUE = 12; + + /** ClientGetRedir = 13; */ + public static final int ClientGetRedir_VALUE = 13; + + /** ClientId = 14; */ + public static final int ClientId_VALUE = 14; + + /** ClientInfo = 15; */ + public static final int ClientInfo_VALUE = 15; + + /** ClientKill = 16; */ + public static final int ClientKill_VALUE = 16; + + /** ClientList = 17; */ + public static final int ClientList_VALUE = 17; + + /** ClientNoEvict = 18; */ + public static final int ClientNoEvict_VALUE = 18; + + /** ClientNoTouch = 19; */ + public static final int ClientNoTouch_VALUE = 19; + + /** ClientPause = 20; */ + public static final int ClientPause_VALUE = 20; + + /** ClientReply = 21; */ + public static final int ClientReply_VALUE = 21; + + /** ClientSetInfo = 22; */ + public static final int ClientSetInfo_VALUE = 22; + + /** ClientSetName = 23; */ + public static final int ClientSetName_VALUE = 23; + + /** ClientUnblock = 24; */ + public static final int ClientUnblock_VALUE = 24; + + /** ClientUnpause = 25; */ + public static final int ClientUnpause_VALUE = 25; + + /** Expire = 26; */ + public static final int Expire_VALUE = 26; + + /** HashSet = 27; */ + public static final int HashSet_VALUE = 27; + + /** HashGet = 28; */ + public static final int HashGet_VALUE = 28; + + /** HashDel = 29; */ + public static final int HashDel_VALUE = 29; + + /** HashExists = 30; */ + public static final int HashExists_VALUE = 30; + + /** MGet = 31; */ + public static final int MGet_VALUE = 31; + + /** MSet = 32; */ + public static final int MSet_VALUE = 32; + + /** Incr = 33; */ + public static final int Incr_VALUE = 33; + + /** IncrBy = 34; */ + public static final int IncrBy_VALUE = 34; + + /** Decr = 35; */ + public static final int Decr_VALUE = 35; + + /** IncrByFloat = 36; */ + public static final int IncrByFloat_VALUE = 36; + + /** DecrBy = 37; */ + public static final int DecrBy_VALUE = 37; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static RequestType valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static RequestType forNumber(int value) { + switch (value) { + case 0: + return InvalidRequest; + case 1: + return CustomCommand; + case 2: + return GetString; + case 3: + return SetString; + case 4: + return Ping; + case 5: + return Info; + case 6: + return Del; + case 7: + return Select; + case 8: + return ConfigGet; + case 9: + return ConfigSet; + case 10: + return ConfigResetStat; + case 11: + return ConfigRewrite; + case 12: + return ClientGetName; + case 13: + return ClientGetRedir; + case 14: + return ClientId; + case 15: + return ClientInfo; + case 16: + return ClientKill; + case 17: + return ClientList; + case 18: + return ClientNoEvict; + case 19: + return ClientNoTouch; + case 20: + return ClientPause; + case 21: + return ClientReply; + case 22: + return ClientSetInfo; + case 23: + return ClientSetName; + case 24: + return ClientUnblock; + case 25: + return ClientUnpause; + case 26: + return Expire; + case 27: + return HashSet; + case 28: + return HashGet; + case 29: + return HashDel; + case 30: + return HashExists; + case 31: + return MGet; + case 32: + return MSet; + case 33: + return Incr; + case 34: + return IncrBy; + case 35: + return Decr; + case 36: + return IncrByFloat; + case 37: + return DecrBy; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RequestType findValueByNumber(int number) { + return RequestType.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return redis_request.RedisRequestOuterClass.getDescriptor().getEnumTypes().get(2); + } + + private static final RequestType[] VALUES = values(); + + public static RequestType valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private RequestType(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:redis_request.RequestType) + } + + public interface SlotIdRouteOrBuilder + extends + // @@protoc_insertion_point(interface_extends:redis_request.SlotIdRoute) + com.google.protobuf.MessageOrBuilder { + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return The enum numeric value on the wire for slotType. + */ + int getSlotTypeValue(); + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return The slotType. + */ + redis_request.RedisRequestOuterClass.SlotTypes getSlotType(); + + /** + * int32 slot_id = 2; + * + * @return The slotId. + */ + int getSlotId(); + } + + /** Protobuf type {@code redis_request.SlotIdRoute} */ + public static final class SlotIdRoute extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:redis_request.SlotIdRoute) + SlotIdRouteOrBuilder { + private static final long serialVersionUID = 0L; + + // Use SlotIdRoute.newBuilder() to construct. + private SlotIdRoute(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private SlotIdRoute() { + slotType_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new SlotIdRoute(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_SlotIdRoute_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_SlotIdRoute_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.SlotIdRoute.class, + redis_request.RedisRequestOuterClass.SlotIdRoute.Builder.class); + } + + public static final int SLOT_TYPE_FIELD_NUMBER = 1; + private int slotType_ = 0; + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return The enum numeric value on the wire for slotType. + */ + @java.lang.Override + public int getSlotTypeValue() { + return slotType_; + } + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return The slotType. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { + redis_request.RedisRequestOuterClass.SlotTypes result = + redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); + return result == null ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED : result; + } + + public static final int SLOT_ID_FIELD_NUMBER = 2; + private int slotId_ = 0; + + /** + * int32 slot_id = 2; + * + * @return The slotId. + */ + @java.lang.Override + public int getSlotId() { + return slotId_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { + output.writeEnum(1, slotType_); + } + if (slotId_ != 0) { + output.writeInt32(2, slotId_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, slotType_); + } + if (slotId_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, slotId_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.SlotIdRoute)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.SlotIdRoute other = + (redis_request.RedisRequestOuterClass.SlotIdRoute) obj; + + if (slotType_ != other.slotType_) return false; + if (getSlotId() != other.getSlotId()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SLOT_TYPE_FIELD_NUMBER; + hash = (53 * hash) + slotType_; + hash = (37 * hash) + SLOT_ID_FIELD_NUMBER; + hash = (53 * hash) + getSlotId(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(redis_request.RedisRequestOuterClass.SlotIdRoute prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code redis_request.SlotIdRoute} */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:redis_request.SlotIdRoute) + redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_SlotIdRoute_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_SlotIdRoute_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.SlotIdRoute.class, + redis_request.RedisRequestOuterClass.SlotIdRoute.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.SlotIdRoute.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + slotType_ = 0; + slotId_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_SlotIdRoute_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRoute getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRoute build() { + redis_request.RedisRequestOuterClass.SlotIdRoute result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRoute buildPartial() { + redis_request.RedisRequestOuterClass.SlotIdRoute result = + new redis_request.RedisRequestOuterClass.SlotIdRoute(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.SlotIdRoute result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.slotType_ = slotType_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.slotId_ = slotId_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.SlotIdRoute) { + return mergeFrom((redis_request.RedisRequestOuterClass.SlotIdRoute) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.SlotIdRoute other) { + if (other == redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance()) + return this; + if (other.slotType_ != 0) { + setSlotTypeValue(other.getSlotTypeValue()); + } + if (other.getSlotId() != 0) { + setSlotId(other.getSlotId()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + slotType_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: + { + slotId_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private int slotType_ = 0; + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return The enum numeric value on the wire for slotType. + */ + @java.lang.Override + public int getSlotTypeValue() { + return slotType_; + } + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @param value The enum numeric value on the wire for slotType to set. + * @return This builder for chaining. + */ + public Builder setSlotTypeValue(int value) { + slotType_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return The slotType. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { + redis_request.RedisRequestOuterClass.SlotTypes result = + redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); + return result == null + ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED + : result; + } + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @param value The slotType to set. + * @return This builder for chaining. + */ + public Builder setSlotType(redis_request.RedisRequestOuterClass.SlotTypes value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + slotType_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return This builder for chaining. + */ + public Builder clearSlotType() { + bitField0_ = (bitField0_ & ~0x00000001); + slotType_ = 0; + onChanged(); + return this; + } + + private int slotId_; + + /** + * int32 slot_id = 2; + * + * @return The slotId. + */ + @java.lang.Override + public int getSlotId() { + return slotId_; + } + + /** + * int32 slot_id = 2; + * + * @param value The slotId to set. + * @return This builder for chaining. + */ + public Builder setSlotId(int value) { + + slotId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * int32 slot_id = 2; + * + * @return This builder for chaining. + */ + public Builder clearSlotId() { + bitField0_ = (bitField0_ & ~0x00000002); + slotId_ = 0; + onChanged(); + return this; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:redis_request.SlotIdRoute) + } + + // @@protoc_insertion_point(class_scope:redis_request.SlotIdRoute) + private static final redis_request.RedisRequestOuterClass.SlotIdRoute DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.SlotIdRoute(); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SlotIdRoute parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRoute getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface SlotKeyRouteOrBuilder + extends + // @@protoc_insertion_point(interface_extends:redis_request.SlotKeyRoute) + com.google.protobuf.MessageOrBuilder { + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return The enum numeric value on the wire for slotType. + */ + int getSlotTypeValue(); + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return The slotType. + */ + redis_request.RedisRequestOuterClass.SlotTypes getSlotType(); + + /** + * string slot_key = 2; + * + * @return The slotKey. + */ + java.lang.String getSlotKey(); + + /** + * string slot_key = 2; + * + * @return The bytes for slotKey. + */ + com.google.protobuf.ByteString getSlotKeyBytes(); + } + + /** Protobuf type {@code redis_request.SlotKeyRoute} */ + public static final class SlotKeyRoute extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:redis_request.SlotKeyRoute) + SlotKeyRouteOrBuilder { + private static final long serialVersionUID = 0L; + + // Use SlotKeyRoute.newBuilder() to construct. + private SlotKeyRoute(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private SlotKeyRoute() { + slotType_ = 0; + slotKey_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new SlotKeyRoute(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_SlotKeyRoute_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_SlotKeyRoute_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.SlotKeyRoute.class, + redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder.class); + } + + public static final int SLOT_TYPE_FIELD_NUMBER = 1; + private int slotType_ = 0; + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return The enum numeric value on the wire for slotType. + */ + @java.lang.Override + public int getSlotTypeValue() { + return slotType_; + } + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return The slotType. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { + redis_request.RedisRequestOuterClass.SlotTypes result = + redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); + return result == null ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED : result; + } + + public static final int SLOT_KEY_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object slotKey_ = ""; + + /** + * string slot_key = 2; + * + * @return The slotKey. + */ + @java.lang.Override + public java.lang.String getSlotKey() { + java.lang.Object ref = slotKey_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + slotKey_ = s; + return s; + } + } + + /** + * string slot_key = 2; + * + * @return The bytes for slotKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSlotKeyBytes() { + java.lang.Object ref = slotKey_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + slotKey_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { + output.writeEnum(1, slotType_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(slotKey_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, slotKey_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, slotType_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(slotKey_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, slotKey_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.SlotKeyRoute)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.SlotKeyRoute other = + (redis_request.RedisRequestOuterClass.SlotKeyRoute) obj; + + if (slotType_ != other.slotType_) return false; + if (!getSlotKey().equals(other.getSlotKey())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SLOT_TYPE_FIELD_NUMBER; + hash = (53 * hash) + slotType_; + hash = (37 * hash) + SLOT_KEY_FIELD_NUMBER; + hash = (53 * hash) + getSlotKey().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(redis_request.RedisRequestOuterClass.SlotKeyRoute prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code redis_request.SlotKeyRoute} */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:redis_request.SlotKeyRoute) + redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_SlotKeyRoute_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_SlotKeyRoute_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.SlotKeyRoute.class, + redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.SlotKeyRoute.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + slotType_ = 0; + slotKey_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_SlotKeyRoute_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRoute getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRoute build() { + redis_request.RedisRequestOuterClass.SlotKeyRoute result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRoute buildPartial() { + redis_request.RedisRequestOuterClass.SlotKeyRoute result = + new redis_request.RedisRequestOuterClass.SlotKeyRoute(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.SlotKeyRoute result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.slotType_ = slotType_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.slotKey_ = slotKey_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.SlotKeyRoute) { + return mergeFrom((redis_request.RedisRequestOuterClass.SlotKeyRoute) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.SlotKeyRoute other) { + if (other == redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance()) + return this; + if (other.slotType_ != 0) { + setSlotTypeValue(other.getSlotTypeValue()); + } + if (!other.getSlotKey().isEmpty()) { + slotKey_ = other.slotKey_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + slotType_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + slotKey_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private int slotType_ = 0; + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return The enum numeric value on the wire for slotType. + */ + @java.lang.Override + public int getSlotTypeValue() { + return slotType_; + } + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @param value The enum numeric value on the wire for slotType to set. + * @return This builder for chaining. + */ + public Builder setSlotTypeValue(int value) { + slotType_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return The slotType. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { + redis_request.RedisRequestOuterClass.SlotTypes result = + redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); + return result == null + ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED + : result; + } + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @param value The slotType to set. + * @return This builder for chaining. + */ + public Builder setSlotType(redis_request.RedisRequestOuterClass.SlotTypes value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + slotType_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * .redis_request.SlotTypes slot_type = 1; + * + * @return This builder for chaining. + */ + public Builder clearSlotType() { + bitField0_ = (bitField0_ & ~0x00000001); + slotType_ = 0; + onChanged(); + return this; + } + + private java.lang.Object slotKey_ = ""; + + /** + * string slot_key = 2; + * + * @return The slotKey. + */ + public java.lang.String getSlotKey() { + java.lang.Object ref = slotKey_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + slotKey_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * string slot_key = 2; + * + * @return The bytes for slotKey. + */ + public com.google.protobuf.ByteString getSlotKeyBytes() { + java.lang.Object ref = slotKey_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + slotKey_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * string slot_key = 2; + * + * @param value The slotKey to set. + * @return This builder for chaining. + */ + public Builder setSlotKey(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + slotKey_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * string slot_key = 2; + * + * @return This builder for chaining. + */ + public Builder clearSlotKey() { + slotKey_ = getDefaultInstance().getSlotKey(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * string slot_key = 2; + * + * @param value The bytes for slotKey to set. + * @return This builder for chaining. + */ + public Builder setSlotKeyBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + slotKey_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:redis_request.SlotKeyRoute) + } + + // @@protoc_insertion_point(class_scope:redis_request.SlotKeyRoute) + private static final redis_request.RedisRequestOuterClass.SlotKeyRoute DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.SlotKeyRoute(); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SlotKeyRoute parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRoute getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface RoutesOrBuilder + extends + // @@protoc_insertion_point(interface_extends:redis_request.Routes) + com.google.protobuf.MessageOrBuilder { + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * + * @return Whether the simpleRoutes field is set. + */ + boolean hasSimpleRoutes(); + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * + * @return The enum numeric value on the wire for simpleRoutes. + */ + int getSimpleRoutesValue(); + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * + * @return The simpleRoutes. + */ + redis_request.RedisRequestOuterClass.SimpleRoutes getSimpleRoutes(); + + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + * + * @return Whether the slotKeyRoute field is set. + */ + boolean hasSlotKeyRoute(); + + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + * + * @return The slotKeyRoute. + */ + redis_request.RedisRequestOuterClass.SlotKeyRoute getSlotKeyRoute(); + + /** .redis_request.SlotKeyRoute slot_key_route = 2; */ + redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder getSlotKeyRouteOrBuilder(); + + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + * + * @return Whether the slotIdRoute field is set. + */ + boolean hasSlotIdRoute(); + + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + * + * @return The slotIdRoute. + */ + redis_request.RedisRequestOuterClass.SlotIdRoute getSlotIdRoute(); + + /** .redis_request.SlotIdRoute slot_id_route = 3; */ + redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder getSlotIdRouteOrBuilder(); + + redis_request.RedisRequestOuterClass.Routes.ValueCase getValueCase(); + } + + /** Protobuf type {@code redis_request.Routes} */ + public static final class Routes extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:redis_request.Routes) + RoutesOrBuilder { + private static final long serialVersionUID = 0L; + + // Use Routes.newBuilder() to construct. + private Routes(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private Routes() {} + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new Routes(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Routes_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Routes.class, + redis_request.RedisRequestOuterClass.Routes.Builder.class); + } + + private int valueCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object value_; + + public enum ValueCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + SIMPLE_ROUTES(1), + SLOT_KEY_ROUTE(2), + SLOT_ID_ROUTE(3), + VALUE_NOT_SET(0); + private final int value; + + private ValueCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ValueCase valueOf(int value) { + return forNumber(value); + } + + public static ValueCase forNumber(int value) { + switch (value) { + case 1: + return SIMPLE_ROUTES; + case 2: + return SLOT_KEY_ROUTE; + case 3: + return SLOT_ID_ROUTE; + case 0: + return VALUE_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public ValueCase getValueCase() { + return ValueCase.forNumber(valueCase_); + } + + public static final int SIMPLE_ROUTES_FIELD_NUMBER = 1; + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * + * @return Whether the simpleRoutes field is set. + */ + public boolean hasSimpleRoutes() { + return valueCase_ == 1; + } + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * + * @return The enum numeric value on the wire for simpleRoutes. + */ + public int getSimpleRoutesValue() { + if (valueCase_ == 1) { + return (java.lang.Integer) value_; + } + return 0; + } + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * + * @return The simpleRoutes. + */ + public redis_request.RedisRequestOuterClass.SimpleRoutes getSimpleRoutes() { + if (valueCase_ == 1) { + redis_request.RedisRequestOuterClass.SimpleRoutes result = + redis_request.RedisRequestOuterClass.SimpleRoutes.forNumber((java.lang.Integer) value_); + return result == null + ? redis_request.RedisRequestOuterClass.SimpleRoutes.UNRECOGNIZED + : result; + } + return redis_request.RedisRequestOuterClass.SimpleRoutes.AllNodes; + } + + public static final int SLOT_KEY_ROUTE_FIELD_NUMBER = 2; + + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + * + * @return Whether the slotKeyRoute field is set. + */ + @java.lang.Override + public boolean hasSlotKeyRoute() { + return valueCase_ == 2; + } + + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + * + * @return The slotKeyRoute. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRoute getSlotKeyRoute() { + if (valueCase_ == 2) { + return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } + + /** .redis_request.SlotKeyRoute slot_key_route = 2; */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder getSlotKeyRouteOrBuilder() { + if (valueCase_ == 2) { + return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } + + public static final int SLOT_ID_ROUTE_FIELD_NUMBER = 3; + + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + * + * @return Whether the slotIdRoute field is set. + */ + @java.lang.Override + public boolean hasSlotIdRoute() { + return valueCase_ == 3; + } + + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + * + * @return The slotIdRoute. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRoute getSlotIdRoute() { + if (valueCase_ == 3) { + return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } + + /** .redis_request.SlotIdRoute slot_id_route = 3; */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder getSlotIdRouteOrBuilder() { + if (valueCase_ == 3) { + return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (valueCase_ == 1) { + output.writeEnum(1, ((java.lang.Integer) value_)); + } + if (valueCase_ == 2) { + output.writeMessage(2, (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_); + } + if (valueCase_ == 3) { + output.writeMessage(3, (redis_request.RedisRequestOuterClass.SlotIdRoute) value_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (valueCase_ == 1) { + size += + com.google.protobuf.CodedOutputStream.computeEnumSize(1, ((java.lang.Integer) value_)); + } + if (valueCase_ == 2) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 2, (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_); + } + if (valueCase_ == 3) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 3, (redis_request.RedisRequestOuterClass.SlotIdRoute) value_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.Routes)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.Routes other = + (redis_request.RedisRequestOuterClass.Routes) obj; + + if (!getValueCase().equals(other.getValueCase())) return false; + switch (valueCase_) { + case 1: + if (getSimpleRoutesValue() != other.getSimpleRoutesValue()) return false; + break; + case 2: + if (!getSlotKeyRoute().equals(other.getSlotKeyRoute())) return false; + break; + case 3: + if (!getSlotIdRoute().equals(other.getSlotIdRoute())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + switch (valueCase_) { + case 1: + hash = (37 * hash) + SIMPLE_ROUTES_FIELD_NUMBER; + hash = (53 * hash) + getSimpleRoutesValue(); + break; + case 2: + hash = (37 * hash) + SLOT_KEY_ROUTE_FIELD_NUMBER; + hash = (53 * hash) + getSlotKeyRoute().hashCode(); + break; + case 3: + hash = (37 * hash) + SLOT_ID_ROUTE_FIELD_NUMBER; + hash = (53 * hash) + getSlotIdRoute().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.Routes parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Routes parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Routes parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Routes parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Routes parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(redis_request.RedisRequestOuterClass.Routes prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code redis_request.Routes} */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:redis_request.Routes) + redis_request.RedisRequestOuterClass.RoutesOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Routes_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Routes.class, + redis_request.RedisRequestOuterClass.Routes.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.Routes.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (slotKeyRouteBuilder_ != null) { + slotKeyRouteBuilder_.clear(); + } + if (slotIdRouteBuilder_ != null) { + slotIdRouteBuilder_.clear(); + } + valueCase_ = 0; + value_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Routes getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.Routes.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Routes build() { + redis_request.RedisRequestOuterClass.Routes result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Routes buildPartial() { + redis_request.RedisRequestOuterClass.Routes result = + new redis_request.RedisRequestOuterClass.Routes(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.Routes result) { + int from_bitField0_ = bitField0_; + } + + private void buildPartialOneofs(redis_request.RedisRequestOuterClass.Routes result) { + result.valueCase_ = valueCase_; + result.value_ = this.value_; + if (valueCase_ == 2 && slotKeyRouteBuilder_ != null) { + result.value_ = slotKeyRouteBuilder_.build(); + } + if (valueCase_ == 3 && slotIdRouteBuilder_ != null) { + result.value_ = slotIdRouteBuilder_.build(); + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.Routes) { + return mergeFrom((redis_request.RedisRequestOuterClass.Routes) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.Routes other) { + if (other == redis_request.RedisRequestOuterClass.Routes.getDefaultInstance()) return this; + switch (other.getValueCase()) { + case SIMPLE_ROUTES: + { + setSimpleRoutesValue(other.getSimpleRoutesValue()); + break; + } + case SLOT_KEY_ROUTE: + { + mergeSlotKeyRoute(other.getSlotKeyRoute()); + break; + } + case SLOT_ID_ROUTE: + { + mergeSlotIdRoute(other.getSlotIdRoute()); + break; + } + case VALUE_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + int rawValue = input.readEnum(); + valueCase_ = 1; + value_ = rawValue; + break; + } // case 8 + case 18: + { + input.readMessage(getSlotKeyRouteFieldBuilder().getBuilder(), extensionRegistry); + valueCase_ = 2; + break; + } // case 18 + case 26: + { + input.readMessage(getSlotIdRouteFieldBuilder().getBuilder(), extensionRegistry); + valueCase_ = 3; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int valueCase_ = 0; + private java.lang.Object value_; + + public ValueCase getValueCase() { + return ValueCase.forNumber(valueCase_); + } + + public Builder clearValue() { + valueCase_ = 0; + value_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * + * @return Whether the simpleRoutes field is set. + */ + @java.lang.Override + public boolean hasSimpleRoutes() { + return valueCase_ == 1; + } + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * + * @return The enum numeric value on the wire for simpleRoutes. + */ + @java.lang.Override + public int getSimpleRoutesValue() { + if (valueCase_ == 1) { + return ((java.lang.Integer) value_).intValue(); + } + return 0; + } + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * + * @param value The enum numeric value on the wire for simpleRoutes to set. + * @return This builder for chaining. + */ + public Builder setSimpleRoutesValue(int value) { + valueCase_ = 1; + value_ = value; + onChanged(); + return this; + } + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * + * @return The simpleRoutes. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SimpleRoutes getSimpleRoutes() { + if (valueCase_ == 1) { + redis_request.RedisRequestOuterClass.SimpleRoutes result = + redis_request.RedisRequestOuterClass.SimpleRoutes.forNumber( + (java.lang.Integer) value_); + return result == null + ? redis_request.RedisRequestOuterClass.SimpleRoutes.UNRECOGNIZED + : result; + } + return redis_request.RedisRequestOuterClass.SimpleRoutes.AllNodes; + } + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * + * @param value The simpleRoutes to set. + * @return This builder for chaining. + */ + public Builder setSimpleRoutes(redis_request.RedisRequestOuterClass.SimpleRoutes value) { + if (value == null) { + throw new NullPointerException(); + } + valueCase_ = 1; + value_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * + * @return This builder for chaining. + */ + public Builder clearSimpleRoutes() { + if (valueCase_ == 1) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + return this; + } + + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.SlotKeyRoute, + redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder, + redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder> + slotKeyRouteBuilder_; + + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + * + * @return Whether the slotKeyRoute field is set. + */ + @java.lang.Override + public boolean hasSlotKeyRoute() { + return valueCase_ == 2; + } + + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + * + * @return The slotKeyRoute. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRoute getSlotKeyRoute() { + if (slotKeyRouteBuilder_ == null) { + if (valueCase_ == 2) { + return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } else { + if (valueCase_ == 2) { + return slotKeyRouteBuilder_.getMessage(); + } + return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } + } + + /** .redis_request.SlotKeyRoute slot_key_route = 2; */ + public Builder setSlotKeyRoute(redis_request.RedisRequestOuterClass.SlotKeyRoute value) { + if (slotKeyRouteBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + value_ = value; + onChanged(); + } else { + slotKeyRouteBuilder_.setMessage(value); + } + valueCase_ = 2; + return this; + } + + /** .redis_request.SlotKeyRoute slot_key_route = 2; */ + public Builder setSlotKeyRoute( + redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder builderForValue) { + if (slotKeyRouteBuilder_ == null) { + value_ = builderForValue.build(); + onChanged(); + } else { + slotKeyRouteBuilder_.setMessage(builderForValue.build()); + } + valueCase_ = 2; + return this; + } + + /** .redis_request.SlotKeyRoute slot_key_route = 2; */ + public Builder mergeSlotKeyRoute(redis_request.RedisRequestOuterClass.SlotKeyRoute value) { + if (slotKeyRouteBuilder_ == null) { + if (valueCase_ == 2 + && value_ != redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance()) { + value_ = + redis_request.RedisRequestOuterClass.SlotKeyRoute.newBuilder( + (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_) + .mergeFrom(value) + .buildPartial(); + } else { + value_ = value; + } + onChanged(); + } else { + if (valueCase_ == 2) { + slotKeyRouteBuilder_.mergeFrom(value); + } else { + slotKeyRouteBuilder_.setMessage(value); + } + } + valueCase_ = 2; + return this; + } + + /** .redis_request.SlotKeyRoute slot_key_route = 2; */ + public Builder clearSlotKeyRoute() { + if (slotKeyRouteBuilder_ == null) { + if (valueCase_ == 2) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + } else { + if (valueCase_ == 2) { + valueCase_ = 0; + value_ = null; + } + slotKeyRouteBuilder_.clear(); + } + return this; + } + + /** .redis_request.SlotKeyRoute slot_key_route = 2; */ + public redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder getSlotKeyRouteBuilder() { + return getSlotKeyRouteFieldBuilder().getBuilder(); + } + + /** .redis_request.SlotKeyRoute slot_key_route = 2; */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder getSlotKeyRouteOrBuilder() { + if ((valueCase_ == 2) && (slotKeyRouteBuilder_ != null)) { + return slotKeyRouteBuilder_.getMessageOrBuilder(); + } else { + if (valueCase_ == 2) { + return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } + } + + /** .redis_request.SlotKeyRoute slot_key_route = 2; */ + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.SlotKeyRoute, + redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder, + redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder> + getSlotKeyRouteFieldBuilder() { + if (slotKeyRouteBuilder_ == null) { + if (!(valueCase_ == 2)) { + value_ = redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } + slotKeyRouteBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.SlotKeyRoute, + redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder, + redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder>( + (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_, + getParentForChildren(), + isClean()); + value_ = null; + } + valueCase_ = 2; + onChanged(); + return slotKeyRouteBuilder_; + } + + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.SlotIdRoute, + redis_request.RedisRequestOuterClass.SlotIdRoute.Builder, + redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder> + slotIdRouteBuilder_; + + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + * + * @return Whether the slotIdRoute field is set. + */ + @java.lang.Override + public boolean hasSlotIdRoute() { + return valueCase_ == 3; + } + + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + * + * @return The slotIdRoute. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRoute getSlotIdRoute() { + if (slotIdRouteBuilder_ == null) { + if (valueCase_ == 3) { + return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } else { + if (valueCase_ == 3) { + return slotIdRouteBuilder_.getMessage(); + } + return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } + } + + /** .redis_request.SlotIdRoute slot_id_route = 3; */ + public Builder setSlotIdRoute(redis_request.RedisRequestOuterClass.SlotIdRoute value) { + if (slotIdRouteBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + value_ = value; + onChanged(); + } else { + slotIdRouteBuilder_.setMessage(value); + } + valueCase_ = 3; + return this; + } + + /** .redis_request.SlotIdRoute slot_id_route = 3; */ + public Builder setSlotIdRoute( + redis_request.RedisRequestOuterClass.SlotIdRoute.Builder builderForValue) { + if (slotIdRouteBuilder_ == null) { + value_ = builderForValue.build(); + onChanged(); + } else { + slotIdRouteBuilder_.setMessage(builderForValue.build()); + } + valueCase_ = 3; + return this; + } + + /** .redis_request.SlotIdRoute slot_id_route = 3; */ + public Builder mergeSlotIdRoute(redis_request.RedisRequestOuterClass.SlotIdRoute value) { + if (slotIdRouteBuilder_ == null) { + if (valueCase_ == 3 + && value_ != redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance()) { + value_ = + redis_request.RedisRequestOuterClass.SlotIdRoute.newBuilder( + (redis_request.RedisRequestOuterClass.SlotIdRoute) value_) + .mergeFrom(value) + .buildPartial(); + } else { + value_ = value; + } + onChanged(); + } else { + if (valueCase_ == 3) { + slotIdRouteBuilder_.mergeFrom(value); + } else { + slotIdRouteBuilder_.setMessage(value); + } + } + valueCase_ = 3; + return this; + } + + /** .redis_request.SlotIdRoute slot_id_route = 3; */ + public Builder clearSlotIdRoute() { + if (slotIdRouteBuilder_ == null) { + if (valueCase_ == 3) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + } else { + if (valueCase_ == 3) { + valueCase_ = 0; + value_ = null; + } + slotIdRouteBuilder_.clear(); + } + return this; + } + + /** .redis_request.SlotIdRoute slot_id_route = 3; */ + public redis_request.RedisRequestOuterClass.SlotIdRoute.Builder getSlotIdRouteBuilder() { + return getSlotIdRouteFieldBuilder().getBuilder(); + } + + /** .redis_request.SlotIdRoute slot_id_route = 3; */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder getSlotIdRouteOrBuilder() { + if ((valueCase_ == 3) && (slotIdRouteBuilder_ != null)) { + return slotIdRouteBuilder_.getMessageOrBuilder(); + } else { + if (valueCase_ == 3) { + return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } + } + + /** .redis_request.SlotIdRoute slot_id_route = 3; */ + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.SlotIdRoute, + redis_request.RedisRequestOuterClass.SlotIdRoute.Builder, + redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder> + getSlotIdRouteFieldBuilder() { + if (slotIdRouteBuilder_ == null) { + if (!(valueCase_ == 3)) { + value_ = redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } + slotIdRouteBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.SlotIdRoute, + redis_request.RedisRequestOuterClass.SlotIdRoute.Builder, + redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder>( + (redis_request.RedisRequestOuterClass.SlotIdRoute) value_, + getParentForChildren(), + isClean()); + value_ = null; + } + valueCase_ = 3; + onChanged(); + return slotIdRouteBuilder_; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:redis_request.Routes) + } + + // @@protoc_insertion_point(class_scope:redis_request.Routes) + private static final redis_request.RedisRequestOuterClass.Routes DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Routes(); + } + + public static redis_request.RedisRequestOuterClass.Routes getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Routes parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Routes getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface CommandOrBuilder + extends + // @@protoc_insertion_point(interface_extends:redis_request.Command) + com.google.protobuf.MessageOrBuilder { + + /** + * .redis_request.RequestType request_type = 1; + * + * @return The enum numeric value on the wire for requestType. + */ + int getRequestTypeValue(); + + /** + * .redis_request.RequestType request_type = 1; + * + * @return The requestType. + */ + redis_request.RedisRequestOuterClass.RequestType getRequestType(); + + /** + * .redis_request.Command.ArgsArray args_array = 2; + * + * @return Whether the argsArray field is set. + */ + boolean hasArgsArray(); + + /** + * .redis_request.Command.ArgsArray args_array = 2; + * + * @return The argsArray. + */ + redis_request.RedisRequestOuterClass.Command.ArgsArray getArgsArray(); + + /** .redis_request.Command.ArgsArray args_array = 2; */ + redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder getArgsArrayOrBuilder(); + + /** + * uint64 args_vec_pointer = 3; + * + * @return Whether the argsVecPointer field is set. + */ + boolean hasArgsVecPointer(); + + /** + * uint64 args_vec_pointer = 3; + * + * @return The argsVecPointer. + */ + long getArgsVecPointer(); + + redis_request.RedisRequestOuterClass.Command.ArgsCase getArgsCase(); + } + + /** Protobuf type {@code redis_request.Command} */ + public static final class Command extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:redis_request.Command) + CommandOrBuilder { + private static final long serialVersionUID = 0L; + + // Use Command.newBuilder() to construct. + private Command(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private Command() { + requestType_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new Command(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Command_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Command.class, + redis_request.RedisRequestOuterClass.Command.Builder.class); + } + + public interface ArgsArrayOrBuilder + extends + // @@protoc_insertion_point(interface_extends:redis_request.Command.ArgsArray) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated string args = 1; + * + * @return A list containing the args. + */ + java.util.List getArgsList(); + + /** + * repeated string args = 1; + * + * @return The count of args. + */ + int getArgsCount(); + + /** + * repeated string args = 1; + * + * @param index The index of the element to return. + * @return The args at the given index. + */ + java.lang.String getArgs(int index); + + /** + * repeated string args = 1; + * + * @param index The index of the value to return. + * @return The bytes of the args at the given index. + */ + com.google.protobuf.ByteString getArgsBytes(int index); + } + + /** Protobuf type {@code redis_request.Command.ArgsArray} */ + public static final class ArgsArray extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:redis_request.Command.ArgsArray) + ArgsArrayOrBuilder { + private static final long serialVersionUID = 0L; + + // Use ArgsArray.newBuilder() to construct. + private ArgsArray(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private ArgsArray() { + args_ = com.google.protobuf.LazyStringArrayList.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new ArgsArray(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Command_ArgsArray_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Command_ArgsArray_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Command.ArgsArray.class, + redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder.class); + } + + public static final int ARGS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList args_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * repeated string args = 1; + * + * @return A list containing the args. + */ + public com.google.protobuf.ProtocolStringList getArgsList() { + return args_; + } + + /** + * repeated string args = 1; + * + * @return The count of args. + */ + public int getArgsCount() { + return args_.size(); + } + + /** + * repeated string args = 1; + * + * @param index The index of the element to return. + * @return The args at the given index. + */ + public java.lang.String getArgs(int index) { + return args_.get(index); + } + + /** + * repeated string args = 1; + * + * @param index The index of the value to return. + * @return The bytes of the args at the given index. + */ + public com.google.protobuf.ByteString getArgsBytes(int index) { + return args_.getByteString(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < args_.size(); i++) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, args_.getRaw(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int i = 0; i < args_.size(); i++) { + dataSize += computeStringSizeNoTag(args_.getRaw(i)); + } + size += dataSize; + size += 1 * getArgsList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.Command.ArgsArray)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.Command.ArgsArray other = + (redis_request.RedisRequestOuterClass.Command.ArgsArray) obj; + + if (!getArgsList().equals(other.getArgsList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getArgsCount() > 0) { + hash = (37 * hash) + ARGS_FIELD_NUMBER; + hash = (53 * hash) + getArgsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + redis_request.RedisRequestOuterClass.Command.ArgsArray prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code redis_request.Command.ArgsArray} */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:redis_request.Command.ArgsArray) + redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Command_ArgsArray_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Command_ArgsArray_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Command.ArgsArray.class, + redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.Command.ArgsArray.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + args_ = com.google.protobuf.LazyStringArrayList.emptyList(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Command_ArgsArray_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArray getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArray build() { + redis_request.RedisRequestOuterClass.Command.ArgsArray result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArray buildPartial() { + redis_request.RedisRequestOuterClass.Command.ArgsArray result = + new redis_request.RedisRequestOuterClass.Command.ArgsArray(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.Command.ArgsArray result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + args_.makeImmutable(); + result.args_ = args_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.Command.ArgsArray) { + return mergeFrom((redis_request.RedisRequestOuterClass.Command.ArgsArray) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.Command.ArgsArray other) { + if (other == redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance()) + return this; + if (!other.args_.isEmpty()) { + if (args_.isEmpty()) { + args_ = other.args_; + bitField0_ |= 0x00000001; + } else { + ensureArgsIsMutable(); + args_.addAll(other.args_); + } + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureArgsIsMutable(); + args_.add(s); + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.LazyStringArrayList args_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureArgsIsMutable() { + if (!args_.isModifiable()) { + args_ = new com.google.protobuf.LazyStringArrayList(args_); + } + bitField0_ |= 0x00000001; + } + + /** + * repeated string args = 1; + * + * @return A list containing the args. + */ + public com.google.protobuf.ProtocolStringList getArgsList() { + args_.makeImmutable(); + return args_; + } + + /** + * repeated string args = 1; + * + * @return The count of args. + */ + public int getArgsCount() { + return args_.size(); + } + + /** + * repeated string args = 1; + * + * @param index The index of the element to return. + * @return The args at the given index. + */ + public java.lang.String getArgs(int index) { + return args_.get(index); + } + + /** + * repeated string args = 1; + * + * @param index The index of the value to return. + * @return The bytes of the args at the given index. + */ + public com.google.protobuf.ByteString getArgsBytes(int index) { + return args_.getByteString(index); + } + + /** + * repeated string args = 1; + * + * @param index The index to set the value at. + * @param value The args to set. + * @return This builder for chaining. + */ + public Builder setArgs(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureArgsIsMutable(); + args_.set(index, value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * repeated string args = 1; + * + * @param value The args to add. + * @return This builder for chaining. + */ + public Builder addArgs(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureArgsIsMutable(); + args_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * repeated string args = 1; + * + * @param values The args to add. + * @return This builder for chaining. + */ + public Builder addAllArgs(java.lang.Iterable values) { + ensureArgsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, args_); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * repeated string args = 1; + * + * @return This builder for chaining. + */ + public Builder clearArgs() { + args_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + ; + onChanged(); + return this; + } + + /** + * repeated string args = 1; + * + * @param value The bytes of the args to add. + * @return This builder for chaining. + */ + public Builder addArgsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureArgsIsMutable(); + args_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:redis_request.Command.ArgsArray) + } + + // @@protoc_insertion_point(class_scope:redis_request.Command.ArgsArray) + private static final redis_request.RedisRequestOuterClass.Command.ArgsArray DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Command.ArgsArray(); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ArgsArray parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArray getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private int argsCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object args_; + + public enum ArgsCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + ARGS_ARRAY(2), + ARGS_VEC_POINTER(3), + ARGS_NOT_SET(0); + private final int value; + + private ArgsCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ArgsCase valueOf(int value) { + return forNumber(value); + } + + public static ArgsCase forNumber(int value) { + switch (value) { + case 2: + return ARGS_ARRAY; + case 3: + return ARGS_VEC_POINTER; + case 0: + return ARGS_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public ArgsCase getArgsCase() { + return ArgsCase.forNumber(argsCase_); + } + + public static final int REQUEST_TYPE_FIELD_NUMBER = 1; + private int requestType_ = 0; + + /** + * .redis_request.RequestType request_type = 1; + * + * @return The enum numeric value on the wire for requestType. + */ + @java.lang.Override + public int getRequestTypeValue() { + return requestType_; + } + + /** + * .redis_request.RequestType request_type = 1; + * + * @return The requestType. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.RequestType getRequestType() { + redis_request.RedisRequestOuterClass.RequestType result = + redis_request.RedisRequestOuterClass.RequestType.forNumber(requestType_); + return result == null + ? redis_request.RedisRequestOuterClass.RequestType.UNRECOGNIZED + : result; + } + + public static final int ARGS_ARRAY_FIELD_NUMBER = 2; + + /** + * .redis_request.Command.ArgsArray args_array = 2; + * + * @return Whether the argsArray field is set. + */ + @java.lang.Override + public boolean hasArgsArray() { + return argsCase_ == 2; + } + + /** + * .redis_request.Command.ArgsArray args_array = 2; + * + * @return The argsArray. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArray getArgsArray() { + if (argsCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; + } + return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } + + /** .redis_request.Command.ArgsArray args_array = 2; */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder getArgsArrayOrBuilder() { + if (argsCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; + } + return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } + + public static final int ARGS_VEC_POINTER_FIELD_NUMBER = 3; + + /** + * uint64 args_vec_pointer = 3; + * + * @return Whether the argsVecPointer field is set. + */ + @java.lang.Override + public boolean hasArgsVecPointer() { + return argsCase_ == 3; + } + + /** + * uint64 args_vec_pointer = 3; + * + * @return The argsVecPointer. + */ + @java.lang.Override + public long getArgsVecPointer() { + if (argsCase_ == 3) { + return (java.lang.Long) args_; + } + return 0L; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (requestType_ + != redis_request.RedisRequestOuterClass.RequestType.InvalidRequest.getNumber()) { + output.writeEnum(1, requestType_); + } + if (argsCase_ == 2) { + output.writeMessage(2, (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_); + } + if (argsCase_ == 3) { + output.writeUInt64(3, (long) ((java.lang.Long) args_)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (requestType_ + != redis_request.RedisRequestOuterClass.RequestType.InvalidRequest.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, requestType_); + } + if (argsCase_ == 2) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 2, (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_); + } + if (argsCase_ == 3) { + size += + com.google.protobuf.CodedOutputStream.computeUInt64Size( + 3, (long) ((java.lang.Long) args_)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.Command)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.Command other = + (redis_request.RedisRequestOuterClass.Command) obj; + + if (requestType_ != other.requestType_) return false; + if (!getArgsCase().equals(other.getArgsCase())) return false; + switch (argsCase_) { + case 2: + if (!getArgsArray().equals(other.getArgsArray())) return false; + break; + case 3: + if (getArgsVecPointer() != other.getArgsVecPointer()) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + REQUEST_TYPE_FIELD_NUMBER; + hash = (53 * hash) + requestType_; + switch (argsCase_) { + case 2: + hash = (37 * hash) + ARGS_ARRAY_FIELD_NUMBER; + hash = (53 * hash) + getArgsArray().hashCode(); + break; + case 3: + hash = (37 * hash) + ARGS_VEC_POINTER_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getArgsVecPointer()); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.Command parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.Command parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Command parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.Command parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Command parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.Command parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Command parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Command parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Command parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Command parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Command parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Command parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(redis_request.RedisRequestOuterClass.Command prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code redis_request.Command} */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:redis_request.Command) + redis_request.RedisRequestOuterClass.CommandOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Command_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Command_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Command.class, + redis_request.RedisRequestOuterClass.Command.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.Command.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + requestType_ = 0; + if (argsArrayBuilder_ != null) { + argsArrayBuilder_.clear(); + } + argsCase_ = 0; + args_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Command_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command build() { + redis_request.RedisRequestOuterClass.Command result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command buildPartial() { + redis_request.RedisRequestOuterClass.Command result = + new redis_request.RedisRequestOuterClass.Command(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.Command result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.requestType_ = requestType_; + } + } + + private void buildPartialOneofs(redis_request.RedisRequestOuterClass.Command result) { + result.argsCase_ = argsCase_; + result.args_ = this.args_; + if (argsCase_ == 2 && argsArrayBuilder_ != null) { + result.args_ = argsArrayBuilder_.build(); + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.Command) { + return mergeFrom((redis_request.RedisRequestOuterClass.Command) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.Command other) { + if (other == redis_request.RedisRequestOuterClass.Command.getDefaultInstance()) return this; + if (other.requestType_ != 0) { + setRequestTypeValue(other.getRequestTypeValue()); + } + switch (other.getArgsCase()) { + case ARGS_ARRAY: + { + mergeArgsArray(other.getArgsArray()); + break; + } + case ARGS_VEC_POINTER: + { + setArgsVecPointer(other.getArgsVecPointer()); + break; + } + case ARGS_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + requestType_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + input.readMessage(getArgsArrayFieldBuilder().getBuilder(), extensionRegistry); + argsCase_ = 2; + break; + } // case 18 + case 24: + { + args_ = input.readUInt64(); + argsCase_ = 3; + break; + } // case 24 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int argsCase_ = 0; + private java.lang.Object args_; + + public ArgsCase getArgsCase() { + return ArgsCase.forNumber(argsCase_); + } + + public Builder clearArgs() { + argsCase_ = 0; + args_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private int requestType_ = 0; + + /** + * .redis_request.RequestType request_type = 1; + * + * @return The enum numeric value on the wire for requestType. + */ + @java.lang.Override + public int getRequestTypeValue() { + return requestType_; + } + + /** + * .redis_request.RequestType request_type = 1; + * + * @param value The enum numeric value on the wire for requestType to set. + * @return This builder for chaining. + */ + public Builder setRequestTypeValue(int value) { + requestType_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .redis_request.RequestType request_type = 1; + * + * @return The requestType. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.RequestType getRequestType() { + redis_request.RedisRequestOuterClass.RequestType result = + redis_request.RedisRequestOuterClass.RequestType.forNumber(requestType_); + return result == null + ? redis_request.RedisRequestOuterClass.RequestType.UNRECOGNIZED + : result; + } + + /** + * .redis_request.RequestType request_type = 1; + * + * @param value The requestType to set. + * @return This builder for chaining. + */ + public Builder setRequestType(redis_request.RedisRequestOuterClass.RequestType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + requestType_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * .redis_request.RequestType request_type = 1; + * + * @return This builder for chaining. + */ + public Builder clearRequestType() { + bitField0_ = (bitField0_ & ~0x00000001); + requestType_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command.ArgsArray, + redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder, + redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder> + argsArrayBuilder_; + + /** + * .redis_request.Command.ArgsArray args_array = 2; + * + * @return Whether the argsArray field is set. + */ + @java.lang.Override + public boolean hasArgsArray() { + return argsCase_ == 2; + } + + /** + * .redis_request.Command.ArgsArray args_array = 2; + * + * @return The argsArray. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArray getArgsArray() { + if (argsArrayBuilder_ == null) { + if (argsCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; + } + return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } else { + if (argsCase_ == 2) { + return argsArrayBuilder_.getMessage(); + } + return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } + } + + /** .redis_request.Command.ArgsArray args_array = 2; */ + public Builder setArgsArray(redis_request.RedisRequestOuterClass.Command.ArgsArray value) { + if (argsArrayBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + args_ = value; + onChanged(); + } else { + argsArrayBuilder_.setMessage(value); + } + argsCase_ = 2; + return this; + } + + /** .redis_request.Command.ArgsArray args_array = 2; */ + public Builder setArgsArray( + redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder builderForValue) { + if (argsArrayBuilder_ == null) { + args_ = builderForValue.build(); + onChanged(); + } else { + argsArrayBuilder_.setMessage(builderForValue.build()); + } + argsCase_ = 2; + return this; + } + + /** .redis_request.Command.ArgsArray args_array = 2; */ + public Builder mergeArgsArray(redis_request.RedisRequestOuterClass.Command.ArgsArray value) { + if (argsArrayBuilder_ == null) { + if (argsCase_ == 2 + && args_ + != redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance()) { + args_ = + redis_request.RedisRequestOuterClass.Command.ArgsArray.newBuilder( + (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_) + .mergeFrom(value) + .buildPartial(); + } else { + args_ = value; + } + onChanged(); + } else { + if (argsCase_ == 2) { + argsArrayBuilder_.mergeFrom(value); + } else { + argsArrayBuilder_.setMessage(value); + } + } + argsCase_ = 2; + return this; + } + + /** .redis_request.Command.ArgsArray args_array = 2; */ + public Builder clearArgsArray() { + if (argsArrayBuilder_ == null) { + if (argsCase_ == 2) { + argsCase_ = 0; + args_ = null; + onChanged(); + } + } else { + if (argsCase_ == 2) { + argsCase_ = 0; + args_ = null; + } + argsArrayBuilder_.clear(); + } + return this; + } + + /** .redis_request.Command.ArgsArray args_array = 2; */ + public redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder getArgsArrayBuilder() { + return getArgsArrayFieldBuilder().getBuilder(); + } + + /** .redis_request.Command.ArgsArray args_array = 2; */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder + getArgsArrayOrBuilder() { + if ((argsCase_ == 2) && (argsArrayBuilder_ != null)) { + return argsArrayBuilder_.getMessageOrBuilder(); + } else { + if (argsCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; + } + return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } + } + + /** .redis_request.Command.ArgsArray args_array = 2; */ + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command.ArgsArray, + redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder, + redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder> + getArgsArrayFieldBuilder() { + if (argsArrayBuilder_ == null) { + if (!(argsCase_ == 2)) { + args_ = redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } + argsArrayBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command.ArgsArray, + redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder, + redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder>( + (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_, + getParentForChildren(), + isClean()); + args_ = null; + } + argsCase_ = 2; + onChanged(); + return argsArrayBuilder_; + } + + /** + * uint64 args_vec_pointer = 3; + * + * @return Whether the argsVecPointer field is set. + */ + public boolean hasArgsVecPointer() { + return argsCase_ == 3; + } + + /** + * uint64 args_vec_pointer = 3; + * + * @return The argsVecPointer. + */ + public long getArgsVecPointer() { + if (argsCase_ == 3) { + return (java.lang.Long) args_; + } + return 0L; + } + + /** + * uint64 args_vec_pointer = 3; + * + * @param value The argsVecPointer to set. + * @return This builder for chaining. + */ + public Builder setArgsVecPointer(long value) { + + argsCase_ = 3; + args_ = value; + onChanged(); + return this; + } + + /** + * uint64 args_vec_pointer = 3; + * + * @return This builder for chaining. + */ + public Builder clearArgsVecPointer() { + if (argsCase_ == 3) { + argsCase_ = 0; + args_ = null; + onChanged(); + } + return this; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:redis_request.Command) + } + + // @@protoc_insertion_point(class_scope:redis_request.Command) + private static final redis_request.RedisRequestOuterClass.Command DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Command(); + } + + public static redis_request.RedisRequestOuterClass.Command getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Command parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface TransactionOrBuilder + extends + // @@protoc_insertion_point(interface_extends:redis_request.Transaction) + com.google.protobuf.MessageOrBuilder { + + /** repeated .redis_request.Command commands = 1; */ + java.util.List getCommandsList(); + + /** repeated .redis_request.Command commands = 1; */ + redis_request.RedisRequestOuterClass.Command getCommands(int index); + + /** repeated .redis_request.Command commands = 1; */ + int getCommandsCount(); + + /** repeated .redis_request.Command commands = 1; */ + java.util.List + getCommandsOrBuilderList(); + + /** repeated .redis_request.Command commands = 1; */ + redis_request.RedisRequestOuterClass.CommandOrBuilder getCommandsOrBuilder(int index); + } + + /** Protobuf type {@code redis_request.Transaction} */ + public static final class Transaction extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:redis_request.Transaction) + TransactionOrBuilder { + private static final long serialVersionUID = 0L; + + // Use Transaction.newBuilder() to construct. + private Transaction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private Transaction() { + commands_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new Transaction(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Transaction_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Transaction_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Transaction.class, + redis_request.RedisRequestOuterClass.Transaction.Builder.class); + } + + public static final int COMMANDS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private java.util.List commands_; + + /** repeated .redis_request.Command commands = 1; */ + @java.lang.Override + public java.util.List getCommandsList() { + return commands_; + } + + /** repeated .redis_request.Command commands = 1; */ + @java.lang.Override + public java.util.List + getCommandsOrBuilderList() { + return commands_; + } + + /** repeated .redis_request.Command commands = 1; */ + @java.lang.Override + public int getCommandsCount() { + return commands_.size(); + } + + /** repeated .redis_request.Command commands = 1; */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command getCommands(int index) { + return commands_.get(index); + } + + /** repeated .redis_request.Command commands = 1; */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.CommandOrBuilder getCommandsOrBuilder(int index) { + return commands_.get(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < commands_.size(); i++) { + output.writeMessage(1, commands_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < commands_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, commands_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.Transaction)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.Transaction other = + (redis_request.RedisRequestOuterClass.Transaction) obj; + + if (!getCommandsList().equals(other.getCommandsList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getCommandsCount() > 0) { + hash = (37 * hash) + COMMANDS_FIELD_NUMBER; + hash = (53 * hash) + getCommandsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Transaction parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Transaction parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Transaction parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(redis_request.RedisRequestOuterClass.Transaction prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code redis_request.Transaction} */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:redis_request.Transaction) + redis_request.RedisRequestOuterClass.TransactionOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Transaction_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Transaction_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Transaction.class, + redis_request.RedisRequestOuterClass.Transaction.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.Transaction.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (commandsBuilder_ == null) { + commands_ = java.util.Collections.emptyList(); + } else { + commands_ = null; + commandsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_Transaction_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Transaction getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Transaction build() { + redis_request.RedisRequestOuterClass.Transaction result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Transaction buildPartial() { + redis_request.RedisRequestOuterClass.Transaction result = + new redis_request.RedisRequestOuterClass.Transaction(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields( + redis_request.RedisRequestOuterClass.Transaction result) { + if (commandsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + commands_ = java.util.Collections.unmodifiableList(commands_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.commands_ = commands_; + } else { + result.commands_ = commandsBuilder_.build(); + } + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.Transaction result) { + int from_bitField0_ = bitField0_; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.Transaction) { + return mergeFrom((redis_request.RedisRequestOuterClass.Transaction) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.Transaction other) { + if (other == redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance()) + return this; + if (commandsBuilder_ == null) { + if (!other.commands_.isEmpty()) { + if (commands_.isEmpty()) { + commands_ = other.commands_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureCommandsIsMutable(); + commands_.addAll(other.commands_); + } + onChanged(); + } + } else { + if (!other.commands_.isEmpty()) { + if (commandsBuilder_.isEmpty()) { + commandsBuilder_.dispose(); + commandsBuilder_ = null; + commands_ = other.commands_; + bitField0_ = (bitField0_ & ~0x00000001); + commandsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders + ? getCommandsFieldBuilder() + : null; + } else { + commandsBuilder_.addAllMessages(other.commands_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + redis_request.RedisRequestOuterClass.Command m = + input.readMessage( + redis_request.RedisRequestOuterClass.Command.parser(), extensionRegistry); + if (commandsBuilder_ == null) { + ensureCommandsIsMutable(); + commands_.add(m); + } else { + commandsBuilder_.addMessage(m); + } + break; + } // case 10 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.util.List commands_ = + java.util.Collections.emptyList(); + + private void ensureCommandsIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + commands_ = + new java.util.ArrayList(commands_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command, + redis_request.RedisRequestOuterClass.Command.Builder, + redis_request.RedisRequestOuterClass.CommandOrBuilder> + commandsBuilder_; + + /** repeated .redis_request.Command commands = 1; */ + public java.util.List getCommandsList() { + if (commandsBuilder_ == null) { + return java.util.Collections.unmodifiableList(commands_); + } else { + return commandsBuilder_.getMessageList(); + } + } + + /** repeated .redis_request.Command commands = 1; */ + public int getCommandsCount() { + if (commandsBuilder_ == null) { + return commands_.size(); + } else { + return commandsBuilder_.getCount(); + } + } + + /** repeated .redis_request.Command commands = 1; */ + public redis_request.RedisRequestOuterClass.Command getCommands(int index) { + if (commandsBuilder_ == null) { + return commands_.get(index); + } else { + return commandsBuilder_.getMessage(index); + } + } + + /** repeated .redis_request.Command commands = 1; */ + public Builder setCommands(int index, redis_request.RedisRequestOuterClass.Command value) { + if (commandsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCommandsIsMutable(); + commands_.set(index, value); + onChanged(); + } else { + commandsBuilder_.setMessage(index, value); + } + return this; + } + + /** repeated .redis_request.Command commands = 1; */ + public Builder setCommands( + int index, redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { + if (commandsBuilder_ == null) { + ensureCommandsIsMutable(); + commands_.set(index, builderForValue.build()); + onChanged(); + } else { + commandsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** repeated .redis_request.Command commands = 1; */ + public Builder addCommands(redis_request.RedisRequestOuterClass.Command value) { + if (commandsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCommandsIsMutable(); + commands_.add(value); + onChanged(); + } else { + commandsBuilder_.addMessage(value); + } + return this; + } + + /** repeated .redis_request.Command commands = 1; */ + public Builder addCommands(int index, redis_request.RedisRequestOuterClass.Command value) { + if (commandsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCommandsIsMutable(); + commands_.add(index, value); + onChanged(); + } else { + commandsBuilder_.addMessage(index, value); + } + return this; + } + + /** repeated .redis_request.Command commands = 1; */ + public Builder addCommands( + redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { + if (commandsBuilder_ == null) { + ensureCommandsIsMutable(); + commands_.add(builderForValue.build()); + onChanged(); + } else { + commandsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** repeated .redis_request.Command commands = 1; */ + public Builder addCommands( + int index, redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { + if (commandsBuilder_ == null) { + ensureCommandsIsMutable(); + commands_.add(index, builderForValue.build()); + onChanged(); + } else { + commandsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** repeated .redis_request.Command commands = 1; */ + public Builder addAllCommands( + java.lang.Iterable values) { + if (commandsBuilder_ == null) { + ensureCommandsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, commands_); + onChanged(); + } else { + commandsBuilder_.addAllMessages(values); + } + return this; + } + + /** repeated .redis_request.Command commands = 1; */ + public Builder clearCommands() { + if (commandsBuilder_ == null) { + commands_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + commandsBuilder_.clear(); + } + return this; + } + + /** repeated .redis_request.Command commands = 1; */ + public Builder removeCommands(int index) { + if (commandsBuilder_ == null) { + ensureCommandsIsMutable(); + commands_.remove(index); + onChanged(); + } else { + commandsBuilder_.remove(index); + } + return this; + } + + /** repeated .redis_request.Command commands = 1; */ + public redis_request.RedisRequestOuterClass.Command.Builder getCommandsBuilder(int index) { + return getCommandsFieldBuilder().getBuilder(index); + } + + /** repeated .redis_request.Command commands = 1; */ + public redis_request.RedisRequestOuterClass.CommandOrBuilder getCommandsOrBuilder(int index) { + if (commandsBuilder_ == null) { + return commands_.get(index); + } else { + return commandsBuilder_.getMessageOrBuilder(index); + } + } + + /** repeated .redis_request.Command commands = 1; */ + public java.util.List + getCommandsOrBuilderList() { + if (commandsBuilder_ != null) { + return commandsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(commands_); + } + } + + /** repeated .redis_request.Command commands = 1; */ + public redis_request.RedisRequestOuterClass.Command.Builder addCommandsBuilder() { + return getCommandsFieldBuilder() + .addBuilder(redis_request.RedisRequestOuterClass.Command.getDefaultInstance()); + } + + /** repeated .redis_request.Command commands = 1; */ + public redis_request.RedisRequestOuterClass.Command.Builder addCommandsBuilder(int index) { + return getCommandsFieldBuilder() + .addBuilder(index, redis_request.RedisRequestOuterClass.Command.getDefaultInstance()); + } + + /** repeated .redis_request.Command commands = 1; */ + public java.util.List + getCommandsBuilderList() { + return getCommandsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command, + redis_request.RedisRequestOuterClass.Command.Builder, + redis_request.RedisRequestOuterClass.CommandOrBuilder> + getCommandsFieldBuilder() { + if (commandsBuilder_ == null) { + commandsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command, + redis_request.RedisRequestOuterClass.Command.Builder, + redis_request.RedisRequestOuterClass.CommandOrBuilder>( + commands_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean()); + commands_ = null; + } + return commandsBuilder_; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:redis_request.Transaction) + } + + // @@protoc_insertion_point(class_scope:redis_request.Transaction) + private static final redis_request.RedisRequestOuterClass.Transaction DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Transaction(); + } + + public static redis_request.RedisRequestOuterClass.Transaction getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Transaction parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Transaction getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface RedisRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:redis_request.RedisRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * uint32 callback_idx = 1; + * + * @return The callbackIdx. + */ + int getCallbackIdx(); + + /** + * .redis_request.Command single_command = 2; + * + * @return Whether the singleCommand field is set. + */ + boolean hasSingleCommand(); + + /** + * .redis_request.Command single_command = 2; + * + * @return The singleCommand. + */ + redis_request.RedisRequestOuterClass.Command getSingleCommand(); + + /** .redis_request.Command single_command = 2; */ + redis_request.RedisRequestOuterClass.CommandOrBuilder getSingleCommandOrBuilder(); + + /** + * .redis_request.Transaction transaction = 3; + * + * @return Whether the transaction field is set. + */ + boolean hasTransaction(); + + /** + * .redis_request.Transaction transaction = 3; + * + * @return The transaction. + */ + redis_request.RedisRequestOuterClass.Transaction getTransaction(); + + /** .redis_request.Transaction transaction = 3; */ + redis_request.RedisRequestOuterClass.TransactionOrBuilder getTransactionOrBuilder(); + + /** + * .redis_request.Routes route = 4; + * + * @return Whether the route field is set. + */ + boolean hasRoute(); + + /** + * .redis_request.Routes route = 4; + * + * @return The route. + */ + redis_request.RedisRequestOuterClass.Routes getRoute(); + + /** .redis_request.Routes route = 4; */ + redis_request.RedisRequestOuterClass.RoutesOrBuilder getRouteOrBuilder(); + + redis_request.RedisRequestOuterClass.RedisRequest.CommandCase getCommandCase(); + } + + /** Protobuf type {@code redis_request.RedisRequest} */ + public static final class RedisRequest extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:redis_request.RedisRequest) + RedisRequestOrBuilder { + private static final long serialVersionUID = 0L; + + // Use RedisRequest.newBuilder() to construct. + private RedisRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private RedisRequest() {} + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new RedisRequest(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_RedisRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_RedisRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.RedisRequest.class, + redis_request.RedisRequestOuterClass.RedisRequest.Builder.class); + } + + private int commandCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object command_; + + public enum CommandCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + SINGLE_COMMAND(2), + TRANSACTION(3), + COMMAND_NOT_SET(0); + private final int value; + + private CommandCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static CommandCase valueOf(int value) { + return forNumber(value); + } + + public static CommandCase forNumber(int value) { + switch (value) { + case 2: + return SINGLE_COMMAND; + case 3: + return TRANSACTION; + case 0: + return COMMAND_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public CommandCase getCommandCase() { + return CommandCase.forNumber(commandCase_); + } + + public static final int CALLBACK_IDX_FIELD_NUMBER = 1; + private int callbackIdx_ = 0; + + /** + * uint32 callback_idx = 1; + * + * @return The callbackIdx. + */ + @java.lang.Override + public int getCallbackIdx() { + return callbackIdx_; + } + + public static final int SINGLE_COMMAND_FIELD_NUMBER = 2; + + /** + * .redis_request.Command single_command = 2; + * + * @return Whether the singleCommand field is set. + */ + @java.lang.Override + public boolean hasSingleCommand() { + return commandCase_ == 2; + } + + /** + * .redis_request.Command single_command = 2; + * + * @return The singleCommand. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command getSingleCommand() { + if (commandCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command) command_; + } + return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } + + /** .redis_request.Command single_command = 2; */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.CommandOrBuilder getSingleCommandOrBuilder() { + if (commandCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command) command_; + } + return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } + + public static final int TRANSACTION_FIELD_NUMBER = 3; + + /** + * .redis_request.Transaction transaction = 3; + * + * @return Whether the transaction field is set. + */ + @java.lang.Override + public boolean hasTransaction() { + return commandCase_ == 3; + } + + /** + * .redis_request.Transaction transaction = 3; + * + * @return The transaction. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Transaction getTransaction() { + if (commandCase_ == 3) { + return (redis_request.RedisRequestOuterClass.Transaction) command_; + } + return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } + + /** .redis_request.Transaction transaction = 3; */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.TransactionOrBuilder getTransactionOrBuilder() { + if (commandCase_ == 3) { + return (redis_request.RedisRequestOuterClass.Transaction) command_; + } + return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } + + public static final int ROUTE_FIELD_NUMBER = 4; + private redis_request.RedisRequestOuterClass.Routes route_; + + /** + * .redis_request.Routes route = 4; + * + * @return Whether the route field is set. + */ + @java.lang.Override + public boolean hasRoute() { + return route_ != null; + } + + /** + * .redis_request.Routes route = 4; + * + * @return The route. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Routes getRoute() { + return route_ == null + ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() + : route_; + } + + /** .redis_request.Routes route = 4; */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.RoutesOrBuilder getRouteOrBuilder() { + return route_ == null + ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() + : route_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (callbackIdx_ != 0) { + output.writeUInt32(1, callbackIdx_); + } + if (commandCase_ == 2) { + output.writeMessage(2, (redis_request.RedisRequestOuterClass.Command) command_); + } + if (commandCase_ == 3) { + output.writeMessage(3, (redis_request.RedisRequestOuterClass.Transaction) command_); + } + if (route_ != null) { + output.writeMessage(4, getRoute()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (callbackIdx_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeUInt32Size(1, callbackIdx_); + } + if (commandCase_ == 2) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 2, (redis_request.RedisRequestOuterClass.Command) command_); + } + if (commandCase_ == 3) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 3, (redis_request.RedisRequestOuterClass.Transaction) command_); + } + if (route_ != null) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getRoute()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.RedisRequest)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.RedisRequest other = + (redis_request.RedisRequestOuterClass.RedisRequest) obj; + + if (getCallbackIdx() != other.getCallbackIdx()) return false; + if (hasRoute() != other.hasRoute()) return false; + if (hasRoute()) { + if (!getRoute().equals(other.getRoute())) return false; + } + if (!getCommandCase().equals(other.getCommandCase())) return false; + switch (commandCase_) { + case 2: + if (!getSingleCommand().equals(other.getSingleCommand())) return false; + break; + case 3: + if (!getTransaction().equals(other.getTransaction())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + CALLBACK_IDX_FIELD_NUMBER; + hash = (53 * hash) + getCallbackIdx(); + if (hasRoute()) { + hash = (37 * hash) + ROUTE_FIELD_NUMBER; + hash = (53 * hash) + getRoute().hashCode(); + } + switch (commandCase_) { + case 2: + hash = (37 * hash) + SINGLE_COMMAND_FIELD_NUMBER; + hash = (53 * hash) + getSingleCommand().hashCode(); + break; + case 3: + hash = (37 * hash) + TRANSACTION_FIELD_NUMBER; + hash = (53 * hash) + getTransaction().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(redis_request.RedisRequestOuterClass.RedisRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code redis_request.RedisRequest} */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:redis_request.RedisRequest) + redis_request.RedisRequestOuterClass.RedisRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_RedisRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_RedisRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.RedisRequest.class, + redis_request.RedisRequestOuterClass.RedisRequest.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.RedisRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + callbackIdx_ = 0; + if (singleCommandBuilder_ != null) { + singleCommandBuilder_.clear(); + } + if (transactionBuilder_ != null) { + transactionBuilder_.clear(); + } + route_ = null; + if (routeBuilder_ != null) { + routeBuilder_.dispose(); + routeBuilder_ = null; + } + commandCase_ = 0; + command_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return redis_request.RedisRequestOuterClass + .internal_static_redis_request_RedisRequest_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.RedisRequest getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.RedisRequest.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.RedisRequest build() { + redis_request.RedisRequestOuterClass.RedisRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.RedisRequest buildPartial() { + redis_request.RedisRequestOuterClass.RedisRequest result = + new redis_request.RedisRequestOuterClass.RedisRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.RedisRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.callbackIdx_ = callbackIdx_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.route_ = routeBuilder_ == null ? route_ : routeBuilder_.build(); + } + } + + private void buildPartialOneofs(redis_request.RedisRequestOuterClass.RedisRequest result) { + result.commandCase_ = commandCase_; + result.command_ = this.command_; + if (commandCase_ == 2 && singleCommandBuilder_ != null) { + result.command_ = singleCommandBuilder_.build(); + } + if (commandCase_ == 3 && transactionBuilder_ != null) { + result.command_ = transactionBuilder_.build(); + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.RedisRequest) { + return mergeFrom((redis_request.RedisRequestOuterClass.RedisRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.RedisRequest other) { + if (other == redis_request.RedisRequestOuterClass.RedisRequest.getDefaultInstance()) + return this; + if (other.getCallbackIdx() != 0) { + setCallbackIdx(other.getCallbackIdx()); + } + if (other.hasRoute()) { + mergeRoute(other.getRoute()); + } + switch (other.getCommandCase()) { + case SINGLE_COMMAND: + { + mergeSingleCommand(other.getSingleCommand()); + break; + } + case TRANSACTION: + { + mergeTransaction(other.getTransaction()); + break; + } + case COMMAND_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + callbackIdx_ = input.readUInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + input.readMessage(getSingleCommandFieldBuilder().getBuilder(), extensionRegistry); + commandCase_ = 2; + break; + } // case 18 + case 26: + { + input.readMessage(getTransactionFieldBuilder().getBuilder(), extensionRegistry); + commandCase_ = 3; + break; + } // case 26 + case 34: + { + input.readMessage(getRouteFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 34 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int commandCase_ = 0; + private java.lang.Object command_; + + public CommandCase getCommandCase() { + return CommandCase.forNumber(commandCase_); + } + + public Builder clearCommand() { + commandCase_ = 0; + command_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private int callbackIdx_; + + /** + * uint32 callback_idx = 1; + * + * @return The callbackIdx. + */ + @java.lang.Override + public int getCallbackIdx() { + return callbackIdx_; + } + + /** + * uint32 callback_idx = 1; + * + * @param value The callbackIdx to set. + * @return This builder for chaining. + */ + public Builder setCallbackIdx(int value) { + + callbackIdx_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * uint32 callback_idx = 1; + * + * @return This builder for chaining. + */ + public Builder clearCallbackIdx() { + bitField0_ = (bitField0_ & ~0x00000001); + callbackIdx_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command, + redis_request.RedisRequestOuterClass.Command.Builder, + redis_request.RedisRequestOuterClass.CommandOrBuilder> + singleCommandBuilder_; + + /** + * .redis_request.Command single_command = 2; + * + * @return Whether the singleCommand field is set. + */ + @java.lang.Override + public boolean hasSingleCommand() { + return commandCase_ == 2; + } + + /** + * .redis_request.Command single_command = 2; + * + * @return The singleCommand. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command getSingleCommand() { + if (singleCommandBuilder_ == null) { + if (commandCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command) command_; + } + return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } else { + if (commandCase_ == 2) { + return singleCommandBuilder_.getMessage(); + } + return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } + } + + /** .redis_request.Command single_command = 2; */ + public Builder setSingleCommand(redis_request.RedisRequestOuterClass.Command value) { + if (singleCommandBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + command_ = value; + onChanged(); + } else { + singleCommandBuilder_.setMessage(value); + } + commandCase_ = 2; + return this; + } + + /** .redis_request.Command single_command = 2; */ + public Builder setSingleCommand( + redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { + if (singleCommandBuilder_ == null) { + command_ = builderForValue.build(); + onChanged(); + } else { + singleCommandBuilder_.setMessage(builderForValue.build()); + } + commandCase_ = 2; + return this; + } + + /** .redis_request.Command single_command = 2; */ + public Builder mergeSingleCommand(redis_request.RedisRequestOuterClass.Command value) { + if (singleCommandBuilder_ == null) { + if (commandCase_ == 2 + && command_ != redis_request.RedisRequestOuterClass.Command.getDefaultInstance()) { + command_ = + redis_request.RedisRequestOuterClass.Command.newBuilder( + (redis_request.RedisRequestOuterClass.Command) command_) + .mergeFrom(value) + .buildPartial(); + } else { + command_ = value; + } + onChanged(); + } else { + if (commandCase_ == 2) { + singleCommandBuilder_.mergeFrom(value); + } else { + singleCommandBuilder_.setMessage(value); + } + } + commandCase_ = 2; + return this; + } + + /** .redis_request.Command single_command = 2; */ + public Builder clearSingleCommand() { + if (singleCommandBuilder_ == null) { + if (commandCase_ == 2) { + commandCase_ = 0; + command_ = null; + onChanged(); + } + } else { + if (commandCase_ == 2) { + commandCase_ = 0; + command_ = null; + } + singleCommandBuilder_.clear(); + } + return this; + } + + /** .redis_request.Command single_command = 2; */ + public redis_request.RedisRequestOuterClass.Command.Builder getSingleCommandBuilder() { + return getSingleCommandFieldBuilder().getBuilder(); + } + + /** .redis_request.Command single_command = 2; */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.CommandOrBuilder getSingleCommandOrBuilder() { + if ((commandCase_ == 2) && (singleCommandBuilder_ != null)) { + return singleCommandBuilder_.getMessageOrBuilder(); + } else { + if (commandCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command) command_; + } + return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } + } + + /** .redis_request.Command single_command = 2; */ + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command, + redis_request.RedisRequestOuterClass.Command.Builder, + redis_request.RedisRequestOuterClass.CommandOrBuilder> + getSingleCommandFieldBuilder() { + if (singleCommandBuilder_ == null) { + if (!(commandCase_ == 2)) { + command_ = redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } + singleCommandBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command, + redis_request.RedisRequestOuterClass.Command.Builder, + redis_request.RedisRequestOuterClass.CommandOrBuilder>( + (redis_request.RedisRequestOuterClass.Command) command_, + getParentForChildren(), + isClean()); + command_ = null; + } + commandCase_ = 2; + onChanged(); + return singleCommandBuilder_; + } + + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Transaction, + redis_request.RedisRequestOuterClass.Transaction.Builder, + redis_request.RedisRequestOuterClass.TransactionOrBuilder> + transactionBuilder_; + + /** + * .redis_request.Transaction transaction = 3; + * + * @return Whether the transaction field is set. + */ + @java.lang.Override + public boolean hasTransaction() { + return commandCase_ == 3; + } + + /** + * .redis_request.Transaction transaction = 3; + * + * @return The transaction. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Transaction getTransaction() { + if (transactionBuilder_ == null) { + if (commandCase_ == 3) { + return (redis_request.RedisRequestOuterClass.Transaction) command_; + } + return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } else { + if (commandCase_ == 3) { + return transactionBuilder_.getMessage(); + } + return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } + } + + /** .redis_request.Transaction transaction = 3; */ + public Builder setTransaction(redis_request.RedisRequestOuterClass.Transaction value) { + if (transactionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + command_ = value; + onChanged(); + } else { + transactionBuilder_.setMessage(value); + } + commandCase_ = 3; + return this; + } + + /** .redis_request.Transaction transaction = 3; */ + public Builder setTransaction( + redis_request.RedisRequestOuterClass.Transaction.Builder builderForValue) { + if (transactionBuilder_ == null) { + command_ = builderForValue.build(); + onChanged(); + } else { + transactionBuilder_.setMessage(builderForValue.build()); + } + commandCase_ = 3; + return this; + } + + /** .redis_request.Transaction transaction = 3; */ + public Builder mergeTransaction(redis_request.RedisRequestOuterClass.Transaction value) { + if (transactionBuilder_ == null) { + if (commandCase_ == 3 + && command_ + != redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance()) { + command_ = + redis_request.RedisRequestOuterClass.Transaction.newBuilder( + (redis_request.RedisRequestOuterClass.Transaction) command_) + .mergeFrom(value) + .buildPartial(); + } else { + command_ = value; + } + onChanged(); + } else { + if (commandCase_ == 3) { + transactionBuilder_.mergeFrom(value); + } else { + transactionBuilder_.setMessage(value); + } + } + commandCase_ = 3; + return this; + } + + /** .redis_request.Transaction transaction = 3; */ + public Builder clearTransaction() { + if (transactionBuilder_ == null) { + if (commandCase_ == 3) { + commandCase_ = 0; + command_ = null; + onChanged(); + } + } else { + if (commandCase_ == 3) { + commandCase_ = 0; + command_ = null; + } + transactionBuilder_.clear(); + } + return this; + } + + /** .redis_request.Transaction transaction = 3; */ + public redis_request.RedisRequestOuterClass.Transaction.Builder getTransactionBuilder() { + return getTransactionFieldBuilder().getBuilder(); + } + + /** .redis_request.Transaction transaction = 3; */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.TransactionOrBuilder getTransactionOrBuilder() { + if ((commandCase_ == 3) && (transactionBuilder_ != null)) { + return transactionBuilder_.getMessageOrBuilder(); + } else { + if (commandCase_ == 3) { + return (redis_request.RedisRequestOuterClass.Transaction) command_; + } + return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } + } + + /** .redis_request.Transaction transaction = 3; */ + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Transaction, + redis_request.RedisRequestOuterClass.Transaction.Builder, + redis_request.RedisRequestOuterClass.TransactionOrBuilder> + getTransactionFieldBuilder() { + if (transactionBuilder_ == null) { + if (!(commandCase_ == 3)) { + command_ = redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } + transactionBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Transaction, + redis_request.RedisRequestOuterClass.Transaction.Builder, + redis_request.RedisRequestOuterClass.TransactionOrBuilder>( + (redis_request.RedisRequestOuterClass.Transaction) command_, + getParentForChildren(), + isClean()); + command_ = null; + } + commandCase_ = 3; + onChanged(); + return transactionBuilder_; + } + + private redis_request.RedisRequestOuterClass.Routes route_; + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Routes, + redis_request.RedisRequestOuterClass.Routes.Builder, + redis_request.RedisRequestOuterClass.RoutesOrBuilder> + routeBuilder_; + + /** + * .redis_request.Routes route = 4; + * + * @return Whether the route field is set. + */ + public boolean hasRoute() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * .redis_request.Routes route = 4; + * + * @return The route. + */ + public redis_request.RedisRequestOuterClass.Routes getRoute() { + if (routeBuilder_ == null) { + return route_ == null + ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() + : route_; + } else { + return routeBuilder_.getMessage(); + } + } + + /** .redis_request.Routes route = 4; */ + public Builder setRoute(redis_request.RedisRequestOuterClass.Routes value) { + if (routeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + route_ = value; + } else { + routeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** .redis_request.Routes route = 4; */ + public Builder setRoute(redis_request.RedisRequestOuterClass.Routes.Builder builderForValue) { + if (routeBuilder_ == null) { + route_ = builderForValue.build(); + } else { + routeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** .redis_request.Routes route = 4; */ + public Builder mergeRoute(redis_request.RedisRequestOuterClass.Routes value) { + if (routeBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) + && route_ != null + && route_ != redis_request.RedisRequestOuterClass.Routes.getDefaultInstance()) { + getRouteBuilder().mergeFrom(value); + } else { + route_ = value; + } + } else { + routeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** .redis_request.Routes route = 4; */ + public Builder clearRoute() { + bitField0_ = (bitField0_ & ~0x00000008); + route_ = null; + if (routeBuilder_ != null) { + routeBuilder_.dispose(); + routeBuilder_ = null; + } + onChanged(); + return this; + } + + /** .redis_request.Routes route = 4; */ + public redis_request.RedisRequestOuterClass.Routes.Builder getRouteBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return getRouteFieldBuilder().getBuilder(); + } + + /** .redis_request.Routes route = 4; */ + public redis_request.RedisRequestOuterClass.RoutesOrBuilder getRouteOrBuilder() { + if (routeBuilder_ != null) { + return routeBuilder_.getMessageOrBuilder(); + } else { + return route_ == null + ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() + : route_; + } + } + + /** .redis_request.Routes route = 4; */ + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Routes, + redis_request.RedisRequestOuterClass.Routes.Builder, + redis_request.RedisRequestOuterClass.RoutesOrBuilder> + getRouteFieldBuilder() { + if (routeBuilder_ == null) { + routeBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Routes, + redis_request.RedisRequestOuterClass.Routes.Builder, + redis_request.RedisRequestOuterClass.RoutesOrBuilder>( + getRoute(), getParentForChildren(), isClean()); + route_ = null; + } + return routeBuilder_; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:redis_request.RedisRequest) + } + + // @@protoc_insertion_point(class_scope:redis_request.RedisRequest) + private static final redis_request.RedisRequestOuterClass.RedisRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.RedisRequest(); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public RedisRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.RedisRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_SlotIdRoute_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_SlotIdRoute_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_SlotKeyRoute_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_SlotKeyRoute_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_Routes_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_Routes_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_Command_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_Command_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_Command_ArgsArray_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_Command_ArgsArray_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_Transaction_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_Transaction_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_RedisRequest_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_RedisRequest_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + + static { + java.lang.String[] descriptorData = { + "\n" + + "\023redis_request.proto\022\r" + + "redis_request\"K\n" + + "\013SlotIdRoute\022+\n" + + "\tslot_type\030\001 \001(\0162\030.redis_request.SlotTypes\022\017\n" + + "\007slot_id\030\002 \001(\005\"M\n" + + "\014SlotKeyRoute\022+\n" + + "\tslot_type\030\001 \001(\0162\030.redis_request.SlotTypes\022\020\n" + + "\010slot_key\030\002 \001(\t\"\263\001\n" + + "\006Routes\0224\n\r" + + "simple_routes\030\001 \001(\0162\033.redis_request.SimpleRoutesH\000\0225\n" + + "\016slot_key_route\030\002 \001(\0132\033.redis_request.SlotKeyRouteH\000\0223\n\r" + + "slot_id_route\030\003 \001(\0132\032.redis_request.SlotIdRouteH\000B\007\n" + + "\005value\"\262\001\n" + + "\007Command\0220\n" + + "\014request_type\030\001 \001(\0162\032.redis_request.RequestType\0226\n\n" + + "args_array\030\002 \001(\0132 .redis_request.Command.ArgsArrayH\000\022\032\n" + + "\020args_vec_pointer\030\003 \001(\004H\000\032\031\n" + + "\tArgsArray\022\014\n" + + "\004args\030\001 \003(\tB\006\n" + + "\004args\"7\n" + + "\013Transaction\022(\n" + + "\010commands\030\001 \003(\0132\026.redis_request.Command\"\272\001\n" + + "\014RedisRequest\022\024\n" + + "\014callback_idx\030\001 \001(\r" + + "\0220\n" + + "\016single_command\030\002 \001(\0132\026.redis_request.CommandH\000\0221\n" + + "\013transaction\030\003 \001(\0132\032.redis_request.TransactionH\000\022$\n" + + "\005route\030\004 \001(\0132\025.redis_request.RoutesB\t\n" + + "\007command*:\n" + + "\014SimpleRoutes\022\014\n" + + "\010AllNodes\020\000\022\020\n" + + "\014AllPrimaries\020\001\022\n\n" + + "\006Random\020\002*%\n" + + "\tSlotTypes\022\013\n" + + "\007Primary\020\000\022\013\n" + + "\007Replica\020\001*\316\004\n" + + "\013RequestType\022\022\n" + + "\016InvalidRequest\020\000\022\021\n\r" + + "CustomCommand\020\001\022\r\n" + + "\tGetString\020\002\022\r\n" + + "\tSetString\020\003\022\010\n" + + "\004Ping\020\004\022\010\n" + + "\004Info\020\005\022\007\n" + + "\003Del\020\006\022\n\n" + + "\006Select\020\007\022\r\n" + + "\tConfigGet\020\010\022\r\n" + + "\tConfigSet\020\t\022\023\n" + + "\017ConfigResetStat\020\n" + + "\022\021\n" + + "\r" + + "ConfigRewrite\020\013\022\021\n\r" + + "ClientGetName\020\014\022\022\n" + + "\016ClientGetRedir\020\r" + + "\022\014\n" + + "\010ClientId\020\016\022\016\n\n" + + "ClientInfo\020\017\022\016\n\n" + + "ClientKill\020\020\022\016\n\n" + + "ClientList\020\021\022\021\n" + + "\r" + + "ClientNoEvict\020\022\022\021\n\r" + + "ClientNoTouch\020\023\022\017\n" + + "\013ClientPause\020\024\022\017\n" + + "\013ClientReply\020\025\022\021\n\r" + + "ClientSetInfo\020\026\022\021\n\r" + + "ClientSetName\020\027\022\021\n\r" + + "ClientUnblock\020\030\022\021\n\r" + + "ClientUnpause\020\031\022\n\n" + + "\006Expire\020\032\022\013\n" + + "\007HashSet\020\033\022\013\n" + + "\007HashGet\020\034\022\013\n" + + "\007HashDel\020\035\022\016\n\n" + + "HashExists\020\036\022\010\n" + + "\004MGet\020\037\022\010\n" + + "\004MSet\020 \022\010\n" + + "\004Incr\020!\022\n\n" + + "\006IncrBy\020\"\022\010\n" + + "\004Decr\020#\022\017\n" + + "\013IncrByFloat\020$\022\n\n" + + "\006DecrBy\020%b\006proto3" + }; + descriptor = + com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( + descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {}); + internal_static_redis_request_SlotIdRoute_descriptor = getDescriptor().getMessageTypes().get(0); + internal_static_redis_request_SlotIdRoute_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_redis_request_SlotIdRoute_descriptor, + new java.lang.String[] { + "SlotType", "SlotId", + }); + internal_static_redis_request_SlotKeyRoute_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_redis_request_SlotKeyRoute_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_redis_request_SlotKeyRoute_descriptor, + new java.lang.String[] { + "SlotType", "SlotKey", + }); + internal_static_redis_request_Routes_descriptor = getDescriptor().getMessageTypes().get(2); + internal_static_redis_request_Routes_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_redis_request_Routes_descriptor, + new java.lang.String[] { + "SimpleRoutes", "SlotKeyRoute", "SlotIdRoute", "Value", + }); + internal_static_redis_request_Command_descriptor = getDescriptor().getMessageTypes().get(3); + internal_static_redis_request_Command_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_redis_request_Command_descriptor, + new java.lang.String[] { + "RequestType", "ArgsArray", "ArgsVecPointer", "Args", + }); + internal_static_redis_request_Command_ArgsArray_descriptor = + internal_static_redis_request_Command_descriptor.getNestedTypes().get(0); + internal_static_redis_request_Command_ArgsArray_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_redis_request_Command_ArgsArray_descriptor, + new java.lang.String[] { + "Args", + }); + internal_static_redis_request_Transaction_descriptor = getDescriptor().getMessageTypes().get(4); + internal_static_redis_request_Transaction_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_redis_request_Transaction_descriptor, + new java.lang.String[] { + "Commands", + }); + internal_static_redis_request_RedisRequest_descriptor = + getDescriptor().getMessageTypes().get(5); + internal_static_redis_request_RedisRequest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_redis_request_RedisRequest_descriptor, + new java.lang.String[] { + "CallbackIdx", "SingleCommand", "Transaction", "Route", "Command", + }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/java/benchmarks/src/main/java/javababushka/client/ResponseOuterClass.java b/java/benchmarks/src/main/java/javababushka/client/ResponseOuterClass.java new file mode 100644 index 0000000000..d94678db3f --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/client/ResponseOuterClass.java @@ -0,0 +1,2283 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: response.proto + +package response; + +public final class ResponseOuterClass { + private ResponseOuterClass() {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); + } + + /** Protobuf enum {@code response.RequestErrorType} */ + public enum RequestErrorType implements com.google.protobuf.ProtocolMessageEnum { + /** Unspecified = 0; */ + Unspecified(0), + /** ExecAbort = 1; */ + ExecAbort(1), + /** Timeout = 2; */ + Timeout(2), + /** Disconnect = 3; */ + Disconnect(3), + UNRECOGNIZED(-1), + ; + + /** Unspecified = 0; */ + public static final int Unspecified_VALUE = 0; + + /** ExecAbort = 1; */ + public static final int ExecAbort_VALUE = 1; + + /** Timeout = 2; */ + public static final int Timeout_VALUE = 2; + + /** Disconnect = 3; */ + public static final int Disconnect_VALUE = 3; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static RequestErrorType valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static RequestErrorType forNumber(int value) { + switch (value) { + case 0: + return Unspecified; + case 1: + return ExecAbort; + case 2: + return Timeout; + case 3: + return Disconnect; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RequestErrorType findValueByNumber(int number) { + return RequestErrorType.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return response.ResponseOuterClass.getDescriptor().getEnumTypes().get(0); + } + + private static final RequestErrorType[] VALUES = values(); + + public static RequestErrorType valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private RequestErrorType(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:response.RequestErrorType) + } + + /** Protobuf enum {@code response.ConstantResponse} */ + public enum ConstantResponse implements com.google.protobuf.ProtocolMessageEnum { + /** OK = 0; */ + OK(0), + UNRECOGNIZED(-1), + ; + + /** OK = 0; */ + public static final int OK_VALUE = 0; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ConstantResponse valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static ConstantResponse forNumber(int value) { + switch (value) { + case 0: + return OK; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public ConstantResponse findValueByNumber(int number) { + return ConstantResponse.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return response.ResponseOuterClass.getDescriptor().getEnumTypes().get(1); + } + + private static final ConstantResponse[] VALUES = values(); + + public static ConstantResponse valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private ConstantResponse(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:response.ConstantResponse) + } + + public interface RequestErrorOrBuilder + extends + // @@protoc_insertion_point(interface_extends:response.RequestError) + com.google.protobuf.MessageOrBuilder { + + /** + * .response.RequestErrorType type = 1; + * + * @return The enum numeric value on the wire for type. + */ + int getTypeValue(); + + /** + * .response.RequestErrorType type = 1; + * + * @return The type. + */ + response.ResponseOuterClass.RequestErrorType getType(); + + /** + * string message = 2; + * + * @return The message. + */ + java.lang.String getMessage(); + + /** + * string message = 2; + * + * @return The bytes for message. + */ + com.google.protobuf.ByteString getMessageBytes(); + } + + /** Protobuf type {@code response.RequestError} */ + public static final class RequestError extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:response.RequestError) + RequestErrorOrBuilder { + private static final long serialVersionUID = 0L; + + // Use RequestError.newBuilder() to construct. + private RequestError(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private RequestError() { + type_ = 0; + message_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new RequestError(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return response.ResponseOuterClass.internal_static_response_RequestError_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return response.ResponseOuterClass.internal_static_response_RequestError_fieldAccessorTable + .ensureFieldAccessorsInitialized( + response.ResponseOuterClass.RequestError.class, + response.ResponseOuterClass.RequestError.Builder.class); + } + + public static final int TYPE_FIELD_NUMBER = 1; + private int type_ = 0; + + /** + * .response.RequestErrorType type = 1; + * + * @return The enum numeric value on the wire for type. + */ + @java.lang.Override + public int getTypeValue() { + return type_; + } + + /** + * .response.RequestErrorType type = 1; + * + * @return The type. + */ + @java.lang.Override + public response.ResponseOuterClass.RequestErrorType getType() { + response.ResponseOuterClass.RequestErrorType result = + response.ResponseOuterClass.RequestErrorType.forNumber(type_); + return result == null ? response.ResponseOuterClass.RequestErrorType.UNRECOGNIZED : result; + } + + public static final int MESSAGE_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object message_ = ""; + + /** + * string message = 2; + * + * @return The message. + */ + @java.lang.Override + public java.lang.String getMessage() { + java.lang.Object ref = message_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + message_ = s; + return s; + } + } + + /** + * string message = 2; + * + * @return The bytes for message. + */ + @java.lang.Override + public com.google.protobuf.ByteString getMessageBytes() { + java.lang.Object ref = message_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + message_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (type_ != response.ResponseOuterClass.RequestErrorType.Unspecified.getNumber()) { + output.writeEnum(1, type_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, message_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (type_ != response.ResponseOuterClass.RequestErrorType.Unspecified.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, type_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, message_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof response.ResponseOuterClass.RequestError)) { + return super.equals(obj); + } + response.ResponseOuterClass.RequestError other = + (response.ResponseOuterClass.RequestError) obj; + + if (type_ != other.type_) return false; + if (!getMessage().equals(other.getMessage())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TYPE_FIELD_NUMBER; + hash = (53 * hash) + type_; + hash = (37 * hash) + MESSAGE_FIELD_NUMBER; + hash = (53 * hash) + getMessage().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static response.ResponseOuterClass.RequestError parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static response.ResponseOuterClass.RequestError parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static response.ResponseOuterClass.RequestError parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static response.ResponseOuterClass.RequestError parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static response.ResponseOuterClass.RequestError parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static response.ResponseOuterClass.RequestError parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static response.ResponseOuterClass.RequestError parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static response.ResponseOuterClass.RequestError parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static response.ResponseOuterClass.RequestError parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static response.ResponseOuterClass.RequestError parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static response.ResponseOuterClass.RequestError parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static response.ResponseOuterClass.RequestError parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(response.ResponseOuterClass.RequestError prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code response.RequestError} */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:response.RequestError) + response.ResponseOuterClass.RequestErrorOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return response.ResponseOuterClass.internal_static_response_RequestError_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return response.ResponseOuterClass.internal_static_response_RequestError_fieldAccessorTable + .ensureFieldAccessorsInitialized( + response.ResponseOuterClass.RequestError.class, + response.ResponseOuterClass.RequestError.Builder.class); + } + + // Construct using response.ResponseOuterClass.RequestError.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + type_ = 0; + message_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return response.ResponseOuterClass.internal_static_response_RequestError_descriptor; + } + + @java.lang.Override + public response.ResponseOuterClass.RequestError getDefaultInstanceForType() { + return response.ResponseOuterClass.RequestError.getDefaultInstance(); + } + + @java.lang.Override + public response.ResponseOuterClass.RequestError build() { + response.ResponseOuterClass.RequestError result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public response.ResponseOuterClass.RequestError buildPartial() { + response.ResponseOuterClass.RequestError result = + new response.ResponseOuterClass.RequestError(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(response.ResponseOuterClass.RequestError result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.type_ = type_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.message_ = message_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof response.ResponseOuterClass.RequestError) { + return mergeFrom((response.ResponseOuterClass.RequestError) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(response.ResponseOuterClass.RequestError other) { + if (other == response.ResponseOuterClass.RequestError.getDefaultInstance()) return this; + if (other.type_ != 0) { + setTypeValue(other.getTypeValue()); + } + if (!other.getMessage().isEmpty()) { + message_ = other.message_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + type_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: + { + message_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private int type_ = 0; + + /** + * .response.RequestErrorType type = 1; + * + * @return The enum numeric value on the wire for type. + */ + @java.lang.Override + public int getTypeValue() { + return type_; + } + + /** + * .response.RequestErrorType type = 1; + * + * @param value The enum numeric value on the wire for type to set. + * @return This builder for chaining. + */ + public Builder setTypeValue(int value) { + type_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * .response.RequestErrorType type = 1; + * + * @return The type. + */ + @java.lang.Override + public response.ResponseOuterClass.RequestErrorType getType() { + response.ResponseOuterClass.RequestErrorType result = + response.ResponseOuterClass.RequestErrorType.forNumber(type_); + return result == null ? response.ResponseOuterClass.RequestErrorType.UNRECOGNIZED : result; + } + + /** + * .response.RequestErrorType type = 1; + * + * @param value The type to set. + * @return This builder for chaining. + */ + public Builder setType(response.ResponseOuterClass.RequestErrorType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + type_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * .response.RequestErrorType type = 1; + * + * @return This builder for chaining. + */ + public Builder clearType() { + bitField0_ = (bitField0_ & ~0x00000001); + type_ = 0; + onChanged(); + return this; + } + + private java.lang.Object message_ = ""; + + /** + * string message = 2; + * + * @return The message. + */ + public java.lang.String getMessage() { + java.lang.Object ref = message_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + message_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * string message = 2; + * + * @return The bytes for message. + */ + public com.google.protobuf.ByteString getMessageBytes() { + java.lang.Object ref = message_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + message_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * string message = 2; + * + * @param value The message to set. + * @return This builder for chaining. + */ + public Builder setMessage(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + message_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * string message = 2; + * + * @return This builder for chaining. + */ + public Builder clearMessage() { + message_ = getDefaultInstance().getMessage(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * string message = 2; + * + * @param value The bytes for message to set. + * @return This builder for chaining. + */ + public Builder setMessageBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + message_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:response.RequestError) + } + + // @@protoc_insertion_point(class_scope:response.RequestError) + private static final response.ResponseOuterClass.RequestError DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new response.ResponseOuterClass.RequestError(); + } + + public static response.ResponseOuterClass.RequestError getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public RequestError parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public response.ResponseOuterClass.RequestError getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + public interface ResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:response.Response) + com.google.protobuf.MessageOrBuilder { + + /** + * uint32 callback_idx = 1; + * + * @return The callbackIdx. + */ + int getCallbackIdx(); + + /** + * uint64 resp_pointer = 2; + * + * @return Whether the respPointer field is set. + */ + boolean hasRespPointer(); + + /** + * uint64 resp_pointer = 2; + * + * @return The respPointer. + */ + long getRespPointer(); + + /** + * .response.ConstantResponse constant_response = 3; + * + * @return Whether the constantResponse field is set. + */ + boolean hasConstantResponse(); + + /** + * .response.ConstantResponse constant_response = 3; + * + * @return The enum numeric value on the wire for constantResponse. + */ + int getConstantResponseValue(); + + /** + * .response.ConstantResponse constant_response = 3; + * + * @return The constantResponse. + */ + response.ResponseOuterClass.ConstantResponse getConstantResponse(); + + /** + * .response.RequestError request_error = 4; + * + * @return Whether the requestError field is set. + */ + boolean hasRequestError(); + + /** + * .response.RequestError request_error = 4; + * + * @return The requestError. + */ + response.ResponseOuterClass.RequestError getRequestError(); + + /** .response.RequestError request_error = 4; */ + response.ResponseOuterClass.RequestErrorOrBuilder getRequestErrorOrBuilder(); + + /** + * string closing_error = 5; + * + * @return Whether the closingError field is set. + */ + boolean hasClosingError(); + + /** + * string closing_error = 5; + * + * @return The closingError. + */ + java.lang.String getClosingError(); + + /** + * string closing_error = 5; + * + * @return The bytes for closingError. + */ + com.google.protobuf.ByteString getClosingErrorBytes(); + + response.ResponseOuterClass.Response.ValueCase getValueCase(); + } + + /** Protobuf type {@code response.Response} */ + public static final class Response extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:response.Response) + ResponseOrBuilder { + private static final long serialVersionUID = 0L; + + // Use Response.newBuilder() to construct. + private Response(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private Response() {} + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new Response(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return response.ResponseOuterClass.internal_static_response_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return response.ResponseOuterClass.internal_static_response_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + response.ResponseOuterClass.Response.class, + response.ResponseOuterClass.Response.Builder.class); + } + + private int valueCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object value_; + + public enum ValueCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + RESP_POINTER(2), + CONSTANT_RESPONSE(3), + REQUEST_ERROR(4), + CLOSING_ERROR(5), + VALUE_NOT_SET(0); + private final int value; + + private ValueCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ValueCase valueOf(int value) { + return forNumber(value); + } + + public static ValueCase forNumber(int value) { + switch (value) { + case 2: + return RESP_POINTER; + case 3: + return CONSTANT_RESPONSE; + case 4: + return REQUEST_ERROR; + case 5: + return CLOSING_ERROR; + case 0: + return VALUE_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public ValueCase getValueCase() { + return ValueCase.forNumber(valueCase_); + } + + public static final int CALLBACK_IDX_FIELD_NUMBER = 1; + private int callbackIdx_ = 0; + + /** + * uint32 callback_idx = 1; + * + * @return The callbackIdx. + */ + @java.lang.Override + public int getCallbackIdx() { + return callbackIdx_; + } + + public static final int RESP_POINTER_FIELD_NUMBER = 2; + + /** + * uint64 resp_pointer = 2; + * + * @return Whether the respPointer field is set. + */ + @java.lang.Override + public boolean hasRespPointer() { + return valueCase_ == 2; + } + + /** + * uint64 resp_pointer = 2; + * + * @return The respPointer. + */ + @java.lang.Override + public long getRespPointer() { + if (valueCase_ == 2) { + return (java.lang.Long) value_; + } + return 0L; + } + + public static final int CONSTANT_RESPONSE_FIELD_NUMBER = 3; + + /** + * .response.ConstantResponse constant_response = 3; + * + * @return Whether the constantResponse field is set. + */ + public boolean hasConstantResponse() { + return valueCase_ == 3; + } + + /** + * .response.ConstantResponse constant_response = 3; + * + * @return The enum numeric value on the wire for constantResponse. + */ + public int getConstantResponseValue() { + if (valueCase_ == 3) { + return (java.lang.Integer) value_; + } + return 0; + } + + /** + * .response.ConstantResponse constant_response = 3; + * + * @return The constantResponse. + */ + public response.ResponseOuterClass.ConstantResponse getConstantResponse() { + if (valueCase_ == 3) { + response.ResponseOuterClass.ConstantResponse result = + response.ResponseOuterClass.ConstantResponse.forNumber((java.lang.Integer) value_); + return result == null ? response.ResponseOuterClass.ConstantResponse.UNRECOGNIZED : result; + } + return response.ResponseOuterClass.ConstantResponse.OK; + } + + public static final int REQUEST_ERROR_FIELD_NUMBER = 4; + + /** + * .response.RequestError request_error = 4; + * + * @return Whether the requestError field is set. + */ + @java.lang.Override + public boolean hasRequestError() { + return valueCase_ == 4; + } + + /** + * .response.RequestError request_error = 4; + * + * @return The requestError. + */ + @java.lang.Override + public response.ResponseOuterClass.RequestError getRequestError() { + if (valueCase_ == 4) { + return (response.ResponseOuterClass.RequestError) value_; + } + return response.ResponseOuterClass.RequestError.getDefaultInstance(); + } + + /** .response.RequestError request_error = 4; */ + @java.lang.Override + public response.ResponseOuterClass.RequestErrorOrBuilder getRequestErrorOrBuilder() { + if (valueCase_ == 4) { + return (response.ResponseOuterClass.RequestError) value_; + } + return response.ResponseOuterClass.RequestError.getDefaultInstance(); + } + + public static final int CLOSING_ERROR_FIELD_NUMBER = 5; + + /** + * string closing_error = 5; + * + * @return Whether the closingError field is set. + */ + public boolean hasClosingError() { + return valueCase_ == 5; + } + + /** + * string closing_error = 5; + * + * @return The closingError. + */ + public java.lang.String getClosingError() { + java.lang.Object ref = ""; + if (valueCase_ == 5) { + ref = value_; + } + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (valueCase_ == 5) { + value_ = s; + } + return s; + } + } + + /** + * string closing_error = 5; + * + * @return The bytes for closingError. + */ + public com.google.protobuf.ByteString getClosingErrorBytes() { + java.lang.Object ref = ""; + if (valueCase_ == 5) { + ref = value_; + } + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + if (valueCase_ == 5) { + value_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (callbackIdx_ != 0) { + output.writeUInt32(1, callbackIdx_); + } + if (valueCase_ == 2) { + output.writeUInt64(2, (long) ((java.lang.Long) value_)); + } + if (valueCase_ == 3) { + output.writeEnum(3, ((java.lang.Integer) value_)); + } + if (valueCase_ == 4) { + output.writeMessage(4, (response.ResponseOuterClass.RequestError) value_); + } + if (valueCase_ == 5) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 5, value_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (callbackIdx_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeUInt32Size(1, callbackIdx_); + } + if (valueCase_ == 2) { + size += + com.google.protobuf.CodedOutputStream.computeUInt64Size( + 2, (long) ((java.lang.Long) value_)); + } + if (valueCase_ == 3) { + size += + com.google.protobuf.CodedOutputStream.computeEnumSize(3, ((java.lang.Integer) value_)); + } + if (valueCase_ == 4) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 4, (response.ResponseOuterClass.RequestError) value_); + } + if (valueCase_ == 5) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, value_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof response.ResponseOuterClass.Response)) { + return super.equals(obj); + } + response.ResponseOuterClass.Response other = (response.ResponseOuterClass.Response) obj; + + if (getCallbackIdx() != other.getCallbackIdx()) return false; + if (!getValueCase().equals(other.getValueCase())) return false; + switch (valueCase_) { + case 2: + if (getRespPointer() != other.getRespPointer()) return false; + break; + case 3: + if (getConstantResponseValue() != other.getConstantResponseValue()) return false; + break; + case 4: + if (!getRequestError().equals(other.getRequestError())) return false; + break; + case 5: + if (!getClosingError().equals(other.getClosingError())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + CALLBACK_IDX_FIELD_NUMBER; + hash = (53 * hash) + getCallbackIdx(); + switch (valueCase_) { + case 2: + hash = (37 * hash) + RESP_POINTER_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getRespPointer()); + break; + case 3: + hash = (37 * hash) + CONSTANT_RESPONSE_FIELD_NUMBER; + hash = (53 * hash) + getConstantResponseValue(); + break; + case 4: + hash = (37 * hash) + REQUEST_ERROR_FIELD_NUMBER; + hash = (53 * hash) + getRequestError().hashCode(); + break; + case 5: + hash = (37 * hash) + CLOSING_ERROR_FIELD_NUMBER; + hash = (53 * hash) + getClosingError().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static response.ResponseOuterClass.Response parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static response.ResponseOuterClass.Response parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static response.ResponseOuterClass.Response parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static response.ResponseOuterClass.Response parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static response.ResponseOuterClass.Response parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static response.ResponseOuterClass.Response parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static response.ResponseOuterClass.Response parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static response.ResponseOuterClass.Response parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static response.ResponseOuterClass.Response parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static response.ResponseOuterClass.Response parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static response.ResponseOuterClass.Response parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static response.ResponseOuterClass.Response parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(response.ResponseOuterClass.Response prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** Protobuf type {@code response.Response} */ + public static final class Builder + extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:response.Response) + response.ResponseOuterClass.ResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return response.ResponseOuterClass.internal_static_response_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return response.ResponseOuterClass.internal_static_response_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + response.ResponseOuterClass.Response.class, + response.ResponseOuterClass.Response.Builder.class); + } + + // Construct using response.ResponseOuterClass.Response.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + callbackIdx_ = 0; + if (requestErrorBuilder_ != null) { + requestErrorBuilder_.clear(); + } + valueCase_ = 0; + value_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return response.ResponseOuterClass.internal_static_response_Response_descriptor; + } + + @java.lang.Override + public response.ResponseOuterClass.Response getDefaultInstanceForType() { + return response.ResponseOuterClass.Response.getDefaultInstance(); + } + + @java.lang.Override + public response.ResponseOuterClass.Response build() { + response.ResponseOuterClass.Response result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public response.ResponseOuterClass.Response buildPartial() { + response.ResponseOuterClass.Response result = + new response.ResponseOuterClass.Response(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(response.ResponseOuterClass.Response result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.callbackIdx_ = callbackIdx_; + } + } + + private void buildPartialOneofs(response.ResponseOuterClass.Response result) { + result.valueCase_ = valueCase_; + result.value_ = this.value_; + if (valueCase_ == 4 && requestErrorBuilder_ != null) { + result.value_ = requestErrorBuilder_.build(); + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, + java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof response.ResponseOuterClass.Response) { + return mergeFrom((response.ResponseOuterClass.Response) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(response.ResponseOuterClass.Response other) { + if (other == response.ResponseOuterClass.Response.getDefaultInstance()) return this; + if (other.getCallbackIdx() != 0) { + setCallbackIdx(other.getCallbackIdx()); + } + switch (other.getValueCase()) { + case RESP_POINTER: + { + setRespPointer(other.getRespPointer()); + break; + } + case CONSTANT_RESPONSE: + { + setConstantResponseValue(other.getConstantResponseValue()); + break; + } + case REQUEST_ERROR: + { + mergeRequestError(other.getRequestError()); + break; + } + case CLOSING_ERROR: + { + valueCase_ = 5; + value_ = other.value_; + onChanged(); + break; + } + case VALUE_NOT_SET: + { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + callbackIdx_ = input.readUInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: + { + value_ = input.readUInt64(); + valueCase_ = 2; + break; + } // case 16 + case 24: + { + int rawValue = input.readEnum(); + valueCase_ = 3; + value_ = rawValue; + break; + } // case 24 + case 34: + { + input.readMessage(getRequestErrorFieldBuilder().getBuilder(), extensionRegistry); + valueCase_ = 4; + break; + } // case 34 + case 42: + { + java.lang.String s = input.readStringRequireUtf8(); + valueCase_ = 5; + value_ = s; + break; + } // case 42 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int valueCase_ = 0; + private java.lang.Object value_; + + public ValueCase getValueCase() { + return ValueCase.forNumber(valueCase_); + } + + public Builder clearValue() { + valueCase_ = 0; + value_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private int callbackIdx_; + + /** + * uint32 callback_idx = 1; + * + * @return The callbackIdx. + */ + @java.lang.Override + public int getCallbackIdx() { + return callbackIdx_; + } + + /** + * uint32 callback_idx = 1; + * + * @param value The callbackIdx to set. + * @return This builder for chaining. + */ + public Builder setCallbackIdx(int value) { + + callbackIdx_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * uint32 callback_idx = 1; + * + * @return This builder for chaining. + */ + public Builder clearCallbackIdx() { + bitField0_ = (bitField0_ & ~0x00000001); + callbackIdx_ = 0; + onChanged(); + return this; + } + + /** + * uint64 resp_pointer = 2; + * + * @return Whether the respPointer field is set. + */ + public boolean hasRespPointer() { + return valueCase_ == 2; + } + + /** + * uint64 resp_pointer = 2; + * + * @return The respPointer. + */ + public long getRespPointer() { + if (valueCase_ == 2) { + return (java.lang.Long) value_; + } + return 0L; + } + + /** + * uint64 resp_pointer = 2; + * + * @param value The respPointer to set. + * @return This builder for chaining. + */ + public Builder setRespPointer(long value) { + + valueCase_ = 2; + value_ = value; + onChanged(); + return this; + } + + /** + * uint64 resp_pointer = 2; + * + * @return This builder for chaining. + */ + public Builder clearRespPointer() { + if (valueCase_ == 2) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + return this; + } + + /** + * .response.ConstantResponse constant_response = 3; + * + * @return Whether the constantResponse field is set. + */ + @java.lang.Override + public boolean hasConstantResponse() { + return valueCase_ == 3; + } + + /** + * .response.ConstantResponse constant_response = 3; + * + * @return The enum numeric value on the wire for constantResponse. + */ + @java.lang.Override + public int getConstantResponseValue() { + if (valueCase_ == 3) { + return ((java.lang.Integer) value_).intValue(); + } + return 0; + } + + /** + * .response.ConstantResponse constant_response = 3; + * + * @param value The enum numeric value on the wire for constantResponse to set. + * @return This builder for chaining. + */ + public Builder setConstantResponseValue(int value) { + valueCase_ = 3; + value_ = value; + onChanged(); + return this; + } + + /** + * .response.ConstantResponse constant_response = 3; + * + * @return The constantResponse. + */ + @java.lang.Override + public response.ResponseOuterClass.ConstantResponse getConstantResponse() { + if (valueCase_ == 3) { + response.ResponseOuterClass.ConstantResponse result = + response.ResponseOuterClass.ConstantResponse.forNumber((java.lang.Integer) value_); + return result == null + ? response.ResponseOuterClass.ConstantResponse.UNRECOGNIZED + : result; + } + return response.ResponseOuterClass.ConstantResponse.OK; + } + + /** + * .response.ConstantResponse constant_response = 3; + * + * @param value The constantResponse to set. + * @return This builder for chaining. + */ + public Builder setConstantResponse(response.ResponseOuterClass.ConstantResponse value) { + if (value == null) { + throw new NullPointerException(); + } + valueCase_ = 3; + value_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * .response.ConstantResponse constant_response = 3; + * + * @return This builder for chaining. + */ + public Builder clearConstantResponse() { + if (valueCase_ == 3) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + return this; + } + + private com.google.protobuf.SingleFieldBuilderV3< + response.ResponseOuterClass.RequestError, + response.ResponseOuterClass.RequestError.Builder, + response.ResponseOuterClass.RequestErrorOrBuilder> + requestErrorBuilder_; + + /** + * .response.RequestError request_error = 4; + * + * @return Whether the requestError field is set. + */ + @java.lang.Override + public boolean hasRequestError() { + return valueCase_ == 4; + } + + /** + * .response.RequestError request_error = 4; + * + * @return The requestError. + */ + @java.lang.Override + public response.ResponseOuterClass.RequestError getRequestError() { + if (requestErrorBuilder_ == null) { + if (valueCase_ == 4) { + return (response.ResponseOuterClass.RequestError) value_; + } + return response.ResponseOuterClass.RequestError.getDefaultInstance(); + } else { + if (valueCase_ == 4) { + return requestErrorBuilder_.getMessage(); + } + return response.ResponseOuterClass.RequestError.getDefaultInstance(); + } + } + + /** .response.RequestError request_error = 4; */ + public Builder setRequestError(response.ResponseOuterClass.RequestError value) { + if (requestErrorBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + value_ = value; + onChanged(); + } else { + requestErrorBuilder_.setMessage(value); + } + valueCase_ = 4; + return this; + } + + /** .response.RequestError request_error = 4; */ + public Builder setRequestError( + response.ResponseOuterClass.RequestError.Builder builderForValue) { + if (requestErrorBuilder_ == null) { + value_ = builderForValue.build(); + onChanged(); + } else { + requestErrorBuilder_.setMessage(builderForValue.build()); + } + valueCase_ = 4; + return this; + } + + /** .response.RequestError request_error = 4; */ + public Builder mergeRequestError(response.ResponseOuterClass.RequestError value) { + if (requestErrorBuilder_ == null) { + if (valueCase_ == 4 + && value_ != response.ResponseOuterClass.RequestError.getDefaultInstance()) { + value_ = + response.ResponseOuterClass.RequestError.newBuilder( + (response.ResponseOuterClass.RequestError) value_) + .mergeFrom(value) + .buildPartial(); + } else { + value_ = value; + } + onChanged(); + } else { + if (valueCase_ == 4) { + requestErrorBuilder_.mergeFrom(value); + } else { + requestErrorBuilder_.setMessage(value); + } + } + valueCase_ = 4; + return this; + } + + /** .response.RequestError request_error = 4; */ + public Builder clearRequestError() { + if (requestErrorBuilder_ == null) { + if (valueCase_ == 4) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + } else { + if (valueCase_ == 4) { + valueCase_ = 0; + value_ = null; + } + requestErrorBuilder_.clear(); + } + return this; + } + + /** .response.RequestError request_error = 4; */ + public response.ResponseOuterClass.RequestError.Builder getRequestErrorBuilder() { + return getRequestErrorFieldBuilder().getBuilder(); + } + + /** .response.RequestError request_error = 4; */ + @java.lang.Override + public response.ResponseOuterClass.RequestErrorOrBuilder getRequestErrorOrBuilder() { + if ((valueCase_ == 4) && (requestErrorBuilder_ != null)) { + return requestErrorBuilder_.getMessageOrBuilder(); + } else { + if (valueCase_ == 4) { + return (response.ResponseOuterClass.RequestError) value_; + } + return response.ResponseOuterClass.RequestError.getDefaultInstance(); + } + } + + /** .response.RequestError request_error = 4; */ + private com.google.protobuf.SingleFieldBuilderV3< + response.ResponseOuterClass.RequestError, + response.ResponseOuterClass.RequestError.Builder, + response.ResponseOuterClass.RequestErrorOrBuilder> + getRequestErrorFieldBuilder() { + if (requestErrorBuilder_ == null) { + if (!(valueCase_ == 4)) { + value_ = response.ResponseOuterClass.RequestError.getDefaultInstance(); + } + requestErrorBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + response.ResponseOuterClass.RequestError, + response.ResponseOuterClass.RequestError.Builder, + response.ResponseOuterClass.RequestErrorOrBuilder>( + (response.ResponseOuterClass.RequestError) value_, + getParentForChildren(), + isClean()); + value_ = null; + } + valueCase_ = 4; + onChanged(); + return requestErrorBuilder_; + } + + /** + * string closing_error = 5; + * + * @return Whether the closingError field is set. + */ + @java.lang.Override + public boolean hasClosingError() { + return valueCase_ == 5; + } + + /** + * string closing_error = 5; + * + * @return The closingError. + */ + @java.lang.Override + public java.lang.String getClosingError() { + java.lang.Object ref = ""; + if (valueCase_ == 5) { + ref = value_; + } + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (valueCase_ == 5) { + value_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * string closing_error = 5; + * + * @return The bytes for closingError. + */ + @java.lang.Override + public com.google.protobuf.ByteString getClosingErrorBytes() { + java.lang.Object ref = ""; + if (valueCase_ == 5) { + ref = value_; + } + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + if (valueCase_ == 5) { + value_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * string closing_error = 5; + * + * @param value The closingError to set. + * @return This builder for chaining. + */ + public Builder setClosingError(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + valueCase_ = 5; + value_ = value; + onChanged(); + return this; + } + + /** + * string closing_error = 5; + * + * @return This builder for chaining. + */ + public Builder clearClosingError() { + if (valueCase_ == 5) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + return this; + } + + /** + * string closing_error = 5; + * + * @param value The bytes for closingError to set. + * @return This builder for chaining. + */ + public Builder setClosingErrorBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + valueCase_ = 5; + value_ = value; + onChanged(); + return this; + } + + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:response.Response) + } + + // @@protoc_insertion_point(class_scope:response.Response) + private static final response.ResponseOuterClass.Response DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new response.ResponseOuterClass.Response(); + } + + public static response.ResponseOuterClass.Response getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Response parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException() + .setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public response.ResponseOuterClass.Response getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_response_RequestError_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_response_RequestError_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_response_Response_descriptor; + private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_response_Response_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + + static { + java.lang.String[] descriptorData = { + "\n\016response.proto\022\010response\"I\n\014RequestErr" + + "or\022(\n\004type\030\001 \001(\0162\032.response.RequestError" + + "Type\022\017\n\007message\030\002 \001(\t\"\304\001\n\010Response\022\024\n\014ca" + + "llback_idx\030\001 \001(\r\022\026\n\014resp_pointer\030\002 \001(\004H\000" + + "\0227\n\021constant_response\030\003 \001(\0162\032.response.C" + + "onstantResponseH\000\022/\n\rrequest_error\030\004 \001(\013" + + "2\026.response.RequestErrorH\000\022\027\n\rclosing_er" + + "ror\030\005 \001(\tH\000B\007\n\005value*O\n\020RequestErrorType" + + "\022\017\n\013Unspecified\020\000\022\r\n\tExecAbort\020\001\022\013\n\007Time" + + "out\020\002\022\016\n\nDisconnect\020\003*\032\n\020ConstantRespons" + + "e\022\006\n\002OK\020\000b\006proto3" + }; + descriptor = + com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( + descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {}); + internal_static_response_RequestError_descriptor = getDescriptor().getMessageTypes().get(0); + internal_static_response_RequestError_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_response_RequestError_descriptor, + new java.lang.String[] { + "Type", "Message", + }); + internal_static_response_Response_descriptor = getDescriptor().getMessageTypes().get(1); + internal_static_response_Response_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_response_Response_descriptor, + new java.lang.String[] { + "CallbackIdx", + "RespPointer", + "ConstantResponse", + "RequestError", + "ClosingError", + "Value", + }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/java/src/lib.rs b/java/src/lib.rs index e69de29bb2..c2eefae8bd 100644 --- a/java/src/lib.rs +++ b/java/src/lib.rs @@ -0,0 +1,76 @@ +use babushka::start_socket_listener; + +use jni::objects::{JClass, JObject}; +use jni::JNIEnv; +use jni::sys::jlong; +use std::sync::mpsc; + +use redis::Value; + +fn redis_value_to_java<'local>(mut env: JNIEnv<'local>, val: Value) -> JObject<'local> { + match val { + Value::Nil => JObject::null(), + Value::Status(str) => JObject::from(env.new_string(str).unwrap()), + Value::Okay => JObject::from(env.new_string("OK").unwrap()), + Value::Int(num) => env.new_object("java/lang/Integer", "(I)Ljava/lang/Integer;", &[num.into()]).unwrap(), + Value::Data(data) => match std::str::from_utf8(data.as_ref()) { + Ok(val) => JObject::from(env.new_string(val).unwrap()), + Err(_err) => { + let _ = env.throw("Error decoding Unicode data"); + JObject::null() + }, + }, + Value::Bulk(_bulk) => { + let _ = env.throw("Not implemented"); + JObject::null() + /* + let elements: &PyList = PyList::new( + py, + bulk.into_iter() + .map(|item| redis_value_to_py(py, item).unwrap()), + ); + Ok(elements.into_py(py)) + */ + } + } +} + +#[no_mangle] +pub extern "system" fn Java_javababushka_client_RedisClient_valueFromPointer<'local>( + mut env: JNIEnv<'local>, + _class: JClass<'local>, + pointer: jlong +) -> JObject<'local> { + let value = unsafe { Box::from_raw(pointer as *mut Value) }; + redis_value_to_java(env, *value) +} + +#[no_mangle] +pub extern "system" fn Java_javababushka_client_RedisClient_startSocketListenerExternal<'local>( + mut env: JNIEnv<'local>, + _class: JClass<'local>, + callback: JObject<'local> +) { + let jvm = env.get_java_vm().unwrap(); + + let callback = env.new_global_ref(callback).unwrap(); + + let (tx, rx) = mpsc::channel(); + start_socket_listener(move |socket_path| { + // Signals that thread has started + tx.send(()).unwrap(); + let mut env = jvm.attach_current_thread().unwrap(); + match socket_path { + Ok(path) => { + let path = env.new_string(path).unwrap(); + let _ = env.call_method(callback, "initCallback", "(Ljava/lang/String;Ljava/lang/String;)V", &[(&JObject::from(path)).into(), (&JObject::null()).into()]); + }, + Err(error_message) => { + let error_message = env.new_string(error_message).unwrap(); + let _ = env.call_method(callback, "initCallback", "(Ljava/lang/String;Ljava/lang/String;)V", &[(&JObject::null()).into(), (&JObject::from(error_message)).into()]); + } + } + }); + // Wait until the thread has started + rx.recv().unwrap(); +} From 73c448f276b1d0d70a3af133906f969ddabdd03d Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Thu, 19 Oct 2023 10:32:20 -0700 Subject: [PATCH 42/81] Handle Exceptions from client; add JniSyncClient fixes Signed-off-by: acarbonetto --- .../benchmarks/BenchmarkingApp.java | 2 +- .../benchmarks/clients/JedisClient.java | 4 ++ .../benchmarks/clients/JniSyncClient.java | 43 +++++--------- .../benchmarks/utils/Benchmarking.java | 58 ++++++++++++------- 4 files changed, 58 insertions(+), 49 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 6a2eb1f1db..018cf13c01 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -64,7 +64,7 @@ public static void main(String[] args) { testClientSetGet(LettuceAsyncClient::new, runConfiguration, true); break; case BABUSHKA_JNI: - testClientSetGet(JniSyncClient::new, runConfiguration, true); + testClientSetGet(JniSyncClient::new, runConfiguration, false); break; case BABUSHKA_ASYNC: System.out.println("Babushka async not yet configured"); diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisClient.java index d48e0eeeea..4cfd294fda 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisClient.java @@ -36,6 +36,10 @@ public void connectToRedis(ConnectionSettings connectionSettings) { jedisResource = new Jedis(connectionSettings.host, connectionSettings.port, connectionSettings.useSsl); jedisResource.connect(); + if (!jedisResource.isConnected()) { + throw new RuntimeException("failed to connect to jedis"); + } + String info_result = info(); } public String info() { diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java index 02c3cf3f9e..1dee8ea511 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java @@ -220,22 +220,15 @@ private ResponseOuterClass.Response makeConnection( } buffer.put(request.toByteArray()); buffer.flip(); - while (isChannelWriting) { - try { - Thread.sleep(250); - } catch (InterruptedException interruptedException) { - // ignore... - } - } - isChannelWriting = true; - while (buffer.hasRemaining()) { - try { - channel.write(buffer); - } catch (IOException ioException) { - // ignore... + try { + synchronized (buffer) { + while (buffer.hasRemaining()) { + channel.write(buffer); + } } + } catch (IOException ioException) { + // ignore... } - isChannelWriting = false; ResponseOuterClass.Response response = null; int timeout = 0; @@ -266,22 +259,16 @@ private ResponseOuterClass.Response makeRedisRequest( } buffer.put(request.toByteArray()); buffer.flip(); - while (isChannelWriting) { - try { - Thread.sleep(250); - } catch (InterruptedException interruptedException) { - // ignore... - } - } - isChannelWriting = true; - while (buffer.hasRemaining()) { - try { - channel.write(buffer); - } catch (IOException ioException) { - // ignore... + try { + // TODO: check that this is the most performant mutex solution + synchronized (buffer) { + while (buffer.hasRemaining()) { + channel.write(buffer); + } } + } catch (IOException ioException) { + // ignore... } - isChannelWriting = false; int timeout = 0; byte[] responseBuffer = null; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 938e8e6f20..2004f1b7fb 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -10,7 +10,9 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -46,15 +48,15 @@ private static ChosenAction randomAction() { public static String generateKeyGet() { int range = SIZE_GET_KEYSPACE - SIZE_SET_KEYSPACE; - return Math.floor(Math.random() * range + SIZE_SET_KEYSPACE + 1) + ""; + return Integer.toString((int) Math.floor(Math.random() * range + SIZE_SET_KEYSPACE + 1)); } public static String generateKeySet() { - return (Math.floor(Math.random() * SIZE_SET_KEYSPACE) + 1) + ""; + return Integer.toString((int) (Math.floor(Math.random() * SIZE_SET_KEYSPACE) + 1)); } public interface Operation { - void go() throws Exception; + void go() throws InterruptedException, ExecutionException, TimeoutException; } private static Pair getLatency(Map actions) { @@ -62,8 +64,9 @@ private static Pair getLatency(Map long before = System.nanoTime(); try { actions.get(action).go(); - } catch (Exception e) { + } catch (InterruptedException | ExecutionException | TimeoutException e) { // timed out - exception from Future::get + return null; } long after = System.nanoTime(); return Pair.of(action, after - before); @@ -88,7 +91,7 @@ private static double stdDeviation(ArrayList latencies, Double avgLatency) return Math.sqrt(stdDeviation / latencies.size()); } - // This has the side-effect of sorting each latencies ArrayList + // This has the side effect of sorting each latency ArrayList public static Map calculateResults( Map> actionLatencies) { Map results = new HashMap(); @@ -97,21 +100,34 @@ public static Map calculateResults( ChosenAction action = entry.getKey(); ArrayList latencies = entry.getValue(); - Double avgLatency = - latencies.stream().collect(Collectors.summingLong(Long::longValue)) - / Double.valueOf(latencies.size()); + if (latencies.size() == 0) { + results.put( + action, + new LatencyResults( + 0, + 0, + 0, + 0, + 0, + 0 + )); + } else { + Double avgLatency = latencies.size() <= 0 ? 0 : + latencies.stream().collect(Collectors.summingLong(Long::longValue)) + / Double.valueOf(latencies.size()); - Collections.sort(latencies); - results.put( - action, - new LatencyResults( - avgLatency, - percentile(latencies, 50), - percentile(latencies, 90), - percentile(latencies, 99), - stdDeviation(latencies, avgLatency), - latencies.size() - )); + Collections.sort(latencies); + results.put( + action, + new LatencyResults( + avgLatency, + percentile(latencies, 50), + percentile(latencies, 90), + percentile(latencies, 99), + stdDeviation(latencies, avgLatency), + latencies.size() + )); + } } return results; @@ -215,7 +231,9 @@ public static void testClientSetGet( // operate and calculate tik-tok Pair result = measurePerformance(clients.get(clientIndex), dataSize, async); - actionResults.get(result.getLeft()).add(result.getRight()); + if (result != null) { + actionResults.get(result.getLeft()).add(result.getRight()); + } iterationIncrement = iterationCounter.getAndIncrement(); } From 79459f5e168f788985b19560210453655de0c134 Mon Sep 17 00:00:00 2001 From: acarbonetto Date: Thu, 19 Oct 2023 18:17:22 -0700 Subject: [PATCH 43/81] Clean up latency and add error checking Signed-off-by: acarbonetto --- .../benchmarks/clients/JniSyncClient.java | 89 +++++++++++-------- .../benchmarks/utils/Benchmarking.java | 66 ++++++++------ .../benchmarks/utils/LatencyResults.java | 7 +- 3 files changed, 99 insertions(+), 63 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java index 1dee8ea511..dcf2aa7076 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java @@ -18,13 +18,12 @@ public class JniSyncClient implements SyncClient { private static int MAX_TIMEOUT = 1000; + private static int TIMEOUT_INTERVAL = 100; private RedisClient client; private SocketChannel channel; - private boolean isChannelWriting = false; - @Override public void connectToRedis() { connectToRedis(new ConnectionSettings("localhost", 6379, false)); @@ -40,11 +39,11 @@ public void connectToRedis(ConnectionSettings connectionSettings) { RedisClient.startSocketListenerExternal(client); int timeout = 0; - int maxTimeout = 1000; + int maxTimeout = MAX_TIMEOUT; while (client.socketPath == null && timeout < maxTimeout) { - timeout++; + timeout += TIMEOUT_INTERVAL; try { - Thread.sleep(250); + Thread.sleep(TIMEOUT_INTERVAL); } catch (InterruptedException exception) { // ignored } @@ -98,7 +97,8 @@ public void connectToRedis(ConnectionSettings connectionSettings) { .setDatabaseId(0) .build(); - makeConnection(request); + makeRedisRequest(request.toByteArray()); + receiveRedisResponse(); } @Override @@ -119,8 +119,8 @@ public void set(String key, String value) { .setSimpleRoutes(RedisRequestOuterClass.SimpleRoutes.AllNodes)) .build(); - ResponseOuterClass.Response response = makeRedisRequest(request); - // nothing to do with the response + makeRedisRequest(request.toByteArray()); + receiveRedisResponse(); } @Override @@ -139,7 +139,8 @@ public String get(String key) { .setSimpleRoutes(RedisRequestOuterClass.SimpleRoutes.AllNodes)) .build(); - ResponseOuterClass.Response response = makeRedisRequest(getStringRequest); + makeRedisRequest(getStringRequest.toByteArray()); + ResponseOuterClass.Response response = receiveRedisResponse(); return response.toString(); } @@ -195,22 +196,9 @@ private static Byte[] varintBytes(int value) { return output.toArray(arr); } - private static byte[] readSocketMessage(SocketChannel channel) throws IOException { - ByteBuffer buffer = ByteBuffer.allocate(1024); - int bytesRead = channel.read(buffer); - if (bytesRead <= 0) { - return null; - } - - byte[] bytes = new byte[bytesRead]; - buffer.flip(); - buffer.get(bytes); - return bytes; - } - - private ResponseOuterClass.Response makeConnection( - connection_request.ConnectionRequestOuterClass.ConnectionRequest request) { - Byte[] varint = varintBytes(request.toByteArray().length); + private void makeRedisRequest( + byte[] request) { + Byte[] varint = varintBytes(request.length); // System.out.println("Request: \n" + request.toString()); ByteBuffer buffer = ByteBuffer.allocate(1024); @@ -218,10 +206,11 @@ private ResponseOuterClass.Response makeConnection( for (Byte b : varint) { buffer.put(b); } - buffer.put(request.toByteArray()); + buffer.put(request); buffer.flip(); try { - synchronized (buffer) { + // TODO: check that this is the most performant mutex solution + synchronized (channel) { while (buffer.hasRemaining()) { channel.write(buffer); } @@ -229,24 +218,54 @@ private ResponseOuterClass.Response makeConnection( } catch (IOException ioException) { // ignore... } + } + + private ResponseOuterClass.Response receiveRedisResponse() { + ByteBuffer readBuffer = ByteBuffer.allocate(1024); - ResponseOuterClass.Response response = null; int timeout = 0; + int bytesRead = 0; try { - byte[] responseBuffer = readSocketMessage(channel); - while (responseBuffer == null && timeout < MAX_TIMEOUT) { - Thread.sleep(250); - timeout++; - responseBuffer = readSocketMessage(channel); + synchronized (channel) { + bytesRead = channel.read(readBuffer); + while (bytesRead <= 0) { + timeout += TIMEOUT_INTERVAL; + if (timeout > MAX_TIMEOUT) { + throw new RuntimeException("Max timeout reached"); + } + + bytesRead = channel.read(readBuffer); + Thread.sleep(TIMEOUT_INTERVAL); + } } - - response = decodeMessage(responseBuffer); + } catch (IOException | InterruptedException exception) { + // ignore... + } + byte[] bytes = new byte[bytesRead]; + readBuffer.flip(); + readBuffer.get(bytes); + ResponseOuterClass.Response response = null; + try { + response = decodeMessage(bytes); } catch (Exception e) { e.printStackTrace(); } return response; } + private static byte[] readSocketMessage(SocketChannel channel) throws IOException { + ByteBuffer buffer = ByteBuffer.allocate(1024); + int bytesRead = channel.read(buffer); + if (bytesRead <= 0) { + return null; + } + + byte[] bytes = new byte[bytesRead]; + buffer.flip(); + buffer.get(bytes); + return bytes; + } + private ResponseOuterClass.Response makeRedisRequest( RedisRequestOuterClass.RedisRequest request) { Byte[] varint = varintBytes(request.toByteArray().length); diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 2004f1b7fb..c524ea86bf 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -1,5 +1,7 @@ package javababushka.benchmarks.utils; +import static java.util.concurrent.CompletableFuture.runAsync; + import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; @@ -11,6 +13,8 @@ import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; @@ -101,20 +105,13 @@ public static Map calculateResults( ArrayList latencies = entry.getValue(); if (latencies.size() == 0) { - results.put( - action, - new LatencyResults( - 0, - 0, - 0, - 0, - 0, - 0 - )); + results.put(action, new LatencyResults(0, 0, 0, 0, 0, 0)); } else { - Double avgLatency = latencies.size() <= 0 ? 0 : - latencies.stream().collect(Collectors.summingLong(Long::longValue)) - / Double.valueOf(latencies.size()); + Double avgLatency = + latencies.size() <= 0 + ? 0 + : latencies.stream().collect(Collectors.summingLong(Long::longValue)) + / Double.valueOf(latencies.size()); Collections.sort(latencies); results.put( @@ -125,8 +122,7 @@ public static Map calculateResults( percentile(latencies, 90), percentile(latencies, 99), stdDeviation(latencies, avgLatency), - latencies.size() - )); + latencies.size())); } } @@ -179,8 +175,7 @@ public static void printResults(Map resultsMap) { action + " p99 latency in ms: " + results.p99Latency / LATENCY_NORMALIZATION); System.out.println( action + " std dev in ms: " + results.stdDeviation / LATENCY_NORMALIZATION); - System.out.println( - action + " total hits: " + results.totalHits); + System.out.println(action + " total hits: " + results.totalHits); } } @@ -225,16 +220,28 @@ public static void testClientSetGet( while (iterationIncrement < iterations) { if (config.debugLogging) { System.out.printf( - "> iteration = %d/%d, client# = %d/%d%n", - iterationIncrement + 1, iterations, clientIndex + 1, clientCount); + "> task = %d, iteration = %d/%d, client# = %d/%d%n", + taskNumDebugging, + iterationIncrement + 1, + iterations, + clientIndex + 1, + clientCount); } // operate and calculate tik-tok Pair result = measurePerformance(clients.get(clientIndex), dataSize, async); + if (config.debugLogging) { + System.out.printf( + "> task = %d, iteration = %d/%d, client# = %d/%d - DONE%n", + taskNumDebugging, + iterationIncrement + 1, + iterations, + clientIndex + 1, + clientCount); + } if (result != null) { actionResults.get(result.getLeft()).add(result.getRight()); } - iterationIncrement = iterationCounter.getAndIncrement(); } }); @@ -246,16 +253,21 @@ public static void testClientSetGet( concurrentNum, clientCount, tasks.size()); } long before = System.nanoTime(); + ExecutorService threadPool = Executors.newFixedThreadPool(concurrentNum); - // create threads and add them to the asyncpool. + // create threads and add them to the async pool. // This will start execution of all the concurrent tasks. List asyncTasks = - tasks.stream().map(CompletableFuture::runAsync).collect(Collectors.toList()); - try { - // wait 1 second before waiting for threads to complete - Thread.sleep(1000); - } catch (InterruptedException interruptedException) { - interruptedException.printStackTrace(); + tasks.stream().map((runnable) -> runAsync(runnable, threadPool)).collect(Collectors.toList()); + // close pool and await for tasks to complete + threadPool.shutdown(); + while (!threadPool.isTerminated()) { + try { + // wait 1 second before waiting for threads to complete + Thread.sleep(100); + } catch (InterruptedException interruptedException) { + interruptedException.printStackTrace(); + } } // wait for all futures to complete asyncTasks.forEach( diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java index f35c8023e5..662ae80797 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java @@ -11,7 +11,12 @@ public class LatencyResults { public final int totalHits; public LatencyResults( - double avgLatency, long p50Latency, long p90Latency, long p99Latency, double stdDeviation, int totalHits) { + double avgLatency, + long p50Latency, + long p90Latency, + long p99Latency, + double stdDeviation, + int totalHits) { this.avgLatency = avgLatency; this.p50Latency = p50Latency; this.p90Latency = p90Latency; From c3d235ab0f2b6247047ab647e4093d92d2899bbf Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Fri, 20 Oct 2023 10:06:23 -0700 Subject: [PATCH 44/81] Add json reporting. (#10) * Add JSON reporting. Signed-off-by: Yury-Fridlyand * Fix for #26. Signed-off-by: Yury-Fridlyand * Update java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java Signed-off-by: Yury-Fridlyand Co-authored-by: Andrew Carbonetto * Use `Optional`. Signed-off-by: Yury-Fridlyand * Address PR feedback. Signed-off-by: Yury-Fridlyand --------- Signed-off-by: Yury-Fridlyand Co-authored-by: Andrew Carbonetto --- benchmarks/utilities/csv_exporter.py | 2 +- java/benchmarks/build.gradle | 4 + .../benchmarks/BenchmarkingApp.java | 19 +--- .../benchmarks/utils/Benchmarking.java | 72 +++++------- .../benchmarks/utils/JsonWriter.java | 103 ++++++++++++++++++ .../benchmarks/utils/LatencyResults.java | 12 +- .../benchmarks/jedis/JedisClientIT.java | 13 +++ 7 files changed, 159 insertions(+), 66 deletions(-) create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/utils/JsonWriter.java diff --git a/benchmarks/utilities/csv_exporter.py b/benchmarks/utilities/csv_exporter.py index a9f1131729..3d48adfe17 100644 --- a/benchmarks/utilities/csv_exporter.py +++ b/benchmarks/utilities/csv_exporter.py @@ -39,7 +39,7 @@ json_file_name = os.path.basename(json_file_full_path) - languages = ["csharp", "node", "python", "rust"] + languages = ["csharp", "node", "python", "rust", "java"] language = next( (language for language in languages if language in json_file_name), None ) diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle index 8d9e500284..5e22fda5c7 100644 --- a/java/benchmarks/build.gradle +++ b/java/benchmarks/build.gradle @@ -18,6 +18,10 @@ dependencies { implementation 'io.lettuce:lettuce-core:6.2.6.RELEASE' implementation 'commons-cli:commons-cli:1.5.0' implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.13.0' + implementation group: 'com.google.code.gson', name: 'gson', version: '2.10.1' + + compileOnly 'org.projectlombok:lombok:1.18.30' + annotationProcessor 'org.projectlombok:lombok:1.18.30' } // Apply a specific Java toolchain to ease working on different environments. diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 66ea1f5029..814a60d6a2 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -2,8 +2,6 @@ import static javababushka.benchmarks.utils.Benchmarking.testClientSetGet; -import java.io.FileWriter; -import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Optional; @@ -57,14 +55,6 @@ public static void main(String[] args) { break; } } - - if (runConfiguration.resultsFile.isPresent()) { - try { - runConfiguration.resultsFile.get().close(); - } catch (IOException ioException) { - System.out.println("Error closing results file"); - } - } } private static Options getOptions() { @@ -97,12 +87,7 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce } if (line.hasOption("resultsFile")) { - try { - runConfiguration.resultsFile = - Optional.of(new FileWriter(line.getOptionValue("resultsFile"))); - } catch (IOException e) { - throw new ParseException("Unable to write to resultsFile."); - } + runConfiguration.resultsFile = Optional.ofNullable(line.getOptionValue("resultsFile")); } if (line.hasOption("dataSize")) { @@ -210,8 +195,8 @@ public boolean isEqual(String other) { public static class RunConfiguration { public String configuration; - public Optional resultsFile; public int dataSize; + public Optional resultsFile; public List concurrentTasks; public ClientName[] clients; public String host; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 14818f46b4..60c7b666f3 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -1,18 +1,15 @@ package javababushka.benchmarks.utils; -import java.io.FileWriter; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; -import java.util.stream.Collectors; import javababushka.benchmarks.AsyncClient; import javababushka.benchmarks.BenchmarkingApp; import javababushka.benchmarks.Client; @@ -26,6 +23,8 @@ public class Benchmarking { static final int SIZE_GET_KEYSPACE = 3750000; static final int SIZE_SET_KEYSPACE = 3000000; static final int ASYNC_OPERATION_TIMEOUT_SEC = 1; + // measurements are done in nano-seconds, but it should be converted to seconds later + static final double SECONDS_IN_NANO = 1e-9; private static ChosenAction randomAction() { if (Math.random() > PROB_GET) { @@ -50,7 +49,7 @@ public interface Operation { void go() throws Exception; } - private static Pair getLatency(Map actions) { + public static Pair measurePerformance(Map actions) { var action = randomAction(); long before = System.nanoTime(); try { @@ -84,56 +83,29 @@ private static double stdDeviation(ArrayList latencies, Double avgLatency) // This has the side-effect of sorting each latencies ArrayList public static Map calculateResults( Map> actionLatencies) { - Map results = new HashMap(); + Map results = new HashMap<>(); for (Map.Entry> entry : actionLatencies.entrySet()) { ChosenAction action = entry.getKey(); ArrayList latencies = entry.getValue(); - Double avgLatency = - latencies.stream().collect(Collectors.summingLong(Long::longValue)) - / Double.valueOf(latencies.size()); + double avgLatency = + SECONDS_IN_NANO * latencies.stream().mapToLong(Long::longValue).sum() / latencies.size(); Collections.sort(latencies); results.put( action, new LatencyResults( avgLatency, - percentile(latencies, 50), - percentile(latencies, 90), - percentile(latencies, 99), - stdDeviation(latencies, avgLatency))); + SECONDS_IN_NANO * percentile(latencies, 50), + SECONDS_IN_NANO * percentile(latencies, 90), + SECONDS_IN_NANO * percentile(latencies, 99), + SECONDS_IN_NANO * stdDeviation(latencies, avgLatency))); } return results; } - public static void printResults( - Map calculatedResults, Optional resultsFile) { - if (resultsFile.isPresent()) { - printResults(calculatedResults, resultsFile.get()); - } else { - printResults(calculatedResults); - } - } - - public static void printResults( - Map resultsMap, FileWriter resultsFile) { - for (Map.Entry entry : resultsMap.entrySet()) { - ChosenAction action = entry.getKey(); - LatencyResults results = entry.getValue(); - - try { - resultsFile.write("Avg. time in ms per " + action + ": " + results.avgLatency / 1000000.0); - resultsFile.write(action + " p50 latency in ms: " + results.p50Latency / 1000000.0); - resultsFile.write(action + " p90 latency in ms: " + results.p90Latency / 1000000.0); - resultsFile.write(action + " p99 latency in ms: " + results.p99Latency / 1000000.0); - resultsFile.write(action + " std dev in ms: " + results.stdDeviation / 1000000.0); - } catch (Exception ignored) { - } - } - } - public static void printResults(Map resultsMap) { for (Map.Entry entry : resultsMap.entrySet()) { ChosenAction action = entry.getKey(); @@ -189,9 +161,10 @@ public static void testClientSetGet( "> iteration = %d/%d, client# = %d/%d%n", iterationIncrement + 1, iterations, clientIndex + 1, clientCount); } + + var actions = getActionMap(clients.get(clientIndex), config.dataSize, async); // operate and calculate tik-tok - Pair result = - measurePerformance(clients.get(clientIndex), config.dataSize, async); + Pair result = measurePerformance(actions); actionResults.get(result.getLeft()).add(result.getRight()); iterationIncrement = iterationCounter.getAndIncrement(); @@ -204,6 +177,7 @@ public static void testClientSetGet( "===> concurrentNum = %d, clientNum = %d, tasks = %d%n", concurrentNum, clientCount, tasks.size()); } + long started = System.nanoTime(); tasks.stream() .map(CompletableFuture::runAsync) .forEach( @@ -215,14 +189,25 @@ public static void testClientSetGet( } }); - printResults(calculateResults(actionResults), config.resultsFile); + var calculatedResults = calculateResults(actionResults); + if (config.resultsFile.isPresent()) { + JsonWriter.Write( + calculatedResults, + config.resultsFile.get(), + config.dataSize, + clientCreator.get().getName(), + clientCount, + concurrentNum, + iterationCounter.get() * 1e9 / (System.nanoTime() - started)); + } + printResults(calculatedResults); } } System.out.println(); } - public static Pair measurePerformance( + public static Map getActionMap( Client client, int dataSize, boolean async) { String value = RandomStringUtils.randomAlphanumeric(dataSize); @@ -251,7 +236,6 @@ public static Pair measurePerformance( .asyncSet(generateKeySet(), value) .get(ASYNC_OPERATION_TIMEOUT_SEC, TimeUnit.SECONDS) : () -> ((SyncClient) client).set(generateKeySet(), value)); - - return getLatency(actions); + return actions; } } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/JsonWriter.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/JsonWriter.java new file mode 100644 index 0000000000..064148de51 --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/JsonWriter.java @@ -0,0 +1,103 @@ +package javababushka.benchmarks.utils; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; +import lombok.Builder; +import lombok.Getter; + +public class JsonWriter { + + public static void Write( + Map calculatedResults, + String resultsFile, + int dataSize, + String client, + int clientCount, + int numOfTasks, + double tps) { + + try { + Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create(); + Collection recordings = new ArrayList<>(); + + Path path = Path.of(resultsFile); + if (Files.exists(path)) { + TypeToken> collectionType = new TypeToken<>() {}; + var json = new String(Files.readAllBytes(path)); + recordings = gson.fromJson(json, collectionType); + } + var data = + new Measurements.MeasurementsBuilder() + // TODO: is_cluster + .data_size(dataSize) + .client(client) + .client_count(clientCount) + .num_of_tasks(numOfTasks) + .tps(tps) + .get_existing_average_latency( + calculatedResults.get(ChosenAction.GET_EXISTING).avgLatency) + .get_existing_p50_latency(calculatedResults.get(ChosenAction.GET_EXISTING).p50Latency) + .get_existing_p90_latency(calculatedResults.get(ChosenAction.GET_EXISTING).p90Latency) + .get_existing_p99_latency(calculatedResults.get(ChosenAction.GET_EXISTING).p99Latency) + .get_existing_std_dev(calculatedResults.get(ChosenAction.GET_EXISTING).stdDeviation) + .get_non_existing_average_latency( + calculatedResults.get(ChosenAction.GET_NON_EXISTING).avgLatency) + .get_non_existing_p50_latency( + calculatedResults.get(ChosenAction.GET_NON_EXISTING).p50Latency) + .get_non_existing_p90_latency( + calculatedResults.get(ChosenAction.GET_NON_EXISTING).p90Latency) + .get_non_existing_p99_latency( + calculatedResults.get(ChosenAction.GET_NON_EXISTING).p99Latency) + .get_non_existing_std_dev( + calculatedResults.get(ChosenAction.GET_NON_EXISTING).stdDeviation) + .set_average_latency(calculatedResults.get(ChosenAction.SET).avgLatency) + .set_p50_latency(calculatedResults.get(ChosenAction.SET).p50Latency) + .set_p90_latency(calculatedResults.get(ChosenAction.SET).p90Latency) + .set_p99_latency(calculatedResults.get(ChosenAction.SET).p99Latency) + .set_std_dev(calculatedResults.get(ChosenAction.SET).stdDeviation) + .build(); + + recordings.add(data); + + Files.write(path, gson.toJson(recordings).getBytes()); + } catch (IOException e) { + System.out.printf( + "Failed to write measurement results into a file '%s': %s%n", + resultsFile, e.getMessage()); + e.printStackTrace(); + } + } + + @Getter + @Builder + public static class Measurements { + private String client; + private int client_count; + private int data_size; + private double get_existing_average_latency; + private double get_existing_p50_latency; + private double get_existing_p90_latency; + private double get_existing_p99_latency; + private double get_existing_std_dev; + private double get_non_existing_average_latency; + private double get_non_existing_p50_latency; + private double get_non_existing_p90_latency; + private double get_non_existing_p99_latency; + private double get_non_existing_std_dev; + private boolean is_cluster; + private int num_of_tasks; + private double set_average_latency; + private double set_p50_latency; + private double set_p90_latency; + private double set_p99_latency; + private double set_std_dev; + private double tps; + } +} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java index 8e2baa3a2b..1ae5f1fd2d 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java @@ -3,13 +3,17 @@ // Raw timing results in nanoseconds public class LatencyResults { public final double avgLatency; - public final long p50Latency; - public final long p90Latency; - public final long p99Latency; + public final double p50Latency; + public final double p90Latency; + public final double p99Latency; public final double stdDeviation; public LatencyResults( - double avgLatency, long p50Latency, long p90Latency, long p99Latency, double stdDeviation) { + double avgLatency, + double p50Latency, + double p90Latency, + double p99Latency, + double stdDeviation) { this.avgLatency = avgLatency; this.p50Latency = p50Latency; this.p90Latency = p90Latency; diff --git a/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java b/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java index d1669d36e0..12f800260f 100644 --- a/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java +++ b/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java @@ -5,6 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import javababushka.benchmarks.utils.Benchmarking; @@ -54,5 +55,17 @@ public void testResourceSetGet() { actions.put( ChosenAction.GET_NON_EXISTING, () -> jedisClient.get(Benchmarking.generateKeyGet())); actions.put(ChosenAction.SET, () -> jedisClient.set(Benchmarking.generateKeySet(), value)); + + Map> latencies = + Map.of( + ChosenAction.GET_EXISTING, new ArrayList<>(), + ChosenAction.GET_NON_EXISTING, new ArrayList<>(), + ChosenAction.SET, new ArrayList<>()); + for (int i = 0; i < iterations; i++) { + var latency = Benchmarking.measurePerformance(actions); + latencies.get(latency.getKey()).add(latency.getValue()); + } + + Benchmarking.printResults(Benchmarking.calculateResults(latencies)); } } From 9e62324fe548f34611badffd590d67ccdf7c6582 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Tue, 24 Oct 2023 16:33:17 -0700 Subject: [PATCH 45/81] Minor fixes. Signed-off-by: Yury-Fridlyand --- .../benchmarks/clients/JniSyncClient.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java index 0f05bf8622..1c3c376f07 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java @@ -7,6 +7,7 @@ import java.nio.channels.SocketChannel; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import javababushka.benchmarks.utils.ConnectionSettings; import javababushka.client.RedisClient; import org.apache.commons.lang3.tuple.MutablePair; @@ -141,7 +142,7 @@ public String get(String key) { makeRedisRequest(getStringRequest.toByteArray()); ResponseOuterClass.Response response = receiveRedisResponse(); - return response.toString(); + return response == null ? null : response.toString(); } @Override @@ -159,7 +160,7 @@ private static Pair decodeVarint(byte[] buffer, int pos) throws E long result = 0; while (true) { byte b = buffer[pos]; - result |= (b & 0x7F) << shift; + result |= (long) (b & 0x7F) << shift; pos += 1; if ((b & 0x80) == 0) { result &= mask; @@ -175,23 +176,22 @@ private static Pair decodeVarint(byte[] buffer, int pos) throws E private static ResponseOuterClass.Response decodeMessage(byte[] buffer) throws Exception { Pair pair = decodeVarint(buffer, 0); - int startIdx = (int) pair.getRight(); + int startIdx = pair.getRight(); byte[] responseBytes = Arrays.copyOfRange(buffer, startIdx, startIdx + (int) (long) pair.getLeft()); - ResponseOuterClass.Response response = ResponseOuterClass.Response.parseFrom(responseBytes); - return response; + return ResponseOuterClass.Response.parseFrom(responseBytes); } private static Byte[] varintBytes(int value) { - ArrayList output = new ArrayList(); + List output = new ArrayList<>(); int bits = value & 0x7F; value >>= 7; while (value > 0) { - output.add(new Byte((byte) (0x80 | bits))); + output.add((byte) (0x80 | bits)); bits = value & 0x7F; value >>= 7; } - output.add(new Byte((byte) bits)); + output.add((byte) bits); Byte[] arr = new Byte[] {}; return output.toArray(arr); } @@ -200,7 +200,9 @@ private void makeRedisRequest(byte[] request) { Byte[] varint = varintBytes(request.length); // System.out.println("Request: \n" + request.toString()); - ByteBuffer buffer = ByteBuffer.allocate(1024); + // javadocs: https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#putInt%28int%29 + // BufferOverflowException - If there are fewer than four bytes remaining in this buffer + ByteBuffer buffer = ByteBuffer.allocate(request.length + 4); buffer.clear(); for (Byte b : varint) { buffer.put(b); @@ -220,6 +222,7 @@ private void makeRedisRequest(byte[] request) { } private ResponseOuterClass.Response receiveRedisResponse() { + // TODO what if buffer is too small? re-allocate? ByteBuffer readBuffer = ByteBuffer.allocate(1024); int timeout = 0; @@ -233,7 +236,7 @@ private ResponseOuterClass.Response receiveRedisResponse() { throw new RuntimeException("Max timeout reached"); } - bytesRead = channel.read(readBuffer); + bytesRead += channel.read(readBuffer); Thread.sleep(TIMEOUT_INTERVAL); } } @@ -247,7 +250,7 @@ private ResponseOuterClass.Response receiveRedisResponse() { try { response = decodeMessage(bytes); } catch (Exception e) { - e.printStackTrace(); + // e.printStackTrace(); } return response; } @@ -305,7 +308,7 @@ private ResponseOuterClass.Response makeRedisRequest( try { response = decodeMessage(responseBuffer); } catch (Exception e) { - e.printStackTrace(); + // e.printStackTrace(); } return response; } From 11a78a370725fe065d91c424c8c28fea5ffa8868 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 25 Oct 2023 10:47:28 -0700 Subject: [PATCH 46/81] Fix result printing. Signed-off-by: Yury-Fridlyand --- .../benchmarks/utils/Benchmarking.java | 16 ++++++++-------- .../benchmarks/utils/LatencyResults.java | 18 +++--------------- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index a243413ed6..976ff9c1e2 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -128,19 +128,19 @@ public static Map calculateResults( public static void printResults( Map resultsMap, double duration, int iterations) { + System.out.printf("Runtime s: %f%n", duration); + System.out.printf("Iterations: %d%n", iterations); for (Map.Entry entry : resultsMap.entrySet()) { ChosenAction action = entry.getKey(); LatencyResults results = entry.getValue(); System.out.printf("===> %s <===%n", action); - System.out.printf("avg. time: %f%n", results.avgLatency / LATENCY_NORMALIZATION); - System.out.printf("p50 latency: %f%n", results.p50Latency / LATENCY_NORMALIZATION); - System.out.printf("p90 latency: %f%n", results.p90Latency / LATENCY_NORMALIZATION); - System.out.printf("p99 latency: %f%n", results.p99Latency / LATENCY_NORMALIZATION); - System.out.printf("std dev: %f%n", results.stdDeviation / LATENCY_NORMALIZATION); - System.out.printf("Total hits: %d", results.totalHits); - System.out.printf("Runtime: %f%n", duration); - System.out.printf("Iterations: %d%n", iterations); + System.out.printf("avg. time ms: %f%n", results.avgLatency); + System.out.printf("std dev ms: %f%n", results.stdDeviation); + System.out.printf("p50 latency ms: %f%n", results.p50Latency); + System.out.printf("p90 latency ms: %f%n", results.p90Latency); + System.out.printf("p99 latency ms: %f%n", results.p99Latency); + System.out.printf("Total hits: %d%n", results.totalHits); } } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java index 6098d6fe71..5d25d72a67 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java @@ -1,6 +1,9 @@ package javababushka.benchmarks.utils; +import lombok.AllArgsConstructor; + /** Raw timing results in nanoseconds */ +@AllArgsConstructor public class LatencyResults { public final double avgLatency; public final double p50Latency; @@ -8,19 +11,4 @@ public class LatencyResults { public final double p99Latency; public final double stdDeviation; public final int totalHits; - - public LatencyResults( - double avgLatency, - double p50Latency, - double p90Latency, - double p99Latency, - double stdDeviation, - int totalHits) { - this.avgLatency = avgLatency; - this.p50Latency = p50Latency; - this.p90Latency = p90Latency; - this.p99Latency = p99Latency; - this.stdDeviation = stdDeviation; - this.totalHits = totalHits; - } } From a2c267092442fae2a03c04dc7e89124bda9cb2b2 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 25 Oct 2023 10:58:40 -0700 Subject: [PATCH 47/81] Add TPS. Signed-off-by: Yury-Fridlyand --- .../main/java/javababushka/benchmarks/utils/Benchmarking.java | 1 + 1 file changed, 1 insertion(+) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 976ff9c1e2..2e70c4386b 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -130,6 +130,7 @@ public static void printResults( Map resultsMap, double duration, int iterations) { System.out.printf("Runtime s: %f%n", duration); System.out.printf("Iterations: %d%n", iterations); + System.out.printf("TPS: %f%n", iterations / duration); for (Map.Entry entry : resultsMap.entrySet()) { ChosenAction action = entry.getKey(); LatencyResults results = entry.getValue(); From 4b9f8de55247669480759f6a73c8aaf473c616d6 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 25 Oct 2023 11:38:36 -0700 Subject: [PATCH 48/81] Remove duplicates. Reorganize and fix imports. Signed-off-by: Yury-Fridlyand --- .../javababushka/benchmarks/AsyncClient.java | 16 ---- .../benchmarks/BenchmarkingApp.java | 10 +-- .../java/javababushka/benchmarks/Client.java | 13 ---- .../javababushka/benchmarks/SyncClient.java | 7 -- .../clients/{ => babushka}/JniSyncClient.java | 3 +- .../clients/{ => jedis}/JedisClient.java | 4 +- .../{ => jedis}/JedisPseudoAsyncClient.java | 3 +- .../{ => lettuce}/LettuceAsyncClient.java | 3 +- .../clients/{ => lettuce}/LettuceClient.java | 3 +- .../benchmarks/jedis/JedisClient.java | 65 ----------------- .../jedis/JedisPseudoAsyncClient.java | 39 ---------- .../lettuce/LettuceAsyncClient.java | 73 ------------------- .../benchmarks/lettuce/LettuceClient.java | 56 -------------- .../benchmarks/jedis/JedisClientIT.java | 12 +-- .../lettuce/LettuceAsyncClientIT.java | 1 + .../benchmarks/lettuce/LettuceClientIT.java | 1 + 16 files changed, 21 insertions(+), 288 deletions(-) delete mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/AsyncClient.java delete mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/Client.java delete mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/SyncClient.java rename java/benchmarks/src/main/java/javababushka/benchmarks/clients/{ => babushka}/JniSyncClient.java (99%) rename java/benchmarks/src/main/java/javababushka/benchmarks/clients/{ => jedis}/JedisClient.java (93%) rename java/benchmarks/src/main/java/javababushka/benchmarks/clients/{ => jedis}/JedisPseudoAsyncClient.java (91%) rename java/benchmarks/src/main/java/javababushka/benchmarks/clients/{ => lettuce}/LettuceAsyncClient.java (94%) rename java/benchmarks/src/main/java/javababushka/benchmarks/clients/{ => lettuce}/LettuceClient.java (92%) delete mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisClient.java delete mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisPseudoAsyncClient.java delete mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceAsyncClient.java delete mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceClient.java diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/AsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/AsyncClient.java deleted file mode 100644 index a688775084..0000000000 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/AsyncClient.java +++ /dev/null @@ -1,16 +0,0 @@ -package javababushka.benchmarks; - -import java.util.concurrent.Future; - -public interface AsyncClient extends Client { - - long DEFAULT_TIMEOUT = 1000; - - Future asyncSet(String key, String value); - - Future asyncGet(String key); - - T waitForResult(Future future); - - T waitForResult(Future future, long timeout); -} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index fb0578947f..9e19abd4e3 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -5,11 +5,11 @@ import java.util.Arrays; import java.util.Optional; import java.util.stream.Stream; -import javababushka.benchmarks.clients.JedisClient; -import javababushka.benchmarks.clients.JedisPseudoAsyncClient; -import javababushka.benchmarks.clients.JniSyncClient; -import javababushka.benchmarks.clients.LettuceAsyncClient; -import javababushka.benchmarks.clients.LettuceClient; +import javababushka.benchmarks.clients.babushka.JniSyncClient; +import javababushka.benchmarks.clients.jedis.JedisClient; +import javababushka.benchmarks.clients.jedis.JedisPseudoAsyncClient; +import javababushka.benchmarks.clients.lettuce.LettuceAsyncClient; +import javababushka.benchmarks.clients.lettuce.LettuceClient; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/Client.java b/java/benchmarks/src/main/java/javababushka/benchmarks/Client.java deleted file mode 100644 index 16ab36847d..0000000000 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/Client.java +++ /dev/null @@ -1,13 +0,0 @@ -package javababushka.benchmarks; - -import javababushka.benchmarks.utils.ConnectionSettings; - -public interface Client { - void connectToRedis(); - - void connectToRedis(ConnectionSettings connectionSettings); - - default void closeConnection() {} - - String getName(); -} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/SyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/SyncClient.java deleted file mode 100644 index c99174af3d..0000000000 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/SyncClient.java +++ /dev/null @@ -1,7 +0,0 @@ -package javababushka.benchmarks; - -public interface SyncClient extends Client { - void set(String key, String value); - - String get(String key); -} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniSyncClient.java similarity index 99% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniSyncClient.java index 1c3c376f07..bf9b94b352 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JniSyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniSyncClient.java @@ -1,4 +1,4 @@ -package javababushka.benchmarks.clients; +package javababushka.benchmarks.clients.babushka; import java.io.IOException; import java.net.StandardProtocolFamily; @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import javababushka.benchmarks.clients.SyncClient; import javababushka.benchmarks.utils.ConnectionSettings; import javababushka.client.RedisClient; import org.apache.commons.lang3.tuple.MutablePair; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisClient.java similarity index 93% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisClient.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisClient.java index 4cfd294fda..fe7722b324 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisClient.java @@ -1,5 +1,6 @@ -package javababushka.benchmarks.clients; +package javababushka.benchmarks.clients.jedis; +import javababushka.benchmarks.clients.SyncClient; import javababushka.benchmarks.utils.ConnectionSettings; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; @@ -39,7 +40,6 @@ public void connectToRedis(ConnectionSettings connectionSettings) { if (!jedisResource.isConnected()) { throw new RuntimeException("failed to connect to jedis"); } - String info_result = info(); } public String info() { diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisPseudoAsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java similarity index 91% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisPseudoAsyncClient.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java index 1aff543c6f..e441b28ad8 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/JedisPseudoAsyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java @@ -1,8 +1,9 @@ -package javababushka.benchmarks.clients; +package javababushka.benchmarks.clients.jedis; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; +import javababushka.benchmarks.clients.AsyncClient; /** * A jedis client with pseudo-sync capabilities. Jedis doesn't provide async API diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceAsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java similarity index 94% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceAsyncClient.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java index 7251953845..fdde50d5f5 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceAsyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java @@ -1,4 +1,4 @@ -package javababushka.benchmarks.clients; +package javababushka.benchmarks.clients.lettuce; import io.lettuce.core.RedisClient; import io.lettuce.core.RedisFuture; @@ -6,6 +6,7 @@ import io.lettuce.core.api.async.RedisAsyncCommands; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; +import javababushka.benchmarks.clients.AsyncClient; import javababushka.benchmarks.utils.ConnectionSettings; /** A Lettuce client with async capabilities see: https://lettuce.io/ */ diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceClient.java similarity index 92% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceClient.java rename to java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceClient.java index 674fb729b0..5e4b1a633c 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/LettuceClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceClient.java @@ -1,8 +1,9 @@ -package javababushka.benchmarks.clients; +package javababushka.benchmarks.clients.lettuce; import io.lettuce.core.RedisClient; import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.sync.RedisStringCommands; +import javababushka.benchmarks.clients.SyncClient; import javababushka.benchmarks.utils.ConnectionSettings; /** A Lettuce client with sync capabilities see: https://lettuce.io/ */ diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisClient.java deleted file mode 100644 index 214a6cae10..0000000000 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisClient.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javababushka.benchmarks.jedis; - -import javababushka.benchmarks.SyncClient; -import javababushka.benchmarks.utils.ConnectionSettings; -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisPool; - -public class JedisClient implements SyncClient { - - public static final String DEFAULT_HOST = "localhost"; - public static final int DEFAULT_PORT = 6379; - - protected Jedis jedisResource; - - public boolean someLibraryMethod() { - return true; - } - - @Override - public void connectToRedis() { - JedisPool pool = new JedisPool(DEFAULT_HOST, DEFAULT_PORT); - jedisResource = pool.getResource(); - } - - @Override - public void closeConnection() { - try { - jedisResource.close(); - } catch (Exception ignored) { - } - } - - @Override - public String getName() { - return "Jedis"; - } - - @Override - public void connectToRedis(ConnectionSettings connectionSettings) { - jedisResource = - new Jedis(connectionSettings.host, connectionSettings.port, connectionSettings.useSsl); - jedisResource.connect(); - } - - public String info() { - return jedisResource.info(); - } - - public String info(String section) { - return jedisResource.info(section); - } - - @Override - public void set(String key, String value) { - jedisResource.set(key, value); - } - - @Override - public String get(String key) { - return jedisResource.get(key); - } -} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisPseudoAsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisPseudoAsyncClient.java deleted file mode 100644 index 598c455d1e..0000000000 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/jedis/JedisPseudoAsyncClient.java +++ /dev/null @@ -1,39 +0,0 @@ -package javababushka.benchmarks.jedis; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import javababushka.benchmarks.AsyncClient; - -// Jedis doesn't provide async API -// https://github.com/redis/jedis/issues/241 -public class JedisPseudoAsyncClient extends JedisClient implements AsyncClient { - @Override - public Future asyncSet(String key, String value) { - return CompletableFuture.runAsync(() -> super.set(key, value)); - } - - @Override - public Future asyncGet(String key) { - return CompletableFuture.supplyAsync(() -> super.get(key)); - } - - @Override - public T waitForResult(Future future) { - return waitForResult(future, DEFAULT_TIMEOUT); - } - - @Override - public T waitForResult(Future future, long timeout) { - try { - return future.get(timeout, TimeUnit.MILLISECONDS); - } catch (Exception ignored) { - return null; - } - } - - @Override - public String getName() { - return "Jedis pseudo-async"; - } -} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceAsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceAsyncClient.java deleted file mode 100644 index 1b8c4ba9b7..0000000000 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceAsyncClient.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javababushka.benchmarks.lettuce; - -import io.lettuce.core.RedisClient; -import io.lettuce.core.RedisFuture; -import io.lettuce.core.api.StatefulRedisConnection; -import io.lettuce.core.api.async.RedisAsyncCommands; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import javababushka.benchmarks.AsyncClient; -import javababushka.benchmarks.utils.ConnectionSettings; - -public class LettuceAsyncClient implements AsyncClient { - - RedisClient client; - RedisAsyncCommands asyncCommands; - StatefulRedisConnection connection; - - @Override - public void connectToRedis() { - connectToRedis(new ConnectionSettings("localhost", 6379, false)); - } - - @Override - public void connectToRedis(ConnectionSettings connectionSettings) { - client = - RedisClient.create( - String.format( - "%s://%s:%d", - connectionSettings.useSsl ? "rediss" : "redis", - connectionSettings.host, - connectionSettings.port)); - connection = client.connect(); - asyncCommands = connection.async(); - } - - @Override - public RedisFuture asyncSet(String key, String value) { - return asyncCommands.set(key, value); - } - - @Override - public RedisFuture asyncGet(String key) { - return asyncCommands.get(key); - } - - @Override - public Object waitForResult(Future future) { - return waitForResult(future, DEFAULT_TIMEOUT); - } - - @Override - public Object waitForResult(Future future, long timeoutMS) { - try { - return future.get(timeoutMS, TimeUnit.MILLISECONDS); - } catch (Exception ignored) { - return null; - } - } - - @Override - public void closeConnection() { - connection.close(); - client.shutdown(); - } - - @Override - public String getName() { - return "Lettuce Async"; - } -} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceClient.java deleted file mode 100644 index e4e1830bda..0000000000 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/lettuce/LettuceClient.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javababushka.benchmarks.lettuce; - -import io.lettuce.core.RedisClient; -import io.lettuce.core.api.StatefulRedisConnection; -import io.lettuce.core.api.sync.RedisStringCommands; -import javababushka.benchmarks.SyncClient; -import javababushka.benchmarks.utils.ConnectionSettings; - -public class LettuceClient implements SyncClient { - - RedisClient client; - RedisStringCommands syncCommands; - StatefulRedisConnection connection; - - @Override - public void connectToRedis() { - connectToRedis(new ConnectionSettings("localhost", 6379, false)); - } - - @Override - public void connectToRedis(ConnectionSettings connectionSettings) { - client = - RedisClient.create( - String.format( - "%s://%s:%d", - connectionSettings.useSsl ? "rediss" : "redis", - connectionSettings.host, - connectionSettings.port)); - connection = client.connect(); - syncCommands = connection.sync(); - } - - @Override - public void set(String key, String value) { - syncCommands.set(key, value); - } - - @Override - public String get(String key) { - return (String) syncCommands.get(key); - } - - @Override - public void closeConnection() { - connection.close(); - client.shutdown(); - } - - @Override - public String getName() { - return "Lettuce"; - } -} diff --git a/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java b/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java index 12f800260f..9a6dbbe93e 100644 --- a/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java +++ b/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java @@ -7,7 +7,9 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; +import javababushka.benchmarks.clients.jedis.JedisClient; import javababushka.benchmarks.utils.Benchmarking; import javababushka.benchmarks.utils.ChosenAction; import org.junit.jupiter.api.BeforeAll; @@ -23,12 +25,6 @@ static void initializeJedisClient() { jedisClient.connectToRedis(); } - @Test - public void someLibraryMethodReturnsTrue() { - JedisClient classUnderTest = new JedisClient(); - assertTrue(classUnderTest.someLibraryMethod(), "someLibraryMethod should return 'true'"); - } - @Test public void testResourceInfo() { String result = jedisClient.info(); @@ -56,7 +52,7 @@ public void testResourceSetGet() { ChosenAction.GET_NON_EXISTING, () -> jedisClient.get(Benchmarking.generateKeyGet())); actions.put(ChosenAction.SET, () -> jedisClient.set(Benchmarking.generateKeySet(), value)); - Map> latencies = + Map> latencies = Map.of( ChosenAction.GET_EXISTING, new ArrayList<>(), ChosenAction.GET_NON_EXISTING, new ArrayList<>(), @@ -66,6 +62,6 @@ public void testResourceSetGet() { latencies.get(latency.getKey()).add(latency.getValue()); } - Benchmarking.printResults(Benchmarking.calculateResults(latencies)); + Benchmarking.printResults(Benchmarking.calculateResults(latencies), 0, iterations); } } diff --git a/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceAsyncClientIT.java b/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceAsyncClientIT.java index c051c1b2a4..ee9ad8cb35 100644 --- a/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceAsyncClientIT.java +++ b/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceAsyncClientIT.java @@ -7,6 +7,7 @@ import static org.junit.jupiter.api.Assertions.fail; import io.lettuce.core.RedisFuture; +import javababushka.benchmarks.clients.lettuce.LettuceAsyncClient; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceClientIT.java b/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceClientIT.java index 445cc5b584..5cbf8186b0 100644 --- a/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceClientIT.java +++ b/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceClientIT.java @@ -4,6 +4,7 @@ package javababushka.benchmarks.lettuce; import java.util.HashMap; +import javababushka.benchmarks.clients.lettuce.LettuceClient; import javababushka.benchmarks.utils.Benchmarking; import javababushka.benchmarks.utils.ChosenAction; import org.junit.jupiter.api.AfterAll; From d6b72ac7db6c8e4c33c8de873f513332d10f9efd Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 25 Oct 2023 20:29:38 -0700 Subject: [PATCH 49/81] Int ctor fix. Signed-off-by: Yury-Fridlyand --- java/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/src/lib.rs b/java/src/lib.rs index c2eefae8bd..133890dcb6 100644 --- a/java/src/lib.rs +++ b/java/src/lib.rs @@ -12,7 +12,7 @@ fn redis_value_to_java<'local>(mut env: JNIEnv<'local>, val: Value) -> JObject<' Value::Nil => JObject::null(), Value::Status(str) => JObject::from(env.new_string(str).unwrap()), Value::Okay => JObject::from(env.new_string("OK").unwrap()), - Value::Int(num) => env.new_object("java/lang/Integer", "(I)Ljava/lang/Integer;", &[num.into()]).unwrap(), + Value::Int(num) => env.new_object("java/lang/Integer", "(I)V", &[num.into()]).unwrap(), Value::Data(data) => match std::str::from_utf8(data.as_ref()) { Ok(val) => JObject::from(env.new_string(val).unwrap()), Err(_err) => { From 58f7b589a020e3ed3531ffd3ded79cac9f2165d2 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Tue, 31 Oct 2023 15:07:44 -0700 Subject: [PATCH 50/81] Iteration 1. Signed-off-by: Yury-Fridlyand --- babushka-core/src/socket_listener.rs | 2 + java/Cargo.toml | 1 + java/benchmarks/build.gradle | 4 + .../clients/babushka/ChannelHandler.java | 18 +++ .../clients/babushka/JniNettyClient.java | 151 ++++++++++++++++++ .../benchmarks/utils/Benchmarking.java | 1 + .../java/javababushka/client/RedisClient.java | 2 + java/javababushka_client_RedisClient.h | 37 +++++ java/src/lib.rs | 57 ++++++- 9 files changed, 270 insertions(+), 3 deletions(-) create mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/ChannelHandler.java create mode 100755 java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java create mode 100644 java/javababushka_client_RedisClient.h diff --git a/babushka-core/src/socket_listener.rs b/babushka-core/src/socket_listener.rs index d2f319fce4..c9be8fb7c8 100644 --- a/babushka-core/src/socket_listener.rs +++ b/babushka-core/src/socket_listener.rs @@ -525,6 +525,8 @@ async fn read_values_loop( return reason; } ReceivedValues(received_requests) => { + print!("Received {} requests: {:?}", received_requests.len(), received_requests); + log_error("parse input", format!("Received {} requests: {:?}", received_requests.len(), received_requests)); handle_requests(received_requests, client, &writer).await; } } diff --git a/java/Cargo.toml b/java/Cargo.toml index 197bb4d4bc..d9d0db8a4f 100644 --- a/java/Cargo.toml +++ b/java/Cargo.toml @@ -16,6 +16,7 @@ tokio = { version = "^1", features = ["rt", "macros", "rt-multi-thread", "time"] logger_core = {path = "../logger_core"} tracing-subscriber = "0.3.16" jni = "0.21.1" +log = "0.4.20" [profile.release] lto = true diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle index f9a6d60982..14bee3268d 100644 --- a/java/benchmarks/build.gradle +++ b/java/benchmarks/build.gradle @@ -22,6 +22,9 @@ dependencies { // https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.24.3' implementation group: 'com.google.code.gson', name: 'gson', version: '2.10.1' + implementation group: 'io.netty', name: 'netty-handler', version: '4.1.100.Final' + // https://github.com/netty/netty/wiki/Native-transports + implementation group: 'io.netty', name: 'netty-transport-native-epoll', version: '4.1.100.Final', classifier: 'linux-x86_64' compileOnly 'org.projectlombok:lombok:1.18.30' annotationProcessor 'org.projectlombok:lombok:1.18.30' @@ -37,6 +40,7 @@ java { application { // Define the main class for the application. mainClass = 'javababushka.benchmarks.BenchmarkingApp' + mainClass = 'javababushka.benchmarks.clients.babushka.JniNettyClient' applicationDefaultJvmArgs += "-Djava.library.path=${projectDir}/../target/debug" } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/ChannelHandler.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/ChannelHandler.java new file mode 100644 index 0000000000..a49229db89 --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/ChannelHandler.java @@ -0,0 +1,18 @@ +package javababushka.benchmarks.clients.babushka; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelPromise; +import io.netty.channel.CombinedChannelDuplexHandler; + +public class ChannelHandler extends CombinedChannelDuplexHandler { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + super.channelRead(ctx, msg); + } + + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { + super.write(ctx, msg, promise); + } +} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java new file mode 100755 index 0000000000..cc18878999 --- /dev/null +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java @@ -0,0 +1,151 @@ +package javababushka.benchmarks.clients.babushka; + +import static connection_request.ConnectionRequestOuterClass.ConnectionRequest; +import static connection_request.ConnectionRequestOuterClass.AddressInfo; +import static connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy; +import static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy; +import static connection_request.ConnectionRequestOuterClass.AuthenticationInfo; +import static connection_request.ConnectionRequestOuterClass.TlsMode; + +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandler; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOutboundHandler; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.CombinedChannelDuplexHandler; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.channel.SimpleUserEventChannelHandler; +import io.netty.channel.epoll.EpollDomainSocketChannel; +import io.netty.channel.epoll.EpollEventLoopGroup; +import io.netty.channel.unix.UnixChannel; +import javababushka.benchmarks.clients.SyncClient; +import javababushka.benchmarks.utils.ConnectionSettings; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.channel.unix.DomainSocketAddress; +import javababushka.client.RedisClient; + +import java.nio.charset.StandardCharsets; + +public class JniNettyClient implements SyncClient { + + private final static String unixSocket = getSocket(); + + private Channel channel = null; + + // TODO static or move to constructor? + private static String getSocket() { + try { + return RedisClient.startSocketListenerExternal(); + } catch (Exception | UnsatisfiedLinkError e) { + System.err.printf("Failed to get UDS from babushka and dedushka: %s%n%n", e); + return null; + } + } + + @Override + public void connectToRedis() { + connectToRedis(new ConnectionSettings("localhost", 6379, false)); + } + + @Override + public void connectToRedis(ConnectionSettings connectionSettings) { + + // TODO maybe move to constructor or to static? + // ====== + Bootstrap bootstrap = new Bootstrap(); + EventLoopGroup group = new EpollEventLoopGroup(); + //EventLoopGroup group = new NioEventLoopGroup(); + try { + bootstrap + .group(group) + .channel(EpollDomainSocketChannel.class) + .handler(new ChannelInitializer() { + @Override + public void initChannel(UnixChannel ch) throws Exception { + ch + .pipeline() + // TODO encoder/decoder + .addLast(new ChannelInboundHandlerAdapter()) + .addLast(new ChannelOutboundHandlerAdapter()); + /* + .addLast(new SimpleUserEventChannelHandler() { + @Override + protected void eventReceived(ChannelHandlerContext ctx, String evt) throws Exception { + + } + }); + */ + //.addLast(new CombinedChannelDuplexHandler(new ChannelInboundHandler(), new ChannelOutboundHandler())); + } + }); + channel = bootstrap.connect(new DomainSocketAddress(unixSocket)).sync().channel(); + + + //channel.writeAndFlush(request); + + //channel.closeFuture().sync(); + } + catch (Exception e) { + int a = 5; + } finally { + //epollEventLoopGroup.shutdownGracefully(); + } + // ====== + + var request = ConnectionRequest.newBuilder() + .addAddresses( + AddressInfo.newBuilder() + .setHost(connectionSettings.host) + .setPort(connectionSettings.port)) + .setTlsMode(connectionSettings.useSsl // TODO: secure or insecure TLS? + ? TlsMode.SecureTls + : TlsMode.NoTls) + .setClusterModeEnabled(false) + // In millis + .setResponseTimeout(250) + // In millis + .setClientCreationTimeout(2500) + .setReadFromReplicaStrategy(ReadFromReplicaStrategy.AlwaysFromPrimary) + .setConnectionRetryStrategy( + ConnectionRetryStrategy.newBuilder() + .setNumberOfRetries(1) + .setFactor(1) + .setExponentBase(1)) + .setAuthenticationInfo( + AuthenticationInfo.newBuilder() + .setPassword("") + .setUsername("default")) + .setDatabaseId(0) + .build(); + + channel.writeAndFlush(request.toByteArray()); + channel.read(); + } + + @Override + public String getName() { + return "JNI Netty"; + } + + @Override + public void set(String key, String value) { + + } + + @Override + public String get(String key) { + return null; + } + + public static void main(String[] args) { + var client = new JniNettyClient(); + client.connectToRedis(); + } +} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 2e70c4386b..1ab295c258 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -156,6 +156,7 @@ public static void testClientSetGet( "%n =====> %s <===== %d clients %d concurrent %d data %n%n", clientCreator.get().getName(), clientCount, concurrentNum, dataSize); AtomicInteger iterationCounter = new AtomicInteger(0); + // Collections.synchronizedList Map> actionResults = Map.of( ChosenAction.GET_EXISTING, new ArrayList<>(), diff --git a/java/benchmarks/src/main/java/javababushka/client/RedisClient.java b/java/benchmarks/src/main/java/javababushka/client/RedisClient.java index 4f267de6e5..423f1a9992 100644 --- a/java/benchmarks/src/main/java/javababushka/client/RedisClient.java +++ b/java/benchmarks/src/main/java/javababushka/client/RedisClient.java @@ -3,6 +3,8 @@ public class RedisClient { public static native void startSocketListenerExternal(RedisClient callback); + public static native String startSocketListenerExternal() throws Exception; + public static native Object valueFromPointer(long pointer); static { diff --git a/java/javababushka_client_RedisClient.h b/java/javababushka_client_RedisClient.h new file mode 100644 index 0000000000..a52938203d --- /dev/null +++ b/java/javababushka_client_RedisClient.h @@ -0,0 +1,37 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class javababushka_client_RedisClient */ + +#ifndef _Included_javababushka_client_RedisClient +#define _Included_javababushka_client_RedisClient +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: javababushka_client_RedisClient + * Method: startSocketListenerExternal + * Signature: (Ljavababushka/client/RedisClient;)V + */ +JNIEXPORT void JNICALL Java_javababushka_client_RedisClient_startSocketListenerExternal__Ljavababushka_client_RedisClient_2 + (JNIEnv *, jclass, jobject); + +/* + * Class: javababushka_client_RedisClient + * Method: startSocketListenerExternal + * Signature: ()Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_javababushka_client_RedisClient_startSocketListenerExternal__ + (JNIEnv *, jclass); + +/* + * Class: javababushka_client_RedisClient + * Method: valueFromPointer + * Signature: (J)Ljava/lang/Object; + */ +JNIEXPORT jobject JNICALL Java_javababushka_client_RedisClient_valueFromPointer + (JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/java/src/lib.rs b/java/src/lib.rs index 133890dcb6..60fcdb4bb7 100644 --- a/java/src/lib.rs +++ b/java/src/lib.rs @@ -1,10 +1,11 @@ use babushka::start_socket_listener; -use jni::objects::{JClass, JObject}; +use jni::objects::{JClass, JObject, JThrowable}; use jni::JNIEnv; use jni::sys::jlong; use std::sync::mpsc; - +use log::error; +use logger_core::Level; use redis::Value; fn redis_value_to_java<'local>(mut env: JNIEnv<'local>, val: Value) -> JObject<'local> { @@ -46,7 +47,7 @@ pub extern "system" fn Java_javababushka_client_RedisClient_valueFromPointer<'lo } #[no_mangle] -pub extern "system" fn Java_javababushka_client_RedisClient_startSocketListenerExternal<'local>( +pub extern "system" fn Java_javababushka_client_RedisClient_startSocketListenerExternal__Ljavababushka_client_RedisClient_2<'local>( mut env: JNIEnv<'local>, _class: JClass<'local>, callback: JObject<'local> @@ -74,3 +75,53 @@ pub extern "system" fn Java_javababushka_client_RedisClient_startSocketListenerE // Wait until the thread has started rx.recv().unwrap(); } + +#[no_mangle] +pub extern "system" fn Java_javababushka_client_RedisClient_startSocketListenerExternal__<'local>( + mut env: JNIEnv<'local>, + _class: JClass<'local> +) -> JObject<'local> { + let (tx, rx) = mpsc::channel::>(); + + logger_core::init(Some(Level::Trace), None); + + start_socket_listener(move |socket_path : Result| { + // Signals that thread has started + let _ = tx.send(socket_path); + }); + + // Wait until the thread has started + let socket_path = rx.recv(); + + match socket_path { + Ok(Ok(path)) => { + env.new_string(path).unwrap().into() + }, + Ok(Err(error_message)) => { + throw_java_exception(env, error_message); + JObject::null() + }, + Err(error) => { + throw_java_exception(env, error.to_string()); + JObject::null() + } + } +} + +fn throw_java_exception(mut env: JNIEnv, message: String) { + let res = env.new_object( + "java/lang/Exception", + "(Ljava/lang/String;)V", + &[ + (&env.new_string(message.clone()).unwrap()).into(), + ]); + + match res { + Ok(res) => { + env.throw(JThrowable::from(res)); + }, + Err(err) => { + error!("Failed to create exception with string {}: {}", message, err.to_string()); + } + }; +} \ No newline at end of file From d145bdf0fdde9095ebafb119fdfe241b58b14f7c Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Tue, 31 Oct 2023 16:29:50 -0700 Subject: [PATCH 51/81] Iteration 2: connected! Signed-off-by: Yury-Fridlyand --- babushka-core/src/client/mod.rs | 2 + babushka-core/src/rotating_buffer.rs | 8 ++ .../clients/babushka/JniNettyClient.java | 73 +++++++++++++++++-- 3 files changed, 77 insertions(+), 6 deletions(-) diff --git a/babushka-core/src/client/mod.rs b/babushka-core/src/client/mod.rs index f9927b6c56..3aa16c4edd 100644 --- a/babushka-core/src/client/mod.rs +++ b/babushka-core/src/client/mod.rs @@ -264,6 +264,8 @@ impl Client { pub async fn new(request: ConnectionRequest) -> Result { const DEFAULT_CLIENT_CREATION_TIMEOUT: Duration = Duration::from_millis(2500); + log_info("Connection configuration", format!("received {} addresses", request.addresses.len())); + log_info( "Connection configuration", sanitized_request_string(&request), diff --git a/babushka-core/src/rotating_buffer.rs b/babushka-core/src/rotating_buffer.rs index 2a00642cec..6b31b21f54 100644 --- a/babushka-core/src/rotating_buffer.rs +++ b/babushka-core/src/rotating_buffer.rs @@ -28,11 +28,17 @@ impl RotatingBuffer { if (start_pos + request_len as usize) > buffer_len { break; } else { + log_error("parse input", format!("incoming: start {start_pos}, len {request_len}, buffer_len: {buffer_len}")); + let bytes = buffer.slice(start_pos..start_pos + request_len as usize); + log_error("parse input", format!("{:#x?}", bytes.as_ref())); + //let str_bytes = std::str::from_utf8(&bytes[..]); + //log_error("String bytes", str_bytes.unwrap().to_string()); match T::parse_from_tokio_bytes( &buffer.slice(start_pos..start_pos + request_len as usize), ) { Ok(request) => { prev_position += request_len as usize + bytes_read; + results.push(request); } Err(err) => { @@ -46,6 +52,8 @@ impl RotatingBuffer { } } + log_error("parse input", format!("results: {}", results.len())); + if prev_position != buffer.len() { self.backing_buffer .extend_from_slice(&buffer[prev_position..]); diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java index cc18878999..dca31cba95 100755 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java @@ -8,6 +8,7 @@ import static connection_request.ConnectionRequestOuterClass.TlsMode; import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; @@ -16,6 +17,7 @@ import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOutboundHandler; import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.ChannelPromise; import io.netty.channel.CombinedChannelDuplexHandler; import io.netty.channel.EventLoopGroup; import io.netty.channel.SimpleChannelInboundHandler; @@ -31,7 +33,11 @@ import io.netty.channel.unix.DomainSocketAddress; import javababushka.client.RedisClient; +import java.net.SocketAddress; +import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; public class JniNettyClient implements SyncClient { @@ -73,7 +79,34 @@ public void initChannel(UnixChannel ch) throws Exception { .pipeline() // TODO encoder/decoder .addLast(new ChannelInboundHandlerAdapter()) - .addLast(new ChannelOutboundHandlerAdapter()); + .addLast(new ChannelOutboundHandlerAdapter() { + @Override + public void bind(ChannelHandlerContext ctx, SocketAddress localAddress, ChannelPromise promise) throws Exception { + System.out.printf("=== bind %s %s %s %n", ctx, localAddress, promise); + super.bind(ctx, localAddress, promise); + } + + @Override + public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) throws Exception { + System.out.printf("=== connect %s %s %s %s %n", ctx, remoteAddress, localAddress, promise); + super.connect(ctx, remoteAddress, localAddress, promise); + } + + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { + System.out.printf("=== write %s %s %s %n", ctx, msg, promise); + //var arr = (byte[])msg; + //new ByteBuf().writeBytes(arr, 0, arr.length); + + super.write(ctx, Unpooled.copiedBuffer((byte[])msg), promise); + } + + @Override + public void flush(ChannelHandlerContext ctx) throws Exception { + System.out.printf("=== flush %s %n", ctx); + super.flush(ctx); + } + }); /* .addLast(new SimpleUserEventChannelHandler() { @Override @@ -103,7 +136,8 @@ protected void eventReceived(ChannelHandlerContext ctx, String evt) throws Excep .addAddresses( AddressInfo.newBuilder() .setHost(connectionSettings.host) - .setPort(connectionSettings.port)) + .setPort(connectionSettings.port) + .build()) .setTlsMode(connectionSettings.useSsl // TODO: secure or insecure TLS? ? TlsMode.SecureTls : TlsMode.NoTls) @@ -117,16 +151,43 @@ protected void eventReceived(ChannelHandlerContext ctx, String evt) throws Excep ConnectionRetryStrategy.newBuilder() .setNumberOfRetries(1) .setFactor(1) - .setExponentBase(1)) + .setExponentBase(1) + .build()) .setAuthenticationInfo( AuthenticationInfo.newBuilder() .setPassword("") - .setUsername("default")) + .setUsername("default") + .build()) .setDatabaseId(0) .build(); - channel.writeAndFlush(request.toByteArray()); - channel.read(); + var bytes = request.toByteArray(); + var varint = getVarInt(bytes.length); + + ByteBuffer buffer = ByteBuffer.allocate(bytes.length + varint.length); + buffer.clear(); + for (Byte b : varint) { + buffer.put(b); + } + buffer.put(bytes); + buffer.flip(); + + channel.writeAndFlush(buffer.array()); + //channel.read(); + } + + private static Byte[] getVarInt(int value) { + List output = new ArrayList<>(); + int bits = value & 0x7F; + value >>= 7; + while (value > 0) { + output.add((byte) (0x80 | bits)); + bits = value & 0x7F; + value >>= 7; + } + output.add((byte) bits); + Byte[] arr = new Byte[] {}; + return output.toArray(arr); } @Override From 0b03dc50cb42b529787a1536f96588c656d2512c Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 1 Nov 2023 11:47:06 -0700 Subject: [PATCH 52/81] Iteration 3: `get` and `set`. Signed-off-by: Yury-Fridlyand --- babushka-core/src/socket_listener.rs | 10 + java/benchmarks/build.gradle | 5 + .../benchmarks/clients/AsyncClient.java | 21 +- .../clients/babushka/JniNettyClient.java | 302 ++++++++++++++---- .../clients/jedis/JedisPseudoAsyncClient.java | 20 +- .../clients/lettuce/LettuceAsyncClient.java | 37 ++- java/src/lib.rs | 4 + 7 files changed, 302 insertions(+), 97 deletions(-) diff --git a/babushka-core/src/socket_listener.rs b/babushka-core/src/socket_listener.rs index c9be8fb7c8..c861c30eb0 100644 --- a/babushka-core/src/socket_listener.rs +++ b/babushka-core/src/socket_listener.rs @@ -134,6 +134,9 @@ async fn write_to_output(writer: &Rc) { if output.is_empty() { return; } + + log_warn("write_to_output", format!("output: {} {:?}", output.len(), output)); + let mut total_written_bytes = 0; while total_written_bytes < output.len() { if let Err(err) = writer.socket.writable().await { @@ -165,6 +168,8 @@ async fn write_closing_error( callback_index: u32, writer: &Rc, ) -> Result<(), io::Error> { + log_warn("write_closing_error", format!("err: {}, callback: {callback_index}", err.err_message)); + let err = err.err_message; log_error("client creation", err.as_str()); let mut response = Response::new(); @@ -179,6 +184,9 @@ async fn write_result( callback_index: u32, writer: &Rc, ) -> Result<(), io::Error> { + + log_warn("write_result", format!("resp_result: {resp_result:?}, callback: {callback_index}")); + let mut response = Response::new(); response.callback_idx = callback_index; response.value = match resp_result { @@ -241,6 +249,8 @@ async fn write_to_writer(response: Response, writer: &Rc) -> Result<(), let mut vec = writer.accumulated_outputs.take(); let encode_result = response.write_length_delimited_to_vec(&mut vec); + log_warn("write_to_writer", format!("Response: {response:?}")); + // Write the response' length to the buffer match encode_result { Ok(_) => { diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle index 14bee3268d..0ae52dad19 100644 --- a/java/benchmarks/build.gradle +++ b/java/benchmarks/build.gradle @@ -22,9 +22,14 @@ dependencies { // https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.24.3' implementation group: 'com.google.code.gson', name: 'gson', version: '2.10.1' + implementation group: 'io.netty', name: 'netty-handler', version: '4.1.100.Final' // https://github.com/netty/netty/wiki/Native-transports implementation group: 'io.netty', name: 'netty-transport-native-epoll', version: '4.1.100.Final', classifier: 'linux-x86_64' + implementation group: 'io.netty', name: 'netty-transport-native-kqueue', version: '4.1.100.Final', classifier: 'osx-x86_64' + + //testImplementation group: 'org.slf4j', name: 'slf4j-reload4j', version: '2.0.9' + //testImplementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.9' compileOnly 'org.projectlombok:lombok:1.18.30' annotationProcessor 'org.projectlombok:lombok:1.18.30' diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java index f35a233cfa..0181cc052e 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java @@ -1,17 +1,30 @@ package javababushka.benchmarks.clients; +import javababushka.benchmarks.utils.ConnectionSettings; + import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; /** A Redis client with async capabilities */ -public interface AsyncClient extends Client { +public interface AsyncClient extends Client { long DEFAULT_TIMEOUT = 1000; - Future asyncSet(String key, String value); + Future asyncConnectToRedis(ConnectionSettings connectionSettings); + + Future asyncSet(String key, String value); Future asyncGet(String key); - T waitForResult(Future future); + default T waitForResult(Future future) { + return waitForResult(future, DEFAULT_TIMEOUT); + } - T waitForResult(Future future, long timeout); + default T waitForResult(Future future, long timeout) { + try { + return future.get(timeout, TimeUnit.MILLISECONDS); + } catch (Exception ignored) { + return null; + } + } } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java index dca31cba95..8e1d6eadf0 100755 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java @@ -6,7 +6,16 @@ import static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy; import static connection_request.ConnectionRequestOuterClass.AuthenticationInfo; import static connection_request.ConnectionRequestOuterClass.TlsMode; +import static response.ResponseOuterClass.Response; +import static response.ResponseOuterClass.ConstantResponse; +import static redis_request.RedisRequestOuterClass.Command.ArgsArray; +import static redis_request.RedisRequestOuterClass.Command; +import static redis_request.RedisRequestOuterClass.RequestType; +import static redis_request.RedisRequestOuterClass.RedisRequest; +import static redis_request.RedisRequestOuterClass.SimpleRoutes; +import static redis_request.RedisRequestOuterClass.Routes; +import com.google.protobuf.InvalidProtocolBufferException; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -24,7 +33,22 @@ import io.netty.channel.SimpleUserEventChannelHandler; import io.netty.channel.epoll.EpollDomainSocketChannel; import io.netty.channel.epoll.EpollEventLoopGroup; +import io.netty.channel.kqueue.KQueue; +import io.netty.channel.kqueue.KQueueDomainSocketChannel; +import io.netty.channel.kqueue.KQueueEventLoopGroup; import io.netty.channel.unix.UnixChannel; +import io.netty.handler.codec.LengthFieldBasedFrameDecoder; +import io.netty.handler.codec.LengthFieldPrepender; +import io.netty.handler.codec.protobuf.ProtobufDecoder; +import io.netty.handler.codec.protobuf.ProtobufEncoder; +import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; +import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; +import io.netty.handler.logging.LogLevel; +import io.netty.handler.logging.LoggingHandler; +import io.netty.util.internal.logging.InternalLogLevel; +import io.netty.util.internal.logging.InternalLoggerFactory; +import io.netty.util.internal.logging.Slf4JLoggerFactory; +import javababushka.benchmarks.clients.AsyncClient; import javababushka.benchmarks.clients.SyncClient; import javababushka.benchmarks.utils.ConnectionSettings; import io.netty.channel.nio.NioEventLoopGroup; @@ -32,18 +56,26 @@ import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.channel.unix.DomainSocketAddress; import javababushka.client.RedisClient; +import response.ResponseOuterClass; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; -public class JniNettyClient implements SyncClient { +public class JniNettyClient implements SyncClient, AsyncClient, AutoCloseable { - private final static String unixSocket = getSocket(); + // Futures to handle responses. Index is callback id, starting from 1 (0 index is for connection request always). + private final List> responses = Collections.synchronizedList(new ArrayList<>()); - private Channel channel = null; + private final static String unixSocket = getSocket(); // TODO static or move to constructor? private static String getSocket() { @@ -55,6 +87,23 @@ private static String getSocket() { } } + private Channel channel = null; + private EventLoopGroup group = null; + + private final static boolean isMacOs = isMacOs(); + private static boolean isMacOs() { + try { + Class.forName("io.netty.channel.kqueue.KQueue"); + return KQueue.isAvailable(); + } catch (ClassNotFoundException e) { + return false; + } + } + + static { + InternalLoggerFactory.setDefaultFactory(Slf4JLoggerFactory.INSTANCE); + } + @Override public void connectToRedis() { connectToRedis(new ConnectionSettings("localhost", 6379, false)); @@ -63,22 +112,56 @@ public void connectToRedis() { @Override public void connectToRedis(ConnectionSettings connectionSettings) { + Response connected = null; + try { + connected = waitForResult(asyncConnectToRedis(connectionSettings)); + System.out.printf("Connection %s%n", connected != null ? connected.getConstantResponse() : null); + } catch (Exception e) { + System.err.println("Connection time out"); + } + + int a = 5; + } + + private void createChannel() { // TODO maybe move to constructor or to static? // ====== - Bootstrap bootstrap = new Bootstrap(); - EventLoopGroup group = new EpollEventLoopGroup(); //EventLoopGroup group = new NioEventLoopGroup(); try { - bootstrap - .group(group) - .channel(EpollDomainSocketChannel.class) + channel = new Bootstrap() + .group(group = isMacOs ? new KQueueEventLoopGroup() : new EpollEventLoopGroup()) + .channel(isMacOs ? KQueueDomainSocketChannel.class : EpollDomainSocketChannel.class) .handler(new ChannelInitializer() { @Override public void initChannel(UnixChannel ch) throws Exception { ch .pipeline() - // TODO encoder/decoder - .addLast(new ChannelInboundHandlerAdapter()) + .addLast("logger", new LoggingHandler(LogLevel.DEBUG)) + //https://netty.io/4.1/api/io/netty/handler/codec/protobuf/ProtobufEncoder.html + .addLast("protobufDecoder", new ProtobufVarint32FrameDecoder()) + .addLast("protobufEncoder", new ProtobufVarint32LengthFieldPrepender()) + + .addLast(new ChannelInboundHandlerAdapter() { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + //System.out.printf("=== channelRead %s %s %n", ctx, msg); + var buf = (ByteBuf) msg; + var bytes = new byte[buf.readableBytes()]; + buf.readBytes(bytes); + // TODO surround parsing with try-catch + var response = Response.parseFrom(bytes); + System.out.printf("== Received response with callback %d%n", response.getCallbackIdx()); + responses.get(response.getCallbackIdx()).complete(response); + super.channelRead(ctx, bytes); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + System.out.printf("=== exceptionCaught %s %s %n", ctx, cause); + cause.printStackTrace(); + super.exceptionCaught(ctx, cause); + } + }) .addLast(new ChannelOutboundHandlerAdapter() { @Override public void bind(ChannelHandlerContext ctx, SocketAddress localAddress, ChannelPromise promise) throws Exception { @@ -95,8 +178,6 @@ public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, Sock @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { System.out.printf("=== write %s %s %s %n", ctx, msg, promise); - //var arr = (byte[])msg; - //new ByteBuf().writeBytes(arr, 0, arr.length); super.write(ctx, Unpooled.copiedBuffer((byte[])msg), promise); } @@ -117,20 +198,115 @@ protected void eventReceived(ChannelHandlerContext ctx, String evt) throws Excep */ //.addLast(new CombinedChannelDuplexHandler(new ChannelInboundHandler(), new ChannelOutboundHandler())); } - }); - channel = bootstrap.connect(new DomainSocketAddress(unixSocket)).sync().channel(); - + }) + .connect(new DomainSocketAddress(unixSocket)).sync().channel(); - //channel.writeAndFlush(request); - - //channel.closeFuture().sync(); } catch (Exception e) { - int a = 5; + System.err.printf("Failed to create a channel %s: %s%n", e.getClass().getSimpleName(), e.getMessage()); + e.printStackTrace(System.err); + } + } + + @Override + public void closeConnection() { + try { +// channel.closeFuture().sync(); +// } catch (InterruptedException ignored) { } finally { - //epollEventLoopGroup.shutdownGracefully(); + group.shutdownGracefully(); } - // ====== + } + + @Override + public String getName() { + return "JNI Netty"; + } + + @Override + public void set(String key, String value) { + waitForResult(asyncSet(key, value)); + // TODO parse response and rethrow an exception if there is an error + } + + @Override + public String get(String key) { + return waitForResult(asyncGet(key)); + /* + try { + var response = responses.get(callbackId).get(DEFAULT_FUTURE_TIMEOUT_SEC, TimeUnit.SECONDS); + return response.hasRespPointer() + ? RedisClient.valueFromPointer(response.getRespPointer()).toString() + : null; + } catch (Exception e) { + System.err.printf("Failed to process `get` response, callback = %d: %s %s%n", + callbackId, e.getClass().getSimpleName(), e.getMessage()); + e.printStackTrace(System.err); + return null; + } + */ + } + + // TODO use reentrant lock + // https://www.geeksforgeeks.org/reentrant-lock-java/ + private synchronized int getNextCallbackId() { + responses.add(new CompletableFuture<>()); + return responses.size() - 1; + } + + public static void main(String[] args) { + var client = new JniNettyClient(); + client.connectToRedis(); + + var get_ne = client.get("sdf"); + var key = String.valueOf(ProcessHandle.current().pid()); + client.set(key, "asfsdf"); + var get_e = client.get(key); + + var get_nea = client.asyncGet("sdf"); + var set_a = client.asyncSet(key, "asfsdf"); + var get_ea = client.asyncGet(key); + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + } + var res1 = client.waitForResult(get_nea); + var res2 = client.waitForResult(set_a); + var res3 = client.waitForResult(get_ea); + + long beforeSet = System.nanoTime(); + for (int i = 0; i < 1000; i++) { + client.set("name", "value"); + } + long afterSet = System.nanoTime(); + System.out.printf("++++ set: %d%n", afterSet - beforeSet); + + long beforeGetNE = System.nanoTime(); + for (int i = 0; i < 1000; i++) { + client.get("namevalue"); + } + long afterGetNE = System.nanoTime(); + System.out.printf("++++ get NE: %d%n", afterGetNE - beforeGetNE); + + long beforeGetE = System.nanoTime(); + for (int i = 0; i < 1000; i++) { + client.get(key); + } + long afterGetE = System.nanoTime(); + System.out.printf("++++ get E: %d%n", afterGetE - beforeGetE); + + client.closeConnection(); + } + + @Override + public void close() throws Exception { + closeConnection(); + } + + @Override + public Future asyncConnectToRedis(ConnectionSettings connectionSettings) { + createChannel(); var request = ConnectionRequest.newBuilder() .addAddresses( @@ -161,52 +337,54 @@ protected void eventReceived(ChannelHandlerContext ctx, String evt) throws Excep .setDatabaseId(0) .build(); - var bytes = request.toByteArray(); - var varint = getVarInt(bytes.length); - - ByteBuffer buffer = ByteBuffer.allocate(bytes.length + varint.length); - buffer.clear(); - for (Byte b : varint) { - buffer.put(b); - } - buffer.put(bytes); - buffer.flip(); - - channel.writeAndFlush(buffer.array()); - //channel.read(); - } - - private static Byte[] getVarInt(int value) { - List output = new ArrayList<>(); - int bits = value & 0x7F; - value >>= 7; - while (value > 0) { - output.add((byte) (0x80 | bits)); - bits = value & 0x7F; - value >>= 7; - } - output.add((byte) bits); - Byte[] arr = new Byte[] {}; - return output.toArray(arr); - } - - @Override - public String getName() { - return "JNI Netty"; + var future = new CompletableFuture(); + responses.add(future); + channel.writeAndFlush(request.toByteArray()); + return future; } @Override - public void set(String key, String value) { - + public Future asyncSet(String key, String value) { + int callbackId = getNextCallbackId(); + System.out.printf("== set(%s, %s), callback %d%n", key, value, callbackId); + RedisRequest request = + RedisRequest.newBuilder() + .setCallbackIdx(callbackId) + .setSingleCommand( + Command.newBuilder() + .setRequestType(RequestType.SetString) + .setArgsArray(ArgsArray.newBuilder().addArgs(key).addArgs(value).build()) + .build()) + .setRoute( + Routes.newBuilder() + .setSimpleRoutes(SimpleRoutes.AllNodes) + .build()) + .build(); + channel.writeAndFlush(request.toByteArray()); + return responses.get(callbackId); } @Override - public String get(String key) { - return null; - } - - public static void main(String[] args) { - var client = new JniNettyClient(); - client.connectToRedis(); + public Future asyncGet(String key) { + int callbackId = getNextCallbackId(); + System.out.printf("== get(%s), callback %d%n", key, callbackId); + RedisRequest request = + RedisRequest.newBuilder() + .setCallbackIdx(callbackId) + .setSingleCommand( + Command.newBuilder() + .setRequestType(RequestType.GetString) + .setArgsArray(ArgsArray.newBuilder().addArgs(key).build()) + .build()) + .setRoute( + Routes.newBuilder() + .setSimpleRoutes(SimpleRoutes.AllNodes) + .build()) + .build(); + channel.writeAndFlush(request.toByteArray()); + return responses.get(callbackId) + .thenApply(response -> response.hasRespPointer() + ? RedisClient.valueFromPointer(response.getRespPointer()).toString() + : null); } } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java index e441b28ad8..d3776663e1 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java @@ -4,6 +4,7 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import javababushka.benchmarks.clients.AsyncClient; +import javababushka.benchmarks.utils.ConnectionSettings; /** * A jedis client with pseudo-sync capabilities. Jedis doesn't provide async API @@ -12,6 +13,11 @@ *

See: https://github.com/redis/jedis */ public class JedisPseudoAsyncClient extends JedisClient implements AsyncClient { + @Override + public Future asyncConnectToRedis(ConnectionSettings connectionSettings) { + return CompletableFuture.runAsync(() -> super.connectToRedis(connectionSettings)); + } + @Override public Future asyncSet(String key, String value) { return CompletableFuture.runAsync(() -> super.set(key, value)); @@ -22,20 +28,6 @@ public Future asyncGet(String key) { return CompletableFuture.supplyAsync(() -> super.get(key)); } - @Override - public T waitForResult(Future future) { - return waitForResult(future, DEFAULT_TIMEOUT); - } - - @Override - public T waitForResult(Future future, long timeout) { - try { - return future.get(timeout, TimeUnit.MILLISECONDS); - } catch (Exception ignored) { - return null; - } - } - @Override public String getName() { return "Jedis pseudo-async"; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java index fdde50d5f5..bf5bc08117 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java @@ -2,18 +2,21 @@ import io.lettuce.core.RedisClient; import io.lettuce.core.RedisFuture; +import io.lettuce.core.RedisURI; import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.async.RedisAsyncCommands; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; + +import io.lettuce.core.codec.StringCodec; import javababushka.benchmarks.clients.AsyncClient; import javababushka.benchmarks.utils.ConnectionSettings; /** A Lettuce client with async capabilities see: https://lettuce.io/ */ -public class LettuceAsyncClient implements AsyncClient { +public class LettuceAsyncClient implements AsyncClient { RedisClient client; - RedisAsyncCommands asyncCommands; + RedisAsyncCommands asyncCommands; StatefulRedisConnection connection; @Override @@ -35,27 +38,27 @@ public void connectToRedis(ConnectionSettings connectionSettings) { } @Override - public RedisFuture asyncSet(String key, String value) { - return asyncCommands.set(key, value); - } - - @Override - public RedisFuture asyncGet(String key) { - return asyncCommands.get(key); + public Future asyncConnectToRedis(ConnectionSettings connectionSettings) { + client = RedisClient.create(); + var asyncConnection = client.connectAsync( + new StringCodec(), + RedisURI.create(String.format( + "%s://%s:%d", + connectionSettings.useSsl ? "rediss" : "redis", + connectionSettings.host, + connectionSettings.port))); + asyncConnection.whenComplete((connection, exception) -> asyncCommands = connection.async()); + return asyncConnection.thenApply((connection) -> "OK"); } @Override - public Object waitForResult(Future future) { - return waitForResult(future, DEFAULT_TIMEOUT); + public RedisFuture asyncSet(String key, String value) { + return asyncCommands.set(key, value); } @Override - public Object waitForResult(Future future, long timeoutMS) { - try { - return future.get(timeoutMS, TimeUnit.MILLISECONDS); - } catch (Exception ignored) { - return null; - } + public RedisFuture asyncGet(String key) { + return asyncCommands.get(key); } @Override diff --git a/java/src/lib.rs b/java/src/lib.rs index 60fcdb4bb7..cf0d728508 100644 --- a/java/src/lib.rs +++ b/java/src/lib.rs @@ -9,10 +9,12 @@ use logger_core::Level; use redis::Value; fn redis_value_to_java<'local>(mut env: JNIEnv<'local>, val: Value) -> JObject<'local> { + println!("==r value {:?}", val); match val { Value::Nil => JObject::null(), Value::Status(str) => JObject::from(env.new_string(str).unwrap()), Value::Okay => JObject::from(env.new_string("OK").unwrap()), + // TODO use primitive integer Value::Int(num) => env.new_object("java/lang/Integer", "(I)V", &[num.into()]).unwrap(), Value::Data(data) => match std::str::from_utf8(data.as_ref()) { Ok(val) => JObject::from(env.new_string(val).unwrap()), @@ -42,7 +44,9 @@ pub extern "system" fn Java_javababushka_client_RedisClient_valueFromPointer<'lo _class: JClass<'local>, pointer: jlong ) -> JObject<'local> { + println!("==r pointer {:?}", pointer); let value = unsafe { Box::from_raw(pointer as *mut Value) }; + println!("==r value {:?}", value); redis_value_to_java(env, *value) } From a3075d5ae3eaff3796cd0049431a2aef299fdd4b Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 1 Nov 2023 12:22:30 -0700 Subject: [PATCH 53/81] Iteration 4: benchmark. Signed-off-by: Yury-Fridlyand --- babushka-core/src/client/mod.rs | 2 - babushka-core/src/rotating_buffer.rs | 8 --- babushka-core/src/socket_listener.rs | 12 ---- benchmarks/utilities/csv_exporter.py | 8 ++- java/benchmarks/build.gradle | 2 +- .../benchmarks/BenchmarkingApp.java | 12 +++- .../clients/babushka/JniNettyClient.java | 55 +++++++++++++++---- .../benchmarks/utils/Benchmarking.java | 4 +- java/src/lib.rs | 5 +- 9 files changed, 63 insertions(+), 45 deletions(-) mode change 100644 => 100755 benchmarks/utilities/csv_exporter.py diff --git a/babushka-core/src/client/mod.rs b/babushka-core/src/client/mod.rs index 3aa16c4edd..f9927b6c56 100644 --- a/babushka-core/src/client/mod.rs +++ b/babushka-core/src/client/mod.rs @@ -264,8 +264,6 @@ impl Client { pub async fn new(request: ConnectionRequest) -> Result { const DEFAULT_CLIENT_CREATION_TIMEOUT: Duration = Duration::from_millis(2500); - log_info("Connection configuration", format!("received {} addresses", request.addresses.len())); - log_info( "Connection configuration", sanitized_request_string(&request), diff --git a/babushka-core/src/rotating_buffer.rs b/babushka-core/src/rotating_buffer.rs index 6b31b21f54..2a00642cec 100644 --- a/babushka-core/src/rotating_buffer.rs +++ b/babushka-core/src/rotating_buffer.rs @@ -28,17 +28,11 @@ impl RotatingBuffer { if (start_pos + request_len as usize) > buffer_len { break; } else { - log_error("parse input", format!("incoming: start {start_pos}, len {request_len}, buffer_len: {buffer_len}")); - let bytes = buffer.slice(start_pos..start_pos + request_len as usize); - log_error("parse input", format!("{:#x?}", bytes.as_ref())); - //let str_bytes = std::str::from_utf8(&bytes[..]); - //log_error("String bytes", str_bytes.unwrap().to_string()); match T::parse_from_tokio_bytes( &buffer.slice(start_pos..start_pos + request_len as usize), ) { Ok(request) => { prev_position += request_len as usize + bytes_read; - results.push(request); } Err(err) => { @@ -52,8 +46,6 @@ impl RotatingBuffer { } } - log_error("parse input", format!("results: {}", results.len())); - if prev_position != buffer.len() { self.backing_buffer .extend_from_slice(&buffer[prev_position..]); diff --git a/babushka-core/src/socket_listener.rs b/babushka-core/src/socket_listener.rs index c861c30eb0..d2f319fce4 100644 --- a/babushka-core/src/socket_listener.rs +++ b/babushka-core/src/socket_listener.rs @@ -134,9 +134,6 @@ async fn write_to_output(writer: &Rc) { if output.is_empty() { return; } - - log_warn("write_to_output", format!("output: {} {:?}", output.len(), output)); - let mut total_written_bytes = 0; while total_written_bytes < output.len() { if let Err(err) = writer.socket.writable().await { @@ -168,8 +165,6 @@ async fn write_closing_error( callback_index: u32, writer: &Rc, ) -> Result<(), io::Error> { - log_warn("write_closing_error", format!("err: {}, callback: {callback_index}", err.err_message)); - let err = err.err_message; log_error("client creation", err.as_str()); let mut response = Response::new(); @@ -184,9 +179,6 @@ async fn write_result( callback_index: u32, writer: &Rc, ) -> Result<(), io::Error> { - - log_warn("write_result", format!("resp_result: {resp_result:?}, callback: {callback_index}")); - let mut response = Response::new(); response.callback_idx = callback_index; response.value = match resp_result { @@ -249,8 +241,6 @@ async fn write_to_writer(response: Response, writer: &Rc) -> Result<(), let mut vec = writer.accumulated_outputs.take(); let encode_result = response.write_length_delimited_to_vec(&mut vec); - log_warn("write_to_writer", format!("Response: {response:?}")); - // Write the response' length to the buffer match encode_result { Ok(_) => { @@ -535,8 +525,6 @@ async fn read_values_loop( return reason; } ReceivedValues(received_requests) => { - print!("Received {} requests: {:?}", received_requests.len(), received_requests); - log_error("parse input", format!("Received {} requests: {:?}", received_requests.len(), received_requests)); handle_requests(received_requests, client, &writer).await; } } diff --git a/benchmarks/utilities/csv_exporter.py b/benchmarks/utilities/csv_exporter.py old mode 100644 new mode 100755 index 3d48adfe17..af8d1b9259 --- a/benchmarks/utilities/csv_exporter.py +++ b/benchmarks/utilities/csv_exporter.py @@ -1,3 +1,5 @@ +#!/bin/python3 + import csv import json import os @@ -12,7 +14,7 @@ "is_cluster", "num_of_tasks", "data_size", - "clientCount", + "client_count", "tps", "get_non_existing_p50_latency", "get_non_existing_p90_latency", @@ -51,5 +53,5 @@ values = [json_object[field] for field in base_fields] writer.writerow(values) -for json_file_full_path in sys.argv[1:-1]: - os.remove(json_file_full_path) +# for json_file_full_path in sys.argv[1:-1]: +# os.remove(json_file_full_path) diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle index 0ae52dad19..e719004762 100644 --- a/java/benchmarks/build.gradle +++ b/java/benchmarks/build.gradle @@ -45,7 +45,7 @@ java { application { // Define the main class for the application. mainClass = 'javababushka.benchmarks.BenchmarkingApp' - mainClass = 'javababushka.benchmarks.clients.babushka.JniNettyClient' + // mainClass = 'javababushka.benchmarks.clients.babushka.JniNettyClient' applicationDefaultJvmArgs += "-Djava.library.path=${projectDir}/../target/debug" } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 9e19abd4e3..ad5bffe1a2 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -5,6 +5,8 @@ import java.util.Arrays; import java.util.Optional; import java.util.stream.Stream; + +import javababushka.benchmarks.clients.babushka.JniNettyClient; import javababushka.benchmarks.clients.babushka.JniSyncClient; import javababushka.benchmarks.clients.jedis.JedisClient; import javababushka.benchmarks.clients.jedis.JedisPseudoAsyncClient; @@ -64,6 +66,10 @@ public static void main(String[] args) { case BABUSHKA_JNI: testClientSetGet(JniSyncClient::new, runConfiguration, false); break; + case JNI_NETTY: + testClientSetGet(() -> new JniNettyClient(false), runConfiguration, false); + testClientSetGet(() -> new JniNettyClient(true), runConfiguration, true); + break; case BABUSHKA_ASYNC: System.out.println("Babushka async not yet configured"); break; @@ -195,6 +201,7 @@ private static int[] parseIntListOption(String line) throws ParseException { } public enum ClientName { + JNI_NETTY("JNI netty"), JEDIS("Jedis"), JEDIS_ASYNC("Jedis async"), LETTUCE("Lettuce"), @@ -236,13 +243,14 @@ public static class RunConfiguration { public RunConfiguration() { configuration = "Release"; - resultsFile = Optional.empty(); + resultsFile = Optional.of("res_java.json");//Optional.empty(); dataSize = new int[] {100, 4000}; concurrentTasks = new int[] {100, 1000}; clients = new ClientName[] { // ClientName.BABUSHKA_ASYNC, - ClientName.JEDIS, ClientName.JEDIS_ASYNC, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC + //ClientName.JEDIS, ClientName.JEDIS_ASYNC, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC + ClientName.JNI_NETTY }; host = "localhost"; port = 6379; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java index 8e1d6eadf0..600d674580 100755 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java @@ -104,6 +104,19 @@ private static boolean isMacOs() { InternalLoggerFactory.setDefaultFactory(Slf4JLoggerFactory.INSTANCE); } + public JniNettyClient(boolean async) { + name += async ? " async" : " sync"; + } + + public JniNettyClient() {} + + private String name = "JNI Netty"; + + @Override + public String getName() { + return name; + } + @Override public void connectToRedis() { connectToRedis(new ConnectionSettings("localhost", 6379, false)); @@ -150,7 +163,7 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception buf.readBytes(bytes); // TODO surround parsing with try-catch var response = Response.parseFrom(bytes); - System.out.printf("== Received response with callback %d%n", response.getCallbackIdx()); + //System.out.printf("== Received response with callback %d%n", response.getCallbackIdx()); responses.get(response.getCallbackIdx()).complete(response); super.channelRead(ctx, bytes); } @@ -165,26 +178,26 @@ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws E .addLast(new ChannelOutboundHandlerAdapter() { @Override public void bind(ChannelHandlerContext ctx, SocketAddress localAddress, ChannelPromise promise) throws Exception { - System.out.printf("=== bind %s %s %s %n", ctx, localAddress, promise); + //System.out.printf("=== bind %s %s %s %n", ctx, localAddress, promise); super.bind(ctx, localAddress, promise); } @Override public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) throws Exception { - System.out.printf("=== connect %s %s %s %s %n", ctx, remoteAddress, localAddress, promise); + //System.out.printf("=== connect %s %s %s %s %n", ctx, remoteAddress, localAddress, promise); super.connect(ctx, remoteAddress, localAddress, promise); } @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { - System.out.printf("=== write %s %s %s %n", ctx, msg, promise); + //System.out.printf("=== write %s %s %s %n", ctx, msg, promise); super.write(ctx, Unpooled.copiedBuffer((byte[])msg), promise); } @Override public void flush(ChannelHandlerContext ctx) throws Exception { - System.out.printf("=== flush %s %n", ctx); + //System.out.printf("=== flush %s %n", ctx); super.flush(ctx); } }); @@ -218,11 +231,6 @@ public void closeConnection() { } } - @Override - public String getName() { - return "JNI Netty"; - } - @Override public void set(String key, String value) { waitForResult(asyncSet(key, value)); @@ -296,6 +304,29 @@ public static void main(String[] args) { long afterGetE = System.nanoTime(); System.out.printf("++++ get E: %d%n", afterGetE - beforeGetE); + /////// + + long beforeSetA = System.nanoTime(); + for (int i = 0; i < 1000; i++) { + client.asyncSet("name", "value"); + } + long afterSetA = System.nanoTime(); + System.out.printf("++++ set: %d%n", afterSetA - beforeSetA); + + long beforeGetNEA = System.nanoTime(); + for (int i = 0; i < 1000; i++) { + client.asyncGet("namevalue"); + } + long afterGetNEA = System.nanoTime(); + System.out.printf("++++ get NE: %d%n", afterGetNEA - beforeGetNEA); + + long beforeGetEA = System.nanoTime(); + for (int i = 0; i < 1000; i++) { + client.asyncGet(key); + } + long afterGetEA = System.nanoTime(); + System.out.printf("++++ get E: %d%n", afterGetEA - beforeGetEA); + client.closeConnection(); } @@ -346,7 +377,7 @@ public Future asyncConnectToRedis(ConnectionSettings connectionSetting @Override public Future asyncSet(String key, String value) { int callbackId = getNextCallbackId(); - System.out.printf("== set(%s, %s), callback %d%n", key, value, callbackId); + //System.out.printf("== set(%s, %s), callback %d%n", key, value, callbackId); RedisRequest request = RedisRequest.newBuilder() .setCallbackIdx(callbackId) @@ -367,7 +398,7 @@ public Future asyncSet(String key, String value) { @Override public Future asyncGet(String key) { int callbackId = getNextCallbackId(); - System.out.printf("== get(%s), callback %d%n", key, callbackId); + //System.out.printf("== get(%s), callback %d%n", key, callbackId); RedisRequest request = RedisRequest.newBuilder() .setCallbackIdx(callbackId) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 1ab295c258..c385dc333b 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -148,7 +148,7 @@ public static void printResults( public static void testClientSetGet( Supplier clientCreator, BenchmarkingApp.RunConfiguration config, boolean async) { for (int concurrentNum : config.concurrentTasks) { - int iterations = + int iterations = 1000; Math.min(Math.max(LATENCY_MIN, concurrentNum * LATENCY_MULTIPLIER), LATENCY_MAX); for (int clientCount : config.clientCount) { for (int dataSize : config.dataSize) { @@ -249,6 +249,8 @@ public static void testClientSetGet( }); long after = System.nanoTime(); + clients.forEach(Client::closeConnection); + var calculatedResults = calculateResults(actionResults); if (config.resultsFile.isPresent()) { JsonWriter.Write( diff --git a/java/src/lib.rs b/java/src/lib.rs index cf0d728508..020ace59eb 100644 --- a/java/src/lib.rs +++ b/java/src/lib.rs @@ -9,7 +9,6 @@ use logger_core::Level; use redis::Value; fn redis_value_to_java<'local>(mut env: JNIEnv<'local>, val: Value) -> JObject<'local> { - println!("==r value {:?}", val); match val { Value::Nil => JObject::null(), Value::Status(str) => JObject::from(env.new_string(str).unwrap()), @@ -44,9 +43,7 @@ pub extern "system" fn Java_javababushka_client_RedisClient_valueFromPointer<'lo _class: JClass<'local>, pointer: jlong ) -> JObject<'local> { - println!("==r pointer {:?}", pointer); let value = unsafe { Box::from_raw(pointer as *mut Value) }; - println!("==r value {:?}", value); redis_value_to_java(env, *value) } @@ -87,7 +84,7 @@ pub extern "system" fn Java_javababushka_client_RedisClient_startSocketListenerE ) -> JObject<'local> { let (tx, rx) = mpsc::channel::>(); - logger_core::init(Some(Level::Trace), None); + //logger_core::init(Some(Level::Trace), None); start_socket_listener(move |socket_path : Result| { // Signals that thread has started From 5f10964407bda17bd02bfd46c1e53e9167c11048 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 1 Nov 2023 18:47:13 -0700 Subject: [PATCH 54/81] Iteration 5: some fixes. Signed-off-by: Yury-Fridlyand --- .../benchmarks/BenchmarkingApp.java | 4 +- .../clients/babushka/JniNettyClient.java | 115 +++++++++++++----- .../benchmarks/utils/Benchmarking.java | 5 +- 3 files changed, 92 insertions(+), 32 deletions(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index ad5bffe1a2..ff4573693b 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -245,12 +245,12 @@ public RunConfiguration() { configuration = "Release"; resultsFile = Optional.of("res_java.json");//Optional.empty(); dataSize = new int[] {100, 4000}; - concurrentTasks = new int[] {100, 1000}; + concurrentTasks = new int[] {100}; clients = new ClientName[] { // ClientName.BABUSHKA_ASYNC, //ClientName.JEDIS, ClientName.JEDIS_ASYNC, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC - ClientName.JNI_NETTY + ClientName.JNI_NETTY, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC }; host = "localhost"; port = 6379; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java index 600d674580..5c9e9023fc 100755 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java @@ -18,12 +18,14 @@ import com.google.protobuf.InvalidProtocolBufferException; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandler; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; import io.netty.channel.ChannelOutboundHandler; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; @@ -31,6 +33,7 @@ import io.netty.channel.EventLoopGroup; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.SimpleUserEventChannelHandler; +import io.netty.channel.WriteBufferWaterMark; import io.netty.channel.epoll.EpollDomainSocketChannel; import io.netty.channel.epoll.EpollEventLoopGroup; import io.netty.channel.kqueue.KQueue; @@ -69,13 +72,23 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; public class JniNettyClient implements SyncClient, AsyncClient, AutoCloseable { + // https://netty.io/3.6/api/org/jboss/netty/handler/queue/BufferedWriteHandler.html + private final static int AUTO_FLUSH_THRESHOLD = 512;//1024; + private final AtomicInteger nonFlushedCounter = new AtomicInteger(0); + + private final static int AUTO_FLUSH_TIMEOUT_MILLIS = 100; + + private final static int PENDING_RESPONSES_ON_CLOSE_TIMEOUT_MILLIS = 1000; + // Futures to handle responses. Index is callback id, starting from 1 (0 index is for connection request always). + // TODO clean up completed futures private final List> responses = Collections.synchronizedList(new ArrayList<>()); - private final static String unixSocket = getSocket(); + private final String unixSocket = getSocket(); // TODO static or move to constructor? private static String getSocket() { @@ -83,13 +96,15 @@ private static String getSocket() { return RedisClient.startSocketListenerExternal(); } catch (Exception | UnsatisfiedLinkError e) { System.err.printf("Failed to get UDS from babushka and dedushka: %s%n%n", e); - return null; + throw new RuntimeException(e); } } private Channel channel = null; private EventLoopGroup group = null; + // We support MacOS and Linux only, because Babushka does not support Windows, because tokio does not support it. + // Probably we should use NIO (NioEventLoopGroup) for Windows. private final static boolean isMacOs = isMacOs(); private static boolean isMacOs() { try { @@ -101,6 +116,7 @@ private static boolean isMacOs() { } static { + // TODO fix: netty still doesn't use slf4j nor log4j InternalLoggerFactory.setDefaultFactory(Slf4JLoggerFactory.INSTANCE); } @@ -128,7 +144,7 @@ public void connectToRedis(ConnectionSettings connectionSettings) { Response connected = null; try { connected = waitForResult(asyncConnectToRedis(connectionSettings)); - System.out.printf("Connection %s%n", connected != null ? connected.getConstantResponse() : null); + //System.out.printf("Connection %s%n", connected != null ? connected.getConstantResponse() : null); } catch (Exception e) { System.err.println("Connection time out"); } @@ -139,9 +155,11 @@ public void connectToRedis(ConnectionSettings connectionSettings) { private void createChannel() { // TODO maybe move to constructor or to static? // ====== - //EventLoopGroup group = new NioEventLoopGroup(); try { channel = new Bootstrap() + .option(ChannelOption.WRITE_BUFFER_WATER_MARK, + new WriteBufferWaterMark(1024 * 1024 * 2 + 10, 1024 * 1024 * 10)) + .option(ChannelOption.ALLOCATOR, ByteBufAllocator.DEFAULT) .group(group = isMacOs ? new KQueueEventLoopGroup() : new EpollEventLoopGroup()) .channel(isMacOs ? KQueueDomainSocketChannel.class : EpollDomainSocketChannel.class) .handler(new ChannelInitializer() { @@ -191,8 +209,21 @@ public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, Sock @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { //System.out.printf("=== write %s %s %s %n", ctx, msg, promise); - - super.write(ctx, Unpooled.copiedBuffer((byte[])msg), promise); + var bytes = (byte[])msg; + + boolean needFlush = false; + synchronized (nonFlushedCounter) { + if (nonFlushedCounter.addAndGet(bytes.length) >= AUTO_FLUSH_THRESHOLD) { + nonFlushedCounter.set(0); + needFlush = true; + } + } + if (needFlush) { + // flush outside the sync block + flush(ctx); + //System.out.println("-- auto flush - buffer"); + } + super.write(ctx, Unpooled.copiedBuffer(bytes), promise); } @Override @@ -224,6 +255,24 @@ protected void eventReceived(ChannelHandlerContext ctx, String evt) throws Excep @Override public void closeConnection() { try { + channel.flush(); + + long waitStarted = System.nanoTime(); + long waitUntil = waitStarted + PENDING_RESPONSES_ON_CLOSE_TIMEOUT_MILLIS * 100_000; // in nanos + for (var future : responses) { + if (future.isDone()) { + continue; + } + try { + future.get(waitUntil - System.nanoTime(), TimeUnit.NANOSECONDS); + } catch (InterruptedException | ExecutionException ignored) { + } catch (TimeoutException e) { + future.cancel(true); + // TODO cancel the rest + break; + } + } + // channel.closeFuture().sync(); // } catch (InterruptedException ignored) { } finally { @@ -374,46 +423,54 @@ public Future asyncConnectToRedis(ConnectionSettings connectionSetting return future; } - @Override - public Future asyncSet(String key, String value) { + private CompletableFuture submitNewCommand(RequestType command, List args) { int callbackId = getNextCallbackId(); - //System.out.printf("== set(%s, %s), callback %d%n", key, value, callbackId); + //System.out.printf("== %s(%s), callback %d%n", command, String.join(", ", args), callbackId); RedisRequest request = RedisRequest.newBuilder() .setCallbackIdx(callbackId) .setSingleCommand( Command.newBuilder() - .setRequestType(RequestType.SetString) - .setArgsArray(ArgsArray.newBuilder().addArgs(key).addArgs(value).build()) + .setRequestType(command) + .setArgsArray(ArgsArray.newBuilder().addAllArgs(args).build()) .build()) .setRoute( Routes.newBuilder() .setSimpleRoutes(SimpleRoutes.AllNodes) .build()) .build(); - channel.writeAndFlush(request.toByteArray()); - return responses.get(callbackId); + channel.write(request.toByteArray()); + return autoFlushFutureWrapper(responses.get(callbackId)); + } + + private CompletableFuture autoFlushFutureWrapper(Future future) { + return CompletableFuture.supplyAsync(() -> { + try { + return future.get(AUTO_FLUSH_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } catch (TimeoutException e) { + //System.out.println("-- auto flush - timeout"); + channel.flush(); + } + try { + return future.get(); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + }); + } + + @Override + public Future asyncSet(String key, String value) { + //System.out.printf("== set(%s, %s), callback %d%n", key, value, callbackId); + return submitNewCommand(RequestType.SetString, List.of(key, value)); } @Override public Future asyncGet(String key) { - int callbackId = getNextCallbackId(); //System.out.printf("== get(%s), callback %d%n", key, callbackId); - RedisRequest request = - RedisRequest.newBuilder() - .setCallbackIdx(callbackId) - .setSingleCommand( - Command.newBuilder() - .setRequestType(RequestType.GetString) - .setArgsArray(ArgsArray.newBuilder().addArgs(key).build()) - .build()) - .setRoute( - Routes.newBuilder() - .setSimpleRoutes(SimpleRoutes.AllNodes) - .build()) - .build(); - channel.writeAndFlush(request.toByteArray()); - return responses.get(callbackId) + return submitNewCommand(RequestType.GetString, List.of(key)) .thenApply(response -> response.hasRespPointer() ? RedisClient.valueFromPointer(response.getRespPointer()).toString() : null); diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index c385dc333b..95d3a8ffac 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -148,7 +148,7 @@ public static void printResults( public static void testClientSetGet( Supplier clientCreator, BenchmarkingApp.RunConfiguration config, boolean async) { for (int concurrentNum : config.concurrentTasks) { - int iterations = 1000; + int iterations = 100000; Math.min(Math.max(LATENCY_MIN, concurrentNum * LATENCY_MULTIPLIER), LATENCY_MAX); for (int clientCount : config.clientCount) { for (int dataSize : config.dataSize) { @@ -263,6 +263,9 @@ public static void testClientSetGet( iterations / ((after - before) / TPS_NORMALIZATION)); } printResults(calculatedResults, (after - before) / TPS_NORMALIZATION, iterations); + try { + Thread.sleep(2000); + } catch (InterruptedException ignored) {} } } } From e3f7596a0ddc80834c93d6556467b20c26aab088 Mon Sep 17 00:00:00 2001 From: Jonathan Louie Date: Thu, 2 Nov 2023 11:37:27 -0700 Subject: [PATCH 55/81] Change number of threads in Benchmarking threadpool --- .../main/java/javababushka/benchmarks/utils/Benchmarking.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 95d3a8ffac..8b4245ab62 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -220,7 +220,7 @@ public static void testClientSetGet( concurrentNum, clientCount, tasks.size()); } long before = System.nanoTime(); - ExecutorService threadPool = Executors.newFixedThreadPool(concurrentNum); + ExecutorService threadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); // create threads and add them to the async pool. // This will start execution of all the concurrent tasks. From 49c91190d63693651a5bb06ef7a39685581039ea Mon Sep 17 00:00:00 2001 From: Jonathan Louie Date: Thu, 2 Nov 2023 11:51:32 -0700 Subject: [PATCH 56/81] Revert "Change number of threads in Benchmarking threadpool" This reverts commit e3f7596a0ddc80834c93d6556467b20c26aab088. --- .../main/java/javababushka/benchmarks/utils/Benchmarking.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 8b4245ab62..95d3a8ffac 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -220,7 +220,7 @@ public static void testClientSetGet( concurrentNum, clientCount, tasks.size()); } long before = System.nanoTime(); - ExecutorService threadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); + ExecutorService threadPool = Executors.newFixedThreadPool(concurrentNum); // create threads and add them to the async pool. // This will start execution of all the concurrent tasks. From dd7413b1e136bdd44920e51ec910afc6820299d8 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Thu, 2 Nov 2023 22:40:52 -0700 Subject: [PATCH 57/81] Add more flushing rules and UT. Signed-off-by: Yury-Fridlyand --- java/benchmarks/build.gradle | 18 +- .../benchmarks/BenchmarkingApp.java | 6 +- .../clients/babushka/JniNettyClient.java | 75 +++++--- .../benchmarks/JniNettyTests.java | 180 ++++++++++++++++++ java/src/lib.rs | 4 +- 5 files changed, 243 insertions(+), 40 deletions(-) mode change 100755 => 100644 java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java create mode 100644 java/benchmarks/src/test/java/javababushka/benchmarks/JniNettyTests.java diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle index e719004762..90c633d9f1 100644 --- a/java/benchmarks/build.gradle +++ b/java/benchmarks/build.gradle @@ -1,6 +1,7 @@ plugins { // Apply the application plugin to add support for building a CLI application in Java. id 'application' + id 'io.freefair.lombok' } repositories { @@ -25,14 +26,18 @@ dependencies { implementation group: 'io.netty', name: 'netty-handler', version: '4.1.100.Final' // https://github.com/netty/netty/wiki/Native-transports + // Windows is not supported, because babushka does not support windows, because tokio does not support windows, because ... 42 implementation group: 'io.netty', name: 'netty-transport-native-epoll', version: '4.1.100.Final', classifier: 'linux-x86_64' implementation group: 'io.netty', name: 'netty-transport-native-kqueue', version: '4.1.100.Final', classifier: 'osx-x86_64' + implementation group: 'io.netty', name: 'netty-transport-native-kqueue', version: '4.1.100.Final', classifier: 'osx-aarch_64' //testImplementation group: 'org.slf4j', name: 'slf4j-reload4j', version: '2.0.9' //testImplementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.9' compileOnly 'org.projectlombok:lombok:1.18.30' annotationProcessor 'org.projectlombok:lombok:1.18.30' + testCompileOnly 'org.projectlombok:lombok:1.18.30' + testAnnotationProcessor 'org.projectlombok:lombok:1.18.30' } // Apply a specific Java toolchain to ease working on different environments. @@ -45,14 +50,15 @@ java { application { // Define the main class for the application. mainClass = 'javababushka.benchmarks.BenchmarkingApp' - // mainClass = 'javababushka.benchmarks.clients.babushka.JniNettyClient' + mainClass = 'javababushka.benchmarks.clients.babushka.JniNettyClient' applicationDefaultJvmArgs += "-Djava.library.path=${projectDir}/../target/debug" } tasks.withType(Test) { - testLogging { - exceptionFormat "full" - events "started", "skipped", "passed", "failed" - showStandardStreams true - } + testLogging { + exceptionFormat "full" + events "started", "skipped", "passed", "failed" + showStandardStreams true + } + jvmArgs "-Djava.library.path=${projectDir}/../target/debug" } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index ff4573693b..b3d269cf35 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -244,17 +244,17 @@ public static class RunConfiguration { public RunConfiguration() { configuration = "Release"; resultsFile = Optional.of("res_java.json");//Optional.empty(); - dataSize = new int[] {100, 4000}; + dataSize = new int[] {100}; concurrentTasks = new int[] {100}; clients = new ClientName[] { // ClientName.BABUSHKA_ASYNC, //ClientName.JEDIS, ClientName.JEDIS_ASYNC, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC - ClientName.JNI_NETTY, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC + ClientName.JNI_NETTY//, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC }; host = "localhost"; port = 6379; - clientCount = new int[] {1, 2}; + clientCount = new int[] {2}; tls = false; } } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java old mode 100755 new mode 100644 index 5c9e9023fc..eef968e343 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java @@ -7,7 +7,6 @@ import static connection_request.ConnectionRequestOuterClass.AuthenticationInfo; import static connection_request.ConnectionRequestOuterClass.TlsMode; import static response.ResponseOuterClass.Response; -import static response.ResponseOuterClass.ConstantResponse; import static redis_request.RedisRequestOuterClass.Command.ArgsArray; import static redis_request.RedisRequestOuterClass.Command; import static redis_request.RedisRequestOuterClass.RequestType; @@ -15,24 +14,19 @@ import static redis_request.RedisRequestOuterClass.SimpleRoutes; import static redis_request.RedisRequestOuterClass.Routes; -import com.google.protobuf.InvalidProtocolBufferException; +import com.google.common.annotations.VisibleForTesting; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandler; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; -import io.netty.channel.ChannelOutboundHandler; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; -import io.netty.channel.CombinedChannelDuplexHandler; import io.netty.channel.EventLoopGroup; -import io.netty.channel.SimpleChannelInboundHandler; -import io.netty.channel.SimpleUserEventChannelHandler; import io.netty.channel.WriteBufferWaterMark; import io.netty.channel.epoll.EpollDomainSocketChannel; import io.netty.channel.epoll.EpollEventLoopGroup; @@ -40,33 +34,24 @@ import io.netty.channel.kqueue.KQueueDomainSocketChannel; import io.netty.channel.kqueue.KQueueEventLoopGroup; import io.netty.channel.unix.UnixChannel; -import io.netty.handler.codec.LengthFieldBasedFrameDecoder; -import io.netty.handler.codec.LengthFieldPrepender; -import io.netty.handler.codec.protobuf.ProtobufDecoder; -import io.netty.handler.codec.protobuf.ProtobufEncoder; import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; -import io.netty.util.internal.logging.InternalLogLevel; import io.netty.util.internal.logging.InternalLoggerFactory; import io.netty.util.internal.logging.Slf4JLoggerFactory; import javababushka.benchmarks.clients.AsyncClient; import javababushka.benchmarks.clients.SyncClient; import javababushka.benchmarks.utils.ConnectionSettings; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.SocketChannel; -import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.channel.unix.DomainSocketAddress; import javababushka.client.RedisClient; -import response.ResponseOuterClass; import java.net.SocketAddress; -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Timer; +import java.util.TimerTask; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -74,15 +59,26 @@ import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; +@VisibleForTesting public class JniNettyClient implements SyncClient, AsyncClient, AutoCloseable { + public static boolean ALWAYS_FLUSH_ON_WRITE = false; + // https://netty.io/3.6/api/org/jboss/netty/handler/queue/BufferedWriteHandler.html - private final static int AUTO_FLUSH_THRESHOLD = 512;//1024; - private final AtomicInteger nonFlushedCounter = new AtomicInteger(0); + // Flush every N bytes if !ALWAYS_FLUSH_ON_WRITE + public static int AUTO_FLUSH_THRESHOLD_BYTES = 512;//1024; + private final AtomicInteger nonFlushedBytesCounter = new AtomicInteger(0); + + // Flush every N writes if !ALWAYS_FLUSH_ON_WRITE + public static int AUTO_FLUSH_THRESHOLD_WRITES = 10; + private final AtomicInteger nonFlushedWritesCounter = new AtomicInteger(0); - private final static int AUTO_FLUSH_TIMEOUT_MILLIS = 100; + // If !ALWAYS_FLUSH_ON_WRITE and a command has no response in N millis, flush (probably it wasn't send) + public static int AUTO_FLUSH_RESPONSE_TIMEOUT_MILLIS = 100; + // If !ALWAYS_FLUSH_ON_WRITE flush on timer (like a cron) + public static int AUTO_FLUSH_TIMER_MILLIS = 200; - private final static int PENDING_RESPONSES_ON_CLOSE_TIMEOUT_MILLIS = 1000; + public static int PENDING_RESPONSES_ON_CLOSE_TIMEOUT_MILLIS = 1000; // Futures to handle responses. Index is callback id, starting from 1 (0 index is for connection request always). // TODO clean up completed futures @@ -158,7 +154,7 @@ private void createChannel() { try { channel = new Bootstrap() .option(ChannelOption.WRITE_BUFFER_WATER_MARK, - new WriteBufferWaterMark(1024 * 1024 * 2 + 10, 1024 * 1024 * 10)) + new WriteBufferWaterMark(1024, 4096)) .option(ChannelOption.ALLOCATOR, ByteBufAllocator.DEFAULT) .group(group = isMacOs ? new KQueueEventLoopGroup() : new EpollEventLoopGroup()) .channel(isMacOs ? KQueueDomainSocketChannel.class : EpollDomainSocketChannel.class) @@ -212,18 +208,22 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) var bytes = (byte[])msg; boolean needFlush = false; - synchronized (nonFlushedCounter) { - if (nonFlushedCounter.addAndGet(bytes.length) >= AUTO_FLUSH_THRESHOLD) { - nonFlushedCounter.set(0); - needFlush = true; + if (!ALWAYS_FLUSH_ON_WRITE) { + synchronized (nonFlushedBytesCounter) { + if (nonFlushedBytesCounter.addAndGet(bytes.length) >= AUTO_FLUSH_THRESHOLD_BYTES + || nonFlushedWritesCounter.incrementAndGet() >= AUTO_FLUSH_THRESHOLD_WRITES) { + nonFlushedBytesCounter.set(0); + nonFlushedWritesCounter.set(0); + needFlush = true; + } } } + super.write(ctx, Unpooled.copiedBuffer(bytes), promise); if (needFlush) { // flush outside the sync block flush(ctx); //System.out.println("-- auto flush - buffer"); } - super.write(ctx, Unpooled.copiedBuffer(bytes), promise); } @Override @@ -250,6 +250,17 @@ protected void eventReceived(ChannelHandlerContext ctx, String evt) throws Excep System.err.printf("Failed to create a channel %s: %s%n", e.getClass().getSimpleName(), e.getMessage()); e.printStackTrace(System.err); } + + if (!ALWAYS_FLUSH_ON_WRITE) { + new Timer(true).scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + channel.flush(); + nonFlushedBytesCounter.set(0); + nonFlushedWritesCounter.set(0); + } + }, 0, AUTO_FLUSH_TIMER_MILLIS); + } } @Override @@ -439,6 +450,10 @@ private CompletableFuture submitNewCommand(RequestType command, List submitNewCommand(RequestType command, List CompletableFuture autoFlushFutureWrapper(Future future) { return CompletableFuture.supplyAsync(() -> { try { - return future.get(AUTO_FLUSH_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); + return future.get(AUTO_FLUSH_RESPONSE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); } catch (InterruptedException | ExecutionException e) { throw new RuntimeException(e); } catch (TimeoutException e) { //System.out.println("-- auto flush - timeout"); channel.flush(); + nonFlushedBytesCounter.set(0); + nonFlushedWritesCounter.set(0); } try { return future.get(); diff --git a/java/benchmarks/src/test/java/javababushka/benchmarks/JniNettyTests.java b/java/benchmarks/src/test/java/javababushka/benchmarks/JniNettyTests.java new file mode 100644 index 0000000000..692790b8ec --- /dev/null +++ b/java/benchmarks/src/test/java/javababushka/benchmarks/JniNettyTests.java @@ -0,0 +1,180 @@ +package javababushka.benchmarks; + +import com.google.common.io.Files; +import javababushka.benchmarks.clients.babushka.JniNettyClient; +import javababushka.benchmarks.utils.ChosenAction; +import lombok.SneakyThrows; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +public class JniNettyTests { + + public static Stream generateTestDataWithFlushOnWrite() { + var dataSizes = List.of(20, 100, 400); + var clients = List.of(2, 4); + var threads = List.of(20, 100); + return dataSizes.stream().flatMap(f -> + clients.stream().flatMap(g -> + threads.stream().map(h -> + Arguments.of(true, 0, 0, 0, 0, f, g, h)))); + } + + public static Stream generateTestDataWithoutFlushOnWrite() { + var bytesThresholds = List.of(200, 400, 800, 1600); + var writesThresholds = List.of(5, 10, 20, 50); + var responseTimeouts = List.of(50, 100, 200); + var flushTimers = List.of(100, 200, 500); + var dataSizes = List.of(20, 100, 400); + var clients = List.of(2, 4); + var threads = List.of(20, 100); + return bytesThresholds.stream().flatMap(b -> + writesThresholds.stream().flatMap(c -> + responseTimeouts.stream().flatMap(d -> + flushTimers.stream().flatMap(e -> + dataSizes.stream().flatMap(f -> + clients.stream().flatMap(g -> + threads.stream().map(h -> + Arguments.of(false, b, c, d, e, f, g, h)))))))); + } + + private static FileWriter log; + private static final String key = String.valueOf(ProcessHandle.current().pid()); + private static final int iterations = 1000000; + + @BeforeAll + @SneakyThrows + public static void openLog() { + log = new FileWriter(Paths.get(System.getProperty("user.dir"), + "JniNettyClient-test-report.txt").toFile(), true); + log.append(String.format("\n\n=========================\niterations = %d, key = %s\n", iterations, key)); + } + + @AfterAll + @SneakyThrows + public static void closeLog() { + log.append("\n\n\n============== RECORDS ==============\n"); + for (var record : records.entrySet()) { + log.append(String.format("%20s\t%20d\t%s\n", + record.getKey(), record.getValue().getKey(), record.getValue().getValue())); + } + log.append("\n\n\n"); + log.close(); + } + + private static final Map> records = new HashMap<>(Map.of( + ChosenAction.SET, Pair.of(Long.MAX_VALUE, null), + ChosenAction.GET_EXISTING, Pair.of(Long.MAX_VALUE, null), + ChosenAction.GET_NON_EXISTING, Pair.of(Long.MAX_VALUE, null) + )); + + @ParameterizedTest(name = "flushOnWrite = {0}, bytesThreshold = {1}, writesThreshold = {2}," + + " responseTimeout = {3}, flushTimer = {4}," + + " dataSize = {5}, clients = {6}, threads = {7}") + @MethodSource({ "generateTestDataWithFlushOnWrite", "generateTestDataWithoutFlushOnWrite" }) + @SneakyThrows + public void experiment(boolean flushOnWrite, + int bytesThreshold, + int writesThreshold, + int responseTimeout, + int flushTimer, + int dataSize, + int clients, + int threads) { + var line = String.format("flushOnWrite = %s, bytesThreshold = %d, writesThreshold = %d," + + " responseTimeout = %d, flushTimer = %d," + + " dataSize = %d, clients = %d, threads = %d\n", flushOnWrite, bytesThreshold, writesThreshold, + responseTimeout, flushTimer, dataSize, clients, threads); + log.append(line); + + JniNettyClient.ALWAYS_FLUSH_ON_WRITE = flushOnWrite; + JniNettyClient.AUTO_FLUSH_THRESHOLD_BYTES = bytesThreshold; + JniNettyClient.AUTO_FLUSH_THRESHOLD_WRITES = writesThreshold; + JniNettyClient.AUTO_FLUSH_RESPONSE_TIMEOUT_MILLIS = responseTimeout; + JniNettyClient.AUTO_FLUSH_TIMER_MILLIS = flushTimer; + + var clientsArr = new JniNettyClient[clients]; + String value = RandomStringUtils.randomAlphanumeric(dataSize); + + for (int i = 1; i < clients; i++) { + clientsArr[i - 1] = new JniNettyClient(); + clientsArr[i - 1].connectToRedis(); + } + + List tasks = new ArrayList<>(); + for (int i = 0; i < threads; i++) { + tasks.add(() -> { + int clientIndex = threads % clients; + for (int j = 0; j < iterations; j++) { + clientsArr[clientIndex].get(key); + } + }); + } + long before = System.nanoTime(); + tasks.forEach(Runnable::run); + long after = System.nanoTime(); + long elapsed = after - before; + log.append(String.format(" GET NE %20d\n", elapsed)); + if (elapsed < records.get(ChosenAction.GET_NON_EXISTING).getKey()) { + records.put(ChosenAction.GET_NON_EXISTING, Pair.of(elapsed, line)); + } + for (int i = 1; i < clients; i++) { + clientsArr[i - 1].closeConnection(); + clientsArr[i - 1] = new JniNettyClient(); + clientsArr[i - 1].connectToRedis(); + } + tasks.clear(); + for (int i = 0; i < threads; i++) { + tasks.add(() -> { + int clientIndex = threads % clients; + for (int j = 0; j < iterations; j++) { + clientsArr[clientIndex].set(key, value); + } + }); + } + before = System.nanoTime(); + tasks.forEach(Runnable::run); + after = System.nanoTime(); + elapsed = after - before; + log.append(String.format(" SET %20d\n", elapsed)); + if (elapsed < records.get(ChosenAction.SET).getKey()) { + records.put(ChosenAction.SET, Pair.of(elapsed, line)); + } + for (int i = 1; i < clients; i++) { + clientsArr[i - 1].closeConnection(); + clientsArr[i - 1] = new JniNettyClient(); + clientsArr[i - 1].connectToRedis(); + } + tasks.clear(); + for (int i = 0; i < threads; i++) { + tasks.add(() -> { + int clientIndex = threads % clients; + for (int j = 0; j < iterations; j++) { + clientsArr[clientIndex].get(key); + } + }); + } + before = System.nanoTime(); + tasks.forEach(Runnable::run); + after = System.nanoTime(); + elapsed = after - before; + log.append(String.format(" GET E %20d\n", elapsed)); + if (elapsed < records.get(ChosenAction.GET_EXISTING).getKey()) { + records.put(ChosenAction.GET_EXISTING, Pair.of(elapsed, line)); + } + } +} diff --git a/java/src/lib.rs b/java/src/lib.rs index 020ace59eb..f752d9596a 100644 --- a/java/src/lib.rs +++ b/java/src/lib.rs @@ -8,7 +8,7 @@ use log::error; use logger_core::Level; use redis::Value; -fn redis_value_to_java<'local>(mut env: JNIEnv<'local>, val: Value) -> JObject<'local> { +fn redis_value_to_java(mut env: JNIEnv, val: Value) -> JObject { match val { Value::Nil => JObject::null(), Value::Status(str) => JObject::from(env.new_string(str).unwrap()), @@ -119,7 +119,7 @@ fn throw_java_exception(mut env: JNIEnv, message: String) { match res { Ok(res) => { - env.throw(JThrowable::from(res)); + let _ = env.throw(JThrowable::from(res)); }, Err(err) => { error!("Failed to create exception with string {}: {}", message, err.to_string()); From a70c90776892d9063a595e4cdacb64e4c66098d7 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 15 Nov 2023 17:48:09 -0800 Subject: [PATCH 58/81] Client clean up. Signed-off-by: Yury-Fridlyand --- java/benchmarks/build.gradle | 12 +- .../benchmarks/BenchmarkingApp.java | 22 +- .../benchmarks/clients/AsyncClient.java | 3 +- .../clients/babushka/ChannelHandler.java | 18 - .../clients/babushka/JniNettyClient.java | 475 +- .../clients/babushka/JniSyncClient.java | 316 - .../clients/jedis/JedisPseudoAsyncClient.java | 1 - .../clients/lettuce/LettuceAsyncClient.java | 20 +- .../benchmarks/utils/Benchmarking.java | 5 +- .../client/ConnectionRequestOuterClass.java | 4289 ---------- .../java/javababushka/client/RedisClient.java | 29 - .../client/RedisRequestOuterClass.java | 6972 ----------------- .../client/ResponseOuterClass.java | 2283 ------ .../benchmarks/JniNettyTests.java | 180 - java/client/build.gradle | 18 +- .../src/main/java/javababushka/Client.java | 388 + .../main/java/javababushka/RustWrapper.java | 11 + java/javababushka_client_RedisClient.h | 37 - java/src/lib.rs | 34 +- 19 files changed, 464 insertions(+), 14649 deletions(-) delete mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/ChannelHandler.java delete mode 100644 java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniSyncClient.java delete mode 100644 java/benchmarks/src/main/java/javababushka/client/ConnectionRequestOuterClass.java delete mode 100644 java/benchmarks/src/main/java/javababushka/client/RedisClient.java delete mode 100644 java/benchmarks/src/main/java/javababushka/client/RedisRequestOuterClass.java delete mode 100644 java/benchmarks/src/main/java/javababushka/client/ResponseOuterClass.java delete mode 100644 java/benchmarks/src/test/java/javababushka/benchmarks/JniNettyTests.java create mode 100644 java/client/src/main/java/javababushka/Client.java create mode 100644 java/client/src/main/java/javababushka/RustWrapper.java delete mode 100644 java/javababushka_client_RedisClient.h diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle index 90c633d9f1..3f1f0f0608 100644 --- a/java/benchmarks/build.gradle +++ b/java/benchmarks/build.gradle @@ -10,6 +10,8 @@ repositories { } dependencies { + implementation project(':client') + // Use JUnit test framework. testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2' @@ -24,13 +26,6 @@ dependencies { implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.24.3' implementation group: 'com.google.code.gson', name: 'gson', version: '2.10.1' - implementation group: 'io.netty', name: 'netty-handler', version: '4.1.100.Final' - // https://github.com/netty/netty/wiki/Native-transports - // Windows is not supported, because babushka does not support windows, because tokio does not support windows, because ... 42 - implementation group: 'io.netty', name: 'netty-transport-native-epoll', version: '4.1.100.Final', classifier: 'linux-x86_64' - implementation group: 'io.netty', name: 'netty-transport-native-kqueue', version: '4.1.100.Final', classifier: 'osx-x86_64' - implementation group: 'io.netty', name: 'netty-transport-native-kqueue', version: '4.1.100.Final', classifier: 'osx-aarch_64' - //testImplementation group: 'org.slf4j', name: 'slf4j-reload4j', version: '2.0.9' //testImplementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.9' @@ -50,8 +45,7 @@ java { application { // Define the main class for the application. mainClass = 'javababushka.benchmarks.BenchmarkingApp' - mainClass = 'javababushka.benchmarks.clients.babushka.JniNettyClient' - applicationDefaultJvmArgs += "-Djava.library.path=${projectDir}/../target/debug" + applicationDefaultJvmArgs += "-Djava.library.path=${projectDir}/../target/release" } tasks.withType(Test) { diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index b3d269cf35..14242b472a 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -5,9 +5,7 @@ import java.util.Arrays; import java.util.Optional; import java.util.stream.Stream; - import javababushka.benchmarks.clients.babushka.JniNettyClient; -import javababushka.benchmarks.clients.babushka.JniSyncClient; import javababushka.benchmarks.clients.jedis.JedisClient; import javababushka.benchmarks.clients.jedis.JedisPseudoAsyncClient; import javababushka.benchmarks.clients.lettuce.LettuceAsyncClient; @@ -63,15 +61,11 @@ public static void main(String[] args) { case LETTUCE_ASYNC: testClientSetGet(LettuceAsyncClient::new, runConfiguration, true); break; - case BABUSHKA_JNI: - testClientSetGet(JniSyncClient::new, runConfiguration, false); - break; - case JNI_NETTY: + case BABUSHKA: testClientSetGet(() -> new JniNettyClient(false), runConfiguration, false); - testClientSetGet(() -> new JniNettyClient(true), runConfiguration, true); break; case BABUSHKA_ASYNC: - System.out.println("Babushka async not yet configured"); + testClientSetGet(() -> new JniNettyClient(true), runConfiguration, true); break; } } @@ -147,7 +141,6 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce ClientName.JEDIS_ASYNC, // ClientName.BABUSHKA_ASYNC, ClientName.BABUSHKA, - ClientName.BABUSHKA_JNI, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC); case ALL_ASYNC: @@ -159,7 +152,6 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce return Stream.of( ClientName.JEDIS, // ClientName.BABUSHKA, - ClientName.BABUSHKA_JNI, ClientName.LETTUCE); default: return Stream.of(e); @@ -201,12 +193,10 @@ private static int[] parseIntListOption(String line) throws ParseException { } public enum ClientName { - JNI_NETTY("JNI netty"), JEDIS("Jedis"), JEDIS_ASYNC("Jedis async"), LETTUCE("Lettuce"), LETTUCE_ASYNC("Lettuce async"), - BABUSHKA_JNI("JNI sync"), BABUSHKA_ASYNC("Babushka async"), BABUSHKA("Babushka"), ALL("All"), @@ -243,14 +233,16 @@ public static class RunConfiguration { public RunConfiguration() { configuration = "Release"; - resultsFile = Optional.of("res_java.json");//Optional.empty(); + resultsFile = Optional.of("res_java.json"); // Optional.empty(); dataSize = new int[] {100}; concurrentTasks = new int[] {100}; clients = new ClientName[] { // ClientName.BABUSHKA_ASYNC, - //ClientName.JEDIS, ClientName.JEDIS_ASYNC, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC - ClientName.JNI_NETTY//, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC + // ClientName.JEDIS, ClientName.JEDIS_ASYNC, ClientName.LETTUCE, + // ClientName.LETTUCE_ASYNC + ClientName.BABUSHKA_ASYNC, + ClientName.BABUSHKA // , ClientName.LETTUCE, ClientName.LETTUCE_ASYNC }; host = "localhost"; port = 6379; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java index 0181cc052e..5255f63287 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java @@ -1,9 +1,8 @@ package javababushka.benchmarks.clients; -import javababushka.benchmarks.utils.ConnectionSettings; - import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; +import javababushka.benchmarks.utils.ConnectionSettings; /** A Redis client with async capabilities */ public interface AsyncClient extends Client { diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/ChannelHandler.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/ChannelHandler.java deleted file mode 100644 index a49229db89..0000000000 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/ChannelHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package javababushka.benchmarks.clients.babushka; - -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.channel.ChannelPromise; -import io.netty.channel.CombinedChannelDuplexHandler; - -public class ChannelHandler extends CombinedChannelDuplexHandler { - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { - super.channelRead(ctx, msg); - } - - @Override - public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { - super.write(ctx, msg, promise); - } -} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java index eef968e343..0a98478fef 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java @@ -1,495 +1,66 @@ package javababushka.benchmarks.clients.babushka; -import static connection_request.ConnectionRequestOuterClass.ConnectionRequest; -import static connection_request.ConnectionRequestOuterClass.AddressInfo; -import static connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy; -import static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy; -import static connection_request.ConnectionRequestOuterClass.AuthenticationInfo; -import static connection_request.ConnectionRequestOuterClass.TlsMode; import static response.ResponseOuterClass.Response; -import static redis_request.RedisRequestOuterClass.Command.ArgsArray; -import static redis_request.RedisRequestOuterClass.Command; -import static redis_request.RedisRequestOuterClass.RequestType; -import static redis_request.RedisRequestOuterClass.RedisRequest; -import static redis_request.RedisRequestOuterClass.SimpleRoutes; -import static redis_request.RedisRequestOuterClass.Routes; -import com.google.common.annotations.VisibleForTesting; -import io.netty.bootstrap.Bootstrap; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import io.netty.buffer.Unpooled; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.channel.ChannelInitializer; -import io.netty.channel.ChannelOption; -import io.netty.channel.ChannelOutboundHandlerAdapter; -import io.netty.channel.ChannelPromise; -import io.netty.channel.EventLoopGroup; -import io.netty.channel.WriteBufferWaterMark; -import io.netty.channel.epoll.EpollDomainSocketChannel; -import io.netty.channel.epoll.EpollEventLoopGroup; -import io.netty.channel.kqueue.KQueue; -import io.netty.channel.kqueue.KQueueDomainSocketChannel; -import io.netty.channel.kqueue.KQueueEventLoopGroup; -import io.netty.channel.unix.UnixChannel; -import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; -import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; -import io.netty.handler.logging.LogLevel; -import io.netty.handler.logging.LoggingHandler; -import io.netty.util.internal.logging.InternalLoggerFactory; -import io.netty.util.internal.logging.Slf4JLoggerFactory; +import java.util.concurrent.Future; +import javababushka.Client; import javababushka.benchmarks.clients.AsyncClient; import javababushka.benchmarks.clients.SyncClient; import javababushka.benchmarks.utils.ConnectionSettings; -import io.netty.channel.unix.DomainSocketAddress; -import javababushka.client.RedisClient; - -import java.net.SocketAddress; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.concurrent.atomic.AtomicInteger; - -@VisibleForTesting -public class JniNettyClient implements SyncClient, AsyncClient, AutoCloseable { - - public static boolean ALWAYS_FLUSH_ON_WRITE = false; - - // https://netty.io/3.6/api/org/jboss/netty/handler/queue/BufferedWriteHandler.html - // Flush every N bytes if !ALWAYS_FLUSH_ON_WRITE - public static int AUTO_FLUSH_THRESHOLD_BYTES = 512;//1024; - private final AtomicInteger nonFlushedBytesCounter = new AtomicInteger(0); - - // Flush every N writes if !ALWAYS_FLUSH_ON_WRITE - public static int AUTO_FLUSH_THRESHOLD_WRITES = 10; - private final AtomicInteger nonFlushedWritesCounter = new AtomicInteger(0); - - // If !ALWAYS_FLUSH_ON_WRITE and a command has no response in N millis, flush (probably it wasn't send) - public static int AUTO_FLUSH_RESPONSE_TIMEOUT_MILLIS = 100; - // If !ALWAYS_FLUSH_ON_WRITE flush on timer (like a cron) - public static int AUTO_FLUSH_TIMER_MILLIS = 200; - - public static int PENDING_RESPONSES_ON_CLOSE_TIMEOUT_MILLIS = 1000; - - // Futures to handle responses. Index is callback id, starting from 1 (0 index is for connection request always). - // TODO clean up completed futures - private final List> responses = Collections.synchronizedList(new ArrayList<>()); - private final String unixSocket = getSocket(); +public class JniNettyClient implements SyncClient, AsyncClient { - // TODO static or move to constructor? - private static String getSocket() { - try { - return RedisClient.startSocketListenerExternal(); - } catch (Exception | UnsatisfiedLinkError e) { - System.err.printf("Failed to get UDS from babushka and dedushka: %s%n%n", e); - throw new RuntimeException(e); - } - } - - private Channel channel = null; - private EventLoopGroup group = null; - - // We support MacOS and Linux only, because Babushka does not support Windows, because tokio does not support it. - // Probably we should use NIO (NioEventLoopGroup) for Windows. - private final static boolean isMacOs = isMacOs(); - private static boolean isMacOs() { - try { - Class.forName("io.netty.channel.kqueue.KQueue"); - return KQueue.isAvailable(); - } catch (ClassNotFoundException e) { - return false; - } - } - - static { - // TODO fix: netty still doesn't use slf4j nor log4j - InternalLoggerFactory.setDefaultFactory(Slf4JLoggerFactory.INSTANCE); - } + private final Client testClient; + private String name = "JNI Netty"; public JniNettyClient(boolean async) { name += async ? " async" : " sync"; + testClient = new Client(); } - public JniNettyClient() {} - - private String name = "JNI Netty"; - @Override public String getName() { return name; } - @Override - public void connectToRedis() { - connectToRedis(new ConnectionSettings("localhost", 6379, false)); - } - - @Override - public void connectToRedis(ConnectionSettings connectionSettings) { - - Response connected = null; - try { - connected = waitForResult(asyncConnectToRedis(connectionSettings)); - //System.out.printf("Connection %s%n", connected != null ? connected.getConstantResponse() : null); - } catch (Exception e) { - System.err.println("Connection time out"); - } - - int a = 5; - } - - private void createChannel() { - // TODO maybe move to constructor or to static? - // ====== - try { - channel = new Bootstrap() - .option(ChannelOption.WRITE_BUFFER_WATER_MARK, - new WriteBufferWaterMark(1024, 4096)) - .option(ChannelOption.ALLOCATOR, ByteBufAllocator.DEFAULT) - .group(group = isMacOs ? new KQueueEventLoopGroup() : new EpollEventLoopGroup()) - .channel(isMacOs ? KQueueDomainSocketChannel.class : EpollDomainSocketChannel.class) - .handler(new ChannelInitializer() { - @Override - public void initChannel(UnixChannel ch) throws Exception { - ch - .pipeline() - .addLast("logger", new LoggingHandler(LogLevel.DEBUG)) - //https://netty.io/4.1/api/io/netty/handler/codec/protobuf/ProtobufEncoder.html - .addLast("protobufDecoder", new ProtobufVarint32FrameDecoder()) - .addLast("protobufEncoder", new ProtobufVarint32LengthFieldPrepender()) - - .addLast(new ChannelInboundHandlerAdapter() { - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { - //System.out.printf("=== channelRead %s %s %n", ctx, msg); - var buf = (ByteBuf) msg; - var bytes = new byte[buf.readableBytes()]; - buf.readBytes(bytes); - // TODO surround parsing with try-catch - var response = Response.parseFrom(bytes); - //System.out.printf("== Received response with callback %d%n", response.getCallbackIdx()); - responses.get(response.getCallbackIdx()).complete(response); - super.channelRead(ctx, bytes); - } - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { - System.out.printf("=== exceptionCaught %s %s %n", ctx, cause); - cause.printStackTrace(); - super.exceptionCaught(ctx, cause); - } - }) - .addLast(new ChannelOutboundHandlerAdapter() { - @Override - public void bind(ChannelHandlerContext ctx, SocketAddress localAddress, ChannelPromise promise) throws Exception { - //System.out.printf("=== bind %s %s %s %n", ctx, localAddress, promise); - super.bind(ctx, localAddress, promise); - } - - @Override - public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) throws Exception { - //System.out.printf("=== connect %s %s %s %s %n", ctx, remoteAddress, localAddress, promise); - super.connect(ctx, remoteAddress, localAddress, promise); - } - - @Override - public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { - //System.out.printf("=== write %s %s %s %n", ctx, msg, promise); - var bytes = (byte[])msg; - - boolean needFlush = false; - if (!ALWAYS_FLUSH_ON_WRITE) { - synchronized (nonFlushedBytesCounter) { - if (nonFlushedBytesCounter.addAndGet(bytes.length) >= AUTO_FLUSH_THRESHOLD_BYTES - || nonFlushedWritesCounter.incrementAndGet() >= AUTO_FLUSH_THRESHOLD_WRITES) { - nonFlushedBytesCounter.set(0); - nonFlushedWritesCounter.set(0); - needFlush = true; - } - } - } - super.write(ctx, Unpooled.copiedBuffer(bytes), promise); - if (needFlush) { - // flush outside the sync block - flush(ctx); - //System.out.println("-- auto flush - buffer"); - } - } - - @Override - public void flush(ChannelHandlerContext ctx) throws Exception { - //System.out.printf("=== flush %s %n", ctx); - super.flush(ctx); - } - }); - /* - .addLast(new SimpleUserEventChannelHandler() { - @Override - protected void eventReceived(ChannelHandlerContext ctx, String evt) throws Exception { - - } - }); - */ - //.addLast(new CombinedChannelDuplexHandler(new ChannelInboundHandler(), new ChannelOutboundHandler())); - } - }) - .connect(new DomainSocketAddress(unixSocket)).sync().channel(); - - } - catch (Exception e) { - System.err.printf("Failed to create a channel %s: %s%n", e.getClass().getSimpleName(), e.getMessage()); - e.printStackTrace(System.err); - } - - if (!ALWAYS_FLUSH_ON_WRITE) { - new Timer(true).scheduleAtFixedRate(new TimerTask() { - @Override - public void run() { - channel.flush(); - nonFlushedBytesCounter.set(0); - nonFlushedWritesCounter.set(0); - } - }, 0, AUTO_FLUSH_TIMER_MILLIS); - } - } - @Override public void closeConnection() { - try { - channel.flush(); - - long waitStarted = System.nanoTime(); - long waitUntil = waitStarted + PENDING_RESPONSES_ON_CLOSE_TIMEOUT_MILLIS * 100_000; // in nanos - for (var future : responses) { - if (future.isDone()) { - continue; - } - try { - future.get(waitUntil - System.nanoTime(), TimeUnit.NANOSECONDS); - } catch (InterruptedException | ExecutionException ignored) { - } catch (TimeoutException e) { - future.cancel(true); - // TODO cancel the rest - break; - } - } - -// channel.closeFuture().sync(); -// } catch (InterruptedException ignored) { - } finally { - group.shutdownGracefully(); - } + testClient.closeConnection(); } @Override - public void set(String key, String value) { - waitForResult(asyncSet(key, value)); - // TODO parse response and rethrow an exception if there is an error - } - - @Override - public String get(String key) { - return waitForResult(asyncGet(key)); - /* - try { - var response = responses.get(callbackId).get(DEFAULT_FUTURE_TIMEOUT_SEC, TimeUnit.SECONDS); - return response.hasRespPointer() - ? RedisClient.valueFromPointer(response.getRespPointer()).toString() - : null; - } catch (Exception e) { - System.err.printf("Failed to process `get` response, callback = %d: %s %s%n", - callbackId, e.getClass().getSimpleName(), e.getMessage()); - e.printStackTrace(System.err); - return null; - } - */ - } - - // TODO use reentrant lock - // https://www.geeksforgeeks.org/reentrant-lock-java/ - private synchronized int getNextCallbackId() { - responses.add(new CompletableFuture<>()); - return responses.size() - 1; - } - - public static void main(String[] args) { - var client = new JniNettyClient(); - client.connectToRedis(); - - var get_ne = client.get("sdf"); - var key = String.valueOf(ProcessHandle.current().pid()); - client.set(key, "asfsdf"); - var get_e = client.get(key); - - var get_nea = client.asyncGet("sdf"); - var set_a = client.asyncSet(key, "asfsdf"); - var get_ea = client.asyncGet(key); - - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - } - var res1 = client.waitForResult(get_nea); - var res2 = client.waitForResult(set_a); - var res3 = client.waitForResult(get_ea); - - long beforeSet = System.nanoTime(); - for (int i = 0; i < 1000; i++) { - client.set("name", "value"); - } - long afterSet = System.nanoTime(); - System.out.printf("++++ set: %d%n", afterSet - beforeSet); - - long beforeGetNE = System.nanoTime(); - for (int i = 0; i < 1000; i++) { - client.get("namevalue"); - } - long afterGetNE = System.nanoTime(); - System.out.printf("++++ get NE: %d%n", afterGetNE - beforeGetNE); - - long beforeGetE = System.nanoTime(); - for (int i = 0; i < 1000; i++) { - client.get(key); - } - long afterGetE = System.nanoTime(); - System.out.printf("++++ get E: %d%n", afterGetE - beforeGetE); - - /////// - - long beforeSetA = System.nanoTime(); - for (int i = 0; i < 1000; i++) { - client.asyncSet("name", "value"); - } - long afterSetA = System.nanoTime(); - System.out.printf("++++ set: %d%n", afterSetA - beforeSetA); - - long beforeGetNEA = System.nanoTime(); - for (int i = 0; i < 1000; i++) { - client.asyncGet("namevalue"); - } - long afterGetNEA = System.nanoTime(); - System.out.printf("++++ get NE: %d%n", afterGetNEA - beforeGetNEA); - - long beforeGetEA = System.nanoTime(); - for (int i = 0; i < 1000; i++) { - client.asyncGet(key); - } - long afterGetEA = System.nanoTime(); - System.out.printf("++++ get E: %d%n", afterGetEA - beforeGetEA); - - client.closeConnection(); + public void connectToRedis() { + connectToRedis(new ConnectionSettings("localhost", 6379, false)); } @Override - public void close() throws Exception { - closeConnection(); + public void connectToRedis(ConnectionSettings connectionSettings) { +waitForResult(asyncConnectToRedis(connectionSettings)); } @Override public Future asyncConnectToRedis(ConnectionSettings connectionSettings) { - createChannel(); - - var request = ConnectionRequest.newBuilder() - .addAddresses( - AddressInfo.newBuilder() - .setHost(connectionSettings.host) - .setPort(connectionSettings.port) - .build()) - .setTlsMode(connectionSettings.useSsl // TODO: secure or insecure TLS? - ? TlsMode.SecureTls - : TlsMode.NoTls) - .setClusterModeEnabled(false) - // In millis - .setResponseTimeout(250) - // In millis - .setClientCreationTimeout(2500) - .setReadFromReplicaStrategy(ReadFromReplicaStrategy.AlwaysFromPrimary) - .setConnectionRetryStrategy( - ConnectionRetryStrategy.newBuilder() - .setNumberOfRetries(1) - .setFactor(1) - .setExponentBase(1) - .build()) - .setAuthenticationInfo( - AuthenticationInfo.newBuilder() - .setPassword("") - .setUsername("default") - .build()) - .setDatabaseId(0) - .build(); - - var future = new CompletableFuture(); - responses.add(future); - channel.writeAndFlush(request.toByteArray()); - return future; + return testClient.asyncConnectToRedis( + connectionSettings.host, connectionSettings.port, connectionSettings.useSsl, false); } - private CompletableFuture submitNewCommand(RequestType command, List args) { - int callbackId = getNextCallbackId(); - //System.out.printf("== %s(%s), callback %d%n", command, String.join(", ", args), callbackId); - RedisRequest request = - RedisRequest.newBuilder() - .setCallbackIdx(callbackId) - .setSingleCommand( - Command.newBuilder() - .setRequestType(command) - .setArgsArray(ArgsArray.newBuilder().addAllArgs(args).build()) - .build()) - .setRoute( - Routes.newBuilder() - .setSimpleRoutes(SimpleRoutes.AllNodes) - .build()) - .build(); - if (ALWAYS_FLUSH_ON_WRITE) { - channel.writeAndFlush(request.toByteArray()); - return responses.get(callbackId); - } - channel.write(request.toByteArray()); - return autoFlushFutureWrapper(responses.get(callbackId)); + @Override + public Future asyncSet(String key, String value) { + return testClient.asyncSet(key, value); } - private CompletableFuture autoFlushFutureWrapper(Future future) { - return CompletableFuture.supplyAsync(() -> { - try { - return future.get(AUTO_FLUSH_RESPONSE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } catch (TimeoutException e) { - //System.out.println("-- auto flush - timeout"); - channel.flush(); - nonFlushedBytesCounter.set(0); - nonFlushedWritesCounter.set(0); - } - try { - return future.get(); - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } - }); + @Override + public Future asyncGet(String key) { + return testClient.asyncGet(key); } @Override - public Future asyncSet(String key, String value) { - //System.out.printf("== set(%s, %s), callback %d%n", key, value, callbackId); - return submitNewCommand(RequestType.SetString, List.of(key, value)); + public void set(String key, String value) { + testClient.set(key, value); } @Override - public Future asyncGet(String key) { - //System.out.printf("== get(%s), callback %d%n", key, callbackId); - return submitNewCommand(RequestType.GetString, List.of(key)) - .thenApply(response -> response.hasRespPointer() - ? RedisClient.valueFromPointer(response.getRespPointer()).toString() - : null); + public String get(String key) { + return testClient.get(key); } } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniSyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniSyncClient.java deleted file mode 100644 index bf9b94b352..0000000000 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniSyncClient.java +++ /dev/null @@ -1,316 +0,0 @@ -package javababushka.benchmarks.clients.babushka; - -import java.io.IOException; -import java.net.StandardProtocolFamily; -import java.net.UnixDomainSocketAddress; -import java.nio.ByteBuffer; -import java.nio.channels.SocketChannel; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import javababushka.benchmarks.clients.SyncClient; -import javababushka.benchmarks.utils.ConnectionSettings; -import javababushka.client.RedisClient; -import org.apache.commons.lang3.tuple.MutablePair; -import org.apache.commons.lang3.tuple.Pair; -import redis_request.RedisRequestOuterClass; -import response.ResponseOuterClass; - -/** A JNI-built client using Unix Domain Sockets with async capabilities */ -public class JniSyncClient implements SyncClient { - - private static int MAX_TIMEOUT = 1000; - private static int TIMEOUT_INTERVAL = 100; - - private RedisClient client; - - private SocketChannel channel; - - @Override - public void connectToRedis() { - connectToRedis(new ConnectionSettings("localhost", 6379, false)); - } - - @Override - public void connectToRedis(ConnectionSettings connectionSettings) { - - // Create redis client - client = new RedisClient(); - - // Get socket listener address/path - RedisClient.startSocketListenerExternal(client); - - int timeout = 0; - int maxTimeout = MAX_TIMEOUT; - while (client.socketPath == null && timeout < maxTimeout) { - timeout += TIMEOUT_INTERVAL; - try { - Thread.sleep(TIMEOUT_INTERVAL); - } catch (InterruptedException exception) { - // ignored - } - } - - System.out.println("Socket Path: " + client.socketPath); - UnixDomainSocketAddress socketAddress = UnixDomainSocketAddress.of(client.socketPath); - - // Start the socket listener - try { - channel = SocketChannel.open(StandardProtocolFamily.UNIX); - channel.connect(socketAddress); - } catch (IOException ioException) { - ioException.printStackTrace(); - return; - } - - String host = connectionSettings.host; - int port = connectionSettings.port; - connection_request.ConnectionRequestOuterClass.TlsMode tls = - connectionSettings.useSsl - ? - // TODO: secure or insecure TLS? - connection_request.ConnectionRequestOuterClass.TlsMode.SecureTls - : connection_request.ConnectionRequestOuterClass.TlsMode.NoTls; - - connection_request.ConnectionRequestOuterClass.ConnectionRequest request = - connection_request.ConnectionRequestOuterClass.ConnectionRequest.newBuilder() - .addAddresses( - connection_request.ConnectionRequestOuterClass.AddressInfo.newBuilder() - .setHost(host) - .setPort(port)) - .setTlsMode(tls) - .setClusterModeEnabled(false) - // In millis - .setResponseTimeout(250) - // In millis - .setClientCreationTimeout(2500) - .setReadFromReplicaStrategy( - connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy - .AlwaysFromPrimary) - .setConnectionRetryStrategy( - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.newBuilder() - .setNumberOfRetries(1) - .setFactor(1) - .setExponentBase(1)) - .setAuthenticationInfo( - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.newBuilder() - .setPassword("") - .setUsername("default")) - .setDatabaseId(0) - .build(); - - makeRedisRequest(request.toByteArray()); - receiveRedisResponse(); - } - - @Override - public void set(String key, String value) { - - int futureIdx = 1; - RedisRequestOuterClass.Command.ArgsArray args = - RedisRequestOuterClass.Command.ArgsArray.newBuilder().addArgs(key).addArgs(value).build(); - RedisRequestOuterClass.RedisRequest request = - RedisRequestOuterClass.RedisRequest.newBuilder() - .setCallbackIdx(futureIdx) - .setSingleCommand( - RedisRequestOuterClass.Command.newBuilder() - .setRequestType(RedisRequestOuterClass.RequestType.SetString) - .setArgsArray(args)) - .setRoute( - RedisRequestOuterClass.Routes.newBuilder() - .setSimpleRoutes(RedisRequestOuterClass.SimpleRoutes.AllNodes)) - .build(); - - makeRedisRequest(request.toByteArray()); - receiveRedisResponse(); - } - - @Override - public String get(String key) { - int futureIdx = 1; - RedisRequestOuterClass.RedisRequest getStringRequest = - RedisRequestOuterClass.RedisRequest.newBuilder() - .setCallbackIdx(futureIdx) - .setSingleCommand( - RedisRequestOuterClass.Command.newBuilder() - .setRequestType(RedisRequestOuterClass.RequestType.GetString) - .setArgsArray( - RedisRequestOuterClass.Command.ArgsArray.newBuilder().addArgs(key))) - .setRoute( - RedisRequestOuterClass.Routes.newBuilder() - .setSimpleRoutes(RedisRequestOuterClass.SimpleRoutes.AllNodes)) - .build(); - - makeRedisRequest(getStringRequest.toByteArray()); - ResponseOuterClass.Response response = receiveRedisResponse(); - return response == null ? null : response.toString(); - } - - @Override - public void closeConnection() {} - - @Override - public String getName() { - return "JNI (with UDS) Sync"; - } - - // Left is length of message, right is position - private static Pair decodeVarint(byte[] buffer, int pos) throws Exception { - long mask = ((long) 1 << 32) - 1; - int shift = 0; - long result = 0; - while (true) { - byte b = buffer[pos]; - result |= (long) (b & 0x7F) << shift; - pos += 1; - if ((b & 0x80) == 0) { - result &= mask; - // result = (int) result; - return new MutablePair<>(result, pos); - } - shift += 7; - if (shift >= 64) { - throw new Exception("Too many bytes when decoding varint."); - } - } - } - - private static ResponseOuterClass.Response decodeMessage(byte[] buffer) throws Exception { - Pair pair = decodeVarint(buffer, 0); - int startIdx = pair.getRight(); - byte[] responseBytes = - Arrays.copyOfRange(buffer, startIdx, startIdx + (int) (long) pair.getLeft()); - return ResponseOuterClass.Response.parseFrom(responseBytes); - } - - private static Byte[] varintBytes(int value) { - List output = new ArrayList<>(); - int bits = value & 0x7F; - value >>= 7; - while (value > 0) { - output.add((byte) (0x80 | bits)); - bits = value & 0x7F; - value >>= 7; - } - output.add((byte) bits); - Byte[] arr = new Byte[] {}; - return output.toArray(arr); - } - - private void makeRedisRequest(byte[] request) { - Byte[] varint = varintBytes(request.length); - - // System.out.println("Request: \n" + request.toString()); - // javadocs: https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#putInt%28int%29 - // BufferOverflowException - If there are fewer than four bytes remaining in this buffer - ByteBuffer buffer = ByteBuffer.allocate(request.length + 4); - buffer.clear(); - for (Byte b : varint) { - buffer.put(b); - } - buffer.put(request); - buffer.flip(); - try { - // TODO: check that this is the most performant mutex solution - synchronized (channel) { - while (buffer.hasRemaining()) { - channel.write(buffer); - } - } - } catch (IOException ioException) { - // ignore... - } - } - - private ResponseOuterClass.Response receiveRedisResponse() { - // TODO what if buffer is too small? re-allocate? - ByteBuffer readBuffer = ByteBuffer.allocate(1024); - - int timeout = 0; - int bytesRead = 0; - try { - synchronized (channel) { - bytesRead = channel.read(readBuffer); - while (bytesRead <= 0) { - timeout += TIMEOUT_INTERVAL; - if (timeout > MAX_TIMEOUT) { - throw new RuntimeException("Max timeout reached"); - } - - bytesRead += channel.read(readBuffer); - Thread.sleep(TIMEOUT_INTERVAL); - } - } - } catch (IOException | InterruptedException exception) { - // ignore... - } - byte[] bytes = new byte[bytesRead]; - readBuffer.flip(); - readBuffer.get(bytes); - ResponseOuterClass.Response response = null; - try { - response = decodeMessage(bytes); - } catch (Exception e) { - // e.printStackTrace(); - } - return response; - } - - private static byte[] readSocketMessage(SocketChannel channel) throws IOException { - ByteBuffer buffer = ByteBuffer.allocate(1024); - int bytesRead = channel.read(buffer); - if (bytesRead <= 0) { - return null; - } - - byte[] bytes = new byte[bytesRead]; - buffer.flip(); - buffer.get(bytes); - return bytes; - } - - private ResponseOuterClass.Response makeRedisRequest( - RedisRequestOuterClass.RedisRequest request) { - Byte[] varint = varintBytes(request.toByteArray().length); - - // System.out.println("Request: \n" + request.toString()); - ByteBuffer buffer = ByteBuffer.allocate(1024); - buffer.clear(); - for (Byte b : varint) { - buffer.put(b); - } - buffer.put(request.toByteArray()); - buffer.flip(); - try { - // TODO: check that this is the most performant mutex solution - synchronized (buffer) { - while (buffer.hasRemaining()) { - channel.write(buffer); - } - } - } catch (IOException ioException) { - // ignore... - } - - int timeout = 0; - byte[] responseBuffer = null; - while (responseBuffer == null && timeout < MAX_TIMEOUT) { - timeout++; - try { - responseBuffer = readSocketMessage(channel); - Thread.sleep(250); - } catch (IOException | InterruptedException exception) { - // ignore... - } - } - - // nothing to do with the responseBuffer message - ResponseOuterClass.Response response = null; - try { - response = decodeMessage(responseBuffer); - } catch (Exception e) { - // e.printStackTrace(); - } - return response; - } -} diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java index d3776663e1..dbd8c8bbd2 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java @@ -2,7 +2,6 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; import javababushka.benchmarks.clients.AsyncClient; import javababushka.benchmarks.utils.ConnectionSettings; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java index bf5bc08117..4722c40129 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java @@ -5,10 +5,8 @@ import io.lettuce.core.RedisURI; import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.async.RedisAsyncCommands; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; - import io.lettuce.core.codec.StringCodec; +import java.util.concurrent.Future; import javababushka.benchmarks.clients.AsyncClient; import javababushka.benchmarks.utils.ConnectionSettings; @@ -40,13 +38,15 @@ public void connectToRedis(ConnectionSettings connectionSettings) { @Override public Future asyncConnectToRedis(ConnectionSettings connectionSettings) { client = RedisClient.create(); - var asyncConnection = client.connectAsync( - new StringCodec(), - RedisURI.create(String.format( - "%s://%s:%d", - connectionSettings.useSsl ? "rediss" : "redis", - connectionSettings.host, - connectionSettings.port))); + var asyncConnection = + client.connectAsync( + new StringCodec(), + RedisURI.create( + String.format( + "%s://%s:%d", + connectionSettings.useSsl ? "rediss" : "redis", + connectionSettings.host, + connectionSettings.port))); asyncConnection.whenComplete((connection, exception) -> asyncCommands = connection.async()); return asyncConnection.thenApply((connection) -> "OK"); } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 95d3a8ffac..b94b9544fa 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -149,7 +149,7 @@ public static void testClientSetGet( Supplier clientCreator, BenchmarkingApp.RunConfiguration config, boolean async) { for (int concurrentNum : config.concurrentTasks) { int iterations = 100000; - Math.min(Math.max(LATENCY_MIN, concurrentNum * LATENCY_MULTIPLIER), LATENCY_MAX); + Math.min(Math.max(LATENCY_MIN, concurrentNum * LATENCY_MULTIPLIER), LATENCY_MAX); for (int clientCount : config.clientCount) { for (int dataSize : config.dataSize) { System.out.printf( @@ -265,7 +265,8 @@ public static void testClientSetGet( printResults(calculatedResults, (after - before) / TPS_NORMALIZATION, iterations); try { Thread.sleep(2000); - } catch (InterruptedException ignored) {} + } catch (InterruptedException ignored) { + } } } } diff --git a/java/benchmarks/src/main/java/javababushka/client/ConnectionRequestOuterClass.java b/java/benchmarks/src/main/java/javababushka/client/ConnectionRequestOuterClass.java deleted file mode 100644 index 3a9d695168..0000000000 --- a/java/benchmarks/src/main/java/javababushka/client/ConnectionRequestOuterClass.java +++ /dev/null @@ -1,4289 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: connection_request.proto - -package connection_request; - -public final class ConnectionRequestOuterClass { - private ConnectionRequestOuterClass() {} - - public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} - - public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); - } - - /** Protobuf enum {@code connection_request.ReadFromReplicaStrategy} */ - public enum ReadFromReplicaStrategy implements com.google.protobuf.ProtocolMessageEnum { - /** AlwaysFromPrimary = 0; */ - AlwaysFromPrimary(0), - /** RoundRobin = 1; */ - RoundRobin(1), - /** LowestLatency = 2; */ - LowestLatency(2), - /** AZAffinity = 3; */ - AZAffinity(3), - UNRECOGNIZED(-1), - ; - - /** AlwaysFromPrimary = 0; */ - public static final int AlwaysFromPrimary_VALUE = 0; - - /** RoundRobin = 1; */ - public static final int RoundRobin_VALUE = 1; - - /** LowestLatency = 2; */ - public static final int LowestLatency_VALUE = 2; - - /** AZAffinity = 3; */ - public static final int AZAffinity_VALUE = 3; - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static ReadFromReplicaStrategy valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static ReadFromReplicaStrategy forNumber(int value) { - switch (value) { - case 0: - return AlwaysFromPrimary; - case 1: - return RoundRobin; - case 2: - return LowestLatency; - case 3: - return AZAffinity; - default: - return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - - private static final com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public ReadFromReplicaStrategy findValueByNumber(int number) { - return ReadFromReplicaStrategy.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - - public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { - return getDescriptor(); - } - - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return connection_request.ConnectionRequestOuterClass.getDescriptor().getEnumTypes().get(0); - } - - private static final ReadFromReplicaStrategy[] VALUES = values(); - - public static ReadFromReplicaStrategy valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private ReadFromReplicaStrategy(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:connection_request.ReadFromReplicaStrategy) - } - - /** Protobuf enum {@code connection_request.TlsMode} */ - public enum TlsMode implements com.google.protobuf.ProtocolMessageEnum { - /** NoTls = 0; */ - NoTls(0), - /** SecureTls = 1; */ - SecureTls(1), - /** InsecureTls = 2; */ - InsecureTls(2), - UNRECOGNIZED(-1), - ; - - /** NoTls = 0; */ - public static final int NoTls_VALUE = 0; - - /** SecureTls = 1; */ - public static final int SecureTls_VALUE = 1; - - /** InsecureTls = 2; */ - public static final int InsecureTls_VALUE = 2; - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static TlsMode valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static TlsMode forNumber(int value) { - switch (value) { - case 0: - return NoTls; - case 1: - return SecureTls; - case 2: - return InsecureTls; - default: - return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { - return internalValueMap; - } - - private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public TlsMode findValueByNumber(int number) { - return TlsMode.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - - public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { - return getDescriptor(); - } - - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return connection_request.ConnectionRequestOuterClass.getDescriptor().getEnumTypes().get(1); - } - - private static final TlsMode[] VALUES = values(); - - public static TlsMode valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private TlsMode(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:connection_request.TlsMode) - } - - public interface AddressInfoOrBuilder - extends - // @@protoc_insertion_point(interface_extends:connection_request.AddressInfo) - com.google.protobuf.MessageOrBuilder { - - /** - * string host = 1; - * - * @return The host. - */ - java.lang.String getHost(); - - /** - * string host = 1; - * - * @return The bytes for host. - */ - com.google.protobuf.ByteString getHostBytes(); - - /** - * uint32 port = 2; - * - * @return The port. - */ - int getPort(); - } - - /** Protobuf type {@code connection_request.AddressInfo} */ - public static final class AddressInfo extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:connection_request.AddressInfo) - AddressInfoOrBuilder { - private static final long serialVersionUID = 0L; - - // Use AddressInfo.newBuilder() to construct. - private AddressInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private AddressInfo() { - host_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new AddressInfo(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_AddressInfo_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_AddressInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.AddressInfo.class, - connection_request.ConnectionRequestOuterClass.AddressInfo.Builder.class); - } - - public static final int HOST_FIELD_NUMBER = 1; - - @SuppressWarnings("serial") - private volatile java.lang.Object host_ = ""; - - /** - * string host = 1; - * - * @return The host. - */ - @java.lang.Override - public java.lang.String getHost() { - java.lang.Object ref = host_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - host_ = s; - return s; - } - } - - /** - * string host = 1; - * - * @return The bytes for host. - */ - @java.lang.Override - public com.google.protobuf.ByteString getHostBytes() { - java.lang.Object ref = host_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - host_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int PORT_FIELD_NUMBER = 2; - private int port_ = 0; - - /** - * uint32 port = 2; - * - * @return The port. - */ - @java.lang.Override - public int getPort() { - return port_; - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(host_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, host_); - } - if (port_ != 0) { - output.writeUInt32(2, port_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(host_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, host_); - } - if (port_ != 0) { - size += com.google.protobuf.CodedOutputStream.computeUInt32Size(2, port_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof connection_request.ConnectionRequestOuterClass.AddressInfo)) { - return super.equals(obj); - } - connection_request.ConnectionRequestOuterClass.AddressInfo other = - (connection_request.ConnectionRequestOuterClass.AddressInfo) obj; - - if (!getHost().equals(other.getHost())) return false; - if (getPort() != other.getPort()) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + HOST_FIELD_NUMBER; - hash = (53 * hash) + getHost().hashCode(); - hash = (37 * hash) + PORT_FIELD_NUMBER; - hash = (53 * hash) + getPort(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( - java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.AddressInfo parseDelimitedFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.AddressInfo parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.AddressInfo parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder( - connection_request.ConnectionRequestOuterClass.AddressInfo prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - - /** Protobuf type {@code connection_request.AddressInfo} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:connection_request.AddressInfo) - connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_AddressInfo_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_AddressInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.AddressInfo.class, - connection_request.ConnectionRequestOuterClass.AddressInfo.Builder.class); - } - - // Construct using connection_request.ConnectionRequestOuterClass.AddressInfo.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - host_ = ""; - port_ = 0; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_AddressInfo_descriptor; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AddressInfo - getDefaultInstanceForType() { - return connection_request.ConnectionRequestOuterClass.AddressInfo.getDefaultInstance(); - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AddressInfo build() { - connection_request.ConnectionRequestOuterClass.AddressInfo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AddressInfo buildPartial() { - connection_request.ConnectionRequestOuterClass.AddressInfo result = - new connection_request.ConnectionRequestOuterClass.AddressInfo(this); - if (bitField0_ != 0) { - buildPartial0(result); - } - onBuilt(); - return result; - } - - private void buildPartial0( - connection_request.ConnectionRequestOuterClass.AddressInfo result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.host_ = host_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.port_ = port_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof connection_request.ConnectionRequestOuterClass.AddressInfo) { - return mergeFrom((connection_request.ConnectionRequestOuterClass.AddressInfo) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(connection_request.ConnectionRequestOuterClass.AddressInfo other) { - if (other - == connection_request.ConnectionRequestOuterClass.AddressInfo.getDefaultInstance()) - return this; - if (!other.getHost().isEmpty()) { - host_ = other.host_; - bitField0_ |= 0x00000001; - onChanged(); - } - if (other.getPort() != 0) { - setPort(other.getPort()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: - { - host_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000001; - break; - } // case 10 - case 16: - { - port_ = input.readUInt32(); - bitField0_ |= 0x00000002; - break; - } // case 16 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int bitField0_; - - private java.lang.Object host_ = ""; - - /** - * string host = 1; - * - * @return The host. - */ - public java.lang.String getHost() { - java.lang.Object ref = host_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - host_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - - /** - * string host = 1; - * - * @return The bytes for host. - */ - public com.google.protobuf.ByteString getHostBytes() { - java.lang.Object ref = host_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - host_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - /** - * string host = 1; - * - * @param value The host to set. - * @return This builder for chaining. - */ - public Builder setHost(java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - host_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - /** - * string host = 1; - * - * @return This builder for chaining. - */ - public Builder clearHost() { - host_ = getDefaultInstance().getHost(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - return this; - } - - /** - * string host = 1; - * - * @param value The bytes for host to set. - * @return This builder for chaining. - */ - public Builder setHostBytes(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - host_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - private int port_; - - /** - * uint32 port = 2; - * - * @return The port. - */ - @java.lang.Override - public int getPort() { - return port_; - } - - /** - * uint32 port = 2; - * - * @param value The port to set. - * @return This builder for chaining. - */ - public Builder setPort(int value) { - - port_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - - /** - * uint32 port = 2; - * - * @return This builder for chaining. - */ - public Builder clearPort() { - bitField0_ = (bitField0_ & ~0x00000002); - port_ = 0; - onChanged(); - return this; - } - - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:connection_request.AddressInfo) - } - - // @@protoc_insertion_point(class_scope:connection_request.AddressInfo) - private static final connection_request.ConnectionRequestOuterClass.AddressInfo - DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.AddressInfo(); - } - - public static connection_request.ConnectionRequestOuterClass.AddressInfo getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public AddressInfo parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException() - .setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AddressInfo getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - } - - public interface AuthenticationInfoOrBuilder - extends - // @@protoc_insertion_point(interface_extends:connection_request.AuthenticationInfo) - com.google.protobuf.MessageOrBuilder { - - /** - * string password = 1; - * - * @return The password. - */ - java.lang.String getPassword(); - - /** - * string password = 1; - * - * @return The bytes for password. - */ - com.google.protobuf.ByteString getPasswordBytes(); - - /** - * string username = 2; - * - * @return The username. - */ - java.lang.String getUsername(); - - /** - * string username = 2; - * - * @return The bytes for username. - */ - com.google.protobuf.ByteString getUsernameBytes(); - } - - /** Protobuf type {@code connection_request.AuthenticationInfo} */ - public static final class AuthenticationInfo extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:connection_request.AuthenticationInfo) - AuthenticationInfoOrBuilder { - private static final long serialVersionUID = 0L; - - // Use AuthenticationInfo.newBuilder() to construct. - private AuthenticationInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private AuthenticationInfo() { - password_ = ""; - username_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new AuthenticationInfo(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_AuthenticationInfo_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_AuthenticationInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.class, - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder.class); - } - - public static final int PASSWORD_FIELD_NUMBER = 1; - - @SuppressWarnings("serial") - private volatile java.lang.Object password_ = ""; - - /** - * string password = 1; - * - * @return The password. - */ - @java.lang.Override - public java.lang.String getPassword() { - java.lang.Object ref = password_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - password_ = s; - return s; - } - } - - /** - * string password = 1; - * - * @return The bytes for password. - */ - @java.lang.Override - public com.google.protobuf.ByteString getPasswordBytes() { - java.lang.Object ref = password_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - password_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int USERNAME_FIELD_NUMBER = 2; - - @SuppressWarnings("serial") - private volatile java.lang.Object username_ = ""; - - /** - * string username = 2; - * - * @return The username. - */ - @java.lang.Override - public java.lang.String getUsername() { - java.lang.Object ref = username_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - username_ = s; - return s; - } - } - - /** - * string username = 2; - * - * @return The bytes for username. - */ - @java.lang.Override - public com.google.protobuf.ByteString getUsernameBytes() { - java.lang.Object ref = username_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - username_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(password_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, password_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(username_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, username_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(password_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, password_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(username_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, username_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof connection_request.ConnectionRequestOuterClass.AuthenticationInfo)) { - return super.equals(obj); - } - connection_request.ConnectionRequestOuterClass.AuthenticationInfo other = - (connection_request.ConnectionRequestOuterClass.AuthenticationInfo) obj; - - if (!getPassword().equals(other.getPassword())) return false; - if (!getUsername().equals(other.getUsername())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + PASSWORD_FIELD_NUMBER; - hash = (53 * hash) + getPassword().hashCode(); - hash = (37 * hash) + USERNAME_FIELD_NUMBER; - hash = (53 * hash) + getUsername().hashCode(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo - parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo - parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder( - connection_request.ConnectionRequestOuterClass.AuthenticationInfo prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - - /** Protobuf type {@code connection_request.AuthenticationInfo} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:connection_request.AuthenticationInfo) - connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_AuthenticationInfo_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_AuthenticationInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.class, - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder.class); - } - - // Construct using - // connection_request.ConnectionRequestOuterClass.AuthenticationInfo.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - password_ = ""; - username_ = ""; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_AuthenticationInfo_descriptor; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo - getDefaultInstanceForType() { - return connection_request.ConnectionRequestOuterClass.AuthenticationInfo - .getDefaultInstance(); - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo build() { - connection_request.ConnectionRequestOuterClass.AuthenticationInfo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo buildPartial() { - connection_request.ConnectionRequestOuterClass.AuthenticationInfo result = - new connection_request.ConnectionRequestOuterClass.AuthenticationInfo(this); - if (bitField0_ != 0) { - buildPartial0(result); - } - onBuilt(); - return result; - } - - private void buildPartial0( - connection_request.ConnectionRequestOuterClass.AuthenticationInfo result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.password_ = password_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.username_ = username_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof connection_request.ConnectionRequestOuterClass.AuthenticationInfo) { - return mergeFrom( - (connection_request.ConnectionRequestOuterClass.AuthenticationInfo) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom( - connection_request.ConnectionRequestOuterClass.AuthenticationInfo other) { - if (other - == connection_request.ConnectionRequestOuterClass.AuthenticationInfo - .getDefaultInstance()) return this; - if (!other.getPassword().isEmpty()) { - password_ = other.password_; - bitField0_ |= 0x00000001; - onChanged(); - } - if (!other.getUsername().isEmpty()) { - username_ = other.username_; - bitField0_ |= 0x00000002; - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: - { - password_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000001; - break; - } // case 10 - case 18: - { - username_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000002; - break; - } // case 18 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int bitField0_; - - private java.lang.Object password_ = ""; - - /** - * string password = 1; - * - * @return The password. - */ - public java.lang.String getPassword() { - java.lang.Object ref = password_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - password_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - - /** - * string password = 1; - * - * @return The bytes for password. - */ - public com.google.protobuf.ByteString getPasswordBytes() { - java.lang.Object ref = password_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - password_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - /** - * string password = 1; - * - * @param value The password to set. - * @return This builder for chaining. - */ - public Builder setPassword(java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - password_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - /** - * string password = 1; - * - * @return This builder for chaining. - */ - public Builder clearPassword() { - password_ = getDefaultInstance().getPassword(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - return this; - } - - /** - * string password = 1; - * - * @param value The bytes for password to set. - * @return This builder for chaining. - */ - public Builder setPasswordBytes(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - password_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - private java.lang.Object username_ = ""; - - /** - * string username = 2; - * - * @return The username. - */ - public java.lang.String getUsername() { - java.lang.Object ref = username_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - username_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - - /** - * string username = 2; - * - * @return The bytes for username. - */ - public com.google.protobuf.ByteString getUsernameBytes() { - java.lang.Object ref = username_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - username_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - /** - * string username = 2; - * - * @param value The username to set. - * @return This builder for chaining. - */ - public Builder setUsername(java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - username_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - - /** - * string username = 2; - * - * @return This builder for chaining. - */ - public Builder clearUsername() { - username_ = getDefaultInstance().getUsername(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - return this; - } - - /** - * string username = 2; - * - * @param value The bytes for username to set. - * @return This builder for chaining. - */ - public Builder setUsernameBytes(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - username_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:connection_request.AuthenticationInfo) - } - - // @@protoc_insertion_point(class_scope:connection_request.AuthenticationInfo) - private static final connection_request.ConnectionRequestOuterClass.AuthenticationInfo - DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.AuthenticationInfo(); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo - getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public AuthenticationInfo parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException() - .setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo - getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - } - - public interface ConnectionRequestOrBuilder - extends - // @@protoc_insertion_point(interface_extends:connection_request.ConnectionRequest) - com.google.protobuf.MessageOrBuilder { - - /** repeated .connection_request.AddressInfo addresses = 1; */ - java.util.List getAddressesList(); - - /** repeated .connection_request.AddressInfo addresses = 1; */ - connection_request.ConnectionRequestOuterClass.AddressInfo getAddresses(int index); - - /** repeated .connection_request.AddressInfo addresses = 1; */ - int getAddressesCount(); - - /** repeated .connection_request.AddressInfo addresses = 1; */ - java.util.List - getAddressesOrBuilderList(); - - /** repeated .connection_request.AddressInfo addresses = 1; */ - connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder getAddressesOrBuilder( - int index); - - /** - * .connection_request.TlsMode tls_mode = 2; - * - * @return The enum numeric value on the wire for tlsMode. - */ - int getTlsModeValue(); - - /** - * .connection_request.TlsMode tls_mode = 2; - * - * @return The tlsMode. - */ - connection_request.ConnectionRequestOuterClass.TlsMode getTlsMode(); - - /** - * bool cluster_mode_enabled = 3; - * - * @return The clusterModeEnabled. - */ - boolean getClusterModeEnabled(); - - /** - * uint32 response_timeout = 4; - * - * @return The responseTimeout. - */ - int getResponseTimeout(); - - /** - * uint32 client_creation_timeout = 5; - * - * @return The clientCreationTimeout. - */ - int getClientCreationTimeout(); - - /** - * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; - * - * @return The enum numeric value on the wire for readFromReplicaStrategy. - */ - int getReadFromReplicaStrategyValue(); - - /** - * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; - * - * @return The readFromReplicaStrategy. - */ - connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy - getReadFromReplicaStrategy(); - - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; - * - * @return Whether the connectionRetryStrategy field is set. - */ - boolean hasConnectionRetryStrategy(); - - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; - * - * @return The connectionRetryStrategy. - */ - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - getConnectionRetryStrategy(); - - /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder - getConnectionRetryStrategyOrBuilder(); - - /** - * .connection_request.AuthenticationInfo authentication_info = 8; - * - * @return Whether the authenticationInfo field is set. - */ - boolean hasAuthenticationInfo(); - - /** - * .connection_request.AuthenticationInfo authentication_info = 8; - * - * @return The authenticationInfo. - */ - connection_request.ConnectionRequestOuterClass.AuthenticationInfo getAuthenticationInfo(); - - /** .connection_request.AuthenticationInfo authentication_info = 8; */ - connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder - getAuthenticationInfoOrBuilder(); - - /** - * uint32 database_id = 9; - * - * @return The databaseId. - */ - int getDatabaseId(); - } - - /** - * - * - *

-   * IMPORTANT - if you add fields here, you probably need to add them also in client/mod.rs:`sanitized_request_string`.
-   * 
- * - * Protobuf type {@code connection_request.ConnectionRequest} - */ - public static final class ConnectionRequest extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:connection_request.ConnectionRequest) - ConnectionRequestOrBuilder { - private static final long serialVersionUID = 0L; - - // Use ConnectionRequest.newBuilder() to construct. - private ConnectionRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private ConnectionRequest() { - addresses_ = java.util.Collections.emptyList(); - tlsMode_ = 0; - readFromReplicaStrategy_ = 0; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ConnectionRequest(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_ConnectionRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_ConnectionRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.ConnectionRequest.class, - connection_request.ConnectionRequestOuterClass.ConnectionRequest.Builder.class); - } - - public static final int ADDRESSES_FIELD_NUMBER = 1; - - @SuppressWarnings("serial") - private java.util.List addresses_; - - /** repeated .connection_request.AddressInfo addresses = 1; */ - @java.lang.Override - public java.util.List - getAddressesList() { - return addresses_; - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - @java.lang.Override - public java.util.List< - ? extends connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder> - getAddressesOrBuilderList() { - return addresses_; - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - @java.lang.Override - public int getAddressesCount() { - return addresses_.size(); - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AddressInfo getAddresses(int index) { - return addresses_.get(index); - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder - getAddressesOrBuilder(int index) { - return addresses_.get(index); - } - - public static final int TLS_MODE_FIELD_NUMBER = 2; - private int tlsMode_ = 0; - - /** - * .connection_request.TlsMode tls_mode = 2; - * - * @return The enum numeric value on the wire for tlsMode. - */ - @java.lang.Override - public int getTlsModeValue() { - return tlsMode_; - } - - /** - * .connection_request.TlsMode tls_mode = 2; - * - * @return The tlsMode. - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.TlsMode getTlsMode() { - connection_request.ConnectionRequestOuterClass.TlsMode result = - connection_request.ConnectionRequestOuterClass.TlsMode.forNumber(tlsMode_); - return result == null - ? connection_request.ConnectionRequestOuterClass.TlsMode.UNRECOGNIZED - : result; - } - - public static final int CLUSTER_MODE_ENABLED_FIELD_NUMBER = 3; - private boolean clusterModeEnabled_ = false; - - /** - * bool cluster_mode_enabled = 3; - * - * @return The clusterModeEnabled. - */ - @java.lang.Override - public boolean getClusterModeEnabled() { - return clusterModeEnabled_; - } - - public static final int RESPONSE_TIMEOUT_FIELD_NUMBER = 4; - private int responseTimeout_ = 0; - - /** - * uint32 response_timeout = 4; - * - * @return The responseTimeout. - */ - @java.lang.Override - public int getResponseTimeout() { - return responseTimeout_; - } - - public static final int CLIENT_CREATION_TIMEOUT_FIELD_NUMBER = 5; - private int clientCreationTimeout_ = 0; - - /** - * uint32 client_creation_timeout = 5; - * - * @return The clientCreationTimeout. - */ - @java.lang.Override - public int getClientCreationTimeout() { - return clientCreationTimeout_; - } - - public static final int READ_FROM_REPLICA_STRATEGY_FIELD_NUMBER = 6; - private int readFromReplicaStrategy_ = 0; - - /** - * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; - * - * @return The enum numeric value on the wire for readFromReplicaStrategy. - */ - @java.lang.Override - public int getReadFromReplicaStrategyValue() { - return readFromReplicaStrategy_; - } - - /** - * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; - * - * @return The readFromReplicaStrategy. - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy - getReadFromReplicaStrategy() { - connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy result = - connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy.forNumber( - readFromReplicaStrategy_); - return result == null - ? connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy.UNRECOGNIZED - : result; - } - - public static final int CONNECTION_RETRY_STRATEGY_FIELD_NUMBER = 7; - private connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - connectionRetryStrategy_; - - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; - * - * @return Whether the connectionRetryStrategy field is set. - */ - @java.lang.Override - public boolean hasConnectionRetryStrategy() { - return connectionRetryStrategy_ != null; - } - - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; - * - * @return The connectionRetryStrategy. - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - getConnectionRetryStrategy() { - return connectionRetryStrategy_ == null - ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - .getDefaultInstance() - : connectionRetryStrategy_; - } - - /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder - getConnectionRetryStrategyOrBuilder() { - return connectionRetryStrategy_ == null - ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - .getDefaultInstance() - : connectionRetryStrategy_; - } - - public static final int AUTHENTICATION_INFO_FIELD_NUMBER = 8; - private connection_request.ConnectionRequestOuterClass.AuthenticationInfo authenticationInfo_; - - /** - * .connection_request.AuthenticationInfo authentication_info = 8; - * - * @return Whether the authenticationInfo field is set. - */ - @java.lang.Override - public boolean hasAuthenticationInfo() { - return authenticationInfo_ != null; - } - - /** - * .connection_request.AuthenticationInfo authentication_info = 8; - * - * @return The authenticationInfo. - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo - getAuthenticationInfo() { - return authenticationInfo_ == null - ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance() - : authenticationInfo_; - } - - /** .connection_request.AuthenticationInfo authentication_info = 8; */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder - getAuthenticationInfoOrBuilder() { - return authenticationInfo_ == null - ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance() - : authenticationInfo_; - } - - public static final int DATABASE_ID_FIELD_NUMBER = 9; - private int databaseId_ = 0; - - /** - * uint32 database_id = 9; - * - * @return The databaseId. - */ - @java.lang.Override - public int getDatabaseId() { - return databaseId_; - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - for (int i = 0; i < addresses_.size(); i++) { - output.writeMessage(1, addresses_.get(i)); - } - if (tlsMode_ != connection_request.ConnectionRequestOuterClass.TlsMode.NoTls.getNumber()) { - output.writeEnum(2, tlsMode_); - } - if (clusterModeEnabled_ != false) { - output.writeBool(3, clusterModeEnabled_); - } - if (responseTimeout_ != 0) { - output.writeUInt32(4, responseTimeout_); - } - if (clientCreationTimeout_ != 0) { - output.writeUInt32(5, clientCreationTimeout_); - } - if (readFromReplicaStrategy_ - != connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy - .AlwaysFromPrimary.getNumber()) { - output.writeEnum(6, readFromReplicaStrategy_); - } - if (connectionRetryStrategy_ != null) { - output.writeMessage(7, getConnectionRetryStrategy()); - } - if (authenticationInfo_ != null) { - output.writeMessage(8, getAuthenticationInfo()); - } - if (databaseId_ != 0) { - output.writeUInt32(9, databaseId_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - for (int i = 0; i < addresses_.size(); i++) { - size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, addresses_.get(i)); - } - if (tlsMode_ != connection_request.ConnectionRequestOuterClass.TlsMode.NoTls.getNumber()) { - size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, tlsMode_); - } - if (clusterModeEnabled_ != false) { - size += com.google.protobuf.CodedOutputStream.computeBoolSize(3, clusterModeEnabled_); - } - if (responseTimeout_ != 0) { - size += com.google.protobuf.CodedOutputStream.computeUInt32Size(4, responseTimeout_); - } - if (clientCreationTimeout_ != 0) { - size += com.google.protobuf.CodedOutputStream.computeUInt32Size(5, clientCreationTimeout_); - } - if (readFromReplicaStrategy_ - != connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy - .AlwaysFromPrimary.getNumber()) { - size += com.google.protobuf.CodedOutputStream.computeEnumSize(6, readFromReplicaStrategy_); - } - if (connectionRetryStrategy_ != null) { - size += - com.google.protobuf.CodedOutputStream.computeMessageSize( - 7, getConnectionRetryStrategy()); - } - if (authenticationInfo_ != null) { - size += - com.google.protobuf.CodedOutputStream.computeMessageSize(8, getAuthenticationInfo()); - } - if (databaseId_ != 0) { - size += com.google.protobuf.CodedOutputStream.computeUInt32Size(9, databaseId_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof connection_request.ConnectionRequestOuterClass.ConnectionRequest)) { - return super.equals(obj); - } - connection_request.ConnectionRequestOuterClass.ConnectionRequest other = - (connection_request.ConnectionRequestOuterClass.ConnectionRequest) obj; - - if (!getAddressesList().equals(other.getAddressesList())) return false; - if (tlsMode_ != other.tlsMode_) return false; - if (getClusterModeEnabled() != other.getClusterModeEnabled()) return false; - if (getResponseTimeout() != other.getResponseTimeout()) return false; - if (getClientCreationTimeout() != other.getClientCreationTimeout()) return false; - if (readFromReplicaStrategy_ != other.readFromReplicaStrategy_) return false; - if (hasConnectionRetryStrategy() != other.hasConnectionRetryStrategy()) return false; - if (hasConnectionRetryStrategy()) { - if (!getConnectionRetryStrategy().equals(other.getConnectionRetryStrategy())) return false; - } - if (hasAuthenticationInfo() != other.hasAuthenticationInfo()) return false; - if (hasAuthenticationInfo()) { - if (!getAuthenticationInfo().equals(other.getAuthenticationInfo())) return false; - } - if (getDatabaseId() != other.getDatabaseId()) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getAddressesCount() > 0) { - hash = (37 * hash) + ADDRESSES_FIELD_NUMBER; - hash = (53 * hash) + getAddressesList().hashCode(); - } - hash = (37 * hash) + TLS_MODE_FIELD_NUMBER; - hash = (53 * hash) + tlsMode_; - hash = (37 * hash) + CLUSTER_MODE_ENABLED_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getClusterModeEnabled()); - hash = (37 * hash) + RESPONSE_TIMEOUT_FIELD_NUMBER; - hash = (53 * hash) + getResponseTimeout(); - hash = (37 * hash) + CLIENT_CREATION_TIMEOUT_FIELD_NUMBER; - hash = (53 * hash) + getClientCreationTimeout(); - hash = (37 * hash) + READ_FROM_REPLICA_STRATEGY_FIELD_NUMBER; - hash = (53 * hash) + readFromReplicaStrategy_; - if (hasConnectionRetryStrategy()) { - hash = (37 * hash) + CONNECTION_RETRY_STRATEGY_FIELD_NUMBER; - hash = (53 * hash) + getConnectionRetryStrategy().hashCode(); - } - if (hasAuthenticationInfo()) { - hash = (37 * hash) + AUTHENTICATION_INFO_FIELD_NUMBER; - hash = (53 * hash) + getAuthenticationInfo().hashCode(); - } - hash = (37 * hash) + DATABASE_ID_FIELD_NUMBER; - hash = (53 * hash) + getDatabaseId(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest - parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest - parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder( - connection_request.ConnectionRequestOuterClass.ConnectionRequest prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - - /** - * - * - *
-     * IMPORTANT - if you add fields here, you probably need to add them also in client/mod.rs:`sanitized_request_string`.
-     * 
- * - * Protobuf type {@code connection_request.ConnectionRequest} - */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:connection_request.ConnectionRequest) - connection_request.ConnectionRequestOuterClass.ConnectionRequestOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_ConnectionRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_ConnectionRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.ConnectionRequest.class, - connection_request.ConnectionRequestOuterClass.ConnectionRequest.Builder.class); - } - - // Construct using - // connection_request.ConnectionRequestOuterClass.ConnectionRequest.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - if (addressesBuilder_ == null) { - addresses_ = java.util.Collections.emptyList(); - } else { - addresses_ = null; - addressesBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - tlsMode_ = 0; - clusterModeEnabled_ = false; - responseTimeout_ = 0; - clientCreationTimeout_ = 0; - readFromReplicaStrategy_ = 0; - connectionRetryStrategy_ = null; - if (connectionRetryStrategyBuilder_ != null) { - connectionRetryStrategyBuilder_.dispose(); - connectionRetryStrategyBuilder_ = null; - } - authenticationInfo_ = null; - if (authenticationInfoBuilder_ != null) { - authenticationInfoBuilder_.dispose(); - authenticationInfoBuilder_ = null; - } - databaseId_ = 0; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_ConnectionRequest_descriptor; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRequest - getDefaultInstanceForType() { - return connection_request.ConnectionRequestOuterClass.ConnectionRequest - .getDefaultInstance(); - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRequest build() { - connection_request.ConnectionRequestOuterClass.ConnectionRequest result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRequest buildPartial() { - connection_request.ConnectionRequestOuterClass.ConnectionRequest result = - new connection_request.ConnectionRequestOuterClass.ConnectionRequest(this); - buildPartialRepeatedFields(result); - if (bitField0_ != 0) { - buildPartial0(result); - } - onBuilt(); - return result; - } - - private void buildPartialRepeatedFields( - connection_request.ConnectionRequestOuterClass.ConnectionRequest result) { - if (addressesBuilder_ == null) { - if (((bitField0_ & 0x00000001) != 0)) { - addresses_ = java.util.Collections.unmodifiableList(addresses_); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.addresses_ = addresses_; - } else { - result.addresses_ = addressesBuilder_.build(); - } - } - - private void buildPartial0( - connection_request.ConnectionRequestOuterClass.ConnectionRequest result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000002) != 0)) { - result.tlsMode_ = tlsMode_; - } - if (((from_bitField0_ & 0x00000004) != 0)) { - result.clusterModeEnabled_ = clusterModeEnabled_; - } - if (((from_bitField0_ & 0x00000008) != 0)) { - result.responseTimeout_ = responseTimeout_; - } - if (((from_bitField0_ & 0x00000010) != 0)) { - result.clientCreationTimeout_ = clientCreationTimeout_; - } - if (((from_bitField0_ & 0x00000020) != 0)) { - result.readFromReplicaStrategy_ = readFromReplicaStrategy_; - } - if (((from_bitField0_ & 0x00000040) != 0)) { - result.connectionRetryStrategy_ = - connectionRetryStrategyBuilder_ == null - ? connectionRetryStrategy_ - : connectionRetryStrategyBuilder_.build(); - } - if (((from_bitField0_ & 0x00000080) != 0)) { - result.authenticationInfo_ = - authenticationInfoBuilder_ == null - ? authenticationInfo_ - : authenticationInfoBuilder_.build(); - } - if (((from_bitField0_ & 0x00000100) != 0)) { - result.databaseId_ = databaseId_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof connection_request.ConnectionRequestOuterClass.ConnectionRequest) { - return mergeFrom( - (connection_request.ConnectionRequestOuterClass.ConnectionRequest) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom( - connection_request.ConnectionRequestOuterClass.ConnectionRequest other) { - if (other - == connection_request.ConnectionRequestOuterClass.ConnectionRequest - .getDefaultInstance()) return this; - if (addressesBuilder_ == null) { - if (!other.addresses_.isEmpty()) { - if (addresses_.isEmpty()) { - addresses_ = other.addresses_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensureAddressesIsMutable(); - addresses_.addAll(other.addresses_); - } - onChanged(); - } - } else { - if (!other.addresses_.isEmpty()) { - if (addressesBuilder_.isEmpty()) { - addressesBuilder_.dispose(); - addressesBuilder_ = null; - addresses_ = other.addresses_; - bitField0_ = (bitField0_ & ~0x00000001); - addressesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getAddressesFieldBuilder() - : null; - } else { - addressesBuilder_.addAllMessages(other.addresses_); - } - } - } - if (other.tlsMode_ != 0) { - setTlsModeValue(other.getTlsModeValue()); - } - if (other.getClusterModeEnabled() != false) { - setClusterModeEnabled(other.getClusterModeEnabled()); - } - if (other.getResponseTimeout() != 0) { - setResponseTimeout(other.getResponseTimeout()); - } - if (other.getClientCreationTimeout() != 0) { - setClientCreationTimeout(other.getClientCreationTimeout()); - } - if (other.readFromReplicaStrategy_ != 0) { - setReadFromReplicaStrategyValue(other.getReadFromReplicaStrategyValue()); - } - if (other.hasConnectionRetryStrategy()) { - mergeConnectionRetryStrategy(other.getConnectionRetryStrategy()); - } - if (other.hasAuthenticationInfo()) { - mergeAuthenticationInfo(other.getAuthenticationInfo()); - } - if (other.getDatabaseId() != 0) { - setDatabaseId(other.getDatabaseId()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: - { - connection_request.ConnectionRequestOuterClass.AddressInfo m = - input.readMessage( - connection_request.ConnectionRequestOuterClass.AddressInfo.parser(), - extensionRegistry); - if (addressesBuilder_ == null) { - ensureAddressesIsMutable(); - addresses_.add(m); - } else { - addressesBuilder_.addMessage(m); - } - break; - } // case 10 - case 16: - { - tlsMode_ = input.readEnum(); - bitField0_ |= 0x00000002; - break; - } // case 16 - case 24: - { - clusterModeEnabled_ = input.readBool(); - bitField0_ |= 0x00000004; - break; - } // case 24 - case 32: - { - responseTimeout_ = input.readUInt32(); - bitField0_ |= 0x00000008; - break; - } // case 32 - case 40: - { - clientCreationTimeout_ = input.readUInt32(); - bitField0_ |= 0x00000010; - break; - } // case 40 - case 48: - { - readFromReplicaStrategy_ = input.readEnum(); - bitField0_ |= 0x00000020; - break; - } // case 48 - case 58: - { - input.readMessage( - getConnectionRetryStrategyFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000040; - break; - } // case 58 - case 66: - { - input.readMessage( - getAuthenticationInfoFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000080; - break; - } // case 66 - case 72: - { - databaseId_ = input.readUInt32(); - bitField0_ |= 0x00000100; - break; - } // case 72 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int bitField0_; - - private java.util.List - addresses_ = java.util.Collections.emptyList(); - - private void ensureAddressesIsMutable() { - if (!((bitField0_ & 0x00000001) != 0)) { - addresses_ = - new java.util.ArrayList( - addresses_); - bitField0_ |= 0x00000001; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.AddressInfo, - connection_request.ConnectionRequestOuterClass.AddressInfo.Builder, - connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder> - addressesBuilder_; - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public java.util.List - getAddressesList() { - if (addressesBuilder_ == null) { - return java.util.Collections.unmodifiableList(addresses_); - } else { - return addressesBuilder_.getMessageList(); - } - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public int getAddressesCount() { - if (addressesBuilder_ == null) { - return addresses_.size(); - } else { - return addressesBuilder_.getCount(); - } - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public connection_request.ConnectionRequestOuterClass.AddressInfo getAddresses(int index) { - if (addressesBuilder_ == null) { - return addresses_.get(index); - } else { - return addressesBuilder_.getMessage(index); - } - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public Builder setAddresses( - int index, connection_request.ConnectionRequestOuterClass.AddressInfo value) { - if (addressesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAddressesIsMutable(); - addresses_.set(index, value); - onChanged(); - } else { - addressesBuilder_.setMessage(index, value); - } - return this; - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public Builder setAddresses( - int index, - connection_request.ConnectionRequestOuterClass.AddressInfo.Builder builderForValue) { - if (addressesBuilder_ == null) { - ensureAddressesIsMutable(); - addresses_.set(index, builderForValue.build()); - onChanged(); - } else { - addressesBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public Builder addAddresses( - connection_request.ConnectionRequestOuterClass.AddressInfo value) { - if (addressesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAddressesIsMutable(); - addresses_.add(value); - onChanged(); - } else { - addressesBuilder_.addMessage(value); - } - return this; - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public Builder addAddresses( - int index, connection_request.ConnectionRequestOuterClass.AddressInfo value) { - if (addressesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAddressesIsMutable(); - addresses_.add(index, value); - onChanged(); - } else { - addressesBuilder_.addMessage(index, value); - } - return this; - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public Builder addAddresses( - connection_request.ConnectionRequestOuterClass.AddressInfo.Builder builderForValue) { - if (addressesBuilder_ == null) { - ensureAddressesIsMutable(); - addresses_.add(builderForValue.build()); - onChanged(); - } else { - addressesBuilder_.addMessage(builderForValue.build()); - } - return this; - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public Builder addAddresses( - int index, - connection_request.ConnectionRequestOuterClass.AddressInfo.Builder builderForValue) { - if (addressesBuilder_ == null) { - ensureAddressesIsMutable(); - addresses_.add(index, builderForValue.build()); - onChanged(); - } else { - addressesBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public Builder addAllAddresses( - java.lang.Iterable - values) { - if (addressesBuilder_ == null) { - ensureAddressesIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll(values, addresses_); - onChanged(); - } else { - addressesBuilder_.addAllMessages(values); - } - return this; - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public Builder clearAddresses() { - if (addressesBuilder_ == null) { - addresses_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - } else { - addressesBuilder_.clear(); - } - return this; - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public Builder removeAddresses(int index) { - if (addressesBuilder_ == null) { - ensureAddressesIsMutable(); - addresses_.remove(index); - onChanged(); - } else { - addressesBuilder_.remove(index); - } - return this; - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public connection_request.ConnectionRequestOuterClass.AddressInfo.Builder getAddressesBuilder( - int index) { - return getAddressesFieldBuilder().getBuilder(index); - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder - getAddressesOrBuilder(int index) { - if (addressesBuilder_ == null) { - return addresses_.get(index); - } else { - return addressesBuilder_.getMessageOrBuilder(index); - } - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public java.util.List< - ? extends connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder> - getAddressesOrBuilderList() { - if (addressesBuilder_ != null) { - return addressesBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(addresses_); - } - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public connection_request.ConnectionRequestOuterClass.AddressInfo.Builder - addAddressesBuilder() { - return getAddressesFieldBuilder() - .addBuilder( - connection_request.ConnectionRequestOuterClass.AddressInfo.getDefaultInstance()); - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public connection_request.ConnectionRequestOuterClass.AddressInfo.Builder addAddressesBuilder( - int index) { - return getAddressesFieldBuilder() - .addBuilder( - index, - connection_request.ConnectionRequestOuterClass.AddressInfo.getDefaultInstance()); - } - - /** repeated .connection_request.AddressInfo addresses = 1; */ - public java.util.List - getAddressesBuilderList() { - return getAddressesFieldBuilder().getBuilderList(); - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.AddressInfo, - connection_request.ConnectionRequestOuterClass.AddressInfo.Builder, - connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder> - getAddressesFieldBuilder() { - if (addressesBuilder_ == null) { - addressesBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.AddressInfo, - connection_request.ConnectionRequestOuterClass.AddressInfo.Builder, - connection_request.ConnectionRequestOuterClass.AddressInfoOrBuilder>( - addresses_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean()); - addresses_ = null; - } - return addressesBuilder_; - } - - private int tlsMode_ = 0; - - /** - * .connection_request.TlsMode tls_mode = 2; - * - * @return The enum numeric value on the wire for tlsMode. - */ - @java.lang.Override - public int getTlsModeValue() { - return tlsMode_; - } - - /** - * .connection_request.TlsMode tls_mode = 2; - * - * @param value The enum numeric value on the wire for tlsMode to set. - * @return This builder for chaining. - */ - public Builder setTlsModeValue(int value) { - tlsMode_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - - /** - * .connection_request.TlsMode tls_mode = 2; - * - * @return The tlsMode. - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.TlsMode getTlsMode() { - connection_request.ConnectionRequestOuterClass.TlsMode result = - connection_request.ConnectionRequestOuterClass.TlsMode.forNumber(tlsMode_); - return result == null - ? connection_request.ConnectionRequestOuterClass.TlsMode.UNRECOGNIZED - : result; - } - - /** - * .connection_request.TlsMode tls_mode = 2; - * - * @param value The tlsMode to set. - * @return This builder for chaining. - */ - public Builder setTlsMode(connection_request.ConnectionRequestOuterClass.TlsMode value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - tlsMode_ = value.getNumber(); - onChanged(); - return this; - } - - /** - * .connection_request.TlsMode tls_mode = 2; - * - * @return This builder for chaining. - */ - public Builder clearTlsMode() { - bitField0_ = (bitField0_ & ~0x00000002); - tlsMode_ = 0; - onChanged(); - return this; - } - - private boolean clusterModeEnabled_; - - /** - * bool cluster_mode_enabled = 3; - * - * @return The clusterModeEnabled. - */ - @java.lang.Override - public boolean getClusterModeEnabled() { - return clusterModeEnabled_; - } - - /** - * bool cluster_mode_enabled = 3; - * - * @param value The clusterModeEnabled to set. - * @return This builder for chaining. - */ - public Builder setClusterModeEnabled(boolean value) { - - clusterModeEnabled_ = value; - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - - /** - * bool cluster_mode_enabled = 3; - * - * @return This builder for chaining. - */ - public Builder clearClusterModeEnabled() { - bitField0_ = (bitField0_ & ~0x00000004); - clusterModeEnabled_ = false; - onChanged(); - return this; - } - - private int responseTimeout_; - - /** - * uint32 response_timeout = 4; - * - * @return The responseTimeout. - */ - @java.lang.Override - public int getResponseTimeout() { - return responseTimeout_; - } - - /** - * uint32 response_timeout = 4; - * - * @param value The responseTimeout to set. - * @return This builder for chaining. - */ - public Builder setResponseTimeout(int value) { - - responseTimeout_ = value; - bitField0_ |= 0x00000008; - onChanged(); - return this; - } - - /** - * uint32 response_timeout = 4; - * - * @return This builder for chaining. - */ - public Builder clearResponseTimeout() { - bitField0_ = (bitField0_ & ~0x00000008); - responseTimeout_ = 0; - onChanged(); - return this; - } - - private int clientCreationTimeout_; - - /** - * uint32 client_creation_timeout = 5; - * - * @return The clientCreationTimeout. - */ - @java.lang.Override - public int getClientCreationTimeout() { - return clientCreationTimeout_; - } - - /** - * uint32 client_creation_timeout = 5; - * - * @param value The clientCreationTimeout to set. - * @return This builder for chaining. - */ - public Builder setClientCreationTimeout(int value) { - - clientCreationTimeout_ = value; - bitField0_ |= 0x00000010; - onChanged(); - return this; - } - - /** - * uint32 client_creation_timeout = 5; - * - * @return This builder for chaining. - */ - public Builder clearClientCreationTimeout() { - bitField0_ = (bitField0_ & ~0x00000010); - clientCreationTimeout_ = 0; - onChanged(); - return this; - } - - private int readFromReplicaStrategy_ = 0; - - /** - * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; - * - * @return The enum numeric value on the wire for readFromReplicaStrategy. - */ - @java.lang.Override - public int getReadFromReplicaStrategyValue() { - return readFromReplicaStrategy_; - } - - /** - * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; - * - * @param value The enum numeric value on the wire for readFromReplicaStrategy to set. - * @return This builder for chaining. - */ - public Builder setReadFromReplicaStrategyValue(int value) { - readFromReplicaStrategy_ = value; - bitField0_ |= 0x00000020; - onChanged(); - return this; - } - - /** - * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; - * - * @return The readFromReplicaStrategy. - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy - getReadFromReplicaStrategy() { - connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy result = - connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy.forNumber( - readFromReplicaStrategy_); - return result == null - ? connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy.UNRECOGNIZED - : result; - } - - /** - * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; - * - * @param value The readFromReplicaStrategy to set. - * @return This builder for chaining. - */ - public Builder setReadFromReplicaStrategy( - connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000020; - readFromReplicaStrategy_ = value.getNumber(); - onChanged(); - return this; - } - - /** - * .connection_request.ReadFromReplicaStrategy read_from_replica_strategy = 6; - * - * @return This builder for chaining. - */ - public Builder clearReadFromReplicaStrategy() { - bitField0_ = (bitField0_ & ~0x00000020); - readFromReplicaStrategy_ = 0; - onChanged(); - return this; - } - - private connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - connectionRetryStrategy_; - private com.google.protobuf.SingleFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy, - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder, - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder> - connectionRetryStrategyBuilder_; - - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; - * - * @return Whether the connectionRetryStrategy field is set. - */ - public boolean hasConnectionRetryStrategy() { - return ((bitField0_ & 0x00000040) != 0); - } - - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; - * - * @return The connectionRetryStrategy. - */ - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - getConnectionRetryStrategy() { - if (connectionRetryStrategyBuilder_ == null) { - return connectionRetryStrategy_ == null - ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - .getDefaultInstance() - : connectionRetryStrategy_; - } else { - return connectionRetryStrategyBuilder_.getMessage(); - } - } - - /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ - public Builder setConnectionRetryStrategy( - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy value) { - if (connectionRetryStrategyBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - connectionRetryStrategy_ = value; - } else { - connectionRetryStrategyBuilder_.setMessage(value); - } - bitField0_ |= 0x00000040; - onChanged(); - return this; - } - - /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ - public Builder setConnectionRetryStrategy( - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder - builderForValue) { - if (connectionRetryStrategyBuilder_ == null) { - connectionRetryStrategy_ = builderForValue.build(); - } else { - connectionRetryStrategyBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000040; - onChanged(); - return this; - } - - /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ - public Builder mergeConnectionRetryStrategy( - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy value) { - if (connectionRetryStrategyBuilder_ == null) { - if (((bitField0_ & 0x00000040) != 0) - && connectionRetryStrategy_ != null - && connectionRetryStrategy_ - != connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - .getDefaultInstance()) { - getConnectionRetryStrategyBuilder().mergeFrom(value); - } else { - connectionRetryStrategy_ = value; - } - } else { - connectionRetryStrategyBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000040; - onChanged(); - return this; - } - - /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ - public Builder clearConnectionRetryStrategy() { - bitField0_ = (bitField0_ & ~0x00000040); - connectionRetryStrategy_ = null; - if (connectionRetryStrategyBuilder_ != null) { - connectionRetryStrategyBuilder_.dispose(); - connectionRetryStrategyBuilder_ = null; - } - onChanged(); - return this; - } - - /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder - getConnectionRetryStrategyBuilder() { - bitField0_ |= 0x00000040; - onChanged(); - return getConnectionRetryStrategyFieldBuilder().getBuilder(); - } - - /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder - getConnectionRetryStrategyOrBuilder() { - if (connectionRetryStrategyBuilder_ != null) { - return connectionRetryStrategyBuilder_.getMessageOrBuilder(); - } else { - return connectionRetryStrategy_ == null - ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - .getDefaultInstance() - : connectionRetryStrategy_; - } - } - - /** .connection_request.ConnectionRetryStrategy connection_retry_strategy = 7; */ - private com.google.protobuf.SingleFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy, - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder, - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder> - getConnectionRetryStrategyFieldBuilder() { - if (connectionRetryStrategyBuilder_ == null) { - connectionRetryStrategyBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy, - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder, - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder>( - getConnectionRetryStrategy(), getParentForChildren(), isClean()); - connectionRetryStrategy_ = null; - } - return connectionRetryStrategyBuilder_; - } - - private connection_request.ConnectionRequestOuterClass.AuthenticationInfo authenticationInfo_; - private com.google.protobuf.SingleFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.AuthenticationInfo, - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder, - connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder> - authenticationInfoBuilder_; - - /** - * .connection_request.AuthenticationInfo authentication_info = 8; - * - * @return Whether the authenticationInfo field is set. - */ - public boolean hasAuthenticationInfo() { - return ((bitField0_ & 0x00000080) != 0); - } - - /** - * .connection_request.AuthenticationInfo authentication_info = 8; - * - * @return The authenticationInfo. - */ - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo - getAuthenticationInfo() { - if (authenticationInfoBuilder_ == null) { - return authenticationInfo_ == null - ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo - .getDefaultInstance() - : authenticationInfo_; - } else { - return authenticationInfoBuilder_.getMessage(); - } - } - - /** .connection_request.AuthenticationInfo authentication_info = 8; */ - public Builder setAuthenticationInfo( - connection_request.ConnectionRequestOuterClass.AuthenticationInfo value) { - if (authenticationInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - authenticationInfo_ = value; - } else { - authenticationInfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00000080; - onChanged(); - return this; - } - - /** .connection_request.AuthenticationInfo authentication_info = 8; */ - public Builder setAuthenticationInfo( - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder - builderForValue) { - if (authenticationInfoBuilder_ == null) { - authenticationInfo_ = builderForValue.build(); - } else { - authenticationInfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000080; - onChanged(); - return this; - } - - /** .connection_request.AuthenticationInfo authentication_info = 8; */ - public Builder mergeAuthenticationInfo( - connection_request.ConnectionRequestOuterClass.AuthenticationInfo value) { - if (authenticationInfoBuilder_ == null) { - if (((bitField0_ & 0x00000080) != 0) - && authenticationInfo_ != null - && authenticationInfo_ - != connection_request.ConnectionRequestOuterClass.AuthenticationInfo - .getDefaultInstance()) { - getAuthenticationInfoBuilder().mergeFrom(value); - } else { - authenticationInfo_ = value; - } - } else { - authenticationInfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000080; - onChanged(); - return this; - } - - /** .connection_request.AuthenticationInfo authentication_info = 8; */ - public Builder clearAuthenticationInfo() { - bitField0_ = (bitField0_ & ~0x00000080); - authenticationInfo_ = null; - if (authenticationInfoBuilder_ != null) { - authenticationInfoBuilder_.dispose(); - authenticationInfoBuilder_ = null; - } - onChanged(); - return this; - } - - /** .connection_request.AuthenticationInfo authentication_info = 8; */ - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder - getAuthenticationInfoBuilder() { - bitField0_ |= 0x00000080; - onChanged(); - return getAuthenticationInfoFieldBuilder().getBuilder(); - } - - /** .connection_request.AuthenticationInfo authentication_info = 8; */ - public connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder - getAuthenticationInfoOrBuilder() { - if (authenticationInfoBuilder_ != null) { - return authenticationInfoBuilder_.getMessageOrBuilder(); - } else { - return authenticationInfo_ == null - ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo - .getDefaultInstance() - : authenticationInfo_; - } - } - - /** .connection_request.AuthenticationInfo authentication_info = 8; */ - private com.google.protobuf.SingleFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.AuthenticationInfo, - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder, - connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder> - getAuthenticationInfoFieldBuilder() { - if (authenticationInfoBuilder_ == null) { - authenticationInfoBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.AuthenticationInfo, - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder, - connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder>( - getAuthenticationInfo(), getParentForChildren(), isClean()); - authenticationInfo_ = null; - } - return authenticationInfoBuilder_; - } - - private int databaseId_; - - /** - * uint32 database_id = 9; - * - * @return The databaseId. - */ - @java.lang.Override - public int getDatabaseId() { - return databaseId_; - } - - /** - * uint32 database_id = 9; - * - * @param value The databaseId to set. - * @return This builder for chaining. - */ - public Builder setDatabaseId(int value) { - - databaseId_ = value; - bitField0_ |= 0x00000100; - onChanged(); - return this; - } - - /** - * uint32 database_id = 9; - * - * @return This builder for chaining. - */ - public Builder clearDatabaseId() { - bitField0_ = (bitField0_ & ~0x00000100); - databaseId_ = 0; - onChanged(); - return this; - } - - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:connection_request.ConnectionRequest) - } - - // @@protoc_insertion_point(class_scope:connection_request.ConnectionRequest) - private static final connection_request.ConnectionRequestOuterClass.ConnectionRequest - DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.ConnectionRequest(); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest - getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public ConnectionRequest parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException() - .setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRequest - getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - } - - public interface ConnectionRetryStrategyOrBuilder - extends - // @@protoc_insertion_point(interface_extends:connection_request.ConnectionRetryStrategy) - com.google.protobuf.MessageOrBuilder { - - /** - * uint32 number_of_retries = 1; - * - * @return The numberOfRetries. - */ - int getNumberOfRetries(); - - /** - * uint32 factor = 2; - * - * @return The factor. - */ - int getFactor(); - - /** - * uint32 exponent_base = 3; - * - * @return The exponentBase. - */ - int getExponentBase(); - } - - /** Protobuf type {@code connection_request.ConnectionRetryStrategy} */ - public static final class ConnectionRetryStrategy extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:connection_request.ConnectionRetryStrategy) - ConnectionRetryStrategyOrBuilder { - private static final long serialVersionUID = 0L; - - // Use ConnectionRetryStrategy.newBuilder() to construct. - private ConnectionRetryStrategy(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private ConnectionRetryStrategy() {} - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ConnectionRetryStrategy(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_ConnectionRetryStrategy_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.class, - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder.class); - } - - public static final int NUMBER_OF_RETRIES_FIELD_NUMBER = 1; - private int numberOfRetries_ = 0; - - /** - * uint32 number_of_retries = 1; - * - * @return The numberOfRetries. - */ - @java.lang.Override - public int getNumberOfRetries() { - return numberOfRetries_; - } - - public static final int FACTOR_FIELD_NUMBER = 2; - private int factor_ = 0; - - /** - * uint32 factor = 2; - * - * @return The factor. - */ - @java.lang.Override - public int getFactor() { - return factor_; - } - - public static final int EXPONENT_BASE_FIELD_NUMBER = 3; - private int exponentBase_ = 0; - - /** - * uint32 exponent_base = 3; - * - * @return The exponentBase. - */ - @java.lang.Override - public int getExponentBase() { - return exponentBase_; - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (numberOfRetries_ != 0) { - output.writeUInt32(1, numberOfRetries_); - } - if (factor_ != 0) { - output.writeUInt32(2, factor_); - } - if (exponentBase_ != 0) { - output.writeUInt32(3, exponentBase_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (numberOfRetries_ != 0) { - size += com.google.protobuf.CodedOutputStream.computeUInt32Size(1, numberOfRetries_); - } - if (factor_ != 0) { - size += com.google.protobuf.CodedOutputStream.computeUInt32Size(2, factor_); - } - if (exponentBase_ != 0) { - size += com.google.protobuf.CodedOutputStream.computeUInt32Size(3, exponentBase_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj - instanceof connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy)) { - return super.equals(obj); - } - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy other = - (connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy) obj; - - if (getNumberOfRetries() != other.getNumberOfRetries()) return false; - if (getFactor() != other.getFactor()) return false; - if (getExponentBase() != other.getExponentBase()) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + NUMBER_OF_RETRIES_FIELD_NUMBER; - hash = (53 * hash) + getNumberOfRetries(); - hash = (37 * hash) + FACTOR_FIELD_NUMBER; - hash = (53 * hash) + getFactor(); - hash = (37 * hash) + EXPONENT_BASE_FIELD_NUMBER; - hash = (53 * hash) + getExponentBase(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder( - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - - /** Protobuf type {@code connection_request.ConnectionRetryStrategy} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:connection_request.ConnectionRetryStrategy) - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_ConnectionRetryStrategy_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.class, - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder - .class); - } - - // Construct using - // connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - numberOfRetries_ = 0; - factor_ = 0; - exponentBase_ = 0; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return connection_request.ConnectionRequestOuterClass - .internal_static_connection_request_ConnectionRetryStrategy_descriptor; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - getDefaultInstanceForType() { - return connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - .getDefaultInstance(); - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy build() { - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy result = - buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy buildPartial() { - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy result = - new connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy(this); - if (bitField0_ != 0) { - buildPartial0(result); - } - onBuilt(); - return result; - } - - private void buildPartial0( - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.numberOfRetries_ = numberOfRetries_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.factor_ = factor_; - } - if (((from_bitField0_ & 0x00000004) != 0)) { - result.exponentBase_ = exponentBase_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other - instanceof connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy) { - return mergeFrom( - (connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom( - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy other) { - if (other - == connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - .getDefaultInstance()) return this; - if (other.getNumberOfRetries() != 0) { - setNumberOfRetries(other.getNumberOfRetries()); - } - if (other.getFactor() != 0) { - setFactor(other.getFactor()); - } - if (other.getExponentBase() != 0) { - setExponentBase(other.getExponentBase()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: - { - numberOfRetries_ = input.readUInt32(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 16: - { - factor_ = input.readUInt32(); - bitField0_ |= 0x00000002; - break; - } // case 16 - case 24: - { - exponentBase_ = input.readUInt32(); - bitField0_ |= 0x00000004; - break; - } // case 24 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int bitField0_; - - private int numberOfRetries_; - - /** - * uint32 number_of_retries = 1; - * - * @return The numberOfRetries. - */ - @java.lang.Override - public int getNumberOfRetries() { - return numberOfRetries_; - } - - /** - * uint32 number_of_retries = 1; - * - * @param value The numberOfRetries to set. - * @return This builder for chaining. - */ - public Builder setNumberOfRetries(int value) { - - numberOfRetries_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - /** - * uint32 number_of_retries = 1; - * - * @return This builder for chaining. - */ - public Builder clearNumberOfRetries() { - bitField0_ = (bitField0_ & ~0x00000001); - numberOfRetries_ = 0; - onChanged(); - return this; - } - - private int factor_; - - /** - * uint32 factor = 2; - * - * @return The factor. - */ - @java.lang.Override - public int getFactor() { - return factor_; - } - - /** - * uint32 factor = 2; - * - * @param value The factor to set. - * @return This builder for chaining. - */ - public Builder setFactor(int value) { - - factor_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - - /** - * uint32 factor = 2; - * - * @return This builder for chaining. - */ - public Builder clearFactor() { - bitField0_ = (bitField0_ & ~0x00000002); - factor_ = 0; - onChanged(); - return this; - } - - private int exponentBase_; - - /** - * uint32 exponent_base = 3; - * - * @return The exponentBase. - */ - @java.lang.Override - public int getExponentBase() { - return exponentBase_; - } - - /** - * uint32 exponent_base = 3; - * - * @param value The exponentBase to set. - * @return This builder for chaining. - */ - public Builder setExponentBase(int value) { - - exponentBase_ = value; - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - - /** - * uint32 exponent_base = 3; - * - * @return This builder for chaining. - */ - public Builder clearExponentBase() { - bitField0_ = (bitField0_ & ~0x00000004); - exponentBase_ = 0; - onChanged(); - return this; - } - - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:connection_request.ConnectionRetryStrategy) - } - - // @@protoc_insertion_point(class_scope:connection_request.ConnectionRetryStrategy) - private static final connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = - new connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy(); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public ConnectionRetryStrategy parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException() - .setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy - getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_connection_request_AddressInfo_descriptor; - private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_connection_request_AddressInfo_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_connection_request_AuthenticationInfo_descriptor; - private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_connection_request_AuthenticationInfo_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_connection_request_ConnectionRequest_descriptor; - private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_connection_request_ConnectionRequest_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_connection_request_ConnectionRetryStrategy_descriptor; - private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { - return descriptor; - } - - private static com.google.protobuf.Descriptors.FileDescriptor descriptor; - - static { - java.lang.String[] descriptorData = { - "\n\030connection_request.proto\022\022connection_r" - + "equest\")\n\013AddressInfo\022\014\n\004host\030\001 \001(\t\022\014\n\004p" - + "ort\030\002 \001(\r\"8\n\022AuthenticationInfo\022\020\n\010passw" - + "ord\030\001 \001(\t\022\020\n\010username\030\002 \001(\t\"\312\003\n\021Connecti" - + "onRequest\0222\n\taddresses\030\001 \003(\0132\037.connectio" - + "n_request.AddressInfo\022-\n\010tls_mode\030\002 \001(\0162" - + "\033.connection_request.TlsMode\022\034\n\024cluster_" - + "mode_enabled\030\003 \001(\010\022\030\n\020response_timeout\030\004" - + " \001(\r\022\037\n\027client_creation_timeout\030\005 \001(\r\022O\n" - + "\032read_from_replica_strategy\030\006 \001(\0162+.conn" - + "ection_request.ReadFromReplicaStrategy\022N" - + "\n\031connection_retry_strategy\030\007 \001(\0132+.conn" - + "ection_request.ConnectionRetryStrategy\022C" - + "\n\023authentication_info\030\010 \001(\0132&.connection" - + "_request.AuthenticationInfo\022\023\n\013database_" - + "id\030\t \001(\r\"[\n\027ConnectionRetryStrategy\022\031\n\021n" - + "umber_of_retries\030\001 \001(\r\022\016\n\006factor\030\002 \001(\r\022\025" - + "\n\rexponent_base\030\003 \001(\r*c\n\027ReadFromReplica" - + "Strategy\022\025\n\021AlwaysFromPrimary\020\000\022\016\n\nRound" - + "Robin\020\001\022\021\n\rLowestLatency\020\002\022\016\n\nAZAffinity" - + "\020\003*4\n\007TlsMode\022\t\n\005NoTls\020\000\022\r\n\tSecureTls\020\001\022" - + "\017\n\013InsecureTls\020\002b\006proto3" - }; - descriptor = - com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( - descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {}); - internal_static_connection_request_AddressInfo_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_connection_request_AddressInfo_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_connection_request_AddressInfo_descriptor, - new java.lang.String[] { - "Host", "Port", - }); - internal_static_connection_request_AuthenticationInfo_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_connection_request_AuthenticationInfo_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_connection_request_AuthenticationInfo_descriptor, - new java.lang.String[] { - "Password", "Username", - }); - internal_static_connection_request_ConnectionRequest_descriptor = - getDescriptor().getMessageTypes().get(2); - internal_static_connection_request_ConnectionRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_connection_request_ConnectionRequest_descriptor, - new java.lang.String[] { - "Addresses", - "TlsMode", - "ClusterModeEnabled", - "ResponseTimeout", - "ClientCreationTimeout", - "ReadFromReplicaStrategy", - "ConnectionRetryStrategy", - "AuthenticationInfo", - "DatabaseId", - }); - internal_static_connection_request_ConnectionRetryStrategy_descriptor = - getDescriptor().getMessageTypes().get(3); - internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_connection_request_ConnectionRetryStrategy_descriptor, - new java.lang.String[] { - "NumberOfRetries", "Factor", "ExponentBase", - }); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/java/benchmarks/src/main/java/javababushka/client/RedisClient.java b/java/benchmarks/src/main/java/javababushka/client/RedisClient.java deleted file mode 100644 index 423f1a9992..0000000000 --- a/java/benchmarks/src/main/java/javababushka/client/RedisClient.java +++ /dev/null @@ -1,29 +0,0 @@ -package javababushka.client; - -public class RedisClient { - public static native void startSocketListenerExternal(RedisClient callback); - - public static native String startSocketListenerExternal() throws Exception; - - public static native Object valueFromPointer(long pointer); - - static { - System.loadLibrary("javababushka"); - } - - public String socketPath; - - public void startSocketListener(RedisClient client) { - client.startSocketListenerExternal(client); - } - - public void initCallback(String socketPath, String errorMessage) throws Exception { - if (errorMessage != null) { - throw new Exception("Failed to initialize the socket connection: " + errorMessage); - } else if (socketPath == null) { - throw new Exception("Received null as the socketPath"); - } else { - this.socketPath = socketPath; - } - } -} diff --git a/java/benchmarks/src/main/java/javababushka/client/RedisRequestOuterClass.java b/java/benchmarks/src/main/java/javababushka/client/RedisRequestOuterClass.java deleted file mode 100644 index 3b5022e1bb..0000000000 --- a/java/benchmarks/src/main/java/javababushka/client/RedisRequestOuterClass.java +++ /dev/null @@ -1,6972 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: redis_request.proto - -package redis_request; - -public final class RedisRequestOuterClass { - private RedisRequestOuterClass() {} - - public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} - - public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); - } - - /** Protobuf enum {@code redis_request.SimpleRoutes} */ - public enum SimpleRoutes implements com.google.protobuf.ProtocolMessageEnum { - /** AllNodes = 0; */ - AllNodes(0), - /** AllPrimaries = 1; */ - AllPrimaries(1), - /** Random = 2; */ - Random(2), - UNRECOGNIZED(-1), - ; - - /** AllNodes = 0; */ - public static final int AllNodes_VALUE = 0; - - /** AllPrimaries = 1; */ - public static final int AllPrimaries_VALUE = 1; - - /** Random = 2; */ - public static final int Random_VALUE = 2; - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static SimpleRoutes valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static SimpleRoutes forNumber(int value) { - switch (value) { - case 0: - return AllNodes; - case 1: - return AllPrimaries; - case 2: - return Random; - default: - return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { - return internalValueMap; - } - - private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public SimpleRoutes findValueByNumber(int number) { - return SimpleRoutes.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - - public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { - return getDescriptor(); - } - - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return redis_request.RedisRequestOuterClass.getDescriptor().getEnumTypes().get(0); - } - - private static final SimpleRoutes[] VALUES = values(); - - public static SimpleRoutes valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private SimpleRoutes(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:redis_request.SimpleRoutes) - } - - /** Protobuf enum {@code redis_request.SlotTypes} */ - public enum SlotTypes implements com.google.protobuf.ProtocolMessageEnum { - /** Primary = 0; */ - Primary(0), - /** Replica = 1; */ - Replica(1), - UNRECOGNIZED(-1), - ; - - /** Primary = 0; */ - public static final int Primary_VALUE = 0; - - /** Replica = 1; */ - public static final int Replica_VALUE = 1; - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static SlotTypes valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static SlotTypes forNumber(int value) { - switch (value) { - case 0: - return Primary; - case 1: - return Replica; - default: - return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { - return internalValueMap; - } - - private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public SlotTypes findValueByNumber(int number) { - return SlotTypes.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - - public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { - return getDescriptor(); - } - - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return redis_request.RedisRequestOuterClass.getDescriptor().getEnumTypes().get(1); - } - - private static final SlotTypes[] VALUES = values(); - - public static SlotTypes valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private SlotTypes(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:redis_request.SlotTypes) - } - - /** Protobuf enum {@code redis_request.RequestType} */ - public enum RequestType implements com.google.protobuf.ProtocolMessageEnum { - /** - * - * - *
-     * / Invalid request type
-     * 
- * - * InvalidRequest = 0; - */ - InvalidRequest(0), - /** - * - * - *
-     * / An unknown command, where all arguments are defined by the user.
-     * 
- * - * CustomCommand = 1; - */ - CustomCommand(1), - /** - * - * - *
-     * / Type of a get string request.
-     * 
- * - * GetString = 2; - */ - GetString(2), - /** - * - * - *
-     * / Type of a set string request.
-     * 
- * - * SetString = 3; - */ - SetString(3), - /** Ping = 4; */ - Ping(4), - /** Info = 5; */ - Info(5), - /** Del = 6; */ - Del(6), - /** Select = 7; */ - Select(7), - /** ConfigGet = 8; */ - ConfigGet(8), - /** ConfigSet = 9; */ - ConfigSet(9), - /** ConfigResetStat = 10; */ - ConfigResetStat(10), - /** ConfigRewrite = 11; */ - ConfigRewrite(11), - /** ClientGetName = 12; */ - ClientGetName(12), - /** ClientGetRedir = 13; */ - ClientGetRedir(13), - /** ClientId = 14; */ - ClientId(14), - /** ClientInfo = 15; */ - ClientInfo(15), - /** ClientKill = 16; */ - ClientKill(16), - /** ClientList = 17; */ - ClientList(17), - /** ClientNoEvict = 18; */ - ClientNoEvict(18), - /** ClientNoTouch = 19; */ - ClientNoTouch(19), - /** ClientPause = 20; */ - ClientPause(20), - /** ClientReply = 21; */ - ClientReply(21), - /** ClientSetInfo = 22; */ - ClientSetInfo(22), - /** ClientSetName = 23; */ - ClientSetName(23), - /** ClientUnblock = 24; */ - ClientUnblock(24), - /** ClientUnpause = 25; */ - ClientUnpause(25), - /** Expire = 26; */ - Expire(26), - /** HashSet = 27; */ - HashSet(27), - /** HashGet = 28; */ - HashGet(28), - /** HashDel = 29; */ - HashDel(29), - /** HashExists = 30; */ - HashExists(30), - /** MGet = 31; */ - MGet(31), - /** MSet = 32; */ - MSet(32), - /** Incr = 33; */ - Incr(33), - /** IncrBy = 34; */ - IncrBy(34), - /** Decr = 35; */ - Decr(35), - /** IncrByFloat = 36; */ - IncrByFloat(36), - /** DecrBy = 37; */ - DecrBy(37), - UNRECOGNIZED(-1), - ; - - /** - * - * - *
-     * / Invalid request type
-     * 
- * - * InvalidRequest = 0; - */ - public static final int InvalidRequest_VALUE = 0; - - /** - * - * - *
-     * / An unknown command, where all arguments are defined by the user.
-     * 
- * - * CustomCommand = 1; - */ - public static final int CustomCommand_VALUE = 1; - - /** - * - * - *
-     * / Type of a get string request.
-     * 
- * - * GetString = 2; - */ - public static final int GetString_VALUE = 2; - - /** - * - * - *
-     * / Type of a set string request.
-     * 
- * - * SetString = 3; - */ - public static final int SetString_VALUE = 3; - - /** Ping = 4; */ - public static final int Ping_VALUE = 4; - - /** Info = 5; */ - public static final int Info_VALUE = 5; - - /** Del = 6; */ - public static final int Del_VALUE = 6; - - /** Select = 7; */ - public static final int Select_VALUE = 7; - - /** ConfigGet = 8; */ - public static final int ConfigGet_VALUE = 8; - - /** ConfigSet = 9; */ - public static final int ConfigSet_VALUE = 9; - - /** ConfigResetStat = 10; */ - public static final int ConfigResetStat_VALUE = 10; - - /** ConfigRewrite = 11; */ - public static final int ConfigRewrite_VALUE = 11; - - /** ClientGetName = 12; */ - public static final int ClientGetName_VALUE = 12; - - /** ClientGetRedir = 13; */ - public static final int ClientGetRedir_VALUE = 13; - - /** ClientId = 14; */ - public static final int ClientId_VALUE = 14; - - /** ClientInfo = 15; */ - public static final int ClientInfo_VALUE = 15; - - /** ClientKill = 16; */ - public static final int ClientKill_VALUE = 16; - - /** ClientList = 17; */ - public static final int ClientList_VALUE = 17; - - /** ClientNoEvict = 18; */ - public static final int ClientNoEvict_VALUE = 18; - - /** ClientNoTouch = 19; */ - public static final int ClientNoTouch_VALUE = 19; - - /** ClientPause = 20; */ - public static final int ClientPause_VALUE = 20; - - /** ClientReply = 21; */ - public static final int ClientReply_VALUE = 21; - - /** ClientSetInfo = 22; */ - public static final int ClientSetInfo_VALUE = 22; - - /** ClientSetName = 23; */ - public static final int ClientSetName_VALUE = 23; - - /** ClientUnblock = 24; */ - public static final int ClientUnblock_VALUE = 24; - - /** ClientUnpause = 25; */ - public static final int ClientUnpause_VALUE = 25; - - /** Expire = 26; */ - public static final int Expire_VALUE = 26; - - /** HashSet = 27; */ - public static final int HashSet_VALUE = 27; - - /** HashGet = 28; */ - public static final int HashGet_VALUE = 28; - - /** HashDel = 29; */ - public static final int HashDel_VALUE = 29; - - /** HashExists = 30; */ - public static final int HashExists_VALUE = 30; - - /** MGet = 31; */ - public static final int MGet_VALUE = 31; - - /** MSet = 32; */ - public static final int MSet_VALUE = 32; - - /** Incr = 33; */ - public static final int Incr_VALUE = 33; - - /** IncrBy = 34; */ - public static final int IncrBy_VALUE = 34; - - /** Decr = 35; */ - public static final int Decr_VALUE = 35; - - /** IncrByFloat = 36; */ - public static final int IncrByFloat_VALUE = 36; - - /** DecrBy = 37; */ - public static final int DecrBy_VALUE = 37; - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static RequestType valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static RequestType forNumber(int value) { - switch (value) { - case 0: - return InvalidRequest; - case 1: - return CustomCommand; - case 2: - return GetString; - case 3: - return SetString; - case 4: - return Ping; - case 5: - return Info; - case 6: - return Del; - case 7: - return Select; - case 8: - return ConfigGet; - case 9: - return ConfigSet; - case 10: - return ConfigResetStat; - case 11: - return ConfigRewrite; - case 12: - return ClientGetName; - case 13: - return ClientGetRedir; - case 14: - return ClientId; - case 15: - return ClientInfo; - case 16: - return ClientKill; - case 17: - return ClientList; - case 18: - return ClientNoEvict; - case 19: - return ClientNoTouch; - case 20: - return ClientPause; - case 21: - return ClientReply; - case 22: - return ClientSetInfo; - case 23: - return ClientSetName; - case 24: - return ClientUnblock; - case 25: - return ClientUnpause; - case 26: - return Expire; - case 27: - return HashSet; - case 28: - return HashGet; - case 29: - return HashDel; - case 30: - return HashExists; - case 31: - return MGet; - case 32: - return MSet; - case 33: - return Incr; - case 34: - return IncrBy; - case 35: - return Decr; - case 36: - return IncrByFloat; - case 37: - return DecrBy; - default: - return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { - return internalValueMap; - } - - private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RequestType findValueByNumber(int number) { - return RequestType.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - - public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { - return getDescriptor(); - } - - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return redis_request.RedisRequestOuterClass.getDescriptor().getEnumTypes().get(2); - } - - private static final RequestType[] VALUES = values(); - - public static RequestType valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private RequestType(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:redis_request.RequestType) - } - - public interface SlotIdRouteOrBuilder - extends - // @@protoc_insertion_point(interface_extends:redis_request.SlotIdRoute) - com.google.protobuf.MessageOrBuilder { - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return The enum numeric value on the wire for slotType. - */ - int getSlotTypeValue(); - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return The slotType. - */ - redis_request.RedisRequestOuterClass.SlotTypes getSlotType(); - - /** - * int32 slot_id = 2; - * - * @return The slotId. - */ - int getSlotId(); - } - - /** Protobuf type {@code redis_request.SlotIdRoute} */ - public static final class SlotIdRoute extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:redis_request.SlotIdRoute) - SlotIdRouteOrBuilder { - private static final long serialVersionUID = 0L; - - // Use SlotIdRoute.newBuilder() to construct. - private SlotIdRoute(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private SlotIdRoute() { - slotType_ = 0; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new SlotIdRoute(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_SlotIdRoute_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_SlotIdRoute_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.SlotIdRoute.class, - redis_request.RedisRequestOuterClass.SlotIdRoute.Builder.class); - } - - public static final int SLOT_TYPE_FIELD_NUMBER = 1; - private int slotType_ = 0; - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return The enum numeric value on the wire for slotType. - */ - @java.lang.Override - public int getSlotTypeValue() { - return slotType_; - } - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return The slotType. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { - redis_request.RedisRequestOuterClass.SlotTypes result = - redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); - return result == null ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED : result; - } - - public static final int SLOT_ID_FIELD_NUMBER = 2; - private int slotId_ = 0; - - /** - * int32 slot_id = 2; - * - * @return The slotId. - */ - @java.lang.Override - public int getSlotId() { - return slotId_; - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { - output.writeEnum(1, slotType_); - } - if (slotId_ != 0) { - output.writeInt32(2, slotId_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { - size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, slotType_); - } - if (slotId_ != 0) { - size += com.google.protobuf.CodedOutputStream.computeInt32Size(2, slotId_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.SlotIdRoute)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.SlotIdRoute other = - (redis_request.RedisRequestOuterClass.SlotIdRoute) obj; - - if (slotType_ != other.slotType_) return false; - if (getSlotId() != other.getSlotId()) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + SLOT_TYPE_FIELD_NUMBER; - hash = (53 * hash) + slotType_; - hash = (37 * hash) + SLOT_ID_FIELD_NUMBER; - hash = (53 * hash) + getSlotId(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseDelimitedFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder(redis_request.RedisRequestOuterClass.SlotIdRoute prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - - /** Protobuf type {@code redis_request.SlotIdRoute} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:redis_request.SlotIdRoute) - redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_SlotIdRoute_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_SlotIdRoute_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.SlotIdRoute.class, - redis_request.RedisRequestOuterClass.SlotIdRoute.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.SlotIdRoute.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - slotType_ = 0; - slotId_ = 0; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_SlotIdRoute_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRoute getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRoute build() { - redis_request.RedisRequestOuterClass.SlotIdRoute result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRoute buildPartial() { - redis_request.RedisRequestOuterClass.SlotIdRoute result = - new redis_request.RedisRequestOuterClass.SlotIdRoute(this); - if (bitField0_ != 0) { - buildPartial0(result); - } - onBuilt(); - return result; - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.SlotIdRoute result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.slotType_ = slotType_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.slotId_ = slotId_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.SlotIdRoute) { - return mergeFrom((redis_request.RedisRequestOuterClass.SlotIdRoute) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.SlotIdRoute other) { - if (other == redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance()) - return this; - if (other.slotType_ != 0) { - setSlotTypeValue(other.getSlotTypeValue()); - } - if (other.getSlotId() != 0) { - setSlotId(other.getSlotId()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: - { - slotType_ = input.readEnum(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 16: - { - slotId_ = input.readInt32(); - bitField0_ |= 0x00000002; - break; - } // case 16 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int bitField0_; - - private int slotType_ = 0; - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return The enum numeric value on the wire for slotType. - */ - @java.lang.Override - public int getSlotTypeValue() { - return slotType_; - } - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @param value The enum numeric value on the wire for slotType to set. - * @return This builder for chaining. - */ - public Builder setSlotTypeValue(int value) { - slotType_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return The slotType. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { - redis_request.RedisRequestOuterClass.SlotTypes result = - redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); - return result == null - ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED - : result; - } - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @param value The slotType to set. - * @return This builder for chaining. - */ - public Builder setSlotType(redis_request.RedisRequestOuterClass.SlotTypes value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - slotType_ = value.getNumber(); - onChanged(); - return this; - } - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return This builder for chaining. - */ - public Builder clearSlotType() { - bitField0_ = (bitField0_ & ~0x00000001); - slotType_ = 0; - onChanged(); - return this; - } - - private int slotId_; - - /** - * int32 slot_id = 2; - * - * @return The slotId. - */ - @java.lang.Override - public int getSlotId() { - return slotId_; - } - - /** - * int32 slot_id = 2; - * - * @param value The slotId to set. - * @return This builder for chaining. - */ - public Builder setSlotId(int value) { - - slotId_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - - /** - * int32 slot_id = 2; - * - * @return This builder for chaining. - */ - public Builder clearSlotId() { - bitField0_ = (bitField0_ & ~0x00000002); - slotId_ = 0; - onChanged(); - return this; - } - - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:redis_request.SlotIdRoute) - } - - // @@protoc_insertion_point(class_scope:redis_request.SlotIdRoute) - private static final redis_request.RedisRequestOuterClass.SlotIdRoute DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.SlotIdRoute(); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public SlotIdRoute parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException() - .setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRoute getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - } - - public interface SlotKeyRouteOrBuilder - extends - // @@protoc_insertion_point(interface_extends:redis_request.SlotKeyRoute) - com.google.protobuf.MessageOrBuilder { - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return The enum numeric value on the wire for slotType. - */ - int getSlotTypeValue(); - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return The slotType. - */ - redis_request.RedisRequestOuterClass.SlotTypes getSlotType(); - - /** - * string slot_key = 2; - * - * @return The slotKey. - */ - java.lang.String getSlotKey(); - - /** - * string slot_key = 2; - * - * @return The bytes for slotKey. - */ - com.google.protobuf.ByteString getSlotKeyBytes(); - } - - /** Protobuf type {@code redis_request.SlotKeyRoute} */ - public static final class SlotKeyRoute extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:redis_request.SlotKeyRoute) - SlotKeyRouteOrBuilder { - private static final long serialVersionUID = 0L; - - // Use SlotKeyRoute.newBuilder() to construct. - private SlotKeyRoute(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private SlotKeyRoute() { - slotType_ = 0; - slotKey_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new SlotKeyRoute(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_SlotKeyRoute_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_SlotKeyRoute_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.SlotKeyRoute.class, - redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder.class); - } - - public static final int SLOT_TYPE_FIELD_NUMBER = 1; - private int slotType_ = 0; - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return The enum numeric value on the wire for slotType. - */ - @java.lang.Override - public int getSlotTypeValue() { - return slotType_; - } - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return The slotType. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { - redis_request.RedisRequestOuterClass.SlotTypes result = - redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); - return result == null ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED : result; - } - - public static final int SLOT_KEY_FIELD_NUMBER = 2; - - @SuppressWarnings("serial") - private volatile java.lang.Object slotKey_ = ""; - - /** - * string slot_key = 2; - * - * @return The slotKey. - */ - @java.lang.Override - public java.lang.String getSlotKey() { - java.lang.Object ref = slotKey_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - slotKey_ = s; - return s; - } - } - - /** - * string slot_key = 2; - * - * @return The bytes for slotKey. - */ - @java.lang.Override - public com.google.protobuf.ByteString getSlotKeyBytes() { - java.lang.Object ref = slotKey_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - slotKey_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { - output.writeEnum(1, slotType_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(slotKey_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, slotKey_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { - size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, slotType_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(slotKey_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, slotKey_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.SlotKeyRoute)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.SlotKeyRoute other = - (redis_request.RedisRequestOuterClass.SlotKeyRoute) obj; - - if (slotType_ != other.slotType_) return false; - if (!getSlotKey().equals(other.getSlotKey())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + SLOT_TYPE_FIELD_NUMBER; - hash = (53 * hash) + slotType_; - hash = (37 * hash) + SLOT_KEY_FIELD_NUMBER; - hash = (53 * hash) + getSlotKey().hashCode(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseDelimitedFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder(redis_request.RedisRequestOuterClass.SlotKeyRoute prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - - /** Protobuf type {@code redis_request.SlotKeyRoute} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:redis_request.SlotKeyRoute) - redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_SlotKeyRoute_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_SlotKeyRoute_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.SlotKeyRoute.class, - redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.SlotKeyRoute.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - slotType_ = 0; - slotKey_ = ""; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_SlotKeyRoute_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRoute getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRoute build() { - redis_request.RedisRequestOuterClass.SlotKeyRoute result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRoute buildPartial() { - redis_request.RedisRequestOuterClass.SlotKeyRoute result = - new redis_request.RedisRequestOuterClass.SlotKeyRoute(this); - if (bitField0_ != 0) { - buildPartial0(result); - } - onBuilt(); - return result; - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.SlotKeyRoute result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.slotType_ = slotType_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.slotKey_ = slotKey_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.SlotKeyRoute) { - return mergeFrom((redis_request.RedisRequestOuterClass.SlotKeyRoute) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.SlotKeyRoute other) { - if (other == redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance()) - return this; - if (other.slotType_ != 0) { - setSlotTypeValue(other.getSlotTypeValue()); - } - if (!other.getSlotKey().isEmpty()) { - slotKey_ = other.slotKey_; - bitField0_ |= 0x00000002; - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: - { - slotType_ = input.readEnum(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 18: - { - slotKey_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000002; - break; - } // case 18 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int bitField0_; - - private int slotType_ = 0; - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return The enum numeric value on the wire for slotType. - */ - @java.lang.Override - public int getSlotTypeValue() { - return slotType_; - } - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @param value The enum numeric value on the wire for slotType to set. - * @return This builder for chaining. - */ - public Builder setSlotTypeValue(int value) { - slotType_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return The slotType. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { - redis_request.RedisRequestOuterClass.SlotTypes result = - redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); - return result == null - ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED - : result; - } - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @param value The slotType to set. - * @return This builder for chaining. - */ - public Builder setSlotType(redis_request.RedisRequestOuterClass.SlotTypes value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - slotType_ = value.getNumber(); - onChanged(); - return this; - } - - /** - * .redis_request.SlotTypes slot_type = 1; - * - * @return This builder for chaining. - */ - public Builder clearSlotType() { - bitField0_ = (bitField0_ & ~0x00000001); - slotType_ = 0; - onChanged(); - return this; - } - - private java.lang.Object slotKey_ = ""; - - /** - * string slot_key = 2; - * - * @return The slotKey. - */ - public java.lang.String getSlotKey() { - java.lang.Object ref = slotKey_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - slotKey_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - - /** - * string slot_key = 2; - * - * @return The bytes for slotKey. - */ - public com.google.protobuf.ByteString getSlotKeyBytes() { - java.lang.Object ref = slotKey_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - slotKey_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - /** - * string slot_key = 2; - * - * @param value The slotKey to set. - * @return This builder for chaining. - */ - public Builder setSlotKey(java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - slotKey_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - - /** - * string slot_key = 2; - * - * @return This builder for chaining. - */ - public Builder clearSlotKey() { - slotKey_ = getDefaultInstance().getSlotKey(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - return this; - } - - /** - * string slot_key = 2; - * - * @param value The bytes for slotKey to set. - * @return This builder for chaining. - */ - public Builder setSlotKeyBytes(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - slotKey_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:redis_request.SlotKeyRoute) - } - - // @@protoc_insertion_point(class_scope:redis_request.SlotKeyRoute) - private static final redis_request.RedisRequestOuterClass.SlotKeyRoute DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.SlotKeyRoute(); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public SlotKeyRoute parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException() - .setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRoute getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - } - - public interface RoutesOrBuilder - extends - // @@protoc_insertion_point(interface_extends:redis_request.Routes) - com.google.protobuf.MessageOrBuilder { - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * - * @return Whether the simpleRoutes field is set. - */ - boolean hasSimpleRoutes(); - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * - * @return The enum numeric value on the wire for simpleRoutes. - */ - int getSimpleRoutesValue(); - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * - * @return The simpleRoutes. - */ - redis_request.RedisRequestOuterClass.SimpleRoutes getSimpleRoutes(); - - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - * - * @return Whether the slotKeyRoute field is set. - */ - boolean hasSlotKeyRoute(); - - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - * - * @return The slotKeyRoute. - */ - redis_request.RedisRequestOuterClass.SlotKeyRoute getSlotKeyRoute(); - - /** .redis_request.SlotKeyRoute slot_key_route = 2; */ - redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder getSlotKeyRouteOrBuilder(); - - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - * - * @return Whether the slotIdRoute field is set. - */ - boolean hasSlotIdRoute(); - - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - * - * @return The slotIdRoute. - */ - redis_request.RedisRequestOuterClass.SlotIdRoute getSlotIdRoute(); - - /** .redis_request.SlotIdRoute slot_id_route = 3; */ - redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder getSlotIdRouteOrBuilder(); - - redis_request.RedisRequestOuterClass.Routes.ValueCase getValueCase(); - } - - /** Protobuf type {@code redis_request.Routes} */ - public static final class Routes extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:redis_request.Routes) - RoutesOrBuilder { - private static final long serialVersionUID = 0L; - - // Use Routes.newBuilder() to construct. - private Routes(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private Routes() {} - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Routes(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Routes_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Routes.class, - redis_request.RedisRequestOuterClass.Routes.Builder.class); - } - - private int valueCase_ = 0; - - @SuppressWarnings("serial") - private java.lang.Object value_; - - public enum ValueCase - implements - com.google.protobuf.Internal.EnumLite, - com.google.protobuf.AbstractMessage.InternalOneOfEnum { - SIMPLE_ROUTES(1), - SLOT_KEY_ROUTE(2), - SLOT_ID_ROUTE(3), - VALUE_NOT_SET(0); - private final int value; - - private ValueCase(int value) { - this.value = value; - } - - /** - * @param value The number of the enum to look for. - * @return The enum associated with the given number. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static ValueCase valueOf(int value) { - return forNumber(value); - } - - public static ValueCase forNumber(int value) { - switch (value) { - case 1: - return SIMPLE_ROUTES; - case 2: - return SLOT_KEY_ROUTE; - case 3: - return SLOT_ID_ROUTE; - case 0: - return VALUE_NOT_SET; - default: - return null; - } - } - - public int getNumber() { - return this.value; - } - }; - - public ValueCase getValueCase() { - return ValueCase.forNumber(valueCase_); - } - - public static final int SIMPLE_ROUTES_FIELD_NUMBER = 1; - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * - * @return Whether the simpleRoutes field is set. - */ - public boolean hasSimpleRoutes() { - return valueCase_ == 1; - } - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * - * @return The enum numeric value on the wire for simpleRoutes. - */ - public int getSimpleRoutesValue() { - if (valueCase_ == 1) { - return (java.lang.Integer) value_; - } - return 0; - } - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * - * @return The simpleRoutes. - */ - public redis_request.RedisRequestOuterClass.SimpleRoutes getSimpleRoutes() { - if (valueCase_ == 1) { - redis_request.RedisRequestOuterClass.SimpleRoutes result = - redis_request.RedisRequestOuterClass.SimpleRoutes.forNumber((java.lang.Integer) value_); - return result == null - ? redis_request.RedisRequestOuterClass.SimpleRoutes.UNRECOGNIZED - : result; - } - return redis_request.RedisRequestOuterClass.SimpleRoutes.AllNodes; - } - - public static final int SLOT_KEY_ROUTE_FIELD_NUMBER = 2; - - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - * - * @return Whether the slotKeyRoute field is set. - */ - @java.lang.Override - public boolean hasSlotKeyRoute() { - return valueCase_ == 2; - } - - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - * - * @return The slotKeyRoute. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRoute getSlotKeyRoute() { - if (valueCase_ == 2) { - return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } - - /** .redis_request.SlotKeyRoute slot_key_route = 2; */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder getSlotKeyRouteOrBuilder() { - if (valueCase_ == 2) { - return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } - - public static final int SLOT_ID_ROUTE_FIELD_NUMBER = 3; - - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - * - * @return Whether the slotIdRoute field is set. - */ - @java.lang.Override - public boolean hasSlotIdRoute() { - return valueCase_ == 3; - } - - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - * - * @return The slotIdRoute. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRoute getSlotIdRoute() { - if (valueCase_ == 3) { - return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } - - /** .redis_request.SlotIdRoute slot_id_route = 3; */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder getSlotIdRouteOrBuilder() { - if (valueCase_ == 3) { - return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (valueCase_ == 1) { - output.writeEnum(1, ((java.lang.Integer) value_)); - } - if (valueCase_ == 2) { - output.writeMessage(2, (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_); - } - if (valueCase_ == 3) { - output.writeMessage(3, (redis_request.RedisRequestOuterClass.SlotIdRoute) value_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (valueCase_ == 1) { - size += - com.google.protobuf.CodedOutputStream.computeEnumSize(1, ((java.lang.Integer) value_)); - } - if (valueCase_ == 2) { - size += - com.google.protobuf.CodedOutputStream.computeMessageSize( - 2, (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_); - } - if (valueCase_ == 3) { - size += - com.google.protobuf.CodedOutputStream.computeMessageSize( - 3, (redis_request.RedisRequestOuterClass.SlotIdRoute) value_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.Routes)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.Routes other = - (redis_request.RedisRequestOuterClass.Routes) obj; - - if (!getValueCase().equals(other.getValueCase())) return false; - switch (valueCase_) { - case 1: - if (getSimpleRoutesValue() != other.getSimpleRoutesValue()) return false; - break; - case 2: - if (!getSlotKeyRoute().equals(other.getSlotKeyRoute())) return false; - break; - case 3: - if (!getSlotIdRoute().equals(other.getSlotIdRoute())) return false; - break; - case 0: - default: - } - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - switch (valueCase_) { - case 1: - hash = (37 * hash) + SIMPLE_ROUTES_FIELD_NUMBER; - hash = (53 * hash) + getSimpleRoutesValue(); - break; - case 2: - hash = (37 * hash) + SLOT_KEY_ROUTE_FIELD_NUMBER; - hash = (53 * hash) + getSlotKeyRoute().hashCode(); - break; - case 3: - hash = (37 * hash) + SLOT_ID_ROUTE_FIELD_NUMBER; - hash = (53 * hash) + getSlotIdRoute().hashCode(); - break; - case 0: - default: - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.Routes parseFrom(java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Routes parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Routes parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Routes parseDelimitedFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Routes parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder(redis_request.RedisRequestOuterClass.Routes prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - - /** Protobuf type {@code redis_request.Routes} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:redis_request.Routes) - redis_request.RedisRequestOuterClass.RoutesOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Routes_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Routes.class, - redis_request.RedisRequestOuterClass.Routes.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.Routes.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - if (slotKeyRouteBuilder_ != null) { - slotKeyRouteBuilder_.clear(); - } - if (slotIdRouteBuilder_ != null) { - slotIdRouteBuilder_.clear(); - } - valueCase_ = 0; - value_ = null; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Routes getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.Routes.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Routes build() { - redis_request.RedisRequestOuterClass.Routes result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Routes buildPartial() { - redis_request.RedisRequestOuterClass.Routes result = - new redis_request.RedisRequestOuterClass.Routes(this); - if (bitField0_ != 0) { - buildPartial0(result); - } - buildPartialOneofs(result); - onBuilt(); - return result; - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.Routes result) { - int from_bitField0_ = bitField0_; - } - - private void buildPartialOneofs(redis_request.RedisRequestOuterClass.Routes result) { - result.valueCase_ = valueCase_; - result.value_ = this.value_; - if (valueCase_ == 2 && slotKeyRouteBuilder_ != null) { - result.value_ = slotKeyRouteBuilder_.build(); - } - if (valueCase_ == 3 && slotIdRouteBuilder_ != null) { - result.value_ = slotIdRouteBuilder_.build(); - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.Routes) { - return mergeFrom((redis_request.RedisRequestOuterClass.Routes) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.Routes other) { - if (other == redis_request.RedisRequestOuterClass.Routes.getDefaultInstance()) return this; - switch (other.getValueCase()) { - case SIMPLE_ROUTES: - { - setSimpleRoutesValue(other.getSimpleRoutesValue()); - break; - } - case SLOT_KEY_ROUTE: - { - mergeSlotKeyRoute(other.getSlotKeyRoute()); - break; - } - case SLOT_ID_ROUTE: - { - mergeSlotIdRoute(other.getSlotIdRoute()); - break; - } - case VALUE_NOT_SET: - { - break; - } - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: - { - int rawValue = input.readEnum(); - valueCase_ = 1; - value_ = rawValue; - break; - } // case 8 - case 18: - { - input.readMessage(getSlotKeyRouteFieldBuilder().getBuilder(), extensionRegistry); - valueCase_ = 2; - break; - } // case 18 - case 26: - { - input.readMessage(getSlotIdRouteFieldBuilder().getBuilder(), extensionRegistry); - valueCase_ = 3; - break; - } // case 26 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int valueCase_ = 0; - private java.lang.Object value_; - - public ValueCase getValueCase() { - return ValueCase.forNumber(valueCase_); - } - - public Builder clearValue() { - valueCase_ = 0; - value_ = null; - onChanged(); - return this; - } - - private int bitField0_; - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * - * @return Whether the simpleRoutes field is set. - */ - @java.lang.Override - public boolean hasSimpleRoutes() { - return valueCase_ == 1; - } - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * - * @return The enum numeric value on the wire for simpleRoutes. - */ - @java.lang.Override - public int getSimpleRoutesValue() { - if (valueCase_ == 1) { - return ((java.lang.Integer) value_).intValue(); - } - return 0; - } - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * - * @param value The enum numeric value on the wire for simpleRoutes to set. - * @return This builder for chaining. - */ - public Builder setSimpleRoutesValue(int value) { - valueCase_ = 1; - value_ = value; - onChanged(); - return this; - } - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * - * @return The simpleRoutes. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SimpleRoutes getSimpleRoutes() { - if (valueCase_ == 1) { - redis_request.RedisRequestOuterClass.SimpleRoutes result = - redis_request.RedisRequestOuterClass.SimpleRoutes.forNumber( - (java.lang.Integer) value_); - return result == null - ? redis_request.RedisRequestOuterClass.SimpleRoutes.UNRECOGNIZED - : result; - } - return redis_request.RedisRequestOuterClass.SimpleRoutes.AllNodes; - } - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * - * @param value The simpleRoutes to set. - * @return This builder for chaining. - */ - public Builder setSimpleRoutes(redis_request.RedisRequestOuterClass.SimpleRoutes value) { - if (value == null) { - throw new NullPointerException(); - } - valueCase_ = 1; - value_ = value.getNumber(); - onChanged(); - return this; - } - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * - * @return This builder for chaining. - */ - public Builder clearSimpleRoutes() { - if (valueCase_ == 1) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - return this; - } - - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.SlotKeyRoute, - redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder, - redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder> - slotKeyRouteBuilder_; - - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - * - * @return Whether the slotKeyRoute field is set. - */ - @java.lang.Override - public boolean hasSlotKeyRoute() { - return valueCase_ == 2; - } - - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - * - * @return The slotKeyRoute. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRoute getSlotKeyRoute() { - if (slotKeyRouteBuilder_ == null) { - if (valueCase_ == 2) { - return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } else { - if (valueCase_ == 2) { - return slotKeyRouteBuilder_.getMessage(); - } - return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } - } - - /** .redis_request.SlotKeyRoute slot_key_route = 2; */ - public Builder setSlotKeyRoute(redis_request.RedisRequestOuterClass.SlotKeyRoute value) { - if (slotKeyRouteBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - value_ = value; - onChanged(); - } else { - slotKeyRouteBuilder_.setMessage(value); - } - valueCase_ = 2; - return this; - } - - /** .redis_request.SlotKeyRoute slot_key_route = 2; */ - public Builder setSlotKeyRoute( - redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder builderForValue) { - if (slotKeyRouteBuilder_ == null) { - value_ = builderForValue.build(); - onChanged(); - } else { - slotKeyRouteBuilder_.setMessage(builderForValue.build()); - } - valueCase_ = 2; - return this; - } - - /** .redis_request.SlotKeyRoute slot_key_route = 2; */ - public Builder mergeSlotKeyRoute(redis_request.RedisRequestOuterClass.SlotKeyRoute value) { - if (slotKeyRouteBuilder_ == null) { - if (valueCase_ == 2 - && value_ != redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance()) { - value_ = - redis_request.RedisRequestOuterClass.SlotKeyRoute.newBuilder( - (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_) - .mergeFrom(value) - .buildPartial(); - } else { - value_ = value; - } - onChanged(); - } else { - if (valueCase_ == 2) { - slotKeyRouteBuilder_.mergeFrom(value); - } else { - slotKeyRouteBuilder_.setMessage(value); - } - } - valueCase_ = 2; - return this; - } - - /** .redis_request.SlotKeyRoute slot_key_route = 2; */ - public Builder clearSlotKeyRoute() { - if (slotKeyRouteBuilder_ == null) { - if (valueCase_ == 2) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - } else { - if (valueCase_ == 2) { - valueCase_ = 0; - value_ = null; - } - slotKeyRouteBuilder_.clear(); - } - return this; - } - - /** .redis_request.SlotKeyRoute slot_key_route = 2; */ - public redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder getSlotKeyRouteBuilder() { - return getSlotKeyRouteFieldBuilder().getBuilder(); - } - - /** .redis_request.SlotKeyRoute slot_key_route = 2; */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder getSlotKeyRouteOrBuilder() { - if ((valueCase_ == 2) && (slotKeyRouteBuilder_ != null)) { - return slotKeyRouteBuilder_.getMessageOrBuilder(); - } else { - if (valueCase_ == 2) { - return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } - } - - /** .redis_request.SlotKeyRoute slot_key_route = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.SlotKeyRoute, - redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder, - redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder> - getSlotKeyRouteFieldBuilder() { - if (slotKeyRouteBuilder_ == null) { - if (!(valueCase_ == 2)) { - value_ = redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } - slotKeyRouteBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.SlotKeyRoute, - redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder, - redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder>( - (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_, - getParentForChildren(), - isClean()); - value_ = null; - } - valueCase_ = 2; - onChanged(); - return slotKeyRouteBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.SlotIdRoute, - redis_request.RedisRequestOuterClass.SlotIdRoute.Builder, - redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder> - slotIdRouteBuilder_; - - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - * - * @return Whether the slotIdRoute field is set. - */ - @java.lang.Override - public boolean hasSlotIdRoute() { - return valueCase_ == 3; - } - - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - * - * @return The slotIdRoute. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRoute getSlotIdRoute() { - if (slotIdRouteBuilder_ == null) { - if (valueCase_ == 3) { - return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } else { - if (valueCase_ == 3) { - return slotIdRouteBuilder_.getMessage(); - } - return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } - } - - /** .redis_request.SlotIdRoute slot_id_route = 3; */ - public Builder setSlotIdRoute(redis_request.RedisRequestOuterClass.SlotIdRoute value) { - if (slotIdRouteBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - value_ = value; - onChanged(); - } else { - slotIdRouteBuilder_.setMessage(value); - } - valueCase_ = 3; - return this; - } - - /** .redis_request.SlotIdRoute slot_id_route = 3; */ - public Builder setSlotIdRoute( - redis_request.RedisRequestOuterClass.SlotIdRoute.Builder builderForValue) { - if (slotIdRouteBuilder_ == null) { - value_ = builderForValue.build(); - onChanged(); - } else { - slotIdRouteBuilder_.setMessage(builderForValue.build()); - } - valueCase_ = 3; - return this; - } - - /** .redis_request.SlotIdRoute slot_id_route = 3; */ - public Builder mergeSlotIdRoute(redis_request.RedisRequestOuterClass.SlotIdRoute value) { - if (slotIdRouteBuilder_ == null) { - if (valueCase_ == 3 - && value_ != redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance()) { - value_ = - redis_request.RedisRequestOuterClass.SlotIdRoute.newBuilder( - (redis_request.RedisRequestOuterClass.SlotIdRoute) value_) - .mergeFrom(value) - .buildPartial(); - } else { - value_ = value; - } - onChanged(); - } else { - if (valueCase_ == 3) { - slotIdRouteBuilder_.mergeFrom(value); - } else { - slotIdRouteBuilder_.setMessage(value); - } - } - valueCase_ = 3; - return this; - } - - /** .redis_request.SlotIdRoute slot_id_route = 3; */ - public Builder clearSlotIdRoute() { - if (slotIdRouteBuilder_ == null) { - if (valueCase_ == 3) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - } else { - if (valueCase_ == 3) { - valueCase_ = 0; - value_ = null; - } - slotIdRouteBuilder_.clear(); - } - return this; - } - - /** .redis_request.SlotIdRoute slot_id_route = 3; */ - public redis_request.RedisRequestOuterClass.SlotIdRoute.Builder getSlotIdRouteBuilder() { - return getSlotIdRouteFieldBuilder().getBuilder(); - } - - /** .redis_request.SlotIdRoute slot_id_route = 3; */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder getSlotIdRouteOrBuilder() { - if ((valueCase_ == 3) && (slotIdRouteBuilder_ != null)) { - return slotIdRouteBuilder_.getMessageOrBuilder(); - } else { - if (valueCase_ == 3) { - return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } - } - - /** .redis_request.SlotIdRoute slot_id_route = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.SlotIdRoute, - redis_request.RedisRequestOuterClass.SlotIdRoute.Builder, - redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder> - getSlotIdRouteFieldBuilder() { - if (slotIdRouteBuilder_ == null) { - if (!(valueCase_ == 3)) { - value_ = redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } - slotIdRouteBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.SlotIdRoute, - redis_request.RedisRequestOuterClass.SlotIdRoute.Builder, - redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder>( - (redis_request.RedisRequestOuterClass.SlotIdRoute) value_, - getParentForChildren(), - isClean()); - value_ = null; - } - valueCase_ = 3; - onChanged(); - return slotIdRouteBuilder_; - } - - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:redis_request.Routes) - } - - // @@protoc_insertion_point(class_scope:redis_request.Routes) - private static final redis_request.RedisRequestOuterClass.Routes DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Routes(); - } - - public static redis_request.RedisRequestOuterClass.Routes getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public Routes parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException() - .setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Routes getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - } - - public interface CommandOrBuilder - extends - // @@protoc_insertion_point(interface_extends:redis_request.Command) - com.google.protobuf.MessageOrBuilder { - - /** - * .redis_request.RequestType request_type = 1; - * - * @return The enum numeric value on the wire for requestType. - */ - int getRequestTypeValue(); - - /** - * .redis_request.RequestType request_type = 1; - * - * @return The requestType. - */ - redis_request.RedisRequestOuterClass.RequestType getRequestType(); - - /** - * .redis_request.Command.ArgsArray args_array = 2; - * - * @return Whether the argsArray field is set. - */ - boolean hasArgsArray(); - - /** - * .redis_request.Command.ArgsArray args_array = 2; - * - * @return The argsArray. - */ - redis_request.RedisRequestOuterClass.Command.ArgsArray getArgsArray(); - - /** .redis_request.Command.ArgsArray args_array = 2; */ - redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder getArgsArrayOrBuilder(); - - /** - * uint64 args_vec_pointer = 3; - * - * @return Whether the argsVecPointer field is set. - */ - boolean hasArgsVecPointer(); - - /** - * uint64 args_vec_pointer = 3; - * - * @return The argsVecPointer. - */ - long getArgsVecPointer(); - - redis_request.RedisRequestOuterClass.Command.ArgsCase getArgsCase(); - } - - /** Protobuf type {@code redis_request.Command} */ - public static final class Command extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:redis_request.Command) - CommandOrBuilder { - private static final long serialVersionUID = 0L; - - // Use Command.newBuilder() to construct. - private Command(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private Command() { - requestType_ = 0; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Command(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Command_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Command.class, - redis_request.RedisRequestOuterClass.Command.Builder.class); - } - - public interface ArgsArrayOrBuilder - extends - // @@protoc_insertion_point(interface_extends:redis_request.Command.ArgsArray) - com.google.protobuf.MessageOrBuilder { - - /** - * repeated string args = 1; - * - * @return A list containing the args. - */ - java.util.List getArgsList(); - - /** - * repeated string args = 1; - * - * @return The count of args. - */ - int getArgsCount(); - - /** - * repeated string args = 1; - * - * @param index The index of the element to return. - * @return The args at the given index. - */ - java.lang.String getArgs(int index); - - /** - * repeated string args = 1; - * - * @param index The index of the value to return. - * @return The bytes of the args at the given index. - */ - com.google.protobuf.ByteString getArgsBytes(int index); - } - - /** Protobuf type {@code redis_request.Command.ArgsArray} */ - public static final class ArgsArray extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:redis_request.Command.ArgsArray) - ArgsArrayOrBuilder { - private static final long serialVersionUID = 0L; - - // Use ArgsArray.newBuilder() to construct. - private ArgsArray(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private ArgsArray() { - args_ = com.google.protobuf.LazyStringArrayList.emptyList(); - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new ArgsArray(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Command_ArgsArray_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Command_ArgsArray_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Command.ArgsArray.class, - redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder.class); - } - - public static final int ARGS_FIELD_NUMBER = 1; - - @SuppressWarnings("serial") - private com.google.protobuf.LazyStringArrayList args_ = - com.google.protobuf.LazyStringArrayList.emptyList(); - - /** - * repeated string args = 1; - * - * @return A list containing the args. - */ - public com.google.protobuf.ProtocolStringList getArgsList() { - return args_; - } - - /** - * repeated string args = 1; - * - * @return The count of args. - */ - public int getArgsCount() { - return args_.size(); - } - - /** - * repeated string args = 1; - * - * @param index The index of the element to return. - * @return The args at the given index. - */ - public java.lang.String getArgs(int index) { - return args_.get(index); - } - - /** - * repeated string args = 1; - * - * @param index The index of the value to return. - * @return The bytes of the args at the given index. - */ - public com.google.protobuf.ByteString getArgsBytes(int index) { - return args_.getByteString(index); - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - for (int i = 0; i < args_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, args_.getRaw(i)); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - { - int dataSize = 0; - for (int i = 0; i < args_.size(); i++) { - dataSize += computeStringSizeNoTag(args_.getRaw(i)); - } - size += dataSize; - size += 1 * getArgsList().size(); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.Command.ArgsArray)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.Command.ArgsArray other = - (redis_request.RedisRequestOuterClass.Command.ArgsArray) obj; - - if (!getArgsList().equals(other.getArgsList())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getArgsCount() > 0) { - hash = (37 * hash) + ARGS_FIELD_NUMBER; - hash = (53 * hash) + getArgsList().hashCode(); - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseDelimitedFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder( - redis_request.RedisRequestOuterClass.Command.ArgsArray prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - - /** Protobuf type {@code redis_request.Command.ArgsArray} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:redis_request.Command.ArgsArray) - redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Command_ArgsArray_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Command_ArgsArray_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Command.ArgsArray.class, - redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.Command.ArgsArray.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - args_ = com.google.protobuf.LazyStringArrayList.emptyList(); - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Command_ArgsArray_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArray getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArray build() { - redis_request.RedisRequestOuterClass.Command.ArgsArray result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArray buildPartial() { - redis_request.RedisRequestOuterClass.Command.ArgsArray result = - new redis_request.RedisRequestOuterClass.Command.ArgsArray(this); - if (bitField0_ != 0) { - buildPartial0(result); - } - onBuilt(); - return result; - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.Command.ArgsArray result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - args_.makeImmutable(); - result.args_ = args_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.Command.ArgsArray) { - return mergeFrom((redis_request.RedisRequestOuterClass.Command.ArgsArray) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.Command.ArgsArray other) { - if (other == redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance()) - return this; - if (!other.args_.isEmpty()) { - if (args_.isEmpty()) { - args_ = other.args_; - bitField0_ |= 0x00000001; - } else { - ensureArgsIsMutable(); - args_.addAll(other.args_); - } - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: - { - java.lang.String s = input.readStringRequireUtf8(); - ensureArgsIsMutable(); - args_.add(s); - break; - } // case 10 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int bitField0_; - - private com.google.protobuf.LazyStringArrayList args_ = - com.google.protobuf.LazyStringArrayList.emptyList(); - - private void ensureArgsIsMutable() { - if (!args_.isModifiable()) { - args_ = new com.google.protobuf.LazyStringArrayList(args_); - } - bitField0_ |= 0x00000001; - } - - /** - * repeated string args = 1; - * - * @return A list containing the args. - */ - public com.google.protobuf.ProtocolStringList getArgsList() { - args_.makeImmutable(); - return args_; - } - - /** - * repeated string args = 1; - * - * @return The count of args. - */ - public int getArgsCount() { - return args_.size(); - } - - /** - * repeated string args = 1; - * - * @param index The index of the element to return. - * @return The args at the given index. - */ - public java.lang.String getArgs(int index) { - return args_.get(index); - } - - /** - * repeated string args = 1; - * - * @param index The index of the value to return. - * @return The bytes of the args at the given index. - */ - public com.google.protobuf.ByteString getArgsBytes(int index) { - return args_.getByteString(index); - } - - /** - * repeated string args = 1; - * - * @param index The index to set the value at. - * @param value The args to set. - * @return This builder for chaining. - */ - public Builder setArgs(int index, java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureArgsIsMutable(); - args_.set(index, value); - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - /** - * repeated string args = 1; - * - * @param value The args to add. - * @return This builder for chaining. - */ - public Builder addArgs(java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureArgsIsMutable(); - args_.add(value); - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - /** - * repeated string args = 1; - * - * @param values The args to add. - * @return This builder for chaining. - */ - public Builder addAllArgs(java.lang.Iterable values) { - ensureArgsIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll(values, args_); - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - /** - * repeated string args = 1; - * - * @return This builder for chaining. - */ - public Builder clearArgs() { - args_ = com.google.protobuf.LazyStringArrayList.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - ; - onChanged(); - return this; - } - - /** - * repeated string args = 1; - * - * @param value The bytes of the args to add. - * @return This builder for chaining. - */ - public Builder addArgsBytes(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - ensureArgsIsMutable(); - args_.add(value); - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:redis_request.Command.ArgsArray) - } - - // @@protoc_insertion_point(class_scope:redis_request.Command.ArgsArray) - private static final redis_request.RedisRequestOuterClass.Command.ArgsArray DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Command.ArgsArray(); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public ArgsArray parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException() - .setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArray getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - } - - private int argsCase_ = 0; - - @SuppressWarnings("serial") - private java.lang.Object args_; - - public enum ArgsCase - implements - com.google.protobuf.Internal.EnumLite, - com.google.protobuf.AbstractMessage.InternalOneOfEnum { - ARGS_ARRAY(2), - ARGS_VEC_POINTER(3), - ARGS_NOT_SET(0); - private final int value; - - private ArgsCase(int value) { - this.value = value; - } - - /** - * @param value The number of the enum to look for. - * @return The enum associated with the given number. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static ArgsCase valueOf(int value) { - return forNumber(value); - } - - public static ArgsCase forNumber(int value) { - switch (value) { - case 2: - return ARGS_ARRAY; - case 3: - return ARGS_VEC_POINTER; - case 0: - return ARGS_NOT_SET; - default: - return null; - } - } - - public int getNumber() { - return this.value; - } - }; - - public ArgsCase getArgsCase() { - return ArgsCase.forNumber(argsCase_); - } - - public static final int REQUEST_TYPE_FIELD_NUMBER = 1; - private int requestType_ = 0; - - /** - * .redis_request.RequestType request_type = 1; - * - * @return The enum numeric value on the wire for requestType. - */ - @java.lang.Override - public int getRequestTypeValue() { - return requestType_; - } - - /** - * .redis_request.RequestType request_type = 1; - * - * @return The requestType. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.RequestType getRequestType() { - redis_request.RedisRequestOuterClass.RequestType result = - redis_request.RedisRequestOuterClass.RequestType.forNumber(requestType_); - return result == null - ? redis_request.RedisRequestOuterClass.RequestType.UNRECOGNIZED - : result; - } - - public static final int ARGS_ARRAY_FIELD_NUMBER = 2; - - /** - * .redis_request.Command.ArgsArray args_array = 2; - * - * @return Whether the argsArray field is set. - */ - @java.lang.Override - public boolean hasArgsArray() { - return argsCase_ == 2; - } - - /** - * .redis_request.Command.ArgsArray args_array = 2; - * - * @return The argsArray. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArray getArgsArray() { - if (argsCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; - } - return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } - - /** .redis_request.Command.ArgsArray args_array = 2; */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder getArgsArrayOrBuilder() { - if (argsCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; - } - return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } - - public static final int ARGS_VEC_POINTER_FIELD_NUMBER = 3; - - /** - * uint64 args_vec_pointer = 3; - * - * @return Whether the argsVecPointer field is set. - */ - @java.lang.Override - public boolean hasArgsVecPointer() { - return argsCase_ == 3; - } - - /** - * uint64 args_vec_pointer = 3; - * - * @return The argsVecPointer. - */ - @java.lang.Override - public long getArgsVecPointer() { - if (argsCase_ == 3) { - return (java.lang.Long) args_; - } - return 0L; - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (requestType_ - != redis_request.RedisRequestOuterClass.RequestType.InvalidRequest.getNumber()) { - output.writeEnum(1, requestType_); - } - if (argsCase_ == 2) { - output.writeMessage(2, (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_); - } - if (argsCase_ == 3) { - output.writeUInt64(3, (long) ((java.lang.Long) args_)); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (requestType_ - != redis_request.RedisRequestOuterClass.RequestType.InvalidRequest.getNumber()) { - size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, requestType_); - } - if (argsCase_ == 2) { - size += - com.google.protobuf.CodedOutputStream.computeMessageSize( - 2, (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_); - } - if (argsCase_ == 3) { - size += - com.google.protobuf.CodedOutputStream.computeUInt64Size( - 3, (long) ((java.lang.Long) args_)); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.Command)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.Command other = - (redis_request.RedisRequestOuterClass.Command) obj; - - if (requestType_ != other.requestType_) return false; - if (!getArgsCase().equals(other.getArgsCase())) return false; - switch (argsCase_) { - case 2: - if (!getArgsArray().equals(other.getArgsArray())) return false; - break; - case 3: - if (getArgsVecPointer() != other.getArgsVecPointer()) return false; - break; - case 0: - default: - } - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + REQUEST_TYPE_FIELD_NUMBER; - hash = (53 * hash) + requestType_; - switch (argsCase_) { - case 2: - hash = (37 * hash) + ARGS_ARRAY_FIELD_NUMBER; - hash = (53 * hash) + getArgsArray().hashCode(); - break; - case 3: - hash = (37 * hash) + ARGS_VEC_POINTER_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getArgsVecPointer()); - break; - case 0: - default: - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.Command parseFrom(java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.Command parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Command parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.Command parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Command parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.Command parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Command parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Command parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Command parseDelimitedFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Command parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Command parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Command parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder(redis_request.RedisRequestOuterClass.Command prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - - /** Protobuf type {@code redis_request.Command} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:redis_request.Command) - redis_request.RedisRequestOuterClass.CommandOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Command_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Command_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Command.class, - redis_request.RedisRequestOuterClass.Command.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.Command.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - requestType_ = 0; - if (argsArrayBuilder_ != null) { - argsArrayBuilder_.clear(); - } - argsCase_ = 0; - args_ = null; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Command_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command build() { - redis_request.RedisRequestOuterClass.Command result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command buildPartial() { - redis_request.RedisRequestOuterClass.Command result = - new redis_request.RedisRequestOuterClass.Command(this); - if (bitField0_ != 0) { - buildPartial0(result); - } - buildPartialOneofs(result); - onBuilt(); - return result; - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.Command result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.requestType_ = requestType_; - } - } - - private void buildPartialOneofs(redis_request.RedisRequestOuterClass.Command result) { - result.argsCase_ = argsCase_; - result.args_ = this.args_; - if (argsCase_ == 2 && argsArrayBuilder_ != null) { - result.args_ = argsArrayBuilder_.build(); - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.Command) { - return mergeFrom((redis_request.RedisRequestOuterClass.Command) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.Command other) { - if (other == redis_request.RedisRequestOuterClass.Command.getDefaultInstance()) return this; - if (other.requestType_ != 0) { - setRequestTypeValue(other.getRequestTypeValue()); - } - switch (other.getArgsCase()) { - case ARGS_ARRAY: - { - mergeArgsArray(other.getArgsArray()); - break; - } - case ARGS_VEC_POINTER: - { - setArgsVecPointer(other.getArgsVecPointer()); - break; - } - case ARGS_NOT_SET: - { - break; - } - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: - { - requestType_ = input.readEnum(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 18: - { - input.readMessage(getArgsArrayFieldBuilder().getBuilder(), extensionRegistry); - argsCase_ = 2; - break; - } // case 18 - case 24: - { - args_ = input.readUInt64(); - argsCase_ = 3; - break; - } // case 24 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int argsCase_ = 0; - private java.lang.Object args_; - - public ArgsCase getArgsCase() { - return ArgsCase.forNumber(argsCase_); - } - - public Builder clearArgs() { - argsCase_ = 0; - args_ = null; - onChanged(); - return this; - } - - private int bitField0_; - - private int requestType_ = 0; - - /** - * .redis_request.RequestType request_type = 1; - * - * @return The enum numeric value on the wire for requestType. - */ - @java.lang.Override - public int getRequestTypeValue() { - return requestType_; - } - - /** - * .redis_request.RequestType request_type = 1; - * - * @param value The enum numeric value on the wire for requestType to set. - * @return This builder for chaining. - */ - public Builder setRequestTypeValue(int value) { - requestType_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - /** - * .redis_request.RequestType request_type = 1; - * - * @return The requestType. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.RequestType getRequestType() { - redis_request.RedisRequestOuterClass.RequestType result = - redis_request.RedisRequestOuterClass.RequestType.forNumber(requestType_); - return result == null - ? redis_request.RedisRequestOuterClass.RequestType.UNRECOGNIZED - : result; - } - - /** - * .redis_request.RequestType request_type = 1; - * - * @param value The requestType to set. - * @return This builder for chaining. - */ - public Builder setRequestType(redis_request.RedisRequestOuterClass.RequestType value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - requestType_ = value.getNumber(); - onChanged(); - return this; - } - - /** - * .redis_request.RequestType request_type = 1; - * - * @return This builder for chaining. - */ - public Builder clearRequestType() { - bitField0_ = (bitField0_ & ~0x00000001); - requestType_ = 0; - onChanged(); - return this; - } - - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command.ArgsArray, - redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder, - redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder> - argsArrayBuilder_; - - /** - * .redis_request.Command.ArgsArray args_array = 2; - * - * @return Whether the argsArray field is set. - */ - @java.lang.Override - public boolean hasArgsArray() { - return argsCase_ == 2; - } - - /** - * .redis_request.Command.ArgsArray args_array = 2; - * - * @return The argsArray. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArray getArgsArray() { - if (argsArrayBuilder_ == null) { - if (argsCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; - } - return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } else { - if (argsCase_ == 2) { - return argsArrayBuilder_.getMessage(); - } - return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } - } - - /** .redis_request.Command.ArgsArray args_array = 2; */ - public Builder setArgsArray(redis_request.RedisRequestOuterClass.Command.ArgsArray value) { - if (argsArrayBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - args_ = value; - onChanged(); - } else { - argsArrayBuilder_.setMessage(value); - } - argsCase_ = 2; - return this; - } - - /** .redis_request.Command.ArgsArray args_array = 2; */ - public Builder setArgsArray( - redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder builderForValue) { - if (argsArrayBuilder_ == null) { - args_ = builderForValue.build(); - onChanged(); - } else { - argsArrayBuilder_.setMessage(builderForValue.build()); - } - argsCase_ = 2; - return this; - } - - /** .redis_request.Command.ArgsArray args_array = 2; */ - public Builder mergeArgsArray(redis_request.RedisRequestOuterClass.Command.ArgsArray value) { - if (argsArrayBuilder_ == null) { - if (argsCase_ == 2 - && args_ - != redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance()) { - args_ = - redis_request.RedisRequestOuterClass.Command.ArgsArray.newBuilder( - (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_) - .mergeFrom(value) - .buildPartial(); - } else { - args_ = value; - } - onChanged(); - } else { - if (argsCase_ == 2) { - argsArrayBuilder_.mergeFrom(value); - } else { - argsArrayBuilder_.setMessage(value); - } - } - argsCase_ = 2; - return this; - } - - /** .redis_request.Command.ArgsArray args_array = 2; */ - public Builder clearArgsArray() { - if (argsArrayBuilder_ == null) { - if (argsCase_ == 2) { - argsCase_ = 0; - args_ = null; - onChanged(); - } - } else { - if (argsCase_ == 2) { - argsCase_ = 0; - args_ = null; - } - argsArrayBuilder_.clear(); - } - return this; - } - - /** .redis_request.Command.ArgsArray args_array = 2; */ - public redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder getArgsArrayBuilder() { - return getArgsArrayFieldBuilder().getBuilder(); - } - - /** .redis_request.Command.ArgsArray args_array = 2; */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder - getArgsArrayOrBuilder() { - if ((argsCase_ == 2) && (argsArrayBuilder_ != null)) { - return argsArrayBuilder_.getMessageOrBuilder(); - } else { - if (argsCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; - } - return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } - } - - /** .redis_request.Command.ArgsArray args_array = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command.ArgsArray, - redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder, - redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder> - getArgsArrayFieldBuilder() { - if (argsArrayBuilder_ == null) { - if (!(argsCase_ == 2)) { - args_ = redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } - argsArrayBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command.ArgsArray, - redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder, - redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder>( - (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_, - getParentForChildren(), - isClean()); - args_ = null; - } - argsCase_ = 2; - onChanged(); - return argsArrayBuilder_; - } - - /** - * uint64 args_vec_pointer = 3; - * - * @return Whether the argsVecPointer field is set. - */ - public boolean hasArgsVecPointer() { - return argsCase_ == 3; - } - - /** - * uint64 args_vec_pointer = 3; - * - * @return The argsVecPointer. - */ - public long getArgsVecPointer() { - if (argsCase_ == 3) { - return (java.lang.Long) args_; - } - return 0L; - } - - /** - * uint64 args_vec_pointer = 3; - * - * @param value The argsVecPointer to set. - * @return This builder for chaining. - */ - public Builder setArgsVecPointer(long value) { - - argsCase_ = 3; - args_ = value; - onChanged(); - return this; - } - - /** - * uint64 args_vec_pointer = 3; - * - * @return This builder for chaining. - */ - public Builder clearArgsVecPointer() { - if (argsCase_ == 3) { - argsCase_ = 0; - args_ = null; - onChanged(); - } - return this; - } - - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:redis_request.Command) - } - - // @@protoc_insertion_point(class_scope:redis_request.Command) - private static final redis_request.RedisRequestOuterClass.Command DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Command(); - } - - public static redis_request.RedisRequestOuterClass.Command getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public Command parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException() - .setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - } - - public interface TransactionOrBuilder - extends - // @@protoc_insertion_point(interface_extends:redis_request.Transaction) - com.google.protobuf.MessageOrBuilder { - - /** repeated .redis_request.Command commands = 1; */ - java.util.List getCommandsList(); - - /** repeated .redis_request.Command commands = 1; */ - redis_request.RedisRequestOuterClass.Command getCommands(int index); - - /** repeated .redis_request.Command commands = 1; */ - int getCommandsCount(); - - /** repeated .redis_request.Command commands = 1; */ - java.util.List - getCommandsOrBuilderList(); - - /** repeated .redis_request.Command commands = 1; */ - redis_request.RedisRequestOuterClass.CommandOrBuilder getCommandsOrBuilder(int index); - } - - /** Protobuf type {@code redis_request.Transaction} */ - public static final class Transaction extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:redis_request.Transaction) - TransactionOrBuilder { - private static final long serialVersionUID = 0L; - - // Use Transaction.newBuilder() to construct. - private Transaction(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private Transaction() { - commands_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Transaction(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Transaction_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Transaction_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Transaction.class, - redis_request.RedisRequestOuterClass.Transaction.Builder.class); - } - - public static final int COMMANDS_FIELD_NUMBER = 1; - - @SuppressWarnings("serial") - private java.util.List commands_; - - /** repeated .redis_request.Command commands = 1; */ - @java.lang.Override - public java.util.List getCommandsList() { - return commands_; - } - - /** repeated .redis_request.Command commands = 1; */ - @java.lang.Override - public java.util.List - getCommandsOrBuilderList() { - return commands_; - } - - /** repeated .redis_request.Command commands = 1; */ - @java.lang.Override - public int getCommandsCount() { - return commands_.size(); - } - - /** repeated .redis_request.Command commands = 1; */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command getCommands(int index) { - return commands_.get(index); - } - - /** repeated .redis_request.Command commands = 1; */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.CommandOrBuilder getCommandsOrBuilder(int index) { - return commands_.get(index); - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - for (int i = 0; i < commands_.size(); i++) { - output.writeMessage(1, commands_.get(i)); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - for (int i = 0; i < commands_.size(); i++) { - size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, commands_.get(i)); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.Transaction)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.Transaction other = - (redis_request.RedisRequestOuterClass.Transaction) obj; - - if (!getCommandsList().equals(other.getCommandsList())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getCommandsCount() > 0) { - hash = (37 * hash) + COMMANDS_FIELD_NUMBER; - hash = (53 * hash) + getCommandsList().hashCode(); - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Transaction parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Transaction parseDelimitedFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Transaction parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder(redis_request.RedisRequestOuterClass.Transaction prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - - /** Protobuf type {@code redis_request.Transaction} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:redis_request.Transaction) - redis_request.RedisRequestOuterClass.TransactionOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Transaction_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Transaction_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Transaction.class, - redis_request.RedisRequestOuterClass.Transaction.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.Transaction.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - if (commandsBuilder_ == null) { - commands_ = java.util.Collections.emptyList(); - } else { - commands_ = null; - commandsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_Transaction_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Transaction getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Transaction build() { - redis_request.RedisRequestOuterClass.Transaction result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Transaction buildPartial() { - redis_request.RedisRequestOuterClass.Transaction result = - new redis_request.RedisRequestOuterClass.Transaction(this); - buildPartialRepeatedFields(result); - if (bitField0_ != 0) { - buildPartial0(result); - } - onBuilt(); - return result; - } - - private void buildPartialRepeatedFields( - redis_request.RedisRequestOuterClass.Transaction result) { - if (commandsBuilder_ == null) { - if (((bitField0_ & 0x00000001) != 0)) { - commands_ = java.util.Collections.unmodifiableList(commands_); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.commands_ = commands_; - } else { - result.commands_ = commandsBuilder_.build(); - } - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.Transaction result) { - int from_bitField0_ = bitField0_; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.Transaction) { - return mergeFrom((redis_request.RedisRequestOuterClass.Transaction) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.Transaction other) { - if (other == redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance()) - return this; - if (commandsBuilder_ == null) { - if (!other.commands_.isEmpty()) { - if (commands_.isEmpty()) { - commands_ = other.commands_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensureCommandsIsMutable(); - commands_.addAll(other.commands_); - } - onChanged(); - } - } else { - if (!other.commands_.isEmpty()) { - if (commandsBuilder_.isEmpty()) { - commandsBuilder_.dispose(); - commandsBuilder_ = null; - commands_ = other.commands_; - bitField0_ = (bitField0_ & ~0x00000001); - commandsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getCommandsFieldBuilder() - : null; - } else { - commandsBuilder_.addAllMessages(other.commands_); - } - } - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: - { - redis_request.RedisRequestOuterClass.Command m = - input.readMessage( - redis_request.RedisRequestOuterClass.Command.parser(), extensionRegistry); - if (commandsBuilder_ == null) { - ensureCommandsIsMutable(); - commands_.add(m); - } else { - commandsBuilder_.addMessage(m); - } - break; - } // case 10 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int bitField0_; - - private java.util.List commands_ = - java.util.Collections.emptyList(); - - private void ensureCommandsIsMutable() { - if (!((bitField0_ & 0x00000001) != 0)) { - commands_ = - new java.util.ArrayList(commands_); - bitField0_ |= 0x00000001; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command, - redis_request.RedisRequestOuterClass.Command.Builder, - redis_request.RedisRequestOuterClass.CommandOrBuilder> - commandsBuilder_; - - /** repeated .redis_request.Command commands = 1; */ - public java.util.List getCommandsList() { - if (commandsBuilder_ == null) { - return java.util.Collections.unmodifiableList(commands_); - } else { - return commandsBuilder_.getMessageList(); - } - } - - /** repeated .redis_request.Command commands = 1; */ - public int getCommandsCount() { - if (commandsBuilder_ == null) { - return commands_.size(); - } else { - return commandsBuilder_.getCount(); - } - } - - /** repeated .redis_request.Command commands = 1; */ - public redis_request.RedisRequestOuterClass.Command getCommands(int index) { - if (commandsBuilder_ == null) { - return commands_.get(index); - } else { - return commandsBuilder_.getMessage(index); - } - } - - /** repeated .redis_request.Command commands = 1; */ - public Builder setCommands(int index, redis_request.RedisRequestOuterClass.Command value) { - if (commandsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCommandsIsMutable(); - commands_.set(index, value); - onChanged(); - } else { - commandsBuilder_.setMessage(index, value); - } - return this; - } - - /** repeated .redis_request.Command commands = 1; */ - public Builder setCommands( - int index, redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { - if (commandsBuilder_ == null) { - ensureCommandsIsMutable(); - commands_.set(index, builderForValue.build()); - onChanged(); - } else { - commandsBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - - /** repeated .redis_request.Command commands = 1; */ - public Builder addCommands(redis_request.RedisRequestOuterClass.Command value) { - if (commandsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCommandsIsMutable(); - commands_.add(value); - onChanged(); - } else { - commandsBuilder_.addMessage(value); - } - return this; - } - - /** repeated .redis_request.Command commands = 1; */ - public Builder addCommands(int index, redis_request.RedisRequestOuterClass.Command value) { - if (commandsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCommandsIsMutable(); - commands_.add(index, value); - onChanged(); - } else { - commandsBuilder_.addMessage(index, value); - } - return this; - } - - /** repeated .redis_request.Command commands = 1; */ - public Builder addCommands( - redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { - if (commandsBuilder_ == null) { - ensureCommandsIsMutable(); - commands_.add(builderForValue.build()); - onChanged(); - } else { - commandsBuilder_.addMessage(builderForValue.build()); - } - return this; - } - - /** repeated .redis_request.Command commands = 1; */ - public Builder addCommands( - int index, redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { - if (commandsBuilder_ == null) { - ensureCommandsIsMutable(); - commands_.add(index, builderForValue.build()); - onChanged(); - } else { - commandsBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - - /** repeated .redis_request.Command commands = 1; */ - public Builder addAllCommands( - java.lang.Iterable values) { - if (commandsBuilder_ == null) { - ensureCommandsIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll(values, commands_); - onChanged(); - } else { - commandsBuilder_.addAllMessages(values); - } - return this; - } - - /** repeated .redis_request.Command commands = 1; */ - public Builder clearCommands() { - if (commandsBuilder_ == null) { - commands_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - } else { - commandsBuilder_.clear(); - } - return this; - } - - /** repeated .redis_request.Command commands = 1; */ - public Builder removeCommands(int index) { - if (commandsBuilder_ == null) { - ensureCommandsIsMutable(); - commands_.remove(index); - onChanged(); - } else { - commandsBuilder_.remove(index); - } - return this; - } - - /** repeated .redis_request.Command commands = 1; */ - public redis_request.RedisRequestOuterClass.Command.Builder getCommandsBuilder(int index) { - return getCommandsFieldBuilder().getBuilder(index); - } - - /** repeated .redis_request.Command commands = 1; */ - public redis_request.RedisRequestOuterClass.CommandOrBuilder getCommandsOrBuilder(int index) { - if (commandsBuilder_ == null) { - return commands_.get(index); - } else { - return commandsBuilder_.getMessageOrBuilder(index); - } - } - - /** repeated .redis_request.Command commands = 1; */ - public java.util.List - getCommandsOrBuilderList() { - if (commandsBuilder_ != null) { - return commandsBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(commands_); - } - } - - /** repeated .redis_request.Command commands = 1; */ - public redis_request.RedisRequestOuterClass.Command.Builder addCommandsBuilder() { - return getCommandsFieldBuilder() - .addBuilder(redis_request.RedisRequestOuterClass.Command.getDefaultInstance()); - } - - /** repeated .redis_request.Command commands = 1; */ - public redis_request.RedisRequestOuterClass.Command.Builder addCommandsBuilder(int index) { - return getCommandsFieldBuilder() - .addBuilder(index, redis_request.RedisRequestOuterClass.Command.getDefaultInstance()); - } - - /** repeated .redis_request.Command commands = 1; */ - public java.util.List - getCommandsBuilderList() { - return getCommandsFieldBuilder().getBuilderList(); - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command, - redis_request.RedisRequestOuterClass.Command.Builder, - redis_request.RedisRequestOuterClass.CommandOrBuilder> - getCommandsFieldBuilder() { - if (commandsBuilder_ == null) { - commandsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command, - redis_request.RedisRequestOuterClass.Command.Builder, - redis_request.RedisRequestOuterClass.CommandOrBuilder>( - commands_, ((bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean()); - commands_ = null; - } - return commandsBuilder_; - } - - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:redis_request.Transaction) - } - - // @@protoc_insertion_point(class_scope:redis_request.Transaction) - private static final redis_request.RedisRequestOuterClass.Transaction DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Transaction(); - } - - public static redis_request.RedisRequestOuterClass.Transaction getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public Transaction parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException() - .setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Transaction getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - } - - public interface RedisRequestOrBuilder - extends - // @@protoc_insertion_point(interface_extends:redis_request.RedisRequest) - com.google.protobuf.MessageOrBuilder { - - /** - * uint32 callback_idx = 1; - * - * @return The callbackIdx. - */ - int getCallbackIdx(); - - /** - * .redis_request.Command single_command = 2; - * - * @return Whether the singleCommand field is set. - */ - boolean hasSingleCommand(); - - /** - * .redis_request.Command single_command = 2; - * - * @return The singleCommand. - */ - redis_request.RedisRequestOuterClass.Command getSingleCommand(); - - /** .redis_request.Command single_command = 2; */ - redis_request.RedisRequestOuterClass.CommandOrBuilder getSingleCommandOrBuilder(); - - /** - * .redis_request.Transaction transaction = 3; - * - * @return Whether the transaction field is set. - */ - boolean hasTransaction(); - - /** - * .redis_request.Transaction transaction = 3; - * - * @return The transaction. - */ - redis_request.RedisRequestOuterClass.Transaction getTransaction(); - - /** .redis_request.Transaction transaction = 3; */ - redis_request.RedisRequestOuterClass.TransactionOrBuilder getTransactionOrBuilder(); - - /** - * .redis_request.Routes route = 4; - * - * @return Whether the route field is set. - */ - boolean hasRoute(); - - /** - * .redis_request.Routes route = 4; - * - * @return The route. - */ - redis_request.RedisRequestOuterClass.Routes getRoute(); - - /** .redis_request.Routes route = 4; */ - redis_request.RedisRequestOuterClass.RoutesOrBuilder getRouteOrBuilder(); - - redis_request.RedisRequestOuterClass.RedisRequest.CommandCase getCommandCase(); - } - - /** Protobuf type {@code redis_request.RedisRequest} */ - public static final class RedisRequest extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:redis_request.RedisRequest) - RedisRequestOrBuilder { - private static final long serialVersionUID = 0L; - - // Use RedisRequest.newBuilder() to construct. - private RedisRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private RedisRequest() {} - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new RedisRequest(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_RedisRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_RedisRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.RedisRequest.class, - redis_request.RedisRequestOuterClass.RedisRequest.Builder.class); - } - - private int commandCase_ = 0; - - @SuppressWarnings("serial") - private java.lang.Object command_; - - public enum CommandCase - implements - com.google.protobuf.Internal.EnumLite, - com.google.protobuf.AbstractMessage.InternalOneOfEnum { - SINGLE_COMMAND(2), - TRANSACTION(3), - COMMAND_NOT_SET(0); - private final int value; - - private CommandCase(int value) { - this.value = value; - } - - /** - * @param value The number of the enum to look for. - * @return The enum associated with the given number. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static CommandCase valueOf(int value) { - return forNumber(value); - } - - public static CommandCase forNumber(int value) { - switch (value) { - case 2: - return SINGLE_COMMAND; - case 3: - return TRANSACTION; - case 0: - return COMMAND_NOT_SET; - default: - return null; - } - } - - public int getNumber() { - return this.value; - } - }; - - public CommandCase getCommandCase() { - return CommandCase.forNumber(commandCase_); - } - - public static final int CALLBACK_IDX_FIELD_NUMBER = 1; - private int callbackIdx_ = 0; - - /** - * uint32 callback_idx = 1; - * - * @return The callbackIdx. - */ - @java.lang.Override - public int getCallbackIdx() { - return callbackIdx_; - } - - public static final int SINGLE_COMMAND_FIELD_NUMBER = 2; - - /** - * .redis_request.Command single_command = 2; - * - * @return Whether the singleCommand field is set. - */ - @java.lang.Override - public boolean hasSingleCommand() { - return commandCase_ == 2; - } - - /** - * .redis_request.Command single_command = 2; - * - * @return The singleCommand. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command getSingleCommand() { - if (commandCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command) command_; - } - return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } - - /** .redis_request.Command single_command = 2; */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.CommandOrBuilder getSingleCommandOrBuilder() { - if (commandCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command) command_; - } - return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } - - public static final int TRANSACTION_FIELD_NUMBER = 3; - - /** - * .redis_request.Transaction transaction = 3; - * - * @return Whether the transaction field is set. - */ - @java.lang.Override - public boolean hasTransaction() { - return commandCase_ == 3; - } - - /** - * .redis_request.Transaction transaction = 3; - * - * @return The transaction. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Transaction getTransaction() { - if (commandCase_ == 3) { - return (redis_request.RedisRequestOuterClass.Transaction) command_; - } - return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } - - /** .redis_request.Transaction transaction = 3; */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.TransactionOrBuilder getTransactionOrBuilder() { - if (commandCase_ == 3) { - return (redis_request.RedisRequestOuterClass.Transaction) command_; - } - return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } - - public static final int ROUTE_FIELD_NUMBER = 4; - private redis_request.RedisRequestOuterClass.Routes route_; - - /** - * .redis_request.Routes route = 4; - * - * @return Whether the route field is set. - */ - @java.lang.Override - public boolean hasRoute() { - return route_ != null; - } - - /** - * .redis_request.Routes route = 4; - * - * @return The route. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Routes getRoute() { - return route_ == null - ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() - : route_; - } - - /** .redis_request.Routes route = 4; */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.RoutesOrBuilder getRouteOrBuilder() { - return route_ == null - ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() - : route_; - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (callbackIdx_ != 0) { - output.writeUInt32(1, callbackIdx_); - } - if (commandCase_ == 2) { - output.writeMessage(2, (redis_request.RedisRequestOuterClass.Command) command_); - } - if (commandCase_ == 3) { - output.writeMessage(3, (redis_request.RedisRequestOuterClass.Transaction) command_); - } - if (route_ != null) { - output.writeMessage(4, getRoute()); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (callbackIdx_ != 0) { - size += com.google.protobuf.CodedOutputStream.computeUInt32Size(1, callbackIdx_); - } - if (commandCase_ == 2) { - size += - com.google.protobuf.CodedOutputStream.computeMessageSize( - 2, (redis_request.RedisRequestOuterClass.Command) command_); - } - if (commandCase_ == 3) { - size += - com.google.protobuf.CodedOutputStream.computeMessageSize( - 3, (redis_request.RedisRequestOuterClass.Transaction) command_); - } - if (route_ != null) { - size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getRoute()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.RedisRequest)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.RedisRequest other = - (redis_request.RedisRequestOuterClass.RedisRequest) obj; - - if (getCallbackIdx() != other.getCallbackIdx()) return false; - if (hasRoute() != other.hasRoute()) return false; - if (hasRoute()) { - if (!getRoute().equals(other.getRoute())) return false; - } - if (!getCommandCase().equals(other.getCommandCase())) return false; - switch (commandCase_) { - case 2: - if (!getSingleCommand().equals(other.getSingleCommand())) return false; - break; - case 3: - if (!getTransaction().equals(other.getTransaction())) return false; - break; - case 0: - default: - } - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + CALLBACK_IDX_FIELD_NUMBER; - hash = (53 * hash) + getCallbackIdx(); - if (hasRoute()) { - hash = (37 * hash) + ROUTE_FIELD_NUMBER; - hash = (53 * hash) + getRoute().hashCode(); - } - switch (commandCase_) { - case 2: - hash = (37 * hash) + SINGLE_COMMAND_FIELD_NUMBER; - hash = (53 * hash) + getSingleCommand().hashCode(); - break; - case 3: - hash = (37 * hash) + TRANSACTION_FIELD_NUMBER; - hash = (53 * hash) + getTransaction().hashCode(); - break; - case 0: - default: - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseDelimitedFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder(redis_request.RedisRequestOuterClass.RedisRequest prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - - /** Protobuf type {@code redis_request.RedisRequest} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:redis_request.RedisRequest) - redis_request.RedisRequestOuterClass.RedisRequestOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_RedisRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_RedisRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.RedisRequest.class, - redis_request.RedisRequestOuterClass.RedisRequest.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.RedisRequest.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - callbackIdx_ = 0; - if (singleCommandBuilder_ != null) { - singleCommandBuilder_.clear(); - } - if (transactionBuilder_ != null) { - transactionBuilder_.clear(); - } - route_ = null; - if (routeBuilder_ != null) { - routeBuilder_.dispose(); - routeBuilder_ = null; - } - commandCase_ = 0; - command_ = null; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return redis_request.RedisRequestOuterClass - .internal_static_redis_request_RedisRequest_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.RedisRequest getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.RedisRequest.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.RedisRequest build() { - redis_request.RedisRequestOuterClass.RedisRequest result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.RedisRequest buildPartial() { - redis_request.RedisRequestOuterClass.RedisRequest result = - new redis_request.RedisRequestOuterClass.RedisRequest(this); - if (bitField0_ != 0) { - buildPartial0(result); - } - buildPartialOneofs(result); - onBuilt(); - return result; - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.RedisRequest result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.callbackIdx_ = callbackIdx_; - } - if (((from_bitField0_ & 0x00000008) != 0)) { - result.route_ = routeBuilder_ == null ? route_ : routeBuilder_.build(); - } - } - - private void buildPartialOneofs(redis_request.RedisRequestOuterClass.RedisRequest result) { - result.commandCase_ = commandCase_; - result.command_ = this.command_; - if (commandCase_ == 2 && singleCommandBuilder_ != null) { - result.command_ = singleCommandBuilder_.build(); - } - if (commandCase_ == 3 && transactionBuilder_ != null) { - result.command_ = transactionBuilder_.build(); - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.RedisRequest) { - return mergeFrom((redis_request.RedisRequestOuterClass.RedisRequest) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.RedisRequest other) { - if (other == redis_request.RedisRequestOuterClass.RedisRequest.getDefaultInstance()) - return this; - if (other.getCallbackIdx() != 0) { - setCallbackIdx(other.getCallbackIdx()); - } - if (other.hasRoute()) { - mergeRoute(other.getRoute()); - } - switch (other.getCommandCase()) { - case SINGLE_COMMAND: - { - mergeSingleCommand(other.getSingleCommand()); - break; - } - case TRANSACTION: - { - mergeTransaction(other.getTransaction()); - break; - } - case COMMAND_NOT_SET: - { - break; - } - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: - { - callbackIdx_ = input.readUInt32(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 18: - { - input.readMessage(getSingleCommandFieldBuilder().getBuilder(), extensionRegistry); - commandCase_ = 2; - break; - } // case 18 - case 26: - { - input.readMessage(getTransactionFieldBuilder().getBuilder(), extensionRegistry); - commandCase_ = 3; - break; - } // case 26 - case 34: - { - input.readMessage(getRouteFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000008; - break; - } // case 34 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int commandCase_ = 0; - private java.lang.Object command_; - - public CommandCase getCommandCase() { - return CommandCase.forNumber(commandCase_); - } - - public Builder clearCommand() { - commandCase_ = 0; - command_ = null; - onChanged(); - return this; - } - - private int bitField0_; - - private int callbackIdx_; - - /** - * uint32 callback_idx = 1; - * - * @return The callbackIdx. - */ - @java.lang.Override - public int getCallbackIdx() { - return callbackIdx_; - } - - /** - * uint32 callback_idx = 1; - * - * @param value The callbackIdx to set. - * @return This builder for chaining. - */ - public Builder setCallbackIdx(int value) { - - callbackIdx_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - /** - * uint32 callback_idx = 1; - * - * @return This builder for chaining. - */ - public Builder clearCallbackIdx() { - bitField0_ = (bitField0_ & ~0x00000001); - callbackIdx_ = 0; - onChanged(); - return this; - } - - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command, - redis_request.RedisRequestOuterClass.Command.Builder, - redis_request.RedisRequestOuterClass.CommandOrBuilder> - singleCommandBuilder_; - - /** - * .redis_request.Command single_command = 2; - * - * @return Whether the singleCommand field is set. - */ - @java.lang.Override - public boolean hasSingleCommand() { - return commandCase_ == 2; - } - - /** - * .redis_request.Command single_command = 2; - * - * @return The singleCommand. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command getSingleCommand() { - if (singleCommandBuilder_ == null) { - if (commandCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command) command_; - } - return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } else { - if (commandCase_ == 2) { - return singleCommandBuilder_.getMessage(); - } - return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } - } - - /** .redis_request.Command single_command = 2; */ - public Builder setSingleCommand(redis_request.RedisRequestOuterClass.Command value) { - if (singleCommandBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - command_ = value; - onChanged(); - } else { - singleCommandBuilder_.setMessage(value); - } - commandCase_ = 2; - return this; - } - - /** .redis_request.Command single_command = 2; */ - public Builder setSingleCommand( - redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { - if (singleCommandBuilder_ == null) { - command_ = builderForValue.build(); - onChanged(); - } else { - singleCommandBuilder_.setMessage(builderForValue.build()); - } - commandCase_ = 2; - return this; - } - - /** .redis_request.Command single_command = 2; */ - public Builder mergeSingleCommand(redis_request.RedisRequestOuterClass.Command value) { - if (singleCommandBuilder_ == null) { - if (commandCase_ == 2 - && command_ != redis_request.RedisRequestOuterClass.Command.getDefaultInstance()) { - command_ = - redis_request.RedisRequestOuterClass.Command.newBuilder( - (redis_request.RedisRequestOuterClass.Command) command_) - .mergeFrom(value) - .buildPartial(); - } else { - command_ = value; - } - onChanged(); - } else { - if (commandCase_ == 2) { - singleCommandBuilder_.mergeFrom(value); - } else { - singleCommandBuilder_.setMessage(value); - } - } - commandCase_ = 2; - return this; - } - - /** .redis_request.Command single_command = 2; */ - public Builder clearSingleCommand() { - if (singleCommandBuilder_ == null) { - if (commandCase_ == 2) { - commandCase_ = 0; - command_ = null; - onChanged(); - } - } else { - if (commandCase_ == 2) { - commandCase_ = 0; - command_ = null; - } - singleCommandBuilder_.clear(); - } - return this; - } - - /** .redis_request.Command single_command = 2; */ - public redis_request.RedisRequestOuterClass.Command.Builder getSingleCommandBuilder() { - return getSingleCommandFieldBuilder().getBuilder(); - } - - /** .redis_request.Command single_command = 2; */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.CommandOrBuilder getSingleCommandOrBuilder() { - if ((commandCase_ == 2) && (singleCommandBuilder_ != null)) { - return singleCommandBuilder_.getMessageOrBuilder(); - } else { - if (commandCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command) command_; - } - return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } - } - - /** .redis_request.Command single_command = 2; */ - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command, - redis_request.RedisRequestOuterClass.Command.Builder, - redis_request.RedisRequestOuterClass.CommandOrBuilder> - getSingleCommandFieldBuilder() { - if (singleCommandBuilder_ == null) { - if (!(commandCase_ == 2)) { - command_ = redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } - singleCommandBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command, - redis_request.RedisRequestOuterClass.Command.Builder, - redis_request.RedisRequestOuterClass.CommandOrBuilder>( - (redis_request.RedisRequestOuterClass.Command) command_, - getParentForChildren(), - isClean()); - command_ = null; - } - commandCase_ = 2; - onChanged(); - return singleCommandBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Transaction, - redis_request.RedisRequestOuterClass.Transaction.Builder, - redis_request.RedisRequestOuterClass.TransactionOrBuilder> - transactionBuilder_; - - /** - * .redis_request.Transaction transaction = 3; - * - * @return Whether the transaction field is set. - */ - @java.lang.Override - public boolean hasTransaction() { - return commandCase_ == 3; - } - - /** - * .redis_request.Transaction transaction = 3; - * - * @return The transaction. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Transaction getTransaction() { - if (transactionBuilder_ == null) { - if (commandCase_ == 3) { - return (redis_request.RedisRequestOuterClass.Transaction) command_; - } - return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } else { - if (commandCase_ == 3) { - return transactionBuilder_.getMessage(); - } - return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } - } - - /** .redis_request.Transaction transaction = 3; */ - public Builder setTransaction(redis_request.RedisRequestOuterClass.Transaction value) { - if (transactionBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - command_ = value; - onChanged(); - } else { - transactionBuilder_.setMessage(value); - } - commandCase_ = 3; - return this; - } - - /** .redis_request.Transaction transaction = 3; */ - public Builder setTransaction( - redis_request.RedisRequestOuterClass.Transaction.Builder builderForValue) { - if (transactionBuilder_ == null) { - command_ = builderForValue.build(); - onChanged(); - } else { - transactionBuilder_.setMessage(builderForValue.build()); - } - commandCase_ = 3; - return this; - } - - /** .redis_request.Transaction transaction = 3; */ - public Builder mergeTransaction(redis_request.RedisRequestOuterClass.Transaction value) { - if (transactionBuilder_ == null) { - if (commandCase_ == 3 - && command_ - != redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance()) { - command_ = - redis_request.RedisRequestOuterClass.Transaction.newBuilder( - (redis_request.RedisRequestOuterClass.Transaction) command_) - .mergeFrom(value) - .buildPartial(); - } else { - command_ = value; - } - onChanged(); - } else { - if (commandCase_ == 3) { - transactionBuilder_.mergeFrom(value); - } else { - transactionBuilder_.setMessage(value); - } - } - commandCase_ = 3; - return this; - } - - /** .redis_request.Transaction transaction = 3; */ - public Builder clearTransaction() { - if (transactionBuilder_ == null) { - if (commandCase_ == 3) { - commandCase_ = 0; - command_ = null; - onChanged(); - } - } else { - if (commandCase_ == 3) { - commandCase_ = 0; - command_ = null; - } - transactionBuilder_.clear(); - } - return this; - } - - /** .redis_request.Transaction transaction = 3; */ - public redis_request.RedisRequestOuterClass.Transaction.Builder getTransactionBuilder() { - return getTransactionFieldBuilder().getBuilder(); - } - - /** .redis_request.Transaction transaction = 3; */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.TransactionOrBuilder getTransactionOrBuilder() { - if ((commandCase_ == 3) && (transactionBuilder_ != null)) { - return transactionBuilder_.getMessageOrBuilder(); - } else { - if (commandCase_ == 3) { - return (redis_request.RedisRequestOuterClass.Transaction) command_; - } - return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } - } - - /** .redis_request.Transaction transaction = 3; */ - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Transaction, - redis_request.RedisRequestOuterClass.Transaction.Builder, - redis_request.RedisRequestOuterClass.TransactionOrBuilder> - getTransactionFieldBuilder() { - if (transactionBuilder_ == null) { - if (!(commandCase_ == 3)) { - command_ = redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } - transactionBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Transaction, - redis_request.RedisRequestOuterClass.Transaction.Builder, - redis_request.RedisRequestOuterClass.TransactionOrBuilder>( - (redis_request.RedisRequestOuterClass.Transaction) command_, - getParentForChildren(), - isClean()); - command_ = null; - } - commandCase_ = 3; - onChanged(); - return transactionBuilder_; - } - - private redis_request.RedisRequestOuterClass.Routes route_; - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Routes, - redis_request.RedisRequestOuterClass.Routes.Builder, - redis_request.RedisRequestOuterClass.RoutesOrBuilder> - routeBuilder_; - - /** - * .redis_request.Routes route = 4; - * - * @return Whether the route field is set. - */ - public boolean hasRoute() { - return ((bitField0_ & 0x00000008) != 0); - } - - /** - * .redis_request.Routes route = 4; - * - * @return The route. - */ - public redis_request.RedisRequestOuterClass.Routes getRoute() { - if (routeBuilder_ == null) { - return route_ == null - ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() - : route_; - } else { - return routeBuilder_.getMessage(); - } - } - - /** .redis_request.Routes route = 4; */ - public Builder setRoute(redis_request.RedisRequestOuterClass.Routes value) { - if (routeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - route_ = value; - } else { - routeBuilder_.setMessage(value); - } - bitField0_ |= 0x00000008; - onChanged(); - return this; - } - - /** .redis_request.Routes route = 4; */ - public Builder setRoute(redis_request.RedisRequestOuterClass.Routes.Builder builderForValue) { - if (routeBuilder_ == null) { - route_ = builderForValue.build(); - } else { - routeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000008; - onChanged(); - return this; - } - - /** .redis_request.Routes route = 4; */ - public Builder mergeRoute(redis_request.RedisRequestOuterClass.Routes value) { - if (routeBuilder_ == null) { - if (((bitField0_ & 0x00000008) != 0) - && route_ != null - && route_ != redis_request.RedisRequestOuterClass.Routes.getDefaultInstance()) { - getRouteBuilder().mergeFrom(value); - } else { - route_ = value; - } - } else { - routeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000008; - onChanged(); - return this; - } - - /** .redis_request.Routes route = 4; */ - public Builder clearRoute() { - bitField0_ = (bitField0_ & ~0x00000008); - route_ = null; - if (routeBuilder_ != null) { - routeBuilder_.dispose(); - routeBuilder_ = null; - } - onChanged(); - return this; - } - - /** .redis_request.Routes route = 4; */ - public redis_request.RedisRequestOuterClass.Routes.Builder getRouteBuilder() { - bitField0_ |= 0x00000008; - onChanged(); - return getRouteFieldBuilder().getBuilder(); - } - - /** .redis_request.Routes route = 4; */ - public redis_request.RedisRequestOuterClass.RoutesOrBuilder getRouteOrBuilder() { - if (routeBuilder_ != null) { - return routeBuilder_.getMessageOrBuilder(); - } else { - return route_ == null - ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() - : route_; - } - } - - /** .redis_request.Routes route = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Routes, - redis_request.RedisRequestOuterClass.Routes.Builder, - redis_request.RedisRequestOuterClass.RoutesOrBuilder> - getRouteFieldBuilder() { - if (routeBuilder_ == null) { - routeBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Routes, - redis_request.RedisRequestOuterClass.Routes.Builder, - redis_request.RedisRequestOuterClass.RoutesOrBuilder>( - getRoute(), getParentForChildren(), isClean()); - route_ = null; - } - return routeBuilder_; - } - - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:redis_request.RedisRequest) - } - - // @@protoc_insertion_point(class_scope:redis_request.RedisRequest) - private static final redis_request.RedisRequestOuterClass.RedisRequest DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.RedisRequest(); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RedisRequest parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException() - .setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.RedisRequest getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_SlotIdRoute_descriptor; - private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_SlotIdRoute_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_SlotKeyRoute_descriptor; - private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_SlotKeyRoute_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_Routes_descriptor; - private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_Routes_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_Command_descriptor; - private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_Command_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_Command_ArgsArray_descriptor; - private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_Command_ArgsArray_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_Transaction_descriptor; - private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_Transaction_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_RedisRequest_descriptor; - private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_RedisRequest_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { - return descriptor; - } - - private static com.google.protobuf.Descriptors.FileDescriptor descriptor; - - static { - java.lang.String[] descriptorData = { - "\n" - + "\023redis_request.proto\022\r" - + "redis_request\"K\n" - + "\013SlotIdRoute\022+\n" - + "\tslot_type\030\001 \001(\0162\030.redis_request.SlotTypes\022\017\n" - + "\007slot_id\030\002 \001(\005\"M\n" - + "\014SlotKeyRoute\022+\n" - + "\tslot_type\030\001 \001(\0162\030.redis_request.SlotTypes\022\020\n" - + "\010slot_key\030\002 \001(\t\"\263\001\n" - + "\006Routes\0224\n\r" - + "simple_routes\030\001 \001(\0162\033.redis_request.SimpleRoutesH\000\0225\n" - + "\016slot_key_route\030\002 \001(\0132\033.redis_request.SlotKeyRouteH\000\0223\n\r" - + "slot_id_route\030\003 \001(\0132\032.redis_request.SlotIdRouteH\000B\007\n" - + "\005value\"\262\001\n" - + "\007Command\0220\n" - + "\014request_type\030\001 \001(\0162\032.redis_request.RequestType\0226\n\n" - + "args_array\030\002 \001(\0132 .redis_request.Command.ArgsArrayH\000\022\032\n" - + "\020args_vec_pointer\030\003 \001(\004H\000\032\031\n" - + "\tArgsArray\022\014\n" - + "\004args\030\001 \003(\tB\006\n" - + "\004args\"7\n" - + "\013Transaction\022(\n" - + "\010commands\030\001 \003(\0132\026.redis_request.Command\"\272\001\n" - + "\014RedisRequest\022\024\n" - + "\014callback_idx\030\001 \001(\r" - + "\0220\n" - + "\016single_command\030\002 \001(\0132\026.redis_request.CommandH\000\0221\n" - + "\013transaction\030\003 \001(\0132\032.redis_request.TransactionH\000\022$\n" - + "\005route\030\004 \001(\0132\025.redis_request.RoutesB\t\n" - + "\007command*:\n" - + "\014SimpleRoutes\022\014\n" - + "\010AllNodes\020\000\022\020\n" - + "\014AllPrimaries\020\001\022\n\n" - + "\006Random\020\002*%\n" - + "\tSlotTypes\022\013\n" - + "\007Primary\020\000\022\013\n" - + "\007Replica\020\001*\316\004\n" - + "\013RequestType\022\022\n" - + "\016InvalidRequest\020\000\022\021\n\r" - + "CustomCommand\020\001\022\r\n" - + "\tGetString\020\002\022\r\n" - + "\tSetString\020\003\022\010\n" - + "\004Ping\020\004\022\010\n" - + "\004Info\020\005\022\007\n" - + "\003Del\020\006\022\n\n" - + "\006Select\020\007\022\r\n" - + "\tConfigGet\020\010\022\r\n" - + "\tConfigSet\020\t\022\023\n" - + "\017ConfigResetStat\020\n" - + "\022\021\n" - + "\r" - + "ConfigRewrite\020\013\022\021\n\r" - + "ClientGetName\020\014\022\022\n" - + "\016ClientGetRedir\020\r" - + "\022\014\n" - + "\010ClientId\020\016\022\016\n\n" - + "ClientInfo\020\017\022\016\n\n" - + "ClientKill\020\020\022\016\n\n" - + "ClientList\020\021\022\021\n" - + "\r" - + "ClientNoEvict\020\022\022\021\n\r" - + "ClientNoTouch\020\023\022\017\n" - + "\013ClientPause\020\024\022\017\n" - + "\013ClientReply\020\025\022\021\n\r" - + "ClientSetInfo\020\026\022\021\n\r" - + "ClientSetName\020\027\022\021\n\r" - + "ClientUnblock\020\030\022\021\n\r" - + "ClientUnpause\020\031\022\n\n" - + "\006Expire\020\032\022\013\n" - + "\007HashSet\020\033\022\013\n" - + "\007HashGet\020\034\022\013\n" - + "\007HashDel\020\035\022\016\n\n" - + "HashExists\020\036\022\010\n" - + "\004MGet\020\037\022\010\n" - + "\004MSet\020 \022\010\n" - + "\004Incr\020!\022\n\n" - + "\006IncrBy\020\"\022\010\n" - + "\004Decr\020#\022\017\n" - + "\013IncrByFloat\020$\022\n\n" - + "\006DecrBy\020%b\006proto3" - }; - descriptor = - com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( - descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {}); - internal_static_redis_request_SlotIdRoute_descriptor = getDescriptor().getMessageTypes().get(0); - internal_static_redis_request_SlotIdRoute_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_redis_request_SlotIdRoute_descriptor, - new java.lang.String[] { - "SlotType", "SlotId", - }); - internal_static_redis_request_SlotKeyRoute_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_redis_request_SlotKeyRoute_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_redis_request_SlotKeyRoute_descriptor, - new java.lang.String[] { - "SlotType", "SlotKey", - }); - internal_static_redis_request_Routes_descriptor = getDescriptor().getMessageTypes().get(2); - internal_static_redis_request_Routes_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_redis_request_Routes_descriptor, - new java.lang.String[] { - "SimpleRoutes", "SlotKeyRoute", "SlotIdRoute", "Value", - }); - internal_static_redis_request_Command_descriptor = getDescriptor().getMessageTypes().get(3); - internal_static_redis_request_Command_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_redis_request_Command_descriptor, - new java.lang.String[] { - "RequestType", "ArgsArray", "ArgsVecPointer", "Args", - }); - internal_static_redis_request_Command_ArgsArray_descriptor = - internal_static_redis_request_Command_descriptor.getNestedTypes().get(0); - internal_static_redis_request_Command_ArgsArray_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_redis_request_Command_ArgsArray_descriptor, - new java.lang.String[] { - "Args", - }); - internal_static_redis_request_Transaction_descriptor = getDescriptor().getMessageTypes().get(4); - internal_static_redis_request_Transaction_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_redis_request_Transaction_descriptor, - new java.lang.String[] { - "Commands", - }); - internal_static_redis_request_RedisRequest_descriptor = - getDescriptor().getMessageTypes().get(5); - internal_static_redis_request_RedisRequest_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_redis_request_RedisRequest_descriptor, - new java.lang.String[] { - "CallbackIdx", "SingleCommand", "Transaction", "Route", "Command", - }); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/java/benchmarks/src/main/java/javababushka/client/ResponseOuterClass.java b/java/benchmarks/src/main/java/javababushka/client/ResponseOuterClass.java deleted file mode 100644 index d94678db3f..0000000000 --- a/java/benchmarks/src/main/java/javababushka/client/ResponseOuterClass.java +++ /dev/null @@ -1,2283 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: response.proto - -package response; - -public final class ResponseOuterClass { - private ResponseOuterClass() {} - - public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} - - public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); - } - - /** Protobuf enum {@code response.RequestErrorType} */ - public enum RequestErrorType implements com.google.protobuf.ProtocolMessageEnum { - /** Unspecified = 0; */ - Unspecified(0), - /** ExecAbort = 1; */ - ExecAbort(1), - /** Timeout = 2; */ - Timeout(2), - /** Disconnect = 3; */ - Disconnect(3), - UNRECOGNIZED(-1), - ; - - /** Unspecified = 0; */ - public static final int Unspecified_VALUE = 0; - - /** ExecAbort = 1; */ - public static final int ExecAbort_VALUE = 1; - - /** Timeout = 2; */ - public static final int Timeout_VALUE = 2; - - /** Disconnect = 3; */ - public static final int Disconnect_VALUE = 3; - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static RequestErrorType valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static RequestErrorType forNumber(int value) { - switch (value) { - case 0: - return Unspecified; - case 1: - return ExecAbort; - case 2: - return Timeout; - case 3: - return Disconnect; - default: - return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { - return internalValueMap; - } - - private static final com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RequestErrorType findValueByNumber(int number) { - return RequestErrorType.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - - public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { - return getDescriptor(); - } - - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return response.ResponseOuterClass.getDescriptor().getEnumTypes().get(0); - } - - private static final RequestErrorType[] VALUES = values(); - - public static RequestErrorType valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private RequestErrorType(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:response.RequestErrorType) - } - - /** Protobuf enum {@code response.ConstantResponse} */ - public enum ConstantResponse implements com.google.protobuf.ProtocolMessageEnum { - /** OK = 0; */ - OK(0), - UNRECOGNIZED(-1), - ; - - /** OK = 0; */ - public static final int OK_VALUE = 0; - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static ConstantResponse valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static ConstantResponse forNumber(int value) { - switch (value) { - case 0: - return OK; - default: - return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { - return internalValueMap; - } - - private static final com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public ConstantResponse findValueByNumber(int number) { - return ConstantResponse.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - - public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { - return getDescriptor(); - } - - public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { - return response.ResponseOuterClass.getDescriptor().getEnumTypes().get(1); - } - - private static final ConstantResponse[] VALUES = values(); - - public static ConstantResponse valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private ConstantResponse(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:response.ConstantResponse) - } - - public interface RequestErrorOrBuilder - extends - // @@protoc_insertion_point(interface_extends:response.RequestError) - com.google.protobuf.MessageOrBuilder { - - /** - * .response.RequestErrorType type = 1; - * - * @return The enum numeric value on the wire for type. - */ - int getTypeValue(); - - /** - * .response.RequestErrorType type = 1; - * - * @return The type. - */ - response.ResponseOuterClass.RequestErrorType getType(); - - /** - * string message = 2; - * - * @return The message. - */ - java.lang.String getMessage(); - - /** - * string message = 2; - * - * @return The bytes for message. - */ - com.google.protobuf.ByteString getMessageBytes(); - } - - /** Protobuf type {@code response.RequestError} */ - public static final class RequestError extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:response.RequestError) - RequestErrorOrBuilder { - private static final long serialVersionUID = 0L; - - // Use RequestError.newBuilder() to construct. - private RequestError(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private RequestError() { - type_ = 0; - message_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new RequestError(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return response.ResponseOuterClass.internal_static_response_RequestError_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return response.ResponseOuterClass.internal_static_response_RequestError_fieldAccessorTable - .ensureFieldAccessorsInitialized( - response.ResponseOuterClass.RequestError.class, - response.ResponseOuterClass.RequestError.Builder.class); - } - - public static final int TYPE_FIELD_NUMBER = 1; - private int type_ = 0; - - /** - * .response.RequestErrorType type = 1; - * - * @return The enum numeric value on the wire for type. - */ - @java.lang.Override - public int getTypeValue() { - return type_; - } - - /** - * .response.RequestErrorType type = 1; - * - * @return The type. - */ - @java.lang.Override - public response.ResponseOuterClass.RequestErrorType getType() { - response.ResponseOuterClass.RequestErrorType result = - response.ResponseOuterClass.RequestErrorType.forNumber(type_); - return result == null ? response.ResponseOuterClass.RequestErrorType.UNRECOGNIZED : result; - } - - public static final int MESSAGE_FIELD_NUMBER = 2; - - @SuppressWarnings("serial") - private volatile java.lang.Object message_ = ""; - - /** - * string message = 2; - * - * @return The message. - */ - @java.lang.Override - public java.lang.String getMessage() { - java.lang.Object ref = message_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - message_ = s; - return s; - } - } - - /** - * string message = 2; - * - * @return The bytes for message. - */ - @java.lang.Override - public com.google.protobuf.ByteString getMessageBytes() { - java.lang.Object ref = message_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - message_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (type_ != response.ResponseOuterClass.RequestErrorType.Unspecified.getNumber()) { - output.writeEnum(1, type_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, message_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (type_ != response.ResponseOuterClass.RequestErrorType.Unspecified.getNumber()) { - size += com.google.protobuf.CodedOutputStream.computeEnumSize(1, type_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, message_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof response.ResponseOuterClass.RequestError)) { - return super.equals(obj); - } - response.ResponseOuterClass.RequestError other = - (response.ResponseOuterClass.RequestError) obj; - - if (type_ != other.type_) return false; - if (!getMessage().equals(other.getMessage())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + TYPE_FIELD_NUMBER; - hash = (53 * hash) + type_; - hash = (37 * hash) + MESSAGE_FIELD_NUMBER; - hash = (53 * hash) + getMessage().hashCode(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static response.ResponseOuterClass.RequestError parseFrom(java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static response.ResponseOuterClass.RequestError parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static response.ResponseOuterClass.RequestError parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static response.ResponseOuterClass.RequestError parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static response.ResponseOuterClass.RequestError parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static response.ResponseOuterClass.RequestError parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static response.ResponseOuterClass.RequestError parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static response.ResponseOuterClass.RequestError parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static response.ResponseOuterClass.RequestError parseDelimitedFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static response.ResponseOuterClass.RequestError parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static response.ResponseOuterClass.RequestError parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static response.ResponseOuterClass.RequestError parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder(response.ResponseOuterClass.RequestError prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - - /** Protobuf type {@code response.RequestError} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:response.RequestError) - response.ResponseOuterClass.RequestErrorOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return response.ResponseOuterClass.internal_static_response_RequestError_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return response.ResponseOuterClass.internal_static_response_RequestError_fieldAccessorTable - .ensureFieldAccessorsInitialized( - response.ResponseOuterClass.RequestError.class, - response.ResponseOuterClass.RequestError.Builder.class); - } - - // Construct using response.ResponseOuterClass.RequestError.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - type_ = 0; - message_ = ""; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return response.ResponseOuterClass.internal_static_response_RequestError_descriptor; - } - - @java.lang.Override - public response.ResponseOuterClass.RequestError getDefaultInstanceForType() { - return response.ResponseOuterClass.RequestError.getDefaultInstance(); - } - - @java.lang.Override - public response.ResponseOuterClass.RequestError build() { - response.ResponseOuterClass.RequestError result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public response.ResponseOuterClass.RequestError buildPartial() { - response.ResponseOuterClass.RequestError result = - new response.ResponseOuterClass.RequestError(this); - if (bitField0_ != 0) { - buildPartial0(result); - } - onBuilt(); - return result; - } - - private void buildPartial0(response.ResponseOuterClass.RequestError result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.type_ = type_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.message_ = message_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof response.ResponseOuterClass.RequestError) { - return mergeFrom((response.ResponseOuterClass.RequestError) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(response.ResponseOuterClass.RequestError other) { - if (other == response.ResponseOuterClass.RequestError.getDefaultInstance()) return this; - if (other.type_ != 0) { - setTypeValue(other.getTypeValue()); - } - if (!other.getMessage().isEmpty()) { - message_ = other.message_; - bitField0_ |= 0x00000002; - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: - { - type_ = input.readEnum(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 18: - { - message_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000002; - break; - } // case 18 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int bitField0_; - - private int type_ = 0; - - /** - * .response.RequestErrorType type = 1; - * - * @return The enum numeric value on the wire for type. - */ - @java.lang.Override - public int getTypeValue() { - return type_; - } - - /** - * .response.RequestErrorType type = 1; - * - * @param value The enum numeric value on the wire for type to set. - * @return This builder for chaining. - */ - public Builder setTypeValue(int value) { - type_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - /** - * .response.RequestErrorType type = 1; - * - * @return The type. - */ - @java.lang.Override - public response.ResponseOuterClass.RequestErrorType getType() { - response.ResponseOuterClass.RequestErrorType result = - response.ResponseOuterClass.RequestErrorType.forNumber(type_); - return result == null ? response.ResponseOuterClass.RequestErrorType.UNRECOGNIZED : result; - } - - /** - * .response.RequestErrorType type = 1; - * - * @param value The type to set. - * @return This builder for chaining. - */ - public Builder setType(response.ResponseOuterClass.RequestErrorType value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - type_ = value.getNumber(); - onChanged(); - return this; - } - - /** - * .response.RequestErrorType type = 1; - * - * @return This builder for chaining. - */ - public Builder clearType() { - bitField0_ = (bitField0_ & ~0x00000001); - type_ = 0; - onChanged(); - return this; - } - - private java.lang.Object message_ = ""; - - /** - * string message = 2; - * - * @return The message. - */ - public java.lang.String getMessage() { - java.lang.Object ref = message_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - message_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - - /** - * string message = 2; - * - * @return The bytes for message. - */ - public com.google.protobuf.ByteString getMessageBytes() { - java.lang.Object ref = message_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - message_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - /** - * string message = 2; - * - * @param value The message to set. - * @return This builder for chaining. - */ - public Builder setMessage(java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - message_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - - /** - * string message = 2; - * - * @return This builder for chaining. - */ - public Builder clearMessage() { - message_ = getDefaultInstance().getMessage(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - return this; - } - - /** - * string message = 2; - * - * @param value The bytes for message to set. - * @return This builder for chaining. - */ - public Builder setMessageBytes(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - message_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:response.RequestError) - } - - // @@protoc_insertion_point(class_scope:response.RequestError) - private static final response.ResponseOuterClass.RequestError DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new response.ResponseOuterClass.RequestError(); - } - - public static response.ResponseOuterClass.RequestError getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RequestError parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException() - .setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public response.ResponseOuterClass.RequestError getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - } - - public interface ResponseOrBuilder - extends - // @@protoc_insertion_point(interface_extends:response.Response) - com.google.protobuf.MessageOrBuilder { - - /** - * uint32 callback_idx = 1; - * - * @return The callbackIdx. - */ - int getCallbackIdx(); - - /** - * uint64 resp_pointer = 2; - * - * @return Whether the respPointer field is set. - */ - boolean hasRespPointer(); - - /** - * uint64 resp_pointer = 2; - * - * @return The respPointer. - */ - long getRespPointer(); - - /** - * .response.ConstantResponse constant_response = 3; - * - * @return Whether the constantResponse field is set. - */ - boolean hasConstantResponse(); - - /** - * .response.ConstantResponse constant_response = 3; - * - * @return The enum numeric value on the wire for constantResponse. - */ - int getConstantResponseValue(); - - /** - * .response.ConstantResponse constant_response = 3; - * - * @return The constantResponse. - */ - response.ResponseOuterClass.ConstantResponse getConstantResponse(); - - /** - * .response.RequestError request_error = 4; - * - * @return Whether the requestError field is set. - */ - boolean hasRequestError(); - - /** - * .response.RequestError request_error = 4; - * - * @return The requestError. - */ - response.ResponseOuterClass.RequestError getRequestError(); - - /** .response.RequestError request_error = 4; */ - response.ResponseOuterClass.RequestErrorOrBuilder getRequestErrorOrBuilder(); - - /** - * string closing_error = 5; - * - * @return Whether the closingError field is set. - */ - boolean hasClosingError(); - - /** - * string closing_error = 5; - * - * @return The closingError. - */ - java.lang.String getClosingError(); - - /** - * string closing_error = 5; - * - * @return The bytes for closingError. - */ - com.google.protobuf.ByteString getClosingErrorBytes(); - - response.ResponseOuterClass.Response.ValueCase getValueCase(); - } - - /** Protobuf type {@code response.Response} */ - public static final class Response extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:response.Response) - ResponseOrBuilder { - private static final long serialVersionUID = 0L; - - // Use Response.newBuilder() to construct. - private Response(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private Response() {} - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new Response(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return response.ResponseOuterClass.internal_static_response_Response_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return response.ResponseOuterClass.internal_static_response_Response_fieldAccessorTable - .ensureFieldAccessorsInitialized( - response.ResponseOuterClass.Response.class, - response.ResponseOuterClass.Response.Builder.class); - } - - private int valueCase_ = 0; - - @SuppressWarnings("serial") - private java.lang.Object value_; - - public enum ValueCase - implements - com.google.protobuf.Internal.EnumLite, - com.google.protobuf.AbstractMessage.InternalOneOfEnum { - RESP_POINTER(2), - CONSTANT_RESPONSE(3), - REQUEST_ERROR(4), - CLOSING_ERROR(5), - VALUE_NOT_SET(0); - private final int value; - - private ValueCase(int value) { - this.value = value; - } - - /** - * @param value The number of the enum to look for. - * @return The enum associated with the given number. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static ValueCase valueOf(int value) { - return forNumber(value); - } - - public static ValueCase forNumber(int value) { - switch (value) { - case 2: - return RESP_POINTER; - case 3: - return CONSTANT_RESPONSE; - case 4: - return REQUEST_ERROR; - case 5: - return CLOSING_ERROR; - case 0: - return VALUE_NOT_SET; - default: - return null; - } - } - - public int getNumber() { - return this.value; - } - }; - - public ValueCase getValueCase() { - return ValueCase.forNumber(valueCase_); - } - - public static final int CALLBACK_IDX_FIELD_NUMBER = 1; - private int callbackIdx_ = 0; - - /** - * uint32 callback_idx = 1; - * - * @return The callbackIdx. - */ - @java.lang.Override - public int getCallbackIdx() { - return callbackIdx_; - } - - public static final int RESP_POINTER_FIELD_NUMBER = 2; - - /** - * uint64 resp_pointer = 2; - * - * @return Whether the respPointer field is set. - */ - @java.lang.Override - public boolean hasRespPointer() { - return valueCase_ == 2; - } - - /** - * uint64 resp_pointer = 2; - * - * @return The respPointer. - */ - @java.lang.Override - public long getRespPointer() { - if (valueCase_ == 2) { - return (java.lang.Long) value_; - } - return 0L; - } - - public static final int CONSTANT_RESPONSE_FIELD_NUMBER = 3; - - /** - * .response.ConstantResponse constant_response = 3; - * - * @return Whether the constantResponse field is set. - */ - public boolean hasConstantResponse() { - return valueCase_ == 3; - } - - /** - * .response.ConstantResponse constant_response = 3; - * - * @return The enum numeric value on the wire for constantResponse. - */ - public int getConstantResponseValue() { - if (valueCase_ == 3) { - return (java.lang.Integer) value_; - } - return 0; - } - - /** - * .response.ConstantResponse constant_response = 3; - * - * @return The constantResponse. - */ - public response.ResponseOuterClass.ConstantResponse getConstantResponse() { - if (valueCase_ == 3) { - response.ResponseOuterClass.ConstantResponse result = - response.ResponseOuterClass.ConstantResponse.forNumber((java.lang.Integer) value_); - return result == null ? response.ResponseOuterClass.ConstantResponse.UNRECOGNIZED : result; - } - return response.ResponseOuterClass.ConstantResponse.OK; - } - - public static final int REQUEST_ERROR_FIELD_NUMBER = 4; - - /** - * .response.RequestError request_error = 4; - * - * @return Whether the requestError field is set. - */ - @java.lang.Override - public boolean hasRequestError() { - return valueCase_ == 4; - } - - /** - * .response.RequestError request_error = 4; - * - * @return The requestError. - */ - @java.lang.Override - public response.ResponseOuterClass.RequestError getRequestError() { - if (valueCase_ == 4) { - return (response.ResponseOuterClass.RequestError) value_; - } - return response.ResponseOuterClass.RequestError.getDefaultInstance(); - } - - /** .response.RequestError request_error = 4; */ - @java.lang.Override - public response.ResponseOuterClass.RequestErrorOrBuilder getRequestErrorOrBuilder() { - if (valueCase_ == 4) { - return (response.ResponseOuterClass.RequestError) value_; - } - return response.ResponseOuterClass.RequestError.getDefaultInstance(); - } - - public static final int CLOSING_ERROR_FIELD_NUMBER = 5; - - /** - * string closing_error = 5; - * - * @return Whether the closingError field is set. - */ - public boolean hasClosingError() { - return valueCase_ == 5; - } - - /** - * string closing_error = 5; - * - * @return The closingError. - */ - public java.lang.String getClosingError() { - java.lang.Object ref = ""; - if (valueCase_ == 5) { - ref = value_; - } - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (valueCase_ == 5) { - value_ = s; - } - return s; - } - } - - /** - * string closing_error = 5; - * - * @return The bytes for closingError. - */ - public com.google.protobuf.ByteString getClosingErrorBytes() { - java.lang.Object ref = ""; - if (valueCase_ == 5) { - ref = value_; - } - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - if (valueCase_ == 5) { - value_ = b; - } - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (callbackIdx_ != 0) { - output.writeUInt32(1, callbackIdx_); - } - if (valueCase_ == 2) { - output.writeUInt64(2, (long) ((java.lang.Long) value_)); - } - if (valueCase_ == 3) { - output.writeEnum(3, ((java.lang.Integer) value_)); - } - if (valueCase_ == 4) { - output.writeMessage(4, (response.ResponseOuterClass.RequestError) value_); - } - if (valueCase_ == 5) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, value_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (callbackIdx_ != 0) { - size += com.google.protobuf.CodedOutputStream.computeUInt32Size(1, callbackIdx_); - } - if (valueCase_ == 2) { - size += - com.google.protobuf.CodedOutputStream.computeUInt64Size( - 2, (long) ((java.lang.Long) value_)); - } - if (valueCase_ == 3) { - size += - com.google.protobuf.CodedOutputStream.computeEnumSize(3, ((java.lang.Integer) value_)); - } - if (valueCase_ == 4) { - size += - com.google.protobuf.CodedOutputStream.computeMessageSize( - 4, (response.ResponseOuterClass.RequestError) value_); - } - if (valueCase_ == 5) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, value_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof response.ResponseOuterClass.Response)) { - return super.equals(obj); - } - response.ResponseOuterClass.Response other = (response.ResponseOuterClass.Response) obj; - - if (getCallbackIdx() != other.getCallbackIdx()) return false; - if (!getValueCase().equals(other.getValueCase())) return false; - switch (valueCase_) { - case 2: - if (getRespPointer() != other.getRespPointer()) return false; - break; - case 3: - if (getConstantResponseValue() != other.getConstantResponseValue()) return false; - break; - case 4: - if (!getRequestError().equals(other.getRequestError())) return false; - break; - case 5: - if (!getClosingError().equals(other.getClosingError())) return false; - break; - case 0: - default: - } - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + CALLBACK_IDX_FIELD_NUMBER; - hash = (53 * hash) + getCallbackIdx(); - switch (valueCase_) { - case 2: - hash = (37 * hash) + RESP_POINTER_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getRespPointer()); - break; - case 3: - hash = (37 * hash) + CONSTANT_RESPONSE_FIELD_NUMBER; - hash = (53 * hash) + getConstantResponseValue(); - break; - case 4: - hash = (37 * hash) + REQUEST_ERROR_FIELD_NUMBER; - hash = (53 * hash) + getRequestError().hashCode(); - break; - case 5: - hash = (37 * hash) + CLOSING_ERROR_FIELD_NUMBER; - hash = (53 * hash) + getClosingError().hashCode(); - break; - case 0: - default: - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static response.ResponseOuterClass.Response parseFrom(java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static response.ResponseOuterClass.Response parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static response.ResponseOuterClass.Response parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static response.ResponseOuterClass.Response parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static response.ResponseOuterClass.Response parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static response.ResponseOuterClass.Response parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static response.ResponseOuterClass.Response parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static response.ResponseOuterClass.Response parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static response.ResponseOuterClass.Response parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static response.ResponseOuterClass.Response parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static response.ResponseOuterClass.Response parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static response.ResponseOuterClass.Response parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder(response.ResponseOuterClass.Response prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - - /** Protobuf type {@code response.Response} */ - public static final class Builder - extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:response.Response) - response.ResponseOuterClass.ResponseOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return response.ResponseOuterClass.internal_static_response_Response_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return response.ResponseOuterClass.internal_static_response_Response_fieldAccessorTable - .ensureFieldAccessorsInitialized( - response.ResponseOuterClass.Response.class, - response.ResponseOuterClass.Response.Builder.class); - } - - // Construct using response.ResponseOuterClass.Response.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - callbackIdx_ = 0; - if (requestErrorBuilder_ != null) { - requestErrorBuilder_.clear(); - } - valueCase_ = 0; - value_ = null; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return response.ResponseOuterClass.internal_static_response_Response_descriptor; - } - - @java.lang.Override - public response.ResponseOuterClass.Response getDefaultInstanceForType() { - return response.ResponseOuterClass.Response.getDefaultInstance(); - } - - @java.lang.Override - public response.ResponseOuterClass.Response build() { - response.ResponseOuterClass.Response result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public response.ResponseOuterClass.Response buildPartial() { - response.ResponseOuterClass.Response result = - new response.ResponseOuterClass.Response(this); - if (bitField0_ != 0) { - buildPartial0(result); - } - buildPartialOneofs(result); - onBuilt(); - return result; - } - - private void buildPartial0(response.ResponseOuterClass.Response result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.callbackIdx_ = callbackIdx_; - } - } - - private void buildPartialOneofs(response.ResponseOuterClass.Response result) { - result.valueCase_ = valueCase_; - result.value_ = this.value_; - if (valueCase_ == 4 && requestErrorBuilder_ != null) { - result.value_ = requestErrorBuilder_.build(); - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, - java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof response.ResponseOuterClass.Response) { - return mergeFrom((response.ResponseOuterClass.Response) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(response.ResponseOuterClass.Response other) { - if (other == response.ResponseOuterClass.Response.getDefaultInstance()) return this; - if (other.getCallbackIdx() != 0) { - setCallbackIdx(other.getCallbackIdx()); - } - switch (other.getValueCase()) { - case RESP_POINTER: - { - setRespPointer(other.getRespPointer()); - break; - } - case CONSTANT_RESPONSE: - { - setConstantResponseValue(other.getConstantResponseValue()); - break; - } - case REQUEST_ERROR: - { - mergeRequestError(other.getRequestError()); - break; - } - case CLOSING_ERROR: - { - valueCase_ = 5; - value_ = other.value_; - onChanged(); - break; - } - case VALUE_NOT_SET: - { - break; - } - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: - { - callbackIdx_ = input.readUInt32(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 16: - { - value_ = input.readUInt64(); - valueCase_ = 2; - break; - } // case 16 - case 24: - { - int rawValue = input.readEnum(); - valueCase_ = 3; - value_ = rawValue; - break; - } // case 24 - case 34: - { - input.readMessage(getRequestErrorFieldBuilder().getBuilder(), extensionRegistry); - valueCase_ = 4; - break; - } // case 34 - case 42: - { - java.lang.String s = input.readStringRequireUtf8(); - valueCase_ = 5; - value_ = s; - break; - } // case 42 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int valueCase_ = 0; - private java.lang.Object value_; - - public ValueCase getValueCase() { - return ValueCase.forNumber(valueCase_); - } - - public Builder clearValue() { - valueCase_ = 0; - value_ = null; - onChanged(); - return this; - } - - private int bitField0_; - - private int callbackIdx_; - - /** - * uint32 callback_idx = 1; - * - * @return The callbackIdx. - */ - @java.lang.Override - public int getCallbackIdx() { - return callbackIdx_; - } - - /** - * uint32 callback_idx = 1; - * - * @param value The callbackIdx to set. - * @return This builder for chaining. - */ - public Builder setCallbackIdx(int value) { - - callbackIdx_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - /** - * uint32 callback_idx = 1; - * - * @return This builder for chaining. - */ - public Builder clearCallbackIdx() { - bitField0_ = (bitField0_ & ~0x00000001); - callbackIdx_ = 0; - onChanged(); - return this; - } - - /** - * uint64 resp_pointer = 2; - * - * @return Whether the respPointer field is set. - */ - public boolean hasRespPointer() { - return valueCase_ == 2; - } - - /** - * uint64 resp_pointer = 2; - * - * @return The respPointer. - */ - public long getRespPointer() { - if (valueCase_ == 2) { - return (java.lang.Long) value_; - } - return 0L; - } - - /** - * uint64 resp_pointer = 2; - * - * @param value The respPointer to set. - * @return This builder for chaining. - */ - public Builder setRespPointer(long value) { - - valueCase_ = 2; - value_ = value; - onChanged(); - return this; - } - - /** - * uint64 resp_pointer = 2; - * - * @return This builder for chaining. - */ - public Builder clearRespPointer() { - if (valueCase_ == 2) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - return this; - } - - /** - * .response.ConstantResponse constant_response = 3; - * - * @return Whether the constantResponse field is set. - */ - @java.lang.Override - public boolean hasConstantResponse() { - return valueCase_ == 3; - } - - /** - * .response.ConstantResponse constant_response = 3; - * - * @return The enum numeric value on the wire for constantResponse. - */ - @java.lang.Override - public int getConstantResponseValue() { - if (valueCase_ == 3) { - return ((java.lang.Integer) value_).intValue(); - } - return 0; - } - - /** - * .response.ConstantResponse constant_response = 3; - * - * @param value The enum numeric value on the wire for constantResponse to set. - * @return This builder for chaining. - */ - public Builder setConstantResponseValue(int value) { - valueCase_ = 3; - value_ = value; - onChanged(); - return this; - } - - /** - * .response.ConstantResponse constant_response = 3; - * - * @return The constantResponse. - */ - @java.lang.Override - public response.ResponseOuterClass.ConstantResponse getConstantResponse() { - if (valueCase_ == 3) { - response.ResponseOuterClass.ConstantResponse result = - response.ResponseOuterClass.ConstantResponse.forNumber((java.lang.Integer) value_); - return result == null - ? response.ResponseOuterClass.ConstantResponse.UNRECOGNIZED - : result; - } - return response.ResponseOuterClass.ConstantResponse.OK; - } - - /** - * .response.ConstantResponse constant_response = 3; - * - * @param value The constantResponse to set. - * @return This builder for chaining. - */ - public Builder setConstantResponse(response.ResponseOuterClass.ConstantResponse value) { - if (value == null) { - throw new NullPointerException(); - } - valueCase_ = 3; - value_ = value.getNumber(); - onChanged(); - return this; - } - - /** - * .response.ConstantResponse constant_response = 3; - * - * @return This builder for chaining. - */ - public Builder clearConstantResponse() { - if (valueCase_ == 3) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - return this; - } - - private com.google.protobuf.SingleFieldBuilderV3< - response.ResponseOuterClass.RequestError, - response.ResponseOuterClass.RequestError.Builder, - response.ResponseOuterClass.RequestErrorOrBuilder> - requestErrorBuilder_; - - /** - * .response.RequestError request_error = 4; - * - * @return Whether the requestError field is set. - */ - @java.lang.Override - public boolean hasRequestError() { - return valueCase_ == 4; - } - - /** - * .response.RequestError request_error = 4; - * - * @return The requestError. - */ - @java.lang.Override - public response.ResponseOuterClass.RequestError getRequestError() { - if (requestErrorBuilder_ == null) { - if (valueCase_ == 4) { - return (response.ResponseOuterClass.RequestError) value_; - } - return response.ResponseOuterClass.RequestError.getDefaultInstance(); - } else { - if (valueCase_ == 4) { - return requestErrorBuilder_.getMessage(); - } - return response.ResponseOuterClass.RequestError.getDefaultInstance(); - } - } - - /** .response.RequestError request_error = 4; */ - public Builder setRequestError(response.ResponseOuterClass.RequestError value) { - if (requestErrorBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - value_ = value; - onChanged(); - } else { - requestErrorBuilder_.setMessage(value); - } - valueCase_ = 4; - return this; - } - - /** .response.RequestError request_error = 4; */ - public Builder setRequestError( - response.ResponseOuterClass.RequestError.Builder builderForValue) { - if (requestErrorBuilder_ == null) { - value_ = builderForValue.build(); - onChanged(); - } else { - requestErrorBuilder_.setMessage(builderForValue.build()); - } - valueCase_ = 4; - return this; - } - - /** .response.RequestError request_error = 4; */ - public Builder mergeRequestError(response.ResponseOuterClass.RequestError value) { - if (requestErrorBuilder_ == null) { - if (valueCase_ == 4 - && value_ != response.ResponseOuterClass.RequestError.getDefaultInstance()) { - value_ = - response.ResponseOuterClass.RequestError.newBuilder( - (response.ResponseOuterClass.RequestError) value_) - .mergeFrom(value) - .buildPartial(); - } else { - value_ = value; - } - onChanged(); - } else { - if (valueCase_ == 4) { - requestErrorBuilder_.mergeFrom(value); - } else { - requestErrorBuilder_.setMessage(value); - } - } - valueCase_ = 4; - return this; - } - - /** .response.RequestError request_error = 4; */ - public Builder clearRequestError() { - if (requestErrorBuilder_ == null) { - if (valueCase_ == 4) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - } else { - if (valueCase_ == 4) { - valueCase_ = 0; - value_ = null; - } - requestErrorBuilder_.clear(); - } - return this; - } - - /** .response.RequestError request_error = 4; */ - public response.ResponseOuterClass.RequestError.Builder getRequestErrorBuilder() { - return getRequestErrorFieldBuilder().getBuilder(); - } - - /** .response.RequestError request_error = 4; */ - @java.lang.Override - public response.ResponseOuterClass.RequestErrorOrBuilder getRequestErrorOrBuilder() { - if ((valueCase_ == 4) && (requestErrorBuilder_ != null)) { - return requestErrorBuilder_.getMessageOrBuilder(); - } else { - if (valueCase_ == 4) { - return (response.ResponseOuterClass.RequestError) value_; - } - return response.ResponseOuterClass.RequestError.getDefaultInstance(); - } - } - - /** .response.RequestError request_error = 4; */ - private com.google.protobuf.SingleFieldBuilderV3< - response.ResponseOuterClass.RequestError, - response.ResponseOuterClass.RequestError.Builder, - response.ResponseOuterClass.RequestErrorOrBuilder> - getRequestErrorFieldBuilder() { - if (requestErrorBuilder_ == null) { - if (!(valueCase_ == 4)) { - value_ = response.ResponseOuterClass.RequestError.getDefaultInstance(); - } - requestErrorBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - response.ResponseOuterClass.RequestError, - response.ResponseOuterClass.RequestError.Builder, - response.ResponseOuterClass.RequestErrorOrBuilder>( - (response.ResponseOuterClass.RequestError) value_, - getParentForChildren(), - isClean()); - value_ = null; - } - valueCase_ = 4; - onChanged(); - return requestErrorBuilder_; - } - - /** - * string closing_error = 5; - * - * @return Whether the closingError field is set. - */ - @java.lang.Override - public boolean hasClosingError() { - return valueCase_ == 5; - } - - /** - * string closing_error = 5; - * - * @return The closingError. - */ - @java.lang.Override - public java.lang.String getClosingError() { - java.lang.Object ref = ""; - if (valueCase_ == 5) { - ref = value_; - } - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (valueCase_ == 5) { - value_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - - /** - * string closing_error = 5; - * - * @return The bytes for closingError. - */ - @java.lang.Override - public com.google.protobuf.ByteString getClosingErrorBytes() { - java.lang.Object ref = ""; - if (valueCase_ == 5) { - ref = value_; - } - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - if (valueCase_ == 5) { - value_ = b; - } - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - /** - * string closing_error = 5; - * - * @param value The closingError to set. - * @return This builder for chaining. - */ - public Builder setClosingError(java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - valueCase_ = 5; - value_ = value; - onChanged(); - return this; - } - - /** - * string closing_error = 5; - * - * @return This builder for chaining. - */ - public Builder clearClosingError() { - if (valueCase_ == 5) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - return this; - } - - /** - * string closing_error = 5; - * - * @param value The bytes for closingError to set. - * @return This builder for chaining. - */ - public Builder setClosingErrorBytes(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - valueCase_ = 5; - value_ = value; - onChanged(); - return this; - } - - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:response.Response) - } - - // @@protoc_insertion_point(class_scope:response.Response) - private static final response.ResponseOuterClass.Response DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new response.ResponseOuterClass.Response(); - } - - public static response.ResponseOuterClass.Response getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public Response parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException() - .setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public response.ResponseOuterClass.Response getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_response_RequestError_descriptor; - private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_response_RequestError_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_response_Response_descriptor; - private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_response_Response_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { - return descriptor; - } - - private static com.google.protobuf.Descriptors.FileDescriptor descriptor; - - static { - java.lang.String[] descriptorData = { - "\n\016response.proto\022\010response\"I\n\014RequestErr" - + "or\022(\n\004type\030\001 \001(\0162\032.response.RequestError" - + "Type\022\017\n\007message\030\002 \001(\t\"\304\001\n\010Response\022\024\n\014ca" - + "llback_idx\030\001 \001(\r\022\026\n\014resp_pointer\030\002 \001(\004H\000" - + "\0227\n\021constant_response\030\003 \001(\0162\032.response.C" - + "onstantResponseH\000\022/\n\rrequest_error\030\004 \001(\013" - + "2\026.response.RequestErrorH\000\022\027\n\rclosing_er" - + "ror\030\005 \001(\tH\000B\007\n\005value*O\n\020RequestErrorType" - + "\022\017\n\013Unspecified\020\000\022\r\n\tExecAbort\020\001\022\013\n\007Time" - + "out\020\002\022\016\n\nDisconnect\020\003*\032\n\020ConstantRespons" - + "e\022\006\n\002OK\020\000b\006proto3" - }; - descriptor = - com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( - descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {}); - internal_static_response_RequestError_descriptor = getDescriptor().getMessageTypes().get(0); - internal_static_response_RequestError_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_response_RequestError_descriptor, - new java.lang.String[] { - "Type", "Message", - }); - internal_static_response_Response_descriptor = getDescriptor().getMessageTypes().get(1); - internal_static_response_Response_fieldAccessorTable = - new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_response_Response_descriptor, - new java.lang.String[] { - "CallbackIdx", - "RespPointer", - "ConstantResponse", - "RequestError", - "ClosingError", - "Value", - }); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/java/benchmarks/src/test/java/javababushka/benchmarks/JniNettyTests.java b/java/benchmarks/src/test/java/javababushka/benchmarks/JniNettyTests.java deleted file mode 100644 index 692790b8ec..0000000000 --- a/java/benchmarks/src/test/java/javababushka/benchmarks/JniNettyTests.java +++ /dev/null @@ -1,180 +0,0 @@ -package javababushka.benchmarks; - -import com.google.common.io.Files; -import javababushka.benchmarks.clients.babushka.JniNettyClient; -import javababushka.benchmarks.utils.ChosenAction; -import lombok.SneakyThrows; -import org.apache.commons.lang3.RandomStringUtils; -import org.apache.commons.lang3.tuple.Pair; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; - -import java.io.FileWriter; -import java.io.IOException; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Stream; - -public class JniNettyTests { - - public static Stream generateTestDataWithFlushOnWrite() { - var dataSizes = List.of(20, 100, 400); - var clients = List.of(2, 4); - var threads = List.of(20, 100); - return dataSizes.stream().flatMap(f -> - clients.stream().flatMap(g -> - threads.stream().map(h -> - Arguments.of(true, 0, 0, 0, 0, f, g, h)))); - } - - public static Stream generateTestDataWithoutFlushOnWrite() { - var bytesThresholds = List.of(200, 400, 800, 1600); - var writesThresholds = List.of(5, 10, 20, 50); - var responseTimeouts = List.of(50, 100, 200); - var flushTimers = List.of(100, 200, 500); - var dataSizes = List.of(20, 100, 400); - var clients = List.of(2, 4); - var threads = List.of(20, 100); - return bytesThresholds.stream().flatMap(b -> - writesThresholds.stream().flatMap(c -> - responseTimeouts.stream().flatMap(d -> - flushTimers.stream().flatMap(e -> - dataSizes.stream().flatMap(f -> - clients.stream().flatMap(g -> - threads.stream().map(h -> - Arguments.of(false, b, c, d, e, f, g, h)))))))); - } - - private static FileWriter log; - private static final String key = String.valueOf(ProcessHandle.current().pid()); - private static final int iterations = 1000000; - - @BeforeAll - @SneakyThrows - public static void openLog() { - log = new FileWriter(Paths.get(System.getProperty("user.dir"), - "JniNettyClient-test-report.txt").toFile(), true); - log.append(String.format("\n\n=========================\niterations = %d, key = %s\n", iterations, key)); - } - - @AfterAll - @SneakyThrows - public static void closeLog() { - log.append("\n\n\n============== RECORDS ==============\n"); - for (var record : records.entrySet()) { - log.append(String.format("%20s\t%20d\t%s\n", - record.getKey(), record.getValue().getKey(), record.getValue().getValue())); - } - log.append("\n\n\n"); - log.close(); - } - - private static final Map> records = new HashMap<>(Map.of( - ChosenAction.SET, Pair.of(Long.MAX_VALUE, null), - ChosenAction.GET_EXISTING, Pair.of(Long.MAX_VALUE, null), - ChosenAction.GET_NON_EXISTING, Pair.of(Long.MAX_VALUE, null) - )); - - @ParameterizedTest(name = "flushOnWrite = {0}, bytesThreshold = {1}, writesThreshold = {2}," - + " responseTimeout = {3}, flushTimer = {4}," - + " dataSize = {5}, clients = {6}, threads = {7}") - @MethodSource({ "generateTestDataWithFlushOnWrite", "generateTestDataWithoutFlushOnWrite" }) - @SneakyThrows - public void experiment(boolean flushOnWrite, - int bytesThreshold, - int writesThreshold, - int responseTimeout, - int flushTimer, - int dataSize, - int clients, - int threads) { - var line = String.format("flushOnWrite = %s, bytesThreshold = %d, writesThreshold = %d," - + " responseTimeout = %d, flushTimer = %d," - + " dataSize = %d, clients = %d, threads = %d\n", flushOnWrite, bytesThreshold, writesThreshold, - responseTimeout, flushTimer, dataSize, clients, threads); - log.append(line); - - JniNettyClient.ALWAYS_FLUSH_ON_WRITE = flushOnWrite; - JniNettyClient.AUTO_FLUSH_THRESHOLD_BYTES = bytesThreshold; - JniNettyClient.AUTO_FLUSH_THRESHOLD_WRITES = writesThreshold; - JniNettyClient.AUTO_FLUSH_RESPONSE_TIMEOUT_MILLIS = responseTimeout; - JniNettyClient.AUTO_FLUSH_TIMER_MILLIS = flushTimer; - - var clientsArr = new JniNettyClient[clients]; - String value = RandomStringUtils.randomAlphanumeric(dataSize); - - for (int i = 1; i < clients; i++) { - clientsArr[i - 1] = new JniNettyClient(); - clientsArr[i - 1].connectToRedis(); - } - - List tasks = new ArrayList<>(); - for (int i = 0; i < threads; i++) { - tasks.add(() -> { - int clientIndex = threads % clients; - for (int j = 0; j < iterations; j++) { - clientsArr[clientIndex].get(key); - } - }); - } - long before = System.nanoTime(); - tasks.forEach(Runnable::run); - long after = System.nanoTime(); - long elapsed = after - before; - log.append(String.format(" GET NE %20d\n", elapsed)); - if (elapsed < records.get(ChosenAction.GET_NON_EXISTING).getKey()) { - records.put(ChosenAction.GET_NON_EXISTING, Pair.of(elapsed, line)); - } - for (int i = 1; i < clients; i++) { - clientsArr[i - 1].closeConnection(); - clientsArr[i - 1] = new JniNettyClient(); - clientsArr[i - 1].connectToRedis(); - } - tasks.clear(); - for (int i = 0; i < threads; i++) { - tasks.add(() -> { - int clientIndex = threads % clients; - for (int j = 0; j < iterations; j++) { - clientsArr[clientIndex].set(key, value); - } - }); - } - before = System.nanoTime(); - tasks.forEach(Runnable::run); - after = System.nanoTime(); - elapsed = after - before; - log.append(String.format(" SET %20d\n", elapsed)); - if (elapsed < records.get(ChosenAction.SET).getKey()) { - records.put(ChosenAction.SET, Pair.of(elapsed, line)); - } - for (int i = 1; i < clients; i++) { - clientsArr[i - 1].closeConnection(); - clientsArr[i - 1] = new JniNettyClient(); - clientsArr[i - 1].connectToRedis(); - } - tasks.clear(); - for (int i = 0; i < threads; i++) { - tasks.add(() -> { - int clientIndex = threads % clients; - for (int j = 0; j < iterations; j++) { - clientsArr[clientIndex].get(key); - } - }); - } - before = System.nanoTime(); - tasks.forEach(Runnable::run); - after = System.nanoTime(); - elapsed = after - before; - log.append(String.format(" GET E %20d\n", elapsed)); - if (elapsed < records.get(ChosenAction.GET_EXISTING).getKey()) { - records.put(ChosenAction.GET_EXISTING, Pair.of(elapsed, line)); - } - } -} diff --git a/java/client/build.gradle b/java/client/build.gradle index d99f81ba7a..b4a061ad13 100644 --- a/java/client/build.gradle +++ b/java/client/build.gradle @@ -10,6 +10,14 @@ repositories { dependencies { implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.24.3' + implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.13.0' + + implementation group: 'io.netty', name: 'netty-handler', version: '4.1.100.Final' + // https://github.com/netty/netty/wiki/Native-transports + // Windows is not supported, because babushka does not support windows, because tokio does not support windows, because ... 42 + implementation group: 'io.netty', name: 'netty-transport-native-epoll', version: '4.1.100.Final', classifier: 'linux-x86_64' + implementation group: 'io.netty', name: 'netty-transport-native-kqueue', version: '4.1.100.Final', classifier: 'osx-x86_64' + implementation group: 'io.netty', name: 'netty-transport-native-kqueue', version: '4.1.100.Final', classifier: 'osx-aarch_64' } tasks.register('protobuf', Exec) { @@ -22,11 +30,11 @@ tasks.register('protobuf', Exec) { 'babushka-core/src/protobuf/connection_request.proto', 'babushka-core/src/protobuf/redis_request.proto', 'babushka-core/src/protobuf/response.proto' - workingDir Paths.get(project.rootDir.path, '../..').toFile() + workingDir Paths.get(project.rootDir.path, '..').toFile() } tasks.register('buildRust', Exec) { - commandLine 'cargo', 'build' + commandLine 'cargo', 'build', '--release' workingDir project.rootDir } @@ -44,3 +52,9 @@ tasks.register('buildAll') { dependsOn 'protobuf', 'buildRust' finalizedBy 'build' } + +compileJava.dependsOn('protobuf') + +test { + systemProperty("java.library.path", "${projectDir}/../target/release") +} diff --git a/java/client/src/main/java/javababushka/Client.java b/java/client/src/main/java/javababushka/Client.java new file mode 100644 index 0000000000..6cd4415d14 --- /dev/null +++ b/java/client/src/main/java/javababushka/Client.java @@ -0,0 +1,388 @@ +package javababushka; + +import static connection_request.ConnectionRequestOuterClass.AddressInfo; +import static connection_request.ConnectionRequestOuterClass.AuthenticationInfo; +import static connection_request.ConnectionRequestOuterClass.ConnectionRequest; +import static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy; +import static connection_request.ConnectionRequestOuterClass.ReadFromReplicaStrategy; +import static connection_request.ConnectionRequestOuterClass.TlsMode; +import static redis_request.RedisRequestOuterClass.Command; +import static redis_request.RedisRequestOuterClass.Command.ArgsArray; +import static redis_request.RedisRequestOuterClass.RedisRequest; +import static redis_request.RedisRequestOuterClass.RequestType; +import static redis_request.RedisRequestOuterClass.Routes; +import static redis_request.RedisRequestOuterClass.SimpleRoutes; +import static response.ResponseOuterClass.Response; + +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.ChannelPromise; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.WriteBufferWaterMark; +import io.netty.channel.epoll.EpollDomainSocketChannel; +import io.netty.channel.epoll.EpollEventLoopGroup; +import io.netty.channel.kqueue.KQueue; +import io.netty.channel.kqueue.KQueueDomainSocketChannel; +import io.netty.channel.kqueue.KQueueEventLoopGroup; +import io.netty.channel.unix.DomainSocketAddress; +import io.netty.channel.unix.UnixChannel; +import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; +import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; +import io.netty.handler.logging.LogLevel; +import io.netty.handler.logging.LoggingHandler; +import io.netty.util.internal.logging.InternalLoggerFactory; +import io.netty.util.internal.logging.Slf4JLoggerFactory; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; +import org.apache.commons.lang3.tuple.Pair; + +public class Client implements AutoCloseable { + + private static final long DEFAULT_TIMEOUT_MILLISECONDS = 1000; + public static boolean ALWAYS_FLUSH_ON_WRITE = false; + + // https://netty.io/3.6/api/org/jboss/netty/handler/queue/BufferedWriteHandler.html + // Flush every N bytes if !ALWAYS_FLUSH_ON_WRITE + public static int AUTO_FLUSH_THRESHOLD_BYTES = 512; // 1024; + private final AtomicInteger nonFlushedBytesCounter = new AtomicInteger(0); + + // Flush every N writes if !ALWAYS_FLUSH_ON_WRITE + public static int AUTO_FLUSH_THRESHOLD_WRITES = 10; + private final AtomicInteger nonFlushedWritesCounter = new AtomicInteger(0); + + // If !ALWAYS_FLUSH_ON_WRITE and a command has no response in N millis, flush (probably it wasn't + // send) + public static int AUTO_FLUSH_RESPONSE_TIMEOUT_MILLIS = 100; + // If !ALWAYS_FLUSH_ON_WRITE flush on timer (like a cron) + public static int AUTO_FLUSH_TIMER_MILLIS = 200; + + public static int PENDING_RESPONSES_ON_CLOSE_TIMEOUT_MILLIS = 1000; + + // Futures to handle responses. Index is callback id, starting from 1 (0 index is for connection + // request always). + // Is it not a concurrent nor sync collection, but it is synced on adding. No removes. + // TODO clean up completed futures + private final List> responses = new ArrayList<>(); + // Unique offset for every client to avoid having multiple commands with the same id at a time. + // For debugging replace with: new Random().nextInt(1000) * 1000 + private final int callbackOffset = new Random().nextInt(); + + private final String unixSocket = getSocket(); + + private static String getSocket() { + try { + return RustWrapper.startSocketListenerExternal(); + } catch (Exception | UnsatisfiedLinkError e) { + System.err.printf("Failed to get UDS from babushka and dedushka: %s%n%n", e); + throw new RuntimeException(e); + } + } + + private Channel channel = null; + private EventLoopGroup group = null; + + // We support MacOS and Linux only, because Babushka does not support Windows, because tokio does + // not support it. + // Probably we should use NIO (NioEventLoopGroup) for Windows. + private static final boolean isMacOs = isMacOs(); + + private static boolean isMacOs() { + try { + Class.forName("io.netty.channel.kqueue.KQueue"); + return KQueue.isAvailable(); + } catch (ClassNotFoundException e) { + return false; + } + } + + static { + // TODO fix: netty still doesn't use slf4j nor log4j + InternalLoggerFactory.setDefaultFactory(Slf4JLoggerFactory.INSTANCE); + } + + private void createChannel() { + // TODO maybe move to constructor or to static? + try { + channel = + new Bootstrap() + .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024, 4096)) + .option(ChannelOption.ALLOCATOR, ByteBufAllocator.DEFAULT) + .group(group = isMacOs ? new KQueueEventLoopGroup() : new EpollEventLoopGroup()) + .channel(isMacOs ? KQueueDomainSocketChannel.class : EpollDomainSocketChannel.class) + .handler( + new ChannelInitializer() { + @Override + public void initChannel(UnixChannel ch) throws Exception { + ch.pipeline() + .addLast("logger", new LoggingHandler(LogLevel.DEBUG)) + // https://netty.io/4.1/api/io/netty/handler/codec/protobuf/ProtobufEncoder.html + .addLast("protobufDecoder", new ProtobufVarint32FrameDecoder()) + .addLast("protobufEncoder", new ProtobufVarint32LengthFieldPrepender()) + .addLast( + new ChannelInboundHandlerAdapter() { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) + throws Exception { + // System.out.printf("=== channelRead %s %s %n", ctx, msg); + var buf = (ByteBuf) msg; + var bytes = new byte[buf.readableBytes()]; + buf.readBytes(bytes); + // TODO surround parsing with try-catch, set error to future if + // parsing failed. + var response = Response.parseFrom(bytes); + int callbackId = response.getCallbackIdx(); + if (callbackId != 0) { + // connection request has hardcoded callback id = 0 + // https://github.com/aws/babushka/issues/600 + callbackId -= callbackOffset; + } + // System.out.printf("== Received response with callback %d%n", + // response.getCallbackIdx()); + responses.get(callbackId).complete(response); + responses.set(callbackId, null); + super.channelRead(ctx, bytes); + } + + @Override + public void exceptionCaught( + ChannelHandlerContext ctx, Throwable cause) throws Exception { + System.out.printf("=== exceptionCaught %s %s %n", ctx, cause); + cause.printStackTrace(); + super.exceptionCaught(ctx, cause); + } + }) + .addLast( + new ChannelOutboundHandlerAdapter() { + @Override + public void write( + ChannelHandlerContext ctx, Object msg, ChannelPromise promise) + throws Exception { + // System.out.printf("=== write %s %s %s %n", ctx, msg, promise); + var bytes = (byte[]) msg; + + boolean needFlush = false; + if (!ALWAYS_FLUSH_ON_WRITE) { + synchronized (nonFlushedBytesCounter) { + if (nonFlushedBytesCounter.addAndGet(bytes.length) + >= AUTO_FLUSH_THRESHOLD_BYTES + || nonFlushedWritesCounter.incrementAndGet() + >= AUTO_FLUSH_THRESHOLD_WRITES) { + nonFlushedBytesCounter.set(0); + nonFlushedWritesCounter.set(0); + needFlush = true; + } + } + } + super.write(ctx, Unpooled.copiedBuffer(bytes), promise); + if (needFlush) { + // flush outside the sync block + flush(ctx); + // System.out.println("-- auto flush - buffer"); + } + } + }); + } + }) + .connect(new DomainSocketAddress(unixSocket)) + .sync() + .channel(); + + } catch (Exception e) { + System.err.printf( + "Failed to create a channel %s: %s%n", e.getClass().getSimpleName(), e.getMessage()); + e.printStackTrace(System.err); + } + + if (!ALWAYS_FLUSH_ON_WRITE) { + new Timer(true) + .scheduleAtFixedRate( + new TimerTask() { + @Override + public void run() { + channel.flush(); + nonFlushedBytesCounter.set(0); + nonFlushedWritesCounter.set(0); + } + }, + 0, + AUTO_FLUSH_TIMER_MILLIS); + } + } + + public void closeConnection() { + try { + channel.flush(); + + long waitStarted = System.nanoTime(); + long waitUntil = + waitStarted + PENDING_RESPONSES_ON_CLOSE_TIMEOUT_MILLIS * 100_000; // in nanos + for (var future : responses) { + if (future == null || future.isDone()) { + continue; + } + try { + future.get(waitUntil - System.nanoTime(), TimeUnit.NANOSECONDS); + } catch (InterruptedException | ExecutionException ignored) { + } catch (TimeoutException e) { + future.cancel(true); + // TODO cancel the rest + break; + } + } + } finally { + // channel.closeFuture().sync() + group.shutdownGracefully(); + } + } + + public void set(String key, String value) { + waitForResult(asyncSet(key, value)); + // TODO parse response and rethrow an exception if there is an error + } + + public String get(String key) { + return waitForResult(asyncGet(key)); + // TODO support non-strings + } + + private synchronized Pair> getNextCallback() { + var future = new CompletableFuture(); + responses.add(future); + return Pair.of(responses.size() - 1, future); + } + + @Override + public void close() throws Exception { + closeConnection(); + } + + public Future asyncConnectToRedis( + String host, int port, boolean useSsl, boolean clusterMode) { + createChannel(); + + var request = + ConnectionRequest.newBuilder() + .addAddresses(AddressInfo.newBuilder().setHost(host).setPort(port).build()) + .setTlsMode( + useSsl // TODO: secure or insecure TLS? + ? TlsMode.SecureTls + : TlsMode.NoTls) + .setClusterModeEnabled(clusterMode) + // In millis + .setResponseTimeout(250) + // In millis + .setClientCreationTimeout(2500) + .setReadFromReplicaStrategy(ReadFromReplicaStrategy.AlwaysFromPrimary) + .setConnectionRetryStrategy( + ConnectionRetryStrategy.newBuilder() + .setNumberOfRetries(1) + .setFactor(1) + .setExponentBase(1) + .build()) + .setAuthenticationInfo( + AuthenticationInfo.newBuilder().setPassword("").setUsername("default").build()) + .setDatabaseId(0) + .build(); + + var future = new CompletableFuture(); + responses.add(future); + channel.writeAndFlush(request.toByteArray()); + return future; + } + + private CompletableFuture submitNewCommand(RequestType command, List args) { + var commandId = getNextCallback(); + // System.out.printf("== %s(%s), callback %d%n", command, String.join(", ", args), commandId); + + return CompletableFuture.supplyAsync( + () -> { + var commandArgs = ArgsArray.newBuilder(); + for (var arg : args) { + commandArgs.addArgs(arg); + } + + RedisRequest request = + RedisRequest.newBuilder() + .setCallbackIdx(commandId.getKey() + callbackOffset) + .setSingleCommand( + Command.newBuilder() + .setRequestType(command) + .setArgsArray(commandArgs.build()) + .build()) + .setRoute(Routes.newBuilder().setSimpleRoutes(SimpleRoutes.AllNodes).build()) + .build(); + if (ALWAYS_FLUSH_ON_WRITE) { + channel.writeAndFlush(request.toByteArray()); + return commandId.getRight(); + } + channel.write(request.toByteArray()); + return autoFlushFutureWrapper(commandId.getRight()); + }) + .thenCompose(f -> f); + } + + private CompletableFuture autoFlushFutureWrapper(Future future) { + return CompletableFuture.supplyAsync( + () -> { + try { + return future.get(AUTO_FLUSH_RESPONSE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } catch (TimeoutException e) { + // System.out.println("-- auto flush - timeout"); + channel.flush(); + nonFlushedBytesCounter.set(0); + nonFlushedWritesCounter.set(0); + } + try { + return future.get(); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + }); + } + + public Future asyncSet(String key, String value) { + // System.out.printf("== set(%s, %s), callback %d%n", key, value, callbackId); + return submitNewCommand(RequestType.SetString, List.of(key, value)); + } + + public Future asyncGet(String key) { + // System.out.printf("== get(%s), callback %d%n", key, callbackId); + return submitNewCommand(RequestType.GetString, List.of(key)) + .thenApply( + response -> + response.getRespPointer() != 0 + ? RustWrapper.valueFromPointer(response.getRespPointer()).toString() + : null); + } + + public T waitForResult(Future future) { + return waitForResult(future, DEFAULT_TIMEOUT_MILLISECONDS); + } + + public T waitForResult(Future future, long timeout) { + try { + return future.get(timeout, TimeUnit.MILLISECONDS); + } catch (Exception ignored) { + return null; + } + } +} diff --git a/java/client/src/main/java/javababushka/RustWrapper.java b/java/client/src/main/java/javababushka/RustWrapper.java new file mode 100644 index 0000000000..315a3c63a2 --- /dev/null +++ b/java/client/src/main/java/javababushka/RustWrapper.java @@ -0,0 +1,11 @@ +package javababushka; + +public class RustWrapper { + public static native String startSocketListenerExternal() throws Exception; + + public static native Object valueFromPointer(long pointer); + + static { + System.loadLibrary("javababushka"); + } +} diff --git a/java/javababushka_client_RedisClient.h b/java/javababushka_client_RedisClient.h deleted file mode 100644 index a52938203d..0000000000 --- a/java/javababushka_client_RedisClient.h +++ /dev/null @@ -1,37 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class javababushka_client_RedisClient */ - -#ifndef _Included_javababushka_client_RedisClient -#define _Included_javababushka_client_RedisClient -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: javababushka_client_RedisClient - * Method: startSocketListenerExternal - * Signature: (Ljavababushka/client/RedisClient;)V - */ -JNIEXPORT void JNICALL Java_javababushka_client_RedisClient_startSocketListenerExternal__Ljavababushka_client_RedisClient_2 - (JNIEnv *, jclass, jobject); - -/* - * Class: javababushka_client_RedisClient - * Method: startSocketListenerExternal - * Signature: ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_javababushka_client_RedisClient_startSocketListenerExternal__ - (JNIEnv *, jclass); - -/* - * Class: javababushka_client_RedisClient - * Method: valueFromPointer - * Signature: (J)Ljava/lang/Object; - */ -JNIEXPORT jobject JNICALL Java_javababushka_client_RedisClient_valueFromPointer - (JNIEnv *, jclass, jlong); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/java/src/lib.rs b/java/src/lib.rs index f752d9596a..cef7526b5a 100644 --- a/java/src/lib.rs +++ b/java/src/lib.rs @@ -38,7 +38,7 @@ fn redis_value_to_java(mut env: JNIEnv, val: Value) -> JObject { } #[no_mangle] -pub extern "system" fn Java_javababushka_client_RedisClient_valueFromPointer<'local>( +pub extern "system" fn Java_javababushka_RustWrapper_valueFromPointer<'local>( mut env: JNIEnv<'local>, _class: JClass<'local>, pointer: jlong @@ -48,37 +48,7 @@ pub extern "system" fn Java_javababushka_client_RedisClient_valueFromPointer<'lo } #[no_mangle] -pub extern "system" fn Java_javababushka_client_RedisClient_startSocketListenerExternal__Ljavababushka_client_RedisClient_2<'local>( - mut env: JNIEnv<'local>, - _class: JClass<'local>, - callback: JObject<'local> -) { - let jvm = env.get_java_vm().unwrap(); - - let callback = env.new_global_ref(callback).unwrap(); - - let (tx, rx) = mpsc::channel(); - start_socket_listener(move |socket_path| { - // Signals that thread has started - tx.send(()).unwrap(); - let mut env = jvm.attach_current_thread().unwrap(); - match socket_path { - Ok(path) => { - let path = env.new_string(path).unwrap(); - let _ = env.call_method(callback, "initCallback", "(Ljava/lang/String;Ljava/lang/String;)V", &[(&JObject::from(path)).into(), (&JObject::null()).into()]); - }, - Err(error_message) => { - let error_message = env.new_string(error_message).unwrap(); - let _ = env.call_method(callback, "initCallback", "(Ljava/lang/String;Ljava/lang/String;)V", &[(&JObject::null()).into(), (&JObject::from(error_message)).into()]); - } - } - }); - // Wait until the thread has started - rx.recv().unwrap(); -} - -#[no_mangle] -pub extern "system" fn Java_javababushka_client_RedisClient_startSocketListenerExternal__<'local>( +pub extern "system" fn Java_javababushka_RustWrapper_startSocketListenerExternal<'local>( mut env: JNIEnv<'local>, _class: JClass<'local> ) -> JObject<'local> { From 14d392bd7d224dfa1dd36e78dda676f146e6baa5 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Thu, 16 Nov 2023 09:33:32 -0800 Subject: [PATCH 59/81] try to split client - receiving unknown callback id Signed-off-by: Yury-Fridlyand --- .../benchmarks/BenchmarkingApp.java | 15 +- .../clients/babushka/JniNettyClient.java | 7 +- java/client/build.gradle | 6 + .../src/main/java/javababushka/Client.java | 279 +----------------- .../main/java/javababushka/NettyWrapper.java | 160 ++++++++++ .../main/java/javababushka/RustWrapper.java | 2 +- 6 files changed, 185 insertions(+), 284 deletions(-) create mode 100644 java/client/src/main/java/javababushka/NettyWrapper.java diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index 14242b472a..a2b99fc300 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -139,20 +139,17 @@ private static RunConfiguration verifyOptions(CommandLine line) throws ParseExce return Stream.of( ClientName.JEDIS, ClientName.JEDIS_ASYNC, - // ClientName.BABUSHKA_ASYNC, ClientName.BABUSHKA, + ClientName.BABUSHKA_ASYNC, ClientName.LETTUCE, ClientName.LETTUCE_ASYNC); case ALL_ASYNC: return Stream.of( ClientName.JEDIS_ASYNC, - // ClientName.BABUSHKA_ASYNC, + ClientName.BABUSHKA_ASYNC, ClientName.LETTUCE_ASYNC); case ALL_SYNC: - return Stream.of( - ClientName.JEDIS, - // ClientName.BABUSHKA, - ClientName.LETTUCE); + return Stream.of(ClientName.JEDIS, ClientName.BABUSHKA, ClientName.LETTUCE); default: return Stream.of(e); } @@ -238,11 +235,9 @@ public RunConfiguration() { concurrentTasks = new int[] {100}; clients = new ClientName[] { - // ClientName.BABUSHKA_ASYNC, - // ClientName.JEDIS, ClientName.JEDIS_ASYNC, ClientName.LETTUCE, + // ClientName.LETTUCE, // ClientName.LETTUCE_ASYNC - ClientName.BABUSHKA_ASYNC, - ClientName.BABUSHKA // , ClientName.LETTUCE, ClientName.LETTUCE_ASYNC + ClientName.BABUSHKA_ASYNC, ClientName.BABUSHKA }; host = "localhost"; port = 6379; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java index 0a98478fef..bcdac4f5d5 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java @@ -23,11 +23,6 @@ public String getName() { return name; } - @Override - public void closeConnection() { - testClient.closeConnection(); - } - @Override public void connectToRedis() { connectToRedis(new ConnectionSettings("localhost", 6379, false)); @@ -35,7 +30,7 @@ public void connectToRedis() { @Override public void connectToRedis(ConnectionSettings connectionSettings) { -waitForResult(asyncConnectToRedis(connectionSettings)); + waitForResult(asyncConnectToRedis(connectionSettings)); } @Override diff --git a/java/client/build.gradle b/java/client/build.gradle index b4a061ad13..3175b995d8 100644 --- a/java/client/build.gradle +++ b/java/client/build.gradle @@ -18,6 +18,12 @@ dependencies { implementation group: 'io.netty', name: 'netty-transport-native-epoll', version: '4.1.100.Final', classifier: 'linux-x86_64' implementation group: 'io.netty', name: 'netty-transport-native-kqueue', version: '4.1.100.Final', classifier: 'osx-x86_64' implementation group: 'io.netty', name: 'netty-transport-native-kqueue', version: '4.1.100.Final', classifier: 'osx-aarch_64' + + //lombok + compileOnly 'org.projectlombok:lombok:1.18.30' + annotationProcessor 'org.projectlombok:lombok:1.18.30' + testCompileOnly 'org.projectlombok:lombok:1.18.30' + testAnnotationProcessor 'org.projectlombok:lombok:1.18.30' } tasks.register('protobuf', Exec) { diff --git a/java/client/src/main/java/javababushka/Client.java b/java/client/src/main/java/javababushka/Client.java index 6cd4415d14..c23e305bf3 100644 --- a/java/client/src/main/java/javababushka/Client.java +++ b/java/client/src/main/java/javababushka/Client.java @@ -14,243 +14,17 @@ import static redis_request.RedisRequestOuterClass.SimpleRoutes; import static response.ResponseOuterClass.Response; -import io.netty.bootstrap.Bootstrap; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import io.netty.buffer.Unpooled; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.channel.ChannelInitializer; -import io.netty.channel.ChannelOption; -import io.netty.channel.ChannelOutboundHandlerAdapter; -import io.netty.channel.ChannelPromise; -import io.netty.channel.EventLoopGroup; -import io.netty.channel.WriteBufferWaterMark; -import io.netty.channel.epoll.EpollDomainSocketChannel; -import io.netty.channel.epoll.EpollEventLoopGroup; -import io.netty.channel.kqueue.KQueue; -import io.netty.channel.kqueue.KQueueDomainSocketChannel; -import io.netty.channel.kqueue.KQueueEventLoopGroup; -import io.netty.channel.unix.DomainSocketAddress; -import io.netty.channel.unix.UnixChannel; -import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; -import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; -import io.netty.handler.logging.LogLevel; -import io.netty.handler.logging.LoggingHandler; -import io.netty.util.internal.logging.InternalLoggerFactory; -import io.netty.util.internal.logging.Slf4JLoggerFactory; -import java.util.ArrayList; import java.util.List; import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.concurrent.atomic.AtomicInteger; import org.apache.commons.lang3.tuple.Pair; -public class Client implements AutoCloseable { - +public class Client { private static final long DEFAULT_TIMEOUT_MILLISECONDS = 1000; - public static boolean ALWAYS_FLUSH_ON_WRITE = false; - - // https://netty.io/3.6/api/org/jboss/netty/handler/queue/BufferedWriteHandler.html - // Flush every N bytes if !ALWAYS_FLUSH_ON_WRITE - public static int AUTO_FLUSH_THRESHOLD_BYTES = 512; // 1024; - private final AtomicInteger nonFlushedBytesCounter = new AtomicInteger(0); - - // Flush every N writes if !ALWAYS_FLUSH_ON_WRITE - public static int AUTO_FLUSH_THRESHOLD_WRITES = 10; - private final AtomicInteger nonFlushedWritesCounter = new AtomicInteger(0); - - // If !ALWAYS_FLUSH_ON_WRITE and a command has no response in N millis, flush (probably it wasn't - // send) - public static int AUTO_FLUSH_RESPONSE_TIMEOUT_MILLIS = 100; - // If !ALWAYS_FLUSH_ON_WRITE flush on timer (like a cron) - public static int AUTO_FLUSH_TIMER_MILLIS = 200; - - public static int PENDING_RESPONSES_ON_CLOSE_TIMEOUT_MILLIS = 1000; - - // Futures to handle responses. Index is callback id, starting from 1 (0 index is for connection - // request always). - // Is it not a concurrent nor sync collection, but it is synced on adding. No removes. - // TODO clean up completed futures - private final List> responses = new ArrayList<>(); - // Unique offset for every client to avoid having multiple commands with the same id at a time. - // For debugging replace with: new Random().nextInt(1000) * 1000 - private final int callbackOffset = new Random().nextInt(); - - private final String unixSocket = getSocket(); - - private static String getSocket() { - try { - return RustWrapper.startSocketListenerExternal(); - } catch (Exception | UnsatisfiedLinkError e) { - System.err.printf("Failed to get UDS from babushka and dedushka: %s%n%n", e); - throw new RuntimeException(e); - } - } - - private Channel channel = null; - private EventLoopGroup group = null; - - // We support MacOS and Linux only, because Babushka does not support Windows, because tokio does - // not support it. - // Probably we should use NIO (NioEventLoopGroup) for Windows. - private static final boolean isMacOs = isMacOs(); - - private static boolean isMacOs() { - try { - Class.forName("io.netty.channel.kqueue.KQueue"); - return KQueue.isAvailable(); - } catch (ClassNotFoundException e) { - return false; - } - } - static { - // TODO fix: netty still doesn't use slf4j nor log4j - InternalLoggerFactory.setDefaultFactory(Slf4JLoggerFactory.INSTANCE); - } - - private void createChannel() { - // TODO maybe move to constructor or to static? - try { - channel = - new Bootstrap() - .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024, 4096)) - .option(ChannelOption.ALLOCATOR, ByteBufAllocator.DEFAULT) - .group(group = isMacOs ? new KQueueEventLoopGroup() : new EpollEventLoopGroup()) - .channel(isMacOs ? KQueueDomainSocketChannel.class : EpollDomainSocketChannel.class) - .handler( - new ChannelInitializer() { - @Override - public void initChannel(UnixChannel ch) throws Exception { - ch.pipeline() - .addLast("logger", new LoggingHandler(LogLevel.DEBUG)) - // https://netty.io/4.1/api/io/netty/handler/codec/protobuf/ProtobufEncoder.html - .addLast("protobufDecoder", new ProtobufVarint32FrameDecoder()) - .addLast("protobufEncoder", new ProtobufVarint32LengthFieldPrepender()) - .addLast( - new ChannelInboundHandlerAdapter() { - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) - throws Exception { - // System.out.printf("=== channelRead %s %s %n", ctx, msg); - var buf = (ByteBuf) msg; - var bytes = new byte[buf.readableBytes()]; - buf.readBytes(bytes); - // TODO surround parsing with try-catch, set error to future if - // parsing failed. - var response = Response.parseFrom(bytes); - int callbackId = response.getCallbackIdx(); - if (callbackId != 0) { - // connection request has hardcoded callback id = 0 - // https://github.com/aws/babushka/issues/600 - callbackId -= callbackOffset; - } - // System.out.printf("== Received response with callback %d%n", - // response.getCallbackIdx()); - responses.get(callbackId).complete(response); - responses.set(callbackId, null); - super.channelRead(ctx, bytes); - } - - @Override - public void exceptionCaught( - ChannelHandlerContext ctx, Throwable cause) throws Exception { - System.out.printf("=== exceptionCaught %s %s %n", ctx, cause); - cause.printStackTrace(); - super.exceptionCaught(ctx, cause); - } - }) - .addLast( - new ChannelOutboundHandlerAdapter() { - @Override - public void write( - ChannelHandlerContext ctx, Object msg, ChannelPromise promise) - throws Exception { - // System.out.printf("=== write %s %s %s %n", ctx, msg, promise); - var bytes = (byte[]) msg; - - boolean needFlush = false; - if (!ALWAYS_FLUSH_ON_WRITE) { - synchronized (nonFlushedBytesCounter) { - if (nonFlushedBytesCounter.addAndGet(bytes.length) - >= AUTO_FLUSH_THRESHOLD_BYTES - || nonFlushedWritesCounter.incrementAndGet() - >= AUTO_FLUSH_THRESHOLD_WRITES) { - nonFlushedBytesCounter.set(0); - nonFlushedWritesCounter.set(0); - needFlush = true; - } - } - } - super.write(ctx, Unpooled.copiedBuffer(bytes), promise); - if (needFlush) { - // flush outside the sync block - flush(ctx); - // System.out.println("-- auto flush - buffer"); - } - } - }); - } - }) - .connect(new DomainSocketAddress(unixSocket)) - .sync() - .channel(); - - } catch (Exception e) { - System.err.printf( - "Failed to create a channel %s: %s%n", e.getClass().getSimpleName(), e.getMessage()); - e.printStackTrace(System.err); - } - - if (!ALWAYS_FLUSH_ON_WRITE) { - new Timer(true) - .scheduleAtFixedRate( - new TimerTask() { - @Override - public void run() { - channel.flush(); - nonFlushedBytesCounter.set(0); - nonFlushedWritesCounter.set(0); - } - }, - 0, - AUTO_FLUSH_TIMER_MILLIS); - } - } - - public void closeConnection() { - try { - channel.flush(); - - long waitStarted = System.nanoTime(); - long waitUntil = - waitStarted + PENDING_RESPONSES_ON_CLOSE_TIMEOUT_MILLIS * 100_000; // in nanos - for (var future : responses) { - if (future == null || future.isDone()) { - continue; - } - try { - future.get(waitUntil - System.nanoTime(), TimeUnit.NANOSECONDS); - } catch (InterruptedException | ExecutionException ignored) { - } catch (TimeoutException e) { - future.cancel(true); - // TODO cancel the rest - break; - } - } - } finally { - // channel.closeFuture().sync() - group.shutdownGracefully(); - } - } + private final NettyWrapper innerClient = NettyWrapper.INSTANCE; public void set(String key, String value) { waitForResult(asyncSet(key, value)); @@ -264,19 +38,13 @@ public String get(String key) { private synchronized Pair> getNextCallback() { var future = new CompletableFuture(); - responses.add(future); - return Pair.of(responses.size() - 1, future); - } - - @Override - public void close() throws Exception { - closeConnection(); + var callbackId = new Random().nextInt(); + innerClient.registerRequest(callbackId, future); + return Pair.of(callbackId, future); } public Future asyncConnectToRedis( String host, int port, boolean useSsl, boolean clusterMode) { - createChannel(); - var request = ConnectionRequest.newBuilder() .addAddresses(AddressInfo.newBuilder().setHost(host).setPort(port).build()) @@ -302,8 +70,10 @@ public Future asyncConnectToRedis( .build(); var future = new CompletableFuture(); - responses.add(future); - channel.writeAndFlush(request.toByteArray()); + // connection request has hardcoded callback id = 0 + // https://github.com/aws/babushka/issues/600 + innerClient.registerRequest(0, future); + innerClient.getChannel().writeAndFlush(request.toByteArray()); return future; } @@ -320,7 +90,7 @@ private CompletableFuture submitNewCommand(RequestType command, List submitNewCommand(RequestType command, List f); } - private CompletableFuture autoFlushFutureWrapper(Future future) { - return CompletableFuture.supplyAsync( - () -> { - try { - return future.get(AUTO_FLUSH_RESPONSE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } catch (TimeoutException e) { - // System.out.println("-- auto flush - timeout"); - channel.flush(); - nonFlushedBytesCounter.set(0); - nonFlushedWritesCounter.set(0); - } - try { - return future.get(); - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } - }); - } - public Future asyncSet(String key, String value) { // System.out.printf("== set(%s, %s), callback %d%n", key, value, callbackId); return submitNewCommand(RequestType.SetString, List.of(key, value)); diff --git a/java/client/src/main/java/javababushka/NettyWrapper.java b/java/client/src/main/java/javababushka/NettyWrapper.java new file mode 100644 index 0000000000..199c39806d --- /dev/null +++ b/java/client/src/main/java/javababushka/NettyWrapper.java @@ -0,0 +1,160 @@ +package javababushka; + +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.ChannelPromise; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.WriteBufferWaterMark; +import io.netty.channel.epoll.EpollDomainSocketChannel; +import io.netty.channel.epoll.EpollEventLoopGroup; +import io.netty.channel.kqueue.KQueue; +import io.netty.channel.kqueue.KQueueDomainSocketChannel; +import io.netty.channel.kqueue.KQueueEventLoopGroup; +import io.netty.channel.unix.DomainSocketAddress; +import io.netty.channel.unix.UnixChannel; +import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; +import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; +import io.netty.handler.logging.LogLevel; +import io.netty.handler.logging.LoggingHandler; +import io.netty.util.internal.logging.InternalLoggerFactory; +import io.netty.util.internal.logging.Slf4JLoggerFactory; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import lombok.Getter; +import response.ResponseOuterClass; + +class NettyWrapper implements AutoCloseable { + private final String unixSocket = getSocket(); + + private static String getSocket() { + try { + return RustWrapper.startSocketListenerExternal(); + } catch (Exception | UnsatisfiedLinkError e) { + System.err.printf("Failed to get UDS from babushka and dedushka: %s%n%n", e); + throw new RuntimeException(e); + } + } + + @Getter private Channel channel = null; + private EventLoopGroup group = null; + + // Futures to handle responses. Index is callback id, starting from 1 (0 index is for connection + // request always). + // Is it not a concurrent nor sync collection, but it is synced on adding. No removes. + @Getter + private final Map> responses = + new HashMap<>(); + + // We support MacOS and Linux only, because Babushka does not support Windows, because tokio does + // not support it. + // Probably we should use NIO (NioEventLoopGroup) for Windows. + private static final boolean isMacOs = isMacOs(); + + private static boolean isMacOs() { + try { + Class.forName("io.netty.channel.kqueue.KQueue"); + return KQueue.isAvailable(); + } catch (ClassNotFoundException e) { + return false; + } + } + + static { + // TODO fix: netty still doesn't use slf4j nor log4j + InternalLoggerFactory.setDefaultFactory(Slf4JLoggerFactory.INSTANCE); + } + + public static NettyWrapper INSTANCE = new NettyWrapper(); + + private NettyWrapper() { + // TODO maybe move to constructor or to static? + try { + channel = + new Bootstrap() + .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024, 4096)) + .option(ChannelOption.ALLOCATOR, ByteBufAllocator.DEFAULT) + .group(group = isMacOs ? new KQueueEventLoopGroup() : new EpollEventLoopGroup()) + .channel(isMacOs ? KQueueDomainSocketChannel.class : EpollDomainSocketChannel.class) + .handler( + new ChannelInitializer() { + @Override + public void initChannel(UnixChannel ch) throws Exception { + ch.pipeline() + .addLast("logger", new LoggingHandler(LogLevel.DEBUG)) + // https://netty.io/4.1/api/io/netty/handler/codec/protobuf/ProtobufEncoder.html + .addLast("protobufDecoder", new ProtobufVarint32FrameDecoder()) + .addLast("protobufEncoder", new ProtobufVarint32LengthFieldPrepender()) + .addLast( + new ChannelInboundHandlerAdapter() { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) + throws Exception { + // System.out.printf("=== channelRead %s %s %n", ctx, msg); + var buf = (ByteBuf) msg; + var bytes = new byte[buf.readableBytes()]; + buf.readBytes(bytes); + // TODO surround parsing with try-catch, set error to future if + // parsing failed. + var response = ResponseOuterClass.Response.parseFrom(bytes); + int callbackId = response.getCallbackIdx(); + // System.out.printf("== Received response with callback %d%n", + responses.get(callbackId).complete(response); + if (callbackId != 0) { + responses.remove(callbackId); + } + super.channelRead(ctx, bytes); + } + + @Override + public void exceptionCaught( + ChannelHandlerContext ctx, Throwable cause) throws Exception { + System.out.printf("=== exceptionCaught %s %s %n", ctx, cause); + cause.printStackTrace(); + super.exceptionCaught(ctx, cause); + } + }) + .addLast( + new ChannelOutboundHandlerAdapter() { + @Override + public void write( + ChannelHandlerContext ctx, Object msg, ChannelPromise promise) + throws Exception { + // System.out.printf("=== write %s %s %s %n", ctx, msg, promise); + var bytes = (byte[]) msg; + + super.write(ctx, Unpooled.copiedBuffer(bytes), promise); + } + }); + } + }) + .connect(new DomainSocketAddress(unixSocket)) + .sync() + .channel(); + + } catch (Exception e) { + System.err.printf( + "Failed to create a channel %s: %s%n", e.getClass().getSimpleName(), e.getMessage()); + e.printStackTrace(System.err); + } + } + + public void registerRequest( + Integer callbackId, CompletableFuture future) { + responses.put(callbackId, future); + } + + @Override + public void close() throws Exception { + // channel.closeFuture().sync() + group.shutdownGracefully(); + } +} diff --git a/java/client/src/main/java/javababushka/RustWrapper.java b/java/client/src/main/java/javababushka/RustWrapper.java index 315a3c63a2..68e8a70e1a 100644 --- a/java/client/src/main/java/javababushka/RustWrapper.java +++ b/java/client/src/main/java/javababushka/RustWrapper.java @@ -1,6 +1,6 @@ package javababushka; -public class RustWrapper { +class RustWrapper { public static native String startSocketListenerExternal() throws Exception; public static native Object valueFromPointer(long pointer); From 058a05ccbe5070caed272f00013399e98d4520e3 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Mon, 20 Nov 2023 11:44:58 -0800 Subject: [PATCH 60/81] Iteration 2 - try to use a singleton-like approach. Signed-off-by: Yury-Fridlyand --- babushka-core/src/client/standalone_client.rs | 9 +- babushka-core/src/rotating_buffer.rs | 20 ++ babushka-core/src/socket_listener.rs | 11 +- java/benchmarks/build.gradle | 5 +- .../benchmarks/BenchmarkingApp.java | 8 +- .../clients/babushka/JniNettyClient.java | 5 + .../benchmarks/utils/Benchmarking.java | 197 +++++++++--------- .../src/main/java/javababushka/Client.java | 50 ++++- .../main/java/javababushka/NettyWrapper.java | 61 +++++- java/integTest/build.gradle | 18 ++ .../src/main/java/javababushka/Test.java | 48 +++++ java/src/lib.rs | 10 +- 12 files changed, 309 insertions(+), 133 deletions(-) create mode 100644 java/integTest/src/main/java/javababushka/Test.java diff --git a/babushka-core/src/client/standalone_client.rs b/babushka-core/src/client/standalone_client.rs index 3a21defe5d..23dc6ef283 100644 --- a/babushka-core/src/client/standalone_client.rs +++ b/babushka-core/src/client/standalone_client.rs @@ -5,7 +5,7 @@ use crate::retry_strategies::RetryStrategy; use futures::{stream, StreamExt}; #[cfg(standalone_heartbeat)] use logger_core::log_debug; -use logger_core::{log_trace, log_warn}; +use logger_core::{log_error, log_trace, log_warn}; use protobuf::EnumOrUnknown; use redis::cluster_routing::is_readonly; use redis::{RedisError, RedisResult, Value}; @@ -186,7 +186,7 @@ impl StandaloneClient { } pub async fn send_packed_command(&mut self, cmd: &redis::Cmd) -> RedisResult { - log_trace("StandaloneClient", "sending command"); + //log_error("StandaloneClient", "sending command"); let reconnecting_connection = self.get_connection(cmd); let mut connection = reconnecting_connection.get_connection().await?; let result = connection.send_packed_command(cmd).await; @@ -199,7 +199,10 @@ impl StandaloneClient { reconnecting_connection.reconnect(); Err(err) } - _ => result, + _ => { + //log_error("StandaloneClient", "received response"); + result + }, } } diff --git a/babushka-core/src/rotating_buffer.rs b/babushka-core/src/rotating_buffer.rs index 2a00642cec..0124a0e3d8 100644 --- a/babushka-core/src/rotating_buffer.rs +++ b/babushka-core/src/rotating_buffer.rs @@ -1,8 +1,10 @@ +use std::any::TypeId; use bytes::BytesMut; use integer_encoding::VarInt; use logger_core::log_error; use protobuf::Message; use std::io; +use crate::redis_request::RedisRequest; /// An object handling a arranging read buffers, and parsing the data in the buffers into requests. pub struct RotatingBuffer { @@ -28,10 +30,28 @@ impl RotatingBuffer { if (start_pos + request_len as usize) > buffer_len { break; } else { + //log_error("parse input", format!("incoming: start {start_pos}, len {request_len}, buffer_len: {buffer_len}")); + //let bytes = buffer.slice(start_pos..start_pos + request_len as usize); + //log_error("parse input", format!("{:#x?}", bytes.as_ref())); match T::parse_from_tokio_bytes( &buffer.slice(start_pos..start_pos + request_len as usize), ) { Ok(request) => { + /* + if request_len != 41 { + let mut callback_id: i32 = 0; + let mut pos = start_pos + 1; + for shift in (0..64).step_by(7) { + let b: &u8 = buffer.get(pos).unwrap(); + pos += 1; + callback_id |= ((b & 0x7F) as i32) << shift; + if (b & 0x80) == 0 { + break; + } + } + log_error("callback id received", callback_id.to_string()); + } + */ prev_position += request_len as usize + bytes_read; results.push(request); } diff --git a/babushka-core/src/socket_listener.rs b/babushka-core/src/socket_listener.rs index d2f319fce4..99c4743b54 100644 --- a/babushka-core/src/socket_listener.rs +++ b/babushka-core/src/socket_listener.rs @@ -24,6 +24,7 @@ use std::cell::Cell; use std::rc::Rc; use std::{env, str}; use std::{io, thread}; +use std::fmt::format; use thiserror::Error; use tokio::io::ErrorKind::AddrInUse; use tokio::net::{UnixListener, UnixStream}; @@ -124,7 +125,7 @@ impl UnixStreamListener { } } -async fn write_to_output(writer: &Rc) { +async fn write_to_output(writer: &Rc, callback_idx: u32) { let Ok(_guard) = writer.lock.try_lock() else { return; }; @@ -135,6 +136,9 @@ async fn write_to_output(writer: &Rc) { return; } let mut total_written_bytes = 0; + if callback_idx > 0 { + //log_error("callback id sent ", callback_idx.to_string()); + } while total_written_bytes < output.len() { if let Err(err) = writer.socket.writable().await { let _res = writer.closing_sender.send(err.into()).await; // we ignore the error, because it means that the reader was dropped, which is ok. @@ -230,6 +234,7 @@ async fn write_result( }; request_error.message = error_message.into(); } + log_error("received error", format!("{:?}", err)); Some(response::response::Value::RequestError(request_error)) } } @@ -245,7 +250,7 @@ async fn write_to_writer(response: Response, writer: &Rc) -> Result<(), match encode_result { Ok(_) => { writer.accumulated_outputs.set(vec); - write_to_output(writer).await; + write_to_output(writer, response.callback_idx).await; Ok(()) } Err(err) => { @@ -458,7 +463,7 @@ fn handle_request(request: RedisRequest, client: Client, writer: Rc) { } }, None => Err(ClienUsageError::InternalError( - "Received empty request".to_string(), + format!("Received empty request: {}", request.callback_idx), )), }; diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle index 3f1f0f0608..a178466072 100644 --- a/java/benchmarks/build.gradle +++ b/java/benchmarks/build.gradle @@ -26,9 +26,6 @@ dependencies { implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.24.3' implementation group: 'com.google.code.gson', name: 'gson', version: '2.10.1' - //testImplementation group: 'org.slf4j', name: 'slf4j-reload4j', version: '2.0.9' - //testImplementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.9' - compileOnly 'org.projectlombok:lombok:1.18.30' annotationProcessor 'org.projectlombok:lombok:1.18.30' testCompileOnly 'org.projectlombok:lombok:1.18.30' @@ -48,7 +45,7 @@ application { applicationDefaultJvmArgs += "-Djava.library.path=${projectDir}/../target/release" } -tasks.withType(Test) { +tasks.withType(Test) { testLogging { exceptionFormat "full" events "started", "skipped", "passed", "failed" diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java index a2b99fc300..03163a9001 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java @@ -235,13 +235,13 @@ public RunConfiguration() { concurrentTasks = new int[] {100}; clients = new ClientName[] { - // ClientName.LETTUCE, - // ClientName.LETTUCE_ASYNC - ClientName.BABUSHKA_ASYNC, ClientName.BABUSHKA + ClientName.LETTUCE, + //ClientName.LETTUCE_ASYNC, + //ClientName.BABUSHKA_ASYNC, ClientName.BABUSHKA }; host = "localhost"; port = 6379; - clientCount = new int[] {2}; + clientCount = new int[] {1, 2}; tls = false; } } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java index bcdac4f5d5..493f2493bb 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java @@ -39,6 +39,11 @@ public Future asyncConnectToRedis(ConnectionSettings connectionSetting connectionSettings.host, connectionSettings.port, connectionSettings.useSsl, false); } + @Override + public void closeConnection() { + testClient.closeConnection(); + } + @Override public Future asyncSet(String key, String value) { return testClient.asyncSet(key, value); diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index b94b9544fa..1450940c39 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -9,6 +9,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @@ -35,6 +36,7 @@ public class Benchmarking { static final int LATENCY_MULTIPLIER = 10000; static final double TPS_NORMALIZATION = 1000000000.0; // nano to seconds // measurements are done in nano-seconds, but it should be converted to seconds later + static final double NANO_TO_SECONDS = 1e9; static final double SECONDS_IN_NANO = 1e-9; private static ChosenAction randomAction() { @@ -67,6 +69,8 @@ public static Pair measurePerformance(Map clientCreator, BenchmarkingApp.RunConfiguration config, boolean async) { + Supplier clientCreator, BenchmarkingApp.RunConfiguration config, boolean async) { for (int concurrentNum : config.concurrentTasks) { - int iterations = 100000; - Math.min(Math.max(LATENCY_MIN, concurrentNum * LATENCY_MULTIPLIER), LATENCY_MAX); + int iterations = 1000000;//Math.min(Math.max(100000, concurrentNum * 10000), 10000000); for (int clientCount : config.clientCount) { for (int dataSize : config.dataSize) { - System.out.printf( - "%n =====> %s <===== %d clients %d concurrent %d data %n%n", - clientCreator.get().getName(), clientCount, concurrentNum, dataSize); - AtomicInteger iterationCounter = new AtomicInteger(0); - // Collections.synchronizedList - Map> actionResults = - Map.of( - ChosenAction.GET_EXISTING, new ArrayList<>(), - ChosenAction.GET_NON_EXISTING, new ArrayList<>(), - ChosenAction.SET, new ArrayList<>()); - List tasks = new ArrayList<>(); - // create clients List clients = new LinkedList<>(); for (int cc = 0; cc < clientCount; cc++) { Client newClient = clientCreator.get(); - newClient.connectToRedis(new ConnectionSettings(config.host, config.port, config.tls)); + newClient.connectToRedis( + new ConnectionSettings( + config.host, config.port, config.tls)); clients.add(newClient); } + var clientName = clients.get(0).getName(); + + System.out.printf( + "%n =====> %s <===== %d clients %d concurrent %d data size%n%n", + clientName, clientCount, concurrentNum, dataSize); + AtomicInteger iterationCounter = new AtomicInteger(0); + + var threadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1); + + long started = System.nanoTime(); + List>>> asyncTasks = + new ArrayList<>(); for (int taskNum = 0; taskNum < concurrentNum; taskNum++) { final int taskNumDebugging = taskNum; - tasks.add( - () -> { - int iterationIncrement = iterationCounter.getAndIncrement(); - int clientIndex = iterationIncrement % clients.size(); - - if (config.debugLogging) { - System.out.printf( - "%n concurrent = %d/%d, client# = %d/%d%n", - taskNumDebugging, concurrentNum, clientIndex + 1, clientCount); - } - while (iterationIncrement < iterations) { - if (config.debugLogging) { - System.out.printf( - "> task = %d, iteration = %d/%d, client# = %d/%d%n", - taskNumDebugging, - iterationIncrement + 1, - iterations, - clientIndex + 1, - clientCount); - } - var actions = getActionMap(clients.get(clientIndex), dataSize, async); - // operate and calculate tik-tok - Pair result = measurePerformance(actions); - if (config.debugLogging) { - System.out.printf( - "> task = %d, iteration = %d/%d, client# = %d/%d - DONE%n", - taskNumDebugging, - iterationIncrement + 1, - iterations, - clientIndex + 1, - clientCount); - } - if (result != null) { - actionResults.get(result.getLeft()).add(result.getRight()); - } - iterationIncrement = iterationCounter.getAndIncrement(); - } - }); + asyncTasks.add( + CompletableFuture.supplyAsync( + () -> { + Map> taskActionResults = + Map.of( + ChosenAction.GET_EXISTING, new ArrayList<>(), + ChosenAction.GET_NON_EXISTING, new ArrayList<>(), + ChosenAction.SET, new ArrayList<>()); + int iterationIncrement = iterationCounter.getAndIncrement(); + int clientIndex = iterationIncrement % clients.size(); + + if (config.debugLogging) { + System.out.printf( + "%n concurrent = %d/%d, client# = %d/%d%n", + taskNumDebugging, concurrentNum, clientIndex + 1, clientCount); + } + while (iterationIncrement < iterations) { + if (config.debugLogging) { + System.out.printf( + "> iteration = %d/%d, client# = %d/%d%n", + iterationIncrement + 1, iterations, clientIndex + 1, clientCount); + } + + var actions = getActionMap(clients.get(clientIndex), dataSize, async); + // operate and calculate tik-tok + Pair result = measurePerformance(actions); + if (result != null) { + taskActionResults.get(result.getLeft()).add(result.getRight()); + } + + iterationIncrement = iterationCounter.getAndIncrement(); + clientIndex = iterationIncrement % clients.size(); + } + return taskActionResults; + }, threadPool)); } if (config.debugLogging) { - System.out.printf("%s client Benchmarking: %n", clientCreator.get().getName()); + System.out.printf("%s client Benchmarking: %n", clientName); System.out.printf( - "===> concurrentNum = %d, clientNum = %d, tasks = %d%n", - concurrentNum, clientCount, tasks.size()); + "===> concurrentNum = %d, clientNum = %d, tasks = %d%n", + concurrentNum, clientCount, asyncTasks.size()); } - long before = System.nanoTime(); - ExecutorService threadPool = Executors.newFixedThreadPool(concurrentNum); - - // create threads and add them to the async pool. - // This will start execution of all the concurrent tasks. - List asyncTasks = - tasks.stream() - .map((runnable) -> runAsync(runnable, threadPool)) - .collect(Collectors.toList()); - // close pool and await for tasks to complete - threadPool.shutdown(); - while (!threadPool.isTerminated()) { - try { - // wait 1 second before waiting for threads to complete - Thread.sleep(100); - } catch (InterruptedException interruptedException) { - interruptedException.printStackTrace(); - } + + // This will start execution of all the concurrent tasks asynchronously + CompletableFuture>>[] completableAsyncTaskArray = + asyncTasks.toArray(new CompletableFuture[asyncTasks.size()]); + try { + // wait for all futures to complete + CompletableFuture.allOf(completableAsyncTaskArray).get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + throw new RuntimeException(e); } - // wait for all futures to complete + long ended = System.nanoTime(); + + threadPool.shutdown(); + + // Map to save latency results separately for each action + Map> actionResults = + Map.of( + ChosenAction.GET_EXISTING, new ArrayList<>(), + ChosenAction.GET_NON_EXISTING, new ArrayList<>(), + ChosenAction.SET, new ArrayList<>()); + + // for each task, call future.get() to retrieve & save the result in the map asyncTasks.forEach( - future -> { - try { - future.get(); - } catch (Exception e) { - e.printStackTrace(); - } - }); - long after = System.nanoTime(); + future -> { + try { + var futureResult = future.get(); + futureResult.forEach( + (action, result) -> actionResults.get(action).addAll(result)); + } catch (Exception e) { + e.printStackTrace(); + } + }); + var calculatedResults = calculateResults(actionResults); clients.forEach(Client::closeConnection); - var calculatedResults = calculateResults(actionResults); if (config.resultsFile.isPresent()) { + double tps = iterationCounter.get() * NANO_TO_SECONDS / (ended - started); JsonWriter.Write( - calculatedResults, - config.resultsFile.get(), - dataSize, - clientCreator.get().getName(), - clientCount, - concurrentNum, - iterations / ((after - before) / TPS_NORMALIZATION)); - } - printResults(calculatedResults, (after - before) / TPS_NORMALIZATION, iterations); - try { - Thread.sleep(2000); - } catch (InterruptedException ignored) { + calculatedResults, + config.resultsFile.get(), + dataSize, + clientName, + clientCount, + concurrentNum, + tps); } + printResults(calculatedResults, (ended - started) / TPS_NORMALIZATION, iterations); } } } diff --git a/java/client/src/main/java/javababushka/Client.java b/java/client/src/main/java/javababushka/Client.java index c23e305bf3..e55dda8f28 100644 --- a/java/client/src/main/java/javababushka/Client.java +++ b/java/client/src/main/java/javababushka/Client.java @@ -21,10 +21,10 @@ import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.tuple.Pair; -public class Client { +public class Client implements AutoCloseable { private static final long DEFAULT_TIMEOUT_MILLISECONDS = 1000; - private final NettyWrapper innerClient = NettyWrapper.INSTANCE; + private final NettyWrapper innerClient; public void set(String key, String value) { waitForResult(asyncSet(key, value)); @@ -36,6 +36,10 @@ public String get(String key) { // TODO support non-strings } + public void connectToRedis(String host, int port, boolean useSsl, boolean clusterMode) { + waitForResult(asyncConnectToRedis(host, port, useSsl, clusterMode)); + } + private synchronized Pair> getNextCallback() { var future = new CompletableFuture(); var callbackId = new Random().nextInt(); @@ -81,6 +85,7 @@ private CompletableFuture submitNewCommand(RequestType command, List { var commandArgs = ArgsArray.newBuilder(); @@ -130,4 +135,45 @@ public T waitForResult(Future future, long timeout) { return null; } } + + private boolean closed = false; + + public synchronized void closeConnection() { + if (!closed) { + //innerClient = null; + NettyWrapper.deregisterClient(); + closed = true; + } + } + + @Override + public void close() { + System.out.println("close"); + closeConnection(); + } + + public Client() { + innerClient = NettyWrapper.registerNewClient(); + } + + static { + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + System.out.println("hook"); + NettyWrapper.deregisterClient(); + })); + } + + // TODO use Cleaner and/or PhantomReference + // https://blog.ragozin.info/2016/03/finalizers-and-references-in-java.html + // https://stackoverflow.com/questions/43311825/how-to-use-phantomreference-as-finalize-replacement + // https://docs.oracle.com/javase/9/docs/api/java/lang/ref/Cleaner.html + // Or follow Netty's approach + // https://netty.io/wiki/reference-counted-objects.html + //* + @Override + protected void finalize() throws Throwable { + System.out.println("finalize"); + //NettyWrapper.deregisterClient(); + } + //*/ } diff --git a/java/client/src/main/java/javababushka/NettyWrapper.java b/java/client/src/main/java/javababushka/NettyWrapper.java index 199c39806d..b1426f5098 100644 --- a/java/client/src/main/java/javababushka/NettyWrapper.java +++ b/java/client/src/main/java/javababushka/NettyWrapper.java @@ -29,10 +29,13 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; + import lombok.Getter; import response.ResponseOuterClass; -class NettyWrapper implements AutoCloseable { +class NettyWrapper { private final String unixSocket = getSocket(); private static String getSocket() { @@ -50,9 +53,8 @@ private static String getSocket() { // Futures to handle responses. Index is callback id, starting from 1 (0 index is for connection // request always). // Is it not a concurrent nor sync collection, but it is synced on adding. No removes. - @Getter - private final Map> responses = - new HashMap<>(); + private static final Map> responses = + new ConcurrentHashMap<>(); // We support MacOS and Linux only, because Babushka does not support Windows, because tokio does // not support it. @@ -70,13 +72,12 @@ private static boolean isMacOs() { static { // TODO fix: netty still doesn't use slf4j nor log4j - InternalLoggerFactory.setDefaultFactory(Slf4JLoggerFactory.INSTANCE); + //InternalLoggerFactory.setDefaultFactory(Slf4JLoggerFactory.INSTANCE); } - public static NettyWrapper INSTANCE = new NettyWrapper(); + private static NettyWrapper INSTANCE = null; private NettyWrapper() { - // TODO maybe move to constructor or to static? try { channel = new Bootstrap() @@ -111,14 +112,14 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) if (callbackId != 0) { responses.remove(callbackId); } - super.channelRead(ctx, bytes); + buf.release(); } @Override public void exceptionCaught( ChannelHandlerContext ctx, Throwable cause) throws Exception { System.out.printf("=== exceptionCaught %s %s %n", ctx, cause); - cause.printStackTrace(); + cause.printStackTrace(System.err); super.exceptionCaught(ctx, cause); } }) @@ -152,9 +153,47 @@ public void registerRequest( responses.put(callbackId, future); } - @Override - public void close() throws Exception { + public void close() { // channel.closeFuture().sync() + channel.close(); group.shutdownGracefully(); } + +/* +The java.lang.ref.Cleaner and java.lang.ref.PhantomReference provide more flexible and efficient ways to release resources when an object becomes unreachable +*/ + + static { + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + if (INSTANCE != null) { + INSTANCE.close(); + } + })); + } + + private static final AtomicInteger REF_COUNT = new AtomicInteger(0); + + public static synchronized NettyWrapper registerNewClient() { + if (0 == REF_COUNT.getAndIncrement()) { + INSTANCE = new NettyWrapper(); + } + return INSTANCE; + } + + public static synchronized void deregisterClient() { + if (REF_COUNT.get() == 0) { + return; + } + if (0 == REF_COUNT.decrementAndGet()) { + INSTANCE.close(); + INSTANCE = null; + responses.clear(); + } + } + + @Override + protected void finalize() throws Throwable { + System.err.println("FINISH HIM"); + } +// TODO log warning on finalize - client wasn't closed } diff --git a/java/integTest/build.gradle b/java/integTest/build.gradle index e69de29bb2..3d0031bb83 100644 --- a/java/integTest/build.gradle +++ b/java/integTest/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'application' +} + +repositories { + // Use Maven Central for resolving dependencies. + mavenCentral() +} + +dependencies { + implementation project(':client') +} + +application { + // Define the main class for the application. + mainClass = 'javababushka.Test' + applicationDefaultJvmArgs += "-Djava.library.path=${projectDir}/../target/release" +} diff --git a/java/integTest/src/main/java/javababushka/Test.java b/java/integTest/src/main/java/javababushka/Test.java new file mode 100644 index 0000000000..a4e874a307 --- /dev/null +++ b/java/integTest/src/main/java/javababushka/Test.java @@ -0,0 +1,48 @@ +package javababushka; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.stream.IntStream; + +public class Test { + public static void main(String[] args) { + test_destructor(); + /* + try (var client = new Client()) { + client.connectToRedis("localhost", 6379, false, false); + var futures = IntStream.range(0, Runtime.getRuntime().availableProcessors() * 4) + .mapToObj(cpu -> CompletableFuture.runAsync(() -> { + System.out.printf("Task %d%n", cpu); + for (int i = 0; i < 10000; i++) { + client.get("dfhjkaslkgh"); + } + System.out.printf("Task %d%n", cpu); + })).toArray(CompletableFuture[]::new); + try { + CompletableFuture.allOf(futures).get(); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + }*/ + } + + private static void test_destructor() { + var client1 = new Client(); + var client2 = new Client(); + /* + client1.connectToRedis("localhost", 6379, false, false); + System.out.println("client 1 connected"); + client1.set("ikik", "233"); + System.out.println("after client 1 set"); + client2.connectToRedis("localhost", 6379, false, false); + System.out.println("client 2 connected"); + System.out.printf("client 2 get %s%n", client2.get("ikik")); +*/ + client1 = null; + client2 = null; + System.out.println("end"); + //System.exit(0); + System.gc(); + System.out.println("end end"); + } +} diff --git a/java/src/lib.rs b/java/src/lib.rs index cef7526b5a..7e86461c5c 100644 --- a/java/src/lib.rs +++ b/java/src/lib.rs @@ -25,14 +25,6 @@ fn redis_value_to_java(mut env: JNIEnv, val: Value) -> JObject { Value::Bulk(_bulk) => { let _ = env.throw("Not implemented"); JObject::null() - /* - let elements: &PyList = PyList::new( - py, - bulk.into_iter() - .map(|item| redis_value_to_py(py, item).unwrap()), - ); - Ok(elements.into_py(py)) - */ } } } @@ -95,4 +87,4 @@ fn throw_java_exception(mut env: JNIEnv, message: String) { error!("Failed to create exception with string {}: {}", message, err.to_string()); } }; -} \ No newline at end of file +} From dfbd1060ed0f2ee7ce4d1d3680d72ff4cc5d5e51 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Fri, 24 Nov 2023 09:57:39 -0800 Subject: [PATCH 61/81] Fix thread pool use for Netty. Signed-off-by: Yury-Fridlyand --- .../src/main/java/javababushka/Client.java | 53 ++----------- .../main/java/javababushka/NettyWrapper.java | 79 +++++++------------ 2 files changed, 34 insertions(+), 98 deletions(-) diff --git a/java/client/src/main/java/javababushka/Client.java b/java/client/src/main/java/javababushka/Client.java index e55dda8f28..54d66acde6 100644 --- a/java/client/src/main/java/javababushka/Client.java +++ b/java/client/src/main/java/javababushka/Client.java @@ -21,11 +21,9 @@ import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.tuple.Pair; -public class Client implements AutoCloseable { +public class Client { private static final long DEFAULT_TIMEOUT_MILLISECONDS = 1000; - private final NettyWrapper innerClient; - public void set(String key, String value) { waitForResult(asyncSet(key, value)); // TODO parse response and rethrow an exception if there is an error @@ -43,7 +41,7 @@ public void connectToRedis(String host, int port, boolean useSsl, boolean cluste private synchronized Pair> getNextCallback() { var future = new CompletableFuture(); var callbackId = new Random().nextInt(); - innerClient.registerRequest(callbackId, future); + NettyWrapper.INSTANCE.registerRequest(callbackId, future); return Pair.of(callbackId, future); } @@ -76,8 +74,8 @@ public Future asyncConnectToRedis( var future = new CompletableFuture(); // connection request has hardcoded callback id = 0 // https://github.com/aws/babushka/issues/600 - innerClient.registerRequest(0, future); - innerClient.getChannel().writeAndFlush(request.toByteArray()); + NettyWrapper.INSTANCE.registerRequest(0, future); + NettyWrapper.INSTANCE.getChannel().writeAndFlush(request.toByteArray()); return future; } @@ -103,7 +101,7 @@ private CompletableFuture submitNewCommand(RequestType command, List f); @@ -135,45 +133,4 @@ public T waitForResult(Future future, long timeout) { return null; } } - - private boolean closed = false; - - public synchronized void closeConnection() { - if (!closed) { - //innerClient = null; - NettyWrapper.deregisterClient(); - closed = true; - } - } - - @Override - public void close() { - System.out.println("close"); - closeConnection(); - } - - public Client() { - innerClient = NettyWrapper.registerNewClient(); - } - - static { - Runtime.getRuntime().addShutdownHook(new Thread(() -> { - System.out.println("hook"); - NettyWrapper.deregisterClient(); - })); - } - - // TODO use Cleaner and/or PhantomReference - // https://blog.ragozin.info/2016/03/finalizers-and-references-in-java.html - // https://stackoverflow.com/questions/43311825/how-to-use-phantomreference-as-finalize-replacement - // https://docs.oracle.com/javase/9/docs/api/java/lang/ref/Cleaner.html - // Or follow Netty's approach - // https://netty.io/wiki/reference-counted-objects.html - //* - @Override - protected void finalize() throws Throwable { - System.out.println("finalize"); - //NettyWrapper.deregisterClient(); - } - //*/ } diff --git a/java/client/src/main/java/javababushka/NettyWrapper.java b/java/client/src/main/java/javababushka/NettyWrapper.java index b1426f5098..012fa64a23 100644 --- a/java/client/src/main/java/javababushka/NettyWrapper.java +++ b/java/client/src/main/java/javababushka/NettyWrapper.java @@ -1,5 +1,7 @@ package javababushka; +import static response.ResponseOuterClass.Response; + import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -24,17 +26,15 @@ import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; -import io.netty.util.internal.logging.InternalLoggerFactory; -import io.netty.util.internal.logging.Slf4JLoggerFactory; -import java.util.HashMap; +import io.netty.util.concurrent.DefaultThreadFactory; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicInteger; - +import lombok.AllArgsConstructor; import lombok.Getter; -import response.ResponseOuterClass; +import lombok.NonNull; +@AllArgsConstructor class NettyWrapper { private final String unixSocket = getSocket(); @@ -53,14 +53,14 @@ private static String getSocket() { // Futures to handle responses. Index is callback id, starting from 1 (0 index is for connection // request always). // Is it not a concurrent nor sync collection, but it is synced on adding. No removes. - private static final Map> responses = - new ConcurrentHashMap<>(); + private final Map> responses = new ConcurrentHashMap<>(); // We support MacOS and Linux only, because Babushka does not support Windows, because tokio does // not support it. // Probably we should use NIO (NioEventLoopGroup) for Windows. private static final boolean isMacOs = isMacOs(); + // TODO support IO-Uring and NIO private static boolean isMacOs() { try { Class.forName("io.netty.channel.kqueue.KQueue"); @@ -70,25 +70,27 @@ private static boolean isMacOs() { } } - static { - // TODO fix: netty still doesn't use slf4j nor log4j - //InternalLoggerFactory.setDefaultFactory(Slf4JLoggerFactory.INSTANCE); - } - - private static NettyWrapper INSTANCE = null; + public static NettyWrapper INSTANCE = null; private NettyWrapper() { try { + int cpuCount = Runtime.getRuntime().availableProcessors(); + group = + isMacOs + ? new KQueueEventLoopGroup( + cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) + : new EpollEventLoopGroup( + cpuCount, new DefaultThreadFactory("NettyWrapper-epoll-elg", true)); channel = new Bootstrap() .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024, 4096)) .option(ChannelOption.ALLOCATOR, ByteBufAllocator.DEFAULT) - .group(group = isMacOs ? new KQueueEventLoopGroup() : new EpollEventLoopGroup()) + .group(group) .channel(isMacOs ? KQueueDomainSocketChannel.class : EpollDomainSocketChannel.class) .handler( new ChannelInitializer() { @Override - public void initChannel(UnixChannel ch) throws Exception { + public void initChannel(@NonNull UnixChannel ch) throws Exception { ch.pipeline() .addLast("logger", new LoggingHandler(LogLevel.DEBUG)) // https://netty.io/4.1/api/io/netty/handler/codec/protobuf/ProtobufEncoder.html @@ -97,7 +99,8 @@ public void initChannel(UnixChannel ch) throws Exception { .addLast( new ChannelInboundHandlerAdapter() { @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) + public void channelRead( + @NonNull ChannelHandlerContext ctx, @NonNull Object msg) throws Exception { // System.out.printf("=== channelRead %s %s %n", ctx, msg); var buf = (ByteBuf) msg; @@ -105,7 +108,7 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) buf.readBytes(bytes); // TODO surround parsing with try-catch, set error to future if // parsing failed. - var response = ResponseOuterClass.Response.parseFrom(bytes); + var response = Response.parseFrom(bytes); int callbackId = response.getCallbackIdx(); // System.out.printf("== Received response with callback %d%n", responses.get(callbackId).complete(response); @@ -148,8 +151,7 @@ public void write( } } - public void registerRequest( - Integer callbackId, CompletableFuture future) { + public void registerRequest(Integer callbackId, CompletableFuture future) { responses.put(callbackId, future); } @@ -159,41 +161,18 @@ public void close() { group.shutdownGracefully(); } -/* -The java.lang.ref.Cleaner and java.lang.ref.PhantomReference provide more flexible and efficient ways to release resources when an object becomes unreachable -*/ - - static { - Runtime.getRuntime().addShutdownHook(new Thread(() -> { + private static class ShutdownHook implements Runnable { + @Override + public void run() { if (INSTANCE != null) { INSTANCE.close(); } - })); - } - - private static final AtomicInteger REF_COUNT = new AtomicInteger(0); - - public static synchronized NettyWrapper registerNewClient() { - if (0 == REF_COUNT.getAndIncrement()) { - INSTANCE = new NettyWrapper(); } - return INSTANCE; } - public static synchronized void deregisterClient() { - if (REF_COUNT.get() == 0) { - return; - } - if (0 == REF_COUNT.decrementAndGet()) { - INSTANCE.close(); - INSTANCE = null; - responses.clear(); - } - } - - @Override - protected void finalize() throws Throwable { - System.err.println("FINISH HIM"); + static { + INSTANCE = new NettyWrapper(); + Runtime.getRuntime() + .addShutdownHook(new Thread(new ShutdownHook(), "NettyWrapper-shutdown-hook")); } -// TODO log warning on finalize - client wasn't closed } From ea30ea11d65f03505ef74d4e5d01259c0634afd2 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Fri, 24 Nov 2023 13:24:30 -0800 Subject: [PATCH 62/81] Revert some core lib changes. Signed-off-by: Yury-Fridlyand --- babushka-core/src/client/standalone_client.rs | 9 +++------ babushka-core/src/rotating_buffer.rs | 20 ------------------- babushka-core/src/socket_listener.rs | 12 ++++------- 3 files changed, 7 insertions(+), 34 deletions(-) diff --git a/babushka-core/src/client/standalone_client.rs b/babushka-core/src/client/standalone_client.rs index 23dc6ef283..3a21defe5d 100644 --- a/babushka-core/src/client/standalone_client.rs +++ b/babushka-core/src/client/standalone_client.rs @@ -5,7 +5,7 @@ use crate::retry_strategies::RetryStrategy; use futures::{stream, StreamExt}; #[cfg(standalone_heartbeat)] use logger_core::log_debug; -use logger_core::{log_error, log_trace, log_warn}; +use logger_core::{log_trace, log_warn}; use protobuf::EnumOrUnknown; use redis::cluster_routing::is_readonly; use redis::{RedisError, RedisResult, Value}; @@ -186,7 +186,7 @@ impl StandaloneClient { } pub async fn send_packed_command(&mut self, cmd: &redis::Cmd) -> RedisResult { - //log_error("StandaloneClient", "sending command"); + log_trace("StandaloneClient", "sending command"); let reconnecting_connection = self.get_connection(cmd); let mut connection = reconnecting_connection.get_connection().await?; let result = connection.send_packed_command(cmd).await; @@ -199,10 +199,7 @@ impl StandaloneClient { reconnecting_connection.reconnect(); Err(err) } - _ => { - //log_error("StandaloneClient", "received response"); - result - }, + _ => result, } } diff --git a/babushka-core/src/rotating_buffer.rs b/babushka-core/src/rotating_buffer.rs index 0124a0e3d8..2a00642cec 100644 --- a/babushka-core/src/rotating_buffer.rs +++ b/babushka-core/src/rotating_buffer.rs @@ -1,10 +1,8 @@ -use std::any::TypeId; use bytes::BytesMut; use integer_encoding::VarInt; use logger_core::log_error; use protobuf::Message; use std::io; -use crate::redis_request::RedisRequest; /// An object handling a arranging read buffers, and parsing the data in the buffers into requests. pub struct RotatingBuffer { @@ -30,28 +28,10 @@ impl RotatingBuffer { if (start_pos + request_len as usize) > buffer_len { break; } else { - //log_error("parse input", format!("incoming: start {start_pos}, len {request_len}, buffer_len: {buffer_len}")); - //let bytes = buffer.slice(start_pos..start_pos + request_len as usize); - //log_error("parse input", format!("{:#x?}", bytes.as_ref())); match T::parse_from_tokio_bytes( &buffer.slice(start_pos..start_pos + request_len as usize), ) { Ok(request) => { - /* - if request_len != 41 { - let mut callback_id: i32 = 0; - let mut pos = start_pos + 1; - for shift in (0..64).step_by(7) { - let b: &u8 = buffer.get(pos).unwrap(); - pos += 1; - callback_id |= ((b & 0x7F) as i32) << shift; - if (b & 0x80) == 0 { - break; - } - } - log_error("callback id received", callback_id.to_string()); - } - */ prev_position += request_len as usize + bytes_read; results.push(request); } diff --git a/babushka-core/src/socket_listener.rs b/babushka-core/src/socket_listener.rs index 99c4743b54..d00e2654e3 100644 --- a/babushka-core/src/socket_listener.rs +++ b/babushka-core/src/socket_listener.rs @@ -125,7 +125,7 @@ impl UnixStreamListener { } } -async fn write_to_output(writer: &Rc, callback_idx: u32) { +async fn write_to_output(writer: &Rc) { let Ok(_guard) = writer.lock.try_lock() else { return; }; @@ -136,9 +136,6 @@ async fn write_to_output(writer: &Rc, callback_idx: u32) { return; } let mut total_written_bytes = 0; - if callback_idx > 0 { - //log_error("callback id sent ", callback_idx.to_string()); - } while total_written_bytes < output.len() { if let Err(err) = writer.socket.writable().await { let _res = writer.closing_sender.send(err.into()).await; // we ignore the error, because it means that the reader was dropped, which is ok. @@ -214,7 +211,7 @@ async fn write_result( error_message.into(), )) } else { - log_warn("received error", error_message.as_str()); + log_warn("received error", format!("{} for callback {}", error_message.as_str(), callback_index)); let mut request_error = response::RequestError::default(); if err.is_connection_dropped() { request_error.type_ = response::RequestErrorType::Disconnect.into(); @@ -234,7 +231,6 @@ async fn write_result( }; request_error.message = error_message.into(); } - log_error("received error", format!("{:?}", err)); Some(response::response::Value::RequestError(request_error)) } } @@ -250,7 +246,7 @@ async fn write_to_writer(response: Response, writer: &Rc) -> Result<(), match encode_result { Ok(_) => { writer.accumulated_outputs.set(vec); - write_to_output(writer, response.callback_idx).await; + write_to_output(writer).await; Ok(()) } Err(err) => { @@ -463,7 +459,7 @@ fn handle_request(request: RedisRequest, client: Client, writer: Rc) { } }, None => Err(ClienUsageError::InternalError( - format!("Received empty request: {}", request.callback_idx), + format!("Received empty request for callback {}", request.callback_idx), )), }; From 986f468f43b347268265604f7d4375c71679d06b Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Fri, 24 Nov 2023 13:52:11 -0800 Subject: [PATCH 63/81] Revert some changes added by mistake. Signed-off-by: Yury-Fridlyand --- benchmarks/utilities/csv_exporter.py | 4 ++-- submodules/redis-rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/benchmarks/utilities/csv_exporter.py b/benchmarks/utilities/csv_exporter.py index af8d1b9259..753df2e5ab 100755 --- a/benchmarks/utilities/csv_exporter.py +++ b/benchmarks/utilities/csv_exporter.py @@ -53,5 +53,5 @@ values = [json_object[field] for field in base_fields] writer.writerow(values) -# for json_file_full_path in sys.argv[1:-1]: -# os.remove(json_file_full_path) +for json_file_full_path in sys.argv[1:-1]: + os.remove(json_file_full_path) diff --git a/submodules/redis-rs b/submodules/redis-rs index ad7dc114cf..168b9c55c2 160000 --- a/submodules/redis-rs +++ b/submodules/redis-rs @@ -1 +1 @@ -Subproject commit ad7dc114cf9ffa45a3d327610fb5873eebed5d7c +Subproject commit 168b9c55c2a880d2fb23601e41261c94d308c0d8 From d58bff998bbb20473cc1bce6fa82a24285c12e02 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Mon, 27 Nov 2023 12:57:12 -0800 Subject: [PATCH 64/81] Address PR feedback. Signed-off-by: Yury-Fridlyand --- babushka-core/src/socket_listener.rs | 1 - .../main/java/javababushka/benchmarks/utils/Benchmarking.java | 4 ++++ java/client/src/main/java/javababushka/NettyWrapper.java | 1 - 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/babushka-core/src/socket_listener.rs b/babushka-core/src/socket_listener.rs index d7014a6288..80430f3180 100644 --- a/babushka-core/src/socket_listener.rs +++ b/babushka-core/src/socket_listener.rs @@ -24,7 +24,6 @@ use std::cell::Cell; use std::rc::Rc; use std::{env, str}; use std::{io, thread}; -use std::fmt::format; use thiserror::Error; use tokio::io::ErrorKind::AddrInUse; use tokio::net::{UnixListener, UnixStream}; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java index 36f5f3ff23..e5b8fe4c7a 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java @@ -126,6 +126,8 @@ public static void printResults( System.out.printf("Runtime s: %f%n", duration); System.out.printf("Iterations: %d%n", iterations); System.out.printf("TPS: %f%n", iterations / duration); + int totalHits = 0; + for (Map.Entry entry : resultsMap.entrySet()) { ChosenAction action = entry.getKey(); LatencyResults results = entry.getValue(); @@ -137,7 +139,9 @@ public static void printResults( System.out.printf("p90 latency ms: %f%n", results.p90Latency); System.out.printf("p99 latency ms: %f%n", results.p99Latency); System.out.printf("Total hits: %d%n", results.totalHits); + totalHits += results.totalHits; } + System.out.printf("%nTotal hits: %d%n", totalHits); } public static void testClientSetGet( diff --git a/java/client/src/main/java/javababushka/NettyWrapper.java b/java/client/src/main/java/javababushka/NettyWrapper.java index e838a1b688..e336eeef6c 100644 --- a/java/client/src/main/java/javababushka/NettyWrapper.java +++ b/java/client/src/main/java/javababushka/NettyWrapper.java @@ -156,7 +156,6 @@ public void registerRequest(Integer callbackId, CompletableFuture futu } public void close() { - // channel.closeFuture().sync() channel.close(); group.shutdownGracefully(); } From 507ef9f0b4c60e2e9d690a324691bea486ef3411 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Mon, 27 Nov 2023 13:24:37 -0800 Subject: [PATCH 65/81] Fix generating callback ID and handling new connections. Signed-off-by: Yury-Fridlyand --- .../src/main/java/javababushka/Client.java | 6 ++--- .../main/java/javababushka/NettyWrapper.java | 25 ++++++++++++++++--- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/java/client/src/main/java/javababushka/Client.java b/java/client/src/main/java/javababushka/Client.java index 0ad57ee9d8..04ae3cfc4b 100644 --- a/java/client/src/main/java/javababushka/Client.java +++ b/java/client/src/main/java/javababushka/Client.java @@ -15,7 +15,6 @@ import static response.ResponseOuterClass.Response; import java.util.List; -import java.util.Random; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; @@ -41,8 +40,7 @@ public void connectToRedis(String host, int port, boolean useSsl, boolean cluste private synchronized Pair> getNextCallback() { var future = new CompletableFuture(); - var callbackId = new Random().nextInt(); - NettyWrapper.INSTANCE.registerRequest(callbackId, future); + int callbackId = NettyWrapper.INSTANCE.registerRequest(future); return Pair.of(callbackId, future); } @@ -72,7 +70,7 @@ public Future asyncConnectToRedis( var future = new CompletableFuture(); // connection request has hardcoded callback id = 0 // https://github.com/aws/babushka/issues/600 - NettyWrapper.INSTANCE.registerRequest(0, future); + NettyWrapper.INSTANCE.registerConnection(future); NettyWrapper.INSTANCE.getChannel().writeAndFlush(request.toByteArray()); return future; } diff --git a/java/client/src/main/java/javababushka/NettyWrapper.java b/java/client/src/main/java/javababushka/NettyWrapper.java index e336eeef6c..ef0f31c880 100644 --- a/java/client/src/main/java/javababushka/NettyWrapper.java +++ b/java/client/src/main/java/javababushka/NettyWrapper.java @@ -27,9 +27,12 @@ import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; import io.netty.util.concurrent.DefaultThreadFactory; +import java.util.Deque; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedDeque; +import java.util.concurrent.atomic.AtomicInteger; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NonNull; @@ -55,6 +58,11 @@ private static String getSocket() { // Is it not a concurrent nor sync collection, but it is synced on adding. No removes. private final Map> responses = new ConcurrentHashMap<>(); + private final Deque> connectionRequests = + new ConcurrentLinkedDeque<>(); + + private final AtomicInteger requestId = new AtomicInteger(0); + // We support MacOS and Linux only, because Babushka does not support Windows, because tokio does // not support it. // Probably we should use NIO (NioEventLoopGroup) for Windows. @@ -111,8 +119,13 @@ public void channelRead( var response = Response.parseFrom(bytes); int callbackId = response.getCallbackIdx(); // System.out.printf("== Received response with callback %d%n", - responses.get(callbackId).complete(response); - if (callbackId != 0) { + if (callbackId == 0) { + // can't distinguish connection requests since they have no + // callback ID + // https://github.com/aws/babushka/issues/600 + connectionRequests.pop().complete(response); + } else { + responses.get(callbackId).complete(response); responses.remove(callbackId); } buf.release(); @@ -151,8 +164,14 @@ public void write( } } - public void registerRequest(Integer callbackId, CompletableFuture future) { + public int registerRequest(CompletableFuture future) { + int callbackId = requestId.incrementAndGet(); responses.put(callbackId, future); + return callbackId; + } + + public void registerConnection(CompletableFuture future) { + connectionRequests.add(future); } public void close() { From 9cecf239255d38216eeb049319367521363a88e5 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Mon, 27 Nov 2023 23:07:35 -0800 Subject: [PATCH 66/81] Revert IT. Signed-off-by: Yury-Fridlyand --- java/integTest/build.gradle | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/java/integTest/build.gradle b/java/integTest/build.gradle index 3d0031bb83..e69de29bb2 100644 --- a/java/integTest/build.gradle +++ b/java/integTest/build.gradle @@ -1,18 +0,0 @@ -plugins { - id 'application' -} - -repositories { - // Use Maven Central for resolving dependencies. - mavenCentral() -} - -dependencies { - implementation project(':client') -} - -application { - // Define the main class for the application. - mainClass = 'javababushka.Test' - applicationDefaultJvmArgs += "-Djava.library.path=${projectDir}/../target/release" -} From 8ffdbead0f5bbfaf2bfd1a19dbde0e10ed5412e4 Mon Sep 17 00:00:00 2001 From: Andrew Carbonetto Date: Wed, 29 Nov 2023 14:21:15 -0800 Subject: [PATCH 67/81] Add unit tests for Client Signed-off-by: Andrew Carbonetto --- java/build.gradle | 11 --- java/client/build.gradle | 5 ++ .../src/main/java/javababushka/Client.java | 79 +++++++++++-------- .../main/java/javababushka/NettyWrapper.java | 35 +++++--- .../test/java/javababushka/ClientTest.java | 52 ++++++++++++ 5 files changed, 129 insertions(+), 53 deletions(-) create mode 100644 java/client/src/test/java/javababushka/ClientTest.java diff --git a/java/build.gradle b/java/build.gradle index 340f2c98cb..5ecae27fae 100644 --- a/java/build.gradle +++ b/java/build.gradle @@ -18,17 +18,6 @@ subprojects { plugins.withId('java') { sourceCompatibility = targetCompatibility = "11" } - tasks.withType(Test) { - useJUnitPlatform() - - testLogging { - exceptionFormat "full" - events "started", "skipped", "passed", "failed" - showStandardStreams true - } - // TODO: add jacoco with code coverage - // finalizedBy jacocoTestReport, jacocoTestCoverageVerification - } } dependencies { diff --git a/java/client/build.gradle b/java/client/build.gradle index 68b4e5ec82..8da0aecdc2 100644 --- a/java/client/build.gradle +++ b/java/client/build.gradle @@ -24,6 +24,10 @@ dependencies { annotationProcessor 'org.projectlombok:lombok:1.18.30' testCompileOnly 'org.projectlombok:lombok:1.18.30' testAnnotationProcessor 'org.projectlombok:lombok:1.18.30' + + // junit + testImplementation('org.junit.jupiter:junit-jupiter:5.6.2') + testImplementation group: 'org.mockito', name: 'mockito-junit-jupiter', version: '3.12.4' } tasks.register('protobuf', Exec) { @@ -70,6 +74,7 @@ compileJava.dependsOn('protobuf') clean.dependsOn('cleanProtobuf') tasks.withType(Test) { + useJUnitPlatform() testLogging { exceptionFormat "full" events "started", "skipped", "passed", "failed" diff --git a/java/client/src/main/java/javababushka/Client.java b/java/client/src/main/java/javababushka/Client.java index 04ae3cfc4b..5347c3ddd8 100644 --- a/java/client/src/main/java/javababushka/Client.java +++ b/java/client/src/main/java/javababushka/Client.java @@ -1,11 +1,6 @@ package javababushka; -import static connection_request.ConnectionRequestOuterClass.AuthenticationInfo; import static connection_request.ConnectionRequestOuterClass.ConnectionRequest; -import static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy; -import static connection_request.ConnectionRequestOuterClass.NodeAddress; -import static connection_request.ConnectionRequestOuterClass.ReadFrom; -import static connection_request.ConnectionRequestOuterClass.TlsMode; import static redis_request.RedisRequestOuterClass.Command; import static redis_request.RedisRequestOuterClass.Command.ArgsArray; import static redis_request.RedisRequestOuterClass.RedisRequest; @@ -24,6 +19,16 @@ public class Client { private static final long DEFAULT_TIMEOUT_MILLISECONDS = 1000; private static final int REQUEST_TIMEOUT_MILLISECONDS = 250; + private NettyWrapper wrapper; + + public Client() { + this(NettyWrapper.getInstance()); + } + + public Client(NettyWrapper nettyWrapper) { + wrapper = nettyWrapper; + } + public void set(String key, String value) { waitForResult(asyncSet(key, value)); // TODO parse response and rethrow an exception if there is an error @@ -40,38 +45,50 @@ public void connectToRedis(String host, int port, boolean useSsl, boolean cluste private synchronized Pair> getNextCallback() { var future = new CompletableFuture(); - int callbackId = NettyWrapper.INSTANCE.registerRequest(future); + int callbackId = wrapper.registerRequest(future); return Pair.of(callbackId, future); } - public Future asyncConnectToRedis( + public static ConnectionRequest.Builder getConnectionRequest( String host, int port, boolean useSsl, boolean clusterMode) { - var request = - ConnectionRequest.newBuilder() - .addAddresses(NodeAddress.newBuilder().setHost(host).setPort(port).build()) - .setTlsMode( - useSsl // TODO: secure or insecure TLS? - ? TlsMode.SecureTls - : TlsMode.NoTls) - .setClusterModeEnabled(clusterMode) - .setRequestTimeout(REQUEST_TIMEOUT_MILLISECONDS) - .setReadFrom(ReadFrom.Primary) - .setConnectionRetryStrategy( - ConnectionRetryStrategy.newBuilder() - .setNumberOfRetries(1) - .setFactor(1) - .setExponentBase(1) - .build()) - .setAuthenticationInfo( - AuthenticationInfo.newBuilder().setPassword("").setUsername("default").build()) - .setDatabaseId(0) - .build(); + ConnectionRequest.Builder connectionRequest = ConnectionRequest.newBuilder(); + connectionRequest.addAddresses( + connection_request.ConnectionRequestOuterClass.NodeAddress.newBuilder() + .setHost(host) + .setPort(port) + .build()); + connectionRequest.setTlsMode( + useSsl + ? connection_request.ConnectionRequestOuterClass.TlsMode.SecureTls + : connection_request.ConnectionRequestOuterClass.TlsMode.NoTls); + connectionRequest.setClusterModeEnabled(clusterMode); + connectionRequest + .setReadFrom(connection_request.ConnectionRequestOuterClass.ReadFrom.Primary) + .setConnectionRetryStrategy( + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.newBuilder() + .setNumberOfRetries(1) + .setFactor(1) + .setExponentBase(1) + .build()) + .setAuthenticationInfo( + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.newBuilder() + .setPassword("") + .setUsername("default") + .build()) + .setDatabaseId(0); + + return connectionRequest; + } + + public CompletableFuture asyncConnectToRedis( + String host, int port, boolean useSsl, boolean clusterMode) { + var request = getConnectionRequest(host, port, useSsl, clusterMode).build(); - var future = new CompletableFuture(); // connection request has hardcoded callback id = 0 // https://github.com/aws/babushka/issues/600 - NettyWrapper.INSTANCE.registerConnection(future); - NettyWrapper.INSTANCE.getChannel().writeAndFlush(request.toByteArray()); + var future = new CompletableFuture(); + wrapper.registerConnection(future); + wrapper.writeAndFlush(request); return future; } @@ -97,7 +114,7 @@ private CompletableFuture submitNewCommand(RequestType command, List f); diff --git a/java/client/src/main/java/javababushka/NettyWrapper.java b/java/client/src/main/java/javababushka/NettyWrapper.java index ef0f31c880..28c8472e16 100644 --- a/java/client/src/main/java/javababushka/NettyWrapper.java +++ b/java/client/src/main/java/javababushka/NettyWrapper.java @@ -2,6 +2,7 @@ import static response.ResponseOuterClass.Response; +import com.google.protobuf.GeneratedMessageV3; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -34,7 +35,6 @@ import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.atomic.AtomicInteger; import lombok.AllArgsConstructor; -import lombok.Getter; import lombok.NonNull; @AllArgsConstructor @@ -50,9 +50,6 @@ private static String getSocket() { } } - @Getter private Channel channel = null; - private EventLoopGroup group = null; - // Futures to handle responses. Index is callback id, starting from 1 (0 index is for connection // request always). // Is it not a concurrent nor sync collection, but it is synced on adding. No removes. @@ -78,8 +75,26 @@ private static boolean isMacOs() { } } - public static NettyWrapper INSTANCE = null; + private Channel channel = null; + private EventLoopGroup group = null; + + /** + * Returns the singleton instance of the NettyWrapper + * + * @return NettyWrapper instance + */ + public static NettyWrapper getInstance() { + if (INSTANCE == null) { + INSTANCE = new NettyWrapper(); + Runtime.getRuntime() + .addShutdownHook(new Thread(new ShutdownHook(), "NettyWrapper-shutdown-hook")); + } + return INSTANCE; + } + private static NettyWrapper INSTANCE = null; + + /** Constructor class for the single instance */ private NettyWrapper() { try { int cpuCount = Runtime.getRuntime().availableProcessors(); @@ -164,6 +179,10 @@ public void write( } } + public void writeAndFlush(GeneratedMessageV3 message) { + channel.writeAndFlush(message.toByteArray()); + } + public int registerRequest(CompletableFuture future) { int callbackId = requestId.incrementAndGet(); responses.put(callbackId, future); @@ -187,10 +206,4 @@ public void run() { } } } - - static { - INSTANCE = new NettyWrapper(); - Runtime.getRuntime() - .addShutdownHook(new Thread(new ShutdownHook(), "NettyWrapper-shutdown-hook")); - } } diff --git a/java/client/src/test/java/javababushka/ClientTest.java b/java/client/src/test/java/javababushka/ClientTest.java new file mode 100644 index 0000000000..4d2bbae98b --- /dev/null +++ b/java/client/src/test/java/javababushka/ClientTest.java @@ -0,0 +1,52 @@ +package javababushka; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; + +import connection_request.ConnectionRequestOuterClass.ConnectionRequest; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Future; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import response.ResponseOuterClass; + +public class ClientTest { + + Client testClient; + + NettyWrapper nettyWrapper; + + private static String HOST = "host"; + private static int PORT = 9999; + + @BeforeEach + public void setUp() { + nettyWrapper = mock(NettyWrapper.class); + testClient = new Client(nettyWrapper); + } + + @Test + public void test_asyncConnectToRedis_success() { + // setup + boolean useSsl = false; + boolean clusterMode = false; + ConnectionRequest connectionRequest = + Client.getConnectionRequest(HOST, PORT, useSsl, clusterMode).build(); + + // exercise + CompletableFuture connectionResponse = + testClient.asyncConnectToRedis(HOST, PORT, useSsl, clusterMode); + + // verify +// assertTrue(connectionResponse instanceof CompletableFuture); + Mockito.verify(nettyWrapper, times(1)) + .registerConnection(eq(connectionResponse)); + Mockito.verify(nettyWrapper, times(1)).writeAndFlush(eq(connectionRequest)); + + // teardown + } +} From 4ecd5d806076f5d1f4ecc68b7a93e9b2b0658ea8 Mon Sep 17 00:00:00 2001 From: Jonathan Louie Date: Wed, 29 Nov 2023 14:45:03 -0800 Subject: [PATCH 68/81] Implement Bulk value case in FFI layer --- java/src/lib.rs | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/java/src/lib.rs b/java/src/lib.rs index 5a57b887b2..e3ffcb7432 100644 --- a/java/src/lib.rs +++ b/java/src/lib.rs @@ -1,14 +1,13 @@ use babushka::start_socket_listener; -use jni::objects::{JClass, JObject, JThrowable}; +use jni::objects::{JClass, JObject, JThrowable, JObjectArray}; use jni::JNIEnv; use jni::sys::jlong; use std::sync::mpsc; use log::error; -use logger_core::Level; use redis::Value; -fn redis_value_to_java(mut env: JNIEnv, val: Value) -> JObject { +fn redis_value_to_java<'local>(env: &mut JNIEnv<'local>, val: Value) -> JObject<'local> { match val { Value::Nil => JObject::null(), Value::Status(str) => JObject::from(env.new_string(str).unwrap()), @@ -22,9 +21,19 @@ fn redis_value_to_java(mut env: JNIEnv, val: Value) -> JObject { JObject::null() }, }, - Value::Bulk(_bulk) => { - let _ = env.throw("Not implemented"); - JObject::null() + Value::Bulk(bulk) => { + // TODO: Consider caching the method ID here in a static variable (might need RwLock to mutate) + let items: JObjectArray = env + .new_object_array(bulk.len() as i32, "java/lang/Object", JObject::null()) + .unwrap(); + + for (i, item) in bulk.into_iter().enumerate() { + let java_value = redis_value_to_java(env, item); + env.set_object_array_element(&items, i as i32, java_value) + .unwrap(); + } + + items.into() } } } @@ -36,12 +45,12 @@ pub extern "system" fn Java_javababushka_BabushkaCoreNativeDefinitions_valueFrom pointer: jlong ) -> JObject<'local> { let value = unsafe { Box::from_raw(pointer as *mut Value) }; - redis_value_to_java(env, *value) + redis_value_to_java(&mut env, *value) } #[no_mangle] pub extern "system" fn Java_javababushka_BabushkaCoreNativeDefinitions_startSocketListenerExternal<'local>( - mut env: JNIEnv<'local>, + env: JNIEnv<'local>, _class: JClass<'local> ) -> JObject<'local> { let (tx, rx) = mpsc::channel::>(); From 2bf997e67f4646e8396455b5396f28b3116f2111 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 29 Nov 2023 16:55:56 -0800 Subject: [PATCH 69/81] More split. Signed-off-by: Yury-Fridlyand --- .../src/main/java/javababushka/Client.java | 50 ++--- .../main/java/javababushka/NettyWrapper.java | 209 ------------------ .../connection/ChannelHandler.java | 22 ++ .../connection/CommonResources.java | 19 ++ .../javababushka/connection/ReadHandler.java | 40 ++++ .../connection/SocketManager.java | 130 +++++++++++ .../javababushka/connection/WriteHandler.java | 17 ++ .../test/java/javababushka/ClientTest.java | 17 +- 8 files changed, 252 insertions(+), 252 deletions(-) delete mode 100644 java/client/src/main/java/javababushka/NettyWrapper.java create mode 100644 java/client/src/main/java/javababushka/connection/ChannelHandler.java create mode 100644 java/client/src/main/java/javababushka/connection/CommonResources.java create mode 100644 java/client/src/main/java/javababushka/connection/ReadHandler.java create mode 100644 java/client/src/main/java/javababushka/connection/SocketManager.java create mode 100644 java/client/src/main/java/javababushka/connection/WriteHandler.java diff --git a/java/client/src/main/java/javababushka/Client.java b/java/client/src/main/java/javababushka/Client.java index 5347c3ddd8..fd24ef6a81 100644 --- a/java/client/src/main/java/javababushka/Client.java +++ b/java/client/src/main/java/javababushka/Client.java @@ -1,6 +1,9 @@ package javababushka; import static connection_request.ConnectionRequestOuterClass.ConnectionRequest; +import static connection_request.ConnectionRequestOuterClass.NodeAddress; +import static connection_request.ConnectionRequestOuterClass.ReadFrom; +import static connection_request.ConnectionRequestOuterClass.TlsMode; import static redis_request.RedisRequestOuterClass.Command; import static redis_request.RedisRequestOuterClass.Command.ArgsArray; import static redis_request.RedisRequestOuterClass.RedisRequest; @@ -13,20 +16,21 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; +import javababushka.connection.SocketManager; import org.apache.commons.lang3.tuple.Pair; public class Client { private static final long DEFAULT_TIMEOUT_MILLISECONDS = 1000; private static final int REQUEST_TIMEOUT_MILLISECONDS = 250; - private NettyWrapper wrapper; + private SocketManager wrapper; public Client() { - this(NettyWrapper.getInstance()); + this(SocketManager.getInstance()); } - public Client(NettyWrapper nettyWrapper) { - wrapper = nettyWrapper; + public Client(SocketManager socketManager) { + wrapper = socketManager; } public void set(String key, String value) { @@ -49,40 +53,20 @@ private synchronized Pair> getNextCallback( return Pair.of(callbackId, future); } - public static ConnectionRequest.Builder getConnectionRequest( + public static ConnectionRequest getConnectionRequest( String host, int port, boolean useSsl, boolean clusterMode) { - ConnectionRequest.Builder connectionRequest = ConnectionRequest.newBuilder(); - connectionRequest.addAddresses( - connection_request.ConnectionRequestOuterClass.NodeAddress.newBuilder() - .setHost(host) - .setPort(port) - .build()); - connectionRequest.setTlsMode( - useSsl - ? connection_request.ConnectionRequestOuterClass.TlsMode.SecureTls - : connection_request.ConnectionRequestOuterClass.TlsMode.NoTls); - connectionRequest.setClusterModeEnabled(clusterMode); - connectionRequest - .setReadFrom(connection_request.ConnectionRequestOuterClass.ReadFrom.Primary) - .setConnectionRetryStrategy( - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.newBuilder() - .setNumberOfRetries(1) - .setFactor(1) - .setExponentBase(1) - .build()) - .setAuthenticationInfo( - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.newBuilder() - .setPassword("") - .setUsername("default") - .build()) - .setDatabaseId(0); - - return connectionRequest; + return ConnectionRequest.newBuilder() + .addAddresses(NodeAddress.newBuilder().setHost(host).setPort(port).build()) + .setTlsMode(useSsl ? TlsMode.SecureTls : TlsMode.NoTls) + .setClusterModeEnabled(clusterMode) + .setReadFrom(ReadFrom.Primary) + .setDatabaseId(0) + .build(); } public CompletableFuture asyncConnectToRedis( String host, int port, boolean useSsl, boolean clusterMode) { - var request = getConnectionRequest(host, port, useSsl, clusterMode).build(); + var request = getConnectionRequest(host, port, useSsl, clusterMode); // connection request has hardcoded callback id = 0 // https://github.com/aws/babushka/issues/600 diff --git a/java/client/src/main/java/javababushka/NettyWrapper.java b/java/client/src/main/java/javababushka/NettyWrapper.java deleted file mode 100644 index 28c8472e16..0000000000 --- a/java/client/src/main/java/javababushka/NettyWrapper.java +++ /dev/null @@ -1,209 +0,0 @@ -package javababushka; - -import static response.ResponseOuterClass.Response; - -import com.google.protobuf.GeneratedMessageV3; -import io.netty.bootstrap.Bootstrap; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import io.netty.buffer.Unpooled; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.channel.ChannelInitializer; -import io.netty.channel.ChannelOption; -import io.netty.channel.ChannelOutboundHandlerAdapter; -import io.netty.channel.ChannelPromise; -import io.netty.channel.EventLoopGroup; -import io.netty.channel.WriteBufferWaterMark; -import io.netty.channel.epoll.EpollDomainSocketChannel; -import io.netty.channel.epoll.EpollEventLoopGroup; -import io.netty.channel.kqueue.KQueue; -import io.netty.channel.kqueue.KQueueDomainSocketChannel; -import io.netty.channel.kqueue.KQueueEventLoopGroup; -import io.netty.channel.unix.DomainSocketAddress; -import io.netty.channel.unix.UnixChannel; -import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; -import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; -import io.netty.handler.logging.LogLevel; -import io.netty.handler.logging.LoggingHandler; -import io.netty.util.concurrent.DefaultThreadFactory; -import java.util.Deque; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedDeque; -import java.util.concurrent.atomic.AtomicInteger; -import lombok.AllArgsConstructor; -import lombok.NonNull; - -@AllArgsConstructor -class NettyWrapper { - private final String unixSocket = getSocket(); - - private static String getSocket() { - try { - return BabushkaCoreNativeDefinitions.startSocketListenerExternal(); - } catch (Exception | UnsatisfiedLinkError e) { - System.err.printf("Failed to get UDS from babushka and dedushka: %s%n%n", e); - throw new RuntimeException(e); - } - } - - // Futures to handle responses. Index is callback id, starting from 1 (0 index is for connection - // request always). - // Is it not a concurrent nor sync collection, but it is synced on adding. No removes. - private final Map> responses = new ConcurrentHashMap<>(); - - private final Deque> connectionRequests = - new ConcurrentLinkedDeque<>(); - - private final AtomicInteger requestId = new AtomicInteger(0); - - // We support MacOS and Linux only, because Babushka does not support Windows, because tokio does - // not support it. - // Probably we should use NIO (NioEventLoopGroup) for Windows. - private static final boolean isMacOs = isMacOs(); - - // TODO support IO-Uring and NIO - private static boolean isMacOs() { - try { - Class.forName("io.netty.channel.kqueue.KQueue"); - return KQueue.isAvailable(); - } catch (ClassNotFoundException e) { - return false; - } - } - - private Channel channel = null; - private EventLoopGroup group = null; - - /** - * Returns the singleton instance of the NettyWrapper - * - * @return NettyWrapper instance - */ - public static NettyWrapper getInstance() { - if (INSTANCE == null) { - INSTANCE = new NettyWrapper(); - Runtime.getRuntime() - .addShutdownHook(new Thread(new ShutdownHook(), "NettyWrapper-shutdown-hook")); - } - return INSTANCE; - } - - private static NettyWrapper INSTANCE = null; - - /** Constructor class for the single instance */ - private NettyWrapper() { - try { - int cpuCount = Runtime.getRuntime().availableProcessors(); - group = - isMacOs - ? new KQueueEventLoopGroup( - cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) - : new EpollEventLoopGroup( - cpuCount, new DefaultThreadFactory("NettyWrapper-epoll-elg", true)); - channel = - new Bootstrap() - .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024, 4096)) - .option(ChannelOption.ALLOCATOR, ByteBufAllocator.DEFAULT) - .group(group) - .channel(isMacOs ? KQueueDomainSocketChannel.class : EpollDomainSocketChannel.class) - .handler( - new ChannelInitializer() { - @Override - public void initChannel(@NonNull UnixChannel ch) throws Exception { - ch.pipeline() - .addLast("logger", new LoggingHandler(LogLevel.DEBUG)) - // https://netty.io/4.1/api/io/netty/handler/codec/protobuf/ProtobufEncoder.html - .addLast("protobufDecoder", new ProtobufVarint32FrameDecoder()) - .addLast("protobufEncoder", new ProtobufVarint32LengthFieldPrepender()) - .addLast( - new ChannelInboundHandlerAdapter() { - @Override - public void channelRead( - @NonNull ChannelHandlerContext ctx, @NonNull Object msg) - throws Exception { - // System.out.printf("=== channelRead %s %s %n", ctx, msg); - var buf = (ByteBuf) msg; - var bytes = new byte[buf.readableBytes()]; - buf.readBytes(bytes); - // TODO surround parsing with try-catch, set error to future if - // parsing failed. - var response = Response.parseFrom(bytes); - int callbackId = response.getCallbackIdx(); - // System.out.printf("== Received response with callback %d%n", - if (callbackId == 0) { - // can't distinguish connection requests since they have no - // callback ID - // https://github.com/aws/babushka/issues/600 - connectionRequests.pop().complete(response); - } else { - responses.get(callbackId).complete(response); - responses.remove(callbackId); - } - buf.release(); - } - - @Override - public void exceptionCaught( - ChannelHandlerContext ctx, Throwable cause) throws Exception { - System.out.printf("=== exceptionCaught %s %s %n", ctx, cause); - cause.printStackTrace(System.err); - super.exceptionCaught(ctx, cause); - } - }) - .addLast( - new ChannelOutboundHandlerAdapter() { - @Override - public void write( - ChannelHandlerContext ctx, Object msg, ChannelPromise promise) - throws Exception { - // System.out.printf("=== write %s %s %s %n", ctx, msg, promise); - var bytes = (byte[]) msg; - - super.write(ctx, Unpooled.copiedBuffer(bytes), promise); - } - }); - } - }) - .connect(new DomainSocketAddress(unixSocket)) - .sync() - .channel(); - - } catch (Exception e) { - System.err.printf( - "Failed to create a channel %s: %s%n", e.getClass().getSimpleName(), e.getMessage()); - e.printStackTrace(System.err); - } - } - - public void writeAndFlush(GeneratedMessageV3 message) { - channel.writeAndFlush(message.toByteArray()); - } - - public int registerRequest(CompletableFuture future) { - int callbackId = requestId.incrementAndGet(); - responses.put(callbackId, future); - return callbackId; - } - - public void registerConnection(CompletableFuture future) { - connectionRequests.add(future); - } - - public void close() { - channel.close(); - group.shutdownGracefully(); - } - - private static class ShutdownHook implements Runnable { - @Override - public void run() { - if (INSTANCE != null) { - INSTANCE.close(); - } - } - } -} diff --git a/java/client/src/main/java/javababushka/connection/ChannelHandler.java b/java/client/src/main/java/javababushka/connection/ChannelHandler.java new file mode 100644 index 0000000000..1c4bc308a1 --- /dev/null +++ b/java/client/src/main/java/javababushka/connection/ChannelHandler.java @@ -0,0 +1,22 @@ +package javababushka.connection; + +import io.netty.channel.ChannelInitializer; +import io.netty.channel.unix.UnixChannel; +import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; +import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; +import io.netty.handler.logging.LogLevel; +import io.netty.handler.logging.LoggingHandler; +import lombok.NonNull; + +public class ChannelHandler extends ChannelInitializer { + @Override + public void initChannel(@NonNull UnixChannel ch) throws Exception { + ch.pipeline() + .addLast("logger", new LoggingHandler(LogLevel.DEBUG)) + // https://netty.io/4.1/api/io/netty/handler/codec/protobuf/ProtobufEncoder.html + .addLast("protobufDecoder", new ProtobufVarint32FrameDecoder()) + .addLast("protobufEncoder", new ProtobufVarint32LengthFieldPrepender()) + .addLast(new ReadHandler()) + .addLast(new WriteHandler()); + } +} diff --git a/java/client/src/main/java/javababushka/connection/CommonResources.java b/java/client/src/main/java/javababushka/connection/CommonResources.java new file mode 100644 index 0000000000..23f6244be7 --- /dev/null +++ b/java/client/src/main/java/javababushka/connection/CommonResources.java @@ -0,0 +1,19 @@ +package javababushka.connection; + +import java.util.Deque; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedDeque; +import response.ResponseOuterClass; + +public class CommonResources { + // Futures to handle responses. Index is callback id, starting from 1 (0 index is for connection + // request always). + // Is it not a concurrent nor sync collection, but it is synced on adding. No removes. + public static final Map> responses = + new ConcurrentHashMap<>(); + + public static final Deque> connectionRequests = + new ConcurrentLinkedDeque<>(); +} diff --git a/java/client/src/main/java/javababushka/connection/ReadHandler.java b/java/client/src/main/java/javababushka/connection/ReadHandler.java new file mode 100644 index 0000000000..d192bcf5cb --- /dev/null +++ b/java/client/src/main/java/javababushka/connection/ReadHandler.java @@ -0,0 +1,40 @@ +package javababushka.connection; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import lombok.NonNull; +import response.ResponseOuterClass; + +public class ReadHandler extends ChannelInboundHandlerAdapter { + @Override + public void channelRead(@NonNull ChannelHandlerContext ctx, @NonNull Object msg) + throws Exception { + // System.out.printf("=== channelRead %s %s %n", ctx, msg); + var buf = (ByteBuf) msg; + var bytes = new byte[buf.readableBytes()]; + buf.readBytes(bytes); + // TODO surround parsing with try-catch, set error to future if + // parsing failed. + var response = ResponseOuterClass.Response.parseFrom(bytes); + int callbackId = response.getCallbackIdx(); + // System.out.printf("== Received response with callback %d%n", + if (callbackId == 0) { + // can't distinguish connection requests since they have no + // callback ID + // https://github.com/aws/babushka/issues/600 + CommonResources.connectionRequests.pop().complete(response); + } else { + CommonResources.responses.get(callbackId).complete(response); + CommonResources.responses.remove(callbackId); + } + buf.release(); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + System.out.printf("=== exceptionCaught %s %s %n", ctx, cause); + cause.printStackTrace(System.err); + super.exceptionCaught(ctx, cause); + } +} diff --git a/java/client/src/main/java/javababushka/connection/SocketManager.java b/java/client/src/main/java/javababushka/connection/SocketManager.java new file mode 100644 index 0000000000..d69b5af484 --- /dev/null +++ b/java/client/src/main/java/javababushka/connection/SocketManager.java @@ -0,0 +1,130 @@ +package javababushka.connection; + +import static response.ResponseOuterClass.Response; + +import com.google.protobuf.GeneratedMessageV3; +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.Channel; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.WriteBufferWaterMark; +import io.netty.channel.epoll.EpollDomainSocketChannel; +import io.netty.channel.epoll.EpollEventLoopGroup; +import io.netty.channel.kqueue.KQueue; +import io.netty.channel.kqueue.KQueueDomainSocketChannel; +import io.netty.channel.kqueue.KQueueEventLoopGroup; +import io.netty.channel.unix.DomainSocketAddress; +import io.netty.util.concurrent.DefaultThreadFactory; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.atomic.AtomicInteger; +import javababushka.BabushkaCoreNativeDefinitions; + +public class SocketManager { + private final String unixSocket = getSocket(); + + private static String getSocket() { + try { + return BabushkaCoreNativeDefinitions.startSocketListenerExternal(); + } catch (Exception | UnsatisfiedLinkError e) { + System.err.printf("Failed to get UDS from babushka and dedushka: %s%n%n", e); + throw new RuntimeException(e); + } + } + + private final AtomicInteger requestId = new AtomicInteger(0); + + // We support MacOS and Linux only, because Babushka does not support Windows, because tokio does + // not support it. + // Probably we should use NIO (NioEventLoopGroup) for Windows. + private static final boolean isMacOs = isMacOs(); + + // TODO support IO-Uring and NIO + private static boolean isMacOs() { + try { + Class.forName("io.netty.channel.kqueue.KQueue"); + return KQueue.isAvailable(); + } catch (ClassNotFoundException e) { + return false; + } + } + + private Channel channel = null; + private EventLoopGroup group = null; + + /** + * Returns the singleton instance of the NettyWrapper + * + * @return NettyWrapper instance + */ + public static synchronized SocketManager getInstance() { + if (INSTANCE == null) { + INSTANCE = new SocketManager(); + Runtime.getRuntime() + .addShutdownHook(new Thread(new ShutdownHook(), "NettyWrapper-shutdown-hook")); + } + return INSTANCE; + } + + private static SocketManager INSTANCE = null; + + /** Constructor class for the single instance */ + private SocketManager() { + try { + int cpuCount = Runtime.getRuntime().availableProcessors(); + group = + isMacOs + ? new KQueueEventLoopGroup( + cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) + : new EpollEventLoopGroup( + cpuCount, new DefaultThreadFactory("NettyWrapper-epoll-elg", true)); + channel = + new Bootstrap() + .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024, 4096)) + .option(ChannelOption.ALLOCATOR, ByteBufAllocator.DEFAULT) + .group(group) + .channel(isMacOs ? KQueueDomainSocketChannel.class : EpollDomainSocketChannel.class) + .handler(new ChannelHandler()) + .connect(new DomainSocketAddress(unixSocket)) + .sync() + .channel(); + + } catch (Exception e) { + System.err.printf( + "Failed to create a channel %s: %s%n", e.getClass().getSimpleName(), e.getMessage()); + e.printStackTrace(System.err); + } + } + + public void write(GeneratedMessageV3 message) { + channel.write(message.toByteArray()); + } + + public void writeAndFlush(GeneratedMessageV3 message) { + channel.writeAndFlush(message.toByteArray()); + } + + public int registerRequest(CompletableFuture future) { + int callbackId = requestId.incrementAndGet(); + CommonResources.responses.put(callbackId, future); + return callbackId; + } + + public void registerConnection(CompletableFuture future) { + CommonResources.connectionRequests.add(future); + } + + public void close() { + channel.close(); + group.shutdownGracefully(); + } + + private static class ShutdownHook implements Runnable { + @Override + public void run() { + if (INSTANCE != null) { + INSTANCE.close(); + } + } + } +} diff --git a/java/client/src/main/java/javababushka/connection/WriteHandler.java b/java/client/src/main/java/javababushka/connection/WriteHandler.java new file mode 100644 index 0000000000..db233d9cce --- /dev/null +++ b/java/client/src/main/java/javababushka/connection/WriteHandler.java @@ -0,0 +1,17 @@ +package javababushka.connection; + +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.ChannelPromise; + +public class WriteHandler extends ChannelOutboundHandlerAdapter { + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) + throws Exception { + // System.out.printf("=== write %s %s %s %n", ctx, msg, promise); + var bytes = (byte[]) msg; + + super.write(ctx, Unpooled.copiedBuffer(bytes), promise); + } +} diff --git a/java/client/src/test/java/javababushka/ClientTest.java b/java/client/src/test/java/javababushka/ClientTest.java index 4d2bbae98b..dc9cf1bfc6 100644 --- a/java/client/src/test/java/javababushka/ClientTest.java +++ b/java/client/src/test/java/javababushka/ClientTest.java @@ -1,14 +1,12 @@ package javababushka; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import connection_request.ConnectionRequestOuterClass.ConnectionRequest; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Future; +import javababushka.connection.SocketManager; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -18,15 +16,15 @@ public class ClientTest { Client testClient; - NettyWrapper nettyWrapper; + SocketManager socketManager; private static String HOST = "host"; private static int PORT = 9999; @BeforeEach public void setUp() { - nettyWrapper = mock(NettyWrapper.class); - testClient = new Client(nettyWrapper); + socketManager = mock(SocketManager.class); + testClient = new Client(socketManager); } @Test @@ -42,10 +40,9 @@ public void test_asyncConnectToRedis_success() { testClient.asyncConnectToRedis(HOST, PORT, useSsl, clusterMode); // verify -// assertTrue(connectionResponse instanceof CompletableFuture); - Mockito.verify(nettyWrapper, times(1)) - .registerConnection(eq(connectionResponse)); - Mockito.verify(nettyWrapper, times(1)).writeAndFlush(eq(connectionRequest)); + // assertTrue(connectionResponse instanceof CompletableFuture); + Mockito.verify(socketManager, times(1)).registerConnection(eq(connectionResponse)); + Mockito.verify(socketManager, times(1)).writeAndFlush(eq(connectionRequest)); // teardown } From 1aa07072d03e755d401da66a7daa90a18237d7ba Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 29 Nov 2023 17:02:33 -0800 Subject: [PATCH 70/81] Renaming Signed-off-by: Yury-Fridlyand --- java/.cargo/config.toml | 2 +- java/.gitignore | 4 +-- java/Cargo.toml | 4 +-- java/README.md | 6 ++-- java/benchmarks/build.gradle | 2 +- .../benchmarks/BenchmarkingApp.java | 34 +++++++++---------- .../benchmarks/clients/AsyncClient.java | 5 +-- .../benchmarks/clients/Client.java | 4 +-- .../benchmarks/clients/SyncClient.java | 2 +- .../clients/babushka/JniNettyClient.java | 11 +++--- .../benchmarks/clients/jedis/JedisClient.java | 6 ++-- .../clients/jedis/JedisPseudoAsyncClient.java | 7 ++-- .../clients/lettuce/LettuceAsyncClient.java | 6 ++-- .../lettuce/LettuceAsyncClusterClient.java | 4 +-- .../clients/lettuce/LettuceClient.java | 6 ++-- .../benchmarks/utils/Benchmarking.java | 10 +++--- .../benchmarks/utils/ChosenAction.java | 2 +- .../benchmarks/utils/ConnectionSettings.java | 2 +- .../benchmarks/utils/JsonWriter.java | 2 +- .../benchmarks/utils/LatencyResults.java | 2 +- .../benchmarks/jedis/JedisClientIT.java | 11 +++--- .../lettuce/LettuceAsyncClientIT.java | 7 ++-- .../benchmarks/lettuce/LettuceClientIT.java | 11 +++--- java/client/build.gradle | 6 ++-- .../BabushkaCoreNativeDefinitions.java | 4 +-- .../{javababushka => babushka}/Client.java | 4 +-- .../connection/ChannelHandler.java | 2 +- .../connection/CommonResources.java | 2 +- .../connection/ReadHandler.java | 2 +- .../connection/SocketManager.java | 4 +-- .../connection/WriteHandler.java | 2 +- .../ClientTest.java | 4 +-- java/settings.gradle | 2 +- java/src/lib.rs | 4 +-- 34 files changed, 90 insertions(+), 96 deletions(-) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/BenchmarkingApp.java (88%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/clients/AsyncClient.java (87%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/clients/Client.java (67%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/clients/SyncClient.java (79%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/clients/babushka/JniNettyClient.java (85%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/clients/jedis/JedisClient.java (89%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/clients/jedis/JedisPseudoAsyncClient.java (84%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/clients/lettuce/LettuceAsyncClient.java (93%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/clients/lettuce/LettuceAsyncClusterClient.java (93%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/clients/lettuce/LettuceClient.java (88%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/utils/Benchmarking.java (98%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/utils/ChosenAction.java (64%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/utils/ConnectionSettings.java (86%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/utils/JsonWriter.java (99%) rename java/benchmarks/src/main/java/{javababushka => babushka}/benchmarks/utils/LatencyResults.java (89%) rename java/benchmarks/src/test/java/{javababushka => babushka}/benchmarks/jedis/JedisClientIT.java (86%) rename java/benchmarks/src/test/java/{javababushka => babushka}/benchmarks/lettuce/LettuceAsyncClientIT.java (91%) rename java/benchmarks/src/test/java/{javababushka => babushka}/benchmarks/lettuce/LettuceClientIT.java (77%) rename java/client/src/main/java/{javababushka => babushka}/BabushkaCoreNativeDefinitions.java (76%) rename java/client/src/main/java/{javababushka => babushka}/Client.java (98%) rename java/client/src/main/java/{javababushka => babushka}/connection/ChannelHandler.java (96%) rename java/client/src/main/java/{javababushka => babushka}/connection/CommonResources.java (95%) rename java/client/src/main/java/{javababushka => babushka}/connection/ReadHandler.java (97%) rename java/client/src/main/java/{javababushka => babushka}/connection/SocketManager.java (98%) rename java/client/src/main/java/{javababushka => babushka}/connection/WriteHandler.java (94%) rename java/client/src/test/java/{javababushka => babushka}/ClientTest.java (95%) diff --git a/java/.cargo/config.toml b/java/.cargo/config.toml index 12fc36fc94..b569c07483 100644 --- a/java/.cargo/config.toml +++ b/java/.cargo/config.toml @@ -1,3 +1,3 @@ [env] -BABUSHKA_NAME = { value = "javababushka", force = true } +BABUSHKA_NAME = { value = "babushka", force = true } BABUSHKA_VERSION = "0.1.0" diff --git a/java/.gitignore b/java/.gitignore index 8f60484e5a..a7b8d6a177 100644 --- a/java/.gitignore +++ b/java/.gitignore @@ -4,5 +4,5 @@ # Ignore Gradle build output directory build -# Ignore generated files (e.g. protobuf) -generated +# Ignore protobuf generated files +protobuf diff --git a/java/Cargo.toml b/java/Cargo.toml index 4e9ac83ef1..313c33807b 100644 --- a/java/Cargo.toml +++ b/java/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "javababushka" +name = "babushka" version = "0.1.0" edition = "2021" license = "Apache-2.0" @@ -7,7 +7,7 @@ authors = ["Amazon Web Services"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [lib] -name = "javababushka" +name = "babushka" crate-type = ["cdylib"] [dependencies] diff --git a/java/README.md b/java/README.md index 6fb456a9b4..415814634f 100644 --- a/java/README.md +++ b/java/README.md @@ -6,11 +6,11 @@ language api to enhance performance and limit cpu cycles at scale. ## Organization -The Java client (javababushka) contains the following parts: +The Java client contains the following parts: 1. A Java client (lib folder): wrapper to rust-client. -2. An examples script: to sanity test javababushka and similar java-clients against a redis host. -3. A benchmark app: to performance benchmark test javababushka and similar java-clients against a redis host. +2. An examples script: to sanity test babushka and similar java-clients against a redis host. +3. A benchmark app: to performance benchmark test babushka and similar java-clients against a redis host. ## Building diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle index 6ade7532b0..f6f56c94d7 100644 --- a/java/benchmarks/build.gradle +++ b/java/benchmarks/build.gradle @@ -36,7 +36,7 @@ java { application { // Define the main class for the application. - mainClass = 'javababushka.benchmarks.BenchmarkingApp' + mainClass = 'babushka.benchmarks.BenchmarkingApp' applicationDefaultJvmArgs += "-Djava.library.path=${projectDir}/../target/release:${projectDir}/../target/debug" } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/babushka/benchmarks/BenchmarkingApp.java similarity index 88% rename from java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java rename to java/benchmarks/src/main/java/babushka/benchmarks/BenchmarkingApp.java index b401488584..f5d7ccaac1 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/BenchmarkingApp.java @@ -1,16 +1,16 @@ -package javababushka.benchmarks; - -import static javababushka.benchmarks.utils.Benchmarking.testClientSetGet; +package babushka.benchmarks; import java.util.Arrays; import java.util.Optional; import java.util.stream.Stream; -import javababushka.benchmarks.clients.babushka.JniNettyClient; -import javababushka.benchmarks.clients.jedis.JedisClient; -import javababushka.benchmarks.clients.jedis.JedisPseudoAsyncClient; -import javababushka.benchmarks.clients.lettuce.LettuceAsyncClient; -import javababushka.benchmarks.clients.lettuce.LettuceAsyncClusterClient; -import javababushka.benchmarks.clients.lettuce.LettuceClient; + +import babushka.benchmarks.clients.jedis.JedisClient; +import babushka.benchmarks.clients.jedis.JedisPseudoAsyncClient; +import babushka.benchmarks.clients.lettuce.LettuceAsyncClient; +import babushka.benchmarks.clients.lettuce.LettuceAsyncClusterClient; +import babushka.benchmarks.clients.lettuce.LettuceClient; +import babushka.benchmarks.utils.Benchmarking; +import babushka.benchmarks.clients.babushka.JniNettyClient; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; @@ -36,7 +36,7 @@ public static void main(String[] args) { // generate the help statement if (line.hasOption("help")) { HelpFormatter formatter = new HelpFormatter(); - formatter.printHelp("javababushka", options); + formatter.printHelp("babushka", options); return; } @@ -50,27 +50,27 @@ public static void main(String[] args) { switch (client) { case JEDIS: // run testClientSetGet on JEDIS sync client - testClientSetGet(JedisClient::new, runConfiguration, false); + Benchmarking.testClientSetGet(JedisClient::new, runConfiguration, false); break; case JEDIS_ASYNC: // run testClientSetGet on JEDIS pseudo-async client - testClientSetGet(JedisPseudoAsyncClient::new, runConfiguration, true); + Benchmarking.testClientSetGet(JedisPseudoAsyncClient::new, runConfiguration, true); break; case LETTUCE: - testClientSetGet(LettuceClient::new, runConfiguration, false); + Benchmarking.testClientSetGet(LettuceClient::new, runConfiguration, false); break; case LETTUCE_ASYNC: if (runConfiguration.clusterModeEnabled) { - testClientSetGet(LettuceAsyncClusterClient::new, runConfiguration, true); + Benchmarking.testClientSetGet(LettuceAsyncClusterClient::new, runConfiguration, true); } else { - testClientSetGet(LettuceAsyncClient::new, runConfiguration, true); + Benchmarking.testClientSetGet(LettuceAsyncClient::new, runConfiguration, true); } break; case BABUSHKA: - testClientSetGet(() -> new JniNettyClient(false), runConfiguration, false); + Benchmarking.testClientSetGet(() -> new JniNettyClient(false), runConfiguration, false); break; case BABUSHKA_ASYNC: - testClientSetGet(() -> new JniNettyClient(true), runConfiguration, true); + Benchmarking.testClientSetGet(() -> new JniNettyClient(true), runConfiguration, true); break; } } diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/AsyncClient.java similarity index 87% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java rename to java/benchmarks/src/main/java/babushka/benchmarks/clients/AsyncClient.java index deae2ceee5..2cf1b562f5 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/AsyncClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/AsyncClient.java @@ -1,8 +1,9 @@ -package javababushka.benchmarks.clients; +package babushka.benchmarks.clients; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import javababushka.benchmarks.utils.ConnectionSettings; + +import babushka.benchmarks.utils.ConnectionSettings; /** A Redis client with async capabilities */ public interface AsyncClient extends Client { diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/Client.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/Client.java similarity index 67% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/Client.java rename to java/benchmarks/src/main/java/babushka/benchmarks/clients/Client.java index d95f31f25d..d89e7a64b3 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/Client.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/Client.java @@ -1,6 +1,6 @@ -package javababushka.benchmarks.clients; +package babushka.benchmarks.clients; -import javababushka.benchmarks.utils.ConnectionSettings; +import babushka.benchmarks.utils.ConnectionSettings; /** A Redis client interface */ public interface Client { diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/SyncClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/SyncClient.java similarity index 79% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/SyncClient.java rename to java/benchmarks/src/main/java/babushka/benchmarks/clients/SyncClient.java index 603f91e936..c2e0563f76 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/SyncClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/SyncClient.java @@ -1,4 +1,4 @@ -package javababushka.benchmarks.clients; +package babushka.benchmarks.clients; /** A Redis client with sync capabilities */ public interface SyncClient extends Client { diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java similarity index 85% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java rename to java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java index 61a807acfd..98e3c61fc9 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java @@ -1,12 +1,13 @@ -package javababushka.benchmarks.clients.babushka; +package babushka.benchmarks.clients.babushka; import static response.ResponseOuterClass.Response; +import babushka.Client; import java.util.concurrent.Future; -import javababushka.Client; -import javababushka.benchmarks.clients.AsyncClient; -import javababushka.benchmarks.clients.SyncClient; -import javababushka.benchmarks.utils.ConnectionSettings; + +import babushka.benchmarks.clients.AsyncClient; +import babushka.benchmarks.clients.SyncClient; +import babushka.benchmarks.utils.ConnectionSettings; public class JniNettyClient implements SyncClient, AsyncClient { diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisClient.java similarity index 89% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisClient.java rename to java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisClient.java index f088d5ac07..8896ad96aa 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisClient.java @@ -1,7 +1,7 @@ -package javababushka.benchmarks.clients.jedis; +package babushka.benchmarks.clients.jedis; -import javababushka.benchmarks.clients.SyncClient; -import javababushka.benchmarks.utils.ConnectionSettings; +import babushka.benchmarks.utils.ConnectionSettings; +import babushka.benchmarks.clients.SyncClient; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java similarity index 84% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java rename to java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java index 3970826a33..ca261a9d4b 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java @@ -1,9 +1,10 @@ -package javababushka.benchmarks.clients.jedis; +package babushka.benchmarks.clients.jedis; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; -import javababushka.benchmarks.clients.AsyncClient; -import javababushka.benchmarks.utils.ConnectionSettings; + +import babushka.benchmarks.utils.ConnectionSettings; +import babushka.benchmarks.clients.AsyncClient; /** * A Jedis client with pseudo-async capabilities. Jedis doesn't provide async API diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClient.java similarity index 93% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java rename to java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClient.java index ded154b3c5..251fc4eec1 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClient.java @@ -1,5 +1,6 @@ -package javababushka.benchmarks.clients.lettuce; +package babushka.benchmarks.clients.lettuce; +import babushka.benchmarks.utils.ConnectionSettings; import io.lettuce.core.RedisClient; import io.lettuce.core.RedisFuture; import io.lettuce.core.RedisURI; @@ -7,8 +8,7 @@ import io.lettuce.core.api.async.RedisAsyncCommands; import io.lettuce.core.codec.StringCodec; import java.util.concurrent.Future; -import javababushka.benchmarks.clients.AsyncClient; -import javababushka.benchmarks.utils.ConnectionSettings; +import babushka.benchmarks.clients.AsyncClient; /** A Lettuce client with async capabilities see: https://lettuce.io/ */ public class LettuceAsyncClient implements AsyncClient { diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClusterClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClusterClient.java similarity index 93% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClusterClient.java rename to java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClusterClient.java index 6e5ed09ce3..e76a6e7313 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceAsyncClusterClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClusterClient.java @@ -1,14 +1,14 @@ /* * This Java source file was generated by the Gradle 'init' task. */ -package javababushka.benchmarks.clients.lettuce; +package babushka.benchmarks.clients.lettuce; import io.lettuce.core.RedisFuture; import io.lettuce.core.RedisURI; import io.lettuce.core.cluster.RedisClusterClient; import io.lettuce.core.cluster.api.StatefulRedisClusterConnection; import io.lettuce.core.cluster.api.async.RedisAdvancedClusterAsyncCommands; -import javababushka.benchmarks.utils.ConnectionSettings; +import babushka.benchmarks.utils.ConnectionSettings; public class LettuceAsyncClusterClient extends LettuceAsyncClient { diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceClient.java similarity index 88% rename from java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceClient.java rename to java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceClient.java index 87d7bc9d2e..3496b98cc9 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/clients/lettuce/LettuceClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceClient.java @@ -1,10 +1,10 @@ -package javababushka.benchmarks.clients.lettuce; +package babushka.benchmarks.clients.lettuce; +import babushka.benchmarks.utils.ConnectionSettings; import io.lettuce.core.RedisClient; import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.sync.RedisStringCommands; -import javababushka.benchmarks.clients.SyncClient; -import javababushka.benchmarks.utils.ConnectionSettings; +import babushka.benchmarks.clients.SyncClient; /** A Lettuce client with sync capabilities see: https://lettuce.io/ */ public class LettuceClient implements SyncClient { diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/babushka/benchmarks/utils/Benchmarking.java similarity index 98% rename from java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java rename to java/benchmarks/src/main/java/babushka/benchmarks/utils/Benchmarking.java index e5b8fe4c7a..c6725fad68 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/utils/Benchmarking.java @@ -1,4 +1,4 @@ -package javababushka.benchmarks.utils; +package babushka.benchmarks.utils; import java.util.ArrayList; import java.util.Collections; @@ -11,10 +11,10 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; -import javababushka.benchmarks.BenchmarkingApp; -import javababushka.benchmarks.clients.AsyncClient; -import javababushka.benchmarks.clients.Client; -import javababushka.benchmarks.clients.SyncClient; +import babushka.benchmarks.BenchmarkingApp; +import babushka.benchmarks.clients.AsyncClient; +import babushka.benchmarks.clients.Client; +import babushka.benchmarks.clients.SyncClient; import org.apache.commons.lang3.tuple.Pair; /** Class to calculate latency on client-actions */ diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java b/java/benchmarks/src/main/java/babushka/benchmarks/utils/ChosenAction.java similarity index 64% rename from java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java rename to java/benchmarks/src/main/java/babushka/benchmarks/utils/ChosenAction.java index bd9f01fd90..42eceabd8d 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ChosenAction.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/utils/ChosenAction.java @@ -1,4 +1,4 @@ -package javababushka.benchmarks.utils; +package babushka.benchmarks.utils; public enum ChosenAction { GET_NON_EXISTING, diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java b/java/benchmarks/src/main/java/babushka/benchmarks/utils/ConnectionSettings.java similarity index 86% rename from java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java rename to java/benchmarks/src/main/java/babushka/benchmarks/utils/ConnectionSettings.java index 91c11c76a8..8645d36450 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/ConnectionSettings.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/utils/ConnectionSettings.java @@ -1,4 +1,4 @@ -package javababushka.benchmarks.utils; +package babushka.benchmarks.utils; import lombok.AllArgsConstructor; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/JsonWriter.java b/java/benchmarks/src/main/java/babushka/benchmarks/utils/JsonWriter.java similarity index 99% rename from java/benchmarks/src/main/java/javababushka/benchmarks/utils/JsonWriter.java rename to java/benchmarks/src/main/java/babushka/benchmarks/utils/JsonWriter.java index 24e658f56b..f809ff03b5 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/JsonWriter.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/utils/JsonWriter.java @@ -1,4 +1,4 @@ -package javababushka.benchmarks.utils; +package babushka.benchmarks.utils; import com.google.gson.Gson; import com.google.gson.GsonBuilder; diff --git a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java b/java/benchmarks/src/main/java/babushka/benchmarks/utils/LatencyResults.java similarity index 89% rename from java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java rename to java/benchmarks/src/main/java/babushka/benchmarks/utils/LatencyResults.java index 5d25d72a67..a0a3d0ddc9 100644 --- a/java/benchmarks/src/main/java/javababushka/benchmarks/utils/LatencyResults.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/utils/LatencyResults.java @@ -1,4 +1,4 @@ -package javababushka.benchmarks.utils; +package babushka.benchmarks.utils; import lombok.AllArgsConstructor; diff --git a/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java b/java/benchmarks/src/test/java/babushka/benchmarks/jedis/JedisClientIT.java similarity index 86% rename from java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java rename to java/benchmarks/src/test/java/babushka/benchmarks/jedis/JedisClientIT.java index 9a6dbbe93e..bcc0e23264 100644 --- a/java/benchmarks/src/test/java/javababushka/benchmarks/jedis/JedisClientIT.java +++ b/java/benchmarks/src/test/java/babushka/benchmarks/jedis/JedisClientIT.java @@ -1,7 +1,4 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javababushka.benchmarks.jedis; +package babushka.benchmarks.jedis; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -9,9 +6,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javababushka.benchmarks.clients.jedis.JedisClient; -import javababushka.benchmarks.utils.Benchmarking; -import javababushka.benchmarks.utils.ChosenAction; +import babushka.benchmarks.clients.jedis.JedisClient; +import babushka.benchmarks.utils.Benchmarking; +import babushka.benchmarks.utils.ChosenAction; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceAsyncClientIT.java b/java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceAsyncClientIT.java similarity index 91% rename from java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceAsyncClientIT.java rename to java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceAsyncClientIT.java index 92f81df2da..d1fae78c78 100644 --- a/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceAsyncClientIT.java +++ b/java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceAsyncClientIT.java @@ -1,13 +1,10 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javababushka.benchmarks.lettuce; +package babushka.benchmarks.lettuce; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; import io.lettuce.core.RedisFuture; -import javababushka.benchmarks.clients.lettuce.LettuceAsyncClient; +import babushka.benchmarks.clients.lettuce.LettuceAsyncClient; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceClientIT.java b/java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceClientIT.java similarity index 77% rename from java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceClientIT.java rename to java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceClientIT.java index e9670e8dbb..b33e74e634 100644 --- a/java/benchmarks/src/test/java/javababushka/benchmarks/lettuce/LettuceClientIT.java +++ b/java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceClientIT.java @@ -1,12 +1,9 @@ -/* - * This Java source file was generated by the Gradle 'init' task. - */ -package javababushka.benchmarks.lettuce; +package babushka.benchmarks.lettuce; import java.util.HashMap; -import javababushka.benchmarks.clients.lettuce.LettuceClient; -import javababushka.benchmarks.utils.Benchmarking; -import javababushka.benchmarks.utils.ChosenAction; +import babushka.benchmarks.clients.lettuce.LettuceClient; +import babushka.benchmarks.utils.Benchmarking; +import babushka.benchmarks.utils.ChosenAction; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/java/client/build.gradle b/java/client/build.gradle index 8da0aecdc2..e6a9062733 100644 --- a/java/client/build.gradle +++ b/java/client/build.gradle @@ -32,11 +32,11 @@ dependencies { tasks.register('protobuf', Exec) { doFirst { - project.mkdir(Paths.get(project.projectDir.path, 'src/main/java/javababushka/generated').toString()) + project.mkdir(Paths.get(project.projectDir.path, 'src/main/java/babushka/protobuf').toString()) } commandLine 'protoc', '-Iprotobuf=babushka-core/src/protobuf/', - '--java_out=java/client/src/main/java/javababushka/generated', + '--java_out=java/client/src/main/java/babushka/protobuf', 'babushka-core/src/protobuf/connection_request.proto', 'babushka-core/src/protobuf/redis_request.proto', 'babushka-core/src/protobuf/response.proto' @@ -45,7 +45,7 @@ tasks.register('protobuf', Exec) { tasks.register('cleanProtobuf') { doFirst { - project.delete(Paths.get(project.projectDir.path, 'src/main/java/javababushka/generated').toString()) + project.delete(Paths.get(project.projectDir.path, 'src/main/java/babushka/protobuf').toString()) } } diff --git a/java/client/src/main/java/javababushka/BabushkaCoreNativeDefinitions.java b/java/client/src/main/java/babushka/BabushkaCoreNativeDefinitions.java similarity index 76% rename from java/client/src/main/java/javababushka/BabushkaCoreNativeDefinitions.java rename to java/client/src/main/java/babushka/BabushkaCoreNativeDefinitions.java index 3f26ebef91..aaa7f383c2 100644 --- a/java/client/src/main/java/javababushka/BabushkaCoreNativeDefinitions.java +++ b/java/client/src/main/java/babushka/BabushkaCoreNativeDefinitions.java @@ -1,4 +1,4 @@ -package javababushka; +package babushka; public class BabushkaCoreNativeDefinitions { public static native String startSocketListenerExternal() throws Exception; @@ -6,6 +6,6 @@ public class BabushkaCoreNativeDefinitions { public static native Object valueFromPointer(long pointer); static { - System.loadLibrary("javababushka"); + System.loadLibrary("babushka"); } } diff --git a/java/client/src/main/java/javababushka/Client.java b/java/client/src/main/java/babushka/Client.java similarity index 98% rename from java/client/src/main/java/javababushka/Client.java rename to java/client/src/main/java/babushka/Client.java index fd24ef6a81..d4e1c34877 100644 --- a/java/client/src/main/java/javababushka/Client.java +++ b/java/client/src/main/java/babushka/Client.java @@ -1,4 +1,4 @@ -package javababushka; +package babushka; import static connection_request.ConnectionRequestOuterClass.ConnectionRequest; import static connection_request.ConnectionRequestOuterClass.NodeAddress; @@ -12,11 +12,11 @@ import static redis_request.RedisRequestOuterClass.SimpleRoutes; import static response.ResponseOuterClass.Response; +import babushka.connection.SocketManager; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import javababushka.connection.SocketManager; import org.apache.commons.lang3.tuple.Pair; public class Client { diff --git a/java/client/src/main/java/javababushka/connection/ChannelHandler.java b/java/client/src/main/java/babushka/connection/ChannelHandler.java similarity index 96% rename from java/client/src/main/java/javababushka/connection/ChannelHandler.java rename to java/client/src/main/java/babushka/connection/ChannelHandler.java index 1c4bc308a1..6be4048f95 100644 --- a/java/client/src/main/java/javababushka/connection/ChannelHandler.java +++ b/java/client/src/main/java/babushka/connection/ChannelHandler.java @@ -1,4 +1,4 @@ -package javababushka.connection; +package babushka.connection; import io.netty.channel.ChannelInitializer; import io.netty.channel.unix.UnixChannel; diff --git a/java/client/src/main/java/javababushka/connection/CommonResources.java b/java/client/src/main/java/babushka/connection/CommonResources.java similarity index 95% rename from java/client/src/main/java/javababushka/connection/CommonResources.java rename to java/client/src/main/java/babushka/connection/CommonResources.java index 23f6244be7..962087e166 100644 --- a/java/client/src/main/java/javababushka/connection/CommonResources.java +++ b/java/client/src/main/java/babushka/connection/CommonResources.java @@ -1,4 +1,4 @@ -package javababushka.connection; +package babushka.connection; import java.util.Deque; import java.util.Map; diff --git a/java/client/src/main/java/javababushka/connection/ReadHandler.java b/java/client/src/main/java/babushka/connection/ReadHandler.java similarity index 97% rename from java/client/src/main/java/javababushka/connection/ReadHandler.java rename to java/client/src/main/java/babushka/connection/ReadHandler.java index d192bcf5cb..58e2bec0a5 100644 --- a/java/client/src/main/java/javababushka/connection/ReadHandler.java +++ b/java/client/src/main/java/babushka/connection/ReadHandler.java @@ -1,4 +1,4 @@ -package javababushka.connection; +package babushka.connection; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; diff --git a/java/client/src/main/java/javababushka/connection/SocketManager.java b/java/client/src/main/java/babushka/connection/SocketManager.java similarity index 98% rename from java/client/src/main/java/javababushka/connection/SocketManager.java rename to java/client/src/main/java/babushka/connection/SocketManager.java index d69b5af484..f5420724f4 100644 --- a/java/client/src/main/java/javababushka/connection/SocketManager.java +++ b/java/client/src/main/java/babushka/connection/SocketManager.java @@ -1,7 +1,8 @@ -package javababushka.connection; +package babushka.connection; import static response.ResponseOuterClass.Response; +import babushka.BabushkaCoreNativeDefinitions; import com.google.protobuf.GeneratedMessageV3; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBufAllocator; @@ -18,7 +19,6 @@ import io.netty.util.concurrent.DefaultThreadFactory; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicInteger; -import javababushka.BabushkaCoreNativeDefinitions; public class SocketManager { private final String unixSocket = getSocket(); diff --git a/java/client/src/main/java/javababushka/connection/WriteHandler.java b/java/client/src/main/java/babushka/connection/WriteHandler.java similarity index 94% rename from java/client/src/main/java/javababushka/connection/WriteHandler.java rename to java/client/src/main/java/babushka/connection/WriteHandler.java index db233d9cce..9684d1ebbf 100644 --- a/java/client/src/main/java/javababushka/connection/WriteHandler.java +++ b/java/client/src/main/java/babushka/connection/WriteHandler.java @@ -1,4 +1,4 @@ -package javababushka.connection; +package babushka.connection; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; diff --git a/java/client/src/test/java/javababushka/ClientTest.java b/java/client/src/test/java/babushka/ClientTest.java similarity index 95% rename from java/client/src/test/java/javababushka/ClientTest.java rename to java/client/src/test/java/babushka/ClientTest.java index dc9cf1bfc6..2ff198694a 100644 --- a/java/client/src/test/java/javababushka/ClientTest.java +++ b/java/client/src/test/java/babushka/ClientTest.java @@ -1,12 +1,12 @@ -package javababushka; +package babushka; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; +import babushka.connection.SocketManager; import connection_request.ConnectionRequestOuterClass.ConnectionRequest; import java.util.concurrent.CompletableFuture; -import javababushka.connection.SocketManager; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mockito; diff --git a/java/settings.gradle b/java/settings.gradle index c392c65247..e96b2925b4 100644 --- a/java/settings.gradle +++ b/java/settings.gradle @@ -1,4 +1,4 @@ -rootProject.name = 'javababushka' +rootProject.name = 'babushka' include 'client' include 'integTest' diff --git a/java/src/lib.rs b/java/src/lib.rs index e3ffcb7432..cb1645f136 100644 --- a/java/src/lib.rs +++ b/java/src/lib.rs @@ -39,7 +39,7 @@ fn redis_value_to_java<'local>(env: &mut JNIEnv<'local>, val: Value) -> JObject< } #[no_mangle] -pub extern "system" fn Java_javababushka_BabushkaCoreNativeDefinitions_valueFromPointer<'local>( +pub extern "system" fn Java_babushka_BabushkaCoreNativeDefinitions_valueFromPointer<'local>( mut env: JNIEnv<'local>, _class: JClass<'local>, pointer: jlong @@ -49,7 +49,7 @@ pub extern "system" fn Java_javababushka_BabushkaCoreNativeDefinitions_valueFrom } #[no_mangle] -pub extern "system" fn Java_javababushka_BabushkaCoreNativeDefinitions_startSocketListenerExternal<'local>( +pub extern "system" fn Java_babushka_BabushkaCoreNativeDefinitions_startSocketListenerExternal<'local>( env: JNIEnv<'local>, _class: JClass<'local> ) -> JObject<'local> { From 14e3e181c0fd625fb0933c6792699ab3734dbba0 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 29 Nov 2023 17:04:48 -0800 Subject: [PATCH 71/81] Fix build. Signed-off-by: Yury-Fridlyand --- .../main/java/babushka/benchmarks/BenchmarkingApp.java | 9 ++++----- .../java/babushka/benchmarks/clients/AsyncClient.java | 3 +-- .../benchmarks/clients/babushka/JniNettyClient.java | 3 +-- .../babushka/benchmarks/clients/jedis/JedisClient.java | 2 +- .../benchmarks/clients/jedis/JedisPseudoAsyncClient.java | 5 ++--- .../benchmarks/clients/lettuce/LettuceAsyncClient.java | 2 +- .../clients/lettuce/LettuceAsyncClusterClient.java | 2 +- .../benchmarks/clients/lettuce/LettuceClient.java | 2 +- .../java/babushka/benchmarks/utils/Benchmarking.java | 8 ++++---- .../java/babushka/benchmarks/jedis/JedisClientIT.java | 6 +++--- .../benchmarks/lettuce/LettuceAsyncClientIT.java | 2 +- .../babushka/benchmarks/lettuce/LettuceClientIT.java | 2 +- java/client/src/test/java/babushka/ClientTest.java | 2 +- 13 files changed, 22 insertions(+), 26 deletions(-) diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/BenchmarkingApp.java b/java/benchmarks/src/main/java/babushka/benchmarks/BenchmarkingApp.java index f5d7ccaac1..4bd11b3597 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/BenchmarkingApp.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/BenchmarkingApp.java @@ -1,16 +1,15 @@ package babushka.benchmarks; -import java.util.Arrays; -import java.util.Optional; -import java.util.stream.Stream; - +import babushka.benchmarks.clients.babushka.JniNettyClient; import babushka.benchmarks.clients.jedis.JedisClient; import babushka.benchmarks.clients.jedis.JedisPseudoAsyncClient; import babushka.benchmarks.clients.lettuce.LettuceAsyncClient; import babushka.benchmarks.clients.lettuce.LettuceAsyncClusterClient; import babushka.benchmarks.clients.lettuce.LettuceClient; import babushka.benchmarks.utils.Benchmarking; -import babushka.benchmarks.clients.babushka.JniNettyClient; +import java.util.Arrays; +import java.util.Optional; +import java.util.stream.Stream; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/clients/AsyncClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/AsyncClient.java index 2cf1b562f5..455512a78c 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/clients/AsyncClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/AsyncClient.java @@ -1,10 +1,9 @@ package babushka.benchmarks.clients; +import babushka.benchmarks.utils.ConnectionSettings; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import babushka.benchmarks.utils.ConnectionSettings; - /** A Redis client with async capabilities */ public interface AsyncClient extends Client { diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java index 98e3c61fc9..1ede857092 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java @@ -3,11 +3,10 @@ import static response.ResponseOuterClass.Response; import babushka.Client; -import java.util.concurrent.Future; - import babushka.benchmarks.clients.AsyncClient; import babushka.benchmarks.clients.SyncClient; import babushka.benchmarks.utils.ConnectionSettings; +import java.util.concurrent.Future; public class JniNettyClient implements SyncClient, AsyncClient { diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisClient.java index 8896ad96aa..8ac66cea73 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisClient.java @@ -1,7 +1,7 @@ package babushka.benchmarks.clients.jedis; -import babushka.benchmarks.utils.ConnectionSettings; import babushka.benchmarks.clients.SyncClient; +import babushka.benchmarks.utils.ConnectionSettings; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java index ca261a9d4b..8770d1f181 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/jedis/JedisPseudoAsyncClient.java @@ -1,11 +1,10 @@ package babushka.benchmarks.clients.jedis; +import babushka.benchmarks.clients.AsyncClient; +import babushka.benchmarks.utils.ConnectionSettings; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; -import babushka.benchmarks.utils.ConnectionSettings; -import babushka.benchmarks.clients.AsyncClient; - /** * A Jedis client with pseudo-async capabilities. Jedis doesn't provide async API * https://github.com/redis/jedis/issues/241 diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClient.java index 251fc4eec1..6322a648ce 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClient.java @@ -1,5 +1,6 @@ package babushka.benchmarks.clients.lettuce; +import babushka.benchmarks.clients.AsyncClient; import babushka.benchmarks.utils.ConnectionSettings; import io.lettuce.core.RedisClient; import io.lettuce.core.RedisFuture; @@ -8,7 +9,6 @@ import io.lettuce.core.api.async.RedisAsyncCommands; import io.lettuce.core.codec.StringCodec; import java.util.concurrent.Future; -import babushka.benchmarks.clients.AsyncClient; /** A Lettuce client with async capabilities see: https://lettuce.io/ */ public class LettuceAsyncClient implements AsyncClient { diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClusterClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClusterClient.java index e76a6e7313..5e385d0d89 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClusterClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceAsyncClusterClient.java @@ -3,12 +3,12 @@ */ package babushka.benchmarks.clients.lettuce; +import babushka.benchmarks.utils.ConnectionSettings; import io.lettuce.core.RedisFuture; import io.lettuce.core.RedisURI; import io.lettuce.core.cluster.RedisClusterClient; import io.lettuce.core.cluster.api.StatefulRedisClusterConnection; import io.lettuce.core.cluster.api.async.RedisAdvancedClusterAsyncCommands; -import babushka.benchmarks.utils.ConnectionSettings; public class LettuceAsyncClusterClient extends LettuceAsyncClient { diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceClient.java index 3496b98cc9..b0440ec8df 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/lettuce/LettuceClient.java @@ -1,10 +1,10 @@ package babushka.benchmarks.clients.lettuce; +import babushka.benchmarks.clients.SyncClient; import babushka.benchmarks.utils.ConnectionSettings; import io.lettuce.core.RedisClient; import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.sync.RedisStringCommands; -import babushka.benchmarks.clients.SyncClient; /** A Lettuce client with sync capabilities see: https://lettuce.io/ */ public class LettuceClient implements SyncClient { diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/utils/Benchmarking.java b/java/benchmarks/src/main/java/babushka/benchmarks/utils/Benchmarking.java index c6725fad68..14f3ddb7c9 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/utils/Benchmarking.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/utils/Benchmarking.java @@ -1,5 +1,9 @@ package babushka.benchmarks.utils; +import babushka.benchmarks.BenchmarkingApp; +import babushka.benchmarks.clients.AsyncClient; +import babushka.benchmarks.clients.Client; +import babushka.benchmarks.clients.SyncClient; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -11,10 +15,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Supplier; -import babushka.benchmarks.BenchmarkingApp; -import babushka.benchmarks.clients.AsyncClient; -import babushka.benchmarks.clients.Client; -import babushka.benchmarks.clients.SyncClient; import org.apache.commons.lang3.tuple.Pair; /** Class to calculate latency on client-actions */ diff --git a/java/benchmarks/src/test/java/babushka/benchmarks/jedis/JedisClientIT.java b/java/benchmarks/src/test/java/babushka/benchmarks/jedis/JedisClientIT.java index bcc0e23264..5890b8b0b3 100644 --- a/java/benchmarks/src/test/java/babushka/benchmarks/jedis/JedisClientIT.java +++ b/java/benchmarks/src/test/java/babushka/benchmarks/jedis/JedisClientIT.java @@ -2,13 +2,13 @@ import static org.junit.jupiter.api.Assertions.assertTrue; +import babushka.benchmarks.clients.jedis.JedisClient; +import babushka.benchmarks.utils.Benchmarking; +import babushka.benchmarks.utils.ChosenAction; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import babushka.benchmarks.clients.jedis.JedisClient; -import babushka.benchmarks.utils.Benchmarking; -import babushka.benchmarks.utils.ChosenAction; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceAsyncClientIT.java b/java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceAsyncClientIT.java index d1fae78c78..a07365482d 100644 --- a/java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceAsyncClientIT.java +++ b/java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceAsyncClientIT.java @@ -3,8 +3,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.fail; -import io.lettuce.core.RedisFuture; import babushka.benchmarks.clients.lettuce.LettuceAsyncClient; +import io.lettuce.core.RedisFuture; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceClientIT.java b/java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceClientIT.java index b33e74e634..f5073a4d96 100644 --- a/java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceClientIT.java +++ b/java/benchmarks/src/test/java/babushka/benchmarks/lettuce/LettuceClientIT.java @@ -1,9 +1,9 @@ package babushka.benchmarks.lettuce; -import java.util.HashMap; import babushka.benchmarks.clients.lettuce.LettuceClient; import babushka.benchmarks.utils.Benchmarking; import babushka.benchmarks.utils.ChosenAction; +import java.util.HashMap; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; diff --git a/java/client/src/test/java/babushka/ClientTest.java b/java/client/src/test/java/babushka/ClientTest.java index 2ff198694a..af03243416 100644 --- a/java/client/src/test/java/babushka/ClientTest.java +++ b/java/client/src/test/java/babushka/ClientTest.java @@ -33,7 +33,7 @@ public void test_asyncConnectToRedis_success() { boolean useSsl = false; boolean clusterMode = false; ConnectionRequest connectionRequest = - Client.getConnectionRequest(HOST, PORT, useSsl, clusterMode).build(); + Client.getConnectionRequest(HOST, PORT, useSsl, clusterMode); // exercise CompletableFuture connectionResponse = From 6d2ae81097d44911f767df66b5903db52fefafbc Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 29 Nov 2023 17:10:27 -0800 Subject: [PATCH 72/81] Clean up commented logging. Signed-off-by: Yury-Fridlyand --- java/client/build.gradle | 2 +- .../src/main/java/babushka/connection/ChannelHandler.java | 3 --- .../src/main/java/babushka/connection/ReadHandler.java | 5 +---- .../src/main/java/babushka/connection/SocketManager.java | 5 ++--- .../src/main/java/babushka/connection/WriteHandler.java | 1 - java/src/lib.rs | 2 -- 6 files changed, 4 insertions(+), 14 deletions(-) diff --git a/java/client/build.gradle b/java/client/build.gradle index e6a9062733..7121fe6c2d 100644 --- a/java/client/build.gradle +++ b/java/client/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation group: 'io.netty', name: 'netty-handler', version: '4.1.100.Final' // https://github.com/netty/netty/wiki/Native-transports - // Windows is not supported, because babushka does not support windows, because tokio does not support windows, because ... 42 + // At the moment, Windows is not supported implementation group: 'io.netty', name: 'netty-transport-native-epoll', version: '4.1.100.Final', classifier: 'linux-x86_64' implementation group: 'io.netty', name: 'netty-transport-native-kqueue', version: '4.1.100.Final', classifier: 'osx-x86_64' implementation group: 'io.netty', name: 'netty-transport-native-kqueue', version: '4.1.100.Final', classifier: 'osx-aarch_64' diff --git a/java/client/src/main/java/babushka/connection/ChannelHandler.java b/java/client/src/main/java/babushka/connection/ChannelHandler.java index 6be4048f95..46d447a92f 100644 --- a/java/client/src/main/java/babushka/connection/ChannelHandler.java +++ b/java/client/src/main/java/babushka/connection/ChannelHandler.java @@ -4,15 +4,12 @@ import io.netty.channel.unix.UnixChannel; import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; -import io.netty.handler.logging.LogLevel; -import io.netty.handler.logging.LoggingHandler; import lombok.NonNull; public class ChannelHandler extends ChannelInitializer { @Override public void initChannel(@NonNull UnixChannel ch) throws Exception { ch.pipeline() - .addLast("logger", new LoggingHandler(LogLevel.DEBUG)) // https://netty.io/4.1/api/io/netty/handler/codec/protobuf/ProtobufEncoder.html .addLast("protobufDecoder", new ProtobufVarint32FrameDecoder()) .addLast("protobufEncoder", new ProtobufVarint32LengthFieldPrepender()) diff --git a/java/client/src/main/java/babushka/connection/ReadHandler.java b/java/client/src/main/java/babushka/connection/ReadHandler.java index 58e2bec0a5..43cfbf8b15 100644 --- a/java/client/src/main/java/babushka/connection/ReadHandler.java +++ b/java/client/src/main/java/babushka/connection/ReadHandler.java @@ -10,15 +10,12 @@ public class ReadHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(@NonNull ChannelHandlerContext ctx, @NonNull Object msg) throws Exception { - // System.out.printf("=== channelRead %s %s %n", ctx, msg); var buf = (ByteBuf) msg; var bytes = new byte[buf.readableBytes()]; buf.readBytes(bytes); - // TODO surround parsing with try-catch, set error to future if - // parsing failed. + // TODO surround parsing with try-catch, set error to future if parsing failed. var response = ResponseOuterClass.Response.parseFrom(bytes); int callbackId = response.getCallbackIdx(); - // System.out.printf("== Received response with callback %d%n", if (callbackId == 0) { // can't distinguish connection requests since they have no // callback ID diff --git a/java/client/src/main/java/babushka/connection/SocketManager.java b/java/client/src/main/java/babushka/connection/SocketManager.java index f5420724f4..fb4b21db92 100644 --- a/java/client/src/main/java/babushka/connection/SocketManager.java +++ b/java/client/src/main/java/babushka/connection/SocketManager.java @@ -27,15 +27,14 @@ private static String getSocket() { try { return BabushkaCoreNativeDefinitions.startSocketListenerExternal(); } catch (Exception | UnsatisfiedLinkError e) { - System.err.printf("Failed to get UDS from babushka and dedushka: %s%n%n", e); + System.err.printf("Failed to create a UDS connection: %s%n%n", e); throw new RuntimeException(e); } } private final AtomicInteger requestId = new AtomicInteger(0); - // We support MacOS and Linux only, because Babushka does not support Windows, because tokio does - // not support it. + // At the moment, Windows is not supported // Probably we should use NIO (NioEventLoopGroup) for Windows. private static final boolean isMacOs = isMacOs(); diff --git a/java/client/src/main/java/babushka/connection/WriteHandler.java b/java/client/src/main/java/babushka/connection/WriteHandler.java index 9684d1ebbf..e78bd3ccfe 100644 --- a/java/client/src/main/java/babushka/connection/WriteHandler.java +++ b/java/client/src/main/java/babushka/connection/WriteHandler.java @@ -9,7 +9,6 @@ public class WriteHandler extends ChannelOutboundHandlerAdapter { @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { - // System.out.printf("=== write %s %s %s %n", ctx, msg, promise); var bytes = (byte[]) msg; super.write(ctx, Unpooled.copiedBuffer(bytes), promise); diff --git a/java/src/lib.rs b/java/src/lib.rs index cb1645f136..abb4447860 100644 --- a/java/src/lib.rs +++ b/java/src/lib.rs @@ -55,8 +55,6 @@ pub extern "system" fn Java_babushka_BabushkaCoreNativeDefinitions_startSocketLi ) -> JObject<'local> { let (tx, rx) = mpsc::channel::>(); - //logger_core::init(Some(Level::Trace), None); - start_socket_listener(move |socket_path : Result| { // Signals that thread has started let _ = tx.send(socket_path); From e7ee9a90b5bb042f5f4e96796148ad5e4d7a12ed Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 29 Nov 2023 18:34:58 -0800 Subject: [PATCH 73/81] Javadoc Signed-off-by: Yury-Fridlyand --- java/benchmarks/build.gradle | 2 - java/client/build.gradle | 2 + .../client/src/main/java/babushka/Client.java | 113 +++++++++++++----- ...hannelHandler.java => ChannelBuilder.java} | 5 +- .../babushka/connection/CommonResources.java | 19 --- .../java/babushka/connection/ReadHandler.java | 21 +++- .../babushka/connection/SocketManager.java | 93 ++++++++++++-- .../connection/SocketManagerResources.java | 28 +++++ .../babushka/connection/WriteHandler.java | 7 ++ 9 files changed, 220 insertions(+), 70 deletions(-) rename java/client/src/main/java/babushka/connection/{ChannelHandler.java => ChannelBuilder.java} (78%) delete mode 100644 java/client/src/main/java/babushka/connection/CommonResources.java create mode 100644 java/client/src/main/java/babushka/connection/SocketManagerResources.java diff --git a/java/benchmarks/build.gradle b/java/benchmarks/build.gradle index f6f56c94d7..317bb9fcde 100644 --- a/java/benchmarks/build.gradle +++ b/java/benchmarks/build.gradle @@ -15,8 +15,6 @@ dependencies { // Use JUnit test framework. testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2' - // This dependency is used internally, and not exposed to consumers on their own compile classpath. - implementation 'com.google.guava:guava:32.1.1-jre' implementation 'redis.clients:jedis:4.4.3' implementation 'io.lettuce:lettuce-core:6.2.6.RELEASE' implementation 'commons-cli:commons-cli:1.5.0' diff --git a/java/client/build.gradle b/java/client/build.gradle index 7121fe6c2d..460ad496a5 100644 --- a/java/client/build.gradle +++ b/java/client/build.gradle @@ -9,6 +9,8 @@ repositories { } dependencies { + // This dependency is used internally, and not exposed to consumers on their own compile classpath. + implementation 'com.google.guava:guava:32.1.1-jre' implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.24.3' implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.13.0' diff --git a/java/client/src/main/java/babushka/Client.java b/java/client/src/main/java/babushka/Client.java index d4e1c34877..0d61efaa79 100644 --- a/java/client/src/main/java/babushka/Client.java +++ b/java/client/src/main/java/babushka/Client.java @@ -1,59 +1,94 @@ package babushka; -import static connection_request.ConnectionRequestOuterClass.ConnectionRequest; -import static connection_request.ConnectionRequestOuterClass.NodeAddress; -import static connection_request.ConnectionRequestOuterClass.ReadFrom; -import static connection_request.ConnectionRequestOuterClass.TlsMode; -import static redis_request.RedisRequestOuterClass.Command; -import static redis_request.RedisRequestOuterClass.Command.ArgsArray; -import static redis_request.RedisRequestOuterClass.RedisRequest; -import static redis_request.RedisRequestOuterClass.RequestType; -import static redis_request.RedisRequestOuterClass.Routes; -import static redis_request.RedisRequestOuterClass.SimpleRoutes; -import static response.ResponseOuterClass.Response; - +import babushka.connection.ReadHandler; import babushka.connection.SocketManager; +import com.google.common.annotations.VisibleForTesting; +import connection_request.ConnectionRequestOuterClass.ConnectionRequest; +import connection_request.ConnectionRequestOuterClass.NodeAddress; +import connection_request.ConnectionRequestOuterClass.ReadFrom; +import connection_request.ConnectionRequestOuterClass.TlsMode; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.tuple.Pair; +import redis_request.RedisRequestOuterClass.Command; +import redis_request.RedisRequestOuterClass.Command.ArgsArray; +import redis_request.RedisRequestOuterClass.RedisRequest; +import redis_request.RedisRequestOuterClass.RequestType; +import redis_request.RedisRequestOuterClass.Routes; +import redis_request.RedisRequestOuterClass.SimpleRoutes; +import response.ResponseOuterClass.Response; public class Client { private static final long DEFAULT_TIMEOUT_MILLISECONDS = 1000; - private static final int REQUEST_TIMEOUT_MILLISECONDS = 250; - private SocketManager wrapper; + private final SocketManager socketManager; public Client() { this(SocketManager.getInstance()); } - public Client(SocketManager socketManager) { - wrapper = socketManager; + @VisibleForTesting + Client(SocketManager socketManager) { + this.socketManager = socketManager; } + /** + * Sync (blocking) set. See async option in {@link #asyncSet}.
+ * See REDIS docs for SET. + * + * @param key The key name + * @param value The value to set + */ public void set(String key, String value) { waitForResult(asyncSet(key, value)); // TODO parse response and rethrow an exception if there is an error } + /** + * Sync (blocking) get. See async option in {@link #asyncGet}.
+ * See REDIS docs for GET. + * + * @param key The key name + */ public String get(String key) { return waitForResult(asyncGet(key)); // TODO support non-strings } + /** + * Sync (blocking) connect to REDIS. See async option in {@link #asyncConnectToRedis}. + * + * @param host Server address + * @param port Server port + * @param useSsl true if communication with the server or cluster should use Transport Level + * Security + * @param clusterMode true if REDIS instance runs in the cluster mode + */ + // TODO support configuration object which holds more parameters (e.g. multiple addresses, etc) public void connectToRedis(String host, int port, boolean useSsl, boolean clusterMode) { waitForResult(asyncConnectToRedis(host, port, useSsl, clusterMode)); } + /** + * Create a unique callback ID (request ID) and a corresponding registered future for the + * response.
+ * Should be used for every request submitted to ensure that it can be tracked by {@link + * SocketManager} and {@link ReadHandler}. + * + * @return New callback ID and new future to be returned to user. + */ private synchronized Pair> getNextCallback() { var future = new CompletableFuture(); - int callbackId = wrapper.registerRequest(future); + int callbackId = socketManager.registerRequest(future); return Pair.of(callbackId, future); } - public static ConnectionRequest getConnectionRequest( + /** Build a protobuf connection request. See {@link #connectToRedis}. */ + // TODO support more parameters and/or configuration object + @VisibleForTesting + static ConnectionRequest getConnectionRequest( String host, int port, boolean useSsl, boolean clusterMode) { return ConnectionRequest.newBuilder() .addAddresses(NodeAddress.newBuilder().setHost(host).setPort(port).build()) @@ -64,22 +99,27 @@ public static ConnectionRequest getConnectionRequest( .build(); } + /** + * Async (non-blocking) connect to REDIS. See sync option in {@link #connectToRedis}. + * + * @param host Server address + * @param port Server port + * @param useSsl true if communication with the server or cluster should use Transport Level + * Security + * @param clusterMode true if REDIS instance runs in the cluster mode + */ + // TODO support configuration object which holds more parameters (e.g. multiple addresses, etc) public CompletableFuture asyncConnectToRedis( String host, int port, boolean useSsl, boolean clusterMode) { var request = getConnectionRequest(host, port, useSsl, clusterMode); - - // connection request has hardcoded callback id = 0 - // https://github.com/aws/babushka/issues/600 var future = new CompletableFuture(); - wrapper.registerConnection(future); - wrapper.writeAndFlush(request); + socketManager.registerConnection(future); + socketManager.writeAndFlush(request); return future; } private CompletableFuture submitNewCommand(RequestType command, List args) { var commandId = getNextCallback(); - // System.out.printf("== %s(%s), callback %d%n", command, String.join(", ", args), commandId); - // TODO this explicitly uses ForkJoin thread pool. May be we should use another one. return CompletableFuture.supplyAsync( () -> { @@ -98,19 +138,30 @@ private CompletableFuture submitNewCommand(RequestType command, List f); } + /** + * Async (non-blocking) set. See sync option in {@link #set}.
+ * See REDIS docs for SET. + * + * @param key The key name + * @param value The value to set + */ public Future asyncSet(String key, String value) { - // System.out.printf("== set(%s, %s), callback %d%n", key, value, callbackId); return submitNewCommand(RequestType.SetString, List.of(key, value)); } + /** + * Async (non-blocking) get. See sync option in {@link #get}.
+ * See REDIS docs for GET. + * + * @param key The key name + */ public Future asyncGet(String key) { - // System.out.printf("== get(%s), callback %d%n", key, callbackId); return submitNewCommand(RequestType.GetString, List.of(key)) .thenApply( response -> @@ -120,11 +171,13 @@ public Future asyncGet(String key) { : null); } - public T waitForResult(Future future) { + /** Get the future result with default timeout. */ + T waitForResult(Future future) { return waitForResult(future, DEFAULT_TIMEOUT_MILLISECONDS); } - public T waitForResult(Future future, long timeout) { + /** Get the future result with given timeout in ms. */ + T waitForResult(Future future, long timeout) { try { return future.get(timeout, TimeUnit.MILLISECONDS); } catch (Exception ignored) { diff --git a/java/client/src/main/java/babushka/connection/ChannelHandler.java b/java/client/src/main/java/babushka/connection/ChannelBuilder.java similarity index 78% rename from java/client/src/main/java/babushka/connection/ChannelHandler.java rename to java/client/src/main/java/babushka/connection/ChannelBuilder.java index 46d447a92f..efe074b1c7 100644 --- a/java/client/src/main/java/babushka/connection/ChannelHandler.java +++ b/java/client/src/main/java/babushka/connection/ChannelBuilder.java @@ -6,9 +6,10 @@ import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; import lombok.NonNull; -public class ChannelHandler extends ChannelInitializer { +/** Builder for the channel used by {@link SocketManager}. */ +public class ChannelBuilder extends ChannelInitializer { @Override - public void initChannel(@NonNull UnixChannel ch) throws Exception { + public void initChannel(@NonNull UnixChannel ch) { ch.pipeline() // https://netty.io/4.1/api/io/netty/handler/codec/protobuf/ProtobufEncoder.html .addLast("protobufDecoder", new ProtobufVarint32FrameDecoder()) diff --git a/java/client/src/main/java/babushka/connection/CommonResources.java b/java/client/src/main/java/babushka/connection/CommonResources.java deleted file mode 100644 index 962087e166..0000000000 --- a/java/client/src/main/java/babushka/connection/CommonResources.java +++ /dev/null @@ -1,19 +0,0 @@ -package babushka.connection; - -import java.util.Deque; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedDeque; -import response.ResponseOuterClass; - -public class CommonResources { - // Futures to handle responses. Index is callback id, starting from 1 (0 index is for connection - // request always). - // Is it not a concurrent nor sync collection, but it is synced on adding. No removes. - public static final Map> responses = - new ConcurrentHashMap<>(); - - public static final Deque> connectionRequests = - new ConcurrentLinkedDeque<>(); -} diff --git a/java/client/src/main/java/babushka/connection/ReadHandler.java b/java/client/src/main/java/babushka/connection/ReadHandler.java index 43cfbf8b15..ef69ef59a7 100644 --- a/java/client/src/main/java/babushka/connection/ReadHandler.java +++ b/java/client/src/main/java/babushka/connection/ReadHandler.java @@ -4,9 +4,19 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import lombok.NonNull; -import response.ResponseOuterClass; +import response.ResponseOuterClass.Response; +/** Handler for inbound traffic though UDS. Used by Netty. */ public class ReadHandler extends ChannelInboundHandlerAdapter { + /** + * Handles responses from babushka core: + * + *
    + *
  1. Copy to a buffer; + *
  2. Parse protobuf packet; + *
  3. Find and resolve a corresponding future; + *
+ */ @Override public void channelRead(@NonNull ChannelHandlerContext ctx, @NonNull Object msg) throws Exception { @@ -14,20 +24,21 @@ public void channelRead(@NonNull ChannelHandlerContext ctx, @NonNull Object msg) var bytes = new byte[buf.readableBytes()]; buf.readBytes(bytes); // TODO surround parsing with try-catch, set error to future if parsing failed. - var response = ResponseOuterClass.Response.parseFrom(bytes); + var response = Response.parseFrom(bytes); int callbackId = response.getCallbackIdx(); if (callbackId == 0) { // can't distinguish connection requests since they have no // callback ID // https://github.com/aws/babushka/issues/600 - CommonResources.connectionRequests.pop().complete(response); + SocketManagerResources.connectionRequests.pop().complete(response); } else { - CommonResources.responses.get(callbackId).complete(response); - CommonResources.responses.remove(callbackId); + SocketManagerResources.responses.get(callbackId).complete(response); + SocketManagerResources.responses.remove(callbackId); } buf.release(); } + /** Handles uncaught exceptions from {@link #channelRead(ChannelHandlerContext, Object)}. */ @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { System.out.printf("=== exceptionCaught %s %s %n", ctx, cause); diff --git a/java/client/src/main/java/babushka/connection/SocketManager.java b/java/client/src/main/java/babushka/connection/SocketManager.java index fb4b21db92..e134d83b7e 100644 --- a/java/client/src/main/java/babushka/connection/SocketManager.java +++ b/java/client/src/main/java/babushka/connection/SocketManager.java @@ -3,6 +3,7 @@ import static response.ResponseOuterClass.Response; import babushka.BabushkaCoreNativeDefinitions; +import babushka.Client; import com.google.protobuf.GeneratedMessageV3; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBufAllocator; @@ -20,9 +21,28 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicInteger; +/** + * A UDS connection manager. This class is responsible for: + * + *
    + *
  • opening a connection (channel) though the UDS; + *
  • allocating the corresponding resources, e.g. thread pools (see also {@link + * SocketManagerResources}); + *
  • handling connection requests; + *
  • providing unique request ID (callback ID); + *
  • handling REDIS requests; + *
  • closing connection; + *
+ * + * Note: should not be used outside of {@link Client}! + */ public class SocketManager { - private final String unixSocket = getSocket(); + /** + * Make an FFI call to obtain the socket path. + * + * @return A UDS path. + */ private static String getSocket() { try { return BabushkaCoreNativeDefinitions.startSocketListenerExternal(); @@ -32,13 +52,17 @@ private static String getSocket() { } } + /** Unique request ID (callback ID). Thread-safe. */ private final AtomicInteger requestId = new AtomicInteger(0); // At the moment, Windows is not supported // Probably we should use NIO (NioEventLoopGroup) for Windows. - private static final boolean isMacOs = isMacOs(); - // TODO support IO-Uring and NIO + /** + * Detect platform to identify which native implementation to use for UDS interaction. Currently + * supported platforms are: Linux and macOS.
+ * Subject to change in future to support more platforms and implementations. + */ private static boolean isMacOs() { try { Class.forName("io.netty.channel.kqueue.KQueue"); @@ -48,27 +72,30 @@ private static boolean isMacOs() { } } + /** A channel to make socket interactions with. */ private Channel channel = null; + + /** Thread pool supplied to Netty to perform all async IO. */ private EventLoopGroup group = null; /** - * Returns the singleton instance of the NettyWrapper + * Creates (if not yet created) and returns the singleton instance of the {@link SocketManager}. * - * @return NettyWrapper instance + * @return a {@link SocketManager} instance. */ public static synchronized SocketManager getInstance() { if (INSTANCE == null) { INSTANCE = new SocketManager(); - Runtime.getRuntime() - .addShutdownHook(new Thread(new ShutdownHook(), "NettyWrapper-shutdown-hook")); } return INSTANCE; } + /** The singleton instance. */ private static SocketManager INSTANCE = null; - /** Constructor class for the single instance */ + /** Constructor for the single instance. */ private SocketManager() { + boolean isMacOs = isMacOs(); try { int cpuCount = Runtime.getRuntime().availableProcessors(); group = @@ -83,8 +110,8 @@ cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) .option(ChannelOption.ALLOCATOR, ByteBufAllocator.DEFAULT) .group(group) .channel(isMacOs ? KQueueDomainSocketChannel.class : EpollDomainSocketChannel.class) - .handler(new ChannelHandler()) - .connect(new DomainSocketAddress(unixSocket)) + .handler(new ChannelBuilder()) + .connect(new DomainSocketAddress(getSocket())) .sync() .channel(); @@ -95,35 +122,77 @@ cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) } } + /** + * Write a protobuf message to the socket.
+ * Always {@link #registerRequest} before submitting! + */ public void write(GeneratedMessageV3 message) { channel.write(message.toByteArray()); } + /** + * Write a protobuf message to the socket and flush it.
+ * Always {@link #registerRequest} before submitting! + */ public void writeAndFlush(GeneratedMessageV3 message) { channel.writeAndFlush(message.toByteArray()); } + /** + * Register a new request to be sent. Socket Manager takes responsibility for tracking the + * returned callback ID in all incoming responses. Once response received, the given future + * completes with it. + * + * @param future A client promise for response. + * @return Unique callback ID which should set into request. + */ public int registerRequest(CompletableFuture future) { int callbackId = requestId.incrementAndGet(); - CommonResources.responses.put(callbackId, future); + SocketManagerResources.responses.put(callbackId, future); return callbackId; } + /** + * Register a new connection request similar to {@link #registerRequest}.
+ * No callback ID returned, because connection request/response pair have no such field (subject + * to change). Track issue #600 for more + * details. + */ public void registerConnection(CompletableFuture future) { - CommonResources.connectionRequests.add(future); + SocketManagerResources.connectionRequests.add(future); } + /** + * Closes the UDS connection and frees corresponding resources. A consecutive call to {@link + * #getInstance()} will create a new connection with new resource pool. + */ public void close() { channel.close(); group.shutdownGracefully(); + INSTANCE = null; + // TODO should we reply in uncompleted futures? + SocketManagerResources.connectionRequests.clear(); + SocketManagerResources.responses.clear(); } + /** + * A JVM shutdown hook to be registered. It is responsible for closing connection and freeing + * resources by calling {@link #close()}. It is recommended to use a class instead of lambda to + * ensure that it is called.
+ * See {@link Runtime#addShutdownHook}. + */ private static class ShutdownHook implements Runnable { @Override public void run() { if (INSTANCE != null) { INSTANCE.close(); + INSTANCE = null; } } } + + static { + Runtime.getRuntime() + .addShutdownHook(new Thread(new ShutdownHook(), "NettyWrapper-shutdown-hook")); + } } diff --git a/java/client/src/main/java/babushka/connection/SocketManagerResources.java b/java/client/src/main/java/babushka/connection/SocketManagerResources.java new file mode 100644 index 0000000000..bc4aa51f29 --- /dev/null +++ b/java/client/src/main/java/babushka/connection/SocketManagerResources.java @@ -0,0 +1,28 @@ +package babushka.connection; + +import java.util.Deque; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedDeque; +import response.ResponseOuterClass.Response; + +/** Holder for resources owned by {@link SocketManager} and used by {@link ReadHandler}. */ +public class SocketManagerResources { + + /** + * Storage of Futures to handle responses. Map key is callback id, which starts from 1.
+ * Each future is a promise for every submitted by user request. + */ + public static final Map> responses = + new ConcurrentHashMap<>(); + + /** + * Storage for connection requests similar to {@link #responses}. Unfortunately, connection + * requests can't be stored in the same storage, because callback ID = 0 is hardcoded for + * connection requests. Will be removed once issue #600 on GH fixed. + */ + public static final Deque> connectionRequests = + new ConcurrentLinkedDeque<>(); +} diff --git a/java/client/src/main/java/babushka/connection/WriteHandler.java b/java/client/src/main/java/babushka/connection/WriteHandler.java index e78bd3ccfe..6a1885190a 100644 --- a/java/client/src/main/java/babushka/connection/WriteHandler.java +++ b/java/client/src/main/java/babushka/connection/WriteHandler.java @@ -1,11 +1,18 @@ package babushka.connection; +import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; +/** Handler for outbound traffic though UDS. Used by Netty. */ public class WriteHandler extends ChannelOutboundHandlerAdapter { + /** + * Converts objects submitted to {@link Channel#write(Object)} and {@link + * Channel#writeAndFlush(Object)} to a {@link ByteBuf}. + */ @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { From 540120e2a93d152cf6ed28c66a35de3cf51e1eea Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Wed, 29 Nov 2023 18:47:33 -0800 Subject: [PATCH 74/81] Revert some renamings. Signed-off-by: Yury-Fridlyand --- java/.cargo/config.toml | 2 +- java/Cargo.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java/.cargo/config.toml b/java/.cargo/config.toml index b569c07483..12fc36fc94 100644 --- a/java/.cargo/config.toml +++ b/java/.cargo/config.toml @@ -1,3 +1,3 @@ [env] -BABUSHKA_NAME = { value = "babushka", force = true } +BABUSHKA_NAME = { value = "javababushka", force = true } BABUSHKA_VERSION = "0.1.0" diff --git a/java/Cargo.toml b/java/Cargo.toml index 313c33807b..4e9ac83ef1 100644 --- a/java/Cargo.toml +++ b/java/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "babushka" +name = "javababushka" version = "0.1.0" edition = "2021" license = "Apache-2.0" @@ -7,7 +7,7 @@ authors = ["Amazon Web Services"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [lib] -name = "babushka" +name = "javababushka" crate-type = ["cdylib"] [dependencies] From aa5aa527c91c8bb2708f2d5fedcf1b72d6d6d8a5 Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Thu, 30 Nov 2023 10:51:58 -0800 Subject: [PATCH 75/81] Optimize a bit. Signed-off-by: Yury-Fridlyand --- .../client/src/main/java/babushka/Client.java | 31 ++---------- .../babushka/connection/SocketManager.java | 50 ++++++------------- .../src/test/java/babushka/ClientTest.java | 6 +-- 3 files changed, 21 insertions(+), 66 deletions(-) diff --git a/java/client/src/main/java/babushka/Client.java b/java/client/src/main/java/babushka/Client.java index 0d61efaa79..e8b6099a73 100644 --- a/java/client/src/main/java/babushka/Client.java +++ b/java/client/src/main/java/babushka/Client.java @@ -1,6 +1,5 @@ package babushka; -import babushka.connection.ReadHandler; import babushka.connection.SocketManager; import com.google.common.annotations.VisibleForTesting; import connection_request.ConnectionRequestOuterClass.ConnectionRequest; @@ -11,7 +10,6 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; -import org.apache.commons.lang3.tuple.Pair; import redis_request.RedisRequestOuterClass.Command; import redis_request.RedisRequestOuterClass.Command.ArgsArray; import redis_request.RedisRequestOuterClass.RedisRequest; @@ -71,20 +69,6 @@ public void connectToRedis(String host, int port, boolean useSsl, boolean cluste waitForResult(asyncConnectToRedis(host, port, useSsl, clusterMode)); } - /** - * Create a unique callback ID (request ID) and a corresponding registered future for the - * response.
- * Should be used for every request submitted to ensure that it can be tracked by {@link - * SocketManager} and {@link ReadHandler}. - * - * @return New callback ID and new future to be returned to user. - */ - private synchronized Pair> getNextCallback() { - var future = new CompletableFuture(); - int callbackId = socketManager.registerRequest(future); - return Pair.of(callbackId, future); - } - /** Build a protobuf connection request. See {@link #connectToRedis}. */ // TODO support more parameters and/or configuration object @VisibleForTesting @@ -112,14 +96,10 @@ static ConnectionRequest getConnectionRequest( public CompletableFuture asyncConnectToRedis( String host, int port, boolean useSsl, boolean clusterMode) { var request = getConnectionRequest(host, port, useSsl, clusterMode); - var future = new CompletableFuture(); - socketManager.registerConnection(future); - socketManager.writeAndFlush(request); - return future; + return socketManager.connect(request); } private CompletableFuture submitNewCommand(RequestType command, List args) { - var commandId = getNextCallback(); // TODO this explicitly uses ForkJoin thread pool. May be we should use another one. return CompletableFuture.supplyAsync( () -> { @@ -128,18 +108,15 @@ private CompletableFuture submitNewCommand(RequestType command, List f); } diff --git a/java/client/src/main/java/babushka/connection/SocketManager.java b/java/client/src/main/java/babushka/connection/SocketManager.java index e134d83b7e..df2a6cf7c2 100644 --- a/java/client/src/main/java/babushka/connection/SocketManager.java +++ b/java/client/src/main/java/babushka/connection/SocketManager.java @@ -4,7 +4,7 @@ import babushka.BabushkaCoreNativeDefinitions; import babushka.Client; -import com.google.protobuf.GeneratedMessageV3; +import connection_request.ConnectionRequestOuterClass.ConnectionRequest; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBufAllocator; import io.netty.channel.Channel; @@ -20,6 +20,7 @@ import io.netty.util.concurrent.DefaultThreadFactory; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicInteger; +import redis_request.RedisRequestOuterClass.RedisRequest; /** * A UDS connection manager. This class is responsible for: @@ -91,7 +92,7 @@ public static synchronized SocketManager getInstance() { } /** The singleton instance. */ - private static SocketManager INSTANCE = null; + private static SocketManager INSTANCE = new SocketManager(); /** Constructor for the single instance. */ private SocketManager() { @@ -122,44 +123,23 @@ cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) } } - /** - * Write a protobuf message to the socket.
- * Always {@link #registerRequest} before submitting! - */ - public void write(GeneratedMessageV3 message) { - channel.write(message.toByteArray()); - } - - /** - * Write a protobuf message to the socket and flush it.
- * Always {@link #registerRequest} before submitting! - */ - public void writeAndFlush(GeneratedMessageV3 message) { - channel.writeAndFlush(message.toByteArray()); - } - - /** - * Register a new request to be sent. Socket Manager takes responsibility for tracking the - * returned callback ID in all incoming responses. Once response received, the given future - * completes with it. - * - * @param future A client promise for response. - * @return Unique callback ID which should set into request. - */ - public int registerRequest(CompletableFuture future) { + /** Write a protobuf message to the socket. */ + public CompletableFuture write(RedisRequest.Builder request, boolean flush) { + var future = new CompletableFuture(); int callbackId = requestId.incrementAndGet(); + request.setCallbackIdx(callbackId); SocketManagerResources.responses.put(callbackId, future); - return callbackId; + if (flush) channel.writeAndFlush(request.build().toByteArray()); + else channel.write(request.build().toByteArray()); + return future; } - /** - * Register a new connection request similar to {@link #registerRequest}.
- * No callback ID returned, because connection request/response pair have no such field (subject - * to change). Track issue #600 for more - * details. - */ - public void registerConnection(CompletableFuture future) { + /** Write a protobuf message to the socket. */ + public CompletableFuture connect(ConnectionRequest request) { + var future = new CompletableFuture(); SocketManagerResources.connectionRequests.add(future); + channel.writeAndFlush(request.toByteArray()); + return future; } /** diff --git a/java/client/src/test/java/babushka/ClientTest.java b/java/client/src/test/java/babushka/ClientTest.java index af03243416..5014d20c98 100644 --- a/java/client/src/test/java/babushka/ClientTest.java +++ b/java/client/src/test/java/babushka/ClientTest.java @@ -2,14 +2,13 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; import babushka.connection.SocketManager; import connection_request.ConnectionRequestOuterClass.ConnectionRequest; import java.util.concurrent.CompletableFuture; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.Mockito; import response.ResponseOuterClass; public class ClientTest { @@ -41,8 +40,7 @@ public void test_asyncConnectToRedis_success() { // verify // assertTrue(connectionResponse instanceof CompletableFuture); - Mockito.verify(socketManager, times(1)).registerConnection(eq(connectionResponse)); - Mockito.verify(socketManager, times(1)).writeAndFlush(eq(connectionRequest)); + verify(socketManager).connect(eq(connectionRequest)); // teardown } From 5481dc297b94e6fcb105ae8db01f649652fb7d49 Mon Sep 17 00:00:00 2001 From: Andrew Carbonetto Date: Fri, 1 Dec 2023 09:07:48 -0800 Subject: [PATCH 76/81] Refactor to Client-Manager-Connection layers Signed-off-by: Andrew Carbonetto --- java/.gitignore | 2 +- .../benchmarks/clients/AsyncClient.java | 2 +- .../clients/babushka/JniNettyClient.java | 12 +- java/client/build.gradle | 6 +- .../BabushkaCoreNativeDefinitions.java | 11 - .../client/src/main/java/babushka/Client.java | 164 - .../src/main/java/babushka/api/Client.java | 135 + .../connection/SocketManagerResources.java | 28 - .../SocketConnection.java} | 117 +- .../handlers}/ChannelBuilder.java | 10 +- .../handlers}/ReadHandler.java | 11 +- .../handlers}/WriteHandler.java | 2 +- .../BabushkaCoreNativeDefinitions.java | 25 + .../babushka/managers/CallbackManager.java | 71 + .../babushka/managers/CommandManager.java | 94 + .../babushka/managers/ConnectionManager.java | 79 + .../models/protobuf/RedisResponse.java | 13 + .../ConnectionRequestOuterClass.java | 3894 ++++++++++ .../redis_request/RedisRequestOuterClass.java | 6868 +++++++++++++++++ .../protobuf/response/ResponseOuterClass.java | 2162 ++++++ .../src/test/java/babushka/ClientTest.java | 95 +- 21 files changed, 13487 insertions(+), 314 deletions(-) delete mode 100644 java/client/src/main/java/babushka/BabushkaCoreNativeDefinitions.java delete mode 100644 java/client/src/main/java/babushka/Client.java create mode 100644 java/client/src/main/java/babushka/api/Client.java delete mode 100644 java/client/src/main/java/babushka/connection/SocketManagerResources.java rename java/client/src/main/java/babushka/{connection/SocketManager.java => connectors/SocketConnection.java} (54%) rename java/client/src/main/java/babushka/{connection => connectors/handlers}/ChannelBuilder.java (65%) rename java/client/src/main/java/babushka/{connection => connectors/handlers}/ReadHandler.java (81%) rename java/client/src/main/java/babushka/{connection => connectors/handlers}/WriteHandler.java (95%) create mode 100644 java/client/src/main/java/babushka/ffi/resolvers/BabushkaCoreNativeDefinitions.java create mode 100644 java/client/src/main/java/babushka/managers/CallbackManager.java create mode 100644 java/client/src/main/java/babushka/managers/CommandManager.java create mode 100644 java/client/src/main/java/babushka/managers/ConnectionManager.java create mode 100644 java/client/src/main/java/babushka/models/protobuf/RedisResponse.java create mode 100644 java/client/src/main/java/babushka/models/protobuf/connection_request/ConnectionRequestOuterClass.java create mode 100644 java/client/src/main/java/babushka/models/protobuf/redis_request/RedisRequestOuterClass.java create mode 100644 java/client/src/main/java/babushka/models/protobuf/response/ResponseOuterClass.java diff --git a/java/.gitignore b/java/.gitignore index a7b8d6a177..23955aa0e8 100644 --- a/java/.gitignore +++ b/java/.gitignore @@ -5,4 +5,4 @@ build # Ignore protobuf generated files -protobuf +models/protobuf diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/clients/AsyncClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/AsyncClient.java index 455512a78c..bfab12a5d1 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/clients/AsyncClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/AsyncClient.java @@ -13,7 +13,7 @@ public interface AsyncClient extends Client { Future asyncSet(String key, String value); - Future asyncGet(String key); + Future asyncGet(String key); default T waitForResult(Future future) { return waitForResult(future, DEFAULT_TIMEOUT_MILLISECOND); diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java index 1ede857092..d326786a7a 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java @@ -1,14 +1,14 @@ package babushka.benchmarks.clients.babushka; -import static response.ResponseOuterClass.Response; - -import babushka.Client; +import babushka.api.Client; import babushka.benchmarks.clients.AsyncClient; import babushka.benchmarks.clients.SyncClient; import babushka.benchmarks.utils.ConnectionSettings; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; +import response.ResponseOuterClass.Response; -public class JniNettyClient implements SyncClient, AsyncClient { +public class JniNettyClient implements SyncClient, AsyncClient { private final Client testClient; private String name = "JNI Netty"; @@ -34,7 +34,7 @@ public void connectToRedis(ConnectionSettings connectionSettings) { } @Override - public Future asyncConnectToRedis(ConnectionSettings connectionSettings) { + public Future asyncConnectToRedis(ConnectionSettings connectionSettings) { return testClient.asyncConnectToRedis( connectionSettings.host, connectionSettings.port, @@ -43,7 +43,7 @@ public Future asyncConnectToRedis(ConnectionSettings connectionSetting } @Override - public Future asyncSet(String key, String value) { + public Future asyncSet(String key, String value) { return testClient.asyncSet(key, value); } diff --git a/java/client/build.gradle b/java/client/build.gradle index 460ad496a5..c05b7f5620 100644 --- a/java/client/build.gradle +++ b/java/client/build.gradle @@ -34,11 +34,11 @@ dependencies { tasks.register('protobuf', Exec) { doFirst { - project.mkdir(Paths.get(project.projectDir.path, 'src/main/java/babushka/protobuf').toString()) + project.mkdir(Paths.get(project.projectDir.path, 'src/main/java/babushka/models/protobuf').toString()) } commandLine 'protoc', '-Iprotobuf=babushka-core/src/protobuf/', - '--java_out=java/client/src/main/java/babushka/protobuf', + '--java_out=java/client/src/main/java/babushka/models/protobuf', 'babushka-core/src/protobuf/connection_request.proto', 'babushka-core/src/protobuf/redis_request.proto', 'babushka-core/src/protobuf/response.proto' @@ -47,7 +47,7 @@ tasks.register('protobuf', Exec) { tasks.register('cleanProtobuf') { doFirst { - project.delete(Paths.get(project.projectDir.path, 'src/main/java/babushka/protobuf').toString()) + project.delete(Paths.get(project.projectDir.path, 'src/main/java/babushka/models/protobuf').toString()) } } diff --git a/java/client/src/main/java/babushka/BabushkaCoreNativeDefinitions.java b/java/client/src/main/java/babushka/BabushkaCoreNativeDefinitions.java deleted file mode 100644 index aaa7f383c2..0000000000 --- a/java/client/src/main/java/babushka/BabushkaCoreNativeDefinitions.java +++ /dev/null @@ -1,11 +0,0 @@ -package babushka; - -public class BabushkaCoreNativeDefinitions { - public static native String startSocketListenerExternal() throws Exception; - - public static native Object valueFromPointer(long pointer); - - static { - System.loadLibrary("babushka"); - } -} diff --git a/java/client/src/main/java/babushka/Client.java b/java/client/src/main/java/babushka/Client.java deleted file mode 100644 index e8b6099a73..0000000000 --- a/java/client/src/main/java/babushka/Client.java +++ /dev/null @@ -1,164 +0,0 @@ -package babushka; - -import babushka.connection.SocketManager; -import com.google.common.annotations.VisibleForTesting; -import connection_request.ConnectionRequestOuterClass.ConnectionRequest; -import connection_request.ConnectionRequestOuterClass.NodeAddress; -import connection_request.ConnectionRequestOuterClass.ReadFrom; -import connection_request.ConnectionRequestOuterClass.TlsMode; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import redis_request.RedisRequestOuterClass.Command; -import redis_request.RedisRequestOuterClass.Command.ArgsArray; -import redis_request.RedisRequestOuterClass.RedisRequest; -import redis_request.RedisRequestOuterClass.RequestType; -import redis_request.RedisRequestOuterClass.Routes; -import redis_request.RedisRequestOuterClass.SimpleRoutes; -import response.ResponseOuterClass.Response; - -public class Client { - private static final long DEFAULT_TIMEOUT_MILLISECONDS = 1000; - - private final SocketManager socketManager; - - public Client() { - this(SocketManager.getInstance()); - } - - @VisibleForTesting - Client(SocketManager socketManager) { - this.socketManager = socketManager; - } - - /** - * Sync (blocking) set. See async option in {@link #asyncSet}.
- * See REDIS docs for SET. - * - * @param key The key name - * @param value The value to set - */ - public void set(String key, String value) { - waitForResult(asyncSet(key, value)); - // TODO parse response and rethrow an exception if there is an error - } - - /** - * Sync (blocking) get. See async option in {@link #asyncGet}.
- * See REDIS docs for GET. - * - * @param key The key name - */ - public String get(String key) { - return waitForResult(asyncGet(key)); - // TODO support non-strings - } - - /** - * Sync (blocking) connect to REDIS. See async option in {@link #asyncConnectToRedis}. - * - * @param host Server address - * @param port Server port - * @param useSsl true if communication with the server or cluster should use Transport Level - * Security - * @param clusterMode true if REDIS instance runs in the cluster mode - */ - // TODO support configuration object which holds more parameters (e.g. multiple addresses, etc) - public void connectToRedis(String host, int port, boolean useSsl, boolean clusterMode) { - waitForResult(asyncConnectToRedis(host, port, useSsl, clusterMode)); - } - - /** Build a protobuf connection request. See {@link #connectToRedis}. */ - // TODO support more parameters and/or configuration object - @VisibleForTesting - static ConnectionRequest getConnectionRequest( - String host, int port, boolean useSsl, boolean clusterMode) { - return ConnectionRequest.newBuilder() - .addAddresses(NodeAddress.newBuilder().setHost(host).setPort(port).build()) - .setTlsMode(useSsl ? TlsMode.SecureTls : TlsMode.NoTls) - .setClusterModeEnabled(clusterMode) - .setReadFrom(ReadFrom.Primary) - .setDatabaseId(0) - .build(); - } - - /** - * Async (non-blocking) connect to REDIS. See sync option in {@link #connectToRedis}. - * - * @param host Server address - * @param port Server port - * @param useSsl true if communication with the server or cluster should use Transport Level - * Security - * @param clusterMode true if REDIS instance runs in the cluster mode - */ - // TODO support configuration object which holds more parameters (e.g. multiple addresses, etc) - public CompletableFuture asyncConnectToRedis( - String host, int port, boolean useSsl, boolean clusterMode) { - var request = getConnectionRequest(host, port, useSsl, clusterMode); - return socketManager.connect(request); - } - - private CompletableFuture submitNewCommand(RequestType command, List args) { - // TODO this explicitly uses ForkJoin thread pool. May be we should use another one. - return CompletableFuture.supplyAsync( - () -> { - var commandArgs = ArgsArray.newBuilder(); - for (var arg : args) { - commandArgs.addArgs(arg); - } - - RedisRequest.Builder builder = - RedisRequest.newBuilder() - .setSingleCommand( - Command.newBuilder() - .setRequestType(command) - .setArgsArray(commandArgs.build()) - .build()) - .setRoute(Routes.newBuilder().setSimpleRoutes(SimpleRoutes.AllNodes).build()); - return socketManager.write(builder, true); - }) - .thenCompose(f -> f); - } - - /** - * Async (non-blocking) set. See sync option in {@link #set}.
- * See REDIS docs for SET. - * - * @param key The key name - * @param value The value to set - */ - public Future asyncSet(String key, String value) { - return submitNewCommand(RequestType.SetString, List.of(key, value)); - } - - /** - * Async (non-blocking) get. See sync option in {@link #get}.
- * See REDIS docs for GET. - * - * @param key The key name - */ - public Future asyncGet(String key) { - return submitNewCommand(RequestType.GetString, List.of(key)) - .thenApply( - response -> - response.getRespPointer() != 0 - ? BabushkaCoreNativeDefinitions.valueFromPointer(response.getRespPointer()) - .toString() - : null); - } - - /** Get the future result with default timeout. */ - T waitForResult(Future future) { - return waitForResult(future, DEFAULT_TIMEOUT_MILLISECONDS); - } - - /** Get the future result with given timeout in ms. */ - T waitForResult(Future future, long timeout) { - try { - return future.get(timeout, TimeUnit.MILLISECONDS); - } catch (Exception ignored) { - return null; - } - } -} diff --git a/java/client/src/main/java/babushka/api/Client.java b/java/client/src/main/java/babushka/api/Client.java new file mode 100644 index 0000000000..6a0c09c0db --- /dev/null +++ b/java/client/src/main/java/babushka/api/Client.java @@ -0,0 +1,135 @@ +package babushka.api; + +import babushka.connectors.SocketConnection; +import babushka.ffi.resolvers.BabushkaCoreNativeDefinitions; +import babushka.managers.CallbackManager; +import babushka.managers.CommandManager; +import babushka.managers.ConnectionManager; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import redis_request.RedisRequestOuterClass; +import response.ResponseOuterClass.Response; + +public class Client { + + private static final long DEFAULT_TIMEOUT_MILLISECONDS = 1000; + + private final ConnectionManager connectionManager; + private final CommandManager commandManager; + + // TODO: Move this to a Factory/Builder class + public Client() { + CallbackManager callbackManager = new CallbackManager(); + + BabushkaCoreNativeDefinitions nativeDefinitions = new BabushkaCoreNativeDefinitions(); + String socketPath = nativeDefinitions.getSocket(); + + SocketConnection socketConnection = SocketConnection.getInstance(socketPath); + + this.connectionManager = new ConnectionManager(callbackManager, nativeDefinitions, socketConnection); + this.commandManager = new CommandManager(callbackManager, socketConnection, nativeDefinitions); + } + + public Client(ConnectionManager connectionManager, CommandManager commandManager) { + this.connectionManager = connectionManager; + this.commandManager = commandManager; + } + + /** + * Sync (blocking) connect to REDIS. See async option in {@link #asyncConnectToRedis}. + * + * @param host Server address + * @param port Server port + * @param useSsl true if communication with the server or cluster should use Transport Level + * Security + * @param clusterMode true if REDIS instance runs in the cluster mode + */ + // TODO support configuration object which holds more parameters (e.g. multiple addresses, etc) + public void connectToRedis(String host, int port, boolean useSsl, boolean clusterMode) { + waitForResult(asyncConnectToRedis(host, port, useSsl, clusterMode)); + } + + /** + * Async (non-blocking) connect to REDIS. See sync option in {@link #connectToRedis}. + * + * @param host Server address + * @param port Server port + * @param useSsl true if communication with the server or cluster should use Transport Level + * Security + * @param clusterMode true if REDIS instance runs in the cluster mode + */ + // TODO support configuration object which holds more parameters (e.g. multiple addresses, etc) + public CompletableFuture asyncConnectToRedis( + String host, int port, boolean useSsl, boolean clusterMode) { + return connectionManager.connectToRedis(host, port, useSsl, clusterMode); + + } + + /** + * Close all connections and release resources + */ + public void closeConnection() { + connectionManager.closeConnection(); + } + + /** + * Sync (blocking) set. See async option in {@link #asyncSet}.
+ * See REDIS docs for SET. + * + * @param key The key name + * @param value The value to set + */ + public void set(String key, String value) { + waitForResult(asyncSet(key, value)); + // TODO parse response and rethrow an exception if there is an error + } + + /** + * Sync (blocking) get. See async option in {@link #asyncGet}.
+ * See REDIS docs for GET. + * + * @param key The key name + */ + public String get(String key) { + return waitForResult(asyncGet(key)); + // TODO support non-strings + } + + /** + * Async (non-blocking) set. See sync option in {@link #set}.
+ * See REDIS docs for SET. + * + * @param key The key name + * @param value The value to set + */ + public Future asyncSet(String key, String value) { + return commandManager.submitNewCommand( + RedisRequestOuterClass.RequestType.SetString, List.of(key, value)); + } + + /** + * Async (non-blocking) get. See sync option in {@link #get}.
+ * See REDIS docs for GET. + * + * @param key The key name + */ + public Future asyncGet(String key) { + return commandManager.submitNewCommand(RedisRequestOuterClass.RequestType.GetString, List.of(key)); + } + + /** Get the future result with default timeout. */ + T waitForResult(Future future) { + return waitForResult(future, DEFAULT_TIMEOUT_MILLISECONDS); + } + + /** Get the future result with given timeout in ms. */ + T waitForResult(Future future, long timeout) { + try { + return future.get(timeout, TimeUnit.MILLISECONDS); + } catch (Exception ignored) { + return null; + } + } +} diff --git a/java/client/src/main/java/babushka/connection/SocketManagerResources.java b/java/client/src/main/java/babushka/connection/SocketManagerResources.java deleted file mode 100644 index bc4aa51f29..0000000000 --- a/java/client/src/main/java/babushka/connection/SocketManagerResources.java +++ /dev/null @@ -1,28 +0,0 @@ -package babushka.connection; - -import java.util.Deque; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedDeque; -import response.ResponseOuterClass.Response; - -/** Holder for resources owned by {@link SocketManager} and used by {@link ReadHandler}. */ -public class SocketManagerResources { - - /** - * Storage of Futures to handle responses. Map key is callback id, which starts from 1.
- * Each future is a promise for every submitted by user request. - */ - public static final Map> responses = - new ConcurrentHashMap<>(); - - /** - * Storage for connection requests similar to {@link #responses}. Unfortunately, connection - * requests can't be stored in the same storage, because callback ID = 0 is hardcoded for - * connection requests. Will be removed once issue #600 on GH fixed. - */ - public static final Deque> connectionRequests = - new ConcurrentLinkedDeque<>(); -} diff --git a/java/client/src/main/java/babushka/connection/SocketManager.java b/java/client/src/main/java/babushka/connectors/SocketConnection.java similarity index 54% rename from java/client/src/main/java/babushka/connection/SocketManager.java rename to java/client/src/main/java/babushka/connectors/SocketConnection.java index df2a6cf7c2..51f7d7cfb9 100644 --- a/java/client/src/main/java/babushka/connection/SocketManager.java +++ b/java/client/src/main/java/babushka/connectors/SocketConnection.java @@ -1,10 +1,9 @@ -package babushka.connection; +package babushka.connectors; -import static response.ResponseOuterClass.Response; - -import babushka.BabushkaCoreNativeDefinitions; -import babushka.Client; -import connection_request.ConnectionRequestOuterClass.ConnectionRequest; +import babushka.connectors.handlers.ChannelBuilder; +import babushka.managers.CallbackManager; +import babushka.managers.ConnectionManager; +import com.google.protobuf.GeneratedMessageV3; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBufAllocator; import io.netty.channel.Channel; @@ -18,44 +17,32 @@ import io.netty.channel.kqueue.KQueueEventLoopGroup; import io.netty.channel.unix.DomainSocketAddress; import io.netty.util.concurrent.DefaultThreadFactory; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.atomic.AtomicInteger; -import redis_request.RedisRequestOuterClass.RedisRequest; -/** - * A UDS connection manager. This class is responsible for: - * - *
    - *
  • opening a connection (channel) though the UDS; - *
  • allocating the corresponding resources, e.g. thread pools (see also {@link - * SocketManagerResources}); - *
  • handling connection requests; - *
  • providing unique request ID (callback ID); - *
  • handling REDIS requests; - *
  • closing connection; - *
- * - * Note: should not be used outside of {@link Client}! - */ -public class SocketManager { +public class SocketConnection { + + /** A channel to make socket interactions with. */ + private Channel channel; + + /** Thread pool supplied to Netty to perform all async IO. */ + private EventLoopGroup group; + + private String socketPath; + + /** The singleton instance. */ + private static SocketConnection INSTANCE = null; /** - * Make an FFI call to obtain the socket path. + * Creates (if not yet created) and returns the singleton instance of the {@link ConnectionManager}. * - * @return A UDS path. + * @return a {@link ConnectionManager} instance. */ - private static String getSocket() { - try { - return BabushkaCoreNativeDefinitions.startSocketListenerExternal(); - } catch (Exception | UnsatisfiedLinkError e) { - System.err.printf("Failed to create a UDS connection: %s%n%n", e); - throw new RuntimeException(e); + public static synchronized SocketConnection getInstance(String socketPath) { + if (INSTANCE == null) { + INSTANCE = new SocketConnection(socketPath); } + return INSTANCE; } - /** Unique request ID (callback ID). Thread-safe. */ - private final AtomicInteger requestId = new AtomicInteger(0); - // At the moment, Windows is not supported // Probably we should use NIO (NioEventLoopGroup) for Windows. // TODO support IO-Uring and NIO @@ -73,38 +60,17 @@ private static boolean isMacOs() { } } - /** A channel to make socket interactions with. */ - private Channel channel = null; - - /** Thread pool supplied to Netty to perform all async IO. */ - private EventLoopGroup group = null; - - /** - * Creates (if not yet created) and returns the singleton instance of the {@link SocketManager}. - * - * @return a {@link SocketManager} instance. - */ - public static synchronized SocketManager getInstance() { - if (INSTANCE == null) { - INSTANCE = new SocketManager(); - } - return INSTANCE; - } - - /** The singleton instance. */ - private static SocketManager INSTANCE = new SocketManager(); - /** Constructor for the single instance. */ - private SocketManager() { + private SocketConnection(String socketPath) { boolean isMacOs = isMacOs(); try { int cpuCount = Runtime.getRuntime().availableProcessors(); group = isMacOs ? new KQueueEventLoopGroup( - cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) + cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) : new EpollEventLoopGroup( - cpuCount, new DefaultThreadFactory("NettyWrapper-epoll-elg", true)); + cpuCount, new DefaultThreadFactory("NettyWrapper-epoll-elg", true)); channel = new Bootstrap() .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024, 4096)) @@ -112,7 +78,7 @@ cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) .group(group) .channel(isMacOs ? KQueueDomainSocketChannel.class : EpollDomainSocketChannel.class) .handler(new ChannelBuilder()) - .connect(new DomainSocketAddress(getSocket())) + .connect(new DomainSocketAddress(socketPath)) .sync() .channel(); @@ -123,23 +89,18 @@ cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) } } - /** Write a protobuf message to the socket. */ - public CompletableFuture write(RedisRequest.Builder request, boolean flush) { - var future = new CompletableFuture(); - int callbackId = requestId.incrementAndGet(); - request.setCallbackIdx(callbackId); - SocketManagerResources.responses.put(callbackId, future); - if (flush) channel.writeAndFlush(request.build().toByteArray()); - else channel.write(request.build().toByteArray()); - return future; + /** + * Write a protobuf message to the socket. + */ + public void write(GeneratedMessageV3 message) { + channel.write(message.toByteArray()); } - /** Write a protobuf message to the socket. */ - public CompletableFuture connect(ConnectionRequest request) { - var future = new CompletableFuture(); - SocketManagerResources.connectionRequests.add(future); - channel.writeAndFlush(request.toByteArray()); - return future; + /** + * Write a protobuf message to the socket and flush it. + */ + public void writeAndFlush(GeneratedMessageV3 message) { + channel.writeAndFlush(message.toByteArray()); } /** @@ -151,8 +112,8 @@ public void close() { group.shutdownGracefully(); INSTANCE = null; // TODO should we reply in uncompleted futures? - SocketManagerResources.connectionRequests.clear(); - SocketManagerResources.responses.clear(); + CallbackManager.connectionRequests.clear(); + CallbackManager.responses.clear(); } /** diff --git a/java/client/src/main/java/babushka/connection/ChannelBuilder.java b/java/client/src/main/java/babushka/connectors/handlers/ChannelBuilder.java similarity index 65% rename from java/client/src/main/java/babushka/connection/ChannelBuilder.java rename to java/client/src/main/java/babushka/connectors/handlers/ChannelBuilder.java index efe074b1c7..ca68892c6a 100644 --- a/java/client/src/main/java/babushka/connection/ChannelBuilder.java +++ b/java/client/src/main/java/babushka/connectors/handlers/ChannelBuilder.java @@ -1,12 +1,14 @@ -package babushka.connection; +package babushka.connectors.handlers; +import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.unix.UnixChannel; import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; import lombok.NonNull; -/** Builder for the channel used by {@link SocketManager}. */ +/** Builder for the channel used by {@link babushka.connectors.SocketConnection}. */ public class ChannelBuilder extends ChannelInitializer { @Override public void initChannel(@NonNull UnixChannel ch) { @@ -14,7 +16,7 @@ public void initChannel(@NonNull UnixChannel ch) { // https://netty.io/4.1/api/io/netty/handler/codec/protobuf/ProtobufEncoder.html .addLast("protobufDecoder", new ProtobufVarint32FrameDecoder()) .addLast("protobufEncoder", new ProtobufVarint32LengthFieldPrepender()) - .addLast(new ReadHandler()) - .addLast(new WriteHandler()); + .addLast(new ChannelInboundHandlerAdapter()) + .addLast(new ChannelOutboundHandlerAdapter()); } } diff --git a/java/client/src/main/java/babushka/connection/ReadHandler.java b/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java similarity index 81% rename from java/client/src/main/java/babushka/connection/ReadHandler.java rename to java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java index ef69ef59a7..3b5a651292 100644 --- a/java/client/src/main/java/babushka/connection/ReadHandler.java +++ b/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java @@ -1,10 +1,11 @@ -package babushka.connection; +package babushka.connectors.handlers; +import babushka.managers.CallbackManager; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import lombok.NonNull; -import response.ResponseOuterClass.Response; +import babushka.models.protobuf.response.ResponseOuterClass.Response; /** Handler for inbound traffic though UDS. Used by Netty. */ public class ReadHandler extends ChannelInboundHandlerAdapter { @@ -30,10 +31,10 @@ public void channelRead(@NonNull ChannelHandlerContext ctx, @NonNull Object msg) // can't distinguish connection requests since they have no // callback ID // https://github.com/aws/babushka/issues/600 - SocketManagerResources.connectionRequests.pop().complete(response); + CallbackManager.connectionRequests.pop().complete(response); } else { - SocketManagerResources.responses.get(callbackId).complete(response); - SocketManagerResources.responses.remove(callbackId); + CallbackManager.responses.get(callbackId).complete(response); + CallbackManager.responses.remove(callbackId); } buf.release(); } diff --git a/java/client/src/main/java/babushka/connection/WriteHandler.java b/java/client/src/main/java/babushka/connectors/handlers/WriteHandler.java similarity index 95% rename from java/client/src/main/java/babushka/connection/WriteHandler.java rename to java/client/src/main/java/babushka/connectors/handlers/WriteHandler.java index 6a1885190a..7e36f49d9b 100644 --- a/java/client/src/main/java/babushka/connection/WriteHandler.java +++ b/java/client/src/main/java/babushka/connectors/handlers/WriteHandler.java @@ -1,4 +1,4 @@ -package babushka.connection; +package babushka.connectors.handlers; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; diff --git a/java/client/src/main/java/babushka/ffi/resolvers/BabushkaCoreNativeDefinitions.java b/java/client/src/main/java/babushka/ffi/resolvers/BabushkaCoreNativeDefinitions.java new file mode 100644 index 0000000000..377e01fdbf --- /dev/null +++ b/java/client/src/main/java/babushka/ffi/resolvers/BabushkaCoreNativeDefinitions.java @@ -0,0 +1,25 @@ +package babushka.ffi.resolvers; + +public class BabushkaCoreNativeDefinitions { + public static native String startSocketListenerExternal() throws Exception; + + public static native Object valueFromPointer(long pointer); + + static { + System.loadLibrary("babushka"); + } + + /** + * Make an FFI call to obtain the socket path. + * + * @return A UDS path. + */ + public static String getSocket() { + try { + return startSocketListenerExternal(); + } catch (Exception | UnsatisfiedLinkError e) { + System.err.printf("Failed to create a UDS connection: %s%n%n", e); + throw new RuntimeException(e); + } + } +} diff --git a/java/client/src/main/java/babushka/managers/CallbackManager.java b/java/client/src/main/java/babushka/managers/CallbackManager.java new file mode 100644 index 0000000000..4938f72009 --- /dev/null +++ b/java/client/src/main/java/babushka/managers/CallbackManager.java @@ -0,0 +1,71 @@ +package babushka.managers; + +import babushka.connectors.handlers.ReadHandler; +import java.util.Deque; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedDeque; +import java.util.concurrent.atomic.AtomicInteger; +import org.apache.commons.lang3.tuple.Pair; +import response.ResponseOuterClass.Response; + +/** Holder for resources owned by {@link CommandManager} and used by {@link ReadHandler}. */ +public class CallbackManager { + + /** + * Storage of Futures to handle responses. Map key is callback id, which starts from 1.
+ * Each future is a promise for every submitted by user request. + */ + public static final Map> responses = + new ConcurrentHashMap<>(); + + /** + * Storage for connection requests similar to {@link #responses}. Unfortunately, connection + * requests can't be stored in the same storage, because callback ID = 0 is hardcoded for + * connection requests. Will be removed once issue #600 on GH fixed. + */ + public static final Deque> connectionRequests = + new ConcurrentLinkedDeque<>(); + + /** Unique request ID (callback ID). Thread-safe. */ + private final AtomicInteger requestId = new AtomicInteger(0); + + /** + * Register a new request to be sent. Socket Manager takes responsibility for tracking the + * returned callback ID in all incoming responses. Once response received, the given future + * completes with it. + * + * @param future A client promise for response. + * @return Unique callback ID which should set into request. + */ + public int registerRequest(CompletableFuture future) { + int callbackId = requestId.incrementAndGet(); + CallbackManager.responses.put(callbackId, future); + return callbackId; + } + + /** + * Register a new connection request similar to {@link #registerRequest}.
+ * No callback ID returned, because connection request/response pair have no such field (subject + * to change). Track issue #600 for more + * details. + */ + public void registerConnection(CompletableFuture future) { + CallbackManager.connectionRequests.add(future); + } + + + /** + * Create a unique callback ID (request ID) and a corresponding registered future for the + * response.
+ * + * @return New callback ID and new future to be returned to user. + */ + private synchronized Pair> getNextCallback() { + var future = new CompletableFuture(); + int callbackId = registerRequest(future); + return Pair.of(callbackId, future); + } +} diff --git a/java/client/src/main/java/babushka/managers/CommandManager.java b/java/client/src/main/java/babushka/managers/CommandManager.java new file mode 100644 index 0000000000..52a3aa1792 --- /dev/null +++ b/java/client/src/main/java/babushka/managers/CommandManager.java @@ -0,0 +1,94 @@ +package babushka.managers; + +import babushka.connectors.SocketConnection; +import babushka.ffi.resolvers.BabushkaCoreNativeDefinitions; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import redis_request.RedisRequestOuterClass; +import redis_request.RedisRequestOuterClass.RedisRequest; +import redis_request.RedisRequestOuterClass.RequestType; +import response.ResponseOuterClass; +import response.ResponseOuterClass.Response; + +/** + * A UDS connection manager. This class is responsible for: + * + *
    + *
  • opening a connection (channel) though the UDS; + *
  • allocating the corresponding resources, e.g. thread pools (see also {@link + * CallbackManager}); + *
  • handling connection requests; + *
  • providing unique request ID (callback ID); + *
  • handling REDIS requests; + *
  • closing connection; + *
+ */ +public class CommandManager { + + private final CallbackManager callbackManager; + private final SocketConnection socketConnection; + private final BabushkaCoreNativeDefinitions nativeDefinitions; + + public CommandManager(CallbackManager callbackManager, SocketConnection socketConnection, BabushkaCoreNativeDefinitions nativeDefinitions) { + this.callbackManager = callbackManager; + this.socketConnection = socketConnection; + this.nativeDefinitions = nativeDefinitions; + } + + private static RedisRequest redisSingleCommand(RequestType command, List args) { + var commandArgs = RedisRequestOuterClass.Command.ArgsArray.newBuilder(); + for (var arg : args) { + commandArgs.addArgs(arg); + } + + RedisRequest.Builder builder = + RedisRequest.newBuilder() + .setSingleCommand( + RedisRequestOuterClass.Command.newBuilder() + .setRequestType(command) + .setArgsArray(commandArgs.build()) + .build()) + .setRoute(RedisRequestOuterClass.Routes.newBuilder().setSimpleRoutes( + RedisRequestOuterClass.SimpleRoutes.AllNodes).build()); + + return builder.build(); + } + + /** + * Returns a String from the redis response if a resp2 response exists, or Ok. + * Otherwise, returns null + * @param response Redis Response + * @return String or null + */ + public static String resolveRedisResponseToString(Response response) { + if (response.hasConstantResponse()) { + return BabushkaCoreNativeDefinitions.valueFromPointer(response.getRespPointer()).toString(); + } + if (response.hasRespPointer()) { + return response.getConstantResponse().toString(); + } + return null; + } + + /** + * + * @param command + * @param args + * @return + */ + public CompletableFuture submitNewCommand(RequestType command, List args) { + // TODO this explicitly uses ForkJoin thread pool. May be we should use another one. + CompletableFuture future = new CompletableFuture<>(); + int callbackId = callbackManager.registerRequest(future); + + RedisRequest request = redisSingleCommand(command, args); + + return CompletableFuture.supplyAsync( + () -> { + socketConnection.writeAndFlush(request); + return future; + }) + .thenCompose(f -> f) + .thenApply(CommandManager::resolveRedisResponseToString); + } +} diff --git a/java/client/src/main/java/babushka/managers/ConnectionManager.java b/java/client/src/main/java/babushka/managers/ConnectionManager.java new file mode 100644 index 0000000000..3928e85d48 --- /dev/null +++ b/java/client/src/main/java/babushka/managers/ConnectionManager.java @@ -0,0 +1,79 @@ +package babushka.managers; + +import babushka.connectors.SocketConnection; +import babushka.ffi.resolvers.BabushkaCoreNativeDefinitions; +import com.google.common.annotations.VisibleForTesting; +import connection_request.ConnectionRequestOuterClass; +import connection_request.ConnectionRequestOuterClass.ConnectionRequest; +import java.util.concurrent.CompletableFuture; +import response.ResponseOuterClass; +import response.ResponseOuterClass.Response; + +/** + * A UDS connection manager. This class is responsible for: + * + *
    + *
  • opening a connection (channel) though the UDS; + *
  • allocating the corresponding resources, e.g. thread pools (see also {@link + * CallbackManager}); + *
  • handling connection requests; + *
  • providing unique request ID (callback ID); + *
  • handling REDIS requests; + *
  • closing connection; + *
+ */ +public class ConnectionManager { + + private final SocketConnection socketConnection; + private final BabushkaCoreNativeDefinitions nativeDefinitions; + private final CallbackManager callbackManager; + + public ConnectionManager(CallbackManager callbackManager, + BabushkaCoreNativeDefinitions nativeDefinitions, + SocketConnection socketConnection) { + this.socketConnection = socketConnection; + this.nativeDefinitions = nativeDefinitions; + this.callbackManager = callbackManager; + } + + /** + * Connect to Redis using a ProtoBuf connection request + * @param host + * @param port + * @param useSsl + * @param clusterMode + * @return + */ + public CompletableFuture connectToRedis( + String host, int port, boolean useSsl, boolean clusterMode) { + ConnectionRequest + request = getConnectionRequest(host, port, useSsl, clusterMode); + var future = new CompletableFuture(); + callbackManager.registerConnection(future); + socketConnection.writeAndFlush(request); + return future.thenApply(f -> f.getConstantResponse().toString()); + } + + /** + * Close socket connection and drop all channels + * TODO: provide feedback that the connection was properly closed + */ + public void closeConnection() { + socketConnection.close(); + } + + /** Build a protobuf connection request object */ + // TODO support more parameters and/or configuration object + @VisibleForTesting + private static ConnectionRequest getConnectionRequest( + String host, int port, boolean useSsl, boolean clusterMode) { + return ConnectionRequest.newBuilder() + .addAddresses( + ConnectionRequestOuterClass.NodeAddress.newBuilder().setHost(host).setPort(port).build()) + .setTlsMode(useSsl ? ConnectionRequestOuterClass.TlsMode.SecureTls : ConnectionRequestOuterClass.TlsMode.NoTls) + .setClusterModeEnabled(clusterMode) + .setReadFrom(ConnectionRequestOuterClass.ReadFrom.Primary) + .setDatabaseId(0) + .build(); + } +} diff --git a/java/client/src/main/java/babushka/models/protobuf/RedisResponse.java b/java/client/src/main/java/babushka/models/protobuf/RedisResponse.java new file mode 100644 index 0000000000..0a26213720 --- /dev/null +++ b/java/client/src/main/java/babushka/models/protobuf/RedisResponse.java @@ -0,0 +1,13 @@ +package babushka.models.protobuf; + +/** + * TODO: Placeholder class to collect Future & Responses for the client users. + * TODO: Do we need a separate RedisClusterResponse? + * TODO: Create a RedisPipelineFuture for pipeline requests + * TODO: Create a RedisTransactionFuture for transaction requests + * + * Redis client wrapper-class to handle Redis client responses. + * Handles async Future objects, or sync Response objects. + */ +public class RedisResponse { +} diff --git a/java/client/src/main/java/babushka/models/protobuf/connection_request/ConnectionRequestOuterClass.java b/java/client/src/main/java/babushka/models/protobuf/connection_request/ConnectionRequestOuterClass.java new file mode 100644 index 0000000000..9acb584f68 --- /dev/null +++ b/java/client/src/main/java/babushka/models/protobuf/connection_request/ConnectionRequestOuterClass.java @@ -0,0 +1,3894 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: protobuf/connection_request.proto + +package connection_request; + +public final class ConnectionRequestOuterClass { + private ConnectionRequestOuterClass() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + /** + * Protobuf enum {@code connection_request.ReadFrom} + */ + public enum ReadFrom + implements com.google.protobuf.ProtocolMessageEnum { + /** + * Primary = 0; + */ + Primary(0), + /** + * PreferReplica = 1; + */ + PreferReplica(1), + /** + * LowestLatency = 2; + */ + LowestLatency(2), + /** + * AZAffinity = 3; + */ + AZAffinity(3), + UNRECOGNIZED(-1), + ; + + /** + * Primary = 0; + */ + public static final int Primary_VALUE = 0; + /** + * PreferReplica = 1; + */ + public static final int PreferReplica_VALUE = 1; + /** + * LowestLatency = 2; + */ + public static final int LowestLatency_VALUE = 2; + /** + * AZAffinity = 3; + */ + public static final int AZAffinity_VALUE = 3; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ReadFrom valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static ReadFrom forNumber(int value) { + switch (value) { + case 0: return Primary; + case 1: return PreferReplica; + case 2: return LowestLatency; + case 3: return AZAffinity; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + ReadFrom> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public ReadFrom findValueByNumber(int number) { + return ReadFrom.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return connection_request.ConnectionRequestOuterClass.getDescriptor().getEnumTypes().get(0); + } + + private static final ReadFrom[] VALUES = values(); + + public static ReadFrom valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private ReadFrom(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:connection_request.ReadFrom) + } + + /** + * Protobuf enum {@code connection_request.TlsMode} + */ + public enum TlsMode + implements com.google.protobuf.ProtocolMessageEnum { + /** + * NoTls = 0; + */ + NoTls(0), + /** + * SecureTls = 1; + */ + SecureTls(1), + /** + * InsecureTls = 2; + */ + InsecureTls(2), + UNRECOGNIZED(-1), + ; + + /** + * NoTls = 0; + */ + public static final int NoTls_VALUE = 0; + /** + * SecureTls = 1; + */ + public static final int SecureTls_VALUE = 1; + /** + * InsecureTls = 2; + */ + public static final int InsecureTls_VALUE = 2; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static TlsMode valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static TlsMode forNumber(int value) { + switch (value) { + case 0: return NoTls; + case 1: return SecureTls; + case 2: return InsecureTls; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + TlsMode> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public TlsMode findValueByNumber(int number) { + return TlsMode.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return connection_request.ConnectionRequestOuterClass.getDescriptor().getEnumTypes().get(1); + } + + private static final TlsMode[] VALUES = values(); + + public static TlsMode valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private TlsMode(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:connection_request.TlsMode) + } + + public interface NodeAddressOrBuilder extends + // @@protoc_insertion_point(interface_extends:connection_request.NodeAddress) + com.google.protobuf.MessageOrBuilder { + + /** + * string host = 1; + * @return The host. + */ + java.lang.String getHost(); + /** + * string host = 1; + * @return The bytes for host. + */ + com.google.protobuf.ByteString + getHostBytes(); + + /** + * uint32 port = 2; + * @return The port. + */ + int getPort(); + } + /** + * Protobuf type {@code connection_request.NodeAddress} + */ + public static final class NodeAddress extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:connection_request.NodeAddress) + NodeAddressOrBuilder { + private static final long serialVersionUID = 0L; + // Use NodeAddress.newBuilder() to construct. + private NodeAddress(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private NodeAddress() { + host_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new NodeAddress(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_NodeAddress_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_NodeAddress_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.NodeAddress.class, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder.class); + } + + public static final int HOST_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object host_ = ""; + /** + * string host = 1; + * @return The host. + */ + @java.lang.Override + public java.lang.String getHost() { + java.lang.Object ref = host_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + host_ = s; + return s; + } + } + /** + * string host = 1; + * @return The bytes for host. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getHostBytes() { + java.lang.Object ref = host_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + host_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PORT_FIELD_NUMBER = 2; + private int port_ = 0; + /** + * uint32 port = 2; + * @return The port. + */ + @java.lang.Override + public int getPort() { + return port_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(host_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, host_); + } + if (port_ != 0) { + output.writeUInt32(2, port_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(host_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, host_); + } + if (port_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(2, port_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof connection_request.ConnectionRequestOuterClass.NodeAddress)) { + return super.equals(obj); + } + connection_request.ConnectionRequestOuterClass.NodeAddress other = (connection_request.ConnectionRequestOuterClass.NodeAddress) obj; + + if (!getHost() + .equals(other.getHost())) return false; + if (getPort() + != other.getPort()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + HOST_FIELD_NUMBER; + hash = (53 * hash) + getHost().hashCode(); + hash = (37 * hash) + PORT_FIELD_NUMBER; + hash = (53 * hash) + getPort(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.NodeAddress parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.NodeAddress parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(connection_request.ConnectionRequestOuterClass.NodeAddress prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code connection_request.NodeAddress} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:connection_request.NodeAddress) + connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_NodeAddress_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_NodeAddress_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.NodeAddress.class, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder.class); + } + + // Construct using connection_request.ConnectionRequestOuterClass.NodeAddress.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + host_ = ""; + port_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_NodeAddress_descriptor; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.NodeAddress getDefaultInstanceForType() { + return connection_request.ConnectionRequestOuterClass.NodeAddress.getDefaultInstance(); + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.NodeAddress build() { + connection_request.ConnectionRequestOuterClass.NodeAddress result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.NodeAddress buildPartial() { + connection_request.ConnectionRequestOuterClass.NodeAddress result = new connection_request.ConnectionRequestOuterClass.NodeAddress(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(connection_request.ConnectionRequestOuterClass.NodeAddress result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.host_ = host_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.port_ = port_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof connection_request.ConnectionRequestOuterClass.NodeAddress) { + return mergeFrom((connection_request.ConnectionRequestOuterClass.NodeAddress)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(connection_request.ConnectionRequestOuterClass.NodeAddress other) { + if (other == connection_request.ConnectionRequestOuterClass.NodeAddress.getDefaultInstance()) return this; + if (!other.getHost().isEmpty()) { + host_ = other.host_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.getPort() != 0) { + setPort(other.getPort()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + host_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: { + port_ = input.readUInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object host_ = ""; + /** + * string host = 1; + * @return The host. + */ + public java.lang.String getHost() { + java.lang.Object ref = host_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + host_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string host = 1; + * @return The bytes for host. + */ + public com.google.protobuf.ByteString + getHostBytes() { + java.lang.Object ref = host_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + host_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string host = 1; + * @param value The host to set. + * @return This builder for chaining. + */ + public Builder setHost( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + host_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * string host = 1; + * @return This builder for chaining. + */ + public Builder clearHost() { + host_ = getDefaultInstance().getHost(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * string host = 1; + * @param value The bytes for host to set. + * @return This builder for chaining. + */ + public Builder setHostBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + host_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private int port_ ; + /** + * uint32 port = 2; + * @return The port. + */ + @java.lang.Override + public int getPort() { + return port_; + } + /** + * uint32 port = 2; + * @param value The port to set. + * @return This builder for chaining. + */ + public Builder setPort(int value) { + + port_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * uint32 port = 2; + * @return This builder for chaining. + */ + public Builder clearPort() { + bitField0_ = (bitField0_ & ~0x00000002); + port_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:connection_request.NodeAddress) + } + + // @@protoc_insertion_point(class_scope:connection_request.NodeAddress) + private static final connection_request.ConnectionRequestOuterClass.NodeAddress DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.NodeAddress(); + } + + public static connection_request.ConnectionRequestOuterClass.NodeAddress getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public NodeAddress parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.NodeAddress getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface AuthenticationInfoOrBuilder extends + // @@protoc_insertion_point(interface_extends:connection_request.AuthenticationInfo) + com.google.protobuf.MessageOrBuilder { + + /** + * string password = 1; + * @return The password. + */ + java.lang.String getPassword(); + /** + * string password = 1; + * @return The bytes for password. + */ + com.google.protobuf.ByteString + getPasswordBytes(); + + /** + * string username = 2; + * @return The username. + */ + java.lang.String getUsername(); + /** + * string username = 2; + * @return The bytes for username. + */ + com.google.protobuf.ByteString + getUsernameBytes(); + } + /** + * Protobuf type {@code connection_request.AuthenticationInfo} + */ + public static final class AuthenticationInfo extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:connection_request.AuthenticationInfo) + AuthenticationInfoOrBuilder { + private static final long serialVersionUID = 0L; + // Use AuthenticationInfo.newBuilder() to construct. + private AuthenticationInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private AuthenticationInfo() { + password_ = ""; + username_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new AuthenticationInfo(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_AuthenticationInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_AuthenticationInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.class, connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder.class); + } + + public static final int PASSWORD_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object password_ = ""; + /** + * string password = 1; + * @return The password. + */ + @java.lang.Override + public java.lang.String getPassword() { + java.lang.Object ref = password_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + password_ = s; + return s; + } + } + /** + * string password = 1; + * @return The bytes for password. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getPasswordBytes() { + java.lang.Object ref = password_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + password_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int USERNAME_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private volatile java.lang.Object username_ = ""; + /** + * string username = 2; + * @return The username. + */ + @java.lang.Override + public java.lang.String getUsername() { + java.lang.Object ref = username_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + username_ = s; + return s; + } + } + /** + * string username = 2; + * @return The bytes for username. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getUsernameBytes() { + java.lang.Object ref = username_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + username_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(password_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, password_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(username_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, username_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(password_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, password_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(username_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, username_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof connection_request.ConnectionRequestOuterClass.AuthenticationInfo)) { + return super.equals(obj); + } + connection_request.ConnectionRequestOuterClass.AuthenticationInfo other = (connection_request.ConnectionRequestOuterClass.AuthenticationInfo) obj; + + if (!getPassword() + .equals(other.getPassword())) return false; + if (!getUsername() + .equals(other.getUsername())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PASSWORD_FIELD_NUMBER; + hash = (53 * hash) + getPassword().hashCode(); + hash = (37 * hash) + USERNAME_FIELD_NUMBER; + hash = (53 * hash) + getUsername().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(connection_request.ConnectionRequestOuterClass.AuthenticationInfo prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code connection_request.AuthenticationInfo} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:connection_request.AuthenticationInfo) + connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_AuthenticationInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_AuthenticationInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.class, connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder.class); + } + + // Construct using connection_request.ConnectionRequestOuterClass.AuthenticationInfo.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + password_ = ""; + username_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_AuthenticationInfo_descriptor; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo getDefaultInstanceForType() { + return connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance(); + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo build() { + connection_request.ConnectionRequestOuterClass.AuthenticationInfo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo buildPartial() { + connection_request.ConnectionRequestOuterClass.AuthenticationInfo result = new connection_request.ConnectionRequestOuterClass.AuthenticationInfo(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(connection_request.ConnectionRequestOuterClass.AuthenticationInfo result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.password_ = password_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.username_ = username_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof connection_request.ConnectionRequestOuterClass.AuthenticationInfo) { + return mergeFrom((connection_request.ConnectionRequestOuterClass.AuthenticationInfo)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(connection_request.ConnectionRequestOuterClass.AuthenticationInfo other) { + if (other == connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance()) return this; + if (!other.getPassword().isEmpty()) { + password_ = other.password_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getUsername().isEmpty()) { + username_ = other.username_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + password_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: { + username_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object password_ = ""; + /** + * string password = 1; + * @return The password. + */ + public java.lang.String getPassword() { + java.lang.Object ref = password_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + password_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string password = 1; + * @return The bytes for password. + */ + public com.google.protobuf.ByteString + getPasswordBytes() { + java.lang.Object ref = password_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + password_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string password = 1; + * @param value The password to set. + * @return This builder for chaining. + */ + public Builder setPassword( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + password_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * string password = 1; + * @return This builder for chaining. + */ + public Builder clearPassword() { + password_ = getDefaultInstance().getPassword(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * string password = 1; + * @param value The bytes for password to set. + * @return This builder for chaining. + */ + public Builder setPasswordBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + password_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object username_ = ""; + /** + * string username = 2; + * @return The username. + */ + public java.lang.String getUsername() { + java.lang.Object ref = username_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + username_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string username = 2; + * @return The bytes for username. + */ + public com.google.protobuf.ByteString + getUsernameBytes() { + java.lang.Object ref = username_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + username_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string username = 2; + * @param value The username to set. + * @return This builder for chaining. + */ + public Builder setUsername( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + username_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * string username = 2; + * @return This builder for chaining. + */ + public Builder clearUsername() { + username_ = getDefaultInstance().getUsername(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + * string username = 2; + * @param value The bytes for username to set. + * @return This builder for chaining. + */ + public Builder setUsernameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + username_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:connection_request.AuthenticationInfo) + } + + // @@protoc_insertion_point(class_scope:connection_request.AuthenticationInfo) + private static final connection_request.ConnectionRequestOuterClass.AuthenticationInfo DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.AuthenticationInfo(); + } + + public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AuthenticationInfo parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ConnectionRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:connection_request.ConnectionRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + java.util.List + getAddressesList(); + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + connection_request.ConnectionRequestOuterClass.NodeAddress getAddresses(int index); + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + int getAddressesCount(); + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + java.util.List + getAddressesOrBuilderList(); + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder getAddressesOrBuilder( + int index); + + /** + * .connection_request.TlsMode tls_mode = 2; + * @return The enum numeric value on the wire for tlsMode. + */ + int getTlsModeValue(); + /** + * .connection_request.TlsMode tls_mode = 2; + * @return The tlsMode. + */ + connection_request.ConnectionRequestOuterClass.TlsMode getTlsMode(); + + /** + * bool cluster_mode_enabled = 3; + * @return The clusterModeEnabled. + */ + boolean getClusterModeEnabled(); + + /** + * uint32 request_timeout = 4; + * @return The requestTimeout. + */ + int getRequestTimeout(); + + /** + * .connection_request.ReadFrom read_from = 5; + * @return The enum numeric value on the wire for readFrom. + */ + int getReadFromValue(); + /** + * .connection_request.ReadFrom read_from = 5; + * @return The readFrom. + */ + connection_request.ConnectionRequestOuterClass.ReadFrom getReadFrom(); + + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + * @return Whether the connectionRetryStrategy field is set. + */ + boolean hasConnectionRetryStrategy(); + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + * @return The connectionRetryStrategy. + */ + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy getConnectionRetryStrategy(); + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + */ + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder getConnectionRetryStrategyOrBuilder(); + + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + * @return Whether the authenticationInfo field is set. + */ + boolean hasAuthenticationInfo(); + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + * @return The authenticationInfo. + */ + connection_request.ConnectionRequestOuterClass.AuthenticationInfo getAuthenticationInfo(); + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + */ + connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder getAuthenticationInfoOrBuilder(); + + /** + * uint32 database_id = 8; + * @return The databaseId. + */ + int getDatabaseId(); + } + /** + *
+   * IMPORTANT - if you add fields here, you probably need to add them also in client/mod.rs:`sanitized_request_string`.
+   * 
+ * + * Protobuf type {@code connection_request.ConnectionRequest} + */ + public static final class ConnectionRequest extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:connection_request.ConnectionRequest) + ConnectionRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use ConnectionRequest.newBuilder() to construct. + private ConnectionRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ConnectionRequest() { + addresses_ = java.util.Collections.emptyList(); + tlsMode_ = 0; + readFrom_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ConnectionRequest(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.ConnectionRequest.class, connection_request.ConnectionRequestOuterClass.ConnectionRequest.Builder.class); + } + + public static final int ADDRESSES_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private java.util.List addresses_; + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + @java.lang.Override + public java.util.List getAddressesList() { + return addresses_; + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + @java.lang.Override + public java.util.List + getAddressesOrBuilderList() { + return addresses_; + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + @java.lang.Override + public int getAddressesCount() { + return addresses_.size(); + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.NodeAddress getAddresses(int index) { + return addresses_.get(index); + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder getAddressesOrBuilder( + int index) { + return addresses_.get(index); + } + + public static final int TLS_MODE_FIELD_NUMBER = 2; + private int tlsMode_ = 0; + /** + * .connection_request.TlsMode tls_mode = 2; + * @return The enum numeric value on the wire for tlsMode. + */ + @java.lang.Override public int getTlsModeValue() { + return tlsMode_; + } + /** + * .connection_request.TlsMode tls_mode = 2; + * @return The tlsMode. + */ + @java.lang.Override public connection_request.ConnectionRequestOuterClass.TlsMode getTlsMode() { + connection_request.ConnectionRequestOuterClass.TlsMode result = connection_request.ConnectionRequestOuterClass.TlsMode.forNumber(tlsMode_); + return result == null ? connection_request.ConnectionRequestOuterClass.TlsMode.UNRECOGNIZED : result; + } + + public static final int CLUSTER_MODE_ENABLED_FIELD_NUMBER = 3; + private boolean clusterModeEnabled_ = false; + /** + * bool cluster_mode_enabled = 3; + * @return The clusterModeEnabled. + */ + @java.lang.Override + public boolean getClusterModeEnabled() { + return clusterModeEnabled_; + } + + public static final int REQUEST_TIMEOUT_FIELD_NUMBER = 4; + private int requestTimeout_ = 0; + /** + * uint32 request_timeout = 4; + * @return The requestTimeout. + */ + @java.lang.Override + public int getRequestTimeout() { + return requestTimeout_; + } + + public static final int READ_FROM_FIELD_NUMBER = 5; + private int readFrom_ = 0; + /** + * .connection_request.ReadFrom read_from = 5; + * @return The enum numeric value on the wire for readFrom. + */ + @java.lang.Override public int getReadFromValue() { + return readFrom_; + } + /** + * .connection_request.ReadFrom read_from = 5; + * @return The readFrom. + */ + @java.lang.Override public connection_request.ConnectionRequestOuterClass.ReadFrom getReadFrom() { + connection_request.ConnectionRequestOuterClass.ReadFrom result = connection_request.ConnectionRequestOuterClass.ReadFrom.forNumber(readFrom_); + return result == null ? connection_request.ConnectionRequestOuterClass.ReadFrom.UNRECOGNIZED : result; + } + + public static final int CONNECTION_RETRY_STRATEGY_FIELD_NUMBER = 6; + private connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy connectionRetryStrategy_; + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + * @return Whether the connectionRetryStrategy field is set. + */ + @java.lang.Override + public boolean hasConnectionRetryStrategy() { + return connectionRetryStrategy_ != null; + } + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + * @return The connectionRetryStrategy. + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy getConnectionRetryStrategy() { + return connectionRetryStrategy_ == null ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance() : connectionRetryStrategy_; + } + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder getConnectionRetryStrategyOrBuilder() { + return connectionRetryStrategy_ == null ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance() : connectionRetryStrategy_; + } + + public static final int AUTHENTICATION_INFO_FIELD_NUMBER = 7; + private connection_request.ConnectionRequestOuterClass.AuthenticationInfo authenticationInfo_; + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + * @return Whether the authenticationInfo field is set. + */ + @java.lang.Override + public boolean hasAuthenticationInfo() { + return authenticationInfo_ != null; + } + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + * @return The authenticationInfo. + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo getAuthenticationInfo() { + return authenticationInfo_ == null ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance() : authenticationInfo_; + } + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder getAuthenticationInfoOrBuilder() { + return authenticationInfo_ == null ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance() : authenticationInfo_; + } + + public static final int DATABASE_ID_FIELD_NUMBER = 8; + private int databaseId_ = 0; + /** + * uint32 database_id = 8; + * @return The databaseId. + */ + @java.lang.Override + public int getDatabaseId() { + return databaseId_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < addresses_.size(); i++) { + output.writeMessage(1, addresses_.get(i)); + } + if (tlsMode_ != connection_request.ConnectionRequestOuterClass.TlsMode.NoTls.getNumber()) { + output.writeEnum(2, tlsMode_); + } + if (clusterModeEnabled_ != false) { + output.writeBool(3, clusterModeEnabled_); + } + if (requestTimeout_ != 0) { + output.writeUInt32(4, requestTimeout_); + } + if (readFrom_ != connection_request.ConnectionRequestOuterClass.ReadFrom.Primary.getNumber()) { + output.writeEnum(5, readFrom_); + } + if (connectionRetryStrategy_ != null) { + output.writeMessage(6, getConnectionRetryStrategy()); + } + if (authenticationInfo_ != null) { + output.writeMessage(7, getAuthenticationInfo()); + } + if (databaseId_ != 0) { + output.writeUInt32(8, databaseId_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < addresses_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, addresses_.get(i)); + } + if (tlsMode_ != connection_request.ConnectionRequestOuterClass.TlsMode.NoTls.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(2, tlsMode_); + } + if (clusterModeEnabled_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(3, clusterModeEnabled_); + } + if (requestTimeout_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(4, requestTimeout_); + } + if (readFrom_ != connection_request.ConnectionRequestOuterClass.ReadFrom.Primary.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(5, readFrom_); + } + if (connectionRetryStrategy_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, getConnectionRetryStrategy()); + } + if (authenticationInfo_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, getAuthenticationInfo()); + } + if (databaseId_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(8, databaseId_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof connection_request.ConnectionRequestOuterClass.ConnectionRequest)) { + return super.equals(obj); + } + connection_request.ConnectionRequestOuterClass.ConnectionRequest other = (connection_request.ConnectionRequestOuterClass.ConnectionRequest) obj; + + if (!getAddressesList() + .equals(other.getAddressesList())) return false; + if (tlsMode_ != other.tlsMode_) return false; + if (getClusterModeEnabled() + != other.getClusterModeEnabled()) return false; + if (getRequestTimeout() + != other.getRequestTimeout()) return false; + if (readFrom_ != other.readFrom_) return false; + if (hasConnectionRetryStrategy() != other.hasConnectionRetryStrategy()) return false; + if (hasConnectionRetryStrategy()) { + if (!getConnectionRetryStrategy() + .equals(other.getConnectionRetryStrategy())) return false; + } + if (hasAuthenticationInfo() != other.hasAuthenticationInfo()) return false; + if (hasAuthenticationInfo()) { + if (!getAuthenticationInfo() + .equals(other.getAuthenticationInfo())) return false; + } + if (getDatabaseId() + != other.getDatabaseId()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getAddressesCount() > 0) { + hash = (37 * hash) + ADDRESSES_FIELD_NUMBER; + hash = (53 * hash) + getAddressesList().hashCode(); + } + hash = (37 * hash) + TLS_MODE_FIELD_NUMBER; + hash = (53 * hash) + tlsMode_; + hash = (37 * hash) + CLUSTER_MODE_ENABLED_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getClusterModeEnabled()); + hash = (37 * hash) + REQUEST_TIMEOUT_FIELD_NUMBER; + hash = (53 * hash) + getRequestTimeout(); + hash = (37 * hash) + READ_FROM_FIELD_NUMBER; + hash = (53 * hash) + readFrom_; + if (hasConnectionRetryStrategy()) { + hash = (37 * hash) + CONNECTION_RETRY_STRATEGY_FIELD_NUMBER; + hash = (53 * hash) + getConnectionRetryStrategy().hashCode(); + } + if (hasAuthenticationInfo()) { + hash = (37 * hash) + AUTHENTICATION_INFO_FIELD_NUMBER; + hash = (53 * hash) + getAuthenticationInfo().hashCode(); + } + hash = (37 * hash) + DATABASE_ID_FIELD_NUMBER; + hash = (53 * hash) + getDatabaseId(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(connection_request.ConnectionRequestOuterClass.ConnectionRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * IMPORTANT - if you add fields here, you probably need to add them also in client/mod.rs:`sanitized_request_string`.
+     * 
+ * + * Protobuf type {@code connection_request.ConnectionRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:connection_request.ConnectionRequest) + connection_request.ConnectionRequestOuterClass.ConnectionRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.ConnectionRequest.class, connection_request.ConnectionRequestOuterClass.ConnectionRequest.Builder.class); + } + + // Construct using connection_request.ConnectionRequestOuterClass.ConnectionRequest.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (addressesBuilder_ == null) { + addresses_ = java.util.Collections.emptyList(); + } else { + addresses_ = null; + addressesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + tlsMode_ = 0; + clusterModeEnabled_ = false; + requestTimeout_ = 0; + readFrom_ = 0; + connectionRetryStrategy_ = null; + if (connectionRetryStrategyBuilder_ != null) { + connectionRetryStrategyBuilder_.dispose(); + connectionRetryStrategyBuilder_ = null; + } + authenticationInfo_ = null; + if (authenticationInfoBuilder_ != null) { + authenticationInfoBuilder_.dispose(); + authenticationInfoBuilder_ = null; + } + databaseId_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRequest_descriptor; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRequest getDefaultInstanceForType() { + return connection_request.ConnectionRequestOuterClass.ConnectionRequest.getDefaultInstance(); + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRequest build() { + connection_request.ConnectionRequestOuterClass.ConnectionRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRequest buildPartial() { + connection_request.ConnectionRequestOuterClass.ConnectionRequest result = new connection_request.ConnectionRequestOuterClass.ConnectionRequest(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(connection_request.ConnectionRequestOuterClass.ConnectionRequest result) { + if (addressesBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + addresses_ = java.util.Collections.unmodifiableList(addresses_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.addresses_ = addresses_; + } else { + result.addresses_ = addressesBuilder_.build(); + } + } + + private void buildPartial0(connection_request.ConnectionRequestOuterClass.ConnectionRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.tlsMode_ = tlsMode_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.clusterModeEnabled_ = clusterModeEnabled_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.requestTimeout_ = requestTimeout_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.readFrom_ = readFrom_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.connectionRetryStrategy_ = connectionRetryStrategyBuilder_ == null + ? connectionRetryStrategy_ + : connectionRetryStrategyBuilder_.build(); + } + if (((from_bitField0_ & 0x00000040) != 0)) { + result.authenticationInfo_ = authenticationInfoBuilder_ == null + ? authenticationInfo_ + : authenticationInfoBuilder_.build(); + } + if (((from_bitField0_ & 0x00000080) != 0)) { + result.databaseId_ = databaseId_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof connection_request.ConnectionRequestOuterClass.ConnectionRequest) { + return mergeFrom((connection_request.ConnectionRequestOuterClass.ConnectionRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(connection_request.ConnectionRequestOuterClass.ConnectionRequest other) { + if (other == connection_request.ConnectionRequestOuterClass.ConnectionRequest.getDefaultInstance()) return this; + if (addressesBuilder_ == null) { + if (!other.addresses_.isEmpty()) { + if (addresses_.isEmpty()) { + addresses_ = other.addresses_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureAddressesIsMutable(); + addresses_.addAll(other.addresses_); + } + onChanged(); + } + } else { + if (!other.addresses_.isEmpty()) { + if (addressesBuilder_.isEmpty()) { + addressesBuilder_.dispose(); + addressesBuilder_ = null; + addresses_ = other.addresses_; + bitField0_ = (bitField0_ & ~0x00000001); + addressesBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getAddressesFieldBuilder() : null; + } else { + addressesBuilder_.addAllMessages(other.addresses_); + } + } + } + if (other.tlsMode_ != 0) { + setTlsModeValue(other.getTlsModeValue()); + } + if (other.getClusterModeEnabled() != false) { + setClusterModeEnabled(other.getClusterModeEnabled()); + } + if (other.getRequestTimeout() != 0) { + setRequestTimeout(other.getRequestTimeout()); + } + if (other.readFrom_ != 0) { + setReadFromValue(other.getReadFromValue()); + } + if (other.hasConnectionRetryStrategy()) { + mergeConnectionRetryStrategy(other.getConnectionRetryStrategy()); + } + if (other.hasAuthenticationInfo()) { + mergeAuthenticationInfo(other.getAuthenticationInfo()); + } + if (other.getDatabaseId() != 0) { + setDatabaseId(other.getDatabaseId()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + connection_request.ConnectionRequestOuterClass.NodeAddress m = + input.readMessage( + connection_request.ConnectionRequestOuterClass.NodeAddress.parser(), + extensionRegistry); + if (addressesBuilder_ == null) { + ensureAddressesIsMutable(); + addresses_.add(m); + } else { + addressesBuilder_.addMessage(m); + } + break; + } // case 10 + case 16: { + tlsMode_ = input.readEnum(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: { + clusterModeEnabled_ = input.readBool(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 32: { + requestTimeout_ = input.readUInt32(); + bitField0_ |= 0x00000008; + break; + } // case 32 + case 40: { + readFrom_ = input.readEnum(); + bitField0_ |= 0x00000010; + break; + } // case 40 + case 50: { + input.readMessage( + getConnectionRetryStrategyFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000020; + break; + } // case 50 + case 58: { + input.readMessage( + getAuthenticationInfoFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000040; + break; + } // case 58 + case 64: { + databaseId_ = input.readUInt32(); + bitField0_ |= 0x00000080; + break; + } // case 64 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.util.List addresses_ = + java.util.Collections.emptyList(); + private void ensureAddressesIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + addresses_ = new java.util.ArrayList(addresses_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.NodeAddress, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder, connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder> addressesBuilder_; + + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public java.util.List getAddressesList() { + if (addressesBuilder_ == null) { + return java.util.Collections.unmodifiableList(addresses_); + } else { + return addressesBuilder_.getMessageList(); + } + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public int getAddressesCount() { + if (addressesBuilder_ == null) { + return addresses_.size(); + } else { + return addressesBuilder_.getCount(); + } + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public connection_request.ConnectionRequestOuterClass.NodeAddress getAddresses(int index) { + if (addressesBuilder_ == null) { + return addresses_.get(index); + } else { + return addressesBuilder_.getMessage(index); + } + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public Builder setAddresses( + int index, connection_request.ConnectionRequestOuterClass.NodeAddress value) { + if (addressesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAddressesIsMutable(); + addresses_.set(index, value); + onChanged(); + } else { + addressesBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public Builder setAddresses( + int index, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder builderForValue) { + if (addressesBuilder_ == null) { + ensureAddressesIsMutable(); + addresses_.set(index, builderForValue.build()); + onChanged(); + } else { + addressesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public Builder addAddresses(connection_request.ConnectionRequestOuterClass.NodeAddress value) { + if (addressesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAddressesIsMutable(); + addresses_.add(value); + onChanged(); + } else { + addressesBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public Builder addAddresses( + int index, connection_request.ConnectionRequestOuterClass.NodeAddress value) { + if (addressesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureAddressesIsMutable(); + addresses_.add(index, value); + onChanged(); + } else { + addressesBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public Builder addAddresses( + connection_request.ConnectionRequestOuterClass.NodeAddress.Builder builderForValue) { + if (addressesBuilder_ == null) { + ensureAddressesIsMutable(); + addresses_.add(builderForValue.build()); + onChanged(); + } else { + addressesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public Builder addAddresses( + int index, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder builderForValue) { + if (addressesBuilder_ == null) { + ensureAddressesIsMutable(); + addresses_.add(index, builderForValue.build()); + onChanged(); + } else { + addressesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public Builder addAllAddresses( + java.lang.Iterable values) { + if (addressesBuilder_ == null) { + ensureAddressesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, addresses_); + onChanged(); + } else { + addressesBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public Builder clearAddresses() { + if (addressesBuilder_ == null) { + addresses_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + addressesBuilder_.clear(); + } + return this; + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public Builder removeAddresses(int index) { + if (addressesBuilder_ == null) { + ensureAddressesIsMutable(); + addresses_.remove(index); + onChanged(); + } else { + addressesBuilder_.remove(index); + } + return this; + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public connection_request.ConnectionRequestOuterClass.NodeAddress.Builder getAddressesBuilder( + int index) { + return getAddressesFieldBuilder().getBuilder(index); + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder getAddressesOrBuilder( + int index) { + if (addressesBuilder_ == null) { + return addresses_.get(index); } else { + return addressesBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public java.util.List + getAddressesOrBuilderList() { + if (addressesBuilder_ != null) { + return addressesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(addresses_); + } + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public connection_request.ConnectionRequestOuterClass.NodeAddress.Builder addAddressesBuilder() { + return getAddressesFieldBuilder().addBuilder( + connection_request.ConnectionRequestOuterClass.NodeAddress.getDefaultInstance()); + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public connection_request.ConnectionRequestOuterClass.NodeAddress.Builder addAddressesBuilder( + int index) { + return getAddressesFieldBuilder().addBuilder( + index, connection_request.ConnectionRequestOuterClass.NodeAddress.getDefaultInstance()); + } + /** + * repeated .connection_request.NodeAddress addresses = 1; + */ + public java.util.List + getAddressesBuilderList() { + return getAddressesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.NodeAddress, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder, connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder> + getAddressesFieldBuilder() { + if (addressesBuilder_ == null) { + addressesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.NodeAddress, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder, connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder>( + addresses_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + addresses_ = null; + } + return addressesBuilder_; + } + + private int tlsMode_ = 0; + /** + * .connection_request.TlsMode tls_mode = 2; + * @return The enum numeric value on the wire for tlsMode. + */ + @java.lang.Override public int getTlsModeValue() { + return tlsMode_; + } + /** + * .connection_request.TlsMode tls_mode = 2; + * @param value The enum numeric value on the wire for tlsMode to set. + * @return This builder for chaining. + */ + public Builder setTlsModeValue(int value) { + tlsMode_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * .connection_request.TlsMode tls_mode = 2; + * @return The tlsMode. + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.TlsMode getTlsMode() { + connection_request.ConnectionRequestOuterClass.TlsMode result = connection_request.ConnectionRequestOuterClass.TlsMode.forNumber(tlsMode_); + return result == null ? connection_request.ConnectionRequestOuterClass.TlsMode.UNRECOGNIZED : result; + } + /** + * .connection_request.TlsMode tls_mode = 2; + * @param value The tlsMode to set. + * @return This builder for chaining. + */ + public Builder setTlsMode(connection_request.ConnectionRequestOuterClass.TlsMode value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + tlsMode_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .connection_request.TlsMode tls_mode = 2; + * @return This builder for chaining. + */ + public Builder clearTlsMode() { + bitField0_ = (bitField0_ & ~0x00000002); + tlsMode_ = 0; + onChanged(); + return this; + } + + private boolean clusterModeEnabled_ ; + /** + * bool cluster_mode_enabled = 3; + * @return The clusterModeEnabled. + */ + @java.lang.Override + public boolean getClusterModeEnabled() { + return clusterModeEnabled_; + } + /** + * bool cluster_mode_enabled = 3; + * @param value The clusterModeEnabled to set. + * @return This builder for chaining. + */ + public Builder setClusterModeEnabled(boolean value) { + + clusterModeEnabled_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * bool cluster_mode_enabled = 3; + * @return This builder for chaining. + */ + public Builder clearClusterModeEnabled() { + bitField0_ = (bitField0_ & ~0x00000004); + clusterModeEnabled_ = false; + onChanged(); + return this; + } + + private int requestTimeout_ ; + /** + * uint32 request_timeout = 4; + * @return The requestTimeout. + */ + @java.lang.Override + public int getRequestTimeout() { + return requestTimeout_; + } + /** + * uint32 request_timeout = 4; + * @param value The requestTimeout to set. + * @return This builder for chaining. + */ + public Builder setRequestTimeout(int value) { + + requestTimeout_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + * uint32 request_timeout = 4; + * @return This builder for chaining. + */ + public Builder clearRequestTimeout() { + bitField0_ = (bitField0_ & ~0x00000008); + requestTimeout_ = 0; + onChanged(); + return this; + } + + private int readFrom_ = 0; + /** + * .connection_request.ReadFrom read_from = 5; + * @return The enum numeric value on the wire for readFrom. + */ + @java.lang.Override public int getReadFromValue() { + return readFrom_; + } + /** + * .connection_request.ReadFrom read_from = 5; + * @param value The enum numeric value on the wire for readFrom to set. + * @return This builder for chaining. + */ + public Builder setReadFromValue(int value) { + readFrom_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + * .connection_request.ReadFrom read_from = 5; + * @return The readFrom. + */ + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ReadFrom getReadFrom() { + connection_request.ConnectionRequestOuterClass.ReadFrom result = connection_request.ConnectionRequestOuterClass.ReadFrom.forNumber(readFrom_); + return result == null ? connection_request.ConnectionRequestOuterClass.ReadFrom.UNRECOGNIZED : result; + } + /** + * .connection_request.ReadFrom read_from = 5; + * @param value The readFrom to set. + * @return This builder for chaining. + */ + public Builder setReadFrom(connection_request.ConnectionRequestOuterClass.ReadFrom value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000010; + readFrom_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .connection_request.ReadFrom read_from = 5; + * @return This builder for chaining. + */ + public Builder clearReadFrom() { + bitField0_ = (bitField0_ & ~0x00000010); + readFrom_ = 0; + onChanged(); + return this; + } + + private connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy connectionRetryStrategy_; + private com.google.protobuf.SingleFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder> connectionRetryStrategyBuilder_; + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + * @return Whether the connectionRetryStrategy field is set. + */ + public boolean hasConnectionRetryStrategy() { + return ((bitField0_ & 0x00000020) != 0); + } + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + * @return The connectionRetryStrategy. + */ + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy getConnectionRetryStrategy() { + if (connectionRetryStrategyBuilder_ == null) { + return connectionRetryStrategy_ == null ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance() : connectionRetryStrategy_; + } else { + return connectionRetryStrategyBuilder_.getMessage(); + } + } + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + */ + public Builder setConnectionRetryStrategy(connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy value) { + if (connectionRetryStrategyBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + connectionRetryStrategy_ = value; + } else { + connectionRetryStrategyBuilder_.setMessage(value); + } + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + */ + public Builder setConnectionRetryStrategy( + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder builderForValue) { + if (connectionRetryStrategyBuilder_ == null) { + connectionRetryStrategy_ = builderForValue.build(); + } else { + connectionRetryStrategyBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + */ + public Builder mergeConnectionRetryStrategy(connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy value) { + if (connectionRetryStrategyBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0) && + connectionRetryStrategy_ != null && + connectionRetryStrategy_ != connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance()) { + getConnectionRetryStrategyBuilder().mergeFrom(value); + } else { + connectionRetryStrategy_ = value; + } + } else { + connectionRetryStrategyBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + */ + public Builder clearConnectionRetryStrategy() { + bitField0_ = (bitField0_ & ~0x00000020); + connectionRetryStrategy_ = null; + if (connectionRetryStrategyBuilder_ != null) { + connectionRetryStrategyBuilder_.dispose(); + connectionRetryStrategyBuilder_ = null; + } + onChanged(); + return this; + } + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + */ + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder getConnectionRetryStrategyBuilder() { + bitField0_ |= 0x00000020; + onChanged(); + return getConnectionRetryStrategyFieldBuilder().getBuilder(); + } + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + */ + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder getConnectionRetryStrategyOrBuilder() { + if (connectionRetryStrategyBuilder_ != null) { + return connectionRetryStrategyBuilder_.getMessageOrBuilder(); + } else { + return connectionRetryStrategy_ == null ? + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance() : connectionRetryStrategy_; + } + } + /** + * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; + */ + private com.google.protobuf.SingleFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder> + getConnectionRetryStrategyFieldBuilder() { + if (connectionRetryStrategyBuilder_ == null) { + connectionRetryStrategyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder>( + getConnectionRetryStrategy(), + getParentForChildren(), + isClean()); + connectionRetryStrategy_ = null; + } + return connectionRetryStrategyBuilder_; + } + + private connection_request.ConnectionRequestOuterClass.AuthenticationInfo authenticationInfo_; + private com.google.protobuf.SingleFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.AuthenticationInfo, connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder, connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder> authenticationInfoBuilder_; + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + * @return Whether the authenticationInfo field is set. + */ + public boolean hasAuthenticationInfo() { + return ((bitField0_ & 0x00000040) != 0); + } + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + * @return The authenticationInfo. + */ + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo getAuthenticationInfo() { + if (authenticationInfoBuilder_ == null) { + return authenticationInfo_ == null ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance() : authenticationInfo_; + } else { + return authenticationInfoBuilder_.getMessage(); + } + } + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + */ + public Builder setAuthenticationInfo(connection_request.ConnectionRequestOuterClass.AuthenticationInfo value) { + if (authenticationInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + authenticationInfo_ = value; + } else { + authenticationInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + */ + public Builder setAuthenticationInfo( + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder builderForValue) { + if (authenticationInfoBuilder_ == null) { + authenticationInfo_ = builderForValue.build(); + } else { + authenticationInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + */ + public Builder mergeAuthenticationInfo(connection_request.ConnectionRequestOuterClass.AuthenticationInfo value) { + if (authenticationInfoBuilder_ == null) { + if (((bitField0_ & 0x00000040) != 0) && + authenticationInfo_ != null && + authenticationInfo_ != connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance()) { + getAuthenticationInfoBuilder().mergeFrom(value); + } else { + authenticationInfo_ = value; + } + } else { + authenticationInfoBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + */ + public Builder clearAuthenticationInfo() { + bitField0_ = (bitField0_ & ~0x00000040); + authenticationInfo_ = null; + if (authenticationInfoBuilder_ != null) { + authenticationInfoBuilder_.dispose(); + authenticationInfoBuilder_ = null; + } + onChanged(); + return this; + } + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + */ + public connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder getAuthenticationInfoBuilder() { + bitField0_ |= 0x00000040; + onChanged(); + return getAuthenticationInfoFieldBuilder().getBuilder(); + } + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + */ + public connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder getAuthenticationInfoOrBuilder() { + if (authenticationInfoBuilder_ != null) { + return authenticationInfoBuilder_.getMessageOrBuilder(); + } else { + return authenticationInfo_ == null ? + connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance() : authenticationInfo_; + } + } + /** + * .connection_request.AuthenticationInfo authentication_info = 7; + */ + private com.google.protobuf.SingleFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.AuthenticationInfo, connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder, connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder> + getAuthenticationInfoFieldBuilder() { + if (authenticationInfoBuilder_ == null) { + authenticationInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + connection_request.ConnectionRequestOuterClass.AuthenticationInfo, connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder, connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder>( + getAuthenticationInfo(), + getParentForChildren(), + isClean()); + authenticationInfo_ = null; + } + return authenticationInfoBuilder_; + } + + private int databaseId_ ; + /** + * uint32 database_id = 8; + * @return The databaseId. + */ + @java.lang.Override + public int getDatabaseId() { + return databaseId_; + } + /** + * uint32 database_id = 8; + * @param value The databaseId to set. + * @return This builder for chaining. + */ + public Builder setDatabaseId(int value) { + + databaseId_ = value; + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + /** + * uint32 database_id = 8; + * @return This builder for chaining. + */ + public Builder clearDatabaseId() { + bitField0_ = (bitField0_ & ~0x00000080); + databaseId_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:connection_request.ConnectionRequest) + } + + // @@protoc_insertion_point(class_scope:connection_request.ConnectionRequest) + private static final connection_request.ConnectionRequestOuterClass.ConnectionRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.ConnectionRequest(); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ConnectionRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ConnectionRetryStrategyOrBuilder extends + // @@protoc_insertion_point(interface_extends:connection_request.ConnectionRetryStrategy) + com.google.protobuf.MessageOrBuilder { + + /** + * uint32 number_of_retries = 1; + * @return The numberOfRetries. + */ + int getNumberOfRetries(); + + /** + * uint32 factor = 2; + * @return The factor. + */ + int getFactor(); + + /** + * uint32 exponent_base = 3; + * @return The exponentBase. + */ + int getExponentBase(); + } + /** + * Protobuf type {@code connection_request.ConnectionRetryStrategy} + */ + public static final class ConnectionRetryStrategy extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:connection_request.ConnectionRetryStrategy) + ConnectionRetryStrategyOrBuilder { + private static final long serialVersionUID = 0L; + // Use ConnectionRetryStrategy.newBuilder() to construct. + private ConnectionRetryStrategy(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ConnectionRetryStrategy() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ConnectionRetryStrategy(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRetryStrategy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.class, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder.class); + } + + public static final int NUMBER_OF_RETRIES_FIELD_NUMBER = 1; + private int numberOfRetries_ = 0; + /** + * uint32 number_of_retries = 1; + * @return The numberOfRetries. + */ + @java.lang.Override + public int getNumberOfRetries() { + return numberOfRetries_; + } + + public static final int FACTOR_FIELD_NUMBER = 2; + private int factor_ = 0; + /** + * uint32 factor = 2; + * @return The factor. + */ + @java.lang.Override + public int getFactor() { + return factor_; + } + + public static final int EXPONENT_BASE_FIELD_NUMBER = 3; + private int exponentBase_ = 0; + /** + * uint32 exponent_base = 3; + * @return The exponentBase. + */ + @java.lang.Override + public int getExponentBase() { + return exponentBase_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (numberOfRetries_ != 0) { + output.writeUInt32(1, numberOfRetries_); + } + if (factor_ != 0) { + output.writeUInt32(2, factor_); + } + if (exponentBase_ != 0) { + output.writeUInt32(3, exponentBase_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (numberOfRetries_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(1, numberOfRetries_); + } + if (factor_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(2, factor_); + } + if (exponentBase_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(3, exponentBase_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy)) { + return super.equals(obj); + } + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy other = (connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy) obj; + + if (getNumberOfRetries() + != other.getNumberOfRetries()) return false; + if (getFactor() + != other.getFactor()) return false; + if (getExponentBase() + != other.getExponentBase()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NUMBER_OF_RETRIES_FIELD_NUMBER; + hash = (53 * hash) + getNumberOfRetries(); + hash = (37 * hash) + FACTOR_FIELD_NUMBER; + hash = (53 * hash) + getFactor(); + hash = (37 * hash) + EXPONENT_BASE_FIELD_NUMBER; + hash = (53 * hash) + getExponentBase(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code connection_request.ConnectionRetryStrategy} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:connection_request.ConnectionRetryStrategy) + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRetryStrategy_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable + .ensureFieldAccessorsInitialized( + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.class, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder.class); + } + + // Construct using connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + numberOfRetries_ = 0; + factor_ = 0; + exponentBase_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRetryStrategy_descriptor; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy getDefaultInstanceForType() { + return connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance(); + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy build() { + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy buildPartial() { + connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy result = new connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.numberOfRetries_ = numberOfRetries_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.factor_ = factor_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.exponentBase_ = exponentBase_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy) { + return mergeFrom((connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy other) { + if (other == connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance()) return this; + if (other.getNumberOfRetries() != 0) { + setNumberOfRetries(other.getNumberOfRetries()); + } + if (other.getFactor() != 0) { + setFactor(other.getFactor()); + } + if (other.getExponentBase() != 0) { + setExponentBase(other.getExponentBase()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + numberOfRetries_ = input.readUInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: { + factor_ = input.readUInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: { + exponentBase_ = input.readUInt32(); + bitField0_ |= 0x00000004; + break; + } // case 24 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private int numberOfRetries_ ; + /** + * uint32 number_of_retries = 1; + * @return The numberOfRetries. + */ + @java.lang.Override + public int getNumberOfRetries() { + return numberOfRetries_; + } + /** + * uint32 number_of_retries = 1; + * @param value The numberOfRetries to set. + * @return This builder for chaining. + */ + public Builder setNumberOfRetries(int value) { + + numberOfRetries_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * uint32 number_of_retries = 1; + * @return This builder for chaining. + */ + public Builder clearNumberOfRetries() { + bitField0_ = (bitField0_ & ~0x00000001); + numberOfRetries_ = 0; + onChanged(); + return this; + } + + private int factor_ ; + /** + * uint32 factor = 2; + * @return The factor. + */ + @java.lang.Override + public int getFactor() { + return factor_; + } + /** + * uint32 factor = 2; + * @param value The factor to set. + * @return This builder for chaining. + */ + public Builder setFactor(int value) { + + factor_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * uint32 factor = 2; + * @return This builder for chaining. + */ + public Builder clearFactor() { + bitField0_ = (bitField0_ & ~0x00000002); + factor_ = 0; + onChanged(); + return this; + } + + private int exponentBase_ ; + /** + * uint32 exponent_base = 3; + * @return The exponentBase. + */ + @java.lang.Override + public int getExponentBase() { + return exponentBase_; + } + /** + * uint32 exponent_base = 3; + * @param value The exponentBase to set. + * @return This builder for chaining. + */ + public Builder setExponentBase(int value) { + + exponentBase_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * uint32 exponent_base = 3; + * @return This builder for chaining. + */ + public Builder clearExponentBase() { + bitField0_ = (bitField0_ & ~0x00000004); + exponentBase_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:connection_request.ConnectionRetryStrategy) + } + + // @@protoc_insertion_point(class_scope:connection_request.ConnectionRetryStrategy) + private static final connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy(); + } + + public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ConnectionRetryStrategy parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_connection_request_NodeAddress_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_connection_request_NodeAddress_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_connection_request_AuthenticationInfo_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_connection_request_AuthenticationInfo_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_connection_request_ConnectionRequest_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_connection_request_ConnectionRequest_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_connection_request_ConnectionRetryStrategy_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n!protobuf/connection_request.proto\022\022con" + + "nection_request\")\n\013NodeAddress\022\014\n\004host\030\001" + + " \001(\t\022\014\n\004port\030\002 \001(\r\"8\n\022AuthenticationInfo" + + "\022\020\n\010password\030\001 \001(\t\022\020\n\010username\030\002 \001(\t\"\210\003\n" + + "\021ConnectionRequest\0222\n\taddresses\030\001 \003(\0132\037." + + "connection_request.NodeAddress\022-\n\010tls_mo" + + "de\030\002 \001(\0162\033.connection_request.TlsMode\022\034\n" + + "\024cluster_mode_enabled\030\003 \001(\010\022\027\n\017request_t" + + "imeout\030\004 \001(\r\022/\n\tread_from\030\005 \001(\0162\034.connec" + + "tion_request.ReadFrom\022N\n\031connection_retr" + + "y_strategy\030\006 \001(\0132+.connection_request.Co" + + "nnectionRetryStrategy\022C\n\023authentication_" + + "info\030\007 \001(\0132&.connection_request.Authenti" + + "cationInfo\022\023\n\013database_id\030\010 \001(\r\"[\n\027Conne" + + "ctionRetryStrategy\022\031\n\021number_of_retries\030" + + "\001 \001(\r\022\016\n\006factor\030\002 \001(\r\022\025\n\rexponent_base\030\003" + + " \001(\r*M\n\010ReadFrom\022\013\n\007Primary\020\000\022\021\n\rPreferR" + + "eplica\020\001\022\021\n\rLowestLatency\020\002\022\016\n\nAZAffinit" + + "y\020\003*4\n\007TlsMode\022\t\n\005NoTls\020\000\022\r\n\tSecureTls\020\001" + + "\022\017\n\013InsecureTls\020\002b\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_connection_request_NodeAddress_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_connection_request_NodeAddress_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_connection_request_NodeAddress_descriptor, + new java.lang.String[] { "Host", "Port", }); + internal_static_connection_request_AuthenticationInfo_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_connection_request_AuthenticationInfo_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_connection_request_AuthenticationInfo_descriptor, + new java.lang.String[] { "Password", "Username", }); + internal_static_connection_request_ConnectionRequest_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_connection_request_ConnectionRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_connection_request_ConnectionRequest_descriptor, + new java.lang.String[] { "Addresses", "TlsMode", "ClusterModeEnabled", "RequestTimeout", "ReadFrom", "ConnectionRetryStrategy", "AuthenticationInfo", "DatabaseId", }); + internal_static_connection_request_ConnectionRetryStrategy_descriptor = + getDescriptor().getMessageTypes().get(3); + internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_connection_request_ConnectionRetryStrategy_descriptor, + new java.lang.String[] { "NumberOfRetries", "Factor", "ExponentBase", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/java/client/src/main/java/babushka/models/protobuf/redis_request/RedisRequestOuterClass.java b/java/client/src/main/java/babushka/models/protobuf/redis_request/RedisRequestOuterClass.java new file mode 100644 index 0000000000..5f8d5e9286 --- /dev/null +++ b/java/client/src/main/java/babushka/models/protobuf/redis_request/RedisRequestOuterClass.java @@ -0,0 +1,6868 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: protobuf/redis_request.proto + +package redis_request; + +public final class RedisRequestOuterClass { + private RedisRequestOuterClass() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + /** + * Protobuf enum {@code redis_request.SimpleRoutes} + */ + public enum SimpleRoutes + implements com.google.protobuf.ProtocolMessageEnum { + /** + * AllNodes = 0; + */ + AllNodes(0), + /** + * AllPrimaries = 1; + */ + AllPrimaries(1), + /** + * Random = 2; + */ + Random(2), + UNRECOGNIZED(-1), + ; + + /** + * AllNodes = 0; + */ + public static final int AllNodes_VALUE = 0; + /** + * AllPrimaries = 1; + */ + public static final int AllPrimaries_VALUE = 1; + /** + * Random = 2; + */ + public static final int Random_VALUE = 2; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static SimpleRoutes valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static SimpleRoutes forNumber(int value) { + switch (value) { + case 0: return AllNodes; + case 1: return AllPrimaries; + case 2: return Random; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + SimpleRoutes> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public SimpleRoutes findValueByNumber(int number) { + return SimpleRoutes.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.getDescriptor().getEnumTypes().get(0); + } + + private static final SimpleRoutes[] VALUES = values(); + + public static SimpleRoutes valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private SimpleRoutes(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:redis_request.SimpleRoutes) + } + + /** + * Protobuf enum {@code redis_request.SlotTypes} + */ + public enum SlotTypes + implements com.google.protobuf.ProtocolMessageEnum { + /** + * Primary = 0; + */ + Primary(0), + /** + * Replica = 1; + */ + Replica(1), + UNRECOGNIZED(-1), + ; + + /** + * Primary = 0; + */ + public static final int Primary_VALUE = 0; + /** + * Replica = 1; + */ + public static final int Replica_VALUE = 1; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static SlotTypes valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static SlotTypes forNumber(int value) { + switch (value) { + case 0: return Primary; + case 1: return Replica; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + SlotTypes> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public SlotTypes findValueByNumber(int number) { + return SlotTypes.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.getDescriptor().getEnumTypes().get(1); + } + + private static final SlotTypes[] VALUES = values(); + + public static SlotTypes valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private SlotTypes(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:redis_request.SlotTypes) + } + + /** + * Protobuf enum {@code redis_request.RequestType} + */ + public enum RequestType + implements com.google.protobuf.ProtocolMessageEnum { + /** + *
+     */ Invalid request type
+     * 
+ * + * InvalidRequest = 0; + */ + InvalidRequest(0), + /** + *
+     */ An unknown command, where all arguments are defined by the user.
+     * 
+ * + * CustomCommand = 1; + */ + CustomCommand(1), + /** + *
+     */ Type of a get string request.
+     * 
+ * + * GetString = 2; + */ + GetString(2), + /** + *
+     */ Type of a set string request.
+     * 
+ * + * SetString = 3; + */ + SetString(3), + /** + * Ping = 4; + */ + Ping(4), + /** + * Info = 5; + */ + Info(5), + /** + * Del = 6; + */ + Del(6), + /** + * Select = 7; + */ + Select(7), + /** + * ConfigGet = 8; + */ + ConfigGet(8), + /** + * ConfigSet = 9; + */ + ConfigSet(9), + /** + * ConfigResetStat = 10; + */ + ConfigResetStat(10), + /** + * ConfigRewrite = 11; + */ + ConfigRewrite(11), + /** + * ClientGetName = 12; + */ + ClientGetName(12), + /** + * ClientGetRedir = 13; + */ + ClientGetRedir(13), + /** + * ClientId = 14; + */ + ClientId(14), + /** + * ClientInfo = 15; + */ + ClientInfo(15), + /** + * ClientKill = 16; + */ + ClientKill(16), + /** + * ClientList = 17; + */ + ClientList(17), + /** + * ClientNoEvict = 18; + */ + ClientNoEvict(18), + /** + * ClientNoTouch = 19; + */ + ClientNoTouch(19), + /** + * ClientPause = 20; + */ + ClientPause(20), + /** + * ClientReply = 21; + */ + ClientReply(21), + /** + * ClientSetInfo = 22; + */ + ClientSetInfo(22), + /** + * ClientSetName = 23; + */ + ClientSetName(23), + /** + * ClientUnblock = 24; + */ + ClientUnblock(24), + /** + * ClientUnpause = 25; + */ + ClientUnpause(25), + /** + * Expire = 26; + */ + Expire(26), + /** + * HashSet = 27; + */ + HashSet(27), + /** + * HashGet = 28; + */ + HashGet(28), + /** + * HashDel = 29; + */ + HashDel(29), + /** + * HashExists = 30; + */ + HashExists(30), + /** + * MGet = 31; + */ + MGet(31), + /** + * MSet = 32; + */ + MSet(32), + /** + * Incr = 33; + */ + Incr(33), + /** + * IncrBy = 34; + */ + IncrBy(34), + /** + * Decr = 35; + */ + Decr(35), + /** + * IncrByFloat = 36; + */ + IncrByFloat(36), + /** + * DecrBy = 37; + */ + DecrBy(37), + /** + * HashGetAll = 38; + */ + HashGetAll(38), + /** + * HashMSet = 39; + */ + HashMSet(39), + /** + * HashMGet = 40; + */ + HashMGet(40), + /** + * HashIncrBy = 41; + */ + HashIncrBy(41), + /** + * HashIncrByFloat = 42; + */ + HashIncrByFloat(42), + /** + * LPush = 43; + */ + LPush(43), + /** + * LPop = 44; + */ + LPop(44), + /** + * RPush = 45; + */ + RPush(45), + /** + * RPop = 46; + */ + RPop(46), + /** + * LLen = 47; + */ + LLen(47), + /** + * LRem = 48; + */ + LRem(48), + /** + * LRange = 49; + */ + LRange(49), + /** + * LTrim = 50; + */ + LTrim(50), + /** + * SAdd = 51; + */ + SAdd(51), + /** + * SRem = 52; + */ + SRem(52), + /** + * SMembers = 53; + */ + SMembers(53), + /** + * SCard = 54; + */ + SCard(54), + /** + * PExpireAt = 55; + */ + PExpireAt(55), + /** + * PExpire = 56; + */ + PExpire(56), + /** + * ExpireAt = 57; + */ + ExpireAt(57), + /** + * Exists = 58; + */ + Exists(58), + /** + * Unlink = 59; + */ + Unlink(59), + /** + * TTL = 60; + */ + TTL(60), + UNRECOGNIZED(-1), + ; + + /** + *
+     */ Invalid request type
+     * 
+ * + * InvalidRequest = 0; + */ + public static final int InvalidRequest_VALUE = 0; + /** + *
+     */ An unknown command, where all arguments are defined by the user.
+     * 
+ * + * CustomCommand = 1; + */ + public static final int CustomCommand_VALUE = 1; + /** + *
+     */ Type of a get string request.
+     * 
+ * + * GetString = 2; + */ + public static final int GetString_VALUE = 2; + /** + *
+     */ Type of a set string request.
+     * 
+ * + * SetString = 3; + */ + public static final int SetString_VALUE = 3; + /** + * Ping = 4; + */ + public static final int Ping_VALUE = 4; + /** + * Info = 5; + */ + public static final int Info_VALUE = 5; + /** + * Del = 6; + */ + public static final int Del_VALUE = 6; + /** + * Select = 7; + */ + public static final int Select_VALUE = 7; + /** + * ConfigGet = 8; + */ + public static final int ConfigGet_VALUE = 8; + /** + * ConfigSet = 9; + */ + public static final int ConfigSet_VALUE = 9; + /** + * ConfigResetStat = 10; + */ + public static final int ConfigResetStat_VALUE = 10; + /** + * ConfigRewrite = 11; + */ + public static final int ConfigRewrite_VALUE = 11; + /** + * ClientGetName = 12; + */ + public static final int ClientGetName_VALUE = 12; + /** + * ClientGetRedir = 13; + */ + public static final int ClientGetRedir_VALUE = 13; + /** + * ClientId = 14; + */ + public static final int ClientId_VALUE = 14; + /** + * ClientInfo = 15; + */ + public static final int ClientInfo_VALUE = 15; + /** + * ClientKill = 16; + */ + public static final int ClientKill_VALUE = 16; + /** + * ClientList = 17; + */ + public static final int ClientList_VALUE = 17; + /** + * ClientNoEvict = 18; + */ + public static final int ClientNoEvict_VALUE = 18; + /** + * ClientNoTouch = 19; + */ + public static final int ClientNoTouch_VALUE = 19; + /** + * ClientPause = 20; + */ + public static final int ClientPause_VALUE = 20; + /** + * ClientReply = 21; + */ + public static final int ClientReply_VALUE = 21; + /** + * ClientSetInfo = 22; + */ + public static final int ClientSetInfo_VALUE = 22; + /** + * ClientSetName = 23; + */ + public static final int ClientSetName_VALUE = 23; + /** + * ClientUnblock = 24; + */ + public static final int ClientUnblock_VALUE = 24; + /** + * ClientUnpause = 25; + */ + public static final int ClientUnpause_VALUE = 25; + /** + * Expire = 26; + */ + public static final int Expire_VALUE = 26; + /** + * HashSet = 27; + */ + public static final int HashSet_VALUE = 27; + /** + * HashGet = 28; + */ + public static final int HashGet_VALUE = 28; + /** + * HashDel = 29; + */ + public static final int HashDel_VALUE = 29; + /** + * HashExists = 30; + */ + public static final int HashExists_VALUE = 30; + /** + * MGet = 31; + */ + public static final int MGet_VALUE = 31; + /** + * MSet = 32; + */ + public static final int MSet_VALUE = 32; + /** + * Incr = 33; + */ + public static final int Incr_VALUE = 33; + /** + * IncrBy = 34; + */ + public static final int IncrBy_VALUE = 34; + /** + * Decr = 35; + */ + public static final int Decr_VALUE = 35; + /** + * IncrByFloat = 36; + */ + public static final int IncrByFloat_VALUE = 36; + /** + * DecrBy = 37; + */ + public static final int DecrBy_VALUE = 37; + /** + * HashGetAll = 38; + */ + public static final int HashGetAll_VALUE = 38; + /** + * HashMSet = 39; + */ + public static final int HashMSet_VALUE = 39; + /** + * HashMGet = 40; + */ + public static final int HashMGet_VALUE = 40; + /** + * HashIncrBy = 41; + */ + public static final int HashIncrBy_VALUE = 41; + /** + * HashIncrByFloat = 42; + */ + public static final int HashIncrByFloat_VALUE = 42; + /** + * LPush = 43; + */ + public static final int LPush_VALUE = 43; + /** + * LPop = 44; + */ + public static final int LPop_VALUE = 44; + /** + * RPush = 45; + */ + public static final int RPush_VALUE = 45; + /** + * RPop = 46; + */ + public static final int RPop_VALUE = 46; + /** + * LLen = 47; + */ + public static final int LLen_VALUE = 47; + /** + * LRem = 48; + */ + public static final int LRem_VALUE = 48; + /** + * LRange = 49; + */ + public static final int LRange_VALUE = 49; + /** + * LTrim = 50; + */ + public static final int LTrim_VALUE = 50; + /** + * SAdd = 51; + */ + public static final int SAdd_VALUE = 51; + /** + * SRem = 52; + */ + public static final int SRem_VALUE = 52; + /** + * SMembers = 53; + */ + public static final int SMembers_VALUE = 53; + /** + * SCard = 54; + */ + public static final int SCard_VALUE = 54; + /** + * PExpireAt = 55; + */ + public static final int PExpireAt_VALUE = 55; + /** + * PExpire = 56; + */ + public static final int PExpire_VALUE = 56; + /** + * ExpireAt = 57; + */ + public static final int ExpireAt_VALUE = 57; + /** + * Exists = 58; + */ + public static final int Exists_VALUE = 58; + /** + * Unlink = 59; + */ + public static final int Unlink_VALUE = 59; + /** + * TTL = 60; + */ + public static final int TTL_VALUE = 60; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static RequestType valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static RequestType forNumber(int value) { + switch (value) { + case 0: return InvalidRequest; + case 1: return CustomCommand; + case 2: return GetString; + case 3: return SetString; + case 4: return Ping; + case 5: return Info; + case 6: return Del; + case 7: return Select; + case 8: return ConfigGet; + case 9: return ConfigSet; + case 10: return ConfigResetStat; + case 11: return ConfigRewrite; + case 12: return ClientGetName; + case 13: return ClientGetRedir; + case 14: return ClientId; + case 15: return ClientInfo; + case 16: return ClientKill; + case 17: return ClientList; + case 18: return ClientNoEvict; + case 19: return ClientNoTouch; + case 20: return ClientPause; + case 21: return ClientReply; + case 22: return ClientSetInfo; + case 23: return ClientSetName; + case 24: return ClientUnblock; + case 25: return ClientUnpause; + case 26: return Expire; + case 27: return HashSet; + case 28: return HashGet; + case 29: return HashDel; + case 30: return HashExists; + case 31: return MGet; + case 32: return MSet; + case 33: return Incr; + case 34: return IncrBy; + case 35: return Decr; + case 36: return IncrByFloat; + case 37: return DecrBy; + case 38: return HashGetAll; + case 39: return HashMSet; + case 40: return HashMGet; + case 41: return HashIncrBy; + case 42: return HashIncrByFloat; + case 43: return LPush; + case 44: return LPop; + case 45: return RPush; + case 46: return RPop; + case 47: return LLen; + case 48: return LRem; + case 49: return LRange; + case 50: return LTrim; + case 51: return SAdd; + case 52: return SRem; + case 53: return SMembers; + case 54: return SCard; + case 55: return PExpireAt; + case 56: return PExpire; + case 57: return ExpireAt; + case 58: return Exists; + case 59: return Unlink; + case 60: return TTL; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + RequestType> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RequestType findValueByNumber(int number) { + return RequestType.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.getDescriptor().getEnumTypes().get(2); + } + + private static final RequestType[] VALUES = values(); + + public static RequestType valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private RequestType(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:redis_request.RequestType) + } + + public interface SlotIdRouteOrBuilder extends + // @@protoc_insertion_point(interface_extends:redis_request.SlotIdRoute) + com.google.protobuf.MessageOrBuilder { + + /** + * .redis_request.SlotTypes slot_type = 1; + * @return The enum numeric value on the wire for slotType. + */ + int getSlotTypeValue(); + /** + * .redis_request.SlotTypes slot_type = 1; + * @return The slotType. + */ + redis_request.RedisRequestOuterClass.SlotTypes getSlotType(); + + /** + * int32 slot_id = 2; + * @return The slotId. + */ + int getSlotId(); + } + /** + * Protobuf type {@code redis_request.SlotIdRoute} + */ + public static final class SlotIdRoute extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:redis_request.SlotIdRoute) + SlotIdRouteOrBuilder { + private static final long serialVersionUID = 0L; + // Use SlotIdRoute.newBuilder() to construct. + private SlotIdRoute(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private SlotIdRoute() { + slotType_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new SlotIdRoute(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotIdRoute_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotIdRoute_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.SlotIdRoute.class, redis_request.RedisRequestOuterClass.SlotIdRoute.Builder.class); + } + + public static final int SLOT_TYPE_FIELD_NUMBER = 1; + private int slotType_ = 0; + /** + * .redis_request.SlotTypes slot_type = 1; + * @return The enum numeric value on the wire for slotType. + */ + @java.lang.Override public int getSlotTypeValue() { + return slotType_; + } + /** + * .redis_request.SlotTypes slot_type = 1; + * @return The slotType. + */ + @java.lang.Override public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { + redis_request.RedisRequestOuterClass.SlotTypes result = redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); + return result == null ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED : result; + } + + public static final int SLOT_ID_FIELD_NUMBER = 2; + private int slotId_ = 0; + /** + * int32 slot_id = 2; + * @return The slotId. + */ + @java.lang.Override + public int getSlotId() { + return slotId_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { + output.writeEnum(1, slotType_); + } + if (slotId_ != 0) { + output.writeInt32(2, slotId_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, slotType_); + } + if (slotId_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, slotId_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.SlotIdRoute)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.SlotIdRoute other = (redis_request.RedisRequestOuterClass.SlotIdRoute) obj; + + if (slotType_ != other.slotType_) return false; + if (getSlotId() + != other.getSlotId()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SLOT_TYPE_FIELD_NUMBER; + hash = (53 * hash) + slotType_; + hash = (37 * hash) + SLOT_ID_FIELD_NUMBER; + hash = (53 * hash) + getSlotId(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(redis_request.RedisRequestOuterClass.SlotIdRoute prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code redis_request.SlotIdRoute} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:redis_request.SlotIdRoute) + redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotIdRoute_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotIdRoute_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.SlotIdRoute.class, redis_request.RedisRequestOuterClass.SlotIdRoute.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.SlotIdRoute.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + slotType_ = 0; + slotId_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotIdRoute_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRoute getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRoute build() { + redis_request.RedisRequestOuterClass.SlotIdRoute result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRoute buildPartial() { + redis_request.RedisRequestOuterClass.SlotIdRoute result = new redis_request.RedisRequestOuterClass.SlotIdRoute(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.SlotIdRoute result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.slotType_ = slotType_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.slotId_ = slotId_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.SlotIdRoute) { + return mergeFrom((redis_request.RedisRequestOuterClass.SlotIdRoute)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.SlotIdRoute other) { + if (other == redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance()) return this; + if (other.slotType_ != 0) { + setSlotTypeValue(other.getSlotTypeValue()); + } + if (other.getSlotId() != 0) { + setSlotId(other.getSlotId()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + slotType_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: { + slotId_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private int slotType_ = 0; + /** + * .redis_request.SlotTypes slot_type = 1; + * @return The enum numeric value on the wire for slotType. + */ + @java.lang.Override public int getSlotTypeValue() { + return slotType_; + } + /** + * .redis_request.SlotTypes slot_type = 1; + * @param value The enum numeric value on the wire for slotType to set. + * @return This builder for chaining. + */ + public Builder setSlotTypeValue(int value) { + slotType_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * .redis_request.SlotTypes slot_type = 1; + * @return The slotType. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { + redis_request.RedisRequestOuterClass.SlotTypes result = redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); + return result == null ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED : result; + } + /** + * .redis_request.SlotTypes slot_type = 1; + * @param value The slotType to set. + * @return This builder for chaining. + */ + public Builder setSlotType(redis_request.RedisRequestOuterClass.SlotTypes value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + slotType_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .redis_request.SlotTypes slot_type = 1; + * @return This builder for chaining. + */ + public Builder clearSlotType() { + bitField0_ = (bitField0_ & ~0x00000001); + slotType_ = 0; + onChanged(); + return this; + } + + private int slotId_ ; + /** + * int32 slot_id = 2; + * @return The slotId. + */ + @java.lang.Override + public int getSlotId() { + return slotId_; + } + /** + * int32 slot_id = 2; + * @param value The slotId to set. + * @return This builder for chaining. + */ + public Builder setSlotId(int value) { + + slotId_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * int32 slot_id = 2; + * @return This builder for chaining. + */ + public Builder clearSlotId() { + bitField0_ = (bitField0_ & ~0x00000002); + slotId_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:redis_request.SlotIdRoute) + } + + // @@protoc_insertion_point(class_scope:redis_request.SlotIdRoute) + private static final redis_request.RedisRequestOuterClass.SlotIdRoute DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.SlotIdRoute(); + } + + public static redis_request.RedisRequestOuterClass.SlotIdRoute getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SlotIdRoute parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRoute getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface SlotKeyRouteOrBuilder extends + // @@protoc_insertion_point(interface_extends:redis_request.SlotKeyRoute) + com.google.protobuf.MessageOrBuilder { + + /** + * .redis_request.SlotTypes slot_type = 1; + * @return The enum numeric value on the wire for slotType. + */ + int getSlotTypeValue(); + /** + * .redis_request.SlotTypes slot_type = 1; + * @return The slotType. + */ + redis_request.RedisRequestOuterClass.SlotTypes getSlotType(); + + /** + * string slot_key = 2; + * @return The slotKey. + */ + java.lang.String getSlotKey(); + /** + * string slot_key = 2; + * @return The bytes for slotKey. + */ + com.google.protobuf.ByteString + getSlotKeyBytes(); + } + /** + * Protobuf type {@code redis_request.SlotKeyRoute} + */ + public static final class SlotKeyRoute extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:redis_request.SlotKeyRoute) + SlotKeyRouteOrBuilder { + private static final long serialVersionUID = 0L; + // Use SlotKeyRoute.newBuilder() to construct. + private SlotKeyRoute(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private SlotKeyRoute() { + slotType_ = 0; + slotKey_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new SlotKeyRoute(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotKeyRoute_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotKeyRoute_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.SlotKeyRoute.class, redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder.class); + } + + public static final int SLOT_TYPE_FIELD_NUMBER = 1; + private int slotType_ = 0; + /** + * .redis_request.SlotTypes slot_type = 1; + * @return The enum numeric value on the wire for slotType. + */ + @java.lang.Override public int getSlotTypeValue() { + return slotType_; + } + /** + * .redis_request.SlotTypes slot_type = 1; + * @return The slotType. + */ + @java.lang.Override public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { + redis_request.RedisRequestOuterClass.SlotTypes result = redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); + return result == null ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED : result; + } + + public static final int SLOT_KEY_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private volatile java.lang.Object slotKey_ = ""; + /** + * string slot_key = 2; + * @return The slotKey. + */ + @java.lang.Override + public java.lang.String getSlotKey() { + java.lang.Object ref = slotKey_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + slotKey_ = s; + return s; + } + } + /** + * string slot_key = 2; + * @return The bytes for slotKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getSlotKeyBytes() { + java.lang.Object ref = slotKey_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + slotKey_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { + output.writeEnum(1, slotType_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(slotKey_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, slotKey_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, slotType_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(slotKey_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, slotKey_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.SlotKeyRoute)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.SlotKeyRoute other = (redis_request.RedisRequestOuterClass.SlotKeyRoute) obj; + + if (slotType_ != other.slotType_) return false; + if (!getSlotKey() + .equals(other.getSlotKey())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SLOT_TYPE_FIELD_NUMBER; + hash = (53 * hash) + slotType_; + hash = (37 * hash) + SLOT_KEY_FIELD_NUMBER; + hash = (53 * hash) + getSlotKey().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(redis_request.RedisRequestOuterClass.SlotKeyRoute prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code redis_request.SlotKeyRoute} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:redis_request.SlotKeyRoute) + redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotKeyRoute_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotKeyRoute_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.SlotKeyRoute.class, redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.SlotKeyRoute.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + slotType_ = 0; + slotKey_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotKeyRoute_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRoute getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRoute build() { + redis_request.RedisRequestOuterClass.SlotKeyRoute result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRoute buildPartial() { + redis_request.RedisRequestOuterClass.SlotKeyRoute result = new redis_request.RedisRequestOuterClass.SlotKeyRoute(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.SlotKeyRoute result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.slotType_ = slotType_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.slotKey_ = slotKey_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.SlotKeyRoute) { + return mergeFrom((redis_request.RedisRequestOuterClass.SlotKeyRoute)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.SlotKeyRoute other) { + if (other == redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance()) return this; + if (other.slotType_ != 0) { + setSlotTypeValue(other.getSlotTypeValue()); + } + if (!other.getSlotKey().isEmpty()) { + slotKey_ = other.slotKey_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + slotType_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: { + slotKey_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private int slotType_ = 0; + /** + * .redis_request.SlotTypes slot_type = 1; + * @return The enum numeric value on the wire for slotType. + */ + @java.lang.Override public int getSlotTypeValue() { + return slotType_; + } + /** + * .redis_request.SlotTypes slot_type = 1; + * @param value The enum numeric value on the wire for slotType to set. + * @return This builder for chaining. + */ + public Builder setSlotTypeValue(int value) { + slotType_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * .redis_request.SlotTypes slot_type = 1; + * @return The slotType. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { + redis_request.RedisRequestOuterClass.SlotTypes result = redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); + return result == null ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED : result; + } + /** + * .redis_request.SlotTypes slot_type = 1; + * @param value The slotType to set. + * @return This builder for chaining. + */ + public Builder setSlotType(redis_request.RedisRequestOuterClass.SlotTypes value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + slotType_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .redis_request.SlotTypes slot_type = 1; + * @return This builder for chaining. + */ + public Builder clearSlotType() { + bitField0_ = (bitField0_ & ~0x00000001); + slotType_ = 0; + onChanged(); + return this; + } + + private java.lang.Object slotKey_ = ""; + /** + * string slot_key = 2; + * @return The slotKey. + */ + public java.lang.String getSlotKey() { + java.lang.Object ref = slotKey_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + slotKey_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string slot_key = 2; + * @return The bytes for slotKey. + */ + public com.google.protobuf.ByteString + getSlotKeyBytes() { + java.lang.Object ref = slotKey_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + slotKey_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string slot_key = 2; + * @param value The slotKey to set. + * @return This builder for chaining. + */ + public Builder setSlotKey( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + slotKey_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * string slot_key = 2; + * @return This builder for chaining. + */ + public Builder clearSlotKey() { + slotKey_ = getDefaultInstance().getSlotKey(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + * string slot_key = 2; + * @param value The bytes for slotKey to set. + * @return This builder for chaining. + */ + public Builder setSlotKeyBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + slotKey_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:redis_request.SlotKeyRoute) + } + + // @@protoc_insertion_point(class_scope:redis_request.SlotKeyRoute) + private static final redis_request.RedisRequestOuterClass.SlotKeyRoute DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.SlotKeyRoute(); + } + + public static redis_request.RedisRequestOuterClass.SlotKeyRoute getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public SlotKeyRoute parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRoute getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface RoutesOrBuilder extends + // @@protoc_insertion_point(interface_extends:redis_request.Routes) + com.google.protobuf.MessageOrBuilder { + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * @return Whether the simpleRoutes field is set. + */ + boolean hasSimpleRoutes(); + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * @return The enum numeric value on the wire for simpleRoutes. + */ + int getSimpleRoutesValue(); + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * @return The simpleRoutes. + */ + redis_request.RedisRequestOuterClass.SimpleRoutes getSimpleRoutes(); + + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + * @return Whether the slotKeyRoute field is set. + */ + boolean hasSlotKeyRoute(); + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + * @return The slotKeyRoute. + */ + redis_request.RedisRequestOuterClass.SlotKeyRoute getSlotKeyRoute(); + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + */ + redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder getSlotKeyRouteOrBuilder(); + + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + * @return Whether the slotIdRoute field is set. + */ + boolean hasSlotIdRoute(); + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + * @return The slotIdRoute. + */ + redis_request.RedisRequestOuterClass.SlotIdRoute getSlotIdRoute(); + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + */ + redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder getSlotIdRouteOrBuilder(); + + redis_request.RedisRequestOuterClass.Routes.ValueCase getValueCase(); + } + /** + * Protobuf type {@code redis_request.Routes} + */ + public static final class Routes extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:redis_request.Routes) + RoutesOrBuilder { + private static final long serialVersionUID = 0L; + // Use Routes.newBuilder() to construct. + private Routes(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Routes() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Routes(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Routes.class, redis_request.RedisRequestOuterClass.Routes.Builder.class); + } + + private int valueCase_ = 0; + @SuppressWarnings("serial") + private java.lang.Object value_; + public enum ValueCase + implements com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + SIMPLE_ROUTES(1), + SLOT_KEY_ROUTE(2), + SLOT_ID_ROUTE(3), + VALUE_NOT_SET(0); + private final int value; + private ValueCase(int value) { + this.value = value; + } + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ValueCase valueOf(int value) { + return forNumber(value); + } + + public static ValueCase forNumber(int value) { + switch (value) { + case 1: return SIMPLE_ROUTES; + case 2: return SLOT_KEY_ROUTE; + case 3: return SLOT_ID_ROUTE; + case 0: return VALUE_NOT_SET; + default: return null; + } + } + public int getNumber() { + return this.value; + } + }; + + public ValueCase + getValueCase() { + return ValueCase.forNumber( + valueCase_); + } + + public static final int SIMPLE_ROUTES_FIELD_NUMBER = 1; + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * @return Whether the simpleRoutes field is set. + */ + public boolean hasSimpleRoutes() { + return valueCase_ == 1; + } + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * @return The enum numeric value on the wire for simpleRoutes. + */ + public int getSimpleRoutesValue() { + if (valueCase_ == 1) { + return (java.lang.Integer) value_; + } + return 0; + } + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * @return The simpleRoutes. + */ + public redis_request.RedisRequestOuterClass.SimpleRoutes getSimpleRoutes() { + if (valueCase_ == 1) { + redis_request.RedisRequestOuterClass.SimpleRoutes result = redis_request.RedisRequestOuterClass.SimpleRoutes.forNumber( + (java.lang.Integer) value_); + return result == null ? redis_request.RedisRequestOuterClass.SimpleRoutes.UNRECOGNIZED : result; + } + return redis_request.RedisRequestOuterClass.SimpleRoutes.AllNodes; + } + + public static final int SLOT_KEY_ROUTE_FIELD_NUMBER = 2; + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + * @return Whether the slotKeyRoute field is set. + */ + @java.lang.Override + public boolean hasSlotKeyRoute() { + return valueCase_ == 2; + } + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + * @return The slotKeyRoute. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRoute getSlotKeyRoute() { + if (valueCase_ == 2) { + return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder getSlotKeyRouteOrBuilder() { + if (valueCase_ == 2) { + return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } + + public static final int SLOT_ID_ROUTE_FIELD_NUMBER = 3; + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + * @return Whether the slotIdRoute field is set. + */ + @java.lang.Override + public boolean hasSlotIdRoute() { + return valueCase_ == 3; + } + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + * @return The slotIdRoute. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRoute getSlotIdRoute() { + if (valueCase_ == 3) { + return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder getSlotIdRouteOrBuilder() { + if (valueCase_ == 3) { + return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (valueCase_ == 1) { + output.writeEnum(1, ((java.lang.Integer) value_)); + } + if (valueCase_ == 2) { + output.writeMessage(2, (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_); + } + if (valueCase_ == 3) { + output.writeMessage(3, (redis_request.RedisRequestOuterClass.SlotIdRoute) value_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (valueCase_ == 1) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, ((java.lang.Integer) value_)); + } + if (valueCase_ == 2) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_); + } + if (valueCase_ == 3) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, (redis_request.RedisRequestOuterClass.SlotIdRoute) value_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.Routes)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.Routes other = (redis_request.RedisRequestOuterClass.Routes) obj; + + if (!getValueCase().equals(other.getValueCase())) return false; + switch (valueCase_) { + case 1: + if (getSimpleRoutesValue() + != other.getSimpleRoutesValue()) return false; + break; + case 2: + if (!getSlotKeyRoute() + .equals(other.getSlotKeyRoute())) return false; + break; + case 3: + if (!getSlotIdRoute() + .equals(other.getSlotIdRoute())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + switch (valueCase_) { + case 1: + hash = (37 * hash) + SIMPLE_ROUTES_FIELD_NUMBER; + hash = (53 * hash) + getSimpleRoutesValue(); + break; + case 2: + hash = (37 * hash) + SLOT_KEY_ROUTE_FIELD_NUMBER; + hash = (53 * hash) + getSlotKeyRoute().hashCode(); + break; + case 3: + hash = (37 * hash) + SLOT_ID_ROUTE_FIELD_NUMBER; + hash = (53 * hash) + getSlotIdRoute().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Routes parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Routes parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Routes parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Routes parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.Routes parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(redis_request.RedisRequestOuterClass.Routes prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code redis_request.Routes} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:redis_request.Routes) + redis_request.RedisRequestOuterClass.RoutesOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Routes.class, redis_request.RedisRequestOuterClass.Routes.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.Routes.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (slotKeyRouteBuilder_ != null) { + slotKeyRouteBuilder_.clear(); + } + if (slotIdRouteBuilder_ != null) { + slotIdRouteBuilder_.clear(); + } + valueCase_ = 0; + value_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Routes getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.Routes.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Routes build() { + redis_request.RedisRequestOuterClass.Routes result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Routes buildPartial() { + redis_request.RedisRequestOuterClass.Routes result = new redis_request.RedisRequestOuterClass.Routes(this); + if (bitField0_ != 0) { buildPartial0(result); } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.Routes result) { + int from_bitField0_ = bitField0_; + } + + private void buildPartialOneofs(redis_request.RedisRequestOuterClass.Routes result) { + result.valueCase_ = valueCase_; + result.value_ = this.value_; + if (valueCase_ == 2 && + slotKeyRouteBuilder_ != null) { + result.value_ = slotKeyRouteBuilder_.build(); + } + if (valueCase_ == 3 && + slotIdRouteBuilder_ != null) { + result.value_ = slotIdRouteBuilder_.build(); + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.Routes) { + return mergeFrom((redis_request.RedisRequestOuterClass.Routes)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.Routes other) { + if (other == redis_request.RedisRequestOuterClass.Routes.getDefaultInstance()) return this; + switch (other.getValueCase()) { + case SIMPLE_ROUTES: { + setSimpleRoutesValue(other.getSimpleRoutesValue()); + break; + } + case SLOT_KEY_ROUTE: { + mergeSlotKeyRoute(other.getSlotKeyRoute()); + break; + } + case SLOT_ID_ROUTE: { + mergeSlotIdRoute(other.getSlotIdRoute()); + break; + } + case VALUE_NOT_SET: { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + int rawValue = input.readEnum(); + valueCase_ = 1; + value_ = rawValue; + break; + } // case 8 + case 18: { + input.readMessage( + getSlotKeyRouteFieldBuilder().getBuilder(), + extensionRegistry); + valueCase_ = 2; + break; + } // case 18 + case 26: { + input.readMessage( + getSlotIdRouteFieldBuilder().getBuilder(), + extensionRegistry); + valueCase_ = 3; + break; + } // case 26 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int valueCase_ = 0; + private java.lang.Object value_; + public ValueCase + getValueCase() { + return ValueCase.forNumber( + valueCase_); + } + + public Builder clearValue() { + valueCase_ = 0; + value_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * @return Whether the simpleRoutes field is set. + */ + @java.lang.Override + public boolean hasSimpleRoutes() { + return valueCase_ == 1; + } + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * @return The enum numeric value on the wire for simpleRoutes. + */ + @java.lang.Override + public int getSimpleRoutesValue() { + if (valueCase_ == 1) { + return ((java.lang.Integer) value_).intValue(); + } + return 0; + } + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * @param value The enum numeric value on the wire for simpleRoutes to set. + * @return This builder for chaining. + */ + public Builder setSimpleRoutesValue(int value) { + valueCase_ = 1; + value_ = value; + onChanged(); + return this; + } + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * @return The simpleRoutes. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SimpleRoutes getSimpleRoutes() { + if (valueCase_ == 1) { + redis_request.RedisRequestOuterClass.SimpleRoutes result = redis_request.RedisRequestOuterClass.SimpleRoutes.forNumber( + (java.lang.Integer) value_); + return result == null ? redis_request.RedisRequestOuterClass.SimpleRoutes.UNRECOGNIZED : result; + } + return redis_request.RedisRequestOuterClass.SimpleRoutes.AllNodes; + } + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * @param value The simpleRoutes to set. + * @return This builder for chaining. + */ + public Builder setSimpleRoutes(redis_request.RedisRequestOuterClass.SimpleRoutes value) { + if (value == null) { + throw new NullPointerException(); + } + valueCase_ = 1; + value_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .redis_request.SimpleRoutes simple_routes = 1; + * @return This builder for chaining. + */ + public Builder clearSimpleRoutes() { + if (valueCase_ == 1) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + return this; + } + + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.SlotKeyRoute, redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder, redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder> slotKeyRouteBuilder_; + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + * @return Whether the slotKeyRoute field is set. + */ + @java.lang.Override + public boolean hasSlotKeyRoute() { + return valueCase_ == 2; + } + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + * @return The slotKeyRoute. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRoute getSlotKeyRoute() { + if (slotKeyRouteBuilder_ == null) { + if (valueCase_ == 2) { + return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } else { + if (valueCase_ == 2) { + return slotKeyRouteBuilder_.getMessage(); + } + return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } + } + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + */ + public Builder setSlotKeyRoute(redis_request.RedisRequestOuterClass.SlotKeyRoute value) { + if (slotKeyRouteBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + value_ = value; + onChanged(); + } else { + slotKeyRouteBuilder_.setMessage(value); + } + valueCase_ = 2; + return this; + } + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + */ + public Builder setSlotKeyRoute( + redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder builderForValue) { + if (slotKeyRouteBuilder_ == null) { + value_ = builderForValue.build(); + onChanged(); + } else { + slotKeyRouteBuilder_.setMessage(builderForValue.build()); + } + valueCase_ = 2; + return this; + } + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + */ + public Builder mergeSlotKeyRoute(redis_request.RedisRequestOuterClass.SlotKeyRoute value) { + if (slotKeyRouteBuilder_ == null) { + if (valueCase_ == 2 && + value_ != redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance()) { + value_ = redis_request.RedisRequestOuterClass.SlotKeyRoute.newBuilder((redis_request.RedisRequestOuterClass.SlotKeyRoute) value_) + .mergeFrom(value).buildPartial(); + } else { + value_ = value; + } + onChanged(); + } else { + if (valueCase_ == 2) { + slotKeyRouteBuilder_.mergeFrom(value); + } else { + slotKeyRouteBuilder_.setMessage(value); + } + } + valueCase_ = 2; + return this; + } + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + */ + public Builder clearSlotKeyRoute() { + if (slotKeyRouteBuilder_ == null) { + if (valueCase_ == 2) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + } else { + if (valueCase_ == 2) { + valueCase_ = 0; + value_ = null; + } + slotKeyRouteBuilder_.clear(); + } + return this; + } + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + */ + public redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder getSlotKeyRouteBuilder() { + return getSlotKeyRouteFieldBuilder().getBuilder(); + } + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder getSlotKeyRouteOrBuilder() { + if ((valueCase_ == 2) && (slotKeyRouteBuilder_ != null)) { + return slotKeyRouteBuilder_.getMessageOrBuilder(); + } else { + if (valueCase_ == 2) { + return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } + } + /** + * .redis_request.SlotKeyRoute slot_key_route = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.SlotKeyRoute, redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder, redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder> + getSlotKeyRouteFieldBuilder() { + if (slotKeyRouteBuilder_ == null) { + if (!(valueCase_ == 2)) { + value_ = redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); + } + slotKeyRouteBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.SlotKeyRoute, redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder, redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder>( + (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_, + getParentForChildren(), + isClean()); + value_ = null; + } + valueCase_ = 2; + onChanged(); + return slotKeyRouteBuilder_; + } + + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.SlotIdRoute, redis_request.RedisRequestOuterClass.SlotIdRoute.Builder, redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder> slotIdRouteBuilder_; + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + * @return Whether the slotIdRoute field is set. + */ + @java.lang.Override + public boolean hasSlotIdRoute() { + return valueCase_ == 3; + } + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + * @return The slotIdRoute. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRoute getSlotIdRoute() { + if (slotIdRouteBuilder_ == null) { + if (valueCase_ == 3) { + return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } else { + if (valueCase_ == 3) { + return slotIdRouteBuilder_.getMessage(); + } + return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } + } + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + */ + public Builder setSlotIdRoute(redis_request.RedisRequestOuterClass.SlotIdRoute value) { + if (slotIdRouteBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + value_ = value; + onChanged(); + } else { + slotIdRouteBuilder_.setMessage(value); + } + valueCase_ = 3; + return this; + } + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + */ + public Builder setSlotIdRoute( + redis_request.RedisRequestOuterClass.SlotIdRoute.Builder builderForValue) { + if (slotIdRouteBuilder_ == null) { + value_ = builderForValue.build(); + onChanged(); + } else { + slotIdRouteBuilder_.setMessage(builderForValue.build()); + } + valueCase_ = 3; + return this; + } + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + */ + public Builder mergeSlotIdRoute(redis_request.RedisRequestOuterClass.SlotIdRoute value) { + if (slotIdRouteBuilder_ == null) { + if (valueCase_ == 3 && + value_ != redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance()) { + value_ = redis_request.RedisRequestOuterClass.SlotIdRoute.newBuilder((redis_request.RedisRequestOuterClass.SlotIdRoute) value_) + .mergeFrom(value).buildPartial(); + } else { + value_ = value; + } + onChanged(); + } else { + if (valueCase_ == 3) { + slotIdRouteBuilder_.mergeFrom(value); + } else { + slotIdRouteBuilder_.setMessage(value); + } + } + valueCase_ = 3; + return this; + } + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + */ + public Builder clearSlotIdRoute() { + if (slotIdRouteBuilder_ == null) { + if (valueCase_ == 3) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + } else { + if (valueCase_ == 3) { + valueCase_ = 0; + value_ = null; + } + slotIdRouteBuilder_.clear(); + } + return this; + } + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + */ + public redis_request.RedisRequestOuterClass.SlotIdRoute.Builder getSlotIdRouteBuilder() { + return getSlotIdRouteFieldBuilder().getBuilder(); + } + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder getSlotIdRouteOrBuilder() { + if ((valueCase_ == 3) && (slotIdRouteBuilder_ != null)) { + return slotIdRouteBuilder_.getMessageOrBuilder(); + } else { + if (valueCase_ == 3) { + return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; + } + return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } + } + /** + * .redis_request.SlotIdRoute slot_id_route = 3; + */ + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.SlotIdRoute, redis_request.RedisRequestOuterClass.SlotIdRoute.Builder, redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder> + getSlotIdRouteFieldBuilder() { + if (slotIdRouteBuilder_ == null) { + if (!(valueCase_ == 3)) { + value_ = redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); + } + slotIdRouteBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.SlotIdRoute, redis_request.RedisRequestOuterClass.SlotIdRoute.Builder, redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder>( + (redis_request.RedisRequestOuterClass.SlotIdRoute) value_, + getParentForChildren(), + isClean()); + value_ = null; + } + valueCase_ = 3; + onChanged(); + return slotIdRouteBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:redis_request.Routes) + } + + // @@protoc_insertion_point(class_scope:redis_request.Routes) + private static final redis_request.RedisRequestOuterClass.Routes DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Routes(); + } + + public static redis_request.RedisRequestOuterClass.Routes getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Routes parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Routes getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface CommandOrBuilder extends + // @@protoc_insertion_point(interface_extends:redis_request.Command) + com.google.protobuf.MessageOrBuilder { + + /** + * .redis_request.RequestType request_type = 1; + * @return The enum numeric value on the wire for requestType. + */ + int getRequestTypeValue(); + /** + * .redis_request.RequestType request_type = 1; + * @return The requestType. + */ + redis_request.RedisRequestOuterClass.RequestType getRequestType(); + + /** + * .redis_request.Command.ArgsArray args_array = 2; + * @return Whether the argsArray field is set. + */ + boolean hasArgsArray(); + /** + * .redis_request.Command.ArgsArray args_array = 2; + * @return The argsArray. + */ + redis_request.RedisRequestOuterClass.Command.ArgsArray getArgsArray(); + /** + * .redis_request.Command.ArgsArray args_array = 2; + */ + redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder getArgsArrayOrBuilder(); + + /** + * uint64 args_vec_pointer = 3; + * @return Whether the argsVecPointer field is set. + */ + boolean hasArgsVecPointer(); + /** + * uint64 args_vec_pointer = 3; + * @return The argsVecPointer. + */ + long getArgsVecPointer(); + + redis_request.RedisRequestOuterClass.Command.ArgsCase getArgsCase(); + } + /** + * Protobuf type {@code redis_request.Command} + */ + public static final class Command extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:redis_request.Command) + CommandOrBuilder { + private static final long serialVersionUID = 0L; + // Use Command.newBuilder() to construct. + private Command(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Command() { + requestType_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Command(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Command.class, redis_request.RedisRequestOuterClass.Command.Builder.class); + } + + public interface ArgsArrayOrBuilder extends + // @@protoc_insertion_point(interface_extends:redis_request.Command.ArgsArray) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated string args = 1; + * @return A list containing the args. + */ + java.util.List + getArgsList(); + /** + * repeated string args = 1; + * @return The count of args. + */ + int getArgsCount(); + /** + * repeated string args = 1; + * @param index The index of the element to return. + * @return The args at the given index. + */ + java.lang.String getArgs(int index); + /** + * repeated string args = 1; + * @param index The index of the value to return. + * @return The bytes of the args at the given index. + */ + com.google.protobuf.ByteString + getArgsBytes(int index); + } + /** + * Protobuf type {@code redis_request.Command.ArgsArray} + */ + public static final class ArgsArray extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:redis_request.Command.ArgsArray) + ArgsArrayOrBuilder { + private static final long serialVersionUID = 0L; + // Use ArgsArray.newBuilder() to construct. + private ArgsArray(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ArgsArray() { + args_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ArgsArray(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_ArgsArray_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_ArgsArray_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Command.ArgsArray.class, redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder.class); + } + + public static final int ARGS_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList args_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + /** + * repeated string args = 1; + * @return A list containing the args. + */ + public com.google.protobuf.ProtocolStringList + getArgsList() { + return args_; + } + /** + * repeated string args = 1; + * @return The count of args. + */ + public int getArgsCount() { + return args_.size(); + } + /** + * repeated string args = 1; + * @param index The index of the element to return. + * @return The args at the given index. + */ + public java.lang.String getArgs(int index) { + return args_.get(index); + } + /** + * repeated string args = 1; + * @param index The index of the value to return. + * @return The bytes of the args at the given index. + */ + public com.google.protobuf.ByteString + getArgsBytes(int index) { + return args_.getByteString(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < args_.size(); i++) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, args_.getRaw(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int i = 0; i < args_.size(); i++) { + dataSize += computeStringSizeNoTag(args_.getRaw(i)); + } + size += dataSize; + size += 1 * getArgsList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.Command.ArgsArray)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.Command.ArgsArray other = (redis_request.RedisRequestOuterClass.Command.ArgsArray) obj; + + if (!getArgsList() + .equals(other.getArgsList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getArgsCount() > 0) { + hash = (37 * hash) + ARGS_FIELD_NUMBER; + hash = (53 * hash) + getArgsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(redis_request.RedisRequestOuterClass.Command.ArgsArray prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code redis_request.Command.ArgsArray} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:redis_request.Command.ArgsArray) + redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_ArgsArray_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_ArgsArray_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Command.ArgsArray.class, redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.Command.ArgsArray.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + args_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_ArgsArray_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArray getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArray build() { + redis_request.RedisRequestOuterClass.Command.ArgsArray result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArray buildPartial() { + redis_request.RedisRequestOuterClass.Command.ArgsArray result = new redis_request.RedisRequestOuterClass.Command.ArgsArray(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.Command.ArgsArray result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + args_.makeImmutable(); + result.args_ = args_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.Command.ArgsArray) { + return mergeFrom((redis_request.RedisRequestOuterClass.Command.ArgsArray)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.Command.ArgsArray other) { + if (other == redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance()) return this; + if (!other.args_.isEmpty()) { + if (args_.isEmpty()) { + args_ = other.args_; + bitField0_ |= 0x00000001; + } else { + ensureArgsIsMutable(); + args_.addAll(other.args_); + } + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + ensureArgsIsMutable(); + args_.add(s); + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private com.google.protobuf.LazyStringArrayList args_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + private void ensureArgsIsMutable() { + if (!args_.isModifiable()) { + args_ = new com.google.protobuf.LazyStringArrayList(args_); + } + bitField0_ |= 0x00000001; + } + /** + * repeated string args = 1; + * @return A list containing the args. + */ + public com.google.protobuf.ProtocolStringList + getArgsList() { + args_.makeImmutable(); + return args_; + } + /** + * repeated string args = 1; + * @return The count of args. + */ + public int getArgsCount() { + return args_.size(); + } + /** + * repeated string args = 1; + * @param index The index of the element to return. + * @return The args at the given index. + */ + public java.lang.String getArgs(int index) { + return args_.get(index); + } + /** + * repeated string args = 1; + * @param index The index of the value to return. + * @return The bytes of the args at the given index. + */ + public com.google.protobuf.ByteString + getArgsBytes(int index) { + return args_.getByteString(index); + } + /** + * repeated string args = 1; + * @param index The index to set the value at. + * @param value The args to set. + * @return This builder for chaining. + */ + public Builder setArgs( + int index, java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + ensureArgsIsMutable(); + args_.set(index, value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * repeated string args = 1; + * @param value The args to add. + * @return This builder for chaining. + */ + public Builder addArgs( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + ensureArgsIsMutable(); + args_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * repeated string args = 1; + * @param values The args to add. + * @return This builder for chaining. + */ + public Builder addAllArgs( + java.lang.Iterable values) { + ensureArgsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, args_); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * repeated string args = 1; + * @return This builder for chaining. + */ + public Builder clearArgs() { + args_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001);; + onChanged(); + return this; + } + /** + * repeated string args = 1; + * @param value The bytes of the args to add. + * @return This builder for chaining. + */ + public Builder addArgsBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + ensureArgsIsMutable(); + args_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:redis_request.Command.ArgsArray) + } + + // @@protoc_insertion_point(class_scope:redis_request.Command.ArgsArray) + private static final redis_request.RedisRequestOuterClass.Command.ArgsArray DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Command.ArgsArray(); + } + + public static redis_request.RedisRequestOuterClass.Command.ArgsArray getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ArgsArray parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArray getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private int argsCase_ = 0; + @SuppressWarnings("serial") + private java.lang.Object args_; + public enum ArgsCase + implements com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + ARGS_ARRAY(2), + ARGS_VEC_POINTER(3), + ARGS_NOT_SET(0); + private final int value; + private ArgsCase(int value) { + this.value = value; + } + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ArgsCase valueOf(int value) { + return forNumber(value); + } + + public static ArgsCase forNumber(int value) { + switch (value) { + case 2: return ARGS_ARRAY; + case 3: return ARGS_VEC_POINTER; + case 0: return ARGS_NOT_SET; + default: return null; + } + } + public int getNumber() { + return this.value; + } + }; + + public ArgsCase + getArgsCase() { + return ArgsCase.forNumber( + argsCase_); + } + + public static final int REQUEST_TYPE_FIELD_NUMBER = 1; + private int requestType_ = 0; + /** + * .redis_request.RequestType request_type = 1; + * @return The enum numeric value on the wire for requestType. + */ + @java.lang.Override public int getRequestTypeValue() { + return requestType_; + } + /** + * .redis_request.RequestType request_type = 1; + * @return The requestType. + */ + @java.lang.Override public redis_request.RedisRequestOuterClass.RequestType getRequestType() { + redis_request.RedisRequestOuterClass.RequestType result = redis_request.RedisRequestOuterClass.RequestType.forNumber(requestType_); + return result == null ? redis_request.RedisRequestOuterClass.RequestType.UNRECOGNIZED : result; + } + + public static final int ARGS_ARRAY_FIELD_NUMBER = 2; + /** + * .redis_request.Command.ArgsArray args_array = 2; + * @return Whether the argsArray field is set. + */ + @java.lang.Override + public boolean hasArgsArray() { + return argsCase_ == 2; + } + /** + * .redis_request.Command.ArgsArray args_array = 2; + * @return The argsArray. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArray getArgsArray() { + if (argsCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; + } + return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } + /** + * .redis_request.Command.ArgsArray args_array = 2; + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder getArgsArrayOrBuilder() { + if (argsCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; + } + return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } + + public static final int ARGS_VEC_POINTER_FIELD_NUMBER = 3; + /** + * uint64 args_vec_pointer = 3; + * @return Whether the argsVecPointer field is set. + */ + @java.lang.Override + public boolean hasArgsVecPointer() { + return argsCase_ == 3; + } + /** + * uint64 args_vec_pointer = 3; + * @return The argsVecPointer. + */ + @java.lang.Override + public long getArgsVecPointer() { + if (argsCase_ == 3) { + return (java.lang.Long) args_; + } + return 0L; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (requestType_ != redis_request.RedisRequestOuterClass.RequestType.InvalidRequest.getNumber()) { + output.writeEnum(1, requestType_); + } + if (argsCase_ == 2) { + output.writeMessage(2, (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_); + } + if (argsCase_ == 3) { + output.writeUInt64( + 3, (long)((java.lang.Long) args_)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (requestType_ != redis_request.RedisRequestOuterClass.RequestType.InvalidRequest.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, requestType_); + } + if (argsCase_ == 2) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_); + } + if (argsCase_ == 3) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size( + 3, (long)((java.lang.Long) args_)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.Command)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.Command other = (redis_request.RedisRequestOuterClass.Command) obj; + + if (requestType_ != other.requestType_) return false; + if (!getArgsCase().equals(other.getArgsCase())) return false; + switch (argsCase_) { + case 2: + if (!getArgsArray() + .equals(other.getArgsArray())) return false; + break; + case 3: + if (getArgsVecPointer() + != other.getArgsVecPointer()) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + REQUEST_TYPE_FIELD_NUMBER; + hash = (53 * hash) + requestType_; + switch (argsCase_) { + case 2: + hash = (37 * hash) + ARGS_ARRAY_FIELD_NUMBER; + hash = (53 * hash) + getArgsArray().hashCode(); + break; + case 3: + hash = (37 * hash) + ARGS_VEC_POINTER_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getArgsVecPointer()); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.Command parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.Command parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Command parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.Command parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Command parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.Command parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Command parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.Command parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Command parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Command parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Command parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.Command parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(redis_request.RedisRequestOuterClass.Command prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code redis_request.Command} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:redis_request.Command) + redis_request.RedisRequestOuterClass.CommandOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Command.class, redis_request.RedisRequestOuterClass.Command.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.Command.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + requestType_ = 0; + if (argsArrayBuilder_ != null) { + argsArrayBuilder_.clear(); + } + argsCase_ = 0; + args_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command build() { + redis_request.RedisRequestOuterClass.Command result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command buildPartial() { + redis_request.RedisRequestOuterClass.Command result = new redis_request.RedisRequestOuterClass.Command(this); + if (bitField0_ != 0) { buildPartial0(result); } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.Command result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.requestType_ = requestType_; + } + } + + private void buildPartialOneofs(redis_request.RedisRequestOuterClass.Command result) { + result.argsCase_ = argsCase_; + result.args_ = this.args_; + if (argsCase_ == 2 && + argsArrayBuilder_ != null) { + result.args_ = argsArrayBuilder_.build(); + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.Command) { + return mergeFrom((redis_request.RedisRequestOuterClass.Command)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.Command other) { + if (other == redis_request.RedisRequestOuterClass.Command.getDefaultInstance()) return this; + if (other.requestType_ != 0) { + setRequestTypeValue(other.getRequestTypeValue()); + } + switch (other.getArgsCase()) { + case ARGS_ARRAY: { + mergeArgsArray(other.getArgsArray()); + break; + } + case ARGS_VEC_POINTER: { + setArgsVecPointer(other.getArgsVecPointer()); + break; + } + case ARGS_NOT_SET: { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + requestType_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: { + input.readMessage( + getArgsArrayFieldBuilder().getBuilder(), + extensionRegistry); + argsCase_ = 2; + break; + } // case 18 + case 24: { + args_ = input.readUInt64(); + argsCase_ = 3; + break; + } // case 24 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int argsCase_ = 0; + private java.lang.Object args_; + public ArgsCase + getArgsCase() { + return ArgsCase.forNumber( + argsCase_); + } + + public Builder clearArgs() { + argsCase_ = 0; + args_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private int requestType_ = 0; + /** + * .redis_request.RequestType request_type = 1; + * @return The enum numeric value on the wire for requestType. + */ + @java.lang.Override public int getRequestTypeValue() { + return requestType_; + } + /** + * .redis_request.RequestType request_type = 1; + * @param value The enum numeric value on the wire for requestType to set. + * @return This builder for chaining. + */ + public Builder setRequestTypeValue(int value) { + requestType_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * .redis_request.RequestType request_type = 1; + * @return The requestType. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.RequestType getRequestType() { + redis_request.RedisRequestOuterClass.RequestType result = redis_request.RedisRequestOuterClass.RequestType.forNumber(requestType_); + return result == null ? redis_request.RedisRequestOuterClass.RequestType.UNRECOGNIZED : result; + } + /** + * .redis_request.RequestType request_type = 1; + * @param value The requestType to set. + * @return This builder for chaining. + */ + public Builder setRequestType(redis_request.RedisRequestOuterClass.RequestType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + requestType_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .redis_request.RequestType request_type = 1; + * @return This builder for chaining. + */ + public Builder clearRequestType() { + bitField0_ = (bitField0_ & ~0x00000001); + requestType_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command.ArgsArray, redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder, redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder> argsArrayBuilder_; + /** + * .redis_request.Command.ArgsArray args_array = 2; + * @return Whether the argsArray field is set. + */ + @java.lang.Override + public boolean hasArgsArray() { + return argsCase_ == 2; + } + /** + * .redis_request.Command.ArgsArray args_array = 2; + * @return The argsArray. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArray getArgsArray() { + if (argsArrayBuilder_ == null) { + if (argsCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; + } + return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } else { + if (argsCase_ == 2) { + return argsArrayBuilder_.getMessage(); + } + return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } + } + /** + * .redis_request.Command.ArgsArray args_array = 2; + */ + public Builder setArgsArray(redis_request.RedisRequestOuterClass.Command.ArgsArray value) { + if (argsArrayBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + args_ = value; + onChanged(); + } else { + argsArrayBuilder_.setMessage(value); + } + argsCase_ = 2; + return this; + } + /** + * .redis_request.Command.ArgsArray args_array = 2; + */ + public Builder setArgsArray( + redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder builderForValue) { + if (argsArrayBuilder_ == null) { + args_ = builderForValue.build(); + onChanged(); + } else { + argsArrayBuilder_.setMessage(builderForValue.build()); + } + argsCase_ = 2; + return this; + } + /** + * .redis_request.Command.ArgsArray args_array = 2; + */ + public Builder mergeArgsArray(redis_request.RedisRequestOuterClass.Command.ArgsArray value) { + if (argsArrayBuilder_ == null) { + if (argsCase_ == 2 && + args_ != redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance()) { + args_ = redis_request.RedisRequestOuterClass.Command.ArgsArray.newBuilder((redis_request.RedisRequestOuterClass.Command.ArgsArray) args_) + .mergeFrom(value).buildPartial(); + } else { + args_ = value; + } + onChanged(); + } else { + if (argsCase_ == 2) { + argsArrayBuilder_.mergeFrom(value); + } else { + argsArrayBuilder_.setMessage(value); + } + } + argsCase_ = 2; + return this; + } + /** + * .redis_request.Command.ArgsArray args_array = 2; + */ + public Builder clearArgsArray() { + if (argsArrayBuilder_ == null) { + if (argsCase_ == 2) { + argsCase_ = 0; + args_ = null; + onChanged(); + } + } else { + if (argsCase_ == 2) { + argsCase_ = 0; + args_ = null; + } + argsArrayBuilder_.clear(); + } + return this; + } + /** + * .redis_request.Command.ArgsArray args_array = 2; + */ + public redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder getArgsArrayBuilder() { + return getArgsArrayFieldBuilder().getBuilder(); + } + /** + * .redis_request.Command.ArgsArray args_array = 2; + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder getArgsArrayOrBuilder() { + if ((argsCase_ == 2) && (argsArrayBuilder_ != null)) { + return argsArrayBuilder_.getMessageOrBuilder(); + } else { + if (argsCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; + } + return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } + } + /** + * .redis_request.Command.ArgsArray args_array = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command.ArgsArray, redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder, redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder> + getArgsArrayFieldBuilder() { + if (argsArrayBuilder_ == null) { + if (!(argsCase_ == 2)) { + args_ = redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); + } + argsArrayBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command.ArgsArray, redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder, redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder>( + (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_, + getParentForChildren(), + isClean()); + args_ = null; + } + argsCase_ = 2; + onChanged(); + return argsArrayBuilder_; + } + + /** + * uint64 args_vec_pointer = 3; + * @return Whether the argsVecPointer field is set. + */ + public boolean hasArgsVecPointer() { + return argsCase_ == 3; + } + /** + * uint64 args_vec_pointer = 3; + * @return The argsVecPointer. + */ + public long getArgsVecPointer() { + if (argsCase_ == 3) { + return (java.lang.Long) args_; + } + return 0L; + } + /** + * uint64 args_vec_pointer = 3; + * @param value The argsVecPointer to set. + * @return This builder for chaining. + */ + public Builder setArgsVecPointer(long value) { + + argsCase_ = 3; + args_ = value; + onChanged(); + return this; + } + /** + * uint64 args_vec_pointer = 3; + * @return This builder for chaining. + */ + public Builder clearArgsVecPointer() { + if (argsCase_ == 3) { + argsCase_ = 0; + args_ = null; + onChanged(); + } + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:redis_request.Command) + } + + // @@protoc_insertion_point(class_scope:redis_request.Command) + private static final redis_request.RedisRequestOuterClass.Command DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Command(); + } + + public static redis_request.RedisRequestOuterClass.Command getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Command parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface TransactionOrBuilder extends + // @@protoc_insertion_point(interface_extends:redis_request.Transaction) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated .redis_request.Command commands = 1; + */ + java.util.List + getCommandsList(); + /** + * repeated .redis_request.Command commands = 1; + */ + redis_request.RedisRequestOuterClass.Command getCommands(int index); + /** + * repeated .redis_request.Command commands = 1; + */ + int getCommandsCount(); + /** + * repeated .redis_request.Command commands = 1; + */ + java.util.List + getCommandsOrBuilderList(); + /** + * repeated .redis_request.Command commands = 1; + */ + redis_request.RedisRequestOuterClass.CommandOrBuilder getCommandsOrBuilder( + int index); + } + /** + * Protobuf type {@code redis_request.Transaction} + */ + public static final class Transaction extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:redis_request.Transaction) + TransactionOrBuilder { + private static final long serialVersionUID = 0L; + // Use Transaction.newBuilder() to construct. + private Transaction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Transaction() { + commands_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Transaction(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Transaction_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Transaction_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Transaction.class, redis_request.RedisRequestOuterClass.Transaction.Builder.class); + } + + public static final int COMMANDS_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private java.util.List commands_; + /** + * repeated .redis_request.Command commands = 1; + */ + @java.lang.Override + public java.util.List getCommandsList() { + return commands_; + } + /** + * repeated .redis_request.Command commands = 1; + */ + @java.lang.Override + public java.util.List + getCommandsOrBuilderList() { + return commands_; + } + /** + * repeated .redis_request.Command commands = 1; + */ + @java.lang.Override + public int getCommandsCount() { + return commands_.size(); + } + /** + * repeated .redis_request.Command commands = 1; + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command getCommands(int index) { + return commands_.get(index); + } + /** + * repeated .redis_request.Command commands = 1; + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.CommandOrBuilder getCommandsOrBuilder( + int index) { + return commands_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < commands_.size(); i++) { + output.writeMessage(1, commands_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < commands_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, commands_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.Transaction)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.Transaction other = (redis_request.RedisRequestOuterClass.Transaction) obj; + + if (!getCommandsList() + .equals(other.getCommandsList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getCommandsCount() > 0) { + hash = (37 * hash) + COMMANDS_FIELD_NUMBER; + hash = (53 * hash) + getCommandsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Transaction parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Transaction parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.Transaction parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.Transaction parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.Transaction parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(redis_request.RedisRequestOuterClass.Transaction prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code redis_request.Transaction} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:redis_request.Transaction) + redis_request.RedisRequestOuterClass.TransactionOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Transaction_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Transaction_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.Transaction.class, redis_request.RedisRequestOuterClass.Transaction.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.Transaction.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (commandsBuilder_ == null) { + commands_ = java.util.Collections.emptyList(); + } else { + commands_ = null; + commandsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_Transaction_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Transaction getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Transaction build() { + redis_request.RedisRequestOuterClass.Transaction result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Transaction buildPartial() { + redis_request.RedisRequestOuterClass.Transaction result = new redis_request.RedisRequestOuterClass.Transaction(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(redis_request.RedisRequestOuterClass.Transaction result) { + if (commandsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + commands_ = java.util.Collections.unmodifiableList(commands_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.commands_ = commands_; + } else { + result.commands_ = commandsBuilder_.build(); + } + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.Transaction result) { + int from_bitField0_ = bitField0_; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.Transaction) { + return mergeFrom((redis_request.RedisRequestOuterClass.Transaction)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.Transaction other) { + if (other == redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance()) return this; + if (commandsBuilder_ == null) { + if (!other.commands_.isEmpty()) { + if (commands_.isEmpty()) { + commands_ = other.commands_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureCommandsIsMutable(); + commands_.addAll(other.commands_); + } + onChanged(); + } + } else { + if (!other.commands_.isEmpty()) { + if (commandsBuilder_.isEmpty()) { + commandsBuilder_.dispose(); + commandsBuilder_ = null; + commands_ = other.commands_; + bitField0_ = (bitField0_ & ~0x00000001); + commandsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getCommandsFieldBuilder() : null; + } else { + commandsBuilder_.addAllMessages(other.commands_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + redis_request.RedisRequestOuterClass.Command m = + input.readMessage( + redis_request.RedisRequestOuterClass.Command.parser(), + extensionRegistry); + if (commandsBuilder_ == null) { + ensureCommandsIsMutable(); + commands_.add(m); + } else { + commandsBuilder_.addMessage(m); + } + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.util.List commands_ = + java.util.Collections.emptyList(); + private void ensureCommandsIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + commands_ = new java.util.ArrayList(commands_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command, redis_request.RedisRequestOuterClass.Command.Builder, redis_request.RedisRequestOuterClass.CommandOrBuilder> commandsBuilder_; + + /** + * repeated .redis_request.Command commands = 1; + */ + public java.util.List getCommandsList() { + if (commandsBuilder_ == null) { + return java.util.Collections.unmodifiableList(commands_); + } else { + return commandsBuilder_.getMessageList(); + } + } + /** + * repeated .redis_request.Command commands = 1; + */ + public int getCommandsCount() { + if (commandsBuilder_ == null) { + return commands_.size(); + } else { + return commandsBuilder_.getCount(); + } + } + /** + * repeated .redis_request.Command commands = 1; + */ + public redis_request.RedisRequestOuterClass.Command getCommands(int index) { + if (commandsBuilder_ == null) { + return commands_.get(index); + } else { + return commandsBuilder_.getMessage(index); + } + } + /** + * repeated .redis_request.Command commands = 1; + */ + public Builder setCommands( + int index, redis_request.RedisRequestOuterClass.Command value) { + if (commandsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCommandsIsMutable(); + commands_.set(index, value); + onChanged(); + } else { + commandsBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .redis_request.Command commands = 1; + */ + public Builder setCommands( + int index, redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { + if (commandsBuilder_ == null) { + ensureCommandsIsMutable(); + commands_.set(index, builderForValue.build()); + onChanged(); + } else { + commandsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .redis_request.Command commands = 1; + */ + public Builder addCommands(redis_request.RedisRequestOuterClass.Command value) { + if (commandsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCommandsIsMutable(); + commands_.add(value); + onChanged(); + } else { + commandsBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .redis_request.Command commands = 1; + */ + public Builder addCommands( + int index, redis_request.RedisRequestOuterClass.Command value) { + if (commandsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCommandsIsMutable(); + commands_.add(index, value); + onChanged(); + } else { + commandsBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .redis_request.Command commands = 1; + */ + public Builder addCommands( + redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { + if (commandsBuilder_ == null) { + ensureCommandsIsMutable(); + commands_.add(builderForValue.build()); + onChanged(); + } else { + commandsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .redis_request.Command commands = 1; + */ + public Builder addCommands( + int index, redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { + if (commandsBuilder_ == null) { + ensureCommandsIsMutable(); + commands_.add(index, builderForValue.build()); + onChanged(); + } else { + commandsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .redis_request.Command commands = 1; + */ + public Builder addAllCommands( + java.lang.Iterable values) { + if (commandsBuilder_ == null) { + ensureCommandsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, commands_); + onChanged(); + } else { + commandsBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .redis_request.Command commands = 1; + */ + public Builder clearCommands() { + if (commandsBuilder_ == null) { + commands_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + commandsBuilder_.clear(); + } + return this; + } + /** + * repeated .redis_request.Command commands = 1; + */ + public Builder removeCommands(int index) { + if (commandsBuilder_ == null) { + ensureCommandsIsMutable(); + commands_.remove(index); + onChanged(); + } else { + commandsBuilder_.remove(index); + } + return this; + } + /** + * repeated .redis_request.Command commands = 1; + */ + public redis_request.RedisRequestOuterClass.Command.Builder getCommandsBuilder( + int index) { + return getCommandsFieldBuilder().getBuilder(index); + } + /** + * repeated .redis_request.Command commands = 1; + */ + public redis_request.RedisRequestOuterClass.CommandOrBuilder getCommandsOrBuilder( + int index) { + if (commandsBuilder_ == null) { + return commands_.get(index); } else { + return commandsBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .redis_request.Command commands = 1; + */ + public java.util.List + getCommandsOrBuilderList() { + if (commandsBuilder_ != null) { + return commandsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(commands_); + } + } + /** + * repeated .redis_request.Command commands = 1; + */ + public redis_request.RedisRequestOuterClass.Command.Builder addCommandsBuilder() { + return getCommandsFieldBuilder().addBuilder( + redis_request.RedisRequestOuterClass.Command.getDefaultInstance()); + } + /** + * repeated .redis_request.Command commands = 1; + */ + public redis_request.RedisRequestOuterClass.Command.Builder addCommandsBuilder( + int index) { + return getCommandsFieldBuilder().addBuilder( + index, redis_request.RedisRequestOuterClass.Command.getDefaultInstance()); + } + /** + * repeated .redis_request.Command commands = 1; + */ + public java.util.List + getCommandsBuilderList() { + return getCommandsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command, redis_request.RedisRequestOuterClass.Command.Builder, redis_request.RedisRequestOuterClass.CommandOrBuilder> + getCommandsFieldBuilder() { + if (commandsBuilder_ == null) { + commandsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command, redis_request.RedisRequestOuterClass.Command.Builder, redis_request.RedisRequestOuterClass.CommandOrBuilder>( + commands_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + commands_ = null; + } + return commandsBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:redis_request.Transaction) + } + + // @@protoc_insertion_point(class_scope:redis_request.Transaction) + private static final redis_request.RedisRequestOuterClass.Transaction DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Transaction(); + } + + public static redis_request.RedisRequestOuterClass.Transaction getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Transaction parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.Transaction getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface RedisRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:redis_request.RedisRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * uint32 callback_idx = 1; + * @return The callbackIdx. + */ + int getCallbackIdx(); + + /** + * .redis_request.Command single_command = 2; + * @return Whether the singleCommand field is set. + */ + boolean hasSingleCommand(); + /** + * .redis_request.Command single_command = 2; + * @return The singleCommand. + */ + redis_request.RedisRequestOuterClass.Command getSingleCommand(); + /** + * .redis_request.Command single_command = 2; + */ + redis_request.RedisRequestOuterClass.CommandOrBuilder getSingleCommandOrBuilder(); + + /** + * .redis_request.Transaction transaction = 3; + * @return Whether the transaction field is set. + */ + boolean hasTransaction(); + /** + * .redis_request.Transaction transaction = 3; + * @return The transaction. + */ + redis_request.RedisRequestOuterClass.Transaction getTransaction(); + /** + * .redis_request.Transaction transaction = 3; + */ + redis_request.RedisRequestOuterClass.TransactionOrBuilder getTransactionOrBuilder(); + + /** + * .redis_request.Routes route = 4; + * @return Whether the route field is set. + */ + boolean hasRoute(); + /** + * .redis_request.Routes route = 4; + * @return The route. + */ + redis_request.RedisRequestOuterClass.Routes getRoute(); + /** + * .redis_request.Routes route = 4; + */ + redis_request.RedisRequestOuterClass.RoutesOrBuilder getRouteOrBuilder(); + + redis_request.RedisRequestOuterClass.RedisRequest.CommandCase getCommandCase(); + } + /** + * Protobuf type {@code redis_request.RedisRequest} + */ + public static final class RedisRequest extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:redis_request.RedisRequest) + RedisRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use RedisRequest.newBuilder() to construct. + private RedisRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private RedisRequest() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new RedisRequest(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_RedisRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_RedisRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.RedisRequest.class, redis_request.RedisRequestOuterClass.RedisRequest.Builder.class); + } + + private int commandCase_ = 0; + @SuppressWarnings("serial") + private java.lang.Object command_; + public enum CommandCase + implements com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + SINGLE_COMMAND(2), + TRANSACTION(3), + COMMAND_NOT_SET(0); + private final int value; + private CommandCase(int value) { + this.value = value; + } + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static CommandCase valueOf(int value) { + return forNumber(value); + } + + public static CommandCase forNumber(int value) { + switch (value) { + case 2: return SINGLE_COMMAND; + case 3: return TRANSACTION; + case 0: return COMMAND_NOT_SET; + default: return null; + } + } + public int getNumber() { + return this.value; + } + }; + + public CommandCase + getCommandCase() { + return CommandCase.forNumber( + commandCase_); + } + + public static final int CALLBACK_IDX_FIELD_NUMBER = 1; + private int callbackIdx_ = 0; + /** + * uint32 callback_idx = 1; + * @return The callbackIdx. + */ + @java.lang.Override + public int getCallbackIdx() { + return callbackIdx_; + } + + public static final int SINGLE_COMMAND_FIELD_NUMBER = 2; + /** + * .redis_request.Command single_command = 2; + * @return Whether the singleCommand field is set. + */ + @java.lang.Override + public boolean hasSingleCommand() { + return commandCase_ == 2; + } + /** + * .redis_request.Command single_command = 2; + * @return The singleCommand. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command getSingleCommand() { + if (commandCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command) command_; + } + return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } + /** + * .redis_request.Command single_command = 2; + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.CommandOrBuilder getSingleCommandOrBuilder() { + if (commandCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command) command_; + } + return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } + + public static final int TRANSACTION_FIELD_NUMBER = 3; + /** + * .redis_request.Transaction transaction = 3; + * @return Whether the transaction field is set. + */ + @java.lang.Override + public boolean hasTransaction() { + return commandCase_ == 3; + } + /** + * .redis_request.Transaction transaction = 3; + * @return The transaction. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Transaction getTransaction() { + if (commandCase_ == 3) { + return (redis_request.RedisRequestOuterClass.Transaction) command_; + } + return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } + /** + * .redis_request.Transaction transaction = 3; + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.TransactionOrBuilder getTransactionOrBuilder() { + if (commandCase_ == 3) { + return (redis_request.RedisRequestOuterClass.Transaction) command_; + } + return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } + + public static final int ROUTE_FIELD_NUMBER = 4; + private redis_request.RedisRequestOuterClass.Routes route_; + /** + * .redis_request.Routes route = 4; + * @return Whether the route field is set. + */ + @java.lang.Override + public boolean hasRoute() { + return route_ != null; + } + /** + * .redis_request.Routes route = 4; + * @return The route. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Routes getRoute() { + return route_ == null ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() : route_; + } + /** + * .redis_request.Routes route = 4; + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.RoutesOrBuilder getRouteOrBuilder() { + return route_ == null ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() : route_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (callbackIdx_ != 0) { + output.writeUInt32(1, callbackIdx_); + } + if (commandCase_ == 2) { + output.writeMessage(2, (redis_request.RedisRequestOuterClass.Command) command_); + } + if (commandCase_ == 3) { + output.writeMessage(3, (redis_request.RedisRequestOuterClass.Transaction) command_); + } + if (route_ != null) { + output.writeMessage(4, getRoute()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (callbackIdx_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(1, callbackIdx_); + } + if (commandCase_ == 2) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, (redis_request.RedisRequestOuterClass.Command) command_); + } + if (commandCase_ == 3) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, (redis_request.RedisRequestOuterClass.Transaction) command_); + } + if (route_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, getRoute()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof redis_request.RedisRequestOuterClass.RedisRequest)) { + return super.equals(obj); + } + redis_request.RedisRequestOuterClass.RedisRequest other = (redis_request.RedisRequestOuterClass.RedisRequest) obj; + + if (getCallbackIdx() + != other.getCallbackIdx()) return false; + if (hasRoute() != other.hasRoute()) return false; + if (hasRoute()) { + if (!getRoute() + .equals(other.getRoute())) return false; + } + if (!getCommandCase().equals(other.getCommandCase())) return false; + switch (commandCase_) { + case 2: + if (!getSingleCommand() + .equals(other.getSingleCommand())) return false; + break; + case 3: + if (!getTransaction() + .equals(other.getTransaction())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + CALLBACK_IDX_FIELD_NUMBER; + hash = (53 * hash) + getCallbackIdx(); + if (hasRoute()) { + hash = (37 * hash) + ROUTE_FIELD_NUMBER; + hash = (53 * hash) + getRoute().hashCode(); + } + switch (commandCase_) { + case 2: + hash = (37 * hash) + SINGLE_COMMAND_FIELD_NUMBER; + hash = (53 * hash) + getSingleCommand().hashCode(); + break; + case 3: + hash = (37 * hash) + TRANSACTION_FIELD_NUMBER; + hash = (53 * hash) + getTransaction().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(redis_request.RedisRequestOuterClass.RedisRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code redis_request.RedisRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:redis_request.RedisRequest) + redis_request.RedisRequestOuterClass.RedisRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_RedisRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_RedisRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + redis_request.RedisRequestOuterClass.RedisRequest.class, redis_request.RedisRequestOuterClass.RedisRequest.Builder.class); + } + + // Construct using redis_request.RedisRequestOuterClass.RedisRequest.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + callbackIdx_ = 0; + if (singleCommandBuilder_ != null) { + singleCommandBuilder_.clear(); + } + if (transactionBuilder_ != null) { + transactionBuilder_.clear(); + } + route_ = null; + if (routeBuilder_ != null) { + routeBuilder_.dispose(); + routeBuilder_ = null; + } + commandCase_ = 0; + command_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return redis_request.RedisRequestOuterClass.internal_static_redis_request_RedisRequest_descriptor; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.RedisRequest getDefaultInstanceForType() { + return redis_request.RedisRequestOuterClass.RedisRequest.getDefaultInstance(); + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.RedisRequest build() { + redis_request.RedisRequestOuterClass.RedisRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.RedisRequest buildPartial() { + redis_request.RedisRequestOuterClass.RedisRequest result = new redis_request.RedisRequestOuterClass.RedisRequest(this); + if (bitField0_ != 0) { buildPartial0(result); } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(redis_request.RedisRequestOuterClass.RedisRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.callbackIdx_ = callbackIdx_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.route_ = routeBuilder_ == null + ? route_ + : routeBuilder_.build(); + } + } + + private void buildPartialOneofs(redis_request.RedisRequestOuterClass.RedisRequest result) { + result.commandCase_ = commandCase_; + result.command_ = this.command_; + if (commandCase_ == 2 && + singleCommandBuilder_ != null) { + result.command_ = singleCommandBuilder_.build(); + } + if (commandCase_ == 3 && + transactionBuilder_ != null) { + result.command_ = transactionBuilder_.build(); + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof redis_request.RedisRequestOuterClass.RedisRequest) { + return mergeFrom((redis_request.RedisRequestOuterClass.RedisRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(redis_request.RedisRequestOuterClass.RedisRequest other) { + if (other == redis_request.RedisRequestOuterClass.RedisRequest.getDefaultInstance()) return this; + if (other.getCallbackIdx() != 0) { + setCallbackIdx(other.getCallbackIdx()); + } + if (other.hasRoute()) { + mergeRoute(other.getRoute()); + } + switch (other.getCommandCase()) { + case SINGLE_COMMAND: { + mergeSingleCommand(other.getSingleCommand()); + break; + } + case TRANSACTION: { + mergeTransaction(other.getTransaction()); + break; + } + case COMMAND_NOT_SET: { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + callbackIdx_ = input.readUInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: { + input.readMessage( + getSingleCommandFieldBuilder().getBuilder(), + extensionRegistry); + commandCase_ = 2; + break; + } // case 18 + case 26: { + input.readMessage( + getTransactionFieldBuilder().getBuilder(), + extensionRegistry); + commandCase_ = 3; + break; + } // case 26 + case 34: { + input.readMessage( + getRouteFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 34 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int commandCase_ = 0; + private java.lang.Object command_; + public CommandCase + getCommandCase() { + return CommandCase.forNumber( + commandCase_); + } + + public Builder clearCommand() { + commandCase_ = 0; + command_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private int callbackIdx_ ; + /** + * uint32 callback_idx = 1; + * @return The callbackIdx. + */ + @java.lang.Override + public int getCallbackIdx() { + return callbackIdx_; + } + /** + * uint32 callback_idx = 1; + * @param value The callbackIdx to set. + * @return This builder for chaining. + */ + public Builder setCallbackIdx(int value) { + + callbackIdx_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * uint32 callback_idx = 1; + * @return This builder for chaining. + */ + public Builder clearCallbackIdx() { + bitField0_ = (bitField0_ & ~0x00000001); + callbackIdx_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command, redis_request.RedisRequestOuterClass.Command.Builder, redis_request.RedisRequestOuterClass.CommandOrBuilder> singleCommandBuilder_; + /** + * .redis_request.Command single_command = 2; + * @return Whether the singleCommand field is set. + */ + @java.lang.Override + public boolean hasSingleCommand() { + return commandCase_ == 2; + } + /** + * .redis_request.Command single_command = 2; + * @return The singleCommand. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Command getSingleCommand() { + if (singleCommandBuilder_ == null) { + if (commandCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command) command_; + } + return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } else { + if (commandCase_ == 2) { + return singleCommandBuilder_.getMessage(); + } + return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } + } + /** + * .redis_request.Command single_command = 2; + */ + public Builder setSingleCommand(redis_request.RedisRequestOuterClass.Command value) { + if (singleCommandBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + command_ = value; + onChanged(); + } else { + singleCommandBuilder_.setMessage(value); + } + commandCase_ = 2; + return this; + } + /** + * .redis_request.Command single_command = 2; + */ + public Builder setSingleCommand( + redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { + if (singleCommandBuilder_ == null) { + command_ = builderForValue.build(); + onChanged(); + } else { + singleCommandBuilder_.setMessage(builderForValue.build()); + } + commandCase_ = 2; + return this; + } + /** + * .redis_request.Command single_command = 2; + */ + public Builder mergeSingleCommand(redis_request.RedisRequestOuterClass.Command value) { + if (singleCommandBuilder_ == null) { + if (commandCase_ == 2 && + command_ != redis_request.RedisRequestOuterClass.Command.getDefaultInstance()) { + command_ = redis_request.RedisRequestOuterClass.Command.newBuilder((redis_request.RedisRequestOuterClass.Command) command_) + .mergeFrom(value).buildPartial(); + } else { + command_ = value; + } + onChanged(); + } else { + if (commandCase_ == 2) { + singleCommandBuilder_.mergeFrom(value); + } else { + singleCommandBuilder_.setMessage(value); + } + } + commandCase_ = 2; + return this; + } + /** + * .redis_request.Command single_command = 2; + */ + public Builder clearSingleCommand() { + if (singleCommandBuilder_ == null) { + if (commandCase_ == 2) { + commandCase_ = 0; + command_ = null; + onChanged(); + } + } else { + if (commandCase_ == 2) { + commandCase_ = 0; + command_ = null; + } + singleCommandBuilder_.clear(); + } + return this; + } + /** + * .redis_request.Command single_command = 2; + */ + public redis_request.RedisRequestOuterClass.Command.Builder getSingleCommandBuilder() { + return getSingleCommandFieldBuilder().getBuilder(); + } + /** + * .redis_request.Command single_command = 2; + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.CommandOrBuilder getSingleCommandOrBuilder() { + if ((commandCase_ == 2) && (singleCommandBuilder_ != null)) { + return singleCommandBuilder_.getMessageOrBuilder(); + } else { + if (commandCase_ == 2) { + return (redis_request.RedisRequestOuterClass.Command) command_; + } + return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } + } + /** + * .redis_request.Command single_command = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command, redis_request.RedisRequestOuterClass.Command.Builder, redis_request.RedisRequestOuterClass.CommandOrBuilder> + getSingleCommandFieldBuilder() { + if (singleCommandBuilder_ == null) { + if (!(commandCase_ == 2)) { + command_ = redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); + } + singleCommandBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Command, redis_request.RedisRequestOuterClass.Command.Builder, redis_request.RedisRequestOuterClass.CommandOrBuilder>( + (redis_request.RedisRequestOuterClass.Command) command_, + getParentForChildren(), + isClean()); + command_ = null; + } + commandCase_ = 2; + onChanged(); + return singleCommandBuilder_; + } + + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Transaction, redis_request.RedisRequestOuterClass.Transaction.Builder, redis_request.RedisRequestOuterClass.TransactionOrBuilder> transactionBuilder_; + /** + * .redis_request.Transaction transaction = 3; + * @return Whether the transaction field is set. + */ + @java.lang.Override + public boolean hasTransaction() { + return commandCase_ == 3; + } + /** + * .redis_request.Transaction transaction = 3; + * @return The transaction. + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.Transaction getTransaction() { + if (transactionBuilder_ == null) { + if (commandCase_ == 3) { + return (redis_request.RedisRequestOuterClass.Transaction) command_; + } + return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } else { + if (commandCase_ == 3) { + return transactionBuilder_.getMessage(); + } + return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } + } + /** + * .redis_request.Transaction transaction = 3; + */ + public Builder setTransaction(redis_request.RedisRequestOuterClass.Transaction value) { + if (transactionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + command_ = value; + onChanged(); + } else { + transactionBuilder_.setMessage(value); + } + commandCase_ = 3; + return this; + } + /** + * .redis_request.Transaction transaction = 3; + */ + public Builder setTransaction( + redis_request.RedisRequestOuterClass.Transaction.Builder builderForValue) { + if (transactionBuilder_ == null) { + command_ = builderForValue.build(); + onChanged(); + } else { + transactionBuilder_.setMessage(builderForValue.build()); + } + commandCase_ = 3; + return this; + } + /** + * .redis_request.Transaction transaction = 3; + */ + public Builder mergeTransaction(redis_request.RedisRequestOuterClass.Transaction value) { + if (transactionBuilder_ == null) { + if (commandCase_ == 3 && + command_ != redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance()) { + command_ = redis_request.RedisRequestOuterClass.Transaction.newBuilder((redis_request.RedisRequestOuterClass.Transaction) command_) + .mergeFrom(value).buildPartial(); + } else { + command_ = value; + } + onChanged(); + } else { + if (commandCase_ == 3) { + transactionBuilder_.mergeFrom(value); + } else { + transactionBuilder_.setMessage(value); + } + } + commandCase_ = 3; + return this; + } + /** + * .redis_request.Transaction transaction = 3; + */ + public Builder clearTransaction() { + if (transactionBuilder_ == null) { + if (commandCase_ == 3) { + commandCase_ = 0; + command_ = null; + onChanged(); + } + } else { + if (commandCase_ == 3) { + commandCase_ = 0; + command_ = null; + } + transactionBuilder_.clear(); + } + return this; + } + /** + * .redis_request.Transaction transaction = 3; + */ + public redis_request.RedisRequestOuterClass.Transaction.Builder getTransactionBuilder() { + return getTransactionFieldBuilder().getBuilder(); + } + /** + * .redis_request.Transaction transaction = 3; + */ + @java.lang.Override + public redis_request.RedisRequestOuterClass.TransactionOrBuilder getTransactionOrBuilder() { + if ((commandCase_ == 3) && (transactionBuilder_ != null)) { + return transactionBuilder_.getMessageOrBuilder(); + } else { + if (commandCase_ == 3) { + return (redis_request.RedisRequestOuterClass.Transaction) command_; + } + return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } + } + /** + * .redis_request.Transaction transaction = 3; + */ + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Transaction, redis_request.RedisRequestOuterClass.Transaction.Builder, redis_request.RedisRequestOuterClass.TransactionOrBuilder> + getTransactionFieldBuilder() { + if (transactionBuilder_ == null) { + if (!(commandCase_ == 3)) { + command_ = redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); + } + transactionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Transaction, redis_request.RedisRequestOuterClass.Transaction.Builder, redis_request.RedisRequestOuterClass.TransactionOrBuilder>( + (redis_request.RedisRequestOuterClass.Transaction) command_, + getParentForChildren(), + isClean()); + command_ = null; + } + commandCase_ = 3; + onChanged(); + return transactionBuilder_; + } + + private redis_request.RedisRequestOuterClass.Routes route_; + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Routes, redis_request.RedisRequestOuterClass.Routes.Builder, redis_request.RedisRequestOuterClass.RoutesOrBuilder> routeBuilder_; + /** + * .redis_request.Routes route = 4; + * @return Whether the route field is set. + */ + public boolean hasRoute() { + return ((bitField0_ & 0x00000008) != 0); + } + /** + * .redis_request.Routes route = 4; + * @return The route. + */ + public redis_request.RedisRequestOuterClass.Routes getRoute() { + if (routeBuilder_ == null) { + return route_ == null ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() : route_; + } else { + return routeBuilder_.getMessage(); + } + } + /** + * .redis_request.Routes route = 4; + */ + public Builder setRoute(redis_request.RedisRequestOuterClass.Routes value) { + if (routeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + route_ = value; + } else { + routeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + * .redis_request.Routes route = 4; + */ + public Builder setRoute( + redis_request.RedisRequestOuterClass.Routes.Builder builderForValue) { + if (routeBuilder_ == null) { + route_ = builderForValue.build(); + } else { + routeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + * .redis_request.Routes route = 4; + */ + public Builder mergeRoute(redis_request.RedisRequestOuterClass.Routes value) { + if (routeBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) && + route_ != null && + route_ != redis_request.RedisRequestOuterClass.Routes.getDefaultInstance()) { + getRouteBuilder().mergeFrom(value); + } else { + route_ = value; + } + } else { + routeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + * .redis_request.Routes route = 4; + */ + public Builder clearRoute() { + bitField0_ = (bitField0_ & ~0x00000008); + route_ = null; + if (routeBuilder_ != null) { + routeBuilder_.dispose(); + routeBuilder_ = null; + } + onChanged(); + return this; + } + /** + * .redis_request.Routes route = 4; + */ + public redis_request.RedisRequestOuterClass.Routes.Builder getRouteBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return getRouteFieldBuilder().getBuilder(); + } + /** + * .redis_request.Routes route = 4; + */ + public redis_request.RedisRequestOuterClass.RoutesOrBuilder getRouteOrBuilder() { + if (routeBuilder_ != null) { + return routeBuilder_.getMessageOrBuilder(); + } else { + return route_ == null ? + redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() : route_; + } + } + /** + * .redis_request.Routes route = 4; + */ + private com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Routes, redis_request.RedisRequestOuterClass.Routes.Builder, redis_request.RedisRequestOuterClass.RoutesOrBuilder> + getRouteFieldBuilder() { + if (routeBuilder_ == null) { + routeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + redis_request.RedisRequestOuterClass.Routes, redis_request.RedisRequestOuterClass.Routes.Builder, redis_request.RedisRequestOuterClass.RoutesOrBuilder>( + getRoute(), + getParentForChildren(), + isClean()); + route_ = null; + } + return routeBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:redis_request.RedisRequest) + } + + // @@protoc_insertion_point(class_scope:redis_request.RedisRequest) + private static final redis_request.RedisRequestOuterClass.RedisRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.RedisRequest(); + } + + public static redis_request.RedisRequestOuterClass.RedisRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public RedisRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public redis_request.RedisRequestOuterClass.RedisRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_SlotIdRoute_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_SlotIdRoute_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_SlotKeyRoute_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_SlotKeyRoute_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_Routes_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_Routes_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_Command_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_Command_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_Command_ArgsArray_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_Command_ArgsArray_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_Transaction_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_Transaction_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_redis_request_RedisRequest_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_redis_request_RedisRequest_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\034protobuf/redis_request.proto\022\rredis_re" + + "quest\"K\n\013SlotIdRoute\022+\n\tslot_type\030\001 \001(\0162" + + "\030.redis_request.SlotTypes\022\017\n\007slot_id\030\002 \001" + + "(\005\"M\n\014SlotKeyRoute\022+\n\tslot_type\030\001 \001(\0162\030." + + "redis_request.SlotTypes\022\020\n\010slot_key\030\002 \001(" + + "\t\"\263\001\n\006Routes\0224\n\rsimple_routes\030\001 \001(\0162\033.re" + + "dis_request.SimpleRoutesH\000\0225\n\016slot_key_r" + + "oute\030\002 \001(\0132\033.redis_request.SlotKeyRouteH" + + "\000\0223\n\rslot_id_route\030\003 \001(\0132\032.redis_request" + + ".SlotIdRouteH\000B\007\n\005value\"\262\001\n\007Command\0220\n\014r" + + "equest_type\030\001 \001(\0162\032.redis_request.Reques" + + "tType\0226\n\nargs_array\030\002 \001(\0132 .redis_reques" + + "t.Command.ArgsArrayH\000\022\032\n\020args_vec_pointe" + + "r\030\003 \001(\004H\000\032\031\n\tArgsArray\022\014\n\004args\030\001 \003(\tB\006\n\004" + + "args\"7\n\013Transaction\022(\n\010commands\030\001 \003(\0132\026." + + "redis_request.Command\"\272\001\n\014RedisRequest\022\024" + + "\n\014callback_idx\030\001 \001(\r\0220\n\016single_command\030\002" + + " \001(\0132\026.redis_request.CommandH\000\0221\n\013transa" + + "ction\030\003 \001(\0132\032.redis_request.TransactionH" + + "\000\022$\n\005route\030\004 \001(\0132\025.redis_request.RoutesB" + + "\t\n\007command*:\n\014SimpleRoutes\022\014\n\010AllNodes\020\000" + + "\022\020\n\014AllPrimaries\020\001\022\n\n\006Random\020\002*%\n\tSlotTy" + + "pes\022\013\n\007Primary\020\000\022\013\n\007Replica\020\001*\354\006\n\013Reques" + + "tType\022\022\n\016InvalidRequest\020\000\022\021\n\rCustomComma" + + "nd\020\001\022\r\n\tGetString\020\002\022\r\n\tSetString\020\003\022\010\n\004Pi" + + "ng\020\004\022\010\n\004Info\020\005\022\007\n\003Del\020\006\022\n\n\006Select\020\007\022\r\n\tC" + + "onfigGet\020\010\022\r\n\tConfigSet\020\t\022\023\n\017ConfigReset" + + "Stat\020\n\022\021\n\rConfigRewrite\020\013\022\021\n\rClientGetNa" + + "me\020\014\022\022\n\016ClientGetRedir\020\r\022\014\n\010ClientId\020\016\022\016" + + "\n\nClientInfo\020\017\022\016\n\nClientKill\020\020\022\016\n\nClient" + + "List\020\021\022\021\n\rClientNoEvict\020\022\022\021\n\rClientNoTou" + + "ch\020\023\022\017\n\013ClientPause\020\024\022\017\n\013ClientReply\020\025\022\021" + + "\n\rClientSetInfo\020\026\022\021\n\rClientSetName\020\027\022\021\n\r" + + "ClientUnblock\020\030\022\021\n\rClientUnpause\020\031\022\n\n\006Ex" + + "pire\020\032\022\013\n\007HashSet\020\033\022\013\n\007HashGet\020\034\022\013\n\007Hash" + + "Del\020\035\022\016\n\nHashExists\020\036\022\010\n\004MGet\020\037\022\010\n\004MSet\020" + + " \022\010\n\004Incr\020!\022\n\n\006IncrBy\020\"\022\010\n\004Decr\020#\022\017\n\013Inc" + + "rByFloat\020$\022\n\n\006DecrBy\020%\022\016\n\nHashGetAll\020&\022\014" + + "\n\010HashMSet\020\'\022\014\n\010HashMGet\020(\022\016\n\nHashIncrBy" + + "\020)\022\023\n\017HashIncrByFloat\020*\022\t\n\005LPush\020+\022\010\n\004LP" + + "op\020,\022\t\n\005RPush\020-\022\010\n\004RPop\020.\022\010\n\004LLen\020/\022\010\n\004L" + + "Rem\0200\022\n\n\006LRange\0201\022\t\n\005LTrim\0202\022\010\n\004SAdd\0203\022\010" + + "\n\004SRem\0204\022\014\n\010SMembers\0205\022\t\n\005SCard\0206\022\r\n\tPEx" + + "pireAt\0207\022\013\n\007PExpire\0208\022\014\n\010ExpireAt\0209\022\n\n\006E" + + "xists\020:\022\n\n\006Unlink\020;\022\007\n\003TTL\020Unspecified = 0; + */ + Unspecified(0), + /** + * ExecAbort = 1; + */ + ExecAbort(1), + /** + * Timeout = 2; + */ + Timeout(2), + /** + * Disconnect = 3; + */ + Disconnect(3), + UNRECOGNIZED(-1), + ; + + /** + * Unspecified = 0; + */ + public static final int Unspecified_VALUE = 0; + /** + * ExecAbort = 1; + */ + public static final int ExecAbort_VALUE = 1; + /** + * Timeout = 2; + */ + public static final int Timeout_VALUE = 2; + /** + * Disconnect = 3; + */ + public static final int Disconnect_VALUE = 3; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static RequestErrorType valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static RequestErrorType forNumber(int value) { + switch (value) { + case 0: return Unspecified; + case 1: return ExecAbort; + case 2: return Timeout; + case 3: return Disconnect; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + RequestErrorType> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RequestErrorType findValueByNumber(int number) { + return RequestErrorType.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return response.ResponseOuterClass.getDescriptor().getEnumTypes().get(0); + } + + private static final RequestErrorType[] VALUES = values(); + + public static RequestErrorType valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private RequestErrorType(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:response.RequestErrorType) + } + + /** + * Protobuf enum {@code response.ConstantResponse} + */ + public enum ConstantResponse + implements com.google.protobuf.ProtocolMessageEnum { + /** + * OK = 0; + */ + OK(0), + UNRECOGNIZED(-1), + ; + + /** + * OK = 0; + */ + public static final int OK_VALUE = 0; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ConstantResponse valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static ConstantResponse forNumber(int value) { + switch (value) { + case 0: return OK; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + ConstantResponse> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public ConstantResponse findValueByNumber(int number) { + return ConstantResponse.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return response.ResponseOuterClass.getDescriptor().getEnumTypes().get(1); + } + + private static final ConstantResponse[] VALUES = values(); + + public static ConstantResponse valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private ConstantResponse(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:response.ConstantResponse) + } + + public interface RequestErrorOrBuilder extends + // @@protoc_insertion_point(interface_extends:response.RequestError) + com.google.protobuf.MessageOrBuilder { + + /** + * .response.RequestErrorType type = 1; + * @return The enum numeric value on the wire for type. + */ + int getTypeValue(); + /** + * .response.RequestErrorType type = 1; + * @return The type. + */ + response.ResponseOuterClass.RequestErrorType getType(); + + /** + * string message = 2; + * @return The message. + */ + java.lang.String getMessage(); + /** + * string message = 2; + * @return The bytes for message. + */ + com.google.protobuf.ByteString + getMessageBytes(); + } + /** + * Protobuf type {@code response.RequestError} + */ + public static final class RequestError extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:response.RequestError) + RequestErrorOrBuilder { + private static final long serialVersionUID = 0L; + // Use RequestError.newBuilder() to construct. + private RequestError(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private RequestError() { + type_ = 0; + message_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new RequestError(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return response.ResponseOuterClass.internal_static_response_RequestError_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return response.ResponseOuterClass.internal_static_response_RequestError_fieldAccessorTable + .ensureFieldAccessorsInitialized( + response.ResponseOuterClass.RequestError.class, response.ResponseOuterClass.RequestError.Builder.class); + } + + public static final int TYPE_FIELD_NUMBER = 1; + private int type_ = 0; + /** + * .response.RequestErrorType type = 1; + * @return The enum numeric value on the wire for type. + */ + @java.lang.Override public int getTypeValue() { + return type_; + } + /** + * .response.RequestErrorType type = 1; + * @return The type. + */ + @java.lang.Override public response.ResponseOuterClass.RequestErrorType getType() { + response.ResponseOuterClass.RequestErrorType result = response.ResponseOuterClass.RequestErrorType.forNumber(type_); + return result == null ? response.ResponseOuterClass.RequestErrorType.UNRECOGNIZED : result; + } + + public static final int MESSAGE_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private volatile java.lang.Object message_ = ""; + /** + * string message = 2; + * @return The message. + */ + @java.lang.Override + public java.lang.String getMessage() { + java.lang.Object ref = message_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + message_ = s; + return s; + } + } + /** + * string message = 2; + * @return The bytes for message. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getMessageBytes() { + java.lang.Object ref = message_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + message_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (type_ != response.ResponseOuterClass.RequestErrorType.Unspecified.getNumber()) { + output.writeEnum(1, type_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, message_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (type_ != response.ResponseOuterClass.RequestErrorType.Unspecified.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, type_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, message_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof response.ResponseOuterClass.RequestError)) { + return super.equals(obj); + } + response.ResponseOuterClass.RequestError other = (response.ResponseOuterClass.RequestError) obj; + + if (type_ != other.type_) return false; + if (!getMessage() + .equals(other.getMessage())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TYPE_FIELD_NUMBER; + hash = (53 * hash) + type_; + hash = (37 * hash) + MESSAGE_FIELD_NUMBER; + hash = (53 * hash) + getMessage().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static response.ResponseOuterClass.RequestError parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static response.ResponseOuterClass.RequestError parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static response.ResponseOuterClass.RequestError parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static response.ResponseOuterClass.RequestError parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static response.ResponseOuterClass.RequestError parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static response.ResponseOuterClass.RequestError parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static response.ResponseOuterClass.RequestError parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static response.ResponseOuterClass.RequestError parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static response.ResponseOuterClass.RequestError parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static response.ResponseOuterClass.RequestError parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static response.ResponseOuterClass.RequestError parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static response.ResponseOuterClass.RequestError parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(response.ResponseOuterClass.RequestError prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code response.RequestError} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:response.RequestError) + response.ResponseOuterClass.RequestErrorOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return response.ResponseOuterClass.internal_static_response_RequestError_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return response.ResponseOuterClass.internal_static_response_RequestError_fieldAccessorTable + .ensureFieldAccessorsInitialized( + response.ResponseOuterClass.RequestError.class, response.ResponseOuterClass.RequestError.Builder.class); + } + + // Construct using response.ResponseOuterClass.RequestError.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + type_ = 0; + message_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return response.ResponseOuterClass.internal_static_response_RequestError_descriptor; + } + + @java.lang.Override + public response.ResponseOuterClass.RequestError getDefaultInstanceForType() { + return response.ResponseOuterClass.RequestError.getDefaultInstance(); + } + + @java.lang.Override + public response.ResponseOuterClass.RequestError build() { + response.ResponseOuterClass.RequestError result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public response.ResponseOuterClass.RequestError buildPartial() { + response.ResponseOuterClass.RequestError result = new response.ResponseOuterClass.RequestError(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(response.ResponseOuterClass.RequestError result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.type_ = type_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.message_ = message_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof response.ResponseOuterClass.RequestError) { + return mergeFrom((response.ResponseOuterClass.RequestError)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(response.ResponseOuterClass.RequestError other) { + if (other == response.ResponseOuterClass.RequestError.getDefaultInstance()) return this; + if (other.type_ != 0) { + setTypeValue(other.getTypeValue()); + } + if (!other.getMessage().isEmpty()) { + message_ = other.message_; + bitField0_ |= 0x00000002; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + type_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: { + message_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private int type_ = 0; + /** + * .response.RequestErrorType type = 1; + * @return The enum numeric value on the wire for type. + */ + @java.lang.Override public int getTypeValue() { + return type_; + } + /** + * .response.RequestErrorType type = 1; + * @param value The enum numeric value on the wire for type to set. + * @return This builder for chaining. + */ + public Builder setTypeValue(int value) { + type_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * .response.RequestErrorType type = 1; + * @return The type. + */ + @java.lang.Override + public response.ResponseOuterClass.RequestErrorType getType() { + response.ResponseOuterClass.RequestErrorType result = response.ResponseOuterClass.RequestErrorType.forNumber(type_); + return result == null ? response.ResponseOuterClass.RequestErrorType.UNRECOGNIZED : result; + } + /** + * .response.RequestErrorType type = 1; + * @param value The type to set. + * @return This builder for chaining. + */ + public Builder setType(response.ResponseOuterClass.RequestErrorType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + type_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .response.RequestErrorType type = 1; + * @return This builder for chaining. + */ + public Builder clearType() { + bitField0_ = (bitField0_ & ~0x00000001); + type_ = 0; + onChanged(); + return this; + } + + private java.lang.Object message_ = ""; + /** + * string message = 2; + * @return The message. + */ + public java.lang.String getMessage() { + java.lang.Object ref = message_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + message_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string message = 2; + * @return The bytes for message. + */ + public com.google.protobuf.ByteString + getMessageBytes() { + java.lang.Object ref = message_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + message_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string message = 2; + * @param value The message to set. + * @return This builder for chaining. + */ + public Builder setMessage( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + message_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * string message = 2; + * @return This builder for chaining. + */ + public Builder clearMessage() { + message_ = getDefaultInstance().getMessage(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + * string message = 2; + * @param value The bytes for message to set. + * @return This builder for chaining. + */ + public Builder setMessageBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + message_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:response.RequestError) + } + + // @@protoc_insertion_point(class_scope:response.RequestError) + private static final response.ResponseOuterClass.RequestError DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new response.ResponseOuterClass.RequestError(); + } + + public static response.ResponseOuterClass.RequestError getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public RequestError parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public response.ResponseOuterClass.RequestError getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:response.Response) + com.google.protobuf.MessageOrBuilder { + + /** + * uint32 callback_idx = 1; + * @return The callbackIdx. + */ + int getCallbackIdx(); + + /** + * uint64 resp_pointer = 2; + * @return Whether the respPointer field is set. + */ + boolean hasRespPointer(); + /** + * uint64 resp_pointer = 2; + * @return The respPointer. + */ + long getRespPointer(); + + /** + * .response.ConstantResponse constant_response = 3; + * @return Whether the constantResponse field is set. + */ + boolean hasConstantResponse(); + /** + * .response.ConstantResponse constant_response = 3; + * @return The enum numeric value on the wire for constantResponse. + */ + int getConstantResponseValue(); + /** + * .response.ConstantResponse constant_response = 3; + * @return The constantResponse. + */ + response.ResponseOuterClass.ConstantResponse getConstantResponse(); + + /** + * .response.RequestError request_error = 4; + * @return Whether the requestError field is set. + */ + boolean hasRequestError(); + /** + * .response.RequestError request_error = 4; + * @return The requestError. + */ + response.ResponseOuterClass.RequestError getRequestError(); + /** + * .response.RequestError request_error = 4; + */ + response.ResponseOuterClass.RequestErrorOrBuilder getRequestErrorOrBuilder(); + + /** + * string closing_error = 5; + * @return Whether the closingError field is set. + */ + boolean hasClosingError(); + /** + * string closing_error = 5; + * @return The closingError. + */ + java.lang.String getClosingError(); + /** + * string closing_error = 5; + * @return The bytes for closingError. + */ + com.google.protobuf.ByteString + getClosingErrorBytes(); + + response.ResponseOuterClass.Response.ValueCase getValueCase(); + } + /** + * Protobuf type {@code response.Response} + */ + public static final class Response extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:response.Response) + ResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use Response.newBuilder() to construct. + private Response(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Response() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Response(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return response.ResponseOuterClass.internal_static_response_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return response.ResponseOuterClass.internal_static_response_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + response.ResponseOuterClass.Response.class, response.ResponseOuterClass.Response.Builder.class); + } + + private int valueCase_ = 0; + @SuppressWarnings("serial") + private java.lang.Object value_; + public enum ValueCase + implements com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + RESP_POINTER(2), + CONSTANT_RESPONSE(3), + REQUEST_ERROR(4), + CLOSING_ERROR(5), + VALUE_NOT_SET(0); + private final int value; + private ValueCase(int value) { + this.value = value; + } + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ValueCase valueOf(int value) { + return forNumber(value); + } + + public static ValueCase forNumber(int value) { + switch (value) { + case 2: return RESP_POINTER; + case 3: return CONSTANT_RESPONSE; + case 4: return REQUEST_ERROR; + case 5: return CLOSING_ERROR; + case 0: return VALUE_NOT_SET; + default: return null; + } + } + public int getNumber() { + return this.value; + } + }; + + public ValueCase + getValueCase() { + return ValueCase.forNumber( + valueCase_); + } + + public static final int CALLBACK_IDX_FIELD_NUMBER = 1; + private int callbackIdx_ = 0; + /** + * uint32 callback_idx = 1; + * @return The callbackIdx. + */ + @java.lang.Override + public int getCallbackIdx() { + return callbackIdx_; + } + + public static final int RESP_POINTER_FIELD_NUMBER = 2; + /** + * uint64 resp_pointer = 2; + * @return Whether the respPointer field is set. + */ + @java.lang.Override + public boolean hasRespPointer() { + return valueCase_ == 2; + } + /** + * uint64 resp_pointer = 2; + * @return The respPointer. + */ + @java.lang.Override + public long getRespPointer() { + if (valueCase_ == 2) { + return (java.lang.Long) value_; + } + return 0L; + } + + public static final int CONSTANT_RESPONSE_FIELD_NUMBER = 3; + /** + * .response.ConstantResponse constant_response = 3; + * @return Whether the constantResponse field is set. + */ + public boolean hasConstantResponse() { + return valueCase_ == 3; + } + /** + * .response.ConstantResponse constant_response = 3; + * @return The enum numeric value on the wire for constantResponse. + */ + public int getConstantResponseValue() { + if (valueCase_ == 3) { + return (java.lang.Integer) value_; + } + return 0; + } + /** + * .response.ConstantResponse constant_response = 3; + * @return The constantResponse. + */ + public response.ResponseOuterClass.ConstantResponse getConstantResponse() { + if (valueCase_ == 3) { + response.ResponseOuterClass.ConstantResponse result = response.ResponseOuterClass.ConstantResponse.forNumber( + (java.lang.Integer) value_); + return result == null ? response.ResponseOuterClass.ConstantResponse.UNRECOGNIZED : result; + } + return response.ResponseOuterClass.ConstantResponse.OK; + } + + public static final int REQUEST_ERROR_FIELD_NUMBER = 4; + /** + * .response.RequestError request_error = 4; + * @return Whether the requestError field is set. + */ + @java.lang.Override + public boolean hasRequestError() { + return valueCase_ == 4; + } + /** + * .response.RequestError request_error = 4; + * @return The requestError. + */ + @java.lang.Override + public response.ResponseOuterClass.RequestError getRequestError() { + if (valueCase_ == 4) { + return (response.ResponseOuterClass.RequestError) value_; + } + return response.ResponseOuterClass.RequestError.getDefaultInstance(); + } + /** + * .response.RequestError request_error = 4; + */ + @java.lang.Override + public response.ResponseOuterClass.RequestErrorOrBuilder getRequestErrorOrBuilder() { + if (valueCase_ == 4) { + return (response.ResponseOuterClass.RequestError) value_; + } + return response.ResponseOuterClass.RequestError.getDefaultInstance(); + } + + public static final int CLOSING_ERROR_FIELD_NUMBER = 5; + /** + * string closing_error = 5; + * @return Whether the closingError field is set. + */ + public boolean hasClosingError() { + return valueCase_ == 5; + } + /** + * string closing_error = 5; + * @return The closingError. + */ + public java.lang.String getClosingError() { + java.lang.Object ref = ""; + if (valueCase_ == 5) { + ref = value_; + } + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (valueCase_ == 5) { + value_ = s; + } + return s; + } + } + /** + * string closing_error = 5; + * @return The bytes for closingError. + */ + public com.google.protobuf.ByteString + getClosingErrorBytes() { + java.lang.Object ref = ""; + if (valueCase_ == 5) { + ref = value_; + } + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + if (valueCase_ == 5) { + value_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (callbackIdx_ != 0) { + output.writeUInt32(1, callbackIdx_); + } + if (valueCase_ == 2) { + output.writeUInt64( + 2, (long)((java.lang.Long) value_)); + } + if (valueCase_ == 3) { + output.writeEnum(3, ((java.lang.Integer) value_)); + } + if (valueCase_ == 4) { + output.writeMessage(4, (response.ResponseOuterClass.RequestError) value_); + } + if (valueCase_ == 5) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 5, value_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (callbackIdx_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(1, callbackIdx_); + } + if (valueCase_ == 2) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size( + 2, (long)((java.lang.Long) value_)); + } + if (valueCase_ == 3) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(3, ((java.lang.Integer) value_)); + } + if (valueCase_ == 4) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, (response.ResponseOuterClass.RequestError) value_); + } + if (valueCase_ == 5) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, value_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof response.ResponseOuterClass.Response)) { + return super.equals(obj); + } + response.ResponseOuterClass.Response other = (response.ResponseOuterClass.Response) obj; + + if (getCallbackIdx() + != other.getCallbackIdx()) return false; + if (!getValueCase().equals(other.getValueCase())) return false; + switch (valueCase_) { + case 2: + if (getRespPointer() + != other.getRespPointer()) return false; + break; + case 3: + if (getConstantResponseValue() + != other.getConstantResponseValue()) return false; + break; + case 4: + if (!getRequestError() + .equals(other.getRequestError())) return false; + break; + case 5: + if (!getClosingError() + .equals(other.getClosingError())) return false; + break; + case 0: + default: + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + CALLBACK_IDX_FIELD_NUMBER; + hash = (53 * hash) + getCallbackIdx(); + switch (valueCase_) { + case 2: + hash = (37 * hash) + RESP_POINTER_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getRespPointer()); + break; + case 3: + hash = (37 * hash) + CONSTANT_RESPONSE_FIELD_NUMBER; + hash = (53 * hash) + getConstantResponseValue(); + break; + case 4: + hash = (37 * hash) + REQUEST_ERROR_FIELD_NUMBER; + hash = (53 * hash) + getRequestError().hashCode(); + break; + case 5: + hash = (37 * hash) + CLOSING_ERROR_FIELD_NUMBER; + hash = (53 * hash) + getClosingError().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static response.ResponseOuterClass.Response parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static response.ResponseOuterClass.Response parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static response.ResponseOuterClass.Response parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static response.ResponseOuterClass.Response parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static response.ResponseOuterClass.Response parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static response.ResponseOuterClass.Response parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static response.ResponseOuterClass.Response parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static response.ResponseOuterClass.Response parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static response.ResponseOuterClass.Response parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static response.ResponseOuterClass.Response parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static response.ResponseOuterClass.Response parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static response.ResponseOuterClass.Response parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(response.ResponseOuterClass.Response prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code response.Response} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:response.Response) + response.ResponseOuterClass.ResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return response.ResponseOuterClass.internal_static_response_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return response.ResponseOuterClass.internal_static_response_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + response.ResponseOuterClass.Response.class, response.ResponseOuterClass.Response.Builder.class); + } + + // Construct using response.ResponseOuterClass.Response.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + callbackIdx_ = 0; + if (requestErrorBuilder_ != null) { + requestErrorBuilder_.clear(); + } + valueCase_ = 0; + value_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return response.ResponseOuterClass.internal_static_response_Response_descriptor; + } + + @java.lang.Override + public response.ResponseOuterClass.Response getDefaultInstanceForType() { + return response.ResponseOuterClass.Response.getDefaultInstance(); + } + + @java.lang.Override + public response.ResponseOuterClass.Response build() { + response.ResponseOuterClass.Response result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public response.ResponseOuterClass.Response buildPartial() { + response.ResponseOuterClass.Response result = new response.ResponseOuterClass.Response(this); + if (bitField0_ != 0) { buildPartial0(result); } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(response.ResponseOuterClass.Response result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.callbackIdx_ = callbackIdx_; + } + } + + private void buildPartialOneofs(response.ResponseOuterClass.Response result) { + result.valueCase_ = valueCase_; + result.value_ = this.value_; + if (valueCase_ == 4 && + requestErrorBuilder_ != null) { + result.value_ = requestErrorBuilder_.build(); + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof response.ResponseOuterClass.Response) { + return mergeFrom((response.ResponseOuterClass.Response)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(response.ResponseOuterClass.Response other) { + if (other == response.ResponseOuterClass.Response.getDefaultInstance()) return this; + if (other.getCallbackIdx() != 0) { + setCallbackIdx(other.getCallbackIdx()); + } + switch (other.getValueCase()) { + case RESP_POINTER: { + setRespPointer(other.getRespPointer()); + break; + } + case CONSTANT_RESPONSE: { + setConstantResponseValue(other.getConstantResponseValue()); + break; + } + case REQUEST_ERROR: { + mergeRequestError(other.getRequestError()); + break; + } + case CLOSING_ERROR: { + valueCase_ = 5; + value_ = other.value_; + onChanged(); + break; + } + case VALUE_NOT_SET: { + break; + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + callbackIdx_ = input.readUInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: { + value_ = input.readUInt64(); + valueCase_ = 2; + break; + } // case 16 + case 24: { + int rawValue = input.readEnum(); + valueCase_ = 3; + value_ = rawValue; + break; + } // case 24 + case 34: { + input.readMessage( + getRequestErrorFieldBuilder().getBuilder(), + extensionRegistry); + valueCase_ = 4; + break; + } // case 34 + case 42: { + java.lang.String s = input.readStringRequireUtf8(); + valueCase_ = 5; + value_ = s; + break; + } // case 42 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int valueCase_ = 0; + private java.lang.Object value_; + public ValueCase + getValueCase() { + return ValueCase.forNumber( + valueCase_); + } + + public Builder clearValue() { + valueCase_ = 0; + value_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private int callbackIdx_ ; + /** + * uint32 callback_idx = 1; + * @return The callbackIdx. + */ + @java.lang.Override + public int getCallbackIdx() { + return callbackIdx_; + } + /** + * uint32 callback_idx = 1; + * @param value The callbackIdx to set. + * @return This builder for chaining. + */ + public Builder setCallbackIdx(int value) { + + callbackIdx_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * uint32 callback_idx = 1; + * @return This builder for chaining. + */ + public Builder clearCallbackIdx() { + bitField0_ = (bitField0_ & ~0x00000001); + callbackIdx_ = 0; + onChanged(); + return this; + } + + /** + * uint64 resp_pointer = 2; + * @return Whether the respPointer field is set. + */ + public boolean hasRespPointer() { + return valueCase_ == 2; + } + /** + * uint64 resp_pointer = 2; + * @return The respPointer. + */ + public long getRespPointer() { + if (valueCase_ == 2) { + return (java.lang.Long) value_; + } + return 0L; + } + /** + * uint64 resp_pointer = 2; + * @param value The respPointer to set. + * @return This builder for chaining. + */ + public Builder setRespPointer(long value) { + + valueCase_ = 2; + value_ = value; + onChanged(); + return this; + } + /** + * uint64 resp_pointer = 2; + * @return This builder for chaining. + */ + public Builder clearRespPointer() { + if (valueCase_ == 2) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + return this; + } + + /** + * .response.ConstantResponse constant_response = 3; + * @return Whether the constantResponse field is set. + */ + @java.lang.Override + public boolean hasConstantResponse() { + return valueCase_ == 3; + } + /** + * .response.ConstantResponse constant_response = 3; + * @return The enum numeric value on the wire for constantResponse. + */ + @java.lang.Override + public int getConstantResponseValue() { + if (valueCase_ == 3) { + return ((java.lang.Integer) value_).intValue(); + } + return 0; + } + /** + * .response.ConstantResponse constant_response = 3; + * @param value The enum numeric value on the wire for constantResponse to set. + * @return This builder for chaining. + */ + public Builder setConstantResponseValue(int value) { + valueCase_ = 3; + value_ = value; + onChanged(); + return this; + } + /** + * .response.ConstantResponse constant_response = 3; + * @return The constantResponse. + */ + @java.lang.Override + public response.ResponseOuterClass.ConstantResponse getConstantResponse() { + if (valueCase_ == 3) { + response.ResponseOuterClass.ConstantResponse result = response.ResponseOuterClass.ConstantResponse.forNumber( + (java.lang.Integer) value_); + return result == null ? response.ResponseOuterClass.ConstantResponse.UNRECOGNIZED : result; + } + return response.ResponseOuterClass.ConstantResponse.OK; + } + /** + * .response.ConstantResponse constant_response = 3; + * @param value The constantResponse to set. + * @return This builder for chaining. + */ + public Builder setConstantResponse(response.ResponseOuterClass.ConstantResponse value) { + if (value == null) { + throw new NullPointerException(); + } + valueCase_ = 3; + value_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .response.ConstantResponse constant_response = 3; + * @return This builder for chaining. + */ + public Builder clearConstantResponse() { + if (valueCase_ == 3) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + return this; + } + + private com.google.protobuf.SingleFieldBuilderV3< + response.ResponseOuterClass.RequestError, response.ResponseOuterClass.RequestError.Builder, response.ResponseOuterClass.RequestErrorOrBuilder> requestErrorBuilder_; + /** + * .response.RequestError request_error = 4; + * @return Whether the requestError field is set. + */ + @java.lang.Override + public boolean hasRequestError() { + return valueCase_ == 4; + } + /** + * .response.RequestError request_error = 4; + * @return The requestError. + */ + @java.lang.Override + public response.ResponseOuterClass.RequestError getRequestError() { + if (requestErrorBuilder_ == null) { + if (valueCase_ == 4) { + return (response.ResponseOuterClass.RequestError) value_; + } + return response.ResponseOuterClass.RequestError.getDefaultInstance(); + } else { + if (valueCase_ == 4) { + return requestErrorBuilder_.getMessage(); + } + return response.ResponseOuterClass.RequestError.getDefaultInstance(); + } + } + /** + * .response.RequestError request_error = 4; + */ + public Builder setRequestError(response.ResponseOuterClass.RequestError value) { + if (requestErrorBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + value_ = value; + onChanged(); + } else { + requestErrorBuilder_.setMessage(value); + } + valueCase_ = 4; + return this; + } + /** + * .response.RequestError request_error = 4; + */ + public Builder setRequestError( + response.ResponseOuterClass.RequestError.Builder builderForValue) { + if (requestErrorBuilder_ == null) { + value_ = builderForValue.build(); + onChanged(); + } else { + requestErrorBuilder_.setMessage(builderForValue.build()); + } + valueCase_ = 4; + return this; + } + /** + * .response.RequestError request_error = 4; + */ + public Builder mergeRequestError(response.ResponseOuterClass.RequestError value) { + if (requestErrorBuilder_ == null) { + if (valueCase_ == 4 && + value_ != response.ResponseOuterClass.RequestError.getDefaultInstance()) { + value_ = response.ResponseOuterClass.RequestError.newBuilder((response.ResponseOuterClass.RequestError) value_) + .mergeFrom(value).buildPartial(); + } else { + value_ = value; + } + onChanged(); + } else { + if (valueCase_ == 4) { + requestErrorBuilder_.mergeFrom(value); + } else { + requestErrorBuilder_.setMessage(value); + } + } + valueCase_ = 4; + return this; + } + /** + * .response.RequestError request_error = 4; + */ + public Builder clearRequestError() { + if (requestErrorBuilder_ == null) { + if (valueCase_ == 4) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + } else { + if (valueCase_ == 4) { + valueCase_ = 0; + value_ = null; + } + requestErrorBuilder_.clear(); + } + return this; + } + /** + * .response.RequestError request_error = 4; + */ + public response.ResponseOuterClass.RequestError.Builder getRequestErrorBuilder() { + return getRequestErrorFieldBuilder().getBuilder(); + } + /** + * .response.RequestError request_error = 4; + */ + @java.lang.Override + public response.ResponseOuterClass.RequestErrorOrBuilder getRequestErrorOrBuilder() { + if ((valueCase_ == 4) && (requestErrorBuilder_ != null)) { + return requestErrorBuilder_.getMessageOrBuilder(); + } else { + if (valueCase_ == 4) { + return (response.ResponseOuterClass.RequestError) value_; + } + return response.ResponseOuterClass.RequestError.getDefaultInstance(); + } + } + /** + * .response.RequestError request_error = 4; + */ + private com.google.protobuf.SingleFieldBuilderV3< + response.ResponseOuterClass.RequestError, response.ResponseOuterClass.RequestError.Builder, response.ResponseOuterClass.RequestErrorOrBuilder> + getRequestErrorFieldBuilder() { + if (requestErrorBuilder_ == null) { + if (!(valueCase_ == 4)) { + value_ = response.ResponseOuterClass.RequestError.getDefaultInstance(); + } + requestErrorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + response.ResponseOuterClass.RequestError, response.ResponseOuterClass.RequestError.Builder, response.ResponseOuterClass.RequestErrorOrBuilder>( + (response.ResponseOuterClass.RequestError) value_, + getParentForChildren(), + isClean()); + value_ = null; + } + valueCase_ = 4; + onChanged(); + return requestErrorBuilder_; + } + + /** + * string closing_error = 5; + * @return Whether the closingError field is set. + */ + @java.lang.Override + public boolean hasClosingError() { + return valueCase_ == 5; + } + /** + * string closing_error = 5; + * @return The closingError. + */ + @java.lang.Override + public java.lang.String getClosingError() { + java.lang.Object ref = ""; + if (valueCase_ == 5) { + ref = value_; + } + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (valueCase_ == 5) { + value_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string closing_error = 5; + * @return The bytes for closingError. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getClosingErrorBytes() { + java.lang.Object ref = ""; + if (valueCase_ == 5) { + ref = value_; + } + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + if (valueCase_ == 5) { + value_ = b; + } + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string closing_error = 5; + * @param value The closingError to set. + * @return This builder for chaining. + */ + public Builder setClosingError( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + valueCase_ = 5; + value_ = value; + onChanged(); + return this; + } + /** + * string closing_error = 5; + * @return This builder for chaining. + */ + public Builder clearClosingError() { + if (valueCase_ == 5) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + return this; + } + /** + * string closing_error = 5; + * @param value The bytes for closingError to set. + * @return This builder for chaining. + */ + public Builder setClosingErrorBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + valueCase_ = 5; + value_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:response.Response) + } + + // @@protoc_insertion_point(class_scope:response.Response) + private static final response.ResponseOuterClass.Response DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new response.ResponseOuterClass.Response(); + } + + public static response.ResponseOuterClass.Response getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Response parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public response.ResponseOuterClass.Response getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_response_RequestError_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_response_RequestError_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_response_Response_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_response_Response_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\027protobuf/response.proto\022\010response\"I\n\014R" + + "equestError\022(\n\004type\030\001 \001(\0162\032.response.Req" + + "uestErrorType\022\017\n\007message\030\002 \001(\t\"\304\001\n\010Respo" + + "nse\022\024\n\014callback_idx\030\001 \001(\r\022\026\n\014resp_pointe" + + "r\030\002 \001(\004H\000\0227\n\021constant_response\030\003 \001(\0162\032.r" + + "esponse.ConstantResponseH\000\022/\n\rrequest_er" + + "ror\030\004 \001(\0132\026.response.RequestErrorH\000\022\027\n\rc" + + "losing_error\030\005 \001(\tH\000B\007\n\005value*O\n\020Request" + + "ErrorType\022\017\n\013Unspecified\020\000\022\r\n\tExecAbort\020" + + "\001\022\013\n\007Timeout\020\002\022\016\n\nDisconnect\020\003*\032\n\020Consta" + + "ntResponse\022\006\n\002OK\020\000b\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_response_RequestError_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_response_RequestError_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_response_RequestError_descriptor, + new java.lang.String[] { "Type", "Message", }); + internal_static_response_Response_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_response_Response_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_response_Response_descriptor, + new java.lang.String[] { "CallbackIdx", "RespPointer", "ConstantResponse", "RequestError", "ClosingError", "Value", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/java/client/src/test/java/babushka/ClientTest.java b/java/client/src/test/java/babushka/ClientTest.java index 5014d20c98..749f2951e2 100644 --- a/java/client/src/test/java/babushka/ClientTest.java +++ b/java/client/src/test/java/babushka/ClientTest.java @@ -1,29 +1,40 @@ package babushka; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.when; -import babushka.connection.SocketManager; -import connection_request.ConnectionRequestOuterClass.ConnectionRequest; +import babushka.api.Client; +import babushka.managers.CommandManager; +import babushka.managers.ConnectionManager; import java.util.concurrent.CompletableFuture; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import response.ResponseOuterClass; +import org.mockito.Mock; +import org.mockito.Mockito; +import response.ResponseOuterClass.Response; public class ClientTest { Client testClient; - SocketManager socketManager; + @Mock + ConnectionManager connectionManager; + + @Mock + CommandManager commandManager; private static String HOST = "host"; private static int PORT = 9999; @BeforeEach public void setUp() { - socketManager = mock(SocketManager.class); - testClient = new Client(socketManager); + testClient = new Client(connectionManager, commandManager); } @Test @@ -31,16 +42,76 @@ public void test_asyncConnectToRedis_success() { // setup boolean useSsl = false; boolean clusterMode = false; - ConnectionRequest connectionRequest = - Client.getConnectionRequest(HOST, PORT, useSsl, clusterMode); + CompletableFuture testResponse = mock(CompletableFuture.class); + when(connectionManager.connectToRedis(any(), anyInt(), anyBoolean(), anyBoolean())) + .thenReturn(testResponse); // exercise - CompletableFuture connectionResponse = + CompletableFuture connectionResponse = testClient.asyncConnectToRedis(HOST, PORT, useSsl, clusterMode); // verify - // assertTrue(connectionResponse instanceof CompletableFuture); - verify(socketManager).connect(eq(connectionRequest)); + Mockito.verify(connectionManager, times(1)) + .connectToRedis(eq(HOST), eq(PORT), eq(useSsl), eq(clusterMode)); + assertEquals(testResponse, connectionResponse); + + // teardown + } + + @Test + public void test_close_success() { + // setup + + // exercise + testClient.closeConnection(); + + // verify + Mockito.verify(connectionManager, times(1)).closeConnection(); + + // teardown + } + + + @Test + public void test_get_success() { + // setup + + // exercise + + // verify + + // teardown + } + + @Test + public void test_set_success() { + // setup + + // exercise + + // verify + + // teardown + } + + @Test + public void test_ping_success() { + // setup + + // exercise + + // verify + + // teardown + } + + @Test + public void test_info_success() { + // setup + + // exercise + + // verify // teardown } From 667d2778e722ea79b62eaa9efcf3d3f8caf2bbf8 Mon Sep 17 00:00:00 2001 From: Andrew Carbonetto Date: Fri, 1 Dec 2023 13:50:47 -0800 Subject: [PATCH 77/81] Update refactor to include client factory builders Signed-off-by: Andrew Carbonetto --- .../clients/babushka/JniNettyClient.java | 21 +-- .../src/main/java/babushka/api/Awaiter.java | 22 +++ .../src/main/java/babushka/api/Client.java | 127 +++--------------- .../src/main/java/babushka/api/Commands.java | 60 +++++++++ .../main/java/babushka/api/Connection.java | 53 ++++++++ .../babushka/connectors/SocketConnection.java | 34 +++-- .../connectors/handlers/ReadHandler.java | 4 +- .../babushka/managers/CallbackManager.java | 1 - .../babushka/managers/CommandManager.java | 57 ++------ .../babushka/managers/ConnectionManager.java | 42 ++---- .../java/babushka/models/RedisResponse.java | 11 ++ .../java/babushka/models/RequestBuilder.java | 70 ++++++++++ .../models/protobuf/RedisResponse.java | 13 -- .../src/test/java/babushka/ClientTest.java | 118 ---------------- .../test/java/babushka/api/CommandTest.java | 64 +++++++++ .../java/babushka/api/ConnectionTest.java | 53 ++++++++ 16 files changed, 407 insertions(+), 343 deletions(-) create mode 100644 java/client/src/main/java/babushka/api/Awaiter.java create mode 100644 java/client/src/main/java/babushka/api/Commands.java create mode 100644 java/client/src/main/java/babushka/api/Connection.java create mode 100644 java/client/src/main/java/babushka/models/RedisResponse.java create mode 100644 java/client/src/main/java/babushka/models/RequestBuilder.java delete mode 100644 java/client/src/main/java/babushka/models/protobuf/RedisResponse.java delete mode 100644 java/client/src/test/java/babushka/ClientTest.java create mode 100644 java/client/src/test/java/babushka/api/CommandTest.java create mode 100644 java/client/src/test/java/babushka/api/ConnectionTest.java diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java index d326786a7a..3e64bf6242 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java @@ -1,21 +1,24 @@ package babushka.benchmarks.clients.babushka; import babushka.api.Client; +import babushka.api.Commands; +import babushka.api.Connection; import babushka.benchmarks.clients.AsyncClient; import babushka.benchmarks.clients.SyncClient; import babushka.benchmarks.utils.ConnectionSettings; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; -import response.ResponseOuterClass.Response; public class JniNettyClient implements SyncClient, AsyncClient { - private final Client testClient; + private final Connection connection; + private final Commands asyncCommands; + private String name = "JNI Netty"; public JniNettyClient(boolean async) { name += async ? " async" : " sync"; - testClient = new Client(); + connection = Client.CreateConnection(); + asyncCommands = Client.GetAsyncCommands(connection); } @Override @@ -35,7 +38,7 @@ public void connectToRedis(ConnectionSettings connectionSettings) { @Override public Future asyncConnectToRedis(ConnectionSettings connectionSettings) { - return testClient.asyncConnectToRedis( + return connection.asyncConnectToRedis( connectionSettings.host, connectionSettings.port, connectionSettings.useSsl, @@ -44,21 +47,21 @@ public Future asyncConnectToRedis(ConnectionSettings connectionSettings) @Override public Future asyncSet(String key, String value) { - return testClient.asyncSet(key, value); + return asyncCommands.asyncSet(key, value); } @Override public Future asyncGet(String key) { - return testClient.asyncGet(key); + return asyncCommands.asyncGet(key); } @Override public void set(String key, String value) { - testClient.set(key, value); + asyncCommands.set(key, value); } @Override public String get(String key) { - return testClient.get(key); + return asyncCommands.get(key); } } diff --git a/java/client/src/main/java/babushka/api/Awaiter.java b/java/client/src/main/java/babushka/api/Awaiter.java new file mode 100644 index 0000000000..432f666042 --- /dev/null +++ b/java/client/src/main/java/babushka/api/Awaiter.java @@ -0,0 +1,22 @@ +package babushka.api; + +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +public class Awaiter { + private static final long DEFAULT_TIMEOUT_MILLISECONDS = 1000; + + /** Get the future result with default timeout. */ + public static T await(Future future) { + return await(future, DEFAULT_TIMEOUT_MILLISECONDS); + } + + /** Get the future result with given timeout in ms. */ + public static T await(Future future, long timeout) { + try { + return future.get(timeout, TimeUnit.MILLISECONDS); + } catch (Exception ignored) { + return null; + } + } +} diff --git a/java/client/src/main/java/babushka/api/Client.java b/java/client/src/main/java/babushka/api/Client.java index 6a0c09c0db..101e1aafd1 100644 --- a/java/client/src/main/java/babushka/api/Client.java +++ b/java/client/src/main/java/babushka/api/Client.java @@ -3,133 +3,38 @@ import babushka.connectors.SocketConnection; import babushka.ffi.resolvers.BabushkaCoreNativeDefinitions; import babushka.managers.CallbackManager; -import babushka.managers.CommandManager; import babushka.managers.ConnectionManager; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import redis_request.RedisRequestOuterClass; -import response.ResponseOuterClass.Response; +/** Factory class for creating Babushka-Redis client connections */ public class Client { - private static final long DEFAULT_TIMEOUT_MILLISECONDS = 1000; - - private final ConnectionManager connectionManager; - private final CommandManager commandManager; - - // TODO: Move this to a Factory/Builder class - public Client() { + public static Connection CreateConnection() { CallbackManager callbackManager = new CallbackManager(); BabushkaCoreNativeDefinitions nativeDefinitions = new BabushkaCoreNativeDefinitions(); - String socketPath = nativeDefinitions.getSocket(); - - SocketConnection socketConnection = SocketConnection.getInstance(socketPath); - - this.connectionManager = new ConnectionManager(callbackManager, nativeDefinitions, socketConnection); - this.commandManager = new CommandManager(callbackManager, socketConnection, nativeDefinitions); - } - - public Client(ConnectionManager connectionManager, CommandManager commandManager) { - this.connectionManager = connectionManager; - this.commandManager = commandManager; - } - - /** - * Sync (blocking) connect to REDIS. See async option in {@link #asyncConnectToRedis}. - * - * @param host Server address - * @param port Server port - * @param useSsl true if communication with the server or cluster should use Transport Level - * Security - * @param clusterMode true if REDIS instance runs in the cluster mode - */ - // TODO support configuration object which holds more parameters (e.g. multiple addresses, etc) - public void connectToRedis(String host, int port, boolean useSsl, boolean clusterMode) { - waitForResult(asyncConnectToRedis(host, port, useSsl, clusterMode)); - } + SocketConnection.setSocketPath(nativeDefinitions.getSocket()); + SocketConnection socketConnection = SocketConnection.getInstance(); - /** - * Async (non-blocking) connect to REDIS. See sync option in {@link #connectToRedis}. - * - * @param host Server address - * @param port Server port - * @param useSsl true if communication with the server or cluster should use Transport Level - * Security - * @param clusterMode true if REDIS instance runs in the cluster mode - */ - // TODO support configuration object which holds more parameters (e.g. multiple addresses, etc) - public CompletableFuture asyncConnectToRedis( - String host, int port, boolean useSsl, boolean clusterMode) { - return connectionManager.connectToRedis(host, port, useSsl, clusterMode); + ConnectionManager connectionManager = new ConnectionManager(callbackManager, socketConnection); + return new Connection(connectionManager); } - /** - * Close all connections and release resources - */ - public void closeConnection() { - connectionManager.closeConnection(); - } - - /** - * Sync (blocking) set. See async option in {@link #asyncSet}.
- * See REDIS docs for SET. - * - * @param key The key name - * @param value The value to set - */ - public void set(String key, String value) { - waitForResult(asyncSet(key, value)); - // TODO parse response and rethrow an exception if there is an error - } + public static Connection ConnectToRedis(String host, int port) { + CallbackManager callbackManager = new CallbackManager(); - /** - * Sync (blocking) get. See async option in {@link #asyncGet}.
- * See REDIS docs for GET. - * - * @param key The key name - */ - public String get(String key) { - return waitForResult(asyncGet(key)); - // TODO support non-strings - } + BabushkaCoreNativeDefinitions nativeDefinitions = new BabushkaCoreNativeDefinitions(); + SocketConnection.setSocketPath(nativeDefinitions.getSocket()); + SocketConnection socketConnection = SocketConnection.getInstance(); - /** - * Async (non-blocking) set. See sync option in {@link #set}.
- * See REDIS docs for SET. - * - * @param key The key name - * @param value The value to set - */ - public Future asyncSet(String key, String value) { - return commandManager.submitNewCommand( - RedisRequestOuterClass.RequestType.SetString, List.of(key, value)); - } + ConnectionManager connectionManager = new ConnectionManager(callbackManager, socketConnection); - /** - * Async (non-blocking) get. See sync option in {@link #get}.
- * See REDIS docs for GET. - * - * @param key The key name - */ - public Future asyncGet(String key) { - return commandManager.submitNewCommand(RedisRequestOuterClass.RequestType.GetString, List.of(key)); - } + Awaiter.await(connectionManager.connectToRedis(host, port, false, false)); - /** Get the future result with default timeout. */ - T waitForResult(Future future) { - return waitForResult(future, DEFAULT_TIMEOUT_MILLISECONDS); + return new Connection(connectionManager); } - /** Get the future result with given timeout in ms. */ - T waitForResult(Future future, long timeout) { - try { - return future.get(timeout, TimeUnit.MILLISECONDS); - } catch (Exception ignored) { - return null; - } + public static Commands GetAsyncCommands(Connection connection) { + return new Commands(connection.getConnectionManager().getCommandManager()); } } diff --git a/java/client/src/main/java/babushka/api/Commands.java b/java/client/src/main/java/babushka/api/Commands.java new file mode 100644 index 0000000000..5a4a620edc --- /dev/null +++ b/java/client/src/main/java/babushka/api/Commands.java @@ -0,0 +1,60 @@ +package babushka.api; + +import babushka.managers.CommandManager; +import java.util.List; +import java.util.concurrent.Future; + +public class Commands { + + private final CommandManager commandManager; + + public Commands(CommandManager commandManager) { + this.commandManager = commandManager; + } + + /** + * Sync (blocking) set. See async option in {@link #asyncSet}.
+ * See REDIS docs for SET. + * + * @param key The key name + * @param value The value to set + */ + public void set(String key, String value) { + Awaiter.await(asyncSet(key, value)); + // TODO parse response and rethrow an exception if there is an error + } + + /** + * Sync (blocking) get. See async option in {@link #asyncGet}.
+ * See REDIS docs for GET. + * + * @param key The key name + */ + public String get(String key) { + return Awaiter.await(asyncGet(key)); + // TODO support non-strings + } + + /** + * Async (non-blocking) set. See sync option in {@link #set}.
+ * See REDIS docs for SET. + * + * @param key The key name + * @param value The value to set + */ + public Future asyncSet(String key, String value) { + return commandManager.submitNewCommand( + redis_request.RedisRequestOuterClass.RequestType.SetString, List.of(key, value)); + } + + /** + * Async (non-blocking) get. See sync option in {@link #get}.
+ * See REDIS docs for GET. + * + * @param key The key name + */ + public Future asyncGet(String key) { + return commandManager.submitNewCommand( + redis_request.RedisRequestOuterClass.RequestType.GetString, List.of(key)); + } +} diff --git a/java/client/src/main/java/babushka/api/Connection.java b/java/client/src/main/java/babushka/api/Connection.java new file mode 100644 index 0000000000..6c714a3c0c --- /dev/null +++ b/java/client/src/main/java/babushka/api/Connection.java @@ -0,0 +1,53 @@ +package babushka.api; + +import static babushka.api.Awaiter.await; + +import babushka.managers.ConnectionManager; +import java.util.concurrent.CompletableFuture; + +public class Connection { + + private final ConnectionManager connectionManager; + + public Connection(ConnectionManager connectionManager) { + this.connectionManager = connectionManager; + } + + public ConnectionManager getConnectionManager() { + return connectionManager; + } + + /** + * Sync (blocking) connect to REDIS. See async option in {@link #asyncConnectToRedis}. + * + * @param host Server address + * @param port Server port + * @param useSsl true if communication with the server or cluster should use Transport Level + * Security + * @param clusterMode true if REDIS instance runs in the cluster mode + */ + // TODO support configuration object which holds more parameters (e.g. multiple addresses, etc) + public void connectToRedis(String host, int port, boolean useSsl, boolean clusterMode) { + await(asyncConnectToRedis(host, port, useSsl, clusterMode)); + } + + /** + * Async (non-blocking) connect to REDIS. See sync option in {@link #connectToRedis}. + * + * @param host Server address + * @param port Server port + * @param useSsl true if communication with the server or cluster should use Transport Level + * Security + * @param clusterMode true if REDIS instance runs in the cluster mode + */ + // TODO support configuration object which holds more parameters (e.g. multiple addresses, etc) + public CompletableFuture asyncConnectToRedis( + String host, int port, boolean useSsl, boolean clusterMode) { + return connectionManager.connectToRedis(host, port, useSsl, clusterMode); + } + + /** Close all connections and release resources */ + public void closeConnection() { + connectionManager.closeConnection(); + } +} diff --git a/java/client/src/main/java/babushka/connectors/SocketConnection.java b/java/client/src/main/java/babushka/connectors/SocketConnection.java index 51f7d7cfb9..49ef74e713 100644 --- a/java/client/src/main/java/babushka/connectors/SocketConnection.java +++ b/java/client/src/main/java/babushka/connectors/SocketConnection.java @@ -26,19 +26,29 @@ public class SocketConnection { /** Thread pool supplied to Netty to perform all async IO. */ private EventLoopGroup group; - private String socketPath; - /** The singleton instance. */ private static SocketConnection INSTANCE = null; + private static String socketPath; + + public static void setSocketPath(String socketPath) { + if (SocketConnection.socketPath == null) { + SocketConnection.socketPath = socketPath; + return; + } + throw new RuntimeException("socket path can only be declared once"); + } + /** - * Creates (if not yet created) and returns the singleton instance of the {@link ConnectionManager}. + * Creates (if not yet created) and returns the singleton instance of the {@link + * ConnectionManager}. * * @return a {@link ConnectionManager} instance. */ - public static synchronized SocketConnection getInstance(String socketPath) { + public static synchronized SocketConnection getInstance() { if (INSTANCE == null) { - INSTANCE = new SocketConnection(socketPath); + assert socketPath != null : "socket path must be defined"; + INSTANCE = new SocketConnection(); } return INSTANCE; } @@ -61,16 +71,16 @@ private static boolean isMacOs() { } /** Constructor for the single instance. */ - private SocketConnection(String socketPath) { + private SocketConnection() { boolean isMacOs = isMacOs(); try { int cpuCount = Runtime.getRuntime().availableProcessors(); group = isMacOs ? new KQueueEventLoopGroup( - cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) + cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) : new EpollEventLoopGroup( - cpuCount, new DefaultThreadFactory("NettyWrapper-epoll-elg", true)); + cpuCount, new DefaultThreadFactory("NettyWrapper-epoll-elg", true)); channel = new Bootstrap() .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024, 4096)) @@ -89,16 +99,12 @@ cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) } } - /** - * Write a protobuf message to the socket. - */ + /** Write a protobuf message to the socket. */ public void write(GeneratedMessageV3 message) { channel.write(message.toByteArray()); } - /** - * Write a protobuf message to the socket and flush it. - */ + /** Write a protobuf message to the socket and flush it. */ public void writeAndFlush(GeneratedMessageV3 message) { channel.writeAndFlush(message.toByteArray()); } diff --git a/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java b/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java index 3b5a651292..5423b57567 100644 --- a/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java +++ b/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java @@ -5,7 +5,7 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import lombok.NonNull; -import babushka.models.protobuf.response.ResponseOuterClass.Response; +import response.ResponseOuterClass; /** Handler for inbound traffic though UDS. Used by Netty. */ public class ReadHandler extends ChannelInboundHandlerAdapter { @@ -25,7 +25,7 @@ public void channelRead(@NonNull ChannelHandlerContext ctx, @NonNull Object msg) var bytes = new byte[buf.readableBytes()]; buf.readBytes(bytes); // TODO surround parsing with try-catch, set error to future if parsing failed. - var response = Response.parseFrom(bytes); + var response = ResponseOuterClass.Response.parseFrom(bytes); int callbackId = response.getCallbackIdx(); if (callbackId == 0) { // can't distinguish connection requests since they have no diff --git a/java/client/src/main/java/babushka/managers/CallbackManager.java b/java/client/src/main/java/babushka/managers/CallbackManager.java index 4938f72009..ea8f3da41a 100644 --- a/java/client/src/main/java/babushka/managers/CallbackManager.java +++ b/java/client/src/main/java/babushka/managers/CallbackManager.java @@ -56,7 +56,6 @@ public void registerConnection(CompletableFuture future) { CallbackManager.connectionRequests.add(future); } - /** * Create a unique callback ID (request ID) and a corresponding registered future for the * response.
diff --git a/java/client/src/main/java/babushka/managers/CommandManager.java b/java/client/src/main/java/babushka/managers/CommandManager.java index 52a3aa1792..eb28cd23ce 100644 --- a/java/client/src/main/java/babushka/managers/CommandManager.java +++ b/java/client/src/main/java/babushka/managers/CommandManager.java @@ -1,13 +1,12 @@ package babushka.managers; +import static babushka.models.RequestBuilder.redisSingleCommand; + import babushka.connectors.SocketConnection; -import babushka.ffi.resolvers.BabushkaCoreNativeDefinitions; +import babushka.models.RequestBuilder; import java.util.List; import java.util.concurrent.CompletableFuture; -import redis_request.RedisRequestOuterClass; -import redis_request.RedisRequestOuterClass.RedisRequest; import redis_request.RedisRequestOuterClass.RequestType; -import response.ResponseOuterClass; import response.ResponseOuterClass.Response; /** @@ -27,68 +26,32 @@ public class CommandManager { private final CallbackManager callbackManager; private final SocketConnection socketConnection; - private final BabushkaCoreNativeDefinitions nativeDefinitions; - public CommandManager(CallbackManager callbackManager, SocketConnection socketConnection, BabushkaCoreNativeDefinitions nativeDefinitions) { + public CommandManager(CallbackManager callbackManager, SocketConnection socketConnection) { this.callbackManager = callbackManager; this.socketConnection = socketConnection; - this.nativeDefinitions = nativeDefinitions; } - private static RedisRequest redisSingleCommand(RequestType command, List args) { - var commandArgs = RedisRequestOuterClass.Command.ArgsArray.newBuilder(); - for (var arg : args) { - commandArgs.addArgs(arg); - } - - RedisRequest.Builder builder = - RedisRequest.newBuilder() - .setSingleCommand( - RedisRequestOuterClass.Command.newBuilder() - .setRequestType(command) - .setArgsArray(commandArgs.build()) - .build()) - .setRoute(RedisRequestOuterClass.Routes.newBuilder().setSimpleRoutes( - RedisRequestOuterClass.SimpleRoutes.AllNodes).build()); - - return builder.build(); - } + // public CompletableFuture get(String arg) { + // submitNewCommand() + // } /** - * Returns a String from the redis response if a resp2 response exists, or Ok. - * Otherwise, returns null - * @param response Redis Response - * @return String or null - */ - public static String resolveRedisResponseToString(Response response) { - if (response.hasConstantResponse()) { - return BabushkaCoreNativeDefinitions.valueFromPointer(response.getRespPointer()).toString(); - } - if (response.hasRespPointer()) { - return response.getConstantResponse().toString(); - } - return null; - } - - /** - * * @param command * @param args - * @return + * @return TODO: Make this private */ public CompletableFuture submitNewCommand(RequestType command, List args) { // TODO this explicitly uses ForkJoin thread pool. May be we should use another one. CompletableFuture future = new CompletableFuture<>(); int callbackId = callbackManager.registerRequest(future); - RedisRequest request = redisSingleCommand(command, args); - return CompletableFuture.supplyAsync( () -> { - socketConnection.writeAndFlush(request); + socketConnection.writeAndFlush(redisSingleCommand(command, args)); return future; }) .thenCompose(f -> f) - .thenApply(CommandManager::resolveRedisResponseToString); + .thenApply(RequestBuilder::resolveRedisResponseToString); } } diff --git a/java/client/src/main/java/babushka/managers/ConnectionManager.java b/java/client/src/main/java/babushka/managers/ConnectionManager.java index 3928e85d48..2ee8e6ce4a 100644 --- a/java/client/src/main/java/babushka/managers/ConnectionManager.java +++ b/java/client/src/main/java/babushka/managers/ConnectionManager.java @@ -1,12 +1,10 @@ package babushka.managers; +import static babushka.models.RequestBuilder.getConnectionRequest; + import babushka.connectors.SocketConnection; -import babushka.ffi.resolvers.BabushkaCoreNativeDefinitions; -import com.google.common.annotations.VisibleForTesting; -import connection_request.ConnectionRequestOuterClass; import connection_request.ConnectionRequestOuterClass.ConnectionRequest; import java.util.concurrent.CompletableFuture; -import response.ResponseOuterClass; import response.ResponseOuterClass.Response; /** @@ -25,19 +23,23 @@ public class ConnectionManager { private final SocketConnection socketConnection; - private final BabushkaCoreNativeDefinitions nativeDefinitions; private final CallbackManager callbackManager; - public ConnectionManager(CallbackManager callbackManager, - BabushkaCoreNativeDefinitions nativeDefinitions, - SocketConnection socketConnection) { + private final CommandManager commandManager; + + public ConnectionManager(CallbackManager callbackManager, SocketConnection socketConnection) { this.socketConnection = socketConnection; - this.nativeDefinitions = nativeDefinitions; this.callbackManager = callbackManager; + this.commandManager = new CommandManager(callbackManager, socketConnection); + } + + public CommandManager getCommandManager() { + return this.commandManager; } /** * Connect to Redis using a ProtoBuf connection request + * * @param host * @param port * @param useSsl @@ -46,8 +48,7 @@ public ConnectionManager(CallbackManager callbackManager, */ public CompletableFuture connectToRedis( String host, int port, boolean useSsl, boolean clusterMode) { - ConnectionRequest - request = getConnectionRequest(host, port, useSsl, clusterMode); + ConnectionRequest request = getConnectionRequest(host, port, useSsl, clusterMode); var future = new CompletableFuture(); callbackManager.registerConnection(future); socketConnection.writeAndFlush(request); @@ -55,25 +56,10 @@ public CompletableFuture connectToRedis( } /** - * Close socket connection and drop all channels - * TODO: provide feedback that the connection was properly closed + * Close socket connection and drop all channels TODO: provide feedback that the connection was + * properly closed */ public void closeConnection() { socketConnection.close(); } - - /** Build a protobuf connection request object */ - // TODO support more parameters and/or configuration object - @VisibleForTesting - private static ConnectionRequest getConnectionRequest( - String host, int port, boolean useSsl, boolean clusterMode) { - return ConnectionRequest.newBuilder() - .addAddresses( - ConnectionRequestOuterClass.NodeAddress.newBuilder().setHost(host).setPort(port).build()) - .setTlsMode(useSsl ? ConnectionRequestOuterClass.TlsMode.SecureTls : ConnectionRequestOuterClass.TlsMode.NoTls) - .setClusterModeEnabled(clusterMode) - .setReadFrom(ConnectionRequestOuterClass.ReadFrom.Primary) - .setDatabaseId(0) - .build(); - } } diff --git a/java/client/src/main/java/babushka/models/RedisResponse.java b/java/client/src/main/java/babushka/models/RedisResponse.java new file mode 100644 index 0000000000..def93ec94c --- /dev/null +++ b/java/client/src/main/java/babushka/models/RedisResponse.java @@ -0,0 +1,11 @@ +package babushka.models; + +/** + * TODO: Placeholder class to collect Future & Responses for the client users. TODO: Do we need a + * separate RedisClusterResponse? TODO: Create a RedisPipelineFuture for pipeline requests TODO: + * Create a RedisTransactionFuture for transaction requests + * + *

Redis client wrapper-class to handle Redis client responses. Handles async Future + * objects, or sync Response objects. + */ +public class RedisResponse {} diff --git a/java/client/src/main/java/babushka/models/RequestBuilder.java b/java/client/src/main/java/babushka/models/RequestBuilder.java new file mode 100644 index 0000000000..224fedf281 --- /dev/null +++ b/java/client/src/main/java/babushka/models/RequestBuilder.java @@ -0,0 +1,70 @@ +package babushka.models; + +import babushka.ffi.resolvers.BabushkaCoreNativeDefinitions; +import connection_request.ConnectionRequestOuterClass; +import java.util.List; +import redis_request.RedisRequestOuterClass; +import response.ResponseOuterClass; + +public class RequestBuilder { + + /** Build a protobuf connection request object */ + // TODO support more parameters and/or configuration object + public static ConnectionRequestOuterClass.ConnectionRequest getConnectionRequest( + String host, int port, boolean useSsl, boolean clusterMode) { + return ConnectionRequestOuterClass.ConnectionRequest.newBuilder() + .addAddresses( + ConnectionRequestOuterClass.NodeAddress.newBuilder() + .setHost(host) + .setPort(port) + .build()) + .setTlsMode( + useSsl + ? ConnectionRequestOuterClass.TlsMode.SecureTls + : ConnectionRequestOuterClass.TlsMode.NoTls) + .setClusterModeEnabled(clusterMode) + .setReadFrom(ConnectionRequestOuterClass.ReadFrom.Primary) + .setDatabaseId(0) + .build(); + } + + public static RedisRequestOuterClass.RedisRequest redisSingleCommand( + RedisRequestOuterClass.RequestType command, List args) { + var commandArgs = RedisRequestOuterClass.Command.ArgsArray.newBuilder(); + for (var arg : args) { + commandArgs.addArgs(arg); + } + + RedisRequestOuterClass.RedisRequest.Builder builder = + RedisRequestOuterClass.RedisRequest.newBuilder() + .setSingleCommand( + RedisRequestOuterClass.Command.newBuilder() + .setRequestType(command) + .setArgsArray(commandArgs.build()) + .build()) + .setRoute( + RedisRequestOuterClass.Routes.newBuilder() + .setSimpleRoutes(RedisRequestOuterClass.SimpleRoutes.AllNodes) + .build()); + // TODO: set callback index? + + return builder.build(); + } + + /** + * Returns a String from the redis response if a resp2 response exists, or Ok. Otherwise, returns + * null + * + * @param response Redis Response + * @return String or null + */ + public static String resolveRedisResponseToString(ResponseOuterClass.Response response) { + if (response.hasConstantResponse()) { + return BabushkaCoreNativeDefinitions.valueFromPointer(response.getRespPointer()).toString(); + } + if (response.hasRespPointer()) { + return response.getConstantResponse().toString(); + } + return null; + } +} diff --git a/java/client/src/main/java/babushka/models/protobuf/RedisResponse.java b/java/client/src/main/java/babushka/models/protobuf/RedisResponse.java deleted file mode 100644 index 0a26213720..0000000000 --- a/java/client/src/main/java/babushka/models/protobuf/RedisResponse.java +++ /dev/null @@ -1,13 +0,0 @@ -package babushka.models.protobuf; - -/** - * TODO: Placeholder class to collect Future & Responses for the client users. - * TODO: Do we need a separate RedisClusterResponse? - * TODO: Create a RedisPipelineFuture for pipeline requests - * TODO: Create a RedisTransactionFuture for transaction requests - * - * Redis client wrapper-class to handle Redis client responses. - * Handles async Future objects, or sync Response objects. - */ -public class RedisResponse { -} diff --git a/java/client/src/test/java/babushka/ClientTest.java b/java/client/src/test/java/babushka/ClientTest.java deleted file mode 100644 index 749f2951e2..0000000000 --- a/java/client/src/test/java/babushka/ClientTest.java +++ /dev/null @@ -1,118 +0,0 @@ -package babushka; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.when; - -import babushka.api.Client; -import babushka.managers.CommandManager; -import babushka.managers.ConnectionManager; -import java.util.concurrent.CompletableFuture; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.Mock; -import org.mockito.Mockito; -import response.ResponseOuterClass.Response; - -public class ClientTest { - - Client testClient; - - @Mock - ConnectionManager connectionManager; - - @Mock - CommandManager commandManager; - - private static String HOST = "host"; - private static int PORT = 9999; - - @BeforeEach - public void setUp() { - testClient = new Client(connectionManager, commandManager); - } - - @Test - public void test_asyncConnectToRedis_success() { - // setup - boolean useSsl = false; - boolean clusterMode = false; - CompletableFuture testResponse = mock(CompletableFuture.class); - when(connectionManager.connectToRedis(any(), anyInt(), anyBoolean(), anyBoolean())) - .thenReturn(testResponse); - - // exercise - CompletableFuture connectionResponse = - testClient.asyncConnectToRedis(HOST, PORT, useSsl, clusterMode); - - // verify - Mockito.verify(connectionManager, times(1)) - .connectToRedis(eq(HOST), eq(PORT), eq(useSsl), eq(clusterMode)); - assertEquals(testResponse, connectionResponse); - - // teardown - } - - @Test - public void test_close_success() { - // setup - - // exercise - testClient.closeConnection(); - - // verify - Mockito.verify(connectionManager, times(1)).closeConnection(); - - // teardown - } - - - @Test - public void test_get_success() { - // setup - - // exercise - - // verify - - // teardown - } - - @Test - public void test_set_success() { - // setup - - // exercise - - // verify - - // teardown - } - - @Test - public void test_ping_success() { - // setup - - // exercise - - // verify - - // teardown - } - - @Test - public void test_info_success() { - // setup - - // exercise - - // verify - - // teardown - } -} diff --git a/java/client/src/test/java/babushka/api/CommandTest.java b/java/client/src/test/java/babushka/api/CommandTest.java new file mode 100644 index 0000000000..34d5d5aac4 --- /dev/null +++ b/java/client/src/test/java/babushka/api/CommandTest.java @@ -0,0 +1,64 @@ +package babushka.api; + +import static org.mockito.Mockito.mock; + +import babushka.managers.CommandManager; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class CommandTest { + + Commands service; + + CommandManager commandsManager; + + @BeforeEach + public void setUp() { + commandsManager = mock(CommandManager.class); + service = new Commands(commandsManager); + } + + @Test + public void test_get_success() { + // setup + + // exercise + + // verify + + // teardown + } + + @Test + public void test_set_success() { + // setup + + // exercise + + // verify + + // teardown + } + + @Test + public void test_ping_success() { + // setup + + // exercise + + // verify + + // teardown + } + + @Test + public void test_info_success() { + // setup + + // exercise + + // verify + + // teardown + } +} diff --git a/java/client/src/test/java/babushka/api/ConnectionTest.java b/java/client/src/test/java/babushka/api/ConnectionTest.java new file mode 100644 index 0000000000..3261b63d46 --- /dev/null +++ b/java/client/src/test/java/babushka/api/ConnectionTest.java @@ -0,0 +1,53 @@ +package babushka.api; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.when; + +import babushka.managers.ConnectionManager; +import java.util.concurrent.CompletableFuture; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +public class ConnectionTest { + + Connection service; + + ConnectionManager connectionManager; + + private static String HOST = "host"; + private static int PORT = 9999; + + @BeforeEach + public void setUp() { + connectionManager = mock(ConnectionManager.class); + service = new Connection(connectionManager); + } + + @Test + public void test_asyncConnectToRedis_success() { + // setup + boolean useSsl = false; + boolean clusterMode = false; + CompletableFuture testResponse = mock(CompletableFuture.class); + when(connectionManager.connectToRedis(anyString(), anyInt(), anyBoolean(), anyBoolean())) + .thenReturn(testResponse); + + // exercise + CompletableFuture connectionResponse = + service.asyncConnectToRedis(HOST, PORT, useSsl, clusterMode); + + // verify + Mockito.verify(connectionManager, times(1)) + .connectToRedis(eq(HOST), eq(PORT), eq(useSsl), eq(clusterMode)); + assertEquals(testResponse, connectionResponse); + + // teardown + } +} From 537d538444531ceea4f8489ec60db05ee733747d Mon Sep 17 00:00:00 2001 From: Andrew Carbonetto Date: Fri, 1 Dec 2023 14:54:27 -0800 Subject: [PATCH 78/81] Add unit tests for API Signed-off-by: Andrew Carbonetto --- .../src/main/java/babushka/api/Commands.java | 7 +- .../babushka/managers/CommandManager.java | 12 +- .../test/java/babushka/api/CommandTest.java | 64 --------- .../test/java/babushka/api/CommandsTest.java | 135 ++++++++++++++++++ 4 files changed, 146 insertions(+), 72 deletions(-) delete mode 100644 java/client/src/test/java/babushka/api/CommandTest.java create mode 100644 java/client/src/test/java/babushka/api/CommandsTest.java diff --git a/java/client/src/main/java/babushka/api/Commands.java b/java/client/src/main/java/babushka/api/Commands.java index 5a4a620edc..66d5a38140 100644 --- a/java/client/src/main/java/babushka/api/Commands.java +++ b/java/client/src/main/java/babushka/api/Commands.java @@ -1,7 +1,6 @@ package babushka.api; import babushka.managers.CommandManager; -import java.util.List; import java.util.concurrent.Future; public class Commands { @@ -43,8 +42,7 @@ public String get(String key) { * @param value The value to set */ public Future asyncSet(String key, String value) { - return commandManager.submitNewCommand( - redis_request.RedisRequestOuterClass.RequestType.SetString, List.of(key, value)); + return commandManager.set(key, value); } /** @@ -54,7 +52,6 @@ public Future asyncSet(String key, String value) { * @param key The key name */ public Future asyncGet(String key) { - return commandManager.submitNewCommand( - redis_request.RedisRequestOuterClass.RequestType.GetString, List.of(key)); + return commandManager.get(key); } } diff --git a/java/client/src/main/java/babushka/managers/CommandManager.java b/java/client/src/main/java/babushka/managers/CommandManager.java index eb28cd23ce..4928d13470 100644 --- a/java/client/src/main/java/babushka/managers/CommandManager.java +++ b/java/client/src/main/java/babushka/managers/CommandManager.java @@ -32,9 +32,15 @@ public CommandManager(CallbackManager callbackManager, SocketConnection socketCo this.socketConnection = socketConnection; } - // public CompletableFuture get(String arg) { - // submitNewCommand() - // } + public CompletableFuture get(String key) { + return submitNewCommand( + redis_request.RedisRequestOuterClass.RequestType.GetString, List.of(key)); + } + + public CompletableFuture set(String key, String value) { + return submitNewCommand( + redis_request.RedisRequestOuterClass.RequestType.SetString, List.of(key, value)); + } /** * @param command diff --git a/java/client/src/test/java/babushka/api/CommandTest.java b/java/client/src/test/java/babushka/api/CommandTest.java deleted file mode 100644 index 34d5d5aac4..0000000000 --- a/java/client/src/test/java/babushka/api/CommandTest.java +++ /dev/null @@ -1,64 +0,0 @@ -package babushka.api; - -import static org.mockito.Mockito.mock; - -import babushka.managers.CommandManager; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -public class CommandTest { - - Commands service; - - CommandManager commandsManager; - - @BeforeEach - public void setUp() { - commandsManager = mock(CommandManager.class); - service = new Commands(commandsManager); - } - - @Test - public void test_get_success() { - // setup - - // exercise - - // verify - - // teardown - } - - @Test - public void test_set_success() { - // setup - - // exercise - - // verify - - // teardown - } - - @Test - public void test_ping_success() { - // setup - - // exercise - - // verify - - // teardown - } - - @Test - public void test_info_success() { - // setup - - // exercise - - // verify - - // teardown - } -} diff --git a/java/client/src/test/java/babushka/api/CommandsTest.java b/java/client/src/test/java/babushka/api/CommandsTest.java new file mode 100644 index 0000000000..db3df1dc98 --- /dev/null +++ b/java/client/src/test/java/babushka/api/CommandsTest.java @@ -0,0 +1,135 @@ +package babushka.api; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import babushka.managers.CommandManager; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeoutException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class CommandsTest { + + Commands service; + + CommandManager commandsManager; + + private static String OK_RESPONSE = response.ResponseOuterClass.ConstantResponse.OK.toString(); + + @BeforeEach + public void setUp() { + commandsManager = mock(CommandManager.class); + service = new Commands(commandsManager); + } + + @Test + public void test_asyncGet_success() throws ExecutionException, InterruptedException { + // setup + // TODO: randomize keys + String key = "testKey"; + String value = "testValue"; + CompletableFuture testResponse = mock(CompletableFuture.class); + when(testResponse.get()).thenReturn(value); + when(commandsManager.get(eq(key))).thenReturn(testResponse); + + // exercise + Future response = service.asyncGet(key); + String payload = response.get(); + + // verify + assertEquals(testResponse, response); + assertEquals(value, payload); + + // teardown + } + + // TODO: test_asyncGet_InterruptedException and ExecutionException + + @Test + public void test_get_success() throws ExecutionException, InterruptedException, TimeoutException { + // setup + // TODO: randomize keys + String key = "testKey"; + String value = "testValue"; + CompletableFuture testResponse = mock(CompletableFuture.class); + when(testResponse.get(anyLong(), any())).thenReturn(value); + when(commandsManager.get(eq(key))).thenReturn(testResponse); + + // exercise + String payload = service.get(key); + + // verify + assertEquals(value, payload); + + // teardown + } + + @Test + public void test_asyncSet_success() throws ExecutionException, InterruptedException { + // setup + // TODO: randomize key and value + String key = "testKey"; + String value = "testValue"; + CompletableFuture testResponse = mock(CompletableFuture.class); + when(testResponse.get()).thenReturn(OK_RESPONSE); + when(commandsManager.set(eq(key), eq(value))).thenReturn(testResponse); + + // exercise + Future response = service.asyncSet(key, value); + String payload = response.get(); + + // verify + assertEquals(testResponse, response); + assertEquals(OK_RESPONSE, payload); + + // teardown + } + + @Test + public void test_set_success() throws ExecutionException, InterruptedException, TimeoutException { + // setup + // TODO: randomize key/value + String key = "testKey"; + String value = "testValue"; + CompletableFuture testResponse = mock(CompletableFuture.class); + when(testResponse.get(anyLong(), any())).thenReturn(value); + when(commandsManager.set(eq(key), eq(value))).thenReturn(testResponse); + + // exercise + service.set(key, value); + + // verify + // nothing to do + + // teardown + } + + @Test + public void test_ping_success() { + // setup + + // exercise + + // verify + + // teardown + } + + @Test + public void test_info_success() { + // setup + + // exercise + + // verify + + // teardown + } +} From 2f813172c3c08b2ba6f734480922a7145cb68908 Mon Sep 17 00:00:00 2001 From: Andrew Carbonetto Date: Fri, 1 Dec 2023 16:12:55 -0800 Subject: [PATCH 79/81] Clean up sync calls; add close connection Signed-off-by: Andrew Carbonetto --- .../clients/babushka/JniNettyClient.java | 11 ++-- .../src/main/java/babushka/api/Awaiter.java | 16 ++++-- .../src/main/java/babushka/api/Commands.java | 29 ++--------- .../main/java/babushka/api/Connection.java | 23 +-------- .../babushka/connectors/SocketConnection.java | 1 + .../babushka/managers/CallbackManager.java | 13 +++++ .../babushka/managers/ConnectionManager.java | 3 +- .../test/java/babushka/api/CommandsTest.java | 51 ++----------------- .../java/babushka/api/ConnectionTest.java | 4 +- .../connectors/SocketConnectionTest.java | 3 ++ 10 files changed, 47 insertions(+), 107 deletions(-) create mode 100644 java/client/src/test/java/babushka/connectors/SocketConnectionTest.java diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java index 3e64bf6242..9e78661c04 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java @@ -1,5 +1,6 @@ package babushka.benchmarks.clients.babushka; +import babushka.api.Awaiter; import babushka.api.Client; import babushka.api.Commands; import babushka.api.Connection; @@ -38,7 +39,7 @@ public void connectToRedis(ConnectionSettings connectionSettings) { @Override public Future asyncConnectToRedis(ConnectionSettings connectionSettings) { - return connection.asyncConnectToRedis( + return connection.connectToRedis( connectionSettings.host, connectionSettings.port, connectionSettings.useSsl, @@ -47,21 +48,21 @@ public Future asyncConnectToRedis(ConnectionSettings connectionSettings) @Override public Future asyncSet(String key, String value) { - return asyncCommands.asyncSet(key, value); + return asyncCommands.set(key, value); } @Override public Future asyncGet(String key) { - return asyncCommands.asyncGet(key); + return asyncCommands.get(key); } @Override public void set(String key, String value) { - asyncCommands.set(key, value); + Awaiter.await(asyncCommands.set(key, value)); } @Override public String get(String key) { - return asyncCommands.get(key); + return Awaiter.await(asyncCommands.get(key)); } } diff --git a/java/client/src/main/java/babushka/api/Awaiter.java b/java/client/src/main/java/babushka/api/Awaiter.java index 432f666042..a2375d3f9a 100644 --- a/java/client/src/main/java/babushka/api/Awaiter.java +++ b/java/client/src/main/java/babushka/api/Awaiter.java @@ -1,22 +1,28 @@ package babushka.api; -import java.util.concurrent.Future; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; public class Awaiter { private static final long DEFAULT_TIMEOUT_MILLISECONDS = 1000; /** Get the future result with default timeout. */ - public static T await(Future future) { + public static T await(CompletableFuture future) { return await(future, DEFAULT_TIMEOUT_MILLISECONDS); } /** Get the future result with given timeout in ms. */ - public static T await(Future future, long timeout) { + public static T await(CompletableFuture future, long timeout) { try { return future.get(timeout, TimeUnit.MILLISECONDS); - } catch (Exception ignored) { - return null; + } catch (ExecutionException | InterruptedException | TimeoutException e) { + // TODO: handle exceptions: + // InterruptedException: should shutdown the client service + // TimeoutException: should be propagated with an error message thrown + // ExecutionException: throw runtime exception + throw new RuntimeException(e); } } } diff --git a/java/client/src/main/java/babushka/api/Commands.java b/java/client/src/main/java/babushka/api/Commands.java index 66d5a38140..5fafed0523 100644 --- a/java/client/src/main/java/babushka/api/Commands.java +++ b/java/client/src/main/java/babushka/api/Commands.java @@ -1,7 +1,7 @@ package babushka.api; import babushka.managers.CommandManager; -import java.util.concurrent.Future; +import java.util.concurrent.CompletableFuture; public class Commands { @@ -11,29 +11,6 @@ public Commands(CommandManager commandManager) { this.commandManager = commandManager; } - /** - * Sync (blocking) set. See async option in {@link #asyncSet}.
- * See REDIS docs for SET. - * - * @param key The key name - * @param value The value to set - */ - public void set(String key, String value) { - Awaiter.await(asyncSet(key, value)); - // TODO parse response and rethrow an exception if there is an error - } - - /** - * Sync (blocking) get. See async option in {@link #asyncGet}.
- * See REDIS docs for GET. - * - * @param key The key name - */ - public String get(String key) { - return Awaiter.await(asyncGet(key)); - // TODO support non-strings - } - /** * Async (non-blocking) set. See sync option in {@link #set}.
* See REDIS docs for SET. @@ -41,7 +18,7 @@ public String get(String key) { * @param key The key name * @param value The value to set */ - public Future asyncSet(String key, String value) { + public CompletableFuture set(String key, String value) { return commandManager.set(key, value); } @@ -51,7 +28,7 @@ public Future asyncSet(String key, String value) { * * @param key The key name */ - public Future asyncGet(String key) { + public CompletableFuture get(String key) { return commandManager.get(key); } } diff --git a/java/client/src/main/java/babushka/api/Connection.java b/java/client/src/main/java/babushka/api/Connection.java index 6c714a3c0c..f8fd31f7f6 100644 --- a/java/client/src/main/java/babushka/api/Connection.java +++ b/java/client/src/main/java/babushka/api/Connection.java @@ -1,7 +1,5 @@ package babushka.api; -import static babushka.api.Awaiter.await; - import babushka.managers.ConnectionManager; import java.util.concurrent.CompletableFuture; @@ -17,20 +15,6 @@ public ConnectionManager getConnectionManager() { return connectionManager; } - /** - * Sync (blocking) connect to REDIS. See async option in {@link #asyncConnectToRedis}. - * - * @param host Server address - * @param port Server port - * @param useSsl true if communication with the server or cluster should use Transport Level - * Security - * @param clusterMode true if REDIS instance runs in the cluster mode - */ - // TODO support configuration object which holds more parameters (e.g. multiple addresses, etc) - public void connectToRedis(String host, int port, boolean useSsl, boolean clusterMode) { - await(asyncConnectToRedis(host, port, useSsl, clusterMode)); - } - /** * Async (non-blocking) connect to REDIS. See sync option in {@link #connectToRedis}. * @@ -41,13 +25,8 @@ public void connectToRedis(String host, int port, boolean useSsl, boolean cluste * @param clusterMode true if REDIS instance runs in the cluster mode */ // TODO support configuration object which holds more parameters (e.g. multiple addresses, etc) - public CompletableFuture asyncConnectToRedis( + public CompletableFuture connectToRedis( String host, int port, boolean useSsl, boolean clusterMode) { return connectionManager.connectToRedis(host, port, useSsl, clusterMode); } - - /** Close all connections and release resources */ - public void closeConnection() { - connectionManager.closeConnection(); - } } diff --git a/java/client/src/main/java/babushka/connectors/SocketConnection.java b/java/client/src/main/java/babushka/connectors/SocketConnection.java index 49ef74e713..812eeb8bc1 100644 --- a/java/client/src/main/java/babushka/connectors/SocketConnection.java +++ b/java/client/src/main/java/babushka/connectors/SocketConnection.java @@ -118,6 +118,7 @@ public void close() { group.shutdownGracefully(); INSTANCE = null; // TODO should we reply in uncompleted futures? + CallbackManager.shutdownGracefully(); CallbackManager.connectionRequests.clear(); CallbackManager.responses.clear(); } diff --git a/java/client/src/main/java/babushka/managers/CallbackManager.java b/java/client/src/main/java/babushka/managers/CallbackManager.java index ea8f3da41a..94a05febec 100644 --- a/java/client/src/main/java/babushka/managers/CallbackManager.java +++ b/java/client/src/main/java/babushka/managers/CallbackManager.java @@ -13,6 +13,8 @@ /** Holder for resources owned by {@link CommandManager} and used by {@link ReadHandler}. */ public class CallbackManager { + // TODO: let's make these non-static class variables + /** * Storage of Futures to handle responses. Map key is callback id, which starts from 1.
* Each future is a promise for every submitted by user request. @@ -56,6 +58,17 @@ public void registerConnection(CompletableFuture future) { CallbackManager.connectionRequests.add(future); } + public static void shutdownGracefully() { + connectionRequests.forEach( + future -> { + future.completeExceptionally(new InterruptedException()); + }); + responses.forEach( + (callbackId, future) -> { + future.completeExceptionally(new InterruptedException()); + }); + } + /** * Create a unique callback ID (request ID) and a corresponding registered future for the * response.
diff --git a/java/client/src/main/java/babushka/managers/ConnectionManager.java b/java/client/src/main/java/babushka/managers/ConnectionManager.java index 2ee8e6ce4a..7f99b63dc2 100644 --- a/java/client/src/main/java/babushka/managers/ConnectionManager.java +++ b/java/client/src/main/java/babushka/managers/ConnectionManager.java @@ -59,7 +59,8 @@ public CompletableFuture connectToRedis( * Close socket connection and drop all channels TODO: provide feedback that the connection was * properly closed */ - public void closeConnection() { + public CompletableFuture closeConnection() { socketConnection.close(); + return new CompletableFuture(); } } diff --git a/java/client/src/test/java/babushka/api/CommandsTest.java b/java/client/src/test/java/babushka/api/CommandsTest.java index db3df1dc98..24f93defc8 100644 --- a/java/client/src/test/java/babushka/api/CommandsTest.java +++ b/java/client/src/test/java/babushka/api/CommandsTest.java @@ -1,8 +1,6 @@ package babushka.api; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -11,7 +9,6 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; -import java.util.concurrent.TimeoutException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -30,7 +27,7 @@ public void setUp() { } @Test - public void test_asyncGet_success() throws ExecutionException, InterruptedException { + public void get_success() throws ExecutionException, InterruptedException { // setup // TODO: randomize keys String key = "testKey"; @@ -40,7 +37,7 @@ public void test_asyncGet_success() throws ExecutionException, InterruptedExcept when(commandsManager.get(eq(key))).thenReturn(testResponse); // exercise - Future response = service.asyncGet(key); + Future response = service.get(key); String payload = response.get(); // verify @@ -50,29 +47,10 @@ public void test_asyncGet_success() throws ExecutionException, InterruptedExcept // teardown } - // TODO: test_asyncGet_InterruptedException and ExecutionException + // TODO: test_get_InterruptedException and ExecutionException @Test - public void test_get_success() throws ExecutionException, InterruptedException, TimeoutException { - // setup - // TODO: randomize keys - String key = "testKey"; - String value = "testValue"; - CompletableFuture testResponse = mock(CompletableFuture.class); - when(testResponse.get(anyLong(), any())).thenReturn(value); - when(commandsManager.get(eq(key))).thenReturn(testResponse); - - // exercise - String payload = service.get(key); - - // verify - assertEquals(value, payload); - - // teardown - } - - @Test - public void test_asyncSet_success() throws ExecutionException, InterruptedException { + public void set_success() throws ExecutionException, InterruptedException { // setup // TODO: randomize key and value String key = "testKey"; @@ -82,7 +60,7 @@ public void test_asyncSet_success() throws ExecutionException, InterruptedExcept when(commandsManager.set(eq(key), eq(value))).thenReturn(testResponse); // exercise - Future response = service.asyncSet(key, value); + Future response = service.set(key, value); String payload = response.get(); // verify @@ -92,25 +70,6 @@ public void test_asyncSet_success() throws ExecutionException, InterruptedExcept // teardown } - @Test - public void test_set_success() throws ExecutionException, InterruptedException, TimeoutException { - // setup - // TODO: randomize key/value - String key = "testKey"; - String value = "testValue"; - CompletableFuture testResponse = mock(CompletableFuture.class); - when(testResponse.get(anyLong(), any())).thenReturn(value); - when(commandsManager.set(eq(key), eq(value))).thenReturn(testResponse); - - // exercise - service.set(key, value); - - // verify - // nothing to do - - // teardown - } - @Test public void test_ping_success() { // setup diff --git a/java/client/src/test/java/babushka/api/ConnectionTest.java b/java/client/src/test/java/babushka/api/ConnectionTest.java index 3261b63d46..e4f0bb5052 100644 --- a/java/client/src/test/java/babushka/api/ConnectionTest.java +++ b/java/client/src/test/java/babushka/api/ConnectionTest.java @@ -31,7 +31,7 @@ public void setUp() { } @Test - public void test_asyncConnectToRedis_success() { + public void asyncConnectToRedis_success() { // setup boolean useSsl = false; boolean clusterMode = false; @@ -41,7 +41,7 @@ public void test_asyncConnectToRedis_success() { // exercise CompletableFuture connectionResponse = - service.asyncConnectToRedis(HOST, PORT, useSsl, clusterMode); + service.connectToRedis(HOST, PORT, useSsl, clusterMode); // verify Mockito.verify(connectionManager, times(1)) diff --git a/java/client/src/test/java/babushka/connectors/SocketConnectionTest.java b/java/client/src/test/java/babushka/connectors/SocketConnectionTest.java new file mode 100644 index 0000000000..43a6d34593 --- /dev/null +++ b/java/client/src/test/java/babushka/connectors/SocketConnectionTest.java @@ -0,0 +1,3 @@ +package babushka.connectors; + +public class SocketConnectionTest {} From e828f0c343a9cdeb7289a8acf0dcf9d8e81f19c6 Mon Sep 17 00:00:00 2001 From: Andrew Carbonetto Date: Mon, 4 Dec 2023 14:23:10 -0800 Subject: [PATCH 80/81] Update for review comments Signed-off-by: Andrew Carbonetto --- java/.gitignore | 2 +- .../babushka/connectors/SocketConnection.java | 3 - .../connectors/handlers/ChannelBuilder.java | 4 +- .../connectors/handlers/ReadHandler.java | 11 +- .../babushka/managers/CallbackManager.java | 15 + .../babushka/managers/CommandManager.java | 6 +- .../babushka/managers/ConnectionManager.java | 2 +- .../ConnectionRequestOuterClass.java | 3894 ---------- .../redis_request/RedisRequestOuterClass.java | 6868 ----------------- .../protobuf/response/ResponseOuterClass.java | 2162 ------ java/src/lib.rs | 4 +- 11 files changed, 25 insertions(+), 12946 deletions(-) delete mode 100644 java/client/src/main/java/babushka/models/protobuf/connection_request/ConnectionRequestOuterClass.java delete mode 100644 java/client/src/main/java/babushka/models/protobuf/redis_request/RedisRequestOuterClass.java delete mode 100644 java/client/src/main/java/babushka/models/protobuf/response/ResponseOuterClass.java diff --git a/java/.gitignore b/java/.gitignore index 23955aa0e8..a7b8d6a177 100644 --- a/java/.gitignore +++ b/java/.gitignore @@ -5,4 +5,4 @@ build # Ignore protobuf generated files -models/protobuf +protobuf diff --git a/java/client/src/main/java/babushka/connectors/SocketConnection.java b/java/client/src/main/java/babushka/connectors/SocketConnection.java index 812eeb8bc1..cd7c27abf6 100644 --- a/java/client/src/main/java/babushka/connectors/SocketConnection.java +++ b/java/client/src/main/java/babushka/connectors/SocketConnection.java @@ -117,10 +117,7 @@ public void close() { channel.close(); group.shutdownGracefully(); INSTANCE = null; - // TODO should we reply in uncompleted futures? CallbackManager.shutdownGracefully(); - CallbackManager.connectionRequests.clear(); - CallbackManager.responses.clear(); } /** diff --git a/java/client/src/main/java/babushka/connectors/handlers/ChannelBuilder.java b/java/client/src/main/java/babushka/connectors/handlers/ChannelBuilder.java index ca68892c6a..ff0f14e722 100644 --- a/java/client/src/main/java/babushka/connectors/handlers/ChannelBuilder.java +++ b/java/client/src/main/java/babushka/connectors/handlers/ChannelBuilder.java @@ -16,7 +16,7 @@ public void initChannel(@NonNull UnixChannel ch) { // https://netty.io/4.1/api/io/netty/handler/codec/protobuf/ProtobufEncoder.html .addLast("protobufDecoder", new ProtobufVarint32FrameDecoder()) .addLast("protobufEncoder", new ProtobufVarint32LengthFieldPrepender()) - .addLast(new ChannelInboundHandlerAdapter()) - .addLast(new ChannelOutboundHandlerAdapter()); + .addLast(new ReadHandler()) + .addLast(new WriteHandler()); } } diff --git a/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java b/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java index 5423b57567..6774b2698e 100644 --- a/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java +++ b/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java @@ -26,16 +26,7 @@ public void channelRead(@NonNull ChannelHandlerContext ctx, @NonNull Object msg) buf.readBytes(bytes); // TODO surround parsing with try-catch, set error to future if parsing failed. var response = ResponseOuterClass.Response.parseFrom(bytes); - int callbackId = response.getCallbackIdx(); - if (callbackId == 0) { - // can't distinguish connection requests since they have no - // callback ID - // https://github.com/aws/babushka/issues/600 - CallbackManager.connectionRequests.pop().complete(response); - } else { - CallbackManager.responses.get(callbackId).complete(response); - CallbackManager.responses.remove(callbackId); - } + CallbackManager.completeAsync(response); buf.release(); } diff --git a/java/client/src/main/java/babushka/managers/CallbackManager.java b/java/client/src/main/java/babushka/managers/CallbackManager.java index 94a05febec..513ebf074f 100644 --- a/java/client/src/main/java/babushka/managers/CallbackManager.java +++ b/java/client/src/main/java/babushka/managers/CallbackManager.java @@ -58,15 +58,30 @@ public void registerConnection(CompletableFuture future) { CallbackManager.connectionRequests.add(future); } + public static void completeAsync(Response response) { + int callbackId = response.getCallbackIdx(); + if (callbackId == 0) { + // can't distinguish connection requests since they have no + // callback ID + // https://github.com/aws/babushka/issues/600 + connectionRequests.pop().completeAsync(() -> response); + } else { + responses.get(callbackId).completeAsync(() -> response); + responses.remove(callbackId); + } + } + public static void shutdownGracefully() { connectionRequests.forEach( future -> { future.completeExceptionally(new InterruptedException()); }); + connectionRequests.clear(); responses.forEach( (callbackId, future) -> { future.completeExceptionally(new InterruptedException()); }); + responses.clear(); } /** diff --git a/java/client/src/main/java/babushka/managers/CommandManager.java b/java/client/src/main/java/babushka/managers/CommandManager.java index 4928d13470..a7f8014fb5 100644 --- a/java/client/src/main/java/babushka/managers/CommandManager.java +++ b/java/client/src/main/java/babushka/managers/CommandManager.java @@ -50,14 +50,14 @@ public CompletableFuture set(String key, String value) { public CompletableFuture submitNewCommand(RequestType command, List args) { // TODO this explicitly uses ForkJoin thread pool. May be we should use another one. CompletableFuture future = new CompletableFuture<>(); - int callbackId = callbackManager.registerRequest(future); return CompletableFuture.supplyAsync( () -> { socketConnection.writeAndFlush(redisSingleCommand(command, args)); return future; }) - .thenCompose(f -> f) - .thenApply(RequestBuilder::resolveRedisResponseToString); + // TODO: is there a better way to execute this? + .thenComposeAsync(f -> f) + .thenApplyAsync(RequestBuilder::resolveRedisResponseToString); } } diff --git a/java/client/src/main/java/babushka/managers/ConnectionManager.java b/java/client/src/main/java/babushka/managers/ConnectionManager.java index 7f99b63dc2..5bce7caae3 100644 --- a/java/client/src/main/java/babushka/managers/ConnectionManager.java +++ b/java/client/src/main/java/babushka/managers/ConnectionManager.java @@ -52,7 +52,7 @@ public CompletableFuture connectToRedis( var future = new CompletableFuture(); callbackManager.registerConnection(future); socketConnection.writeAndFlush(request); - return future.thenApply(f -> f.getConstantResponse().toString()); + return future.thenApplyAsync(f -> f.getConstantResponse().toString()); } /** diff --git a/java/client/src/main/java/babushka/models/protobuf/connection_request/ConnectionRequestOuterClass.java b/java/client/src/main/java/babushka/models/protobuf/connection_request/ConnectionRequestOuterClass.java deleted file mode 100644 index 9acb584f68..0000000000 --- a/java/client/src/main/java/babushka/models/protobuf/connection_request/ConnectionRequestOuterClass.java +++ /dev/null @@ -1,3894 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: protobuf/connection_request.proto - -package connection_request; - -public final class ConnectionRequestOuterClass { - private ConnectionRequestOuterClass() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistryLite registry) { - } - - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions( - (com.google.protobuf.ExtensionRegistryLite) registry); - } - /** - * Protobuf enum {@code connection_request.ReadFrom} - */ - public enum ReadFrom - implements com.google.protobuf.ProtocolMessageEnum { - /** - * Primary = 0; - */ - Primary(0), - /** - * PreferReplica = 1; - */ - PreferReplica(1), - /** - * LowestLatency = 2; - */ - LowestLatency(2), - /** - * AZAffinity = 3; - */ - AZAffinity(3), - UNRECOGNIZED(-1), - ; - - /** - * Primary = 0; - */ - public static final int Primary_VALUE = 0; - /** - * PreferReplica = 1; - */ - public static final int PreferReplica_VALUE = 1; - /** - * LowestLatency = 2; - */ - public static final int LowestLatency_VALUE = 2; - /** - * AZAffinity = 3; - */ - public static final int AZAffinity_VALUE = 3; - - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static ReadFrom valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static ReadFrom forNumber(int value) { - switch (value) { - case 0: return Primary; - case 1: return PreferReplica; - case 2: return LowestLatency; - case 3: return AZAffinity; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - ReadFrom> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public ReadFrom findValueByNumber(int number) { - return ReadFrom.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return connection_request.ConnectionRequestOuterClass.getDescriptor().getEnumTypes().get(0); - } - - private static final ReadFrom[] VALUES = values(); - - public static ReadFrom valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private ReadFrom(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:connection_request.ReadFrom) - } - - /** - * Protobuf enum {@code connection_request.TlsMode} - */ - public enum TlsMode - implements com.google.protobuf.ProtocolMessageEnum { - /** - * NoTls = 0; - */ - NoTls(0), - /** - * SecureTls = 1; - */ - SecureTls(1), - /** - * InsecureTls = 2; - */ - InsecureTls(2), - UNRECOGNIZED(-1), - ; - - /** - * NoTls = 0; - */ - public static final int NoTls_VALUE = 0; - /** - * SecureTls = 1; - */ - public static final int SecureTls_VALUE = 1; - /** - * InsecureTls = 2; - */ - public static final int InsecureTls_VALUE = 2; - - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static TlsMode valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static TlsMode forNumber(int value) { - switch (value) { - case 0: return NoTls; - case 1: return SecureTls; - case 2: return InsecureTls; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - TlsMode> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public TlsMode findValueByNumber(int number) { - return TlsMode.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return connection_request.ConnectionRequestOuterClass.getDescriptor().getEnumTypes().get(1); - } - - private static final TlsMode[] VALUES = values(); - - public static TlsMode valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private TlsMode(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:connection_request.TlsMode) - } - - public interface NodeAddressOrBuilder extends - // @@protoc_insertion_point(interface_extends:connection_request.NodeAddress) - com.google.protobuf.MessageOrBuilder { - - /** - * string host = 1; - * @return The host. - */ - java.lang.String getHost(); - /** - * string host = 1; - * @return The bytes for host. - */ - com.google.protobuf.ByteString - getHostBytes(); - - /** - * uint32 port = 2; - * @return The port. - */ - int getPort(); - } - /** - * Protobuf type {@code connection_request.NodeAddress} - */ - public static final class NodeAddress extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:connection_request.NodeAddress) - NodeAddressOrBuilder { - private static final long serialVersionUID = 0L; - // Use NodeAddress.newBuilder() to construct. - private NodeAddress(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private NodeAddress() { - host_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new NodeAddress(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_NodeAddress_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_NodeAddress_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.NodeAddress.class, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder.class); - } - - public static final int HOST_FIELD_NUMBER = 1; - @SuppressWarnings("serial") - private volatile java.lang.Object host_ = ""; - /** - * string host = 1; - * @return The host. - */ - @java.lang.Override - public java.lang.String getHost() { - java.lang.Object ref = host_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - host_ = s; - return s; - } - } - /** - * string host = 1; - * @return The bytes for host. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getHostBytes() { - java.lang.Object ref = host_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - host_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int PORT_FIELD_NUMBER = 2; - private int port_ = 0; - /** - * uint32 port = 2; - * @return The port. - */ - @java.lang.Override - public int getPort() { - return port_; - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(host_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, host_); - } - if (port_ != 0) { - output.writeUInt32(2, port_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(host_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, host_); - } - if (port_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(2, port_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof connection_request.ConnectionRequestOuterClass.NodeAddress)) { - return super.equals(obj); - } - connection_request.ConnectionRequestOuterClass.NodeAddress other = (connection_request.ConnectionRequestOuterClass.NodeAddress) obj; - - if (!getHost() - .equals(other.getHost())) return false; - if (getPort() - != other.getPort()) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + HOST_FIELD_NUMBER; - hash = (53 * hash) + getHost().hashCode(); - hash = (37 * hash) + PORT_FIELD_NUMBER; - hash = (53 * hash) + getPort(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.NodeAddress parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.NodeAddress parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static connection_request.ConnectionRequestOuterClass.NodeAddress parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(connection_request.ConnectionRequestOuterClass.NodeAddress prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code connection_request.NodeAddress} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:connection_request.NodeAddress) - connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_NodeAddress_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_NodeAddress_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.NodeAddress.class, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder.class); - } - - // Construct using connection_request.ConnectionRequestOuterClass.NodeAddress.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - host_ = ""; - port_ = 0; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_NodeAddress_descriptor; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.NodeAddress getDefaultInstanceForType() { - return connection_request.ConnectionRequestOuterClass.NodeAddress.getDefaultInstance(); - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.NodeAddress build() { - connection_request.ConnectionRequestOuterClass.NodeAddress result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.NodeAddress buildPartial() { - connection_request.ConnectionRequestOuterClass.NodeAddress result = new connection_request.ConnectionRequestOuterClass.NodeAddress(this); - if (bitField0_ != 0) { buildPartial0(result); } - onBuilt(); - return result; - } - - private void buildPartial0(connection_request.ConnectionRequestOuterClass.NodeAddress result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.host_ = host_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.port_ = port_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof connection_request.ConnectionRequestOuterClass.NodeAddress) { - return mergeFrom((connection_request.ConnectionRequestOuterClass.NodeAddress)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(connection_request.ConnectionRequestOuterClass.NodeAddress other) { - if (other == connection_request.ConnectionRequestOuterClass.NodeAddress.getDefaultInstance()) return this; - if (!other.getHost().isEmpty()) { - host_ = other.host_; - bitField0_ |= 0x00000001; - onChanged(); - } - if (other.getPort() != 0) { - setPort(other.getPort()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - host_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000001; - break; - } // case 10 - case 16: { - port_ = input.readUInt32(); - bitField0_ |= 0x00000002; - break; - } // case 16 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int bitField0_; - - private java.lang.Object host_ = ""; - /** - * string host = 1; - * @return The host. - */ - public java.lang.String getHost() { - java.lang.Object ref = host_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - host_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string host = 1; - * @return The bytes for host. - */ - public com.google.protobuf.ByteString - getHostBytes() { - java.lang.Object ref = host_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - host_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string host = 1; - * @param value The host to set. - * @return This builder for chaining. - */ - public Builder setHost( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - host_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * string host = 1; - * @return This builder for chaining. - */ - public Builder clearHost() { - host_ = getDefaultInstance().getHost(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - return this; - } - /** - * string host = 1; - * @param value The bytes for host to set. - * @return This builder for chaining. - */ - public Builder setHostBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - host_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - private int port_ ; - /** - * uint32 port = 2; - * @return The port. - */ - @java.lang.Override - public int getPort() { - return port_; - } - /** - * uint32 port = 2; - * @param value The port to set. - * @return This builder for chaining. - */ - public Builder setPort(int value) { - - port_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - /** - * uint32 port = 2; - * @return This builder for chaining. - */ - public Builder clearPort() { - bitField0_ = (bitField0_ & ~0x00000002); - port_ = 0; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:connection_request.NodeAddress) - } - - // @@protoc_insertion_point(class_scope:connection_request.NodeAddress) - private static final connection_request.ConnectionRequestOuterClass.NodeAddress DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.NodeAddress(); - } - - public static connection_request.ConnectionRequestOuterClass.NodeAddress getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public NodeAddress parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.NodeAddress getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface AuthenticationInfoOrBuilder extends - // @@protoc_insertion_point(interface_extends:connection_request.AuthenticationInfo) - com.google.protobuf.MessageOrBuilder { - - /** - * string password = 1; - * @return The password. - */ - java.lang.String getPassword(); - /** - * string password = 1; - * @return The bytes for password. - */ - com.google.protobuf.ByteString - getPasswordBytes(); - - /** - * string username = 2; - * @return The username. - */ - java.lang.String getUsername(); - /** - * string username = 2; - * @return The bytes for username. - */ - com.google.protobuf.ByteString - getUsernameBytes(); - } - /** - * Protobuf type {@code connection_request.AuthenticationInfo} - */ - public static final class AuthenticationInfo extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:connection_request.AuthenticationInfo) - AuthenticationInfoOrBuilder { - private static final long serialVersionUID = 0L; - // Use AuthenticationInfo.newBuilder() to construct. - private AuthenticationInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private AuthenticationInfo() { - password_ = ""; - username_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new AuthenticationInfo(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_AuthenticationInfo_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_AuthenticationInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.class, connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder.class); - } - - public static final int PASSWORD_FIELD_NUMBER = 1; - @SuppressWarnings("serial") - private volatile java.lang.Object password_ = ""; - /** - * string password = 1; - * @return The password. - */ - @java.lang.Override - public java.lang.String getPassword() { - java.lang.Object ref = password_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - password_ = s; - return s; - } - } - /** - * string password = 1; - * @return The bytes for password. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getPasswordBytes() { - java.lang.Object ref = password_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - password_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int USERNAME_FIELD_NUMBER = 2; - @SuppressWarnings("serial") - private volatile java.lang.Object username_ = ""; - /** - * string username = 2; - * @return The username. - */ - @java.lang.Override - public java.lang.String getUsername() { - java.lang.Object ref = username_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - username_ = s; - return s; - } - } - /** - * string username = 2; - * @return The bytes for username. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getUsernameBytes() { - java.lang.Object ref = username_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - username_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(password_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, password_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(username_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, username_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(password_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, password_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(username_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, username_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof connection_request.ConnectionRequestOuterClass.AuthenticationInfo)) { - return super.equals(obj); - } - connection_request.ConnectionRequestOuterClass.AuthenticationInfo other = (connection_request.ConnectionRequestOuterClass.AuthenticationInfo) obj; - - if (!getPassword() - .equals(other.getPassword())) return false; - if (!getUsername() - .equals(other.getUsername())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + PASSWORD_FIELD_NUMBER; - hash = (53 * hash) + getPassword().hashCode(); - hash = (37 * hash) + USERNAME_FIELD_NUMBER; - hash = (53 * hash) + getUsername().hashCode(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(connection_request.ConnectionRequestOuterClass.AuthenticationInfo prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code connection_request.AuthenticationInfo} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:connection_request.AuthenticationInfo) - connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_AuthenticationInfo_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_AuthenticationInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.class, connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder.class); - } - - // Construct using connection_request.ConnectionRequestOuterClass.AuthenticationInfo.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - password_ = ""; - username_ = ""; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_AuthenticationInfo_descriptor; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo getDefaultInstanceForType() { - return connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance(); - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo build() { - connection_request.ConnectionRequestOuterClass.AuthenticationInfo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo buildPartial() { - connection_request.ConnectionRequestOuterClass.AuthenticationInfo result = new connection_request.ConnectionRequestOuterClass.AuthenticationInfo(this); - if (bitField0_ != 0) { buildPartial0(result); } - onBuilt(); - return result; - } - - private void buildPartial0(connection_request.ConnectionRequestOuterClass.AuthenticationInfo result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.password_ = password_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.username_ = username_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof connection_request.ConnectionRequestOuterClass.AuthenticationInfo) { - return mergeFrom((connection_request.ConnectionRequestOuterClass.AuthenticationInfo)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(connection_request.ConnectionRequestOuterClass.AuthenticationInfo other) { - if (other == connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance()) return this; - if (!other.getPassword().isEmpty()) { - password_ = other.password_; - bitField0_ |= 0x00000001; - onChanged(); - } - if (!other.getUsername().isEmpty()) { - username_ = other.username_; - bitField0_ |= 0x00000002; - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - password_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000001; - break; - } // case 10 - case 18: { - username_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000002; - break; - } // case 18 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int bitField0_; - - private java.lang.Object password_ = ""; - /** - * string password = 1; - * @return The password. - */ - public java.lang.String getPassword() { - java.lang.Object ref = password_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - password_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string password = 1; - * @return The bytes for password. - */ - public com.google.protobuf.ByteString - getPasswordBytes() { - java.lang.Object ref = password_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - password_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string password = 1; - * @param value The password to set. - * @return This builder for chaining. - */ - public Builder setPassword( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - password_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * string password = 1; - * @return This builder for chaining. - */ - public Builder clearPassword() { - password_ = getDefaultInstance().getPassword(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - return this; - } - /** - * string password = 1; - * @param value The bytes for password to set. - * @return This builder for chaining. - */ - public Builder setPasswordBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - password_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - private java.lang.Object username_ = ""; - /** - * string username = 2; - * @return The username. - */ - public java.lang.String getUsername() { - java.lang.Object ref = username_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - username_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string username = 2; - * @return The bytes for username. - */ - public com.google.protobuf.ByteString - getUsernameBytes() { - java.lang.Object ref = username_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - username_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string username = 2; - * @param value The username to set. - * @return This builder for chaining. - */ - public Builder setUsername( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - username_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - /** - * string username = 2; - * @return This builder for chaining. - */ - public Builder clearUsername() { - username_ = getDefaultInstance().getUsername(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - return this; - } - /** - * string username = 2; - * @param value The bytes for username to set. - * @return This builder for chaining. - */ - public Builder setUsernameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - username_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:connection_request.AuthenticationInfo) - } - - // @@protoc_insertion_point(class_scope:connection_request.AuthenticationInfo) - private static final connection_request.ConnectionRequestOuterClass.AuthenticationInfo DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.AuthenticationInfo(); - } - - public static connection_request.ConnectionRequestOuterClass.AuthenticationInfo getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public AuthenticationInfo parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface ConnectionRequestOrBuilder extends - // @@protoc_insertion_point(interface_extends:connection_request.ConnectionRequest) - com.google.protobuf.MessageOrBuilder { - - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - java.util.List - getAddressesList(); - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - connection_request.ConnectionRequestOuterClass.NodeAddress getAddresses(int index); - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - int getAddressesCount(); - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - java.util.List - getAddressesOrBuilderList(); - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder getAddressesOrBuilder( - int index); - - /** - * .connection_request.TlsMode tls_mode = 2; - * @return The enum numeric value on the wire for tlsMode. - */ - int getTlsModeValue(); - /** - * .connection_request.TlsMode tls_mode = 2; - * @return The tlsMode. - */ - connection_request.ConnectionRequestOuterClass.TlsMode getTlsMode(); - - /** - * bool cluster_mode_enabled = 3; - * @return The clusterModeEnabled. - */ - boolean getClusterModeEnabled(); - - /** - * uint32 request_timeout = 4; - * @return The requestTimeout. - */ - int getRequestTimeout(); - - /** - * .connection_request.ReadFrom read_from = 5; - * @return The enum numeric value on the wire for readFrom. - */ - int getReadFromValue(); - /** - * .connection_request.ReadFrom read_from = 5; - * @return The readFrom. - */ - connection_request.ConnectionRequestOuterClass.ReadFrom getReadFrom(); - - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - * @return Whether the connectionRetryStrategy field is set. - */ - boolean hasConnectionRetryStrategy(); - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - * @return The connectionRetryStrategy. - */ - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy getConnectionRetryStrategy(); - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - */ - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder getConnectionRetryStrategyOrBuilder(); - - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - * @return Whether the authenticationInfo field is set. - */ - boolean hasAuthenticationInfo(); - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - * @return The authenticationInfo. - */ - connection_request.ConnectionRequestOuterClass.AuthenticationInfo getAuthenticationInfo(); - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - */ - connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder getAuthenticationInfoOrBuilder(); - - /** - * uint32 database_id = 8; - * @return The databaseId. - */ - int getDatabaseId(); - } - /** - *

-   * IMPORTANT - if you add fields here, you probably need to add them also in client/mod.rs:`sanitized_request_string`.
-   * 
- * - * Protobuf type {@code connection_request.ConnectionRequest} - */ - public static final class ConnectionRequest extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:connection_request.ConnectionRequest) - ConnectionRequestOrBuilder { - private static final long serialVersionUID = 0L; - // Use ConnectionRequest.newBuilder() to construct. - private ConnectionRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private ConnectionRequest() { - addresses_ = java.util.Collections.emptyList(); - tlsMode_ = 0; - readFrom_ = 0; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new ConnectionRequest(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.ConnectionRequest.class, connection_request.ConnectionRequestOuterClass.ConnectionRequest.Builder.class); - } - - public static final int ADDRESSES_FIELD_NUMBER = 1; - @SuppressWarnings("serial") - private java.util.List addresses_; - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - @java.lang.Override - public java.util.List getAddressesList() { - return addresses_; - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - @java.lang.Override - public java.util.List - getAddressesOrBuilderList() { - return addresses_; - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - @java.lang.Override - public int getAddressesCount() { - return addresses_.size(); - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.NodeAddress getAddresses(int index) { - return addresses_.get(index); - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder getAddressesOrBuilder( - int index) { - return addresses_.get(index); - } - - public static final int TLS_MODE_FIELD_NUMBER = 2; - private int tlsMode_ = 0; - /** - * .connection_request.TlsMode tls_mode = 2; - * @return The enum numeric value on the wire for tlsMode. - */ - @java.lang.Override public int getTlsModeValue() { - return tlsMode_; - } - /** - * .connection_request.TlsMode tls_mode = 2; - * @return The tlsMode. - */ - @java.lang.Override public connection_request.ConnectionRequestOuterClass.TlsMode getTlsMode() { - connection_request.ConnectionRequestOuterClass.TlsMode result = connection_request.ConnectionRequestOuterClass.TlsMode.forNumber(tlsMode_); - return result == null ? connection_request.ConnectionRequestOuterClass.TlsMode.UNRECOGNIZED : result; - } - - public static final int CLUSTER_MODE_ENABLED_FIELD_NUMBER = 3; - private boolean clusterModeEnabled_ = false; - /** - * bool cluster_mode_enabled = 3; - * @return The clusterModeEnabled. - */ - @java.lang.Override - public boolean getClusterModeEnabled() { - return clusterModeEnabled_; - } - - public static final int REQUEST_TIMEOUT_FIELD_NUMBER = 4; - private int requestTimeout_ = 0; - /** - * uint32 request_timeout = 4; - * @return The requestTimeout. - */ - @java.lang.Override - public int getRequestTimeout() { - return requestTimeout_; - } - - public static final int READ_FROM_FIELD_NUMBER = 5; - private int readFrom_ = 0; - /** - * .connection_request.ReadFrom read_from = 5; - * @return The enum numeric value on the wire for readFrom. - */ - @java.lang.Override public int getReadFromValue() { - return readFrom_; - } - /** - * .connection_request.ReadFrom read_from = 5; - * @return The readFrom. - */ - @java.lang.Override public connection_request.ConnectionRequestOuterClass.ReadFrom getReadFrom() { - connection_request.ConnectionRequestOuterClass.ReadFrom result = connection_request.ConnectionRequestOuterClass.ReadFrom.forNumber(readFrom_); - return result == null ? connection_request.ConnectionRequestOuterClass.ReadFrom.UNRECOGNIZED : result; - } - - public static final int CONNECTION_RETRY_STRATEGY_FIELD_NUMBER = 6; - private connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy connectionRetryStrategy_; - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - * @return Whether the connectionRetryStrategy field is set. - */ - @java.lang.Override - public boolean hasConnectionRetryStrategy() { - return connectionRetryStrategy_ != null; - } - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - * @return The connectionRetryStrategy. - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy getConnectionRetryStrategy() { - return connectionRetryStrategy_ == null ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance() : connectionRetryStrategy_; - } - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder getConnectionRetryStrategyOrBuilder() { - return connectionRetryStrategy_ == null ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance() : connectionRetryStrategy_; - } - - public static final int AUTHENTICATION_INFO_FIELD_NUMBER = 7; - private connection_request.ConnectionRequestOuterClass.AuthenticationInfo authenticationInfo_; - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - * @return Whether the authenticationInfo field is set. - */ - @java.lang.Override - public boolean hasAuthenticationInfo() { - return authenticationInfo_ != null; - } - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - * @return The authenticationInfo. - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo getAuthenticationInfo() { - return authenticationInfo_ == null ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance() : authenticationInfo_; - } - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder getAuthenticationInfoOrBuilder() { - return authenticationInfo_ == null ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance() : authenticationInfo_; - } - - public static final int DATABASE_ID_FIELD_NUMBER = 8; - private int databaseId_ = 0; - /** - * uint32 database_id = 8; - * @return The databaseId. - */ - @java.lang.Override - public int getDatabaseId() { - return databaseId_; - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - for (int i = 0; i < addresses_.size(); i++) { - output.writeMessage(1, addresses_.get(i)); - } - if (tlsMode_ != connection_request.ConnectionRequestOuterClass.TlsMode.NoTls.getNumber()) { - output.writeEnum(2, tlsMode_); - } - if (clusterModeEnabled_ != false) { - output.writeBool(3, clusterModeEnabled_); - } - if (requestTimeout_ != 0) { - output.writeUInt32(4, requestTimeout_); - } - if (readFrom_ != connection_request.ConnectionRequestOuterClass.ReadFrom.Primary.getNumber()) { - output.writeEnum(5, readFrom_); - } - if (connectionRetryStrategy_ != null) { - output.writeMessage(6, getConnectionRetryStrategy()); - } - if (authenticationInfo_ != null) { - output.writeMessage(7, getAuthenticationInfo()); - } - if (databaseId_ != 0) { - output.writeUInt32(8, databaseId_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - for (int i = 0; i < addresses_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, addresses_.get(i)); - } - if (tlsMode_ != connection_request.ConnectionRequestOuterClass.TlsMode.NoTls.getNumber()) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(2, tlsMode_); - } - if (clusterModeEnabled_ != false) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(3, clusterModeEnabled_); - } - if (requestTimeout_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(4, requestTimeout_); - } - if (readFrom_ != connection_request.ConnectionRequestOuterClass.ReadFrom.Primary.getNumber()) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(5, readFrom_); - } - if (connectionRetryStrategy_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(6, getConnectionRetryStrategy()); - } - if (authenticationInfo_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(7, getAuthenticationInfo()); - } - if (databaseId_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(8, databaseId_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof connection_request.ConnectionRequestOuterClass.ConnectionRequest)) { - return super.equals(obj); - } - connection_request.ConnectionRequestOuterClass.ConnectionRequest other = (connection_request.ConnectionRequestOuterClass.ConnectionRequest) obj; - - if (!getAddressesList() - .equals(other.getAddressesList())) return false; - if (tlsMode_ != other.tlsMode_) return false; - if (getClusterModeEnabled() - != other.getClusterModeEnabled()) return false; - if (getRequestTimeout() - != other.getRequestTimeout()) return false; - if (readFrom_ != other.readFrom_) return false; - if (hasConnectionRetryStrategy() != other.hasConnectionRetryStrategy()) return false; - if (hasConnectionRetryStrategy()) { - if (!getConnectionRetryStrategy() - .equals(other.getConnectionRetryStrategy())) return false; - } - if (hasAuthenticationInfo() != other.hasAuthenticationInfo()) return false; - if (hasAuthenticationInfo()) { - if (!getAuthenticationInfo() - .equals(other.getAuthenticationInfo())) return false; - } - if (getDatabaseId() - != other.getDatabaseId()) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getAddressesCount() > 0) { - hash = (37 * hash) + ADDRESSES_FIELD_NUMBER; - hash = (53 * hash) + getAddressesList().hashCode(); - } - hash = (37 * hash) + TLS_MODE_FIELD_NUMBER; - hash = (53 * hash) + tlsMode_; - hash = (37 * hash) + CLUSTER_MODE_ENABLED_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( - getClusterModeEnabled()); - hash = (37 * hash) + REQUEST_TIMEOUT_FIELD_NUMBER; - hash = (53 * hash) + getRequestTimeout(); - hash = (37 * hash) + READ_FROM_FIELD_NUMBER; - hash = (53 * hash) + readFrom_; - if (hasConnectionRetryStrategy()) { - hash = (37 * hash) + CONNECTION_RETRY_STRATEGY_FIELD_NUMBER; - hash = (53 * hash) + getConnectionRetryStrategy().hashCode(); - } - if (hasAuthenticationInfo()) { - hash = (37 * hash) + AUTHENTICATION_INFO_FIELD_NUMBER; - hash = (53 * hash) + getAuthenticationInfo().hashCode(); - } - hash = (37 * hash) + DATABASE_ID_FIELD_NUMBER; - hash = (53 * hash) + getDatabaseId(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(connection_request.ConnectionRequestOuterClass.ConnectionRequest prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - *
-     * IMPORTANT - if you add fields here, you probably need to add them also in client/mod.rs:`sanitized_request_string`.
-     * 
- * - * Protobuf type {@code connection_request.ConnectionRequest} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:connection_request.ConnectionRequest) - connection_request.ConnectionRequestOuterClass.ConnectionRequestOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.ConnectionRequest.class, connection_request.ConnectionRequestOuterClass.ConnectionRequest.Builder.class); - } - - // Construct using connection_request.ConnectionRequestOuterClass.ConnectionRequest.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - if (addressesBuilder_ == null) { - addresses_ = java.util.Collections.emptyList(); - } else { - addresses_ = null; - addressesBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - tlsMode_ = 0; - clusterModeEnabled_ = false; - requestTimeout_ = 0; - readFrom_ = 0; - connectionRetryStrategy_ = null; - if (connectionRetryStrategyBuilder_ != null) { - connectionRetryStrategyBuilder_.dispose(); - connectionRetryStrategyBuilder_ = null; - } - authenticationInfo_ = null; - if (authenticationInfoBuilder_ != null) { - authenticationInfoBuilder_.dispose(); - authenticationInfoBuilder_ = null; - } - databaseId_ = 0; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRequest_descriptor; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRequest getDefaultInstanceForType() { - return connection_request.ConnectionRequestOuterClass.ConnectionRequest.getDefaultInstance(); - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRequest build() { - connection_request.ConnectionRequestOuterClass.ConnectionRequest result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRequest buildPartial() { - connection_request.ConnectionRequestOuterClass.ConnectionRequest result = new connection_request.ConnectionRequestOuterClass.ConnectionRequest(this); - buildPartialRepeatedFields(result); - if (bitField0_ != 0) { buildPartial0(result); } - onBuilt(); - return result; - } - - private void buildPartialRepeatedFields(connection_request.ConnectionRequestOuterClass.ConnectionRequest result) { - if (addressesBuilder_ == null) { - if (((bitField0_ & 0x00000001) != 0)) { - addresses_ = java.util.Collections.unmodifiableList(addresses_); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.addresses_ = addresses_; - } else { - result.addresses_ = addressesBuilder_.build(); - } - } - - private void buildPartial0(connection_request.ConnectionRequestOuterClass.ConnectionRequest result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000002) != 0)) { - result.tlsMode_ = tlsMode_; - } - if (((from_bitField0_ & 0x00000004) != 0)) { - result.clusterModeEnabled_ = clusterModeEnabled_; - } - if (((from_bitField0_ & 0x00000008) != 0)) { - result.requestTimeout_ = requestTimeout_; - } - if (((from_bitField0_ & 0x00000010) != 0)) { - result.readFrom_ = readFrom_; - } - if (((from_bitField0_ & 0x00000020) != 0)) { - result.connectionRetryStrategy_ = connectionRetryStrategyBuilder_ == null - ? connectionRetryStrategy_ - : connectionRetryStrategyBuilder_.build(); - } - if (((from_bitField0_ & 0x00000040) != 0)) { - result.authenticationInfo_ = authenticationInfoBuilder_ == null - ? authenticationInfo_ - : authenticationInfoBuilder_.build(); - } - if (((from_bitField0_ & 0x00000080) != 0)) { - result.databaseId_ = databaseId_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof connection_request.ConnectionRequestOuterClass.ConnectionRequest) { - return mergeFrom((connection_request.ConnectionRequestOuterClass.ConnectionRequest)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(connection_request.ConnectionRequestOuterClass.ConnectionRequest other) { - if (other == connection_request.ConnectionRequestOuterClass.ConnectionRequest.getDefaultInstance()) return this; - if (addressesBuilder_ == null) { - if (!other.addresses_.isEmpty()) { - if (addresses_.isEmpty()) { - addresses_ = other.addresses_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensureAddressesIsMutable(); - addresses_.addAll(other.addresses_); - } - onChanged(); - } - } else { - if (!other.addresses_.isEmpty()) { - if (addressesBuilder_.isEmpty()) { - addressesBuilder_.dispose(); - addressesBuilder_ = null; - addresses_ = other.addresses_; - bitField0_ = (bitField0_ & ~0x00000001); - addressesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getAddressesFieldBuilder() : null; - } else { - addressesBuilder_.addAllMessages(other.addresses_); - } - } - } - if (other.tlsMode_ != 0) { - setTlsModeValue(other.getTlsModeValue()); - } - if (other.getClusterModeEnabled() != false) { - setClusterModeEnabled(other.getClusterModeEnabled()); - } - if (other.getRequestTimeout() != 0) { - setRequestTimeout(other.getRequestTimeout()); - } - if (other.readFrom_ != 0) { - setReadFromValue(other.getReadFromValue()); - } - if (other.hasConnectionRetryStrategy()) { - mergeConnectionRetryStrategy(other.getConnectionRetryStrategy()); - } - if (other.hasAuthenticationInfo()) { - mergeAuthenticationInfo(other.getAuthenticationInfo()); - } - if (other.getDatabaseId() != 0) { - setDatabaseId(other.getDatabaseId()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - connection_request.ConnectionRequestOuterClass.NodeAddress m = - input.readMessage( - connection_request.ConnectionRequestOuterClass.NodeAddress.parser(), - extensionRegistry); - if (addressesBuilder_ == null) { - ensureAddressesIsMutable(); - addresses_.add(m); - } else { - addressesBuilder_.addMessage(m); - } - break; - } // case 10 - case 16: { - tlsMode_ = input.readEnum(); - bitField0_ |= 0x00000002; - break; - } // case 16 - case 24: { - clusterModeEnabled_ = input.readBool(); - bitField0_ |= 0x00000004; - break; - } // case 24 - case 32: { - requestTimeout_ = input.readUInt32(); - bitField0_ |= 0x00000008; - break; - } // case 32 - case 40: { - readFrom_ = input.readEnum(); - bitField0_ |= 0x00000010; - break; - } // case 40 - case 50: { - input.readMessage( - getConnectionRetryStrategyFieldBuilder().getBuilder(), - extensionRegistry); - bitField0_ |= 0x00000020; - break; - } // case 50 - case 58: { - input.readMessage( - getAuthenticationInfoFieldBuilder().getBuilder(), - extensionRegistry); - bitField0_ |= 0x00000040; - break; - } // case 58 - case 64: { - databaseId_ = input.readUInt32(); - bitField0_ |= 0x00000080; - break; - } // case 64 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int bitField0_; - - private java.util.List addresses_ = - java.util.Collections.emptyList(); - private void ensureAddressesIsMutable() { - if (!((bitField0_ & 0x00000001) != 0)) { - addresses_ = new java.util.ArrayList(addresses_); - bitField0_ |= 0x00000001; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.NodeAddress, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder, connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder> addressesBuilder_; - - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public java.util.List getAddressesList() { - if (addressesBuilder_ == null) { - return java.util.Collections.unmodifiableList(addresses_); - } else { - return addressesBuilder_.getMessageList(); - } - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public int getAddressesCount() { - if (addressesBuilder_ == null) { - return addresses_.size(); - } else { - return addressesBuilder_.getCount(); - } - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public connection_request.ConnectionRequestOuterClass.NodeAddress getAddresses(int index) { - if (addressesBuilder_ == null) { - return addresses_.get(index); - } else { - return addressesBuilder_.getMessage(index); - } - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public Builder setAddresses( - int index, connection_request.ConnectionRequestOuterClass.NodeAddress value) { - if (addressesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAddressesIsMutable(); - addresses_.set(index, value); - onChanged(); - } else { - addressesBuilder_.setMessage(index, value); - } - return this; - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public Builder setAddresses( - int index, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder builderForValue) { - if (addressesBuilder_ == null) { - ensureAddressesIsMutable(); - addresses_.set(index, builderForValue.build()); - onChanged(); - } else { - addressesBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public Builder addAddresses(connection_request.ConnectionRequestOuterClass.NodeAddress value) { - if (addressesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAddressesIsMutable(); - addresses_.add(value); - onChanged(); - } else { - addressesBuilder_.addMessage(value); - } - return this; - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public Builder addAddresses( - int index, connection_request.ConnectionRequestOuterClass.NodeAddress value) { - if (addressesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAddressesIsMutable(); - addresses_.add(index, value); - onChanged(); - } else { - addressesBuilder_.addMessage(index, value); - } - return this; - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public Builder addAddresses( - connection_request.ConnectionRequestOuterClass.NodeAddress.Builder builderForValue) { - if (addressesBuilder_ == null) { - ensureAddressesIsMutable(); - addresses_.add(builderForValue.build()); - onChanged(); - } else { - addressesBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public Builder addAddresses( - int index, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder builderForValue) { - if (addressesBuilder_ == null) { - ensureAddressesIsMutable(); - addresses_.add(index, builderForValue.build()); - onChanged(); - } else { - addressesBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public Builder addAllAddresses( - java.lang.Iterable values) { - if (addressesBuilder_ == null) { - ensureAddressesIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, addresses_); - onChanged(); - } else { - addressesBuilder_.addAllMessages(values); - } - return this; - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public Builder clearAddresses() { - if (addressesBuilder_ == null) { - addresses_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - } else { - addressesBuilder_.clear(); - } - return this; - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public Builder removeAddresses(int index) { - if (addressesBuilder_ == null) { - ensureAddressesIsMutable(); - addresses_.remove(index); - onChanged(); - } else { - addressesBuilder_.remove(index); - } - return this; - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public connection_request.ConnectionRequestOuterClass.NodeAddress.Builder getAddressesBuilder( - int index) { - return getAddressesFieldBuilder().getBuilder(index); - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder getAddressesOrBuilder( - int index) { - if (addressesBuilder_ == null) { - return addresses_.get(index); } else { - return addressesBuilder_.getMessageOrBuilder(index); - } - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public java.util.List - getAddressesOrBuilderList() { - if (addressesBuilder_ != null) { - return addressesBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(addresses_); - } - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public connection_request.ConnectionRequestOuterClass.NodeAddress.Builder addAddressesBuilder() { - return getAddressesFieldBuilder().addBuilder( - connection_request.ConnectionRequestOuterClass.NodeAddress.getDefaultInstance()); - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public connection_request.ConnectionRequestOuterClass.NodeAddress.Builder addAddressesBuilder( - int index) { - return getAddressesFieldBuilder().addBuilder( - index, connection_request.ConnectionRequestOuterClass.NodeAddress.getDefaultInstance()); - } - /** - * repeated .connection_request.NodeAddress addresses = 1; - */ - public java.util.List - getAddressesBuilderList() { - return getAddressesFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.NodeAddress, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder, connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder> - getAddressesFieldBuilder() { - if (addressesBuilder_ == null) { - addressesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.NodeAddress, connection_request.ConnectionRequestOuterClass.NodeAddress.Builder, connection_request.ConnectionRequestOuterClass.NodeAddressOrBuilder>( - addresses_, - ((bitField0_ & 0x00000001) != 0), - getParentForChildren(), - isClean()); - addresses_ = null; - } - return addressesBuilder_; - } - - private int tlsMode_ = 0; - /** - * .connection_request.TlsMode tls_mode = 2; - * @return The enum numeric value on the wire for tlsMode. - */ - @java.lang.Override public int getTlsModeValue() { - return tlsMode_; - } - /** - * .connection_request.TlsMode tls_mode = 2; - * @param value The enum numeric value on the wire for tlsMode to set. - * @return This builder for chaining. - */ - public Builder setTlsModeValue(int value) { - tlsMode_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - /** - * .connection_request.TlsMode tls_mode = 2; - * @return The tlsMode. - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.TlsMode getTlsMode() { - connection_request.ConnectionRequestOuterClass.TlsMode result = connection_request.ConnectionRequestOuterClass.TlsMode.forNumber(tlsMode_); - return result == null ? connection_request.ConnectionRequestOuterClass.TlsMode.UNRECOGNIZED : result; - } - /** - * .connection_request.TlsMode tls_mode = 2; - * @param value The tlsMode to set. - * @return This builder for chaining. - */ - public Builder setTlsMode(connection_request.ConnectionRequestOuterClass.TlsMode value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - tlsMode_ = value.getNumber(); - onChanged(); - return this; - } - /** - * .connection_request.TlsMode tls_mode = 2; - * @return This builder for chaining. - */ - public Builder clearTlsMode() { - bitField0_ = (bitField0_ & ~0x00000002); - tlsMode_ = 0; - onChanged(); - return this; - } - - private boolean clusterModeEnabled_ ; - /** - * bool cluster_mode_enabled = 3; - * @return The clusterModeEnabled. - */ - @java.lang.Override - public boolean getClusterModeEnabled() { - return clusterModeEnabled_; - } - /** - * bool cluster_mode_enabled = 3; - * @param value The clusterModeEnabled to set. - * @return This builder for chaining. - */ - public Builder setClusterModeEnabled(boolean value) { - - clusterModeEnabled_ = value; - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - /** - * bool cluster_mode_enabled = 3; - * @return This builder for chaining. - */ - public Builder clearClusterModeEnabled() { - bitField0_ = (bitField0_ & ~0x00000004); - clusterModeEnabled_ = false; - onChanged(); - return this; - } - - private int requestTimeout_ ; - /** - * uint32 request_timeout = 4; - * @return The requestTimeout. - */ - @java.lang.Override - public int getRequestTimeout() { - return requestTimeout_; - } - /** - * uint32 request_timeout = 4; - * @param value The requestTimeout to set. - * @return This builder for chaining. - */ - public Builder setRequestTimeout(int value) { - - requestTimeout_ = value; - bitField0_ |= 0x00000008; - onChanged(); - return this; - } - /** - * uint32 request_timeout = 4; - * @return This builder for chaining. - */ - public Builder clearRequestTimeout() { - bitField0_ = (bitField0_ & ~0x00000008); - requestTimeout_ = 0; - onChanged(); - return this; - } - - private int readFrom_ = 0; - /** - * .connection_request.ReadFrom read_from = 5; - * @return The enum numeric value on the wire for readFrom. - */ - @java.lang.Override public int getReadFromValue() { - return readFrom_; - } - /** - * .connection_request.ReadFrom read_from = 5; - * @param value The enum numeric value on the wire for readFrom to set. - * @return This builder for chaining. - */ - public Builder setReadFromValue(int value) { - readFrom_ = value; - bitField0_ |= 0x00000010; - onChanged(); - return this; - } - /** - * .connection_request.ReadFrom read_from = 5; - * @return The readFrom. - */ - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ReadFrom getReadFrom() { - connection_request.ConnectionRequestOuterClass.ReadFrom result = connection_request.ConnectionRequestOuterClass.ReadFrom.forNumber(readFrom_); - return result == null ? connection_request.ConnectionRequestOuterClass.ReadFrom.UNRECOGNIZED : result; - } - /** - * .connection_request.ReadFrom read_from = 5; - * @param value The readFrom to set. - * @return This builder for chaining. - */ - public Builder setReadFrom(connection_request.ConnectionRequestOuterClass.ReadFrom value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000010; - readFrom_ = value.getNumber(); - onChanged(); - return this; - } - /** - * .connection_request.ReadFrom read_from = 5; - * @return This builder for chaining. - */ - public Builder clearReadFrom() { - bitField0_ = (bitField0_ & ~0x00000010); - readFrom_ = 0; - onChanged(); - return this; - } - - private connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy connectionRetryStrategy_; - private com.google.protobuf.SingleFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder> connectionRetryStrategyBuilder_; - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - * @return Whether the connectionRetryStrategy field is set. - */ - public boolean hasConnectionRetryStrategy() { - return ((bitField0_ & 0x00000020) != 0); - } - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - * @return The connectionRetryStrategy. - */ - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy getConnectionRetryStrategy() { - if (connectionRetryStrategyBuilder_ == null) { - return connectionRetryStrategy_ == null ? connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance() : connectionRetryStrategy_; - } else { - return connectionRetryStrategyBuilder_.getMessage(); - } - } - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - */ - public Builder setConnectionRetryStrategy(connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy value) { - if (connectionRetryStrategyBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - connectionRetryStrategy_ = value; - } else { - connectionRetryStrategyBuilder_.setMessage(value); - } - bitField0_ |= 0x00000020; - onChanged(); - return this; - } - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - */ - public Builder setConnectionRetryStrategy( - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder builderForValue) { - if (connectionRetryStrategyBuilder_ == null) { - connectionRetryStrategy_ = builderForValue.build(); - } else { - connectionRetryStrategyBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000020; - onChanged(); - return this; - } - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - */ - public Builder mergeConnectionRetryStrategy(connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy value) { - if (connectionRetryStrategyBuilder_ == null) { - if (((bitField0_ & 0x00000020) != 0) && - connectionRetryStrategy_ != null && - connectionRetryStrategy_ != connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance()) { - getConnectionRetryStrategyBuilder().mergeFrom(value); - } else { - connectionRetryStrategy_ = value; - } - } else { - connectionRetryStrategyBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000020; - onChanged(); - return this; - } - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - */ - public Builder clearConnectionRetryStrategy() { - bitField0_ = (bitField0_ & ~0x00000020); - connectionRetryStrategy_ = null; - if (connectionRetryStrategyBuilder_ != null) { - connectionRetryStrategyBuilder_.dispose(); - connectionRetryStrategyBuilder_ = null; - } - onChanged(); - return this; - } - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - */ - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder getConnectionRetryStrategyBuilder() { - bitField0_ |= 0x00000020; - onChanged(); - return getConnectionRetryStrategyFieldBuilder().getBuilder(); - } - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - */ - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder getConnectionRetryStrategyOrBuilder() { - if (connectionRetryStrategyBuilder_ != null) { - return connectionRetryStrategyBuilder_.getMessageOrBuilder(); - } else { - return connectionRetryStrategy_ == null ? - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance() : connectionRetryStrategy_; - } - } - /** - * .connection_request.ConnectionRetryStrategy connection_retry_strategy = 6; - */ - private com.google.protobuf.SingleFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder> - getConnectionRetryStrategyFieldBuilder() { - if (connectionRetryStrategyBuilder_ == null) { - connectionRetryStrategyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder>( - getConnectionRetryStrategy(), - getParentForChildren(), - isClean()); - connectionRetryStrategy_ = null; - } - return connectionRetryStrategyBuilder_; - } - - private connection_request.ConnectionRequestOuterClass.AuthenticationInfo authenticationInfo_; - private com.google.protobuf.SingleFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.AuthenticationInfo, connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder, connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder> authenticationInfoBuilder_; - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - * @return Whether the authenticationInfo field is set. - */ - public boolean hasAuthenticationInfo() { - return ((bitField0_ & 0x00000040) != 0); - } - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - * @return The authenticationInfo. - */ - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo getAuthenticationInfo() { - if (authenticationInfoBuilder_ == null) { - return authenticationInfo_ == null ? connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance() : authenticationInfo_; - } else { - return authenticationInfoBuilder_.getMessage(); - } - } - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - */ - public Builder setAuthenticationInfo(connection_request.ConnectionRequestOuterClass.AuthenticationInfo value) { - if (authenticationInfoBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - authenticationInfo_ = value; - } else { - authenticationInfoBuilder_.setMessage(value); - } - bitField0_ |= 0x00000040; - onChanged(); - return this; - } - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - */ - public Builder setAuthenticationInfo( - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder builderForValue) { - if (authenticationInfoBuilder_ == null) { - authenticationInfo_ = builderForValue.build(); - } else { - authenticationInfoBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000040; - onChanged(); - return this; - } - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - */ - public Builder mergeAuthenticationInfo(connection_request.ConnectionRequestOuterClass.AuthenticationInfo value) { - if (authenticationInfoBuilder_ == null) { - if (((bitField0_ & 0x00000040) != 0) && - authenticationInfo_ != null && - authenticationInfo_ != connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance()) { - getAuthenticationInfoBuilder().mergeFrom(value); - } else { - authenticationInfo_ = value; - } - } else { - authenticationInfoBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000040; - onChanged(); - return this; - } - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - */ - public Builder clearAuthenticationInfo() { - bitField0_ = (bitField0_ & ~0x00000040); - authenticationInfo_ = null; - if (authenticationInfoBuilder_ != null) { - authenticationInfoBuilder_.dispose(); - authenticationInfoBuilder_ = null; - } - onChanged(); - return this; - } - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - */ - public connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder getAuthenticationInfoBuilder() { - bitField0_ |= 0x00000040; - onChanged(); - return getAuthenticationInfoFieldBuilder().getBuilder(); - } - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - */ - public connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder getAuthenticationInfoOrBuilder() { - if (authenticationInfoBuilder_ != null) { - return authenticationInfoBuilder_.getMessageOrBuilder(); - } else { - return authenticationInfo_ == null ? - connection_request.ConnectionRequestOuterClass.AuthenticationInfo.getDefaultInstance() : authenticationInfo_; - } - } - /** - * .connection_request.AuthenticationInfo authentication_info = 7; - */ - private com.google.protobuf.SingleFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.AuthenticationInfo, connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder, connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder> - getAuthenticationInfoFieldBuilder() { - if (authenticationInfoBuilder_ == null) { - authenticationInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - connection_request.ConnectionRequestOuterClass.AuthenticationInfo, connection_request.ConnectionRequestOuterClass.AuthenticationInfo.Builder, connection_request.ConnectionRequestOuterClass.AuthenticationInfoOrBuilder>( - getAuthenticationInfo(), - getParentForChildren(), - isClean()); - authenticationInfo_ = null; - } - return authenticationInfoBuilder_; - } - - private int databaseId_ ; - /** - * uint32 database_id = 8; - * @return The databaseId. - */ - @java.lang.Override - public int getDatabaseId() { - return databaseId_; - } - /** - * uint32 database_id = 8; - * @param value The databaseId to set. - * @return This builder for chaining. - */ - public Builder setDatabaseId(int value) { - - databaseId_ = value; - bitField0_ |= 0x00000080; - onChanged(); - return this; - } - /** - * uint32 database_id = 8; - * @return This builder for chaining. - */ - public Builder clearDatabaseId() { - bitField0_ = (bitField0_ & ~0x00000080); - databaseId_ = 0; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:connection_request.ConnectionRequest) - } - - // @@protoc_insertion_point(class_scope:connection_request.ConnectionRequest) - private static final connection_request.ConnectionRequestOuterClass.ConnectionRequest DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.ConnectionRequest(); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRequest getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public ConnectionRequest parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRequest getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface ConnectionRetryStrategyOrBuilder extends - // @@protoc_insertion_point(interface_extends:connection_request.ConnectionRetryStrategy) - com.google.protobuf.MessageOrBuilder { - - /** - * uint32 number_of_retries = 1; - * @return The numberOfRetries. - */ - int getNumberOfRetries(); - - /** - * uint32 factor = 2; - * @return The factor. - */ - int getFactor(); - - /** - * uint32 exponent_base = 3; - * @return The exponentBase. - */ - int getExponentBase(); - } - /** - * Protobuf type {@code connection_request.ConnectionRetryStrategy} - */ - public static final class ConnectionRetryStrategy extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:connection_request.ConnectionRetryStrategy) - ConnectionRetryStrategyOrBuilder { - private static final long serialVersionUID = 0L; - // Use ConnectionRetryStrategy.newBuilder() to construct. - private ConnectionRetryStrategy(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private ConnectionRetryStrategy() { - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new ConnectionRetryStrategy(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRetryStrategy_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.class, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder.class); - } - - public static final int NUMBER_OF_RETRIES_FIELD_NUMBER = 1; - private int numberOfRetries_ = 0; - /** - * uint32 number_of_retries = 1; - * @return The numberOfRetries. - */ - @java.lang.Override - public int getNumberOfRetries() { - return numberOfRetries_; - } - - public static final int FACTOR_FIELD_NUMBER = 2; - private int factor_ = 0; - /** - * uint32 factor = 2; - * @return The factor. - */ - @java.lang.Override - public int getFactor() { - return factor_; - } - - public static final int EXPONENT_BASE_FIELD_NUMBER = 3; - private int exponentBase_ = 0; - /** - * uint32 exponent_base = 3; - * @return The exponentBase. - */ - @java.lang.Override - public int getExponentBase() { - return exponentBase_; - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (numberOfRetries_ != 0) { - output.writeUInt32(1, numberOfRetries_); - } - if (factor_ != 0) { - output.writeUInt32(2, factor_); - } - if (exponentBase_ != 0) { - output.writeUInt32(3, exponentBase_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (numberOfRetries_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(1, numberOfRetries_); - } - if (factor_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(2, factor_); - } - if (exponentBase_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(3, exponentBase_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy)) { - return super.equals(obj); - } - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy other = (connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy) obj; - - if (getNumberOfRetries() - != other.getNumberOfRetries()) return false; - if (getFactor() - != other.getFactor()) return false; - if (getExponentBase() - != other.getExponentBase()) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + NUMBER_OF_RETRIES_FIELD_NUMBER; - hash = (53 * hash) + getNumberOfRetries(); - hash = (37 * hash) + FACTOR_FIELD_NUMBER; - hash = (53 * hash) + getFactor(); - hash = (37 * hash) + EXPONENT_BASE_FIELD_NUMBER; - hash = (53 * hash) + getExponentBase(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code connection_request.ConnectionRetryStrategy} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:connection_request.ConnectionRetryStrategy) - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategyOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRetryStrategy_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable - .ensureFieldAccessorsInitialized( - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.class, connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.Builder.class); - } - - // Construct using connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - numberOfRetries_ = 0; - factor_ = 0; - exponentBase_ = 0; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return connection_request.ConnectionRequestOuterClass.internal_static_connection_request_ConnectionRetryStrategy_descriptor; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy getDefaultInstanceForType() { - return connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance(); - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy build() { - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy buildPartial() { - connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy result = new connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy(this); - if (bitField0_ != 0) { buildPartial0(result); } - onBuilt(); - return result; - } - - private void buildPartial0(connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.numberOfRetries_ = numberOfRetries_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.factor_ = factor_; - } - if (((from_bitField0_ & 0x00000004) != 0)) { - result.exponentBase_ = exponentBase_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy) { - return mergeFrom((connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy other) { - if (other == connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy.getDefaultInstance()) return this; - if (other.getNumberOfRetries() != 0) { - setNumberOfRetries(other.getNumberOfRetries()); - } - if (other.getFactor() != 0) { - setFactor(other.getFactor()); - } - if (other.getExponentBase() != 0) { - setExponentBase(other.getExponentBase()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - numberOfRetries_ = input.readUInt32(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 16: { - factor_ = input.readUInt32(); - bitField0_ |= 0x00000002; - break; - } // case 16 - case 24: { - exponentBase_ = input.readUInt32(); - bitField0_ |= 0x00000004; - break; - } // case 24 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int bitField0_; - - private int numberOfRetries_ ; - /** - * uint32 number_of_retries = 1; - * @return The numberOfRetries. - */ - @java.lang.Override - public int getNumberOfRetries() { - return numberOfRetries_; - } - /** - * uint32 number_of_retries = 1; - * @param value The numberOfRetries to set. - * @return This builder for chaining. - */ - public Builder setNumberOfRetries(int value) { - - numberOfRetries_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * uint32 number_of_retries = 1; - * @return This builder for chaining. - */ - public Builder clearNumberOfRetries() { - bitField0_ = (bitField0_ & ~0x00000001); - numberOfRetries_ = 0; - onChanged(); - return this; - } - - private int factor_ ; - /** - * uint32 factor = 2; - * @return The factor. - */ - @java.lang.Override - public int getFactor() { - return factor_; - } - /** - * uint32 factor = 2; - * @param value The factor to set. - * @return This builder for chaining. - */ - public Builder setFactor(int value) { - - factor_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - /** - * uint32 factor = 2; - * @return This builder for chaining. - */ - public Builder clearFactor() { - bitField0_ = (bitField0_ & ~0x00000002); - factor_ = 0; - onChanged(); - return this; - } - - private int exponentBase_ ; - /** - * uint32 exponent_base = 3; - * @return The exponentBase. - */ - @java.lang.Override - public int getExponentBase() { - return exponentBase_; - } - /** - * uint32 exponent_base = 3; - * @param value The exponentBase to set. - * @return This builder for chaining. - */ - public Builder setExponentBase(int value) { - - exponentBase_ = value; - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - /** - * uint32 exponent_base = 3; - * @return This builder for chaining. - */ - public Builder clearExponentBase() { - bitField0_ = (bitField0_ & ~0x00000004); - exponentBase_ = 0; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:connection_request.ConnectionRetryStrategy) - } - - // @@protoc_insertion_point(class_scope:connection_request.ConnectionRetryStrategy) - private static final connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy(); - } - - public static connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public ConnectionRetryStrategy parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public connection_request.ConnectionRequestOuterClass.ConnectionRetryStrategy getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_connection_request_NodeAddress_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_connection_request_NodeAddress_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_connection_request_AuthenticationInfo_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_connection_request_AuthenticationInfo_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_connection_request_ConnectionRequest_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_connection_request_ConnectionRequest_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_connection_request_ConnectionRetryStrategy_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n!protobuf/connection_request.proto\022\022con" + - "nection_request\")\n\013NodeAddress\022\014\n\004host\030\001" + - " \001(\t\022\014\n\004port\030\002 \001(\r\"8\n\022AuthenticationInfo" + - "\022\020\n\010password\030\001 \001(\t\022\020\n\010username\030\002 \001(\t\"\210\003\n" + - "\021ConnectionRequest\0222\n\taddresses\030\001 \003(\0132\037." + - "connection_request.NodeAddress\022-\n\010tls_mo" + - "de\030\002 \001(\0162\033.connection_request.TlsMode\022\034\n" + - "\024cluster_mode_enabled\030\003 \001(\010\022\027\n\017request_t" + - "imeout\030\004 \001(\r\022/\n\tread_from\030\005 \001(\0162\034.connec" + - "tion_request.ReadFrom\022N\n\031connection_retr" + - "y_strategy\030\006 \001(\0132+.connection_request.Co" + - "nnectionRetryStrategy\022C\n\023authentication_" + - "info\030\007 \001(\0132&.connection_request.Authenti" + - "cationInfo\022\023\n\013database_id\030\010 \001(\r\"[\n\027Conne" + - "ctionRetryStrategy\022\031\n\021number_of_retries\030" + - "\001 \001(\r\022\016\n\006factor\030\002 \001(\r\022\025\n\rexponent_base\030\003" + - " \001(\r*M\n\010ReadFrom\022\013\n\007Primary\020\000\022\021\n\rPreferR" + - "eplica\020\001\022\021\n\rLowestLatency\020\002\022\016\n\nAZAffinit" + - "y\020\003*4\n\007TlsMode\022\t\n\005NoTls\020\000\022\r\n\tSecureTls\020\001" + - "\022\017\n\013InsecureTls\020\002b\006proto3" - }; - descriptor = com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }); - internal_static_connection_request_NodeAddress_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_connection_request_NodeAddress_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_connection_request_NodeAddress_descriptor, - new java.lang.String[] { "Host", "Port", }); - internal_static_connection_request_AuthenticationInfo_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_connection_request_AuthenticationInfo_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_connection_request_AuthenticationInfo_descriptor, - new java.lang.String[] { "Password", "Username", }); - internal_static_connection_request_ConnectionRequest_descriptor = - getDescriptor().getMessageTypes().get(2); - internal_static_connection_request_ConnectionRequest_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_connection_request_ConnectionRequest_descriptor, - new java.lang.String[] { "Addresses", "TlsMode", "ClusterModeEnabled", "RequestTimeout", "ReadFrom", "ConnectionRetryStrategy", "AuthenticationInfo", "DatabaseId", }); - internal_static_connection_request_ConnectionRetryStrategy_descriptor = - getDescriptor().getMessageTypes().get(3); - internal_static_connection_request_ConnectionRetryStrategy_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_connection_request_ConnectionRetryStrategy_descriptor, - new java.lang.String[] { "NumberOfRetries", "Factor", "ExponentBase", }); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/java/client/src/main/java/babushka/models/protobuf/redis_request/RedisRequestOuterClass.java b/java/client/src/main/java/babushka/models/protobuf/redis_request/RedisRequestOuterClass.java deleted file mode 100644 index 5f8d5e9286..0000000000 --- a/java/client/src/main/java/babushka/models/protobuf/redis_request/RedisRequestOuterClass.java +++ /dev/null @@ -1,6868 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: protobuf/redis_request.proto - -package redis_request; - -public final class RedisRequestOuterClass { - private RedisRequestOuterClass() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistryLite registry) { - } - - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions( - (com.google.protobuf.ExtensionRegistryLite) registry); - } - /** - * Protobuf enum {@code redis_request.SimpleRoutes} - */ - public enum SimpleRoutes - implements com.google.protobuf.ProtocolMessageEnum { - /** - * AllNodes = 0; - */ - AllNodes(0), - /** - * AllPrimaries = 1; - */ - AllPrimaries(1), - /** - * Random = 2; - */ - Random(2), - UNRECOGNIZED(-1), - ; - - /** - * AllNodes = 0; - */ - public static final int AllNodes_VALUE = 0; - /** - * AllPrimaries = 1; - */ - public static final int AllPrimaries_VALUE = 1; - /** - * Random = 2; - */ - public static final int Random_VALUE = 2; - - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static SimpleRoutes valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static SimpleRoutes forNumber(int value) { - switch (value) { - case 0: return AllNodes; - case 1: return AllPrimaries; - case 2: return Random; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - SimpleRoutes> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public SimpleRoutes findValueByNumber(int number) { - return SimpleRoutes.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.getDescriptor().getEnumTypes().get(0); - } - - private static final SimpleRoutes[] VALUES = values(); - - public static SimpleRoutes valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private SimpleRoutes(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:redis_request.SimpleRoutes) - } - - /** - * Protobuf enum {@code redis_request.SlotTypes} - */ - public enum SlotTypes - implements com.google.protobuf.ProtocolMessageEnum { - /** - * Primary = 0; - */ - Primary(0), - /** - * Replica = 1; - */ - Replica(1), - UNRECOGNIZED(-1), - ; - - /** - * Primary = 0; - */ - public static final int Primary_VALUE = 0; - /** - * Replica = 1; - */ - public static final int Replica_VALUE = 1; - - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static SlotTypes valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static SlotTypes forNumber(int value) { - switch (value) { - case 0: return Primary; - case 1: return Replica; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - SlotTypes> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public SlotTypes findValueByNumber(int number) { - return SlotTypes.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.getDescriptor().getEnumTypes().get(1); - } - - private static final SlotTypes[] VALUES = values(); - - public static SlotTypes valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private SlotTypes(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:redis_request.SlotTypes) - } - - /** - * Protobuf enum {@code redis_request.RequestType} - */ - public enum RequestType - implements com.google.protobuf.ProtocolMessageEnum { - /** - *
-     */ Invalid request type
-     * 
- * - * InvalidRequest = 0; - */ - InvalidRequest(0), - /** - *
-     */ An unknown command, where all arguments are defined by the user.
-     * 
- * - * CustomCommand = 1; - */ - CustomCommand(1), - /** - *
-     */ Type of a get string request.
-     * 
- * - * GetString = 2; - */ - GetString(2), - /** - *
-     */ Type of a set string request.
-     * 
- * - * SetString = 3; - */ - SetString(3), - /** - * Ping = 4; - */ - Ping(4), - /** - * Info = 5; - */ - Info(5), - /** - * Del = 6; - */ - Del(6), - /** - * Select = 7; - */ - Select(7), - /** - * ConfigGet = 8; - */ - ConfigGet(8), - /** - * ConfigSet = 9; - */ - ConfigSet(9), - /** - * ConfigResetStat = 10; - */ - ConfigResetStat(10), - /** - * ConfigRewrite = 11; - */ - ConfigRewrite(11), - /** - * ClientGetName = 12; - */ - ClientGetName(12), - /** - * ClientGetRedir = 13; - */ - ClientGetRedir(13), - /** - * ClientId = 14; - */ - ClientId(14), - /** - * ClientInfo = 15; - */ - ClientInfo(15), - /** - * ClientKill = 16; - */ - ClientKill(16), - /** - * ClientList = 17; - */ - ClientList(17), - /** - * ClientNoEvict = 18; - */ - ClientNoEvict(18), - /** - * ClientNoTouch = 19; - */ - ClientNoTouch(19), - /** - * ClientPause = 20; - */ - ClientPause(20), - /** - * ClientReply = 21; - */ - ClientReply(21), - /** - * ClientSetInfo = 22; - */ - ClientSetInfo(22), - /** - * ClientSetName = 23; - */ - ClientSetName(23), - /** - * ClientUnblock = 24; - */ - ClientUnblock(24), - /** - * ClientUnpause = 25; - */ - ClientUnpause(25), - /** - * Expire = 26; - */ - Expire(26), - /** - * HashSet = 27; - */ - HashSet(27), - /** - * HashGet = 28; - */ - HashGet(28), - /** - * HashDel = 29; - */ - HashDel(29), - /** - * HashExists = 30; - */ - HashExists(30), - /** - * MGet = 31; - */ - MGet(31), - /** - * MSet = 32; - */ - MSet(32), - /** - * Incr = 33; - */ - Incr(33), - /** - * IncrBy = 34; - */ - IncrBy(34), - /** - * Decr = 35; - */ - Decr(35), - /** - * IncrByFloat = 36; - */ - IncrByFloat(36), - /** - * DecrBy = 37; - */ - DecrBy(37), - /** - * HashGetAll = 38; - */ - HashGetAll(38), - /** - * HashMSet = 39; - */ - HashMSet(39), - /** - * HashMGet = 40; - */ - HashMGet(40), - /** - * HashIncrBy = 41; - */ - HashIncrBy(41), - /** - * HashIncrByFloat = 42; - */ - HashIncrByFloat(42), - /** - * LPush = 43; - */ - LPush(43), - /** - * LPop = 44; - */ - LPop(44), - /** - * RPush = 45; - */ - RPush(45), - /** - * RPop = 46; - */ - RPop(46), - /** - * LLen = 47; - */ - LLen(47), - /** - * LRem = 48; - */ - LRem(48), - /** - * LRange = 49; - */ - LRange(49), - /** - * LTrim = 50; - */ - LTrim(50), - /** - * SAdd = 51; - */ - SAdd(51), - /** - * SRem = 52; - */ - SRem(52), - /** - * SMembers = 53; - */ - SMembers(53), - /** - * SCard = 54; - */ - SCard(54), - /** - * PExpireAt = 55; - */ - PExpireAt(55), - /** - * PExpire = 56; - */ - PExpire(56), - /** - * ExpireAt = 57; - */ - ExpireAt(57), - /** - * Exists = 58; - */ - Exists(58), - /** - * Unlink = 59; - */ - Unlink(59), - /** - * TTL = 60; - */ - TTL(60), - UNRECOGNIZED(-1), - ; - - /** - *
-     */ Invalid request type
-     * 
- * - * InvalidRequest = 0; - */ - public static final int InvalidRequest_VALUE = 0; - /** - *
-     */ An unknown command, where all arguments are defined by the user.
-     * 
- * - * CustomCommand = 1; - */ - public static final int CustomCommand_VALUE = 1; - /** - *
-     */ Type of a get string request.
-     * 
- * - * GetString = 2; - */ - public static final int GetString_VALUE = 2; - /** - *
-     */ Type of a set string request.
-     * 
- * - * SetString = 3; - */ - public static final int SetString_VALUE = 3; - /** - * Ping = 4; - */ - public static final int Ping_VALUE = 4; - /** - * Info = 5; - */ - public static final int Info_VALUE = 5; - /** - * Del = 6; - */ - public static final int Del_VALUE = 6; - /** - * Select = 7; - */ - public static final int Select_VALUE = 7; - /** - * ConfigGet = 8; - */ - public static final int ConfigGet_VALUE = 8; - /** - * ConfigSet = 9; - */ - public static final int ConfigSet_VALUE = 9; - /** - * ConfigResetStat = 10; - */ - public static final int ConfigResetStat_VALUE = 10; - /** - * ConfigRewrite = 11; - */ - public static final int ConfigRewrite_VALUE = 11; - /** - * ClientGetName = 12; - */ - public static final int ClientGetName_VALUE = 12; - /** - * ClientGetRedir = 13; - */ - public static final int ClientGetRedir_VALUE = 13; - /** - * ClientId = 14; - */ - public static final int ClientId_VALUE = 14; - /** - * ClientInfo = 15; - */ - public static final int ClientInfo_VALUE = 15; - /** - * ClientKill = 16; - */ - public static final int ClientKill_VALUE = 16; - /** - * ClientList = 17; - */ - public static final int ClientList_VALUE = 17; - /** - * ClientNoEvict = 18; - */ - public static final int ClientNoEvict_VALUE = 18; - /** - * ClientNoTouch = 19; - */ - public static final int ClientNoTouch_VALUE = 19; - /** - * ClientPause = 20; - */ - public static final int ClientPause_VALUE = 20; - /** - * ClientReply = 21; - */ - public static final int ClientReply_VALUE = 21; - /** - * ClientSetInfo = 22; - */ - public static final int ClientSetInfo_VALUE = 22; - /** - * ClientSetName = 23; - */ - public static final int ClientSetName_VALUE = 23; - /** - * ClientUnblock = 24; - */ - public static final int ClientUnblock_VALUE = 24; - /** - * ClientUnpause = 25; - */ - public static final int ClientUnpause_VALUE = 25; - /** - * Expire = 26; - */ - public static final int Expire_VALUE = 26; - /** - * HashSet = 27; - */ - public static final int HashSet_VALUE = 27; - /** - * HashGet = 28; - */ - public static final int HashGet_VALUE = 28; - /** - * HashDel = 29; - */ - public static final int HashDel_VALUE = 29; - /** - * HashExists = 30; - */ - public static final int HashExists_VALUE = 30; - /** - * MGet = 31; - */ - public static final int MGet_VALUE = 31; - /** - * MSet = 32; - */ - public static final int MSet_VALUE = 32; - /** - * Incr = 33; - */ - public static final int Incr_VALUE = 33; - /** - * IncrBy = 34; - */ - public static final int IncrBy_VALUE = 34; - /** - * Decr = 35; - */ - public static final int Decr_VALUE = 35; - /** - * IncrByFloat = 36; - */ - public static final int IncrByFloat_VALUE = 36; - /** - * DecrBy = 37; - */ - public static final int DecrBy_VALUE = 37; - /** - * HashGetAll = 38; - */ - public static final int HashGetAll_VALUE = 38; - /** - * HashMSet = 39; - */ - public static final int HashMSet_VALUE = 39; - /** - * HashMGet = 40; - */ - public static final int HashMGet_VALUE = 40; - /** - * HashIncrBy = 41; - */ - public static final int HashIncrBy_VALUE = 41; - /** - * HashIncrByFloat = 42; - */ - public static final int HashIncrByFloat_VALUE = 42; - /** - * LPush = 43; - */ - public static final int LPush_VALUE = 43; - /** - * LPop = 44; - */ - public static final int LPop_VALUE = 44; - /** - * RPush = 45; - */ - public static final int RPush_VALUE = 45; - /** - * RPop = 46; - */ - public static final int RPop_VALUE = 46; - /** - * LLen = 47; - */ - public static final int LLen_VALUE = 47; - /** - * LRem = 48; - */ - public static final int LRem_VALUE = 48; - /** - * LRange = 49; - */ - public static final int LRange_VALUE = 49; - /** - * LTrim = 50; - */ - public static final int LTrim_VALUE = 50; - /** - * SAdd = 51; - */ - public static final int SAdd_VALUE = 51; - /** - * SRem = 52; - */ - public static final int SRem_VALUE = 52; - /** - * SMembers = 53; - */ - public static final int SMembers_VALUE = 53; - /** - * SCard = 54; - */ - public static final int SCard_VALUE = 54; - /** - * PExpireAt = 55; - */ - public static final int PExpireAt_VALUE = 55; - /** - * PExpire = 56; - */ - public static final int PExpire_VALUE = 56; - /** - * ExpireAt = 57; - */ - public static final int ExpireAt_VALUE = 57; - /** - * Exists = 58; - */ - public static final int Exists_VALUE = 58; - /** - * Unlink = 59; - */ - public static final int Unlink_VALUE = 59; - /** - * TTL = 60; - */ - public static final int TTL_VALUE = 60; - - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static RequestType valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static RequestType forNumber(int value) { - switch (value) { - case 0: return InvalidRequest; - case 1: return CustomCommand; - case 2: return GetString; - case 3: return SetString; - case 4: return Ping; - case 5: return Info; - case 6: return Del; - case 7: return Select; - case 8: return ConfigGet; - case 9: return ConfigSet; - case 10: return ConfigResetStat; - case 11: return ConfigRewrite; - case 12: return ClientGetName; - case 13: return ClientGetRedir; - case 14: return ClientId; - case 15: return ClientInfo; - case 16: return ClientKill; - case 17: return ClientList; - case 18: return ClientNoEvict; - case 19: return ClientNoTouch; - case 20: return ClientPause; - case 21: return ClientReply; - case 22: return ClientSetInfo; - case 23: return ClientSetName; - case 24: return ClientUnblock; - case 25: return ClientUnpause; - case 26: return Expire; - case 27: return HashSet; - case 28: return HashGet; - case 29: return HashDel; - case 30: return HashExists; - case 31: return MGet; - case 32: return MSet; - case 33: return Incr; - case 34: return IncrBy; - case 35: return Decr; - case 36: return IncrByFloat; - case 37: return DecrBy; - case 38: return HashGetAll; - case 39: return HashMSet; - case 40: return HashMGet; - case 41: return HashIncrBy; - case 42: return HashIncrByFloat; - case 43: return LPush; - case 44: return LPop; - case 45: return RPush; - case 46: return RPop; - case 47: return LLen; - case 48: return LRem; - case 49: return LRange; - case 50: return LTrim; - case 51: return SAdd; - case 52: return SRem; - case 53: return SMembers; - case 54: return SCard; - case 55: return PExpireAt; - case 56: return PExpire; - case 57: return ExpireAt; - case 58: return Exists; - case 59: return Unlink; - case 60: return TTL; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - RequestType> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RequestType findValueByNumber(int number) { - return RequestType.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.getDescriptor().getEnumTypes().get(2); - } - - private static final RequestType[] VALUES = values(); - - public static RequestType valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private RequestType(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:redis_request.RequestType) - } - - public interface SlotIdRouteOrBuilder extends - // @@protoc_insertion_point(interface_extends:redis_request.SlotIdRoute) - com.google.protobuf.MessageOrBuilder { - - /** - * .redis_request.SlotTypes slot_type = 1; - * @return The enum numeric value on the wire for slotType. - */ - int getSlotTypeValue(); - /** - * .redis_request.SlotTypes slot_type = 1; - * @return The slotType. - */ - redis_request.RedisRequestOuterClass.SlotTypes getSlotType(); - - /** - * int32 slot_id = 2; - * @return The slotId. - */ - int getSlotId(); - } - /** - * Protobuf type {@code redis_request.SlotIdRoute} - */ - public static final class SlotIdRoute extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:redis_request.SlotIdRoute) - SlotIdRouteOrBuilder { - private static final long serialVersionUID = 0L; - // Use SlotIdRoute.newBuilder() to construct. - private SlotIdRoute(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private SlotIdRoute() { - slotType_ = 0; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new SlotIdRoute(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotIdRoute_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotIdRoute_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.SlotIdRoute.class, redis_request.RedisRequestOuterClass.SlotIdRoute.Builder.class); - } - - public static final int SLOT_TYPE_FIELD_NUMBER = 1; - private int slotType_ = 0; - /** - * .redis_request.SlotTypes slot_type = 1; - * @return The enum numeric value on the wire for slotType. - */ - @java.lang.Override public int getSlotTypeValue() { - return slotType_; - } - /** - * .redis_request.SlotTypes slot_type = 1; - * @return The slotType. - */ - @java.lang.Override public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { - redis_request.RedisRequestOuterClass.SlotTypes result = redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); - return result == null ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED : result; - } - - public static final int SLOT_ID_FIELD_NUMBER = 2; - private int slotId_ = 0; - /** - * int32 slot_id = 2; - * @return The slotId. - */ - @java.lang.Override - public int getSlotId() { - return slotId_; - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { - output.writeEnum(1, slotType_); - } - if (slotId_ != 0) { - output.writeInt32(2, slotId_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(1, slotType_); - } - if (slotId_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(2, slotId_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.SlotIdRoute)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.SlotIdRoute other = (redis_request.RedisRequestOuterClass.SlotIdRoute) obj; - - if (slotType_ != other.slotType_) return false; - if (getSlotId() - != other.getSlotId()) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + SLOT_TYPE_FIELD_NUMBER; - hash = (53 * hash) + slotType_; - hash = (37 * hash) + SLOT_ID_FIELD_NUMBER; - hash = (53 * hash) + getSlotId(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.SlotIdRoute parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(redis_request.RedisRequestOuterClass.SlotIdRoute prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code redis_request.SlotIdRoute} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:redis_request.SlotIdRoute) - redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotIdRoute_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotIdRoute_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.SlotIdRoute.class, redis_request.RedisRequestOuterClass.SlotIdRoute.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.SlotIdRoute.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - slotType_ = 0; - slotId_ = 0; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotIdRoute_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRoute getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRoute build() { - redis_request.RedisRequestOuterClass.SlotIdRoute result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRoute buildPartial() { - redis_request.RedisRequestOuterClass.SlotIdRoute result = new redis_request.RedisRequestOuterClass.SlotIdRoute(this); - if (bitField0_ != 0) { buildPartial0(result); } - onBuilt(); - return result; - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.SlotIdRoute result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.slotType_ = slotType_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.slotId_ = slotId_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.SlotIdRoute) { - return mergeFrom((redis_request.RedisRequestOuterClass.SlotIdRoute)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.SlotIdRoute other) { - if (other == redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance()) return this; - if (other.slotType_ != 0) { - setSlotTypeValue(other.getSlotTypeValue()); - } - if (other.getSlotId() != 0) { - setSlotId(other.getSlotId()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - slotType_ = input.readEnum(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 16: { - slotId_ = input.readInt32(); - bitField0_ |= 0x00000002; - break; - } // case 16 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int bitField0_; - - private int slotType_ = 0; - /** - * .redis_request.SlotTypes slot_type = 1; - * @return The enum numeric value on the wire for slotType. - */ - @java.lang.Override public int getSlotTypeValue() { - return slotType_; - } - /** - * .redis_request.SlotTypes slot_type = 1; - * @param value The enum numeric value on the wire for slotType to set. - * @return This builder for chaining. - */ - public Builder setSlotTypeValue(int value) { - slotType_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * .redis_request.SlotTypes slot_type = 1; - * @return The slotType. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { - redis_request.RedisRequestOuterClass.SlotTypes result = redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); - return result == null ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED : result; - } - /** - * .redis_request.SlotTypes slot_type = 1; - * @param value The slotType to set. - * @return This builder for chaining. - */ - public Builder setSlotType(redis_request.RedisRequestOuterClass.SlotTypes value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - slotType_ = value.getNumber(); - onChanged(); - return this; - } - /** - * .redis_request.SlotTypes slot_type = 1; - * @return This builder for chaining. - */ - public Builder clearSlotType() { - bitField0_ = (bitField0_ & ~0x00000001); - slotType_ = 0; - onChanged(); - return this; - } - - private int slotId_ ; - /** - * int32 slot_id = 2; - * @return The slotId. - */ - @java.lang.Override - public int getSlotId() { - return slotId_; - } - /** - * int32 slot_id = 2; - * @param value The slotId to set. - * @return This builder for chaining. - */ - public Builder setSlotId(int value) { - - slotId_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - /** - * int32 slot_id = 2; - * @return This builder for chaining. - */ - public Builder clearSlotId() { - bitField0_ = (bitField0_ & ~0x00000002); - slotId_ = 0; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:redis_request.SlotIdRoute) - } - - // @@protoc_insertion_point(class_scope:redis_request.SlotIdRoute) - private static final redis_request.RedisRequestOuterClass.SlotIdRoute DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.SlotIdRoute(); - } - - public static redis_request.RedisRequestOuterClass.SlotIdRoute getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public SlotIdRoute parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRoute getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface SlotKeyRouteOrBuilder extends - // @@protoc_insertion_point(interface_extends:redis_request.SlotKeyRoute) - com.google.protobuf.MessageOrBuilder { - - /** - * .redis_request.SlotTypes slot_type = 1; - * @return The enum numeric value on the wire for slotType. - */ - int getSlotTypeValue(); - /** - * .redis_request.SlotTypes slot_type = 1; - * @return The slotType. - */ - redis_request.RedisRequestOuterClass.SlotTypes getSlotType(); - - /** - * string slot_key = 2; - * @return The slotKey. - */ - java.lang.String getSlotKey(); - /** - * string slot_key = 2; - * @return The bytes for slotKey. - */ - com.google.protobuf.ByteString - getSlotKeyBytes(); - } - /** - * Protobuf type {@code redis_request.SlotKeyRoute} - */ - public static final class SlotKeyRoute extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:redis_request.SlotKeyRoute) - SlotKeyRouteOrBuilder { - private static final long serialVersionUID = 0L; - // Use SlotKeyRoute.newBuilder() to construct. - private SlotKeyRoute(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private SlotKeyRoute() { - slotType_ = 0; - slotKey_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new SlotKeyRoute(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotKeyRoute_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotKeyRoute_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.SlotKeyRoute.class, redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder.class); - } - - public static final int SLOT_TYPE_FIELD_NUMBER = 1; - private int slotType_ = 0; - /** - * .redis_request.SlotTypes slot_type = 1; - * @return The enum numeric value on the wire for slotType. - */ - @java.lang.Override public int getSlotTypeValue() { - return slotType_; - } - /** - * .redis_request.SlotTypes slot_type = 1; - * @return The slotType. - */ - @java.lang.Override public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { - redis_request.RedisRequestOuterClass.SlotTypes result = redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); - return result == null ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED : result; - } - - public static final int SLOT_KEY_FIELD_NUMBER = 2; - @SuppressWarnings("serial") - private volatile java.lang.Object slotKey_ = ""; - /** - * string slot_key = 2; - * @return The slotKey. - */ - @java.lang.Override - public java.lang.String getSlotKey() { - java.lang.Object ref = slotKey_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - slotKey_ = s; - return s; - } - } - /** - * string slot_key = 2; - * @return The bytes for slotKey. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getSlotKeyBytes() { - java.lang.Object ref = slotKey_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - slotKey_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { - output.writeEnum(1, slotType_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(slotKey_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, slotKey_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (slotType_ != redis_request.RedisRequestOuterClass.SlotTypes.Primary.getNumber()) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(1, slotType_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(slotKey_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, slotKey_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.SlotKeyRoute)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.SlotKeyRoute other = (redis_request.RedisRequestOuterClass.SlotKeyRoute) obj; - - if (slotType_ != other.slotType_) return false; - if (!getSlotKey() - .equals(other.getSlotKey())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + SLOT_TYPE_FIELD_NUMBER; - hash = (53 * hash) + slotType_; - hash = (37 * hash) + SLOT_KEY_FIELD_NUMBER; - hash = (53 * hash) + getSlotKey().hashCode(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.SlotKeyRoute parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(redis_request.RedisRequestOuterClass.SlotKeyRoute prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code redis_request.SlotKeyRoute} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:redis_request.SlotKeyRoute) - redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotKeyRoute_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotKeyRoute_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.SlotKeyRoute.class, redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.SlotKeyRoute.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - slotType_ = 0; - slotKey_ = ""; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_SlotKeyRoute_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRoute getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRoute build() { - redis_request.RedisRequestOuterClass.SlotKeyRoute result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRoute buildPartial() { - redis_request.RedisRequestOuterClass.SlotKeyRoute result = new redis_request.RedisRequestOuterClass.SlotKeyRoute(this); - if (bitField0_ != 0) { buildPartial0(result); } - onBuilt(); - return result; - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.SlotKeyRoute result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.slotType_ = slotType_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.slotKey_ = slotKey_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.SlotKeyRoute) { - return mergeFrom((redis_request.RedisRequestOuterClass.SlotKeyRoute)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.SlotKeyRoute other) { - if (other == redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance()) return this; - if (other.slotType_ != 0) { - setSlotTypeValue(other.getSlotTypeValue()); - } - if (!other.getSlotKey().isEmpty()) { - slotKey_ = other.slotKey_; - bitField0_ |= 0x00000002; - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - slotType_ = input.readEnum(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 18: { - slotKey_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000002; - break; - } // case 18 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int bitField0_; - - private int slotType_ = 0; - /** - * .redis_request.SlotTypes slot_type = 1; - * @return The enum numeric value on the wire for slotType. - */ - @java.lang.Override public int getSlotTypeValue() { - return slotType_; - } - /** - * .redis_request.SlotTypes slot_type = 1; - * @param value The enum numeric value on the wire for slotType to set. - * @return This builder for chaining. - */ - public Builder setSlotTypeValue(int value) { - slotType_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * .redis_request.SlotTypes slot_type = 1; - * @return The slotType. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotTypes getSlotType() { - redis_request.RedisRequestOuterClass.SlotTypes result = redis_request.RedisRequestOuterClass.SlotTypes.forNumber(slotType_); - return result == null ? redis_request.RedisRequestOuterClass.SlotTypes.UNRECOGNIZED : result; - } - /** - * .redis_request.SlotTypes slot_type = 1; - * @param value The slotType to set. - * @return This builder for chaining. - */ - public Builder setSlotType(redis_request.RedisRequestOuterClass.SlotTypes value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - slotType_ = value.getNumber(); - onChanged(); - return this; - } - /** - * .redis_request.SlotTypes slot_type = 1; - * @return This builder for chaining. - */ - public Builder clearSlotType() { - bitField0_ = (bitField0_ & ~0x00000001); - slotType_ = 0; - onChanged(); - return this; - } - - private java.lang.Object slotKey_ = ""; - /** - * string slot_key = 2; - * @return The slotKey. - */ - public java.lang.String getSlotKey() { - java.lang.Object ref = slotKey_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - slotKey_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string slot_key = 2; - * @return The bytes for slotKey. - */ - public com.google.protobuf.ByteString - getSlotKeyBytes() { - java.lang.Object ref = slotKey_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - slotKey_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string slot_key = 2; - * @param value The slotKey to set. - * @return This builder for chaining. - */ - public Builder setSlotKey( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - slotKey_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - /** - * string slot_key = 2; - * @return This builder for chaining. - */ - public Builder clearSlotKey() { - slotKey_ = getDefaultInstance().getSlotKey(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - return this; - } - /** - * string slot_key = 2; - * @param value The bytes for slotKey to set. - * @return This builder for chaining. - */ - public Builder setSlotKeyBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - slotKey_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:redis_request.SlotKeyRoute) - } - - // @@protoc_insertion_point(class_scope:redis_request.SlotKeyRoute) - private static final redis_request.RedisRequestOuterClass.SlotKeyRoute DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.SlotKeyRoute(); - } - - public static redis_request.RedisRequestOuterClass.SlotKeyRoute getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public SlotKeyRoute parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRoute getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface RoutesOrBuilder extends - // @@protoc_insertion_point(interface_extends:redis_request.Routes) - com.google.protobuf.MessageOrBuilder { - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * @return Whether the simpleRoutes field is set. - */ - boolean hasSimpleRoutes(); - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * @return The enum numeric value on the wire for simpleRoutes. - */ - int getSimpleRoutesValue(); - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * @return The simpleRoutes. - */ - redis_request.RedisRequestOuterClass.SimpleRoutes getSimpleRoutes(); - - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - * @return Whether the slotKeyRoute field is set. - */ - boolean hasSlotKeyRoute(); - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - * @return The slotKeyRoute. - */ - redis_request.RedisRequestOuterClass.SlotKeyRoute getSlotKeyRoute(); - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - */ - redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder getSlotKeyRouteOrBuilder(); - - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - * @return Whether the slotIdRoute field is set. - */ - boolean hasSlotIdRoute(); - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - * @return The slotIdRoute. - */ - redis_request.RedisRequestOuterClass.SlotIdRoute getSlotIdRoute(); - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - */ - redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder getSlotIdRouteOrBuilder(); - - redis_request.RedisRequestOuterClass.Routes.ValueCase getValueCase(); - } - /** - * Protobuf type {@code redis_request.Routes} - */ - public static final class Routes extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:redis_request.Routes) - RoutesOrBuilder { - private static final long serialVersionUID = 0L; - // Use Routes.newBuilder() to construct. - private Routes(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private Routes() { - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new Routes(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Routes.class, redis_request.RedisRequestOuterClass.Routes.Builder.class); - } - - private int valueCase_ = 0; - @SuppressWarnings("serial") - private java.lang.Object value_; - public enum ValueCase - implements com.google.protobuf.Internal.EnumLite, - com.google.protobuf.AbstractMessage.InternalOneOfEnum { - SIMPLE_ROUTES(1), - SLOT_KEY_ROUTE(2), - SLOT_ID_ROUTE(3), - VALUE_NOT_SET(0); - private final int value; - private ValueCase(int value) { - this.value = value; - } - /** - * @param value The number of the enum to look for. - * @return The enum associated with the given number. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static ValueCase valueOf(int value) { - return forNumber(value); - } - - public static ValueCase forNumber(int value) { - switch (value) { - case 1: return SIMPLE_ROUTES; - case 2: return SLOT_KEY_ROUTE; - case 3: return SLOT_ID_ROUTE; - case 0: return VALUE_NOT_SET; - default: return null; - } - } - public int getNumber() { - return this.value; - } - }; - - public ValueCase - getValueCase() { - return ValueCase.forNumber( - valueCase_); - } - - public static final int SIMPLE_ROUTES_FIELD_NUMBER = 1; - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * @return Whether the simpleRoutes field is set. - */ - public boolean hasSimpleRoutes() { - return valueCase_ == 1; - } - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * @return The enum numeric value on the wire for simpleRoutes. - */ - public int getSimpleRoutesValue() { - if (valueCase_ == 1) { - return (java.lang.Integer) value_; - } - return 0; - } - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * @return The simpleRoutes. - */ - public redis_request.RedisRequestOuterClass.SimpleRoutes getSimpleRoutes() { - if (valueCase_ == 1) { - redis_request.RedisRequestOuterClass.SimpleRoutes result = redis_request.RedisRequestOuterClass.SimpleRoutes.forNumber( - (java.lang.Integer) value_); - return result == null ? redis_request.RedisRequestOuterClass.SimpleRoutes.UNRECOGNIZED : result; - } - return redis_request.RedisRequestOuterClass.SimpleRoutes.AllNodes; - } - - public static final int SLOT_KEY_ROUTE_FIELD_NUMBER = 2; - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - * @return Whether the slotKeyRoute field is set. - */ - @java.lang.Override - public boolean hasSlotKeyRoute() { - return valueCase_ == 2; - } - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - * @return The slotKeyRoute. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRoute getSlotKeyRoute() { - if (valueCase_ == 2) { - return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder getSlotKeyRouteOrBuilder() { - if (valueCase_ == 2) { - return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } - - public static final int SLOT_ID_ROUTE_FIELD_NUMBER = 3; - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - * @return Whether the slotIdRoute field is set. - */ - @java.lang.Override - public boolean hasSlotIdRoute() { - return valueCase_ == 3; - } - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - * @return The slotIdRoute. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRoute getSlotIdRoute() { - if (valueCase_ == 3) { - return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder getSlotIdRouteOrBuilder() { - if (valueCase_ == 3) { - return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (valueCase_ == 1) { - output.writeEnum(1, ((java.lang.Integer) value_)); - } - if (valueCase_ == 2) { - output.writeMessage(2, (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_); - } - if (valueCase_ == 3) { - output.writeMessage(3, (redis_request.RedisRequestOuterClass.SlotIdRoute) value_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (valueCase_ == 1) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(1, ((java.lang.Integer) value_)); - } - if (valueCase_ == 2) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_); - } - if (valueCase_ == 3) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, (redis_request.RedisRequestOuterClass.SlotIdRoute) value_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.Routes)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.Routes other = (redis_request.RedisRequestOuterClass.Routes) obj; - - if (!getValueCase().equals(other.getValueCase())) return false; - switch (valueCase_) { - case 1: - if (getSimpleRoutesValue() - != other.getSimpleRoutesValue()) return false; - break; - case 2: - if (!getSlotKeyRoute() - .equals(other.getSlotKeyRoute())) return false; - break; - case 3: - if (!getSlotIdRoute() - .equals(other.getSlotIdRoute())) return false; - break; - case 0: - default: - } - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - switch (valueCase_) { - case 1: - hash = (37 * hash) + SIMPLE_ROUTES_FIELD_NUMBER; - hash = (53 * hash) + getSimpleRoutesValue(); - break; - case 2: - hash = (37 * hash) + SLOT_KEY_ROUTE_FIELD_NUMBER; - hash = (53 * hash) + getSlotKeyRoute().hashCode(); - break; - case 3: - hash = (37 * hash) + SLOT_ID_ROUTE_FIELD_NUMBER; - hash = (53 * hash) + getSlotIdRoute().hashCode(); - break; - case 0: - default: - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Routes parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Routes parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Routes parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Routes parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.Routes parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(redis_request.RedisRequestOuterClass.Routes prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code redis_request.Routes} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:redis_request.Routes) - redis_request.RedisRequestOuterClass.RoutesOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Routes.class, redis_request.RedisRequestOuterClass.Routes.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.Routes.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - if (slotKeyRouteBuilder_ != null) { - slotKeyRouteBuilder_.clear(); - } - if (slotIdRouteBuilder_ != null) { - slotIdRouteBuilder_.clear(); - } - valueCase_ = 0; - value_ = null; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Routes_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Routes getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.Routes.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Routes build() { - redis_request.RedisRequestOuterClass.Routes result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Routes buildPartial() { - redis_request.RedisRequestOuterClass.Routes result = new redis_request.RedisRequestOuterClass.Routes(this); - if (bitField0_ != 0) { buildPartial0(result); } - buildPartialOneofs(result); - onBuilt(); - return result; - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.Routes result) { - int from_bitField0_ = bitField0_; - } - - private void buildPartialOneofs(redis_request.RedisRequestOuterClass.Routes result) { - result.valueCase_ = valueCase_; - result.value_ = this.value_; - if (valueCase_ == 2 && - slotKeyRouteBuilder_ != null) { - result.value_ = slotKeyRouteBuilder_.build(); - } - if (valueCase_ == 3 && - slotIdRouteBuilder_ != null) { - result.value_ = slotIdRouteBuilder_.build(); - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.Routes) { - return mergeFrom((redis_request.RedisRequestOuterClass.Routes)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.Routes other) { - if (other == redis_request.RedisRequestOuterClass.Routes.getDefaultInstance()) return this; - switch (other.getValueCase()) { - case SIMPLE_ROUTES: { - setSimpleRoutesValue(other.getSimpleRoutesValue()); - break; - } - case SLOT_KEY_ROUTE: { - mergeSlotKeyRoute(other.getSlotKeyRoute()); - break; - } - case SLOT_ID_ROUTE: { - mergeSlotIdRoute(other.getSlotIdRoute()); - break; - } - case VALUE_NOT_SET: { - break; - } - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - int rawValue = input.readEnum(); - valueCase_ = 1; - value_ = rawValue; - break; - } // case 8 - case 18: { - input.readMessage( - getSlotKeyRouteFieldBuilder().getBuilder(), - extensionRegistry); - valueCase_ = 2; - break; - } // case 18 - case 26: { - input.readMessage( - getSlotIdRouteFieldBuilder().getBuilder(), - extensionRegistry); - valueCase_ = 3; - break; - } // case 26 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int valueCase_ = 0; - private java.lang.Object value_; - public ValueCase - getValueCase() { - return ValueCase.forNumber( - valueCase_); - } - - public Builder clearValue() { - valueCase_ = 0; - value_ = null; - onChanged(); - return this; - } - - private int bitField0_; - - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * @return Whether the simpleRoutes field is set. - */ - @java.lang.Override - public boolean hasSimpleRoutes() { - return valueCase_ == 1; - } - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * @return The enum numeric value on the wire for simpleRoutes. - */ - @java.lang.Override - public int getSimpleRoutesValue() { - if (valueCase_ == 1) { - return ((java.lang.Integer) value_).intValue(); - } - return 0; - } - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * @param value The enum numeric value on the wire for simpleRoutes to set. - * @return This builder for chaining. - */ - public Builder setSimpleRoutesValue(int value) { - valueCase_ = 1; - value_ = value; - onChanged(); - return this; - } - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * @return The simpleRoutes. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SimpleRoutes getSimpleRoutes() { - if (valueCase_ == 1) { - redis_request.RedisRequestOuterClass.SimpleRoutes result = redis_request.RedisRequestOuterClass.SimpleRoutes.forNumber( - (java.lang.Integer) value_); - return result == null ? redis_request.RedisRequestOuterClass.SimpleRoutes.UNRECOGNIZED : result; - } - return redis_request.RedisRequestOuterClass.SimpleRoutes.AllNodes; - } - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * @param value The simpleRoutes to set. - * @return This builder for chaining. - */ - public Builder setSimpleRoutes(redis_request.RedisRequestOuterClass.SimpleRoutes value) { - if (value == null) { - throw new NullPointerException(); - } - valueCase_ = 1; - value_ = value.getNumber(); - onChanged(); - return this; - } - /** - * .redis_request.SimpleRoutes simple_routes = 1; - * @return This builder for chaining. - */ - public Builder clearSimpleRoutes() { - if (valueCase_ == 1) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - return this; - } - - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.SlotKeyRoute, redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder, redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder> slotKeyRouteBuilder_; - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - * @return Whether the slotKeyRoute field is set. - */ - @java.lang.Override - public boolean hasSlotKeyRoute() { - return valueCase_ == 2; - } - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - * @return The slotKeyRoute. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRoute getSlotKeyRoute() { - if (slotKeyRouteBuilder_ == null) { - if (valueCase_ == 2) { - return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } else { - if (valueCase_ == 2) { - return slotKeyRouteBuilder_.getMessage(); - } - return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } - } - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - */ - public Builder setSlotKeyRoute(redis_request.RedisRequestOuterClass.SlotKeyRoute value) { - if (slotKeyRouteBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - value_ = value; - onChanged(); - } else { - slotKeyRouteBuilder_.setMessage(value); - } - valueCase_ = 2; - return this; - } - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - */ - public Builder setSlotKeyRoute( - redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder builderForValue) { - if (slotKeyRouteBuilder_ == null) { - value_ = builderForValue.build(); - onChanged(); - } else { - slotKeyRouteBuilder_.setMessage(builderForValue.build()); - } - valueCase_ = 2; - return this; - } - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - */ - public Builder mergeSlotKeyRoute(redis_request.RedisRequestOuterClass.SlotKeyRoute value) { - if (slotKeyRouteBuilder_ == null) { - if (valueCase_ == 2 && - value_ != redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance()) { - value_ = redis_request.RedisRequestOuterClass.SlotKeyRoute.newBuilder((redis_request.RedisRequestOuterClass.SlotKeyRoute) value_) - .mergeFrom(value).buildPartial(); - } else { - value_ = value; - } - onChanged(); - } else { - if (valueCase_ == 2) { - slotKeyRouteBuilder_.mergeFrom(value); - } else { - slotKeyRouteBuilder_.setMessage(value); - } - } - valueCase_ = 2; - return this; - } - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - */ - public Builder clearSlotKeyRoute() { - if (slotKeyRouteBuilder_ == null) { - if (valueCase_ == 2) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - } else { - if (valueCase_ == 2) { - valueCase_ = 0; - value_ = null; - } - slotKeyRouteBuilder_.clear(); - } - return this; - } - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - */ - public redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder getSlotKeyRouteBuilder() { - return getSlotKeyRouteFieldBuilder().getBuilder(); - } - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder getSlotKeyRouteOrBuilder() { - if ((valueCase_ == 2) && (slotKeyRouteBuilder_ != null)) { - return slotKeyRouteBuilder_.getMessageOrBuilder(); - } else { - if (valueCase_ == 2) { - return (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } - } - /** - * .redis_request.SlotKeyRoute slot_key_route = 2; - */ - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.SlotKeyRoute, redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder, redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder> - getSlotKeyRouteFieldBuilder() { - if (slotKeyRouteBuilder_ == null) { - if (!(valueCase_ == 2)) { - value_ = redis_request.RedisRequestOuterClass.SlotKeyRoute.getDefaultInstance(); - } - slotKeyRouteBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.SlotKeyRoute, redis_request.RedisRequestOuterClass.SlotKeyRoute.Builder, redis_request.RedisRequestOuterClass.SlotKeyRouteOrBuilder>( - (redis_request.RedisRequestOuterClass.SlotKeyRoute) value_, - getParentForChildren(), - isClean()); - value_ = null; - } - valueCase_ = 2; - onChanged(); - return slotKeyRouteBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.SlotIdRoute, redis_request.RedisRequestOuterClass.SlotIdRoute.Builder, redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder> slotIdRouteBuilder_; - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - * @return Whether the slotIdRoute field is set. - */ - @java.lang.Override - public boolean hasSlotIdRoute() { - return valueCase_ == 3; - } - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - * @return The slotIdRoute. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRoute getSlotIdRoute() { - if (slotIdRouteBuilder_ == null) { - if (valueCase_ == 3) { - return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } else { - if (valueCase_ == 3) { - return slotIdRouteBuilder_.getMessage(); - } - return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } - } - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - */ - public Builder setSlotIdRoute(redis_request.RedisRequestOuterClass.SlotIdRoute value) { - if (slotIdRouteBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - value_ = value; - onChanged(); - } else { - slotIdRouteBuilder_.setMessage(value); - } - valueCase_ = 3; - return this; - } - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - */ - public Builder setSlotIdRoute( - redis_request.RedisRequestOuterClass.SlotIdRoute.Builder builderForValue) { - if (slotIdRouteBuilder_ == null) { - value_ = builderForValue.build(); - onChanged(); - } else { - slotIdRouteBuilder_.setMessage(builderForValue.build()); - } - valueCase_ = 3; - return this; - } - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - */ - public Builder mergeSlotIdRoute(redis_request.RedisRequestOuterClass.SlotIdRoute value) { - if (slotIdRouteBuilder_ == null) { - if (valueCase_ == 3 && - value_ != redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance()) { - value_ = redis_request.RedisRequestOuterClass.SlotIdRoute.newBuilder((redis_request.RedisRequestOuterClass.SlotIdRoute) value_) - .mergeFrom(value).buildPartial(); - } else { - value_ = value; - } - onChanged(); - } else { - if (valueCase_ == 3) { - slotIdRouteBuilder_.mergeFrom(value); - } else { - slotIdRouteBuilder_.setMessage(value); - } - } - valueCase_ = 3; - return this; - } - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - */ - public Builder clearSlotIdRoute() { - if (slotIdRouteBuilder_ == null) { - if (valueCase_ == 3) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - } else { - if (valueCase_ == 3) { - valueCase_ = 0; - value_ = null; - } - slotIdRouteBuilder_.clear(); - } - return this; - } - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - */ - public redis_request.RedisRequestOuterClass.SlotIdRoute.Builder getSlotIdRouteBuilder() { - return getSlotIdRouteFieldBuilder().getBuilder(); - } - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder getSlotIdRouteOrBuilder() { - if ((valueCase_ == 3) && (slotIdRouteBuilder_ != null)) { - return slotIdRouteBuilder_.getMessageOrBuilder(); - } else { - if (valueCase_ == 3) { - return (redis_request.RedisRequestOuterClass.SlotIdRoute) value_; - } - return redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } - } - /** - * .redis_request.SlotIdRoute slot_id_route = 3; - */ - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.SlotIdRoute, redis_request.RedisRequestOuterClass.SlotIdRoute.Builder, redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder> - getSlotIdRouteFieldBuilder() { - if (slotIdRouteBuilder_ == null) { - if (!(valueCase_ == 3)) { - value_ = redis_request.RedisRequestOuterClass.SlotIdRoute.getDefaultInstance(); - } - slotIdRouteBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.SlotIdRoute, redis_request.RedisRequestOuterClass.SlotIdRoute.Builder, redis_request.RedisRequestOuterClass.SlotIdRouteOrBuilder>( - (redis_request.RedisRequestOuterClass.SlotIdRoute) value_, - getParentForChildren(), - isClean()); - value_ = null; - } - valueCase_ = 3; - onChanged(); - return slotIdRouteBuilder_; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:redis_request.Routes) - } - - // @@protoc_insertion_point(class_scope:redis_request.Routes) - private static final redis_request.RedisRequestOuterClass.Routes DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Routes(); - } - - public static redis_request.RedisRequestOuterClass.Routes getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public Routes parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Routes getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface CommandOrBuilder extends - // @@protoc_insertion_point(interface_extends:redis_request.Command) - com.google.protobuf.MessageOrBuilder { - - /** - * .redis_request.RequestType request_type = 1; - * @return The enum numeric value on the wire for requestType. - */ - int getRequestTypeValue(); - /** - * .redis_request.RequestType request_type = 1; - * @return The requestType. - */ - redis_request.RedisRequestOuterClass.RequestType getRequestType(); - - /** - * .redis_request.Command.ArgsArray args_array = 2; - * @return Whether the argsArray field is set. - */ - boolean hasArgsArray(); - /** - * .redis_request.Command.ArgsArray args_array = 2; - * @return The argsArray. - */ - redis_request.RedisRequestOuterClass.Command.ArgsArray getArgsArray(); - /** - * .redis_request.Command.ArgsArray args_array = 2; - */ - redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder getArgsArrayOrBuilder(); - - /** - * uint64 args_vec_pointer = 3; - * @return Whether the argsVecPointer field is set. - */ - boolean hasArgsVecPointer(); - /** - * uint64 args_vec_pointer = 3; - * @return The argsVecPointer. - */ - long getArgsVecPointer(); - - redis_request.RedisRequestOuterClass.Command.ArgsCase getArgsCase(); - } - /** - * Protobuf type {@code redis_request.Command} - */ - public static final class Command extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:redis_request.Command) - CommandOrBuilder { - private static final long serialVersionUID = 0L; - // Use Command.newBuilder() to construct. - private Command(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private Command() { - requestType_ = 0; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new Command(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Command.class, redis_request.RedisRequestOuterClass.Command.Builder.class); - } - - public interface ArgsArrayOrBuilder extends - // @@protoc_insertion_point(interface_extends:redis_request.Command.ArgsArray) - com.google.protobuf.MessageOrBuilder { - - /** - * repeated string args = 1; - * @return A list containing the args. - */ - java.util.List - getArgsList(); - /** - * repeated string args = 1; - * @return The count of args. - */ - int getArgsCount(); - /** - * repeated string args = 1; - * @param index The index of the element to return. - * @return The args at the given index. - */ - java.lang.String getArgs(int index); - /** - * repeated string args = 1; - * @param index The index of the value to return. - * @return The bytes of the args at the given index. - */ - com.google.protobuf.ByteString - getArgsBytes(int index); - } - /** - * Protobuf type {@code redis_request.Command.ArgsArray} - */ - public static final class ArgsArray extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:redis_request.Command.ArgsArray) - ArgsArrayOrBuilder { - private static final long serialVersionUID = 0L; - // Use ArgsArray.newBuilder() to construct. - private ArgsArray(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private ArgsArray() { - args_ = - com.google.protobuf.LazyStringArrayList.emptyList(); - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new ArgsArray(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_ArgsArray_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_ArgsArray_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Command.ArgsArray.class, redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder.class); - } - - public static final int ARGS_FIELD_NUMBER = 1; - @SuppressWarnings("serial") - private com.google.protobuf.LazyStringArrayList args_ = - com.google.protobuf.LazyStringArrayList.emptyList(); - /** - * repeated string args = 1; - * @return A list containing the args. - */ - public com.google.protobuf.ProtocolStringList - getArgsList() { - return args_; - } - /** - * repeated string args = 1; - * @return The count of args. - */ - public int getArgsCount() { - return args_.size(); - } - /** - * repeated string args = 1; - * @param index The index of the element to return. - * @return The args at the given index. - */ - public java.lang.String getArgs(int index) { - return args_.get(index); - } - /** - * repeated string args = 1; - * @param index The index of the value to return. - * @return The bytes of the args at the given index. - */ - public com.google.protobuf.ByteString - getArgsBytes(int index) { - return args_.getByteString(index); - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - for (int i = 0; i < args_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, args_.getRaw(i)); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - { - int dataSize = 0; - for (int i = 0; i < args_.size(); i++) { - dataSize += computeStringSizeNoTag(args_.getRaw(i)); - } - size += dataSize; - size += 1 * getArgsList().size(); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.Command.ArgsArray)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.Command.ArgsArray other = (redis_request.RedisRequestOuterClass.Command.ArgsArray) obj; - - if (!getArgsList() - .equals(other.getArgsList())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getArgsCount() > 0) { - hash = (37 * hash) + ARGS_FIELD_NUMBER; - hash = (53 * hash) + getArgsList().hashCode(); - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.Command.ArgsArray parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(redis_request.RedisRequestOuterClass.Command.ArgsArray prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code redis_request.Command.ArgsArray} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:redis_request.Command.ArgsArray) - redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_ArgsArray_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_ArgsArray_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Command.ArgsArray.class, redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.Command.ArgsArray.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - args_ = - com.google.protobuf.LazyStringArrayList.emptyList(); - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_ArgsArray_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArray getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArray build() { - redis_request.RedisRequestOuterClass.Command.ArgsArray result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArray buildPartial() { - redis_request.RedisRequestOuterClass.Command.ArgsArray result = new redis_request.RedisRequestOuterClass.Command.ArgsArray(this); - if (bitField0_ != 0) { buildPartial0(result); } - onBuilt(); - return result; - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.Command.ArgsArray result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - args_.makeImmutable(); - result.args_ = args_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.Command.ArgsArray) { - return mergeFrom((redis_request.RedisRequestOuterClass.Command.ArgsArray)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.Command.ArgsArray other) { - if (other == redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance()) return this; - if (!other.args_.isEmpty()) { - if (args_.isEmpty()) { - args_ = other.args_; - bitField0_ |= 0x00000001; - } else { - ensureArgsIsMutable(); - args_.addAll(other.args_); - } - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - java.lang.String s = input.readStringRequireUtf8(); - ensureArgsIsMutable(); - args_.add(s); - break; - } // case 10 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int bitField0_; - - private com.google.protobuf.LazyStringArrayList args_ = - com.google.protobuf.LazyStringArrayList.emptyList(); - private void ensureArgsIsMutable() { - if (!args_.isModifiable()) { - args_ = new com.google.protobuf.LazyStringArrayList(args_); - } - bitField0_ |= 0x00000001; - } - /** - * repeated string args = 1; - * @return A list containing the args. - */ - public com.google.protobuf.ProtocolStringList - getArgsList() { - args_.makeImmutable(); - return args_; - } - /** - * repeated string args = 1; - * @return The count of args. - */ - public int getArgsCount() { - return args_.size(); - } - /** - * repeated string args = 1; - * @param index The index of the element to return. - * @return The args at the given index. - */ - public java.lang.String getArgs(int index) { - return args_.get(index); - } - /** - * repeated string args = 1; - * @param index The index of the value to return. - * @return The bytes of the args at the given index. - */ - public com.google.protobuf.ByteString - getArgsBytes(int index) { - return args_.getByteString(index); - } - /** - * repeated string args = 1; - * @param index The index to set the value at. - * @param value The args to set. - * @return This builder for chaining. - */ - public Builder setArgs( - int index, java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - ensureArgsIsMutable(); - args_.set(index, value); - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * repeated string args = 1; - * @param value The args to add. - * @return This builder for chaining. - */ - public Builder addArgs( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - ensureArgsIsMutable(); - args_.add(value); - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * repeated string args = 1; - * @param values The args to add. - * @return This builder for chaining. - */ - public Builder addAllArgs( - java.lang.Iterable values) { - ensureArgsIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, args_); - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * repeated string args = 1; - * @return This builder for chaining. - */ - public Builder clearArgs() { - args_ = - com.google.protobuf.LazyStringArrayList.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001);; - onChanged(); - return this; - } - /** - * repeated string args = 1; - * @param value The bytes of the args to add. - * @return This builder for chaining. - */ - public Builder addArgsBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - ensureArgsIsMutable(); - args_.add(value); - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:redis_request.Command.ArgsArray) - } - - // @@protoc_insertion_point(class_scope:redis_request.Command.ArgsArray) - private static final redis_request.RedisRequestOuterClass.Command.ArgsArray DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Command.ArgsArray(); - } - - public static redis_request.RedisRequestOuterClass.Command.ArgsArray getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public ArgsArray parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArray getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private int argsCase_ = 0; - @SuppressWarnings("serial") - private java.lang.Object args_; - public enum ArgsCase - implements com.google.protobuf.Internal.EnumLite, - com.google.protobuf.AbstractMessage.InternalOneOfEnum { - ARGS_ARRAY(2), - ARGS_VEC_POINTER(3), - ARGS_NOT_SET(0); - private final int value; - private ArgsCase(int value) { - this.value = value; - } - /** - * @param value The number of the enum to look for. - * @return The enum associated with the given number. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static ArgsCase valueOf(int value) { - return forNumber(value); - } - - public static ArgsCase forNumber(int value) { - switch (value) { - case 2: return ARGS_ARRAY; - case 3: return ARGS_VEC_POINTER; - case 0: return ARGS_NOT_SET; - default: return null; - } - } - public int getNumber() { - return this.value; - } - }; - - public ArgsCase - getArgsCase() { - return ArgsCase.forNumber( - argsCase_); - } - - public static final int REQUEST_TYPE_FIELD_NUMBER = 1; - private int requestType_ = 0; - /** - * .redis_request.RequestType request_type = 1; - * @return The enum numeric value on the wire for requestType. - */ - @java.lang.Override public int getRequestTypeValue() { - return requestType_; - } - /** - * .redis_request.RequestType request_type = 1; - * @return The requestType. - */ - @java.lang.Override public redis_request.RedisRequestOuterClass.RequestType getRequestType() { - redis_request.RedisRequestOuterClass.RequestType result = redis_request.RedisRequestOuterClass.RequestType.forNumber(requestType_); - return result == null ? redis_request.RedisRequestOuterClass.RequestType.UNRECOGNIZED : result; - } - - public static final int ARGS_ARRAY_FIELD_NUMBER = 2; - /** - * .redis_request.Command.ArgsArray args_array = 2; - * @return Whether the argsArray field is set. - */ - @java.lang.Override - public boolean hasArgsArray() { - return argsCase_ == 2; - } - /** - * .redis_request.Command.ArgsArray args_array = 2; - * @return The argsArray. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArray getArgsArray() { - if (argsCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; - } - return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } - /** - * .redis_request.Command.ArgsArray args_array = 2; - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder getArgsArrayOrBuilder() { - if (argsCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; - } - return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } - - public static final int ARGS_VEC_POINTER_FIELD_NUMBER = 3; - /** - * uint64 args_vec_pointer = 3; - * @return Whether the argsVecPointer field is set. - */ - @java.lang.Override - public boolean hasArgsVecPointer() { - return argsCase_ == 3; - } - /** - * uint64 args_vec_pointer = 3; - * @return The argsVecPointer. - */ - @java.lang.Override - public long getArgsVecPointer() { - if (argsCase_ == 3) { - return (java.lang.Long) args_; - } - return 0L; - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (requestType_ != redis_request.RedisRequestOuterClass.RequestType.InvalidRequest.getNumber()) { - output.writeEnum(1, requestType_); - } - if (argsCase_ == 2) { - output.writeMessage(2, (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_); - } - if (argsCase_ == 3) { - output.writeUInt64( - 3, (long)((java.lang.Long) args_)); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (requestType_ != redis_request.RedisRequestOuterClass.RequestType.InvalidRequest.getNumber()) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(1, requestType_); - } - if (argsCase_ == 2) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_); - } - if (argsCase_ == 3) { - size += com.google.protobuf.CodedOutputStream - .computeUInt64Size( - 3, (long)((java.lang.Long) args_)); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.Command)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.Command other = (redis_request.RedisRequestOuterClass.Command) obj; - - if (requestType_ != other.requestType_) return false; - if (!getArgsCase().equals(other.getArgsCase())) return false; - switch (argsCase_) { - case 2: - if (!getArgsArray() - .equals(other.getArgsArray())) return false; - break; - case 3: - if (getArgsVecPointer() - != other.getArgsVecPointer()) return false; - break; - case 0: - default: - } - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + REQUEST_TYPE_FIELD_NUMBER; - hash = (53 * hash) + requestType_; - switch (argsCase_) { - case 2: - hash = (37 * hash) + ARGS_ARRAY_FIELD_NUMBER; - hash = (53 * hash) + getArgsArray().hashCode(); - break; - case 3: - hash = (37 * hash) + ARGS_VEC_POINTER_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getArgsVecPointer()); - break; - case 0: - default: - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.Command parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.Command parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Command parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.Command parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Command parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.Command parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Command parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.Command parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Command parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Command parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Command parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.Command parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(redis_request.RedisRequestOuterClass.Command prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code redis_request.Command} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:redis_request.Command) - redis_request.RedisRequestOuterClass.CommandOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Command.class, redis_request.RedisRequestOuterClass.Command.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.Command.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - requestType_ = 0; - if (argsArrayBuilder_ != null) { - argsArrayBuilder_.clear(); - } - argsCase_ = 0; - args_ = null; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Command_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command build() { - redis_request.RedisRequestOuterClass.Command result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command buildPartial() { - redis_request.RedisRequestOuterClass.Command result = new redis_request.RedisRequestOuterClass.Command(this); - if (bitField0_ != 0) { buildPartial0(result); } - buildPartialOneofs(result); - onBuilt(); - return result; - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.Command result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.requestType_ = requestType_; - } - } - - private void buildPartialOneofs(redis_request.RedisRequestOuterClass.Command result) { - result.argsCase_ = argsCase_; - result.args_ = this.args_; - if (argsCase_ == 2 && - argsArrayBuilder_ != null) { - result.args_ = argsArrayBuilder_.build(); - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.Command) { - return mergeFrom((redis_request.RedisRequestOuterClass.Command)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.Command other) { - if (other == redis_request.RedisRequestOuterClass.Command.getDefaultInstance()) return this; - if (other.requestType_ != 0) { - setRequestTypeValue(other.getRequestTypeValue()); - } - switch (other.getArgsCase()) { - case ARGS_ARRAY: { - mergeArgsArray(other.getArgsArray()); - break; - } - case ARGS_VEC_POINTER: { - setArgsVecPointer(other.getArgsVecPointer()); - break; - } - case ARGS_NOT_SET: { - break; - } - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - requestType_ = input.readEnum(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 18: { - input.readMessage( - getArgsArrayFieldBuilder().getBuilder(), - extensionRegistry); - argsCase_ = 2; - break; - } // case 18 - case 24: { - args_ = input.readUInt64(); - argsCase_ = 3; - break; - } // case 24 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int argsCase_ = 0; - private java.lang.Object args_; - public ArgsCase - getArgsCase() { - return ArgsCase.forNumber( - argsCase_); - } - - public Builder clearArgs() { - argsCase_ = 0; - args_ = null; - onChanged(); - return this; - } - - private int bitField0_; - - private int requestType_ = 0; - /** - * .redis_request.RequestType request_type = 1; - * @return The enum numeric value on the wire for requestType. - */ - @java.lang.Override public int getRequestTypeValue() { - return requestType_; - } - /** - * .redis_request.RequestType request_type = 1; - * @param value The enum numeric value on the wire for requestType to set. - * @return This builder for chaining. - */ - public Builder setRequestTypeValue(int value) { - requestType_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * .redis_request.RequestType request_type = 1; - * @return The requestType. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.RequestType getRequestType() { - redis_request.RedisRequestOuterClass.RequestType result = redis_request.RedisRequestOuterClass.RequestType.forNumber(requestType_); - return result == null ? redis_request.RedisRequestOuterClass.RequestType.UNRECOGNIZED : result; - } - /** - * .redis_request.RequestType request_type = 1; - * @param value The requestType to set. - * @return This builder for chaining. - */ - public Builder setRequestType(redis_request.RedisRequestOuterClass.RequestType value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - requestType_ = value.getNumber(); - onChanged(); - return this; - } - /** - * .redis_request.RequestType request_type = 1; - * @return This builder for chaining. - */ - public Builder clearRequestType() { - bitField0_ = (bitField0_ & ~0x00000001); - requestType_ = 0; - onChanged(); - return this; - } - - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command.ArgsArray, redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder, redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder> argsArrayBuilder_; - /** - * .redis_request.Command.ArgsArray args_array = 2; - * @return Whether the argsArray field is set. - */ - @java.lang.Override - public boolean hasArgsArray() { - return argsCase_ == 2; - } - /** - * .redis_request.Command.ArgsArray args_array = 2; - * @return The argsArray. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArray getArgsArray() { - if (argsArrayBuilder_ == null) { - if (argsCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; - } - return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } else { - if (argsCase_ == 2) { - return argsArrayBuilder_.getMessage(); - } - return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } - } - /** - * .redis_request.Command.ArgsArray args_array = 2; - */ - public Builder setArgsArray(redis_request.RedisRequestOuterClass.Command.ArgsArray value) { - if (argsArrayBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - args_ = value; - onChanged(); - } else { - argsArrayBuilder_.setMessage(value); - } - argsCase_ = 2; - return this; - } - /** - * .redis_request.Command.ArgsArray args_array = 2; - */ - public Builder setArgsArray( - redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder builderForValue) { - if (argsArrayBuilder_ == null) { - args_ = builderForValue.build(); - onChanged(); - } else { - argsArrayBuilder_.setMessage(builderForValue.build()); - } - argsCase_ = 2; - return this; - } - /** - * .redis_request.Command.ArgsArray args_array = 2; - */ - public Builder mergeArgsArray(redis_request.RedisRequestOuterClass.Command.ArgsArray value) { - if (argsArrayBuilder_ == null) { - if (argsCase_ == 2 && - args_ != redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance()) { - args_ = redis_request.RedisRequestOuterClass.Command.ArgsArray.newBuilder((redis_request.RedisRequestOuterClass.Command.ArgsArray) args_) - .mergeFrom(value).buildPartial(); - } else { - args_ = value; - } - onChanged(); - } else { - if (argsCase_ == 2) { - argsArrayBuilder_.mergeFrom(value); - } else { - argsArrayBuilder_.setMessage(value); - } - } - argsCase_ = 2; - return this; - } - /** - * .redis_request.Command.ArgsArray args_array = 2; - */ - public Builder clearArgsArray() { - if (argsArrayBuilder_ == null) { - if (argsCase_ == 2) { - argsCase_ = 0; - args_ = null; - onChanged(); - } - } else { - if (argsCase_ == 2) { - argsCase_ = 0; - args_ = null; - } - argsArrayBuilder_.clear(); - } - return this; - } - /** - * .redis_request.Command.ArgsArray args_array = 2; - */ - public redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder getArgsArrayBuilder() { - return getArgsArrayFieldBuilder().getBuilder(); - } - /** - * .redis_request.Command.ArgsArray args_array = 2; - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder getArgsArrayOrBuilder() { - if ((argsCase_ == 2) && (argsArrayBuilder_ != null)) { - return argsArrayBuilder_.getMessageOrBuilder(); - } else { - if (argsCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_; - } - return redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } - } - /** - * .redis_request.Command.ArgsArray args_array = 2; - */ - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command.ArgsArray, redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder, redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder> - getArgsArrayFieldBuilder() { - if (argsArrayBuilder_ == null) { - if (!(argsCase_ == 2)) { - args_ = redis_request.RedisRequestOuterClass.Command.ArgsArray.getDefaultInstance(); - } - argsArrayBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command.ArgsArray, redis_request.RedisRequestOuterClass.Command.ArgsArray.Builder, redis_request.RedisRequestOuterClass.Command.ArgsArrayOrBuilder>( - (redis_request.RedisRequestOuterClass.Command.ArgsArray) args_, - getParentForChildren(), - isClean()); - args_ = null; - } - argsCase_ = 2; - onChanged(); - return argsArrayBuilder_; - } - - /** - * uint64 args_vec_pointer = 3; - * @return Whether the argsVecPointer field is set. - */ - public boolean hasArgsVecPointer() { - return argsCase_ == 3; - } - /** - * uint64 args_vec_pointer = 3; - * @return The argsVecPointer. - */ - public long getArgsVecPointer() { - if (argsCase_ == 3) { - return (java.lang.Long) args_; - } - return 0L; - } - /** - * uint64 args_vec_pointer = 3; - * @param value The argsVecPointer to set. - * @return This builder for chaining. - */ - public Builder setArgsVecPointer(long value) { - - argsCase_ = 3; - args_ = value; - onChanged(); - return this; - } - /** - * uint64 args_vec_pointer = 3; - * @return This builder for chaining. - */ - public Builder clearArgsVecPointer() { - if (argsCase_ == 3) { - argsCase_ = 0; - args_ = null; - onChanged(); - } - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:redis_request.Command) - } - - // @@protoc_insertion_point(class_scope:redis_request.Command) - private static final redis_request.RedisRequestOuterClass.Command DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Command(); - } - - public static redis_request.RedisRequestOuterClass.Command getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public Command parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface TransactionOrBuilder extends - // @@protoc_insertion_point(interface_extends:redis_request.Transaction) - com.google.protobuf.MessageOrBuilder { - - /** - * repeated .redis_request.Command commands = 1; - */ - java.util.List - getCommandsList(); - /** - * repeated .redis_request.Command commands = 1; - */ - redis_request.RedisRequestOuterClass.Command getCommands(int index); - /** - * repeated .redis_request.Command commands = 1; - */ - int getCommandsCount(); - /** - * repeated .redis_request.Command commands = 1; - */ - java.util.List - getCommandsOrBuilderList(); - /** - * repeated .redis_request.Command commands = 1; - */ - redis_request.RedisRequestOuterClass.CommandOrBuilder getCommandsOrBuilder( - int index); - } - /** - * Protobuf type {@code redis_request.Transaction} - */ - public static final class Transaction extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:redis_request.Transaction) - TransactionOrBuilder { - private static final long serialVersionUID = 0L; - // Use Transaction.newBuilder() to construct. - private Transaction(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private Transaction() { - commands_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new Transaction(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Transaction_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Transaction_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Transaction.class, redis_request.RedisRequestOuterClass.Transaction.Builder.class); - } - - public static final int COMMANDS_FIELD_NUMBER = 1; - @SuppressWarnings("serial") - private java.util.List commands_; - /** - * repeated .redis_request.Command commands = 1; - */ - @java.lang.Override - public java.util.List getCommandsList() { - return commands_; - } - /** - * repeated .redis_request.Command commands = 1; - */ - @java.lang.Override - public java.util.List - getCommandsOrBuilderList() { - return commands_; - } - /** - * repeated .redis_request.Command commands = 1; - */ - @java.lang.Override - public int getCommandsCount() { - return commands_.size(); - } - /** - * repeated .redis_request.Command commands = 1; - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command getCommands(int index) { - return commands_.get(index); - } - /** - * repeated .redis_request.Command commands = 1; - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.CommandOrBuilder getCommandsOrBuilder( - int index) { - return commands_.get(index); - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - for (int i = 0; i < commands_.size(); i++) { - output.writeMessage(1, commands_.get(i)); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - for (int i = 0; i < commands_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, commands_.get(i)); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.Transaction)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.Transaction other = (redis_request.RedisRequestOuterClass.Transaction) obj; - - if (!getCommandsList() - .equals(other.getCommandsList())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getCommandsCount() > 0) { - hash = (37 * hash) + COMMANDS_FIELD_NUMBER; - hash = (53 * hash) + getCommandsList().hashCode(); - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Transaction parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Transaction parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.Transaction parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.Transaction parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.Transaction parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(redis_request.RedisRequestOuterClass.Transaction prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code redis_request.Transaction} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:redis_request.Transaction) - redis_request.RedisRequestOuterClass.TransactionOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Transaction_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Transaction_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.Transaction.class, redis_request.RedisRequestOuterClass.Transaction.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.Transaction.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - if (commandsBuilder_ == null) { - commands_ = java.util.Collections.emptyList(); - } else { - commands_ = null; - commandsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000001); - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_Transaction_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Transaction getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Transaction build() { - redis_request.RedisRequestOuterClass.Transaction result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Transaction buildPartial() { - redis_request.RedisRequestOuterClass.Transaction result = new redis_request.RedisRequestOuterClass.Transaction(this); - buildPartialRepeatedFields(result); - if (bitField0_ != 0) { buildPartial0(result); } - onBuilt(); - return result; - } - - private void buildPartialRepeatedFields(redis_request.RedisRequestOuterClass.Transaction result) { - if (commandsBuilder_ == null) { - if (((bitField0_ & 0x00000001) != 0)) { - commands_ = java.util.Collections.unmodifiableList(commands_); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.commands_ = commands_; - } else { - result.commands_ = commandsBuilder_.build(); - } - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.Transaction result) { - int from_bitField0_ = bitField0_; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.Transaction) { - return mergeFrom((redis_request.RedisRequestOuterClass.Transaction)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.Transaction other) { - if (other == redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance()) return this; - if (commandsBuilder_ == null) { - if (!other.commands_.isEmpty()) { - if (commands_.isEmpty()) { - commands_ = other.commands_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensureCommandsIsMutable(); - commands_.addAll(other.commands_); - } - onChanged(); - } - } else { - if (!other.commands_.isEmpty()) { - if (commandsBuilder_.isEmpty()) { - commandsBuilder_.dispose(); - commandsBuilder_ = null; - commands_ = other.commands_; - bitField0_ = (bitField0_ & ~0x00000001); - commandsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getCommandsFieldBuilder() : null; - } else { - commandsBuilder_.addAllMessages(other.commands_); - } - } - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - redis_request.RedisRequestOuterClass.Command m = - input.readMessage( - redis_request.RedisRequestOuterClass.Command.parser(), - extensionRegistry); - if (commandsBuilder_ == null) { - ensureCommandsIsMutable(); - commands_.add(m); - } else { - commandsBuilder_.addMessage(m); - } - break; - } // case 10 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int bitField0_; - - private java.util.List commands_ = - java.util.Collections.emptyList(); - private void ensureCommandsIsMutable() { - if (!((bitField0_ & 0x00000001) != 0)) { - commands_ = new java.util.ArrayList(commands_); - bitField0_ |= 0x00000001; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command, redis_request.RedisRequestOuterClass.Command.Builder, redis_request.RedisRequestOuterClass.CommandOrBuilder> commandsBuilder_; - - /** - * repeated .redis_request.Command commands = 1; - */ - public java.util.List getCommandsList() { - if (commandsBuilder_ == null) { - return java.util.Collections.unmodifiableList(commands_); - } else { - return commandsBuilder_.getMessageList(); - } - } - /** - * repeated .redis_request.Command commands = 1; - */ - public int getCommandsCount() { - if (commandsBuilder_ == null) { - return commands_.size(); - } else { - return commandsBuilder_.getCount(); - } - } - /** - * repeated .redis_request.Command commands = 1; - */ - public redis_request.RedisRequestOuterClass.Command getCommands(int index) { - if (commandsBuilder_ == null) { - return commands_.get(index); - } else { - return commandsBuilder_.getMessage(index); - } - } - /** - * repeated .redis_request.Command commands = 1; - */ - public Builder setCommands( - int index, redis_request.RedisRequestOuterClass.Command value) { - if (commandsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCommandsIsMutable(); - commands_.set(index, value); - onChanged(); - } else { - commandsBuilder_.setMessage(index, value); - } - return this; - } - /** - * repeated .redis_request.Command commands = 1; - */ - public Builder setCommands( - int index, redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { - if (commandsBuilder_ == null) { - ensureCommandsIsMutable(); - commands_.set(index, builderForValue.build()); - onChanged(); - } else { - commandsBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .redis_request.Command commands = 1; - */ - public Builder addCommands(redis_request.RedisRequestOuterClass.Command value) { - if (commandsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCommandsIsMutable(); - commands_.add(value); - onChanged(); - } else { - commandsBuilder_.addMessage(value); - } - return this; - } - /** - * repeated .redis_request.Command commands = 1; - */ - public Builder addCommands( - int index, redis_request.RedisRequestOuterClass.Command value) { - if (commandsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureCommandsIsMutable(); - commands_.add(index, value); - onChanged(); - } else { - commandsBuilder_.addMessage(index, value); - } - return this; - } - /** - * repeated .redis_request.Command commands = 1; - */ - public Builder addCommands( - redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { - if (commandsBuilder_ == null) { - ensureCommandsIsMutable(); - commands_.add(builderForValue.build()); - onChanged(); - } else { - commandsBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * repeated .redis_request.Command commands = 1; - */ - public Builder addCommands( - int index, redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { - if (commandsBuilder_ == null) { - ensureCommandsIsMutable(); - commands_.add(index, builderForValue.build()); - onChanged(); - } else { - commandsBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .redis_request.Command commands = 1; - */ - public Builder addAllCommands( - java.lang.Iterable values) { - if (commandsBuilder_ == null) { - ensureCommandsIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, commands_); - onChanged(); - } else { - commandsBuilder_.addAllMessages(values); - } - return this; - } - /** - * repeated .redis_request.Command commands = 1; - */ - public Builder clearCommands() { - if (commandsBuilder_ == null) { - commands_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - } else { - commandsBuilder_.clear(); - } - return this; - } - /** - * repeated .redis_request.Command commands = 1; - */ - public Builder removeCommands(int index) { - if (commandsBuilder_ == null) { - ensureCommandsIsMutable(); - commands_.remove(index); - onChanged(); - } else { - commandsBuilder_.remove(index); - } - return this; - } - /** - * repeated .redis_request.Command commands = 1; - */ - public redis_request.RedisRequestOuterClass.Command.Builder getCommandsBuilder( - int index) { - return getCommandsFieldBuilder().getBuilder(index); - } - /** - * repeated .redis_request.Command commands = 1; - */ - public redis_request.RedisRequestOuterClass.CommandOrBuilder getCommandsOrBuilder( - int index) { - if (commandsBuilder_ == null) { - return commands_.get(index); } else { - return commandsBuilder_.getMessageOrBuilder(index); - } - } - /** - * repeated .redis_request.Command commands = 1; - */ - public java.util.List - getCommandsOrBuilderList() { - if (commandsBuilder_ != null) { - return commandsBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(commands_); - } - } - /** - * repeated .redis_request.Command commands = 1; - */ - public redis_request.RedisRequestOuterClass.Command.Builder addCommandsBuilder() { - return getCommandsFieldBuilder().addBuilder( - redis_request.RedisRequestOuterClass.Command.getDefaultInstance()); - } - /** - * repeated .redis_request.Command commands = 1; - */ - public redis_request.RedisRequestOuterClass.Command.Builder addCommandsBuilder( - int index) { - return getCommandsFieldBuilder().addBuilder( - index, redis_request.RedisRequestOuterClass.Command.getDefaultInstance()); - } - /** - * repeated .redis_request.Command commands = 1; - */ - public java.util.List - getCommandsBuilderList() { - return getCommandsFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command, redis_request.RedisRequestOuterClass.Command.Builder, redis_request.RedisRequestOuterClass.CommandOrBuilder> - getCommandsFieldBuilder() { - if (commandsBuilder_ == null) { - commandsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command, redis_request.RedisRequestOuterClass.Command.Builder, redis_request.RedisRequestOuterClass.CommandOrBuilder>( - commands_, - ((bitField0_ & 0x00000001) != 0), - getParentForChildren(), - isClean()); - commands_ = null; - } - return commandsBuilder_; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:redis_request.Transaction) - } - - // @@protoc_insertion_point(class_scope:redis_request.Transaction) - private static final redis_request.RedisRequestOuterClass.Transaction DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.Transaction(); - } - - public static redis_request.RedisRequestOuterClass.Transaction getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public Transaction parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.Transaction getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface RedisRequestOrBuilder extends - // @@protoc_insertion_point(interface_extends:redis_request.RedisRequest) - com.google.protobuf.MessageOrBuilder { - - /** - * uint32 callback_idx = 1; - * @return The callbackIdx. - */ - int getCallbackIdx(); - - /** - * .redis_request.Command single_command = 2; - * @return Whether the singleCommand field is set. - */ - boolean hasSingleCommand(); - /** - * .redis_request.Command single_command = 2; - * @return The singleCommand. - */ - redis_request.RedisRequestOuterClass.Command getSingleCommand(); - /** - * .redis_request.Command single_command = 2; - */ - redis_request.RedisRequestOuterClass.CommandOrBuilder getSingleCommandOrBuilder(); - - /** - * .redis_request.Transaction transaction = 3; - * @return Whether the transaction field is set. - */ - boolean hasTransaction(); - /** - * .redis_request.Transaction transaction = 3; - * @return The transaction. - */ - redis_request.RedisRequestOuterClass.Transaction getTransaction(); - /** - * .redis_request.Transaction transaction = 3; - */ - redis_request.RedisRequestOuterClass.TransactionOrBuilder getTransactionOrBuilder(); - - /** - * .redis_request.Routes route = 4; - * @return Whether the route field is set. - */ - boolean hasRoute(); - /** - * .redis_request.Routes route = 4; - * @return The route. - */ - redis_request.RedisRequestOuterClass.Routes getRoute(); - /** - * .redis_request.Routes route = 4; - */ - redis_request.RedisRequestOuterClass.RoutesOrBuilder getRouteOrBuilder(); - - redis_request.RedisRequestOuterClass.RedisRequest.CommandCase getCommandCase(); - } - /** - * Protobuf type {@code redis_request.RedisRequest} - */ - public static final class RedisRequest extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:redis_request.RedisRequest) - RedisRequestOrBuilder { - private static final long serialVersionUID = 0L; - // Use RedisRequest.newBuilder() to construct. - private RedisRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private RedisRequest() { - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new RedisRequest(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_RedisRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_RedisRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.RedisRequest.class, redis_request.RedisRequestOuterClass.RedisRequest.Builder.class); - } - - private int commandCase_ = 0; - @SuppressWarnings("serial") - private java.lang.Object command_; - public enum CommandCase - implements com.google.protobuf.Internal.EnumLite, - com.google.protobuf.AbstractMessage.InternalOneOfEnum { - SINGLE_COMMAND(2), - TRANSACTION(3), - COMMAND_NOT_SET(0); - private final int value; - private CommandCase(int value) { - this.value = value; - } - /** - * @param value The number of the enum to look for. - * @return The enum associated with the given number. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static CommandCase valueOf(int value) { - return forNumber(value); - } - - public static CommandCase forNumber(int value) { - switch (value) { - case 2: return SINGLE_COMMAND; - case 3: return TRANSACTION; - case 0: return COMMAND_NOT_SET; - default: return null; - } - } - public int getNumber() { - return this.value; - } - }; - - public CommandCase - getCommandCase() { - return CommandCase.forNumber( - commandCase_); - } - - public static final int CALLBACK_IDX_FIELD_NUMBER = 1; - private int callbackIdx_ = 0; - /** - * uint32 callback_idx = 1; - * @return The callbackIdx. - */ - @java.lang.Override - public int getCallbackIdx() { - return callbackIdx_; - } - - public static final int SINGLE_COMMAND_FIELD_NUMBER = 2; - /** - * .redis_request.Command single_command = 2; - * @return Whether the singleCommand field is set. - */ - @java.lang.Override - public boolean hasSingleCommand() { - return commandCase_ == 2; - } - /** - * .redis_request.Command single_command = 2; - * @return The singleCommand. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command getSingleCommand() { - if (commandCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command) command_; - } - return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } - /** - * .redis_request.Command single_command = 2; - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.CommandOrBuilder getSingleCommandOrBuilder() { - if (commandCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command) command_; - } - return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } - - public static final int TRANSACTION_FIELD_NUMBER = 3; - /** - * .redis_request.Transaction transaction = 3; - * @return Whether the transaction field is set. - */ - @java.lang.Override - public boolean hasTransaction() { - return commandCase_ == 3; - } - /** - * .redis_request.Transaction transaction = 3; - * @return The transaction. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Transaction getTransaction() { - if (commandCase_ == 3) { - return (redis_request.RedisRequestOuterClass.Transaction) command_; - } - return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } - /** - * .redis_request.Transaction transaction = 3; - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.TransactionOrBuilder getTransactionOrBuilder() { - if (commandCase_ == 3) { - return (redis_request.RedisRequestOuterClass.Transaction) command_; - } - return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } - - public static final int ROUTE_FIELD_NUMBER = 4; - private redis_request.RedisRequestOuterClass.Routes route_; - /** - * .redis_request.Routes route = 4; - * @return Whether the route field is set. - */ - @java.lang.Override - public boolean hasRoute() { - return route_ != null; - } - /** - * .redis_request.Routes route = 4; - * @return The route. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Routes getRoute() { - return route_ == null ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() : route_; - } - /** - * .redis_request.Routes route = 4; - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.RoutesOrBuilder getRouteOrBuilder() { - return route_ == null ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() : route_; - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (callbackIdx_ != 0) { - output.writeUInt32(1, callbackIdx_); - } - if (commandCase_ == 2) { - output.writeMessage(2, (redis_request.RedisRequestOuterClass.Command) command_); - } - if (commandCase_ == 3) { - output.writeMessage(3, (redis_request.RedisRequestOuterClass.Transaction) command_); - } - if (route_ != null) { - output.writeMessage(4, getRoute()); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (callbackIdx_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(1, callbackIdx_); - } - if (commandCase_ == 2) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, (redis_request.RedisRequestOuterClass.Command) command_); - } - if (commandCase_ == 3) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, (redis_request.RedisRequestOuterClass.Transaction) command_); - } - if (route_ != null) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, getRoute()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof redis_request.RedisRequestOuterClass.RedisRequest)) { - return super.equals(obj); - } - redis_request.RedisRequestOuterClass.RedisRequest other = (redis_request.RedisRequestOuterClass.RedisRequest) obj; - - if (getCallbackIdx() - != other.getCallbackIdx()) return false; - if (hasRoute() != other.hasRoute()) return false; - if (hasRoute()) { - if (!getRoute() - .equals(other.getRoute())) return false; - } - if (!getCommandCase().equals(other.getCommandCase())) return false; - switch (commandCase_) { - case 2: - if (!getSingleCommand() - .equals(other.getSingleCommand())) return false; - break; - case 3: - if (!getTransaction() - .equals(other.getTransaction())) return false; - break; - case 0: - default: - } - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + CALLBACK_IDX_FIELD_NUMBER; - hash = (53 * hash) + getCallbackIdx(); - if (hasRoute()) { - hash = (37 * hash) + ROUTE_FIELD_NUMBER; - hash = (53 * hash) + getRoute().hashCode(); - } - switch (commandCase_) { - case 2: - hash = (37 * hash) + SINGLE_COMMAND_FIELD_NUMBER; - hash = (53 * hash) + getSingleCommand().hashCode(); - break; - case 3: - hash = (37 * hash) + TRANSACTION_FIELD_NUMBER; - hash = (53 * hash) + getTransaction().hashCode(); - break; - case 0: - default: - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static redis_request.RedisRequestOuterClass.RedisRequest parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(redis_request.RedisRequestOuterClass.RedisRequest prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code redis_request.RedisRequest} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:redis_request.RedisRequest) - redis_request.RedisRequestOuterClass.RedisRequestOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_RedisRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_RedisRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - redis_request.RedisRequestOuterClass.RedisRequest.class, redis_request.RedisRequestOuterClass.RedisRequest.Builder.class); - } - - // Construct using redis_request.RedisRequestOuterClass.RedisRequest.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - callbackIdx_ = 0; - if (singleCommandBuilder_ != null) { - singleCommandBuilder_.clear(); - } - if (transactionBuilder_ != null) { - transactionBuilder_.clear(); - } - route_ = null; - if (routeBuilder_ != null) { - routeBuilder_.dispose(); - routeBuilder_ = null; - } - commandCase_ = 0; - command_ = null; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return redis_request.RedisRequestOuterClass.internal_static_redis_request_RedisRequest_descriptor; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.RedisRequest getDefaultInstanceForType() { - return redis_request.RedisRequestOuterClass.RedisRequest.getDefaultInstance(); - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.RedisRequest build() { - redis_request.RedisRequestOuterClass.RedisRequest result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.RedisRequest buildPartial() { - redis_request.RedisRequestOuterClass.RedisRequest result = new redis_request.RedisRequestOuterClass.RedisRequest(this); - if (bitField0_ != 0) { buildPartial0(result); } - buildPartialOneofs(result); - onBuilt(); - return result; - } - - private void buildPartial0(redis_request.RedisRequestOuterClass.RedisRequest result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.callbackIdx_ = callbackIdx_; - } - if (((from_bitField0_ & 0x00000008) != 0)) { - result.route_ = routeBuilder_ == null - ? route_ - : routeBuilder_.build(); - } - } - - private void buildPartialOneofs(redis_request.RedisRequestOuterClass.RedisRequest result) { - result.commandCase_ = commandCase_; - result.command_ = this.command_; - if (commandCase_ == 2 && - singleCommandBuilder_ != null) { - result.command_ = singleCommandBuilder_.build(); - } - if (commandCase_ == 3 && - transactionBuilder_ != null) { - result.command_ = transactionBuilder_.build(); - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof redis_request.RedisRequestOuterClass.RedisRequest) { - return mergeFrom((redis_request.RedisRequestOuterClass.RedisRequest)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(redis_request.RedisRequestOuterClass.RedisRequest other) { - if (other == redis_request.RedisRequestOuterClass.RedisRequest.getDefaultInstance()) return this; - if (other.getCallbackIdx() != 0) { - setCallbackIdx(other.getCallbackIdx()); - } - if (other.hasRoute()) { - mergeRoute(other.getRoute()); - } - switch (other.getCommandCase()) { - case SINGLE_COMMAND: { - mergeSingleCommand(other.getSingleCommand()); - break; - } - case TRANSACTION: { - mergeTransaction(other.getTransaction()); - break; - } - case COMMAND_NOT_SET: { - break; - } - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - callbackIdx_ = input.readUInt32(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 18: { - input.readMessage( - getSingleCommandFieldBuilder().getBuilder(), - extensionRegistry); - commandCase_ = 2; - break; - } // case 18 - case 26: { - input.readMessage( - getTransactionFieldBuilder().getBuilder(), - extensionRegistry); - commandCase_ = 3; - break; - } // case 26 - case 34: { - input.readMessage( - getRouteFieldBuilder().getBuilder(), - extensionRegistry); - bitField0_ |= 0x00000008; - break; - } // case 34 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int commandCase_ = 0; - private java.lang.Object command_; - public CommandCase - getCommandCase() { - return CommandCase.forNumber( - commandCase_); - } - - public Builder clearCommand() { - commandCase_ = 0; - command_ = null; - onChanged(); - return this; - } - - private int bitField0_; - - private int callbackIdx_ ; - /** - * uint32 callback_idx = 1; - * @return The callbackIdx. - */ - @java.lang.Override - public int getCallbackIdx() { - return callbackIdx_; - } - /** - * uint32 callback_idx = 1; - * @param value The callbackIdx to set. - * @return This builder for chaining. - */ - public Builder setCallbackIdx(int value) { - - callbackIdx_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * uint32 callback_idx = 1; - * @return This builder for chaining. - */ - public Builder clearCallbackIdx() { - bitField0_ = (bitField0_ & ~0x00000001); - callbackIdx_ = 0; - onChanged(); - return this; - } - - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command, redis_request.RedisRequestOuterClass.Command.Builder, redis_request.RedisRequestOuterClass.CommandOrBuilder> singleCommandBuilder_; - /** - * .redis_request.Command single_command = 2; - * @return Whether the singleCommand field is set. - */ - @java.lang.Override - public boolean hasSingleCommand() { - return commandCase_ == 2; - } - /** - * .redis_request.Command single_command = 2; - * @return The singleCommand. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Command getSingleCommand() { - if (singleCommandBuilder_ == null) { - if (commandCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command) command_; - } - return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } else { - if (commandCase_ == 2) { - return singleCommandBuilder_.getMessage(); - } - return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } - } - /** - * .redis_request.Command single_command = 2; - */ - public Builder setSingleCommand(redis_request.RedisRequestOuterClass.Command value) { - if (singleCommandBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - command_ = value; - onChanged(); - } else { - singleCommandBuilder_.setMessage(value); - } - commandCase_ = 2; - return this; - } - /** - * .redis_request.Command single_command = 2; - */ - public Builder setSingleCommand( - redis_request.RedisRequestOuterClass.Command.Builder builderForValue) { - if (singleCommandBuilder_ == null) { - command_ = builderForValue.build(); - onChanged(); - } else { - singleCommandBuilder_.setMessage(builderForValue.build()); - } - commandCase_ = 2; - return this; - } - /** - * .redis_request.Command single_command = 2; - */ - public Builder mergeSingleCommand(redis_request.RedisRequestOuterClass.Command value) { - if (singleCommandBuilder_ == null) { - if (commandCase_ == 2 && - command_ != redis_request.RedisRequestOuterClass.Command.getDefaultInstance()) { - command_ = redis_request.RedisRequestOuterClass.Command.newBuilder((redis_request.RedisRequestOuterClass.Command) command_) - .mergeFrom(value).buildPartial(); - } else { - command_ = value; - } - onChanged(); - } else { - if (commandCase_ == 2) { - singleCommandBuilder_.mergeFrom(value); - } else { - singleCommandBuilder_.setMessage(value); - } - } - commandCase_ = 2; - return this; - } - /** - * .redis_request.Command single_command = 2; - */ - public Builder clearSingleCommand() { - if (singleCommandBuilder_ == null) { - if (commandCase_ == 2) { - commandCase_ = 0; - command_ = null; - onChanged(); - } - } else { - if (commandCase_ == 2) { - commandCase_ = 0; - command_ = null; - } - singleCommandBuilder_.clear(); - } - return this; - } - /** - * .redis_request.Command single_command = 2; - */ - public redis_request.RedisRequestOuterClass.Command.Builder getSingleCommandBuilder() { - return getSingleCommandFieldBuilder().getBuilder(); - } - /** - * .redis_request.Command single_command = 2; - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.CommandOrBuilder getSingleCommandOrBuilder() { - if ((commandCase_ == 2) && (singleCommandBuilder_ != null)) { - return singleCommandBuilder_.getMessageOrBuilder(); - } else { - if (commandCase_ == 2) { - return (redis_request.RedisRequestOuterClass.Command) command_; - } - return redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } - } - /** - * .redis_request.Command single_command = 2; - */ - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command, redis_request.RedisRequestOuterClass.Command.Builder, redis_request.RedisRequestOuterClass.CommandOrBuilder> - getSingleCommandFieldBuilder() { - if (singleCommandBuilder_ == null) { - if (!(commandCase_ == 2)) { - command_ = redis_request.RedisRequestOuterClass.Command.getDefaultInstance(); - } - singleCommandBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Command, redis_request.RedisRequestOuterClass.Command.Builder, redis_request.RedisRequestOuterClass.CommandOrBuilder>( - (redis_request.RedisRequestOuterClass.Command) command_, - getParentForChildren(), - isClean()); - command_ = null; - } - commandCase_ = 2; - onChanged(); - return singleCommandBuilder_; - } - - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Transaction, redis_request.RedisRequestOuterClass.Transaction.Builder, redis_request.RedisRequestOuterClass.TransactionOrBuilder> transactionBuilder_; - /** - * .redis_request.Transaction transaction = 3; - * @return Whether the transaction field is set. - */ - @java.lang.Override - public boolean hasTransaction() { - return commandCase_ == 3; - } - /** - * .redis_request.Transaction transaction = 3; - * @return The transaction. - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.Transaction getTransaction() { - if (transactionBuilder_ == null) { - if (commandCase_ == 3) { - return (redis_request.RedisRequestOuterClass.Transaction) command_; - } - return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } else { - if (commandCase_ == 3) { - return transactionBuilder_.getMessage(); - } - return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } - } - /** - * .redis_request.Transaction transaction = 3; - */ - public Builder setTransaction(redis_request.RedisRequestOuterClass.Transaction value) { - if (transactionBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - command_ = value; - onChanged(); - } else { - transactionBuilder_.setMessage(value); - } - commandCase_ = 3; - return this; - } - /** - * .redis_request.Transaction transaction = 3; - */ - public Builder setTransaction( - redis_request.RedisRequestOuterClass.Transaction.Builder builderForValue) { - if (transactionBuilder_ == null) { - command_ = builderForValue.build(); - onChanged(); - } else { - transactionBuilder_.setMessage(builderForValue.build()); - } - commandCase_ = 3; - return this; - } - /** - * .redis_request.Transaction transaction = 3; - */ - public Builder mergeTransaction(redis_request.RedisRequestOuterClass.Transaction value) { - if (transactionBuilder_ == null) { - if (commandCase_ == 3 && - command_ != redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance()) { - command_ = redis_request.RedisRequestOuterClass.Transaction.newBuilder((redis_request.RedisRequestOuterClass.Transaction) command_) - .mergeFrom(value).buildPartial(); - } else { - command_ = value; - } - onChanged(); - } else { - if (commandCase_ == 3) { - transactionBuilder_.mergeFrom(value); - } else { - transactionBuilder_.setMessage(value); - } - } - commandCase_ = 3; - return this; - } - /** - * .redis_request.Transaction transaction = 3; - */ - public Builder clearTransaction() { - if (transactionBuilder_ == null) { - if (commandCase_ == 3) { - commandCase_ = 0; - command_ = null; - onChanged(); - } - } else { - if (commandCase_ == 3) { - commandCase_ = 0; - command_ = null; - } - transactionBuilder_.clear(); - } - return this; - } - /** - * .redis_request.Transaction transaction = 3; - */ - public redis_request.RedisRequestOuterClass.Transaction.Builder getTransactionBuilder() { - return getTransactionFieldBuilder().getBuilder(); - } - /** - * .redis_request.Transaction transaction = 3; - */ - @java.lang.Override - public redis_request.RedisRequestOuterClass.TransactionOrBuilder getTransactionOrBuilder() { - if ((commandCase_ == 3) && (transactionBuilder_ != null)) { - return transactionBuilder_.getMessageOrBuilder(); - } else { - if (commandCase_ == 3) { - return (redis_request.RedisRequestOuterClass.Transaction) command_; - } - return redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } - } - /** - * .redis_request.Transaction transaction = 3; - */ - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Transaction, redis_request.RedisRequestOuterClass.Transaction.Builder, redis_request.RedisRequestOuterClass.TransactionOrBuilder> - getTransactionFieldBuilder() { - if (transactionBuilder_ == null) { - if (!(commandCase_ == 3)) { - command_ = redis_request.RedisRequestOuterClass.Transaction.getDefaultInstance(); - } - transactionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Transaction, redis_request.RedisRequestOuterClass.Transaction.Builder, redis_request.RedisRequestOuterClass.TransactionOrBuilder>( - (redis_request.RedisRequestOuterClass.Transaction) command_, - getParentForChildren(), - isClean()); - command_ = null; - } - commandCase_ = 3; - onChanged(); - return transactionBuilder_; - } - - private redis_request.RedisRequestOuterClass.Routes route_; - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Routes, redis_request.RedisRequestOuterClass.Routes.Builder, redis_request.RedisRequestOuterClass.RoutesOrBuilder> routeBuilder_; - /** - * .redis_request.Routes route = 4; - * @return Whether the route field is set. - */ - public boolean hasRoute() { - return ((bitField0_ & 0x00000008) != 0); - } - /** - * .redis_request.Routes route = 4; - * @return The route. - */ - public redis_request.RedisRequestOuterClass.Routes getRoute() { - if (routeBuilder_ == null) { - return route_ == null ? redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() : route_; - } else { - return routeBuilder_.getMessage(); - } - } - /** - * .redis_request.Routes route = 4; - */ - public Builder setRoute(redis_request.RedisRequestOuterClass.Routes value) { - if (routeBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - route_ = value; - } else { - routeBuilder_.setMessage(value); - } - bitField0_ |= 0x00000008; - onChanged(); - return this; - } - /** - * .redis_request.Routes route = 4; - */ - public Builder setRoute( - redis_request.RedisRequestOuterClass.Routes.Builder builderForValue) { - if (routeBuilder_ == null) { - route_ = builderForValue.build(); - } else { - routeBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000008; - onChanged(); - return this; - } - /** - * .redis_request.Routes route = 4; - */ - public Builder mergeRoute(redis_request.RedisRequestOuterClass.Routes value) { - if (routeBuilder_ == null) { - if (((bitField0_ & 0x00000008) != 0) && - route_ != null && - route_ != redis_request.RedisRequestOuterClass.Routes.getDefaultInstance()) { - getRouteBuilder().mergeFrom(value); - } else { - route_ = value; - } - } else { - routeBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000008; - onChanged(); - return this; - } - /** - * .redis_request.Routes route = 4; - */ - public Builder clearRoute() { - bitField0_ = (bitField0_ & ~0x00000008); - route_ = null; - if (routeBuilder_ != null) { - routeBuilder_.dispose(); - routeBuilder_ = null; - } - onChanged(); - return this; - } - /** - * .redis_request.Routes route = 4; - */ - public redis_request.RedisRequestOuterClass.Routes.Builder getRouteBuilder() { - bitField0_ |= 0x00000008; - onChanged(); - return getRouteFieldBuilder().getBuilder(); - } - /** - * .redis_request.Routes route = 4; - */ - public redis_request.RedisRequestOuterClass.RoutesOrBuilder getRouteOrBuilder() { - if (routeBuilder_ != null) { - return routeBuilder_.getMessageOrBuilder(); - } else { - return route_ == null ? - redis_request.RedisRequestOuterClass.Routes.getDefaultInstance() : route_; - } - } - /** - * .redis_request.Routes route = 4; - */ - private com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Routes, redis_request.RedisRequestOuterClass.Routes.Builder, redis_request.RedisRequestOuterClass.RoutesOrBuilder> - getRouteFieldBuilder() { - if (routeBuilder_ == null) { - routeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - redis_request.RedisRequestOuterClass.Routes, redis_request.RedisRequestOuterClass.Routes.Builder, redis_request.RedisRequestOuterClass.RoutesOrBuilder>( - getRoute(), - getParentForChildren(), - isClean()); - route_ = null; - } - return routeBuilder_; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:redis_request.RedisRequest) - } - - // @@protoc_insertion_point(class_scope:redis_request.RedisRequest) - private static final redis_request.RedisRequestOuterClass.RedisRequest DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new redis_request.RedisRequestOuterClass.RedisRequest(); - } - - public static redis_request.RedisRequestOuterClass.RedisRequest getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RedisRequest parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public redis_request.RedisRequestOuterClass.RedisRequest getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_SlotIdRoute_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_SlotIdRoute_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_SlotKeyRoute_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_SlotKeyRoute_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_Routes_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_Routes_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_Command_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_Command_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_Command_ArgsArray_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_Command_ArgsArray_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_Transaction_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_Transaction_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_redis_request_RedisRequest_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_redis_request_RedisRequest_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\034protobuf/redis_request.proto\022\rredis_re" + - "quest\"K\n\013SlotIdRoute\022+\n\tslot_type\030\001 \001(\0162" + - "\030.redis_request.SlotTypes\022\017\n\007slot_id\030\002 \001" + - "(\005\"M\n\014SlotKeyRoute\022+\n\tslot_type\030\001 \001(\0162\030." + - "redis_request.SlotTypes\022\020\n\010slot_key\030\002 \001(" + - "\t\"\263\001\n\006Routes\0224\n\rsimple_routes\030\001 \001(\0162\033.re" + - "dis_request.SimpleRoutesH\000\0225\n\016slot_key_r" + - "oute\030\002 \001(\0132\033.redis_request.SlotKeyRouteH" + - "\000\0223\n\rslot_id_route\030\003 \001(\0132\032.redis_request" + - ".SlotIdRouteH\000B\007\n\005value\"\262\001\n\007Command\0220\n\014r" + - "equest_type\030\001 \001(\0162\032.redis_request.Reques" + - "tType\0226\n\nargs_array\030\002 \001(\0132 .redis_reques" + - "t.Command.ArgsArrayH\000\022\032\n\020args_vec_pointe" + - "r\030\003 \001(\004H\000\032\031\n\tArgsArray\022\014\n\004args\030\001 \003(\tB\006\n\004" + - "args\"7\n\013Transaction\022(\n\010commands\030\001 \003(\0132\026." + - "redis_request.Command\"\272\001\n\014RedisRequest\022\024" + - "\n\014callback_idx\030\001 \001(\r\0220\n\016single_command\030\002" + - " \001(\0132\026.redis_request.CommandH\000\0221\n\013transa" + - "ction\030\003 \001(\0132\032.redis_request.TransactionH" + - "\000\022$\n\005route\030\004 \001(\0132\025.redis_request.RoutesB" + - "\t\n\007command*:\n\014SimpleRoutes\022\014\n\010AllNodes\020\000" + - "\022\020\n\014AllPrimaries\020\001\022\n\n\006Random\020\002*%\n\tSlotTy" + - "pes\022\013\n\007Primary\020\000\022\013\n\007Replica\020\001*\354\006\n\013Reques" + - "tType\022\022\n\016InvalidRequest\020\000\022\021\n\rCustomComma" + - "nd\020\001\022\r\n\tGetString\020\002\022\r\n\tSetString\020\003\022\010\n\004Pi" + - "ng\020\004\022\010\n\004Info\020\005\022\007\n\003Del\020\006\022\n\n\006Select\020\007\022\r\n\tC" + - "onfigGet\020\010\022\r\n\tConfigSet\020\t\022\023\n\017ConfigReset" + - "Stat\020\n\022\021\n\rConfigRewrite\020\013\022\021\n\rClientGetNa" + - "me\020\014\022\022\n\016ClientGetRedir\020\r\022\014\n\010ClientId\020\016\022\016" + - "\n\nClientInfo\020\017\022\016\n\nClientKill\020\020\022\016\n\nClient" + - "List\020\021\022\021\n\rClientNoEvict\020\022\022\021\n\rClientNoTou" + - "ch\020\023\022\017\n\013ClientPause\020\024\022\017\n\013ClientReply\020\025\022\021" + - "\n\rClientSetInfo\020\026\022\021\n\rClientSetName\020\027\022\021\n\r" + - "ClientUnblock\020\030\022\021\n\rClientUnpause\020\031\022\n\n\006Ex" + - "pire\020\032\022\013\n\007HashSet\020\033\022\013\n\007HashGet\020\034\022\013\n\007Hash" + - "Del\020\035\022\016\n\nHashExists\020\036\022\010\n\004MGet\020\037\022\010\n\004MSet\020" + - " \022\010\n\004Incr\020!\022\n\n\006IncrBy\020\"\022\010\n\004Decr\020#\022\017\n\013Inc" + - "rByFloat\020$\022\n\n\006DecrBy\020%\022\016\n\nHashGetAll\020&\022\014" + - "\n\010HashMSet\020\'\022\014\n\010HashMGet\020(\022\016\n\nHashIncrBy" + - "\020)\022\023\n\017HashIncrByFloat\020*\022\t\n\005LPush\020+\022\010\n\004LP" + - "op\020,\022\t\n\005RPush\020-\022\010\n\004RPop\020.\022\010\n\004LLen\020/\022\010\n\004L" + - "Rem\0200\022\n\n\006LRange\0201\022\t\n\005LTrim\0202\022\010\n\004SAdd\0203\022\010" + - "\n\004SRem\0204\022\014\n\010SMembers\0205\022\t\n\005SCard\0206\022\r\n\tPEx" + - "pireAt\0207\022\013\n\007PExpire\0208\022\014\n\010ExpireAt\0209\022\n\n\006E" + - "xists\020:\022\n\n\006Unlink\020;\022\007\n\003TTL\020Unspecified = 0; - */ - Unspecified(0), - /** - * ExecAbort = 1; - */ - ExecAbort(1), - /** - * Timeout = 2; - */ - Timeout(2), - /** - * Disconnect = 3; - */ - Disconnect(3), - UNRECOGNIZED(-1), - ; - - /** - * Unspecified = 0; - */ - public static final int Unspecified_VALUE = 0; - /** - * ExecAbort = 1; - */ - public static final int ExecAbort_VALUE = 1; - /** - * Timeout = 2; - */ - public static final int Timeout_VALUE = 2; - /** - * Disconnect = 3; - */ - public static final int Disconnect_VALUE = 3; - - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static RequestErrorType valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static RequestErrorType forNumber(int value) { - switch (value) { - case 0: return Unspecified; - case 1: return ExecAbort; - case 2: return Timeout; - case 3: return Disconnect; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - RequestErrorType> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public RequestErrorType findValueByNumber(int number) { - return RequestErrorType.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return response.ResponseOuterClass.getDescriptor().getEnumTypes().get(0); - } - - private static final RequestErrorType[] VALUES = values(); - - public static RequestErrorType valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private RequestErrorType(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:response.RequestErrorType) - } - - /** - * Protobuf enum {@code response.ConstantResponse} - */ - public enum ConstantResponse - implements com.google.protobuf.ProtocolMessageEnum { - /** - * OK = 0; - */ - OK(0), - UNRECOGNIZED(-1), - ; - - /** - * OK = 0; - */ - public static final int OK_VALUE = 0; - - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static ConstantResponse valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static ConstantResponse forNumber(int value) { - switch (value) { - case 0: return OK; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - ConstantResponse> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public ConstantResponse findValueByNumber(int number) { - return ConstantResponse.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return response.ResponseOuterClass.getDescriptor().getEnumTypes().get(1); - } - - private static final ConstantResponse[] VALUES = values(); - - public static ConstantResponse valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private ConstantResponse(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:response.ConstantResponse) - } - - public interface RequestErrorOrBuilder extends - // @@protoc_insertion_point(interface_extends:response.RequestError) - com.google.protobuf.MessageOrBuilder { - - /** - * .response.RequestErrorType type = 1; - * @return The enum numeric value on the wire for type. - */ - int getTypeValue(); - /** - * .response.RequestErrorType type = 1; - * @return The type. - */ - response.ResponseOuterClass.RequestErrorType getType(); - - /** - * string message = 2; - * @return The message. - */ - java.lang.String getMessage(); - /** - * string message = 2; - * @return The bytes for message. - */ - com.google.protobuf.ByteString - getMessageBytes(); - } - /** - * Protobuf type {@code response.RequestError} - */ - public static final class RequestError extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:response.RequestError) - RequestErrorOrBuilder { - private static final long serialVersionUID = 0L; - // Use RequestError.newBuilder() to construct. - private RequestError(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private RequestError() { - type_ = 0; - message_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new RequestError(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return response.ResponseOuterClass.internal_static_response_RequestError_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return response.ResponseOuterClass.internal_static_response_RequestError_fieldAccessorTable - .ensureFieldAccessorsInitialized( - response.ResponseOuterClass.RequestError.class, response.ResponseOuterClass.RequestError.Builder.class); - } - - public static final int TYPE_FIELD_NUMBER = 1; - private int type_ = 0; - /** - * .response.RequestErrorType type = 1; - * @return The enum numeric value on the wire for type. - */ - @java.lang.Override public int getTypeValue() { - return type_; - } - /** - * .response.RequestErrorType type = 1; - * @return The type. - */ - @java.lang.Override public response.ResponseOuterClass.RequestErrorType getType() { - response.ResponseOuterClass.RequestErrorType result = response.ResponseOuterClass.RequestErrorType.forNumber(type_); - return result == null ? response.ResponseOuterClass.RequestErrorType.UNRECOGNIZED : result; - } - - public static final int MESSAGE_FIELD_NUMBER = 2; - @SuppressWarnings("serial") - private volatile java.lang.Object message_ = ""; - /** - * string message = 2; - * @return The message. - */ - @java.lang.Override - public java.lang.String getMessage() { - java.lang.Object ref = message_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - message_ = s; - return s; - } - } - /** - * string message = 2; - * @return The bytes for message. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getMessageBytes() { - java.lang.Object ref = message_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - message_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (type_ != response.ResponseOuterClass.RequestErrorType.Unspecified.getNumber()) { - output.writeEnum(1, type_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, message_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (type_ != response.ResponseOuterClass.RequestErrorType.Unspecified.getNumber()) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(1, type_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, message_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof response.ResponseOuterClass.RequestError)) { - return super.equals(obj); - } - response.ResponseOuterClass.RequestError other = (response.ResponseOuterClass.RequestError) obj; - - if (type_ != other.type_) return false; - if (!getMessage() - .equals(other.getMessage())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + TYPE_FIELD_NUMBER; - hash = (53 * hash) + type_; - hash = (37 * hash) + MESSAGE_FIELD_NUMBER; - hash = (53 * hash) + getMessage().hashCode(); - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static response.ResponseOuterClass.RequestError parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static response.ResponseOuterClass.RequestError parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static response.ResponseOuterClass.RequestError parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static response.ResponseOuterClass.RequestError parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static response.ResponseOuterClass.RequestError parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static response.ResponseOuterClass.RequestError parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static response.ResponseOuterClass.RequestError parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static response.ResponseOuterClass.RequestError parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static response.ResponseOuterClass.RequestError parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static response.ResponseOuterClass.RequestError parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static response.ResponseOuterClass.RequestError parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static response.ResponseOuterClass.RequestError parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(response.ResponseOuterClass.RequestError prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code response.RequestError} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:response.RequestError) - response.ResponseOuterClass.RequestErrorOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return response.ResponseOuterClass.internal_static_response_RequestError_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return response.ResponseOuterClass.internal_static_response_RequestError_fieldAccessorTable - .ensureFieldAccessorsInitialized( - response.ResponseOuterClass.RequestError.class, response.ResponseOuterClass.RequestError.Builder.class); - } - - // Construct using response.ResponseOuterClass.RequestError.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - type_ = 0; - message_ = ""; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return response.ResponseOuterClass.internal_static_response_RequestError_descriptor; - } - - @java.lang.Override - public response.ResponseOuterClass.RequestError getDefaultInstanceForType() { - return response.ResponseOuterClass.RequestError.getDefaultInstance(); - } - - @java.lang.Override - public response.ResponseOuterClass.RequestError build() { - response.ResponseOuterClass.RequestError result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public response.ResponseOuterClass.RequestError buildPartial() { - response.ResponseOuterClass.RequestError result = new response.ResponseOuterClass.RequestError(this); - if (bitField0_ != 0) { buildPartial0(result); } - onBuilt(); - return result; - } - - private void buildPartial0(response.ResponseOuterClass.RequestError result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.type_ = type_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.message_ = message_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof response.ResponseOuterClass.RequestError) { - return mergeFrom((response.ResponseOuterClass.RequestError)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(response.ResponseOuterClass.RequestError other) { - if (other == response.ResponseOuterClass.RequestError.getDefaultInstance()) return this; - if (other.type_ != 0) { - setTypeValue(other.getTypeValue()); - } - if (!other.getMessage().isEmpty()) { - message_ = other.message_; - bitField0_ |= 0x00000002; - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - type_ = input.readEnum(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 18: { - message_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000002; - break; - } // case 18 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int bitField0_; - - private int type_ = 0; - /** - * .response.RequestErrorType type = 1; - * @return The enum numeric value on the wire for type. - */ - @java.lang.Override public int getTypeValue() { - return type_; - } - /** - * .response.RequestErrorType type = 1; - * @param value The enum numeric value on the wire for type to set. - * @return This builder for chaining. - */ - public Builder setTypeValue(int value) { - type_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * .response.RequestErrorType type = 1; - * @return The type. - */ - @java.lang.Override - public response.ResponseOuterClass.RequestErrorType getType() { - response.ResponseOuterClass.RequestErrorType result = response.ResponseOuterClass.RequestErrorType.forNumber(type_); - return result == null ? response.ResponseOuterClass.RequestErrorType.UNRECOGNIZED : result; - } - /** - * .response.RequestErrorType type = 1; - * @param value The type to set. - * @return This builder for chaining. - */ - public Builder setType(response.ResponseOuterClass.RequestErrorType value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - type_ = value.getNumber(); - onChanged(); - return this; - } - /** - * .response.RequestErrorType type = 1; - * @return This builder for chaining. - */ - public Builder clearType() { - bitField0_ = (bitField0_ & ~0x00000001); - type_ = 0; - onChanged(); - return this; - } - - private java.lang.Object message_ = ""; - /** - * string message = 2; - * @return The message. - */ - public java.lang.String getMessage() { - java.lang.Object ref = message_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - message_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string message = 2; - * @return The bytes for message. - */ - public com.google.protobuf.ByteString - getMessageBytes() { - java.lang.Object ref = message_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - message_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string message = 2; - * @param value The message to set. - * @return This builder for chaining. - */ - public Builder setMessage( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - message_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - /** - * string message = 2; - * @return This builder for chaining. - */ - public Builder clearMessage() { - message_ = getDefaultInstance().getMessage(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - return this; - } - /** - * string message = 2; - * @param value The bytes for message to set. - * @return This builder for chaining. - */ - public Builder setMessageBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - message_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:response.RequestError) - } - - // @@protoc_insertion_point(class_scope:response.RequestError) - private static final response.ResponseOuterClass.RequestError DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new response.ResponseOuterClass.RequestError(); - } - - public static response.ResponseOuterClass.RequestError getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public RequestError parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public response.ResponseOuterClass.RequestError getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface ResponseOrBuilder extends - // @@protoc_insertion_point(interface_extends:response.Response) - com.google.protobuf.MessageOrBuilder { - - /** - * uint32 callback_idx = 1; - * @return The callbackIdx. - */ - int getCallbackIdx(); - - /** - * uint64 resp_pointer = 2; - * @return Whether the respPointer field is set. - */ - boolean hasRespPointer(); - /** - * uint64 resp_pointer = 2; - * @return The respPointer. - */ - long getRespPointer(); - - /** - * .response.ConstantResponse constant_response = 3; - * @return Whether the constantResponse field is set. - */ - boolean hasConstantResponse(); - /** - * .response.ConstantResponse constant_response = 3; - * @return The enum numeric value on the wire for constantResponse. - */ - int getConstantResponseValue(); - /** - * .response.ConstantResponse constant_response = 3; - * @return The constantResponse. - */ - response.ResponseOuterClass.ConstantResponse getConstantResponse(); - - /** - * .response.RequestError request_error = 4; - * @return Whether the requestError field is set. - */ - boolean hasRequestError(); - /** - * .response.RequestError request_error = 4; - * @return The requestError. - */ - response.ResponseOuterClass.RequestError getRequestError(); - /** - * .response.RequestError request_error = 4; - */ - response.ResponseOuterClass.RequestErrorOrBuilder getRequestErrorOrBuilder(); - - /** - * string closing_error = 5; - * @return Whether the closingError field is set. - */ - boolean hasClosingError(); - /** - * string closing_error = 5; - * @return The closingError. - */ - java.lang.String getClosingError(); - /** - * string closing_error = 5; - * @return The bytes for closingError. - */ - com.google.protobuf.ByteString - getClosingErrorBytes(); - - response.ResponseOuterClass.Response.ValueCase getValueCase(); - } - /** - * Protobuf type {@code response.Response} - */ - public static final class Response extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:response.Response) - ResponseOrBuilder { - private static final long serialVersionUID = 0L; - // Use Response.newBuilder() to construct. - private Response(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private Response() { - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new Response(); - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return response.ResponseOuterClass.internal_static_response_Response_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return response.ResponseOuterClass.internal_static_response_Response_fieldAccessorTable - .ensureFieldAccessorsInitialized( - response.ResponseOuterClass.Response.class, response.ResponseOuterClass.Response.Builder.class); - } - - private int valueCase_ = 0; - @SuppressWarnings("serial") - private java.lang.Object value_; - public enum ValueCase - implements com.google.protobuf.Internal.EnumLite, - com.google.protobuf.AbstractMessage.InternalOneOfEnum { - RESP_POINTER(2), - CONSTANT_RESPONSE(3), - REQUEST_ERROR(4), - CLOSING_ERROR(5), - VALUE_NOT_SET(0); - private final int value; - private ValueCase(int value) { - this.value = value; - } - /** - * @param value The number of the enum to look for. - * @return The enum associated with the given number. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static ValueCase valueOf(int value) { - return forNumber(value); - } - - public static ValueCase forNumber(int value) { - switch (value) { - case 2: return RESP_POINTER; - case 3: return CONSTANT_RESPONSE; - case 4: return REQUEST_ERROR; - case 5: return CLOSING_ERROR; - case 0: return VALUE_NOT_SET; - default: return null; - } - } - public int getNumber() { - return this.value; - } - }; - - public ValueCase - getValueCase() { - return ValueCase.forNumber( - valueCase_); - } - - public static final int CALLBACK_IDX_FIELD_NUMBER = 1; - private int callbackIdx_ = 0; - /** - * uint32 callback_idx = 1; - * @return The callbackIdx. - */ - @java.lang.Override - public int getCallbackIdx() { - return callbackIdx_; - } - - public static final int RESP_POINTER_FIELD_NUMBER = 2; - /** - * uint64 resp_pointer = 2; - * @return Whether the respPointer field is set. - */ - @java.lang.Override - public boolean hasRespPointer() { - return valueCase_ == 2; - } - /** - * uint64 resp_pointer = 2; - * @return The respPointer. - */ - @java.lang.Override - public long getRespPointer() { - if (valueCase_ == 2) { - return (java.lang.Long) value_; - } - return 0L; - } - - public static final int CONSTANT_RESPONSE_FIELD_NUMBER = 3; - /** - * .response.ConstantResponse constant_response = 3; - * @return Whether the constantResponse field is set. - */ - public boolean hasConstantResponse() { - return valueCase_ == 3; - } - /** - * .response.ConstantResponse constant_response = 3; - * @return The enum numeric value on the wire for constantResponse. - */ - public int getConstantResponseValue() { - if (valueCase_ == 3) { - return (java.lang.Integer) value_; - } - return 0; - } - /** - * .response.ConstantResponse constant_response = 3; - * @return The constantResponse. - */ - public response.ResponseOuterClass.ConstantResponse getConstantResponse() { - if (valueCase_ == 3) { - response.ResponseOuterClass.ConstantResponse result = response.ResponseOuterClass.ConstantResponse.forNumber( - (java.lang.Integer) value_); - return result == null ? response.ResponseOuterClass.ConstantResponse.UNRECOGNIZED : result; - } - return response.ResponseOuterClass.ConstantResponse.OK; - } - - public static final int REQUEST_ERROR_FIELD_NUMBER = 4; - /** - * .response.RequestError request_error = 4; - * @return Whether the requestError field is set. - */ - @java.lang.Override - public boolean hasRequestError() { - return valueCase_ == 4; - } - /** - * .response.RequestError request_error = 4; - * @return The requestError. - */ - @java.lang.Override - public response.ResponseOuterClass.RequestError getRequestError() { - if (valueCase_ == 4) { - return (response.ResponseOuterClass.RequestError) value_; - } - return response.ResponseOuterClass.RequestError.getDefaultInstance(); - } - /** - * .response.RequestError request_error = 4; - */ - @java.lang.Override - public response.ResponseOuterClass.RequestErrorOrBuilder getRequestErrorOrBuilder() { - if (valueCase_ == 4) { - return (response.ResponseOuterClass.RequestError) value_; - } - return response.ResponseOuterClass.RequestError.getDefaultInstance(); - } - - public static final int CLOSING_ERROR_FIELD_NUMBER = 5; - /** - * string closing_error = 5; - * @return Whether the closingError field is set. - */ - public boolean hasClosingError() { - return valueCase_ == 5; - } - /** - * string closing_error = 5; - * @return The closingError. - */ - public java.lang.String getClosingError() { - java.lang.Object ref = ""; - if (valueCase_ == 5) { - ref = value_; - } - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (valueCase_ == 5) { - value_ = s; - } - return s; - } - } - /** - * string closing_error = 5; - * @return The bytes for closingError. - */ - public com.google.protobuf.ByteString - getClosingErrorBytes() { - java.lang.Object ref = ""; - if (valueCase_ == 5) { - ref = value_; - } - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - if (valueCase_ == 5) { - value_ = b; - } - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (callbackIdx_ != 0) { - output.writeUInt32(1, callbackIdx_); - } - if (valueCase_ == 2) { - output.writeUInt64( - 2, (long)((java.lang.Long) value_)); - } - if (valueCase_ == 3) { - output.writeEnum(3, ((java.lang.Integer) value_)); - } - if (valueCase_ == 4) { - output.writeMessage(4, (response.ResponseOuterClass.RequestError) value_); - } - if (valueCase_ == 5) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 5, value_); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (callbackIdx_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(1, callbackIdx_); - } - if (valueCase_ == 2) { - size += com.google.protobuf.CodedOutputStream - .computeUInt64Size( - 2, (long)((java.lang.Long) value_)); - } - if (valueCase_ == 3) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(3, ((java.lang.Integer) value_)); - } - if (valueCase_ == 4) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, (response.ResponseOuterClass.RequestError) value_); - } - if (valueCase_ == 5) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, value_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof response.ResponseOuterClass.Response)) { - return super.equals(obj); - } - response.ResponseOuterClass.Response other = (response.ResponseOuterClass.Response) obj; - - if (getCallbackIdx() - != other.getCallbackIdx()) return false; - if (!getValueCase().equals(other.getValueCase())) return false; - switch (valueCase_) { - case 2: - if (getRespPointer() - != other.getRespPointer()) return false; - break; - case 3: - if (getConstantResponseValue() - != other.getConstantResponseValue()) return false; - break; - case 4: - if (!getRequestError() - .equals(other.getRequestError())) return false; - break; - case 5: - if (!getClosingError() - .equals(other.getClosingError())) return false; - break; - case 0: - default: - } - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + CALLBACK_IDX_FIELD_NUMBER; - hash = (53 * hash) + getCallbackIdx(); - switch (valueCase_) { - case 2: - hash = (37 * hash) + RESP_POINTER_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getRespPointer()); - break; - case 3: - hash = (37 * hash) + CONSTANT_RESPONSE_FIELD_NUMBER; - hash = (53 * hash) + getConstantResponseValue(); - break; - case 4: - hash = (37 * hash) + REQUEST_ERROR_FIELD_NUMBER; - hash = (53 * hash) + getRequestError().hashCode(); - break; - case 5: - hash = (37 * hash) + CLOSING_ERROR_FIELD_NUMBER; - hash = (53 * hash) + getClosingError().hashCode(); - break; - case 0: - default: - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static response.ResponseOuterClass.Response parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static response.ResponseOuterClass.Response parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static response.ResponseOuterClass.Response parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static response.ResponseOuterClass.Response parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static response.ResponseOuterClass.Response parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static response.ResponseOuterClass.Response parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static response.ResponseOuterClass.Response parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static response.ResponseOuterClass.Response parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public static response.ResponseOuterClass.Response parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - - public static response.ResponseOuterClass.Response parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static response.ResponseOuterClass.Response parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static response.ResponseOuterClass.Response parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(response.ResponseOuterClass.Response prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code response.Response} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:response.Response) - response.ResponseOuterClass.ResponseOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return response.ResponseOuterClass.internal_static_response_Response_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return response.ResponseOuterClass.internal_static_response_Response_fieldAccessorTable - .ensureFieldAccessorsInitialized( - response.ResponseOuterClass.Response.class, response.ResponseOuterClass.Response.Builder.class); - } - - // Construct using response.ResponseOuterClass.Response.newBuilder() - private Builder() { - - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - - } - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - callbackIdx_ = 0; - if (requestErrorBuilder_ != null) { - requestErrorBuilder_.clear(); - } - valueCase_ = 0; - value_ = null; - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return response.ResponseOuterClass.internal_static_response_Response_descriptor; - } - - @java.lang.Override - public response.ResponseOuterClass.Response getDefaultInstanceForType() { - return response.ResponseOuterClass.Response.getDefaultInstance(); - } - - @java.lang.Override - public response.ResponseOuterClass.Response build() { - response.ResponseOuterClass.Response result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public response.ResponseOuterClass.Response buildPartial() { - response.ResponseOuterClass.Response result = new response.ResponseOuterClass.Response(this); - if (bitField0_ != 0) { buildPartial0(result); } - buildPartialOneofs(result); - onBuilt(); - return result; - } - - private void buildPartial0(response.ResponseOuterClass.Response result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.callbackIdx_ = callbackIdx_; - } - } - - private void buildPartialOneofs(response.ResponseOuterClass.Response result) { - result.valueCase_ = valueCase_; - result.value_ = this.value_; - if (valueCase_ == 4 && - requestErrorBuilder_ != null) { - result.value_ = requestErrorBuilder_.build(); - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof response.ResponseOuterClass.Response) { - return mergeFrom((response.ResponseOuterClass.Response)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(response.ResponseOuterClass.Response other) { - if (other == response.ResponseOuterClass.Response.getDefaultInstance()) return this; - if (other.getCallbackIdx() != 0) { - setCallbackIdx(other.getCallbackIdx()); - } - switch (other.getValueCase()) { - case RESP_POINTER: { - setRespPointer(other.getRespPointer()); - break; - } - case CONSTANT_RESPONSE: { - setConstantResponseValue(other.getConstantResponseValue()); - break; - } - case REQUEST_ERROR: { - mergeRequestError(other.getRequestError()); - break; - } - case CLOSING_ERROR: { - valueCase_ = 5; - value_ = other.value_; - onChanged(); - break; - } - case VALUE_NOT_SET: { - break; - } - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - callbackIdx_ = input.readUInt32(); - bitField0_ |= 0x00000001; - break; - } // case 8 - case 16: { - value_ = input.readUInt64(); - valueCase_ = 2; - break; - } // case 16 - case 24: { - int rawValue = input.readEnum(); - valueCase_ = 3; - value_ = rawValue; - break; - } // case 24 - case 34: { - input.readMessage( - getRequestErrorFieldBuilder().getBuilder(), - extensionRegistry); - valueCase_ = 4; - break; - } // case 34 - case 42: { - java.lang.String s = input.readStringRequireUtf8(); - valueCase_ = 5; - value_ = s; - break; - } // case 42 - default: { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - private int valueCase_ = 0; - private java.lang.Object value_; - public ValueCase - getValueCase() { - return ValueCase.forNumber( - valueCase_); - } - - public Builder clearValue() { - valueCase_ = 0; - value_ = null; - onChanged(); - return this; - } - - private int bitField0_; - - private int callbackIdx_ ; - /** - * uint32 callback_idx = 1; - * @return The callbackIdx. - */ - @java.lang.Override - public int getCallbackIdx() { - return callbackIdx_; - } - /** - * uint32 callback_idx = 1; - * @param value The callbackIdx to set. - * @return This builder for chaining. - */ - public Builder setCallbackIdx(int value) { - - callbackIdx_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * uint32 callback_idx = 1; - * @return This builder for chaining. - */ - public Builder clearCallbackIdx() { - bitField0_ = (bitField0_ & ~0x00000001); - callbackIdx_ = 0; - onChanged(); - return this; - } - - /** - * uint64 resp_pointer = 2; - * @return Whether the respPointer field is set. - */ - public boolean hasRespPointer() { - return valueCase_ == 2; - } - /** - * uint64 resp_pointer = 2; - * @return The respPointer. - */ - public long getRespPointer() { - if (valueCase_ == 2) { - return (java.lang.Long) value_; - } - return 0L; - } - /** - * uint64 resp_pointer = 2; - * @param value The respPointer to set. - * @return This builder for chaining. - */ - public Builder setRespPointer(long value) { - - valueCase_ = 2; - value_ = value; - onChanged(); - return this; - } - /** - * uint64 resp_pointer = 2; - * @return This builder for chaining. - */ - public Builder clearRespPointer() { - if (valueCase_ == 2) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - return this; - } - - /** - * .response.ConstantResponse constant_response = 3; - * @return Whether the constantResponse field is set. - */ - @java.lang.Override - public boolean hasConstantResponse() { - return valueCase_ == 3; - } - /** - * .response.ConstantResponse constant_response = 3; - * @return The enum numeric value on the wire for constantResponse. - */ - @java.lang.Override - public int getConstantResponseValue() { - if (valueCase_ == 3) { - return ((java.lang.Integer) value_).intValue(); - } - return 0; - } - /** - * .response.ConstantResponse constant_response = 3; - * @param value The enum numeric value on the wire for constantResponse to set. - * @return This builder for chaining. - */ - public Builder setConstantResponseValue(int value) { - valueCase_ = 3; - value_ = value; - onChanged(); - return this; - } - /** - * .response.ConstantResponse constant_response = 3; - * @return The constantResponse. - */ - @java.lang.Override - public response.ResponseOuterClass.ConstantResponse getConstantResponse() { - if (valueCase_ == 3) { - response.ResponseOuterClass.ConstantResponse result = response.ResponseOuterClass.ConstantResponse.forNumber( - (java.lang.Integer) value_); - return result == null ? response.ResponseOuterClass.ConstantResponse.UNRECOGNIZED : result; - } - return response.ResponseOuterClass.ConstantResponse.OK; - } - /** - * .response.ConstantResponse constant_response = 3; - * @param value The constantResponse to set. - * @return This builder for chaining. - */ - public Builder setConstantResponse(response.ResponseOuterClass.ConstantResponse value) { - if (value == null) { - throw new NullPointerException(); - } - valueCase_ = 3; - value_ = value.getNumber(); - onChanged(); - return this; - } - /** - * .response.ConstantResponse constant_response = 3; - * @return This builder for chaining. - */ - public Builder clearConstantResponse() { - if (valueCase_ == 3) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - return this; - } - - private com.google.protobuf.SingleFieldBuilderV3< - response.ResponseOuterClass.RequestError, response.ResponseOuterClass.RequestError.Builder, response.ResponseOuterClass.RequestErrorOrBuilder> requestErrorBuilder_; - /** - * .response.RequestError request_error = 4; - * @return Whether the requestError field is set. - */ - @java.lang.Override - public boolean hasRequestError() { - return valueCase_ == 4; - } - /** - * .response.RequestError request_error = 4; - * @return The requestError. - */ - @java.lang.Override - public response.ResponseOuterClass.RequestError getRequestError() { - if (requestErrorBuilder_ == null) { - if (valueCase_ == 4) { - return (response.ResponseOuterClass.RequestError) value_; - } - return response.ResponseOuterClass.RequestError.getDefaultInstance(); - } else { - if (valueCase_ == 4) { - return requestErrorBuilder_.getMessage(); - } - return response.ResponseOuterClass.RequestError.getDefaultInstance(); - } - } - /** - * .response.RequestError request_error = 4; - */ - public Builder setRequestError(response.ResponseOuterClass.RequestError value) { - if (requestErrorBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - value_ = value; - onChanged(); - } else { - requestErrorBuilder_.setMessage(value); - } - valueCase_ = 4; - return this; - } - /** - * .response.RequestError request_error = 4; - */ - public Builder setRequestError( - response.ResponseOuterClass.RequestError.Builder builderForValue) { - if (requestErrorBuilder_ == null) { - value_ = builderForValue.build(); - onChanged(); - } else { - requestErrorBuilder_.setMessage(builderForValue.build()); - } - valueCase_ = 4; - return this; - } - /** - * .response.RequestError request_error = 4; - */ - public Builder mergeRequestError(response.ResponseOuterClass.RequestError value) { - if (requestErrorBuilder_ == null) { - if (valueCase_ == 4 && - value_ != response.ResponseOuterClass.RequestError.getDefaultInstance()) { - value_ = response.ResponseOuterClass.RequestError.newBuilder((response.ResponseOuterClass.RequestError) value_) - .mergeFrom(value).buildPartial(); - } else { - value_ = value; - } - onChanged(); - } else { - if (valueCase_ == 4) { - requestErrorBuilder_.mergeFrom(value); - } else { - requestErrorBuilder_.setMessage(value); - } - } - valueCase_ = 4; - return this; - } - /** - * .response.RequestError request_error = 4; - */ - public Builder clearRequestError() { - if (requestErrorBuilder_ == null) { - if (valueCase_ == 4) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - } else { - if (valueCase_ == 4) { - valueCase_ = 0; - value_ = null; - } - requestErrorBuilder_.clear(); - } - return this; - } - /** - * .response.RequestError request_error = 4; - */ - public response.ResponseOuterClass.RequestError.Builder getRequestErrorBuilder() { - return getRequestErrorFieldBuilder().getBuilder(); - } - /** - * .response.RequestError request_error = 4; - */ - @java.lang.Override - public response.ResponseOuterClass.RequestErrorOrBuilder getRequestErrorOrBuilder() { - if ((valueCase_ == 4) && (requestErrorBuilder_ != null)) { - return requestErrorBuilder_.getMessageOrBuilder(); - } else { - if (valueCase_ == 4) { - return (response.ResponseOuterClass.RequestError) value_; - } - return response.ResponseOuterClass.RequestError.getDefaultInstance(); - } - } - /** - * .response.RequestError request_error = 4; - */ - private com.google.protobuf.SingleFieldBuilderV3< - response.ResponseOuterClass.RequestError, response.ResponseOuterClass.RequestError.Builder, response.ResponseOuterClass.RequestErrorOrBuilder> - getRequestErrorFieldBuilder() { - if (requestErrorBuilder_ == null) { - if (!(valueCase_ == 4)) { - value_ = response.ResponseOuterClass.RequestError.getDefaultInstance(); - } - requestErrorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< - response.ResponseOuterClass.RequestError, response.ResponseOuterClass.RequestError.Builder, response.ResponseOuterClass.RequestErrorOrBuilder>( - (response.ResponseOuterClass.RequestError) value_, - getParentForChildren(), - isClean()); - value_ = null; - } - valueCase_ = 4; - onChanged(); - return requestErrorBuilder_; - } - - /** - * string closing_error = 5; - * @return Whether the closingError field is set. - */ - @java.lang.Override - public boolean hasClosingError() { - return valueCase_ == 5; - } - /** - * string closing_error = 5; - * @return The closingError. - */ - @java.lang.Override - public java.lang.String getClosingError() { - java.lang.Object ref = ""; - if (valueCase_ == 5) { - ref = value_; - } - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (valueCase_ == 5) { - value_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string closing_error = 5; - * @return The bytes for closingError. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getClosingErrorBytes() { - java.lang.Object ref = ""; - if (valueCase_ == 5) { - ref = value_; - } - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - if (valueCase_ == 5) { - value_ = b; - } - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string closing_error = 5; - * @param value The closingError to set. - * @return This builder for chaining. - */ - public Builder setClosingError( - java.lang.String value) { - if (value == null) { throw new NullPointerException(); } - valueCase_ = 5; - value_ = value; - onChanged(); - return this; - } - /** - * string closing_error = 5; - * @return This builder for chaining. - */ - public Builder clearClosingError() { - if (valueCase_ == 5) { - valueCase_ = 0; - value_ = null; - onChanged(); - } - return this; - } - /** - * string closing_error = 5; - * @param value The bytes for closingError to set. - * @return This builder for chaining. - */ - public Builder setClosingErrorBytes( - com.google.protobuf.ByteString value) { - if (value == null) { throw new NullPointerException(); } - checkByteStringIsUtf8(value); - valueCase_ = 5; - value_ = value; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:response.Response) - } - - // @@protoc_insertion_point(class_scope:response.Response) - private static final response.ResponseOuterClass.Response DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new response.ResponseOuterClass.Response(); - } - - public static response.ResponseOuterClass.Response getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public Response parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public response.ResponseOuterClass.Response getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_response_RequestError_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_response_RequestError_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_response_Response_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_response_Response_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\027protobuf/response.proto\022\010response\"I\n\014R" + - "equestError\022(\n\004type\030\001 \001(\0162\032.response.Req" + - "uestErrorType\022\017\n\007message\030\002 \001(\t\"\304\001\n\010Respo" + - "nse\022\024\n\014callback_idx\030\001 \001(\r\022\026\n\014resp_pointe" + - "r\030\002 \001(\004H\000\0227\n\021constant_response\030\003 \001(\0162\032.r" + - "esponse.ConstantResponseH\000\022/\n\rrequest_er" + - "ror\030\004 \001(\0132\026.response.RequestErrorH\000\022\027\n\rc" + - "losing_error\030\005 \001(\tH\000B\007\n\005value*O\n\020Request" + - "ErrorType\022\017\n\013Unspecified\020\000\022\r\n\tExecAbort\020" + - "\001\022\013\n\007Timeout\020\002\022\016\n\nDisconnect\020\003*\032\n\020Consta" + - "ntResponse\022\006\n\002OK\020\000b\006proto3" - }; - descriptor = com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }); - internal_static_response_RequestError_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_response_RequestError_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_response_RequestError_descriptor, - new java.lang.String[] { "Type", "Message", }); - internal_static_response_Response_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_response_Response_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_response_Response_descriptor, - new java.lang.String[] { "CallbackIdx", "RespPointer", "ConstantResponse", "RequestError", "ClosingError", "Value", }); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/java/src/lib.rs b/java/src/lib.rs index abb4447860..8d11cf90e6 100644 --- a/java/src/lib.rs +++ b/java/src/lib.rs @@ -39,7 +39,7 @@ fn redis_value_to_java<'local>(env: &mut JNIEnv<'local>, val: Value) -> JObject< } #[no_mangle] -pub extern "system" fn Java_babushka_BabushkaCoreNativeDefinitions_valueFromPointer<'local>( +pub extern "system" fn Java_babushka_ffi_resolvers_BabushkaCoreNativeDefinitions_valueFromPointer<'local>( mut env: JNIEnv<'local>, _class: JClass<'local>, pointer: jlong @@ -49,7 +49,7 @@ pub extern "system" fn Java_babushka_BabushkaCoreNativeDefinitions_valueFromPoin } #[no_mangle] -pub extern "system" fn Java_babushka_BabushkaCoreNativeDefinitions_startSocketListenerExternal<'local>( +pub extern "system" fn Java_babushka_ffi_resolvers_BabushkaCoreNativeDefinitions_startSocketListenerExternal<'local>( env: JNIEnv<'local>, _class: JClass<'local> ) -> JObject<'local> { From 3086e6f2acdd9e36245665bea373802b1e1173ab Mon Sep 17 00:00:00 2001 From: Yury-Fridlyand Date: Tue, 5 Dec 2023 21:16:09 -0800 Subject: [PATCH 81/81] Applying some fixes from `dev-split-netty-client` branch. 1. Create a new channel per client. `Channel` is wrapped by `ChannedHandler` class. 2. Create `CallbackManager` per client. Signed-off-by: Yury-Fridlyand --- .../clients/babushka/JniNettyClient.java | 4 +- .../src/main/java/babushka/api/Client.java | 17 ++-- .../main/java/babushka/api/Connection.java | 15 ++-- .../babushka/connectors/SocketConnection.java | 52 +++++------- .../connectors/handlers/ChannelBuilder.java | 10 ++- .../connectors/handlers/ChannelHandler.java | 44 ++++++++++ .../connectors/handlers/ReadHandler.java | 7 +- .../BabushkaCoreNativeDefinitions.java | 2 +- .../babushka/managers/CallbackManager.java | 78 +++++------------- .../babushka/managers/CommandManager.java | 47 +++-------- .../babushka/managers/ConnectionManager.java | 66 +++++++-------- .../java/babushka/models/RequestBuilder.java | 80 ++++++++++--------- 12 files changed, 207 insertions(+), 215 deletions(-) create mode 100644 java/client/src/main/java/babushka/connectors/handlers/ChannelHandler.java diff --git a/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java b/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java index 9e78661c04..9b8ca19bf3 100644 --- a/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java +++ b/java/benchmarks/src/main/java/babushka/benchmarks/clients/babushka/JniNettyClient.java @@ -9,7 +9,7 @@ import babushka.benchmarks.utils.ConnectionSettings; import java.util.concurrent.Future; -public class JniNettyClient implements SyncClient, AsyncClient { +public class JniNettyClient implements SyncClient, AsyncClient { private final Connection connection; private final Commands asyncCommands; @@ -38,7 +38,7 @@ public void connectToRedis(ConnectionSettings connectionSettings) { } @Override - public Future asyncConnectToRedis(ConnectionSettings connectionSettings) { + public Future asyncConnectToRedis(ConnectionSettings connectionSettings) { return connection.connectToRedis( connectionSettings.host, connectionSettings.port, diff --git a/java/client/src/main/java/babushka/api/Client.java b/java/client/src/main/java/babushka/api/Client.java index 101e1aafd1..1f724f8227 100644 --- a/java/client/src/main/java/babushka/api/Client.java +++ b/java/client/src/main/java/babushka/api/Client.java @@ -3,19 +3,24 @@ import babushka.connectors.SocketConnection; import babushka.ffi.resolvers.BabushkaCoreNativeDefinitions; import babushka.managers.CallbackManager; +import babushka.managers.CommandManager; import babushka.managers.ConnectionManager; /** Factory class for creating Babushka-Redis client connections */ public class Client { + static { + SocketConnection.setSocketPath(BabushkaCoreNativeDefinitions.getSocket()); + } + public static Connection CreateConnection() { CallbackManager callbackManager = new CallbackManager(); - BabushkaCoreNativeDefinitions nativeDefinitions = new BabushkaCoreNativeDefinitions(); - SocketConnection.setSocketPath(nativeDefinitions.getSocket()); SocketConnection socketConnection = SocketConnection.getInstance(); + var channelHandler = socketConnection.openNewChannel(callbackManager); - ConnectionManager connectionManager = new ConnectionManager(callbackManager, socketConnection); + CommandManager commandManager = new CommandManager(channelHandler); + ConnectionManager connectionManager = new ConnectionManager(channelHandler, commandManager); return new Connection(connectionManager); } @@ -23,11 +28,11 @@ public static Connection CreateConnection() { public static Connection ConnectToRedis(String host, int port) { CallbackManager callbackManager = new CallbackManager(); - BabushkaCoreNativeDefinitions nativeDefinitions = new BabushkaCoreNativeDefinitions(); - SocketConnection.setSocketPath(nativeDefinitions.getSocket()); SocketConnection socketConnection = SocketConnection.getInstance(); + var channelHandler = socketConnection.openNewChannel(callbackManager); - ConnectionManager connectionManager = new ConnectionManager(callbackManager, socketConnection); + CommandManager commandManager = new CommandManager(channelHandler); + ConnectionManager connectionManager = new ConnectionManager(channelHandler, commandManager); Awaiter.await(connectionManager.connectToRedis(host, port, false, false)); diff --git a/java/client/src/main/java/babushka/api/Connection.java b/java/client/src/main/java/babushka/api/Connection.java index f8fd31f7f6..5c4e44bf5f 100644 --- a/java/client/src/main/java/babushka/api/Connection.java +++ b/java/client/src/main/java/babushka/api/Connection.java @@ -2,18 +2,13 @@ import babushka.managers.ConnectionManager; import java.util.concurrent.CompletableFuture; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor public class Connection { - private final ConnectionManager connectionManager; - - public Connection(ConnectionManager connectionManager) { - this.connectionManager = connectionManager; - } - - public ConnectionManager getConnectionManager() { - return connectionManager; - } + @Getter private final ConnectionManager connectionManager; /** * Async (non-blocking) connect to REDIS. See sync option in {@link #connectToRedis}. @@ -25,7 +20,7 @@ public ConnectionManager getConnectionManager() { * @param clusterMode true if REDIS instance runs in the cluster mode */ // TODO support configuration object which holds more parameters (e.g. multiple addresses, etc) - public CompletableFuture connectToRedis( + public CompletableFuture connectToRedis( String host, int port, boolean useSsl, boolean clusterMode) { return connectionManager.connectToRedis(host, port, useSsl, clusterMode); } diff --git a/java/client/src/main/java/babushka/connectors/SocketConnection.java b/java/client/src/main/java/babushka/connectors/SocketConnection.java index cd7c27abf6..04878fa5ea 100644 --- a/java/client/src/main/java/babushka/connectors/SocketConnection.java +++ b/java/client/src/main/java/babushka/connectors/SocketConnection.java @@ -1,15 +1,12 @@ package babushka.connectors; import babushka.connectors.handlers.ChannelBuilder; +import babushka.connectors.handlers.ChannelHandler; import babushka.managers.CallbackManager; import babushka.managers.ConnectionManager; -import com.google.protobuf.GeneratedMessageV3; import io.netty.bootstrap.Bootstrap; -import io.netty.buffer.ByteBufAllocator; import io.netty.channel.Channel; -import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; -import io.netty.channel.WriteBufferWaterMark; import io.netty.channel.epoll.EpollDomainSocketChannel; import io.netty.channel.epoll.EpollEventLoopGroup; import io.netty.channel.kqueue.KQueue; @@ -20,9 +17,6 @@ public class SocketConnection { - /** A channel to make socket interactions with. */ - private Channel channel; - /** Thread pool supplied to Netty to perform all async IO. */ private EventLoopGroup group; @@ -55,13 +49,15 @@ public static synchronized SocketConnection getInstance() { // At the moment, Windows is not supported // Probably we should use NIO (NioEventLoopGroup) for Windows. + private static final boolean isMacOs = isKQueueAvailable(); + // TODO support IO-Uring and NIO /** * Detect platform to identify which native implementation to use for UDS interaction. Currently * supported platforms are: Linux and macOS.
* Subject to change in future to support more platforms and implementations. */ - private static boolean isMacOs() { + private static boolean isKQueueAvailable() { try { Class.forName("io.netty.channel.kqueue.KQueue"); return KQueue.isAvailable(); @@ -72,52 +68,48 @@ private static boolean isMacOs() { /** Constructor for the single instance. */ private SocketConnection() { - boolean isMacOs = isMacOs(); try { int cpuCount = Runtime.getRuntime().availableProcessors(); group = isMacOs ? new KQueueEventLoopGroup( - cpuCount, new DefaultThreadFactory("NettyWrapper-kqueue-elg", true)) + cpuCount, new DefaultThreadFactory("SocketConnection-kqueue-elg", true)) : new EpollEventLoopGroup( - cpuCount, new DefaultThreadFactory("NettyWrapper-epoll-elg", true)); - channel = + cpuCount, new DefaultThreadFactory("SocketConnection-epoll-elg", true)); + } catch (Exception e) { + System.err.printf( + "Failed to create a channel %s: %s%n", e.getClass().getSimpleName(), e.getMessage()); + e.printStackTrace(System.err); + } + } + + /** Open a new channel for a new client. */ + public ChannelHandler openNewChannel(CallbackManager callbackManager) { + try { + Channel channel = new Bootstrap() - .option(ChannelOption.WRITE_BUFFER_WATER_MARK, new WriteBufferWaterMark(1024, 4096)) - .option(ChannelOption.ALLOCATOR, ByteBufAllocator.DEFAULT) .group(group) .channel(isMacOs ? KQueueDomainSocketChannel.class : EpollDomainSocketChannel.class) - .handler(new ChannelBuilder()) + .handler(new ChannelBuilder(callbackManager)) .connect(new DomainSocketAddress(socketPath)) .sync() .channel(); - - } catch (Exception e) { + return new ChannelHandler(channel, callbackManager); + } catch (InterruptedException e) { System.err.printf( "Failed to create a channel %s: %s%n", e.getClass().getSimpleName(), e.getMessage()); e.printStackTrace(System.err); + throw new RuntimeException(e); } } - /** Write a protobuf message to the socket. */ - public void write(GeneratedMessageV3 message) { - channel.write(message.toByteArray()); - } - - /** Write a protobuf message to the socket and flush it. */ - public void writeAndFlush(GeneratedMessageV3 message) { - channel.writeAndFlush(message.toByteArray()); - } - /** * Closes the UDS connection and frees corresponding resources. A consecutive call to {@link * #getInstance()} will create a new connection with new resource pool. */ public void close() { - channel.close(); group.shutdownGracefully(); INSTANCE = null; - CallbackManager.shutdownGracefully(); } /** @@ -138,6 +130,6 @@ public void run() { static { Runtime.getRuntime() - .addShutdownHook(new Thread(new ShutdownHook(), "NettyWrapper-shutdown-hook")); + .addShutdownHook(new Thread(new ShutdownHook(), "SocketConnection-shutdown-hook")); } } diff --git a/java/client/src/main/java/babushka/connectors/handlers/ChannelBuilder.java b/java/client/src/main/java/babushka/connectors/handlers/ChannelBuilder.java index ff0f14e722..4819254499 100644 --- a/java/client/src/main/java/babushka/connectors/handlers/ChannelBuilder.java +++ b/java/client/src/main/java/babushka/connectors/handlers/ChannelBuilder.java @@ -1,22 +1,26 @@ package babushka.connectors.handlers; -import io.netty.channel.ChannelInboundHandlerAdapter; +import babushka.managers.CallbackManager; import io.netty.channel.ChannelInitializer; -import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.unix.UnixChannel; import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; import lombok.NonNull; +import lombok.RequiredArgsConstructor; /** Builder for the channel used by {@link babushka.connectors.SocketConnection}. */ +@RequiredArgsConstructor public class ChannelBuilder extends ChannelInitializer { + + private final CallbackManager callbackManager; + @Override public void initChannel(@NonNull UnixChannel ch) { ch.pipeline() // https://netty.io/4.1/api/io/netty/handler/codec/protobuf/ProtobufEncoder.html .addLast("protobufDecoder", new ProtobufVarint32FrameDecoder()) .addLast("protobufEncoder", new ProtobufVarint32LengthFieldPrepender()) - .addLast(new ReadHandler()) + .addLast(new ReadHandler(callbackManager)) .addLast(new WriteHandler()); } } diff --git a/java/client/src/main/java/babushka/connectors/handlers/ChannelHandler.java b/java/client/src/main/java/babushka/connectors/handlers/ChannelHandler.java new file mode 100644 index 0000000000..06a322baad --- /dev/null +++ b/java/client/src/main/java/babushka/connectors/handlers/ChannelHandler.java @@ -0,0 +1,44 @@ +package babushka.connectors.handlers; + +import babushka.managers.CallbackManager; +import connection_request.ConnectionRequestOuterClass.ConnectionRequest; +import io.netty.channel.Channel; +import java.util.concurrent.CompletableFuture; +import lombok.RequiredArgsConstructor; +import redis_request.RedisRequestOuterClass.RedisRequest; +import response.ResponseOuterClass.Response; + +/** + * Class responsible for manipulations with Netty's {@link Channel}.
+ * Uses a {@link CallbackManager} to record callbacks of every request sent. + */ +@RequiredArgsConstructor +public class ChannelHandler { + private final Channel channel; + private final CallbackManager callbackManager; + + /** Write a protobuf message to the socket. */ + public CompletableFuture write(RedisRequest.Builder request, boolean flush) { + var commandId = callbackManager.registerRequest(); + request.setCallbackIdx(commandId.getKey()); + + if (flush) { + channel.writeAndFlush(request.build().toByteArray()); + } else { + channel.write(request.build().toByteArray()); + } + return commandId.getValue(); + } + + /** Write a protobuf message to the socket. */ + public CompletableFuture connect(ConnectionRequest request) { + channel.writeAndFlush(request.toByteArray()); + return callbackManager.getConnectionPromise(); + } + + /** Closes the UDS connection and frees corresponding resources. */ + public void close() { + channel.close(); + callbackManager.shutdownGracefully(); + } +} diff --git a/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java b/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java index 6774b2698e..05cbbc8cfe 100644 --- a/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java +++ b/java/client/src/main/java/babushka/connectors/handlers/ReadHandler.java @@ -5,10 +5,15 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import lombok.NonNull; +import lombok.RequiredArgsConstructor; import response.ResponseOuterClass; /** Handler for inbound traffic though UDS. Used by Netty. */ +@RequiredArgsConstructor public class ReadHandler extends ChannelInboundHandlerAdapter { + + private final CallbackManager callbackManager; + /** * Handles responses from babushka core: * @@ -26,7 +31,7 @@ public void channelRead(@NonNull ChannelHandlerContext ctx, @NonNull Object msg) buf.readBytes(bytes); // TODO surround parsing with try-catch, set error to future if parsing failed. var response = ResponseOuterClass.Response.parseFrom(bytes); - CallbackManager.completeAsync(response); + callbackManager.completeRequest(response); buf.release(); } diff --git a/java/client/src/main/java/babushka/ffi/resolvers/BabushkaCoreNativeDefinitions.java b/java/client/src/main/java/babushka/ffi/resolvers/BabushkaCoreNativeDefinitions.java index 377e01fdbf..6d4ec45121 100644 --- a/java/client/src/main/java/babushka/ffi/resolvers/BabushkaCoreNativeDefinitions.java +++ b/java/client/src/main/java/babushka/ffi/resolvers/BabushkaCoreNativeDefinitions.java @@ -6,7 +6,7 @@ public class BabushkaCoreNativeDefinitions { public static native Object valueFromPointer(long pointer); static { - System.loadLibrary("babushka"); + System.loadLibrary("javababushka"); } /** diff --git a/java/client/src/main/java/babushka/managers/CallbackManager.java b/java/client/src/main/java/babushka/managers/CallbackManager.java index 513ebf074f..099db73c86 100644 --- a/java/client/src/main/java/babushka/managers/CallbackManager.java +++ b/java/client/src/main/java/babushka/managers/CallbackManager.java @@ -1,98 +1,64 @@ package babushka.managers; import babushka.connectors.handlers.ReadHandler; -import java.util.Deque; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.atomic.AtomicInteger; +import lombok.Getter; import org.apache.commons.lang3.tuple.Pair; import response.ResponseOuterClass.Response; /** Holder for resources owned by {@link CommandManager} and used by {@link ReadHandler}. */ public class CallbackManager { - - // TODO: let's make these non-static class variables + /** Unique request ID (callback ID). Thread-safe. */ + private final AtomicInteger requestId = new AtomicInteger(0); /** * Storage of Futures to handle responses. Map key is callback id, which starts from 1.
* Each future is a promise for every submitted by user request. */ - public static final Map> responses = - new ConcurrentHashMap<>(); + private final Map> responses = new ConcurrentHashMap<>(); /** - * Storage for connection requests similar to {@link #responses}. Unfortunately, connection + * Storage for connection request similar to {@link #responses}. Unfortunately, connection * requests can't be stored in the same storage, because callback ID = 0 is hardcoded for - * connection requests. Will be removed once issue #600 on GH fixed. + * connection requests. */ - public static final Deque> connectionRequests = - new ConcurrentLinkedDeque<>(); - - /** Unique request ID (callback ID). Thread-safe. */ - private final AtomicInteger requestId = new AtomicInteger(0); + @Getter private final CompletableFuture connectionPromise = new CompletableFuture<>(); /** - * Register a new request to be sent. Socket Manager takes responsibility for tracking the - * returned callback ID in all incoming responses. Once response received, the given future - * completes with it. + * Register a new request to be sent. Once response received, the given future completes with it. * - * @param future A client promise for response. - * @return Unique callback ID which should set into request. + * @return A pair of unique callback ID which should set into request and a client promise for + * response. */ - public int registerRequest(CompletableFuture future) { + public Pair> registerRequest() { int callbackId = requestId.incrementAndGet(); - CallbackManager.responses.put(callbackId, future); - return callbackId; + var future = new CompletableFuture(); + responses.put(callbackId, future); + return Pair.of(callbackId, future); } /** - * Register a new connection request similar to {@link #registerRequest}.
- * No callback ID returned, because connection request/response pair have no such field (subject - * to change). Track issue #600 for more - * details. + * Complete the corresponding client promise and free resources. + * + * @param response A response received */ - public void registerConnection(CompletableFuture future) { - CallbackManager.connectionRequests.add(future); - } - - public static void completeAsync(Response response) { + public void completeRequest(Response response) { int callbackId = response.getCallbackIdx(); if (callbackId == 0) { - // can't distinguish connection requests since they have no - // callback ID - // https://github.com/aws/babushka/issues/600 - connectionRequests.pop().completeAsync(() -> response); + connectionPromise.completeAsync(() -> response); } else { responses.get(callbackId).completeAsync(() -> response); responses.remove(callbackId); } } - public static void shutdownGracefully() { - connectionRequests.forEach( - future -> { - future.completeExceptionally(new InterruptedException()); - }); - connectionRequests.clear(); + public void shutdownGracefully() { + connectionPromise.completeExceptionally(new InterruptedException()); responses.forEach( - (callbackId, future) -> { - future.completeExceptionally(new InterruptedException()); - }); + (callbackId, future) -> future.completeExceptionally(new InterruptedException())); responses.clear(); } - - /** - * Create a unique callback ID (request ID) and a corresponding registered future for the - * response.
- * - * @return New callback ID and new future to be returned to user. - */ - private synchronized Pair> getNextCallback() { - var future = new CompletableFuture(); - int callbackId = registerRequest(future); - return Pair.of(callbackId, future); - } } diff --git a/java/client/src/main/java/babushka/managers/CommandManager.java b/java/client/src/main/java/babushka/managers/CommandManager.java index a7f8014fb5..69a0713851 100644 --- a/java/client/src/main/java/babushka/managers/CommandManager.java +++ b/java/client/src/main/java/babushka/managers/CommandManager.java @@ -1,61 +1,36 @@ package babushka.managers; -import static babushka.models.RequestBuilder.redisSingleCommand; - -import babushka.connectors.SocketConnection; +import babushka.connectors.handlers.ChannelHandler; import babushka.models.RequestBuilder; +import com.google.common.annotations.VisibleForTesting; import java.util.List; import java.util.concurrent.CompletableFuture; +import lombok.RequiredArgsConstructor; import redis_request.RedisRequestOuterClass.RequestType; -import response.ResponseOuterClass.Response; -/** - * A UDS connection manager. This class is responsible for: - * - *
    - *
  • opening a connection (channel) though the UDS; - *
  • allocating the corresponding resources, e.g. thread pools (see also {@link - * CallbackManager}); - *
  • handling connection requests; - *
  • providing unique request ID (callback ID); - *
  • handling REDIS requests; - *
  • closing connection; - *
- */ +@RequiredArgsConstructor public class CommandManager { - private final CallbackManager callbackManager; - private final SocketConnection socketConnection; - - public CommandManager(CallbackManager callbackManager, SocketConnection socketConnection) { - this.callbackManager = callbackManager; - this.socketConnection = socketConnection; - } + private final ChannelHandler channel; public CompletableFuture get(String key) { - return submitNewCommand( - redis_request.RedisRequestOuterClass.RequestType.GetString, List.of(key)); + return submitNewCommand(RequestType.GetString, List.of(key)); } public CompletableFuture set(String key, String value) { - return submitNewCommand( - redis_request.RedisRequestOuterClass.RequestType.SetString, List.of(key, value)); + return submitNewCommand(RequestType.SetString, List.of(key, value)); } /** * @param command * @param args - * @return TODO: Make this private + * @return */ - public CompletableFuture submitNewCommand(RequestType command, List args) { + @VisibleForTesting + private CompletableFuture submitNewCommand(RequestType command, List args) { // TODO this explicitly uses ForkJoin thread pool. May be we should use another one. - CompletableFuture future = new CompletableFuture<>(); - return CompletableFuture.supplyAsync( - () -> { - socketConnection.writeAndFlush(redisSingleCommand(command, args)); - return future; - }) + () -> channel.write(RequestBuilder.prepareRequest(command, args), true)) // TODO: is there a better way to execute this? .thenComposeAsync(f -> f) .thenApplyAsync(RequestBuilder::resolveRedisResponseToString); diff --git a/java/client/src/main/java/babushka/managers/ConnectionManager.java b/java/client/src/main/java/babushka/managers/ConnectionManager.java index 5bce7caae3..e0cf09ee45 100644 --- a/java/client/src/main/java/babushka/managers/ConnectionManager.java +++ b/java/client/src/main/java/babushka/managers/ConnectionManager.java @@ -1,11 +1,14 @@ package babushka.managers; -import static babushka.models.RequestBuilder.getConnectionRequest; - import babushka.connectors.SocketConnection; +import babushka.connectors.handlers.ChannelHandler; +import babushka.models.RequestBuilder; import connection_request.ConnectionRequestOuterClass.ConnectionRequest; import java.util.concurrent.CompletableFuture; -import response.ResponseOuterClass.Response; +import java.util.concurrent.atomic.AtomicBoolean; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import response.ResponseOuterClass.ConstantResponse; /** * A UDS connection manager. This class is responsible for: @@ -13,54 +16,53 @@ *
    *
  • opening a connection (channel) though the UDS; *
  • allocating the corresponding resources, e.g. thread pools (see also {@link - * CallbackManager}); + * SocketConnection}); *
  • handling connection requests; - *
  • providing unique request ID (callback ID); *
  • handling REDIS requests; *
  • closing connection; *
*/ +@RequiredArgsConstructor public class ConnectionManager { - private final SocketConnection socketConnection; - private final CallbackManager callbackManager; - - private final CommandManager commandManager; + private final ChannelHandler channel; + @Getter private final CommandManager commandManager; - public ConnectionManager(CallbackManager callbackManager, SocketConnection socketConnection) { - this.socketConnection = socketConnection; - this.callbackManager = callbackManager; - this.commandManager = new CommandManager(callbackManager, socketConnection); - } - - public CommandManager getCommandManager() { - return this.commandManager; - } + private final AtomicBoolean isConnected = new AtomicBoolean(false); /** * Connect to Redis using a ProtoBuf connection request * - * @param host - * @param port - * @param useSsl - * @param clusterMode - * @return + * @param host Server address + * @param port Server port + * @param useSsl true if communication with the server or cluster should use Transport Level + * Security + * @param clusterMode true if REDIS instance runs in the cluster mode */ - public CompletableFuture connectToRedis( + public CompletableFuture connectToRedis( String host, int port, boolean useSsl, boolean clusterMode) { - ConnectionRequest request = getConnectionRequest(host, port, useSsl, clusterMode); - var future = new CompletableFuture(); - callbackManager.registerConnection(future); - socketConnection.writeAndFlush(request); - return future.thenApplyAsync(f -> f.getConstantResponse().toString()); + ConnectionRequest request = + RequestBuilder.createConnectionRequest(host, port, useSsl, clusterMode); + return channel + .connect(request) + .thenApplyAsync( + response -> + isConnected.compareAndSet( + false, response.getConstantResponse() == ConstantResponse.OK)); } /** - * Close socket connection and drop all channels TODO: provide feedback that the connection was - * properly closed + * Close socket connection and drop all channels.
+ * TODO: provide feedback that the connection was properly closed */ public CompletableFuture closeConnection() { - socketConnection.close(); + isConnected.setPlain(false); + channel.close(); return new CompletableFuture(); } + + /** Check that connection established. This doesn't validate whether it is alive. */ + public boolean isConnected() { + return isConnected.get(); + } } diff --git a/java/client/src/main/java/babushka/models/RequestBuilder.java b/java/client/src/main/java/babushka/models/RequestBuilder.java index 224fedf281..7f77c4198a 100644 --- a/java/client/src/main/java/babushka/models/RequestBuilder.java +++ b/java/client/src/main/java/babushka/models/RequestBuilder.java @@ -1,54 +1,61 @@ package babushka.models; import babushka.ffi.resolvers.BabushkaCoreNativeDefinitions; -import connection_request.ConnectionRequestOuterClass; +import babushka.managers.CallbackManager; +import babushka.managers.ConnectionManager; +import connection_request.ConnectionRequestOuterClass.ConnectionRequest; +import connection_request.ConnectionRequestOuterClass.NodeAddress; +import connection_request.ConnectionRequestOuterClass.ReadFrom; +import connection_request.ConnectionRequestOuterClass.TlsMode; import java.util.List; -import redis_request.RedisRequestOuterClass; -import response.ResponseOuterClass; +import redis_request.RedisRequestOuterClass.Command; +import redis_request.RedisRequestOuterClass.Command.ArgsArray; +import redis_request.RedisRequestOuterClass.RedisRequest; +import redis_request.RedisRequestOuterClass.RequestType; +import redis_request.RedisRequestOuterClass.Routes; +import redis_request.RedisRequestOuterClass.SimpleRoutes; +import response.ResponseOuterClass.Response; public class RequestBuilder { - /** Build a protobuf connection request object */ + /** + * Build a protobuf connection request.
+ * Used by {@link ConnectionManager#connectToRedis}. + */ // TODO support more parameters and/or configuration object - public static ConnectionRequestOuterClass.ConnectionRequest getConnectionRequest( + public static ConnectionRequest createConnectionRequest( String host, int port, boolean useSsl, boolean clusterMode) { - return ConnectionRequestOuterClass.ConnectionRequest.newBuilder() - .addAddresses( - ConnectionRequestOuterClass.NodeAddress.newBuilder() - .setHost(host) - .setPort(port) - .build()) - .setTlsMode( - useSsl - ? ConnectionRequestOuterClass.TlsMode.SecureTls - : ConnectionRequestOuterClass.TlsMode.NoTls) + return ConnectionRequest.newBuilder() + .addAddresses(NodeAddress.newBuilder().setHost(host).setPort(port).build()) + .setTlsMode(useSsl ? TlsMode.SecureTls : TlsMode.NoTls) .setClusterModeEnabled(clusterMode) - .setReadFrom(ConnectionRequestOuterClass.ReadFrom.Primary) + .setReadFrom(ReadFrom.Primary) .setDatabaseId(0) .build(); } - public static RedisRequestOuterClass.RedisRequest redisSingleCommand( - RedisRequestOuterClass.RequestType command, List args) { - var commandArgs = RedisRequestOuterClass.Command.ArgsArray.newBuilder(); + /** + * Build a protobuf command/transaction request draft. + * + * @return An uncompleted request. {@link CallbackManager} is responsible to complete it by adding + * a callback id. + */ + public static RedisRequest.Builder prepareRequest(RequestType command, List args) { + var commandArgs = ArgsArray.newBuilder(); for (var arg : args) { commandArgs.addArgs(arg); } - RedisRequestOuterClass.RedisRequest.Builder builder = - RedisRequestOuterClass.RedisRequest.newBuilder() - .setSingleCommand( - RedisRequestOuterClass.Command.newBuilder() - .setRequestType(command) - .setArgsArray(commandArgs.build()) - .build()) - .setRoute( - RedisRequestOuterClass.Routes.newBuilder() - .setSimpleRoutes(RedisRequestOuterClass.SimpleRoutes.AllNodes) - .build()); - // TODO: set callback index? - - return builder.build(); + return RedisRequest.newBuilder() + .setSingleCommand( // set command + Command.newBuilder() + .setRequestType(command) // set command name + .setArgsArray(commandArgs.build()) // set arguments + .build()) + .setRoute( // set route + Routes.newBuilder() + .setSimpleRoutes(SimpleRoutes.AllNodes) // set route type + .build()); } /** @@ -58,13 +65,10 @@ public static RedisRequestOuterClass.RedisRequest redisSingleCommand( * @param response Redis Response * @return String or null */ - public static String resolveRedisResponseToString(ResponseOuterClass.Response response) { - if (response.hasConstantResponse()) { + public static String resolveRedisResponseToString(Response response) { + if (response.getRespPointer() != 0) { return BabushkaCoreNativeDefinitions.valueFromPointer(response.getRespPointer()).toString(); } - if (response.hasRespPointer()) { - return response.getConstantResponse().toString(); - } return null; } }