Compare commits
1 Commits
303828392e
...
0.2.0-RC4
Author | SHA1 | Date | |
---|---|---|---|
ac156c68eb
|
@@ -1,80 +0,0 @@
|
|||||||
name: CI
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- 'dev'
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: hostinger
|
|
||||||
steps:
|
|
||||||
- name: Checkout sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: Setup Gradle
|
|
||||||
uses: gradle/actions/setup-gradle@v3
|
|
||||||
- name: Execute Gradle build
|
|
||||||
run: ./gradlew build
|
|
||||||
- name: Prepare Docker image build
|
|
||||||
run: ./gradlew prepareDockerBuild
|
|
||||||
- name: Get project version
|
|
||||||
id: retrieve-version
|
|
||||||
run: ./gradlew -q version >> "$GITHUB_OUTPUT"
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v3
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
with:
|
|
||||||
driver: docker-container
|
|
||||||
- name: Login to Gitea container registry
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: gitea.woggioni.net
|
|
||||||
username: woggioni
|
|
||||||
password: ${{ secrets.PUBLISHER_TOKEN }}
|
|
||||||
-
|
|
||||||
name: Build rbcs Docker image
|
|
||||||
uses: docker/build-push-action@v5.3.0
|
|
||||||
with:
|
|
||||||
context: "docker/build/docker"
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
push: true
|
|
||||||
pull: true
|
|
||||||
tags: |
|
|
||||||
gitea.woggioni.net/woggioni/rbcs:vanilla-dev
|
|
||||||
target: release-vanilla
|
|
||||||
cache-from: type=registry,ref=gitea.woggioni.net/woggioni/rbcs:buildx
|
|
||||||
-
|
|
||||||
name: Build rbcs memcache Docker image
|
|
||||||
uses: docker/build-push-action@v5.3.0
|
|
||||||
with:
|
|
||||||
context: "docker/build/docker"
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
push: true
|
|
||||||
pull: true
|
|
||||||
tags: |
|
|
||||||
gitea.woggioni.net/woggioni/rbcs:memcache-dev
|
|
||||||
target: release-memcache
|
|
||||||
cache-from: type=registry,ref=gitea.woggioni.net/woggioni/rbcs:buildx
|
|
||||||
cache-to: type=registry,mode=max,compression=zstd,image-manifest=true,oci-mediatypes=true,ref=gitea.woggioni.net/woggioni/rbcs:buildx
|
|
||||||
-
|
|
||||||
name: Build rbcs native Docker image
|
|
||||||
uses: docker/build-push-action@v5.3.0
|
|
||||||
with:
|
|
||||||
context: "docker/build/docker"
|
|
||||||
platforms: linux/amd64
|
|
||||||
push: true
|
|
||||||
pull: true
|
|
||||||
tags: |
|
|
||||||
gitea.woggioni.net/woggioni/rbcs:native-dev
|
|
||||||
target: release-native
|
|
||||||
-
|
|
||||||
name: Build rbcs jlink Docker image
|
|
||||||
uses: docker/build-push-action@v5.3.0
|
|
||||||
with:
|
|
||||||
context: "docker/build/docker"
|
|
||||||
platforms: linux/amd64
|
|
||||||
push: true
|
|
||||||
pull: true
|
|
||||||
tags: |
|
|
||||||
gitea.woggioni.net/woggioni/rbcs:jlink-dev
|
|
||||||
target: release-jlink
|
|
||||||
|
|
@@ -52,8 +52,6 @@ jobs:
|
|||||||
push: true
|
push: true
|
||||||
pull: true
|
pull: true
|
||||||
tags: |
|
tags: |
|
||||||
gitea.woggioni.net/woggioni/rbcs:latest
|
|
||||||
gitea.woggioni.net/woggioni/rbcs:${{ steps.retrieve-version.outputs.VERSION }}
|
|
||||||
gitea.woggioni.net/woggioni/rbcs:memcache
|
gitea.woggioni.net/woggioni/rbcs:memcache
|
||||||
gitea.woggioni.net/woggioni/rbcs:memcache-${{ steps.retrieve-version.outputs.VERSION }}
|
gitea.woggioni.net/woggioni/rbcs:memcache-${{ steps.retrieve-version.outputs.VERSION }}
|
||||||
target: release-memcache
|
target: release-memcache
|
||||||
@@ -68,21 +66,11 @@ jobs:
|
|||||||
push: true
|
push: true
|
||||||
pull: true
|
pull: true
|
||||||
tags: |
|
tags: |
|
||||||
|
gitea.woggioni.net/woggioni/rbcs:latest
|
||||||
|
gitea.woggioni.net/woggioni/rbcs:${{ steps.retrieve-version.outputs.VERSION }}
|
||||||
gitea.woggioni.net/woggioni/rbcs:native
|
gitea.woggioni.net/woggioni/rbcs:native
|
||||||
gitea.woggioni.net/woggioni/rbcs:native-${{ steps.retrieve-version.outputs.VERSION }}
|
gitea.woggioni.net/woggioni/rbcs:native-${{ steps.retrieve-version.outputs.VERSION }}
|
||||||
target: release-native
|
target: release-native
|
||||||
-
|
|
||||||
name: Build rbcs jlink Docker image
|
|
||||||
uses: docker/build-push-action@v5.3.0
|
|
||||||
with:
|
|
||||||
context: "docker/build/docker"
|
|
||||||
platforms: linux/amd64
|
|
||||||
push: true
|
|
||||||
pull: true
|
|
||||||
tags: |
|
|
||||||
gitea.woggioni.net/woggioni/rbcs:jlink
|
|
||||||
gitea.woggioni.net/woggioni/rbcs:jlink-${{ steps.retrieve-version.outputs.VERSION }}-jlink
|
|
||||||
target: release-jlink
|
|
||||||
- name: Publish artifacts
|
- name: Publish artifacts
|
||||||
env:
|
env:
|
||||||
PUBLISHER_TOKEN: ${{ secrets.PUBLISHER_TOKEN }}
|
PUBLISHER_TOKEN: ${{ secrets.PUBLISHER_TOKEN }}
|
||||||
|
@@ -1,94 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: rbcs-server
|
|
||||||
data:
|
|
||||||
rbcs-server.xml: |
|
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<rbcs:server xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xmlns:rbcs="urn:net.woggioni.rbcs.server"
|
|
||||||
xmlns:rbcs-memcache="urn:net.woggioni.rbcs.server.memcache"
|
|
||||||
xs:schemaLocation="urn:net.woggioni.rbcs.server.memcache jpms://net.woggioni.rbcs.server.memcache/net/woggioni/rbcs/server/memcache/schema/rbcs-memcache.xsd urn:net.woggioni.rbcs.server jpms://net.woggioni.rbcs.server/net/woggioni/rbcs/server/schema/rbcs-server.xsd"
|
|
||||||
>
|
|
||||||
<bind host="0.0.0.0" port="8080" incoming-connections-backlog-size="128"/>
|
|
||||||
<connection
|
|
||||||
max-request-size="0xd000000"
|
|
||||||
idle-timeout="PT15S"
|
|
||||||
read-idle-timeout="PT30S"
|
|
||||||
write-idle-timeout="PT30S"/>
|
|
||||||
<event-executor use-virtual-threads="true"/>
|
|
||||||
<cache xs:type="rbcs:fileSystemCacheType" max-age="P7D" enable-compression="false" path="/home/luser/cache" digest="SHA-224"/>
|
|
||||||
</rbcs:server>
|
|
||||||
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: rbcs-pvc
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
storageClassName: local-path
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 16Gi
|
|
||||||
---
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: rbcs-deployment
|
|
||||||
labels:
|
|
||||||
app: rbcs
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: rbcs
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: rbcs
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: rbcs
|
|
||||||
image: gitea.woggioni.net/woggioni/rbcs:memcache
|
|
||||||
imagePullPolicy: Always
|
|
||||||
command: ["java", "-Dlogback.configurationFile=logback.xml", "-XX:MaxRAMPercentage=75","-jar", "/home/luser/rbcs.jar"]
|
|
||||||
args: ['server', '-c', 'rbcs-server.xml']
|
|
||||||
ports:
|
|
||||||
- containerPort: 8080
|
|
||||||
volumeMounts:
|
|
||||||
- name: config-volume
|
|
||||||
mountPath: /home/luser/rbcs-server.xml
|
|
||||||
subPath: rbcs-server.xml
|
|
||||||
- name: cache-volume
|
|
||||||
mountPath: /home/luser/cache
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
memory: "0.25Gi"
|
|
||||||
cpu: "1"
|
|
||||||
limits:
|
|
||||||
memory: "0.5Gi"
|
|
||||||
cpu: "1"
|
|
||||||
volumes:
|
|
||||||
- name: config-volume
|
|
||||||
configMap:
|
|
||||||
name: rbcs-server
|
|
||||||
- name: cache-volume
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: rbcs-pvc
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: rbcs-service
|
|
||||||
spec:
|
|
||||||
type: LoadBalancer
|
|
||||||
ports:
|
|
||||||
- port: 8080
|
|
||||||
targetPort: 8080
|
|
||||||
protocol: TCP
|
|
||||||
selector:
|
|
||||||
app: rbcs
|
|
||||||
|
|
@@ -1,77 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: rbcs-server
|
|
||||||
data:
|
|
||||||
rbcs-server.xml: |
|
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<rbcs:server xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xmlns:rbcs="urn:net.woggioni.rbcs.server"
|
|
||||||
xmlns:rbcs-memcache="urn:net.woggioni.rbcs.server.memcache"
|
|
||||||
xs:schemaLocation="urn:net.woggioni.rbcs.server.memcache jpms://net.woggioni.rbcs.server.memcache/net/woggioni/rbcs/server/memcache/schema/rbcs-memcache.xsd urn:net.woggioni.rbcs.server jpms://net.woggioni.rbcs.server/net/woggioni/rbcs/server/schema/rbcs-server.xsd"
|
|
||||||
>
|
|
||||||
<bind host="0.0.0.0" port="8080" incoming-connections-backlog-size="128"/>
|
|
||||||
<connection
|
|
||||||
max-request-size="0xd000000"
|
|
||||||
idle-timeout="PT15S"
|
|
||||||
read-idle-timeout="PT30S"
|
|
||||||
write-idle-timeout="PT30S"/>
|
|
||||||
<event-executor use-virtual-threads="true"/>
|
|
||||||
<cache xs:type="rbcs:inMemoryCacheType" max-age="P7D" enable-compression="false" max-size="0x40000000" digest="SHA-224"/>
|
|
||||||
</rbcs:server>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: rbcs-deployment
|
|
||||||
labels:
|
|
||||||
app: rbcs
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: rbcs
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: rbcs
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: rbcs
|
|
||||||
image: gitea.woggioni.net/woggioni/rbcs:memcache
|
|
||||||
imagePullPolicy: Always
|
|
||||||
command: ["java", "-Dlogback.configurationFile=logback.xml", "-XX:MaxRAMPercentage=75","-jar", "/home/luser/rbcs.jar"]
|
|
||||||
args: ['server', '-c', 'rbcs-server.xml']
|
|
||||||
ports:
|
|
||||||
- containerPort: 8080
|
|
||||||
volumeMounts:
|
|
||||||
- name: config-volume
|
|
||||||
mountPath: /home/luser/rbcs-server.xml
|
|
||||||
subPath: rbcs-server.xml
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
memory: "0.5Gi"
|
|
||||||
cpu: "1"
|
|
||||||
limits:
|
|
||||||
memory: "4Gi"
|
|
||||||
cpu: "1"
|
|
||||||
volumes:
|
|
||||||
- name: config-volume
|
|
||||||
configMap:
|
|
||||||
name: rbcs-server
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: rbcs-service
|
|
||||||
spec:
|
|
||||||
type: LoadBalancer
|
|
||||||
ports:
|
|
||||||
- port: 8080
|
|
||||||
targetPort: 8080
|
|
||||||
protocol: TCP
|
|
||||||
selector:
|
|
||||||
app: rbcs
|
|
||||||
|
|
@@ -1,118 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: rbcs-server
|
|
||||||
data:
|
|
||||||
rbcs-server.xml: |
|
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<rbcs:server xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xmlns:rbcs="urn:net.woggioni.rbcs.server"
|
|
||||||
xmlns:rbcs-memcache="urn:net.woggioni.rbcs.server.memcache"
|
|
||||||
xs:schemaLocation="urn:net.woggioni.rbcs.server.memcache jpms://net.woggioni.rbcs.server.memcache/net/woggioni/rbcs/server/memcache/schema/rbcs-memcache.xsd urn:net.woggioni.rbcs.server jpms://net.woggioni.rbcs.server/net/woggioni/rbcs/server/schema/rbcs-server.xsd"
|
|
||||||
>
|
|
||||||
<bind host="0.0.0.0" port="8080" incoming-connections-backlog-size="128"/>
|
|
||||||
<connection
|
|
||||||
max-request-size="0xd000000"
|
|
||||||
idle-timeout="PT15S"
|
|
||||||
read-idle-timeout="PT30S"
|
|
||||||
write-idle-timeout="PT30S"/>
|
|
||||||
<event-executor use-virtual-threads="true"/>
|
|
||||||
<!--cache xs:type="rbcs:inMemoryCacheType" max-age="P7D" enable-compression="false" max-size="0x10000000" /-->
|
|
||||||
<cache xs:type="rbcs-memcache:memcacheCacheType" max-age="P7D" chunk-size="0x1000" digest="SHA-224">
|
|
||||||
<server host="memcached-service" port="11211" max-connections="256"/>
|
|
||||||
</cache>
|
|
||||||
</rbcs:server>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: rbcs-deployment
|
|
||||||
labels:
|
|
||||||
app: rbcs
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: rbcs
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: rbcs
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: rbcs
|
|
||||||
image: gitea.woggioni.net/woggioni/rbcs:memcache
|
|
||||||
imagePullPolicy: Always
|
|
||||||
command: ["java", "-Dlogback.configurationFile=logback.xml", "-XX:MaxRAMPercentage=75","-jar", "/home/luser/rbcs.jar"]
|
|
||||||
args: ['server', '-c', 'rbcs-server.xml']
|
|
||||||
ports:
|
|
||||||
- containerPort: 8080
|
|
||||||
volumeMounts:
|
|
||||||
- name: config-volume
|
|
||||||
mountPath: /home/luser/rbcs-server.xml
|
|
||||||
subPath: rbcs-server.xml
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
memory: "0.5Gi"
|
|
||||||
cpu: "1"
|
|
||||||
limits:
|
|
||||||
memory: "0.5Gi"
|
|
||||||
cpu: "3.5"
|
|
||||||
volumes:
|
|
||||||
- name: config-volume
|
|
||||||
configMap:
|
|
||||||
name: rbcs-server
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: rbcs-service
|
|
||||||
spec:
|
|
||||||
type: LoadBalancer
|
|
||||||
ports:
|
|
||||||
- port: 8080
|
|
||||||
targetPort: 8080
|
|
||||||
protocol: TCP
|
|
||||||
selector:
|
|
||||||
app: rbcs
|
|
||||||
---
|
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: memcached-deployment
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: memcached
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: memcached
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: memcached
|
|
||||||
image: memcached
|
|
||||||
args: ["-I", "128m", "-m", "4096", "-t", "1"]
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
memory: "1Gi"
|
|
||||||
cpu: "500m" # 0.5 CPU
|
|
||||||
limits:
|
|
||||||
memory: "5Gi"
|
|
||||||
cpu: "500m" # 0.5 CP
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: memcached-service
|
|
||||||
spec:
|
|
||||||
type: ClusterIP # ClusterIP makes it accessible only within the cluster
|
|
||||||
ports:
|
|
||||||
- port: 11211 # Default memcached port
|
|
||||||
targetPort: 11211
|
|
||||||
protocol: TCP
|
|
||||||
selector:
|
|
||||||
app: memcached
|
|
@@ -16,22 +16,22 @@ All test were executed under the following conditions:
|
|||||||
|
|
||||||
| Cache backend | CPU | CPU quota | Memory quota (GB) | Request size (b) | Client connections | PUT (req/s) | GET (req/s) |
|
| Cache backend | CPU | CPU quota | Memory quota (GB) | Request size (b) | Client connections | PUT (req/s) | GET (req/s) |
|
||||||
|----------------|---------------------|-----------|-------------------|------------------|--------------------|-------------|-------------|
|
|----------------|---------------------|-----------|-------------------|------------------|--------------------|-------------|-------------|
|
||||||
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 128 | 10 | 7867 | 13762 |
|
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 128 | 10 | 3691 | 4037 |
|
||||||
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 128 | 100 | 7728 | 14180 |
|
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 128 | 100 | 6881 | 7483 |
|
||||||
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 512 | 10 | 7964 | 10992 |
|
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 512 | 10 | 3790 | 4069 |
|
||||||
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 512 | 100 | 8415 | 12478 |
|
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 512 | 100 | 6716 | 7408 |
|
||||||
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 4096 | 10 | 4268 | 5395 |
|
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 4096 | 10 | 3399 | 1974 |
|
||||||
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 4096 | 100 | 5585 | 8259 |
|
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 4096 | 100 | 5341 | 6402 |
|
||||||
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 65536 | 10 | 1063 | 1185 |
|
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 65536 | 10 | 1099 | 1116 |
|
||||||
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 65536 | 100 | 1522 | 1366 |
|
| in-memory | Intel Celeron J3455 | 1.00 | 4 | 65536 | 100 | 1379 | 1703 |
|
||||||
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 128 | 10 | 11271 | 14092 |
|
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 128 | 10 | 4443 | 5170 |
|
||||||
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 128 | 100 | 16064 | 24201 |
|
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 128 | 100 | 12813 | 13568 |
|
||||||
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 512 | 10 | 11504 | 13077 |
|
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 512 | 10 | 4450 | 4383 |
|
||||||
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 512 | 100 | 17379 | 22094 |
|
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 512 | 100 | 12212 | 13586 |
|
||||||
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 4096 | 10 | 9151 | 9489 |
|
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 4096 | 10 | 3441 | 3012 |
|
||||||
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 4096 | 100 | 13194 | 18268 |
|
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 4096 | 100 | 8982 | 10452 |
|
||||||
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 65536 | 10 | 1590 | 1174 |
|
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 65536 | 10 | 1391 | 1167 |
|
||||||
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 65536 | 100 | 1539 | 1561 |
|
| in-memory | Intel Celeron J3455 | 3.50 | 4 | 65536 | 100 | 1303 | 1151 |
|
||||||
|
|
||||||
### Filesystem cache backend
|
### Filesystem cache backend
|
||||||
|
|
||||||
@@ -42,22 +42,23 @@ TLS: disabled
|
|||||||
|
|
||||||
| Cache backend | CPU | CPU quota | Memory quota (GB) | Request size (b) | Client connections | PUT (req/s) | GET (req/s) |
|
| Cache backend | CPU | CPU quota | Memory quota (GB) | Request size (b) | Client connections | PUT (req/s) | GET (req/s) |
|
||||||
|---------------|---------------------|-----------|-------------------|------------------|--------------------|-------------|-------------|
|
|---------------|---------------------|-----------|-------------------|------------------|--------------------|-------------|-------------|
|
||||||
| filesystem | Intel Celeron J3455 | 1.00 | 0.5 | 128 | 10 | 1478 | 5771 |
|
| filesystem | Intel Celeron J3455 | 1.00 | 0.25 | 128 | 10 | 1208 | 2048 |
|
||||||
| filesystem | Intel Celeron J3455 | 1.00 | 0.5 | 128 | 100 | 3166 | 8070 |
|
| filesystem | Intel Celeron J3455 | 1.00 | 0.25 | 128 | 100 | 1304 | 2394 |
|
||||||
| filesystem | Intel Celeron J3455 | 1.00 | 0.5 | 512 | 10 | 1717 | 5895 |
|
| filesystem | Intel Celeron J3455 | 1.00 | 0.25 | 512 | 10 | 1408 | 2157 |
|
||||||
| filesystem | Intel Celeron J3455 | 1.00 | 0.5 | 512 | 100 | 1125 | 6564 |
|
| filesystem | Intel Celeron J3455 | 1.00 | 0.25 | 512 | 100 | 1282 | 1888 |
|
||||||
| filesystem | Intel Celeron J3455 | 1.00 | 0.5 | 4096 | 10 | 819 | 2509 |
|
| filesystem | Intel Celeron J3455 | 1.00 | 0.25 | 4096 | 10 | 1291 | 1256 |
|
||||||
| filesystem | Intel Celeron J3455 | 1.00 | 0.5 | 4096 | 100 | 1136 | 2365 |
|
| filesystem | Intel Celeron J3455 | 1.00 | 0.25 | 4096 | 100 | 1170 | 1423 |
|
||||||
| filesystem | Intel Celeron J3455 | 1.00 | 0.5 | 65536 | 10 | 584 | 632 |
|
| filesystem | Intel Celeron J3455 | 1.00 | 0.25 | 65536 | 10 | 313 | 606 |
|
||||||
| filesystem | Intel Celeron J3455 | 1.00 | 0.5 | 65536 | 100 | 529 | 635 |
|
| filesystem | Intel Celeron J3455 | 1.00 | 0.25 | 65536 | 100 | 298 | 609 |
|
||||||
| filesystem | Intel Celeron J3455 | 3.50 | 0.5 | 128 | 10 | 1227 | 3342 |
|
| filesystem | Intel Celeron J3455 | 3.50 | 0.25 | 128 | 10 | 2195 | 3477 |
|
||||||
| filesystem | Intel Celeron J3455 | 3.50 | 0.5 | 128 | 100 | 1156 | 4035 |
|
| filesystem | Intel Celeron J3455 | 3.50 | 0.25 | 128 | 100 | 2480 | 6207 |
|
||||||
| filesystem | Intel Celeron J3455 | 3.50 | 0.5 | 512 | 10 | 979 | 3294 |
|
| filesystem | Intel Celeron J3455 | 3.50 | 0.25 | 512 | 10 | 2164 | 3413 |
|
||||||
| filesystem | Intel Celeron J3455 | 3.50 | 0.5 | 512 | 100 | 1217 | 3888 |
|
| filesystem | Intel Celeron J3455 | 3.50 | 0.25 | 512 | 100 | 2842 | 6218 |
|
||||||
| filesystem | Intel Celeron J3455 | 3.50 | 0.5 | 4096 | 10 | 535 | 1805 |
|
| filesystem | Intel Celeron J3455 | 3.50 | 0.25 | 4096 | 10 | 1302 | 2591 |
|
||||||
| filesystem | Intel Celeron J3455 | 3.50 | 0.5 | 4096 | 100 | 555 | 1910 |
|
| filesystem | Intel Celeron J3455 | 3.50 | 0.25 | 4096 | 100 | 2270 | 3045 |
|
||||||
| filesystem | Intel Celeron J3455 | 3.50 | 0.5 | 65536 | 10 | 301 | 494 |
|
| filesystem | Intel Celeron J3455 | 3.50 | 0.25 | 65536 | 10 | 375 | 394 |
|
||||||
| filesystem | Intel Celeron J3455 | 3.50 | 0.5 | 65536 | 100 | 353 | 595 |
|
| filesystem | Intel Celeron J3455 | 3.50 | 0.25 | 65536 | 100 | 364 | 462 |
|
||||||
|
|
||||||
|
|
||||||
### Memcache cache backend
|
### Memcache cache backend
|
||||||
|
|
||||||
@@ -68,19 +69,19 @@ TLS: disabled
|
|||||||
|
|
||||||
| Cache backend | CPU | CPU quota | Memory quota (GB) | Request size (b) | Client connections | PUT (req/s) | GET (req/s) |
|
| Cache backend | CPU | CPU quota | Memory quota (GB) | Request size (b) | Client connections | PUT (req/s) | GET (req/s) |
|
||||||
|---------------|---------------------|-----------|-------------------|------------------|--------------------|-------------|-------------|
|
|---------------|---------------------|-----------|-------------------|------------------|--------------------|-------------|-------------|
|
||||||
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 128 | 10 | 3380 | 6083 |
|
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 128 | 10 | 2505 | 2578 |
|
||||||
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 128 | 100 | 3323 | 4998 |
|
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 128 | 100 | 3582 | 3935 |
|
||||||
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 512 | 10 | 3924 | 6086 |
|
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 512 | 10 | 2495 | 2784 |
|
||||||
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 512 | 100 | 3440 | 5049 |
|
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 512 | 100 | 3565 | 3883 |
|
||||||
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 4096 | 10 | 3347 | 5255 |
|
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 4096 | 10 | 2174 | 2505 |
|
||||||
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 4096 | 100 | 3685 | 4693 |
|
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 4096 | 100 | 2937 | 3563 |
|
||||||
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 65536 | 10 | 1304 | 1343 |
|
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 65536 | 10 | 648 | 1074 |
|
||||||
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 65536 | 100 | 1481 | 1541 |
|
| memcache | Intel Celeron J3455 | 1.00 | 0.25 | 65536 | 100 | 724 | 1548 |
|
||||||
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 128 | 10 | 4667 | 7984 |
|
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 128 | 10 | 2362 | 2927 |
|
||||||
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 128 | 100 | 4044 | 8358 |
|
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 128 | 100 | 5491 | 6531 |
|
||||||
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 512 | 10 | 4177 | 7828 |
|
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 512 | 10 | 2125 | 2807 |
|
||||||
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 512 | 100 | 4079 | 8794 |
|
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 512 | 100 | 5173 | 6242 |
|
||||||
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 4096 | 10 | 4588 | 6869 |
|
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 4096 | 10 | 1720 | 2397 |
|
||||||
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 4096 | 100 | 5343 | 7797 |
|
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 4096 | 100 | 3871 | 5859 |
|
||||||
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 65536 | 10 | 1624 | 1317 |
|
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 65536 | 10 | 616 | 1016 |
|
||||||
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 65536 | 100 | 1633 | 1317 |
|
| memcache | Intel Celeron J3455 | 3.50 | 0.25 | 65536 | 100 | 820 | 1677 |
|
||||||
|
@@ -5,7 +5,7 @@ WORKDIR /home/luser
|
|||||||
|
|
||||||
FROM base-release AS release-vanilla
|
FROM base-release AS release-vanilla
|
||||||
ADD rbcs-cli-envelope-*.jar rbcs.jar
|
ADD rbcs-cli-envelope-*.jar rbcs.jar
|
||||||
ENTRYPOINT ["java", "-Dlogback.configurationFile=logback.xml", "-XX:MaxRAMPercentage=70", "-XX:GCTimeRatio=24", "-XX:+UseZGC", "-XX:+ZGenerational", "-jar", "/home/luser/rbcs.jar"]
|
ENTRYPOINT ["java", "-XX:+UseSerialGC", "-XX:GCTimeRatio=24", "-jar", "/home/luser/rbcs.jar", "server"]
|
||||||
|
|
||||||
FROM base-release AS release-memcache
|
FROM base-release AS release-memcache
|
||||||
ADD --chown=luser:luser rbcs-cli-envelope-*.jar rbcs.jar
|
ADD --chown=luser:luser rbcs-cli-envelope-*.jar rbcs.jar
|
||||||
@@ -14,21 +14,10 @@ WORKDIR /home/luser/plugins
|
|||||||
RUN --mount=type=bind,source=.,target=/build/distributions tar -xf /build/distributions/rbcs-server-memcache*.tar
|
RUN --mount=type=bind,source=.,target=/build/distributions tar -xf /build/distributions/rbcs-server-memcache*.tar
|
||||||
WORKDIR /home/luser
|
WORKDIR /home/luser
|
||||||
ADD logback.xml .
|
ADD logback.xml .
|
||||||
ENTRYPOINT ["java", "-Dlogback.configurationFile=logback.xml", "-XX:MaxRAMPercentage=70", "-XX:GCTimeRatio=24", "-XX:+UseZGC", "-XX:+ZGenerational", "-jar", "/home/luser/rbcs.jar"]
|
ENTRYPOINT ["java", "-Dlogback.configurationFile=logback.xml", "-XX:+UseSerialGC", "-XX:GCTimeRatio=24", "-jar", "/home/luser/rbcs.jar", "server"]
|
||||||
|
|
||||||
FROM scratch AS release-native
|
FROM scratch AS release-native
|
||||||
ADD rbcs-cli.upx /rbcs/rbcs-cli
|
ADD rbcs-cli.upx /rbcs/rbcs-cli
|
||||||
ENV RBCS_CONFIGURATION_DIR="/rbcs"
|
ENV RBCS_CONFIGURATION_DIR="/rbcs"
|
||||||
WORKDIR /rbcs
|
WORKDIR /rbcs
|
||||||
ENTRYPOINT ["/rbcs/rbcs-cli", "-XX:MaximumHeapSizePercent=70"]
|
ENTRYPOINT ["/rbcs/rbcs-cli"]
|
||||||
|
|
||||||
FROM debian:12-slim AS release-jlink
|
|
||||||
RUN mkdir -p /usr/share/java/rbcs
|
|
||||||
RUN --mount=type=bind,source=.,target=/build/distributions tar -xf /build/distributions/rbcs-cli*.tar -C /usr/share/java/rbcs
|
|
||||||
ADD --chmod=755 rbcs-cli.sh /usr/local/bin/rbcs-cli
|
|
||||||
RUN adduser -u 1000 luser
|
|
||||||
USER luser
|
|
||||||
WORKDIR /home/luser
|
|
||||||
ADD logback.xml .
|
|
||||||
ENV JAVA_OPTS=-XX:-UseJVMCICompiler\ -Dlogback.configurationFile=logback.xml\ -XX:MaxRAMPercentage=70\ -XX:GCTimeRatio=24\ -XX:+UseZGC\ -XX:+ZGenerational
|
|
||||||
ENTRYPOINT ["/usr/local/bin/rbcs-cli"]
|
|
||||||
|
@@ -11,15 +11,11 @@ The `memcache` image is similar to the `vanilla` image, except that it also cont
|
|||||||
the `rbcs-server-memcache` plugin in the `plugins` folder, use this image if you don't want to use the `native`
|
the `rbcs-server-memcache` plugin in the `plugins` folder, use this image if you don't want to use the `native`
|
||||||
image and want to use memcache as the cache backend
|
image and want to use memcache as the cache backend
|
||||||
|
|
||||||
The `native` image contains a native, statically-linked executable created with GraalVM Native Image
|
The `native` image contains a native, statically-linked executable created with GraalVM
|
||||||
that has no userspace dependencies. It also embeds the memcache plugin inside the executable.
|
that has no userspace dependencies. It also embeds the memcache plugin inside the executable.
|
||||||
Use this image for maximum efficiency and minimal memory footprint.
|
Use this image for maximum efficiency and minimal memory footprint.
|
||||||
|
|
||||||
The `jlink` image contains a custom Java runtime created with GraalVM's Jlink
|
## Which image shoud I use?
|
||||||
that only depends on glibc. It also contains the memcache plugin in the module path.
|
|
||||||
Use this image for best performance.
|
|
||||||
|
|
||||||
## Which image should I use?
|
|
||||||
The `native` image uses Java's SerialGC, so it's ideal for constrained environment like containers or small servers,
|
The `native` image uses Java's SerialGC, so it's ideal for constrained environment like containers or small servers,
|
||||||
if you have a lot of resources and want to squeeze out the maximum throughput you should consider the
|
if you have a lot of resources and want to squeeze out the maximum throughput you should consider the
|
||||||
`vanilla` or `memcache` image, then choose and fine tune the garbage collector.
|
`vanilla` or `memcache` image, then choose and fine tune the garbage collector.
|
||||||
|
@@ -29,7 +29,7 @@ Provider<Copy> prepareDockerBuild = tasks.register('prepareDockerBuild', Copy) {
|
|||||||
group = 'docker'
|
group = 'docker'
|
||||||
into project.layout.buildDirectory.file('docker')
|
into project.layout.buildDirectory.file('docker')
|
||||||
from(configurations.docker)
|
from(configurations.docker)
|
||||||
from(files('Dockerfile', 'rbcs-cli.sh'))
|
from(file('Dockerfile'))
|
||||||
from(rootProject.file('conf')) {
|
from(rootProject.file('conf')) {
|
||||||
include 'logback.xml'
|
include 'logback.xml'
|
||||||
}
|
}
|
||||||
|
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
DIR=/usr/share/java/rbcs
|
|
||||||
$DIR/bin/java $JAVA_OPTS -m net.woggioni.rbcs.cli "$@"
|
|
@@ -2,9 +2,9 @@ org.gradle.configuration-cache=false
|
|||||||
org.gradle.parallel=true
|
org.gradle.parallel=true
|
||||||
org.gradle.caching=true
|
org.gradle.caching=true
|
||||||
|
|
||||||
rbcs.version = 0.3.0-SNAPSHOT
|
rbcs.version = 0.2.0
|
||||||
|
|
||||||
lys.version = 2025.05.07
|
lys.version = 2025.03.08
|
||||||
|
|
||||||
gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven
|
gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven
|
||||||
docker.registry.url=gitea.woggioni.net
|
docker.registry.url=gitea.woggioni.net
|
||||||
|
@@ -18,7 +18,6 @@ import net.woggioni.gradle.graalvm.UpxTask
|
|||||||
import net.woggioni.gradle.graalvm.JlinkPlugin
|
import net.woggioni.gradle.graalvm.JlinkPlugin
|
||||||
import net.woggioni.gradle.graalvm.JlinkTask
|
import net.woggioni.gradle.graalvm.JlinkTask
|
||||||
|
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
configureNativeImage {
|
configureNativeImage {
|
||||||
java {
|
java {
|
||||||
@@ -30,7 +29,6 @@ sourceSets {
|
|||||||
}
|
}
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
|
|
||||||
release {
|
release {
|
||||||
transitive = false
|
transitive = false
|
||||||
canBeConsumed = true
|
canBeConsumed = true
|
||||||
@@ -122,36 +120,16 @@ nativeImage {
|
|||||||
linkAtBuildTime = false
|
linkAtBuildTime = false
|
||||||
classpath = project.files(jarTaskProvider, configurations.nativeImage)
|
classpath = project.files(jarTaskProvider, configurations.nativeImage)
|
||||||
compressExecutable = true
|
compressExecutable = true
|
||||||
compressionLevel = 6
|
compressionLevel = 10
|
||||||
useLZMA = false
|
useLZMA = false
|
||||||
}
|
}
|
||||||
|
|
||||||
Provider<UpxTask> upxTaskProvider = tasks.named(NativeImagePlugin.UPX_TASK_NAME, UpxTask) {
|
Provider<UpxTask> upxTaskProvider = tasks.named(NativeImagePlugin.UPX_TASK_NAME, UpxTask) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Provider<JlinkTask> jlinkTaskProvider = tasks.named(JlinkPlugin.JLINK_TASK_NAME, JlinkTask) {
|
tasks.named(JlinkPlugin.JLINK_TASK_NAME, JlinkTask) {
|
||||||
toolchain {
|
|
||||||
languageVersion = JavaLanguageVersion.of(21)
|
|
||||||
vendor = JvmVendorSpec.GRAAL_VM
|
|
||||||
}
|
|
||||||
|
|
||||||
mainClass = mainClassName
|
mainClass = mainClassName
|
||||||
mainModule = 'net.woggioni.rbcs.cli'
|
mainModule = 'net.woggioni.rbcs.cli'
|
||||||
classpath = project.files(
|
|
||||||
configurations.configureNativeImageRuntimeClasspath,
|
|
||||||
sourceSets.configureNativeImage.output
|
|
||||||
)
|
|
||||||
additionalModules = [
|
|
||||||
'net.woggioni.rbcs.server.memcache',
|
|
||||||
'ch.qos.logback.classic',
|
|
||||||
'jdk.crypto.ec'
|
|
||||||
]
|
|
||||||
compressionLevel = 2
|
|
||||||
stripDebug = false
|
|
||||||
}
|
|
||||||
|
|
||||||
Provider<Tar> jlinkDistTarTaskProvider = tasks.named(JlinkPlugin.JLINK_DIST_TAR_TASK_NAME, Tar) {
|
|
||||||
exclude 'lib/libjvmcicompiler.so'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.named(JavaPlugin.PROCESS_RESOURCES_TASK_NAME, ProcessResources) {
|
tasks.named(JavaPlugin.PROCESS_RESOURCES_TASK_NAME, ProcessResources) {
|
||||||
@@ -165,7 +143,6 @@ tasks.named(JavaPlugin.PROCESS_RESOURCES_TASK_NAME, ProcessResources) {
|
|||||||
artifacts {
|
artifacts {
|
||||||
release(envelopeJarTaskProvider)
|
release(envelopeJarTaskProvider)
|
||||||
release(upxTaskProvider)
|
release(upxTaskProvider)
|
||||||
release(jlinkDistTarTaskProvider)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
Args=-O3 -march=x86-64-v2 --gc=serial --install-exit-handlers --initialize-at-run-time=io.netty --enable-url-protocols=jpms --initialize-at-build-time=net.woggioni.rbcs.common.RbcsUrlStreamHandlerFactory,net.woggioni.rbcs.common.RbcsUrlStreamHandlerFactory$JpmsHandler
|
Args=-O3 -march=skylake --gc=serial --install-exit-handlers --initialize-at-run-time=io.netty --enable-url-protocols=jpms --initialize-at-build-time=net.woggioni.rbcs.common.RbcsUrlStreamHandlerFactory,net.woggioni.rbcs.common.RbcsUrlStreamHandlerFactory$JpmsHandler
|
||||||
#-H:TraceClassInitialization=io.netty.handler.ssl.BouncyCastleAlpnSslUtils
|
#-H:TraceClassInitialization=io.netty.handler.ssl.BouncyCastleAlpnSslUtils
|
@@ -120,14 +120,6 @@
|
|||||||
"name":"io.netty.buffer.AbstractReferenceCountedByteBuf",
|
"name":"io.netty.buffer.AbstractReferenceCountedByteBuf",
|
||||||
"fields":[{"name":"refCnt"}]
|
"fields":[{"name":"refCnt"}]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name":"io.netty.buffer.AdaptivePoolingAllocator$Chunk",
|
|
||||||
"fields":[{"name":"refCnt"}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name":"io.netty.buffer.AdaptivePoolingAllocator$Magazine",
|
|
||||||
"fields":[{"name":"nextInLine"}]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name":"io.netty.channel.AbstractChannelHandlerContext",
|
"name":"io.netty.channel.AbstractChannelHandlerContext",
|
||||||
"fields":[{"name":"handlerState"}]
|
"fields":[{"name":"handlerState"}]
|
||||||
@@ -292,13 +284,20 @@
|
|||||||
"fields":[{"name":"producerIndex"}]
|
"fields":[{"name":"producerIndex"}]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name":"io.netty.util.internal.shaded.org.jctools.queues.MpmcArrayQueueConsumerIndexField",
|
"name":"io.netty.util.internal.shaded.org.jctools.queues.unpadded.MpscUnpaddedArrayQueueConsumerIndexField",
|
||||||
"fields":[{"name":"consumerIndex"}]
|
"fields":[{"name":"consumerIndex"}]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name":"io.netty.util.internal.shaded.org.jctools.queues.MpmcArrayQueueProducerIndexField",
|
"name":"io.netty.util.internal.shaded.org.jctools.queues.unpadded.MpscUnpaddedArrayQueueProducerIndexField",
|
||||||
"fields":[{"name":"producerIndex"}]
|
"fields":[{"name":"producerIndex"}]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name":"io.netty.util.internal.shaded.org.jctools.queues.unpadded.MpscUnpaddedArrayQueueProducerLimitField",
|
||||||
|
"fields":[{"name":"producerLimit"}]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"java.io.FilePermission"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name":"java.lang.Object",
|
"name":"java.lang.Object",
|
||||||
"allDeclaredFields":true,
|
"allDeclaredFields":true,
|
||||||
@@ -308,14 +307,26 @@
|
|||||||
"name":"java.lang.ProcessHandle",
|
"name":"java.lang.ProcessHandle",
|
||||||
"methods":[{"name":"current","parameterTypes":[] }, {"name":"pid","parameterTypes":[] }]
|
"methods":[{"name":"current","parameterTypes":[] }, {"name":"pid","parameterTypes":[] }]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name":"java.lang.RuntimePermission"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name":"java.lang.System",
|
"name":"java.lang.System",
|
||||||
"methods":[{"name":"console","parameterTypes":[] }]
|
"methods":[{"name":"console","parameterTypes":[] }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name":"java.lang.Thread",
|
"name":"java.lang.Thread",
|
||||||
"fields":[{"name":"threadLocalRandomProbe"}],
|
"fields":[{"name":"threadLocalRandomProbe"}]
|
||||||
"methods":[{"name":"isVirtual","parameterTypes":[] }]
|
},
|
||||||
|
{
|
||||||
|
"name":"java.net.NetPermission"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"java.net.SocketPermission"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"java.net.URLPermission",
|
||||||
|
"methods":[{"name":"<init>","parameterTypes":["java.lang.String","java.lang.String"] }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name":"java.nio.Bits",
|
"name":"java.nio.Bits",
|
||||||
@@ -347,12 +358,18 @@
|
|||||||
{
|
{
|
||||||
"name":"java.security.AlgorithmParametersSpi"
|
"name":"java.security.AlgorithmParametersSpi"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name":"java.security.AllPermission"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name":"java.security.KeyStoreSpi"
|
"name":"java.security.KeyStoreSpi"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name":"java.security.SecureRandomParameters"
|
"name":"java.security.SecureRandomParameters"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name":"java.security.SecurityPermission"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name":"java.sql.Connection"
|
"name":"java.sql.Connection"
|
||||||
},
|
},
|
||||||
@@ -427,6 +444,9 @@
|
|||||||
"name":"java.time.ZonedDateTime",
|
"name":"java.time.ZonedDateTime",
|
||||||
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
|
"methods":[{"name":"parse","parameterTypes":["java.lang.CharSequence"] }]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name":"java.util.PropertyPermission"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name":"java.util.concurrent.ForkJoinTask",
|
"name":"java.util.concurrent.ForkJoinTask",
|
||||||
"fields":[{"name":"aux"}, {"name":"status"}]
|
"fields":[{"name":"aux"}, {"name":"status"}]
|
||||||
@@ -447,11 +467,22 @@
|
|||||||
"name":"java.util.concurrent.atomic.Striped64$Cell",
|
"name":"java.util.concurrent.atomic.Striped64$Cell",
|
||||||
"fields":[{"name":"value"}]
|
"fields":[{"name":"value"}]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name":"java.util.zip.Adler32",
|
||||||
|
"methods":[{"name":"update","parameterTypes":["java.nio.ByteBuffer"] }]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"java.util.zip.CRC32",
|
||||||
|
"methods":[{"name":"update","parameterTypes":["java.nio.ByteBuffer"] }]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name":"javax.security.auth.x500.X500Principal",
|
"name":"javax.security.auth.x500.X500Principal",
|
||||||
"fields":[{"name":"thisX500Name"}],
|
"fields":[{"name":"thisX500Name"}],
|
||||||
"methods":[{"name":"<init>","parameterTypes":["sun.security.x509.X500Name"] }]
|
"methods":[{"name":"<init>","parameterTypes":["sun.security.x509.X500Name"] }]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name":"javax.smartcardio.CardPermission"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name":"jdk.internal.misc.Unsafe",
|
"name":"jdk.internal.misc.Unsafe",
|
||||||
"methods":[{"name":"getUnsafe","parameterTypes":[] }]
|
"methods":[{"name":"getUnsafe","parameterTypes":[] }]
|
||||||
@@ -557,9 +588,6 @@
|
|||||||
"name":"net.woggioni.rbcs.server.exception.ExceptionHandler",
|
"name":"net.woggioni.rbcs.server.exception.ExceptionHandler",
|
||||||
"methods":[{"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] }]
|
"methods":[{"name":"exceptionCaught","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Throwable"] }]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name":"net.woggioni.rbcs.server.handler.BlackHoleRequestHandler"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name":"net.woggioni.rbcs.server.handler.MaxRequestSizeHandler",
|
"name":"net.woggioni.rbcs.server.handler.MaxRequestSizeHandler",
|
||||||
"methods":[{"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] }]
|
"methods":[{"name":"channelRead","parameterTypes":["io.netty.channel.ChannelHandlerContext","java.lang.Object"] }]
|
||||||
@@ -587,7 +615,7 @@
|
|||||||
{
|
{
|
||||||
"name":"sun.misc.Unsafe",
|
"name":"sun.misc.Unsafe",
|
||||||
"fields":[{"name":"theUnsafe"}],
|
"fields":[{"name":"theUnsafe"}],
|
||||||
"methods":[{"name":"copyMemory","parameterTypes":["java.lang.Object","long","java.lang.Object","long","long"] }, {"name":"getAndAddLong","parameterTypes":["java.lang.Object","long","long"] }, {"name":"getAndSetObject","parameterTypes":["java.lang.Object","long","java.lang.Object"] }, {"name":"invokeCleaner","parameterTypes":["java.nio.ByteBuffer"] }]
|
"methods":[{"name":"copyMemory","parameterTypes":["java.lang.Object","long","java.lang.Object","long","long"] }, {"name":"getAndAddLong","parameterTypes":["java.lang.Object","long","long"] }, {"name":"getAndSetObject","parameterTypes":["java.lang.Object","long","java.lang.Object"] }, {"name":"invokeCleaner","parameterTypes":["java.nio.ByteBuffer"] }, {"name":"storeFence","parameterTypes":[] }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name":"sun.nio.ch.SelectorImpl",
|
"name":"sun.nio.ch.SelectorImpl",
|
||||||
@@ -609,6 +637,10 @@
|
|||||||
"name":"sun.security.provider.DSA$SHA256withDSA",
|
"name":"sun.security.provider.DSA$SHA256withDSA",
|
||||||
"methods":[{"name":"<init>","parameterTypes":[] }]
|
"methods":[{"name":"<init>","parameterTypes":[] }]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name":"sun.security.provider.JavaKeyStore$JKS",
|
||||||
|
"methods":[{"name":"<init>","parameterTypes":[] }]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name":"sun.security.provider.MD5",
|
"name":"sun.security.provider.MD5",
|
||||||
"methods":[{"name":"<init>","parameterTypes":[] }]
|
"methods":[{"name":"<init>","parameterTypes":[] }]
|
||||||
@@ -697,14 +729,6 @@
|
|||||||
"name":"sun.security.x509.CertificatePoliciesExtension",
|
"name":"sun.security.x509.CertificatePoliciesExtension",
|
||||||
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
|
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name":"sun.security.x509.ExtendedKeyUsageExtension",
|
|
||||||
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name":"sun.security.x509.IssuerAlternativeNameExtension",
|
|
||||||
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name":"sun.security.x509.KeyUsageExtension",
|
"name":"sun.security.x509.KeyUsageExtension",
|
||||||
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
|
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
|
||||||
|
@@ -32,12 +32,14 @@
|
|||||||
"pattern":"\\Qnet/woggioni/rbcs/cli/logback.xml\\E"
|
"pattern":"\\Qnet/woggioni/rbcs/cli/logback.xml\\E"
|
||||||
}, {
|
}, {
|
||||||
"pattern":"\\Qnet/woggioni/rbcs/client/schema/rbcs-client.xsd\\E"
|
"pattern":"\\Qnet/woggioni/rbcs/client/schema/rbcs-client.xsd\\E"
|
||||||
}, {
|
|
||||||
"pattern":"\\Qnet/woggioni/rbcs/server/memcache/schema/rbcs-memcache.xsd\\E"
|
|
||||||
}, {
|
}, {
|
||||||
"pattern":"\\Qnet/woggioni/rbcs/server/rbcs-default.xml\\E"
|
"pattern":"\\Qnet/woggioni/rbcs/server/rbcs-default.xml\\E"
|
||||||
}, {
|
}, {
|
||||||
"pattern":"\\Qnet/woggioni/rbcs/server/schema/rbcs-server.xsd\\E"
|
"pattern":"\\Qnet/woggioni/rbcs/server/schema/rbcs-server.xsd\\E"
|
||||||
|
}, {
|
||||||
|
"pattern":"\\Q/net/woggioni/rbcs/server/memcache/schema/rbcs-memcache.xsd\\E"
|
||||||
|
}, {
|
||||||
|
"pattern":"java.base:\\Qsun/text/resources/LineBreakIteratorData\\E"
|
||||||
}]},
|
}]},
|
||||||
"bundles":[{
|
"bundles":[{
|
||||||
"name":"com.sun.org.apache.xerces.internal.impl.xpath.regex.message",
|
"name":"com.sun.org.apache.xerces.internal.impl.xpath.regex.message",
|
||||||
|
@@ -7,10 +7,8 @@ import io.netty.channel.Channel
|
|||||||
import io.netty.channel.ChannelHandlerContext
|
import io.netty.channel.ChannelHandlerContext
|
||||||
import io.netty.channel.ChannelOption
|
import io.netty.channel.ChannelOption
|
||||||
import io.netty.channel.ChannelPipeline
|
import io.netty.channel.ChannelPipeline
|
||||||
import io.netty.channel.IoEventLoopGroup
|
|
||||||
import io.netty.channel.MultiThreadIoEventLoopGroup
|
|
||||||
import io.netty.channel.SimpleChannelInboundHandler
|
import io.netty.channel.SimpleChannelInboundHandler
|
||||||
import io.netty.channel.nio.NioIoHandler
|
import io.netty.channel.nio.NioEventLoopGroup
|
||||||
import io.netty.channel.pool.AbstractChannelPoolHandler
|
import io.netty.channel.pool.AbstractChannelPoolHandler
|
||||||
import io.netty.channel.pool.ChannelPool
|
import io.netty.channel.pool.ChannelPool
|
||||||
import io.netty.channel.pool.FixedChannelPool
|
import io.netty.channel.pool.FixedChannelPool
|
||||||
@@ -34,8 +32,12 @@ import io.netty.handler.timeout.IdleState
|
|||||||
import io.netty.handler.timeout.IdleStateEvent
|
import io.netty.handler.timeout.IdleStateEvent
|
||||||
import io.netty.handler.timeout.IdleStateHandler
|
import io.netty.handler.timeout.IdleStateHandler
|
||||||
import io.netty.util.concurrent.Future
|
import io.netty.util.concurrent.Future
|
||||||
import io.netty.util.concurrent.Future as NettyFuture
|
|
||||||
import io.netty.util.concurrent.GenericFutureListener
|
import io.netty.util.concurrent.GenericFutureListener
|
||||||
|
import net.woggioni.rbcs.api.CacheValueMetadata
|
||||||
|
import net.woggioni.rbcs.common.RBCS.loadKeystore
|
||||||
|
import net.woggioni.rbcs.common.createLogger
|
||||||
|
import net.woggioni.rbcs.common.debug
|
||||||
|
import net.woggioni.rbcs.common.trace
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.net.InetSocketAddress
|
import java.net.InetSocketAddress
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
@@ -48,23 +50,19 @@ import java.util.concurrent.atomic.AtomicInteger
|
|||||||
import javax.net.ssl.TrustManagerFactory
|
import javax.net.ssl.TrustManagerFactory
|
||||||
import javax.net.ssl.X509TrustManager
|
import javax.net.ssl.X509TrustManager
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
import net.woggioni.rbcs.api.CacheValueMetadata
|
import io.netty.util.concurrent.Future as NettyFuture
|
||||||
import net.woggioni.rbcs.common.RBCS.loadKeystore
|
|
||||||
import net.woggioni.rbcs.common.createLogger
|
|
||||||
import net.woggioni.rbcs.common.debug
|
|
||||||
import net.woggioni.rbcs.common.trace
|
|
||||||
|
|
||||||
class RemoteBuildCacheClient(private val profile: Configuration.Profile) : AutoCloseable {
|
class RemoteBuildCacheClient(private val profile: Configuration.Profile) : AutoCloseable {
|
||||||
companion object {
|
companion object {
|
||||||
private val log = createLogger<RemoteBuildCacheClient>()
|
private val log = createLogger<RemoteBuildCacheClient>()
|
||||||
}
|
}
|
||||||
|
|
||||||
private val group: IoEventLoopGroup
|
private val group: NioEventLoopGroup
|
||||||
private val sslContext: SslContext
|
private val sslContext: SslContext
|
||||||
private val pool: ChannelPool
|
private val pool: ChannelPool
|
||||||
|
|
||||||
init {
|
init {
|
||||||
group = MultiThreadIoEventLoopGroup(NioIoHandler.newFactory())
|
group = NioEventLoopGroup()
|
||||||
sslContext = SslContextBuilder.forClient().also { builder ->
|
sslContext = SslContextBuilder.forClient().also { builder ->
|
||||||
(profile.authentication as? Configuration.Authentication.TlsClientAuthenticationCredentials)?.let { tlsClientAuthenticationCredentials ->
|
(profile.authentication as? Configuration.Authentication.TlsClientAuthenticationCredentials)?.let { tlsClientAuthenticationCredentials ->
|
||||||
builder.apply {
|
builder.apply {
|
||||||
|
@@ -129,7 +129,7 @@ class RetryTest {
|
|||||||
previousAttempt.first + testArgs.initialDelay * Math.pow(testArgs.exp, index.toDouble()) * 1e6
|
previousAttempt.first + testArgs.initialDelay * Math.pow(testArgs.exp, index.toDouble()) * 1e6
|
||||||
val actualTimestamp = timestamp
|
val actualTimestamp = timestamp
|
||||||
val err = Math.abs(expectedTimestamp - actualTimestamp) / expectedTimestamp
|
val err = Math.abs(expectedTimestamp - actualTimestamp) / expectedTimestamp
|
||||||
Assertions.assertTrue(err < 0.1)
|
Assertions.assertTrue(err < 0.5)
|
||||||
}
|
}
|
||||||
if (index == attempts.size - 1 && index < testArgs.maxAttempt - 1) {
|
if (index == attempts.size - 1 && index < testArgs.maxAttempt - 1) {
|
||||||
/*
|
/*
|
||||||
|
@@ -3,19 +3,21 @@ import net.woggioni.rbcs.server.cache.FileSystemCacheProvider;
|
|||||||
import net.woggioni.rbcs.server.cache.InMemoryCacheProvider;
|
import net.woggioni.rbcs.server.cache.InMemoryCacheProvider;
|
||||||
|
|
||||||
module net.woggioni.rbcs.server {
|
module net.woggioni.rbcs.server {
|
||||||
|
requires java.sql;
|
||||||
requires java.xml;
|
requires java.xml;
|
||||||
|
requires java.logging;
|
||||||
requires java.naming;
|
requires java.naming;
|
||||||
requires kotlin.stdlib;
|
requires kotlin.stdlib;
|
||||||
|
requires io.netty.buffer;
|
||||||
|
requires io.netty.transport;
|
||||||
requires io.netty.codec.http;
|
requires io.netty.codec.http;
|
||||||
|
requires io.netty.common;
|
||||||
requires io.netty.handler;
|
requires io.netty.handler;
|
||||||
|
requires io.netty.codec;
|
||||||
|
requires org.slf4j;
|
||||||
requires net.woggioni.jwo;
|
requires net.woggioni.jwo;
|
||||||
requires net.woggioni.rbcs.common;
|
requires net.woggioni.rbcs.common;
|
||||||
requires net.woggioni.rbcs.api;
|
requires net.woggioni.rbcs.api;
|
||||||
requires io.netty.codec.compression;
|
|
||||||
requires io.netty.transport;
|
|
||||||
requires io.netty.buffer;
|
|
||||||
requires io.netty.common;
|
|
||||||
requires org.slf4j;
|
|
||||||
|
|
||||||
exports net.woggioni.rbcs.server;
|
exports net.woggioni.rbcs.server;
|
||||||
|
|
||||||
|
@@ -11,8 +11,7 @@ import io.netty.channel.ChannelInboundHandlerAdapter
|
|||||||
import io.netty.channel.ChannelInitializer
|
import io.netty.channel.ChannelInitializer
|
||||||
import io.netty.channel.ChannelOption
|
import io.netty.channel.ChannelOption
|
||||||
import io.netty.channel.ChannelPromise
|
import io.netty.channel.ChannelPromise
|
||||||
import io.netty.channel.MultiThreadIoEventLoopGroup
|
import io.netty.channel.nio.NioEventLoopGroup
|
||||||
import io.netty.channel.nio.NioIoHandler
|
|
||||||
import io.netty.channel.socket.DatagramChannel
|
import io.netty.channel.socket.DatagramChannel
|
||||||
import io.netty.channel.socket.ServerSocketChannel
|
import io.netty.channel.socket.ServerSocketChannel
|
||||||
import io.netty.channel.socket.SocketChannel
|
import io.netty.channel.socket.SocketChannel
|
||||||
@@ -35,25 +34,8 @@ import io.netty.handler.timeout.IdleState
|
|||||||
import io.netty.handler.timeout.IdleStateEvent
|
import io.netty.handler.timeout.IdleStateEvent
|
||||||
import io.netty.handler.timeout.IdleStateHandler
|
import io.netty.handler.timeout.IdleStateHandler
|
||||||
import io.netty.util.AttributeKey
|
import io.netty.util.AttributeKey
|
||||||
|
import io.netty.util.concurrent.DefaultEventExecutorGroup
|
||||||
import io.netty.util.concurrent.EventExecutorGroup
|
import io.netty.util.concurrent.EventExecutorGroup
|
||||||
import java.io.OutputStream
|
|
||||||
import java.net.InetSocketAddress
|
|
||||||
import java.nio.file.Files
|
|
||||||
import java.nio.file.Path
|
|
||||||
import java.security.PrivateKey
|
|
||||||
import java.security.cert.X509Certificate
|
|
||||||
import java.time.Duration
|
|
||||||
import java.time.Instant
|
|
||||||
import java.util.Arrays
|
|
||||||
import java.util.Base64
|
|
||||||
import java.util.concurrent.CompletableFuture
|
|
||||||
import java.util.concurrent.Future
|
|
||||||
import java.util.concurrent.TimeUnit
|
|
||||||
import java.util.concurrent.TimeoutException
|
|
||||||
import java.util.regex.Matcher
|
|
||||||
import java.util.regex.Pattern
|
|
||||||
import javax.naming.ldap.LdapName
|
|
||||||
import javax.net.ssl.SSLPeerUnverifiedException
|
|
||||||
import net.woggioni.rbcs.api.AsyncCloseable
|
import net.woggioni.rbcs.api.AsyncCloseable
|
||||||
import net.woggioni.rbcs.api.Configuration
|
import net.woggioni.rbcs.api.Configuration
|
||||||
import net.woggioni.rbcs.api.exception.ConfigurationException
|
import net.woggioni.rbcs.api.exception.ConfigurationException
|
||||||
@@ -77,6 +59,24 @@ import net.woggioni.rbcs.server.handler.MaxRequestSizeHandler
|
|||||||
import net.woggioni.rbcs.server.handler.ServerHandler
|
import net.woggioni.rbcs.server.handler.ServerHandler
|
||||||
import net.woggioni.rbcs.server.throttling.BucketManager
|
import net.woggioni.rbcs.server.throttling.BucketManager
|
||||||
import net.woggioni.rbcs.server.throttling.ThrottlingHandler
|
import net.woggioni.rbcs.server.throttling.ThrottlingHandler
|
||||||
|
import java.io.OutputStream
|
||||||
|
import java.net.InetSocketAddress
|
||||||
|
import java.nio.file.Files
|
||||||
|
import java.nio.file.Path
|
||||||
|
import java.security.PrivateKey
|
||||||
|
import java.security.cert.X509Certificate
|
||||||
|
import java.time.Duration
|
||||||
|
import java.time.Instant
|
||||||
|
import java.util.Arrays
|
||||||
|
import java.util.Base64
|
||||||
|
import java.util.concurrent.CompletableFuture
|
||||||
|
import java.util.concurrent.Future
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
|
import java.util.concurrent.TimeoutException
|
||||||
|
import java.util.regex.Matcher
|
||||||
|
import java.util.regex.Pattern
|
||||||
|
import javax.naming.ldap.LdapName
|
||||||
|
import javax.net.ssl.SSLPeerUnverifiedException
|
||||||
|
|
||||||
class RemoteBuildCacheServer(private val cfg: Configuration) {
|
class RemoteBuildCacheServer(private val cfg: Configuration) {
|
||||||
|
|
||||||
@@ -208,6 +208,7 @@ class RemoteBuildCacheServer(private val cfg: Configuration) {
|
|||||||
private val cfg: Configuration,
|
private val cfg: Configuration,
|
||||||
private val channelFactory : ChannelFactory<SocketChannel>,
|
private val channelFactory : ChannelFactory<SocketChannel>,
|
||||||
private val datagramChannelFactory : ChannelFactory<DatagramChannel>,
|
private val datagramChannelFactory : ChannelFactory<DatagramChannel>,
|
||||||
|
private val eventExecutorGroup: EventExecutorGroup
|
||||||
) : ChannelInitializer<Channel>(), AsyncCloseable {
|
) : ChannelInitializer<Channel>(), AsyncCloseable {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -359,7 +360,7 @@ class RemoteBuildCacheServer(private val cfg: Configuration) {
|
|||||||
cacheHandlerFactory.newHandler(cfg, ch.eventLoop(), channelFactory, datagramChannelFactory)
|
cacheHandlerFactory.newHandler(cfg, ch.eventLoop(), channelFactory, datagramChannelFactory)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pipeline.addLast(ServerHandler.NAME, serverHandler)
|
pipeline.addLast(eventExecutorGroup, ServerHandler.NAME, serverHandler)
|
||||||
pipeline.addLast(ExceptionHandler.NAME, ExceptionHandler)
|
pipeline.addLast(ExceptionHandler.NAME, ExceptionHandler)
|
||||||
pipeline.addLast(BlackHoleRequestHandler.NAME, BlackHoleRequestHandler())
|
pipeline.addLast(BlackHoleRequestHandler.NAME, BlackHoleRequestHandler())
|
||||||
}
|
}
|
||||||
@@ -440,13 +441,20 @@ class RemoteBuildCacheServer(private val cfg: Configuration) {
|
|||||||
|
|
||||||
fun run(): ServerHandle {
|
fun run(): ServerHandle {
|
||||||
// Create the multithreaded event loops for the server
|
// Create the multithreaded event loops for the server
|
||||||
val bossGroup = MultiThreadIoEventLoopGroup(1, NioIoHandler.newFactory())
|
val bossGroup = NioEventLoopGroup(1)
|
||||||
val channelFactory = ChannelFactory<SocketChannel> { NioSocketChannel() }
|
val channelFactory = ChannelFactory<SocketChannel> { NioSocketChannel() }
|
||||||
val datagramChannelFactory = ChannelFactory<DatagramChannel> { NioDatagramChannel() }
|
val datagramChannelFactory = ChannelFactory<DatagramChannel> { NioDatagramChannel() }
|
||||||
val serverChannelFactory = ChannelFactory<ServerSocketChannel> { NioServerSocketChannel() }
|
val serverChannelFactory = ChannelFactory<ServerSocketChannel> { NioServerSocketChannel() }
|
||||||
val workerGroup = MultiThreadIoEventLoopGroup(0, NioIoHandler.newFactory())
|
val workerGroup = NioEventLoopGroup(0)
|
||||||
|
val eventExecutorGroup = run {
|
||||||
val serverInitializer = ServerInitializer(cfg, channelFactory, datagramChannelFactory)
|
val threadFactory = if (cfg.eventExecutor.isUseVirtualThreads) {
|
||||||
|
Thread.ofVirtual().factory()
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
DefaultEventExecutorGroup(Runtime.getRuntime().availableProcessors(), threadFactory)
|
||||||
|
}
|
||||||
|
val serverInitializer = ServerInitializer(cfg, channelFactory, datagramChannelFactory, workerGroup)
|
||||||
val bootstrap = ServerBootstrap().apply {
|
val bootstrap = ServerBootstrap().apply {
|
||||||
// Configure the server
|
// Configure the server
|
||||||
group(bossGroup, workerGroup)
|
group(bossGroup, workerGroup)
|
||||||
@@ -467,7 +475,7 @@ class RemoteBuildCacheServer(private val cfg: Configuration) {
|
|||||||
return ServerHandle(
|
return ServerHandle(
|
||||||
httpChannel.closeFuture(),
|
httpChannel.closeFuture(),
|
||||||
bossGroup,
|
bossGroup,
|
||||||
setOf(workerGroup),
|
setOf(workerGroup, eventExecutorGroup),
|
||||||
serverInitializer
|
serverInitializer
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@@ -4,7 +4,13 @@ import io.netty.buffer.ByteBuf
|
|||||||
import io.netty.channel.ChannelHandlerContext
|
import io.netty.channel.ChannelHandlerContext
|
||||||
import net.woggioni.rbcs.api.CacheHandler
|
import net.woggioni.rbcs.api.CacheHandler
|
||||||
import net.woggioni.rbcs.api.message.CacheMessage
|
import net.woggioni.rbcs.api.message.CacheMessage
|
||||||
import net.woggioni.rbcs.api.message.CacheMessage.*
|
import net.woggioni.rbcs.api.message.CacheMessage.CacheContent
|
||||||
|
import net.woggioni.rbcs.api.message.CacheMessage.CacheGetRequest
|
||||||
|
import net.woggioni.rbcs.api.message.CacheMessage.CachePutRequest
|
||||||
|
import net.woggioni.rbcs.api.message.CacheMessage.CachePutResponse
|
||||||
|
import net.woggioni.rbcs.api.message.CacheMessage.CacheValueFoundResponse
|
||||||
|
import net.woggioni.rbcs.api.message.CacheMessage.CacheValueNotFoundResponse
|
||||||
|
import net.woggioni.rbcs.api.message.CacheMessage.LastCacheContent
|
||||||
import net.woggioni.rbcs.common.ByteBufOutputStream
|
import net.woggioni.rbcs.common.ByteBufOutputStream
|
||||||
import net.woggioni.rbcs.common.RBCS.processCacheKey
|
import net.woggioni.rbcs.common.RBCS.processCacheKey
|
||||||
import java.util.zip.Deflater
|
import java.util.zip.Deflater
|
||||||
@@ -35,15 +41,19 @@ class InMemoryCacheHandler(
|
|||||||
|
|
||||||
private inner class InProgressPlainPutRequest(ctx: ChannelHandlerContext, override val request: CachePutRequest) :
|
private inner class InProgressPlainPutRequest(ctx: ChannelHandlerContext, override val request: CachePutRequest) :
|
||||||
InProgressPutRequest {
|
InProgressPutRequest {
|
||||||
override val buf = ctx.alloc().compositeHeapBuffer()
|
override val buf = ctx.alloc().compositeBuffer()
|
||||||
|
|
||||||
|
private val stream = ByteBufOutputStream(buf).let {
|
||||||
|
if (compressionEnabled) {
|
||||||
|
DeflaterOutputStream(it, Deflater(compressionLevel))
|
||||||
|
} else {
|
||||||
|
it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun append(buf: ByteBuf) {
|
override fun append(buf: ByteBuf) {
|
||||||
if(buf.isDirect) {
|
|
||||||
this.buf.writeBytes(buf)
|
|
||||||
} else {
|
|
||||||
this.buf.addComponent(true, buf.retain())
|
this.buf.addComponent(true, buf.retain())
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
override fun close() {
|
override fun close() {
|
||||||
buf.release()
|
buf.release()
|
||||||
|
@@ -53,9 +53,7 @@
|
|||||||
<!-- <Connector port="8080" protocol="HTTP/1.1" executor="tomcatThreadPool"-->
|
<!-- <Connector port="8080" protocol="HTTP/1.1" executor="tomcatThreadPool"-->
|
||||||
<!-- connectionTimeout="20000"-->
|
<!-- connectionTimeout="20000"-->
|
||||||
<!-- redirectPort="8443" />-->
|
<!-- redirectPort="8443" />-->
|
||||||
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
|
<Connector port="8080" protocol="HTTP/1.1"
|
||||||
maxKeepAliveRequests="1000000"
|
|
||||||
keepAliveTimeout="-1"
|
|
||||||
connectionTimeout="20000"
|
connectionTimeout="20000"
|
||||||
redirectPort="8443" />
|
redirectPort="8443" />
|
||||||
<!-- A "Connector" using the shared thread pool-->
|
<!-- A "Connector" using the shared thread pool-->
|
||||||
|
Reference in New Issue
Block a user