mirror of
https://github.com/dragonflydb/dragonfly.git
synced 2025-05-12 02:45:45 +02:00
Compare commits
7 commits
Author | SHA1 | Date | |
---|---|---|---|
|
320a116b40 | ||
|
a51674eb43 | ||
|
5f454dbd81 | ||
|
c348779e9e | ||
|
e341819256 | ||
|
8ce8ee68df | ||
|
e148f1aa69 |
49 changed files with 464 additions and 278 deletions
|
@ -15,13 +15,13 @@ type: application
|
||||||
# This is the chart version. This version number should be incremented each time you make changes
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
# to the chart and its templates, including the app version.
|
# to the chart and its templates, including the app version.
|
||||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
version: v1.29.0
|
version: v1.30.0
|
||||||
|
|
||||||
# This is the version number of the application being deployed. This version number should be
|
# This is the version number of the application being deployed. This version number should be
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
appVersion: "v1.29.0"
|
appVersion: "v1.30.0"
|
||||||
|
|
||||||
home: https://dragonflydb.io/
|
home: https://dragonflydb.io/
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -42,7 +42,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -72,7 +72,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -42,7 +42,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -60,7 +60,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -42,7 +42,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -67,7 +67,7 @@ spec:
|
||||||
image: busybox:latest
|
image: busybox:latest
|
||||||
name: sidecar-string
|
name: sidecar-string
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -42,7 +42,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -64,7 +64,7 @@ spec:
|
||||||
command: ["/bin/sh"]
|
command: ["/bin/sh"]
|
||||||
args: ["-c", "date; sleep 3600;"]
|
args: ["-c", "date; sleep 3600;"]
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/extra-manifests.yaml
|
# Source: dragonfly/templates/extra-manifests.yaml
|
||||||
|
@ -47,7 +47,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -69,7 +69,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -87,7 +87,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/extra-manifests.yaml
|
# Source: dragonfly/templates/extra-manifests.yaml
|
||||||
|
@ -39,7 +39,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -61,7 +61,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -79,7 +79,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -42,7 +42,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -60,7 +60,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -42,7 +42,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -68,7 +68,7 @@ spec:
|
||||||
name: initcontainer-string
|
name: initcontainer-string
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -42,7 +42,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -65,7 +65,7 @@ spec:
|
||||||
args: ["-c", "date; sleep 1;"]
|
args: ["-c", "date; sleep 1;"]
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/extra-manifests.yaml
|
# Source: dragonfly/templates/extra-manifests.yaml
|
||||||
|
@ -28,7 +28,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -50,7 +50,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/extra-manifests.yaml
|
# Source: dragonfly/templates/extra-manifests.yaml
|
||||||
|
@ -28,7 +28,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -50,7 +50,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -68,7 +68,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/extra-manifests.yaml
|
# Source: dragonfly/templates/extra-manifests.yaml
|
||||||
|
@ -28,7 +28,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -50,7 +50,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -68,7 +68,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/extra-manifests.yaml
|
# Source: dragonfly/templates/extra-manifests.yaml
|
||||||
|
@ -28,7 +28,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -50,7 +50,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
serviceName: test
|
serviceName: test
|
||||||
|
@ -69,7 +69,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -42,7 +42,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
serviceName: test
|
serviceName: test
|
||||||
|
@ -61,7 +61,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -17,7 +17,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -29,7 +29,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -51,7 +51,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -70,7 +70,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/metrics-service.yaml
|
# Source: dragonfly/templates/metrics-service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
type: metrics
|
type: metrics
|
||||||
spec:
|
spec:
|
||||||
|
@ -43,7 +43,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -65,7 +65,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -83,7 +83,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
@ -124,7 +124,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
endpoints:
|
endpoints:
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -42,7 +42,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -60,7 +60,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -42,7 +42,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -64,7 +64,7 @@ spec:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
securityContext:
|
securityContext:
|
||||||
readOnlyRootFilesystem: true
|
readOnlyRootFilesystem: true
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: LoadBalancer
|
type: LoadBalancer
|
||||||
|
@ -43,7 +43,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -61,7 +61,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/metrics-service.yaml
|
# Source: dragonfly/templates/metrics-service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
type: metrics
|
type: metrics
|
||||||
spec:
|
spec:
|
||||||
|
@ -43,7 +43,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -65,7 +65,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -83,7 +83,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
@ -125,7 +125,7 @@ metadata:
|
||||||
release: prometheus-stack
|
release: prometheus-stack
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
endpoints:
|
endpoints:
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -42,7 +42,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -78,7 +78,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/extra-manifests.yaml
|
# Source: dragonfly/templates/extra-manifests.yaml
|
||||||
|
@ -28,7 +28,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
type: kubernetes.io/tls
|
type: kubernetes.io/tls
|
||||||
data:
|
data:
|
||||||
|
@ -44,7 +44,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -66,7 +66,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -77,7 +77,7 @@ spec:
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
checksum/tls-secret: 7c145e31680ebd4dd212c79a60417b49fc509298adf57258a5961a24ce43b702
|
checksum/tls-secret: af53017303e9019c5b65fd3b16260fb76fdc3c35034ae64eec62987b3be0dd39
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
|
@ -85,7 +85,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -8,7 +8,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
---
|
---
|
||||||
# Source: dragonfly/templates/service.yaml
|
# Source: dragonfly/templates/service.yaml
|
||||||
|
@ -20,7 +20,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
@ -42,7 +42,7 @@ metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: dragonfly
|
app.kubernetes.io/name: dragonfly
|
||||||
app.kubernetes.io/instance: test
|
app.kubernetes.io/instance: test
|
||||||
app.kubernetes.io/version: "v1.29.0"
|
app.kubernetes.io/version: "v1.30.0"
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
@ -63,7 +63,7 @@ spec:
|
||||||
serviceAccountName: test-dragonfly
|
serviceAccountName: test-dragonfly
|
||||||
containers:
|
containers:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.29.0"
|
image: "docker.dragonflydb.io/dragonflydb/dragonfly:v1.30.0"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: dragonfly
|
- name: dragonfly
|
||||||
|
|
|
@ -787,13 +787,17 @@ CompactObj& CompactObj::operator=(CompactObj&& o) noexcept {
|
||||||
|
|
||||||
size_t CompactObj::Size() const {
|
size_t CompactObj::Size() const {
|
||||||
size_t raw_size = 0;
|
size_t raw_size = 0;
|
||||||
|
uint8_t first_byte = 0;
|
||||||
if (IsInline()) {
|
if (IsInline()) {
|
||||||
raw_size = taglen_;
|
raw_size = taglen_;
|
||||||
|
first_byte = u_.inline_str[0];
|
||||||
} else {
|
} else {
|
||||||
switch (taglen_) {
|
switch (taglen_) {
|
||||||
case SMALL_TAG:
|
case SMALL_TAG:
|
||||||
raw_size = u_.small_str.size();
|
raw_size = u_.small_str.size();
|
||||||
|
if (mask_bits_.encoding == HUFFMAN_ENC) {
|
||||||
|
return DecodedLen(raw_size, u_.small_str.first_byte());
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case INT_TAG: {
|
case INT_TAG: {
|
||||||
absl::AlphaNum an(u_.ival);
|
absl::AlphaNum an(u_.ival);
|
||||||
|
@ -802,11 +806,16 @@ size_t CompactObj::Size() const {
|
||||||
}
|
}
|
||||||
case EXTERNAL_TAG:
|
case EXTERNAL_TAG:
|
||||||
raw_size = u_.ext_ptr.serialized_size;
|
raw_size = u_.ext_ptr.serialized_size;
|
||||||
|
CHECK(mask_bits_.encoding != HUFFMAN_ENC);
|
||||||
break;
|
break;
|
||||||
case ROBJ_TAG:
|
case ROBJ_TAG:
|
||||||
raw_size = u_.r_obj.Size();
|
raw_size = u_.r_obj.Size();
|
||||||
|
if (mask_bits_.encoding == HUFFMAN_ENC) {
|
||||||
|
return DecodedLen(raw_size, *(uint8_t*)u_.r_obj.inner_obj());
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case JSON_TAG:
|
case JSON_TAG:
|
||||||
|
DCHECK_EQ(mask_bits_.encoding, NONE_ENC);
|
||||||
if (JsonEnconding() == kEncodingJsonFlat) {
|
if (JsonEnconding() == kEncodingJsonFlat) {
|
||||||
raw_size = u_.json_obj.flat.json_len;
|
raw_size = u_.json_obj.flat.json_len;
|
||||||
} else {
|
} else {
|
||||||
|
@ -814,34 +823,24 @@ size_t CompactObj::Size() const {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SBF_TAG:
|
case SBF_TAG:
|
||||||
|
DCHECK_EQ(mask_bits_.encoding, NONE_ENC);
|
||||||
raw_size = u_.sbf->current_size();
|
raw_size = u_.sbf->current_size();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG(DFATAL) << "Should not reach " << int(taglen_);
|
LOG(DFATAL) << "Should not reach " << int(taglen_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return mask_bits_.encoding ? DecodedLen(raw_size) : raw_size;
|
return mask_bits_.encoding ? DecodedLen(raw_size, first_byte) : raw_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t CompactObj::HashCode() const {
|
uint64_t CompactObj::HashCode() const {
|
||||||
DCHECK(taglen_ != JSON_TAG) << "JSON type cannot be used for keys!";
|
DCHECK(taglen_ != JSON_TAG) << "JSON type cannot be used for keys!";
|
||||||
|
|
||||||
uint8_t encoded = mask_bits_.encoding;
|
if (mask_bits_.encoding == NONE_ENC) {
|
||||||
if (IsInline()) {
|
if (IsInline()) {
|
||||||
if (encoded) {
|
|
||||||
char buf[kInlineLen * 2];
|
|
||||||
size_t decoded_len = DecodedLen(taglen_);
|
|
||||||
detail::ascii_unpack(to_byte(u_.inline_str), decoded_len, buf);
|
|
||||||
return XXH3_64bits_withSeed(buf, decoded_len, kHashSeed);
|
|
||||||
}
|
|
||||||
return XXH3_64bits_withSeed(u_.inline_str, taglen_, kHashSeed);
|
return XXH3_64bits_withSeed(u_.inline_str, taglen_, kHashSeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (encoded) {
|
|
||||||
string_view sv = GetSlice(&tl.tmp_str);
|
|
||||||
return XXH3_64bits_withSeed(sv.data(), sv.size(), kHashSeed);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (taglen_) {
|
switch (taglen_) {
|
||||||
case SMALL_TAG:
|
case SMALL_TAG:
|
||||||
return u_.small_str.HashCode();
|
return u_.small_str.HashCode();
|
||||||
|
@ -852,10 +851,26 @@ uint64_t CompactObj::HashCode() const {
|
||||||
return XXH3_64bits_withSeed(an.data(), an.size(), kHashSeed);
|
return XXH3_64bits_withSeed(an.data(), an.size(), kHashSeed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// We need hash only for keys.
|
}
|
||||||
LOG(DFATAL) << "Should not reach " << int(taglen_);
|
|
||||||
|
|
||||||
return 0;
|
DCHECK(mask_bits_.encoding);
|
||||||
|
|
||||||
|
if (IsInline()) {
|
||||||
|
char buf[kInlineLen * 3]; // should suffice for most huffman decodings.
|
||||||
|
size_t decoded_len = DecodedLen(taglen_, u_.inline_str[0]);
|
||||||
|
if (mask_bits_.encoding == HUFFMAN_ENC) {
|
||||||
|
if (decoded_len <= sizeof(buf) &&
|
||||||
|
tl.huff_decoder.Decode({u_.inline_str + 1, size_t(taglen_ - 1)}, decoded_len, buf)) {
|
||||||
|
return XXH3_64bits_withSeed(buf, decoded_len, kHashSeed);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
detail::ascii_unpack(to_byte(u_.inline_str), decoded_len, buf);
|
||||||
|
return XXH3_64bits_withSeed(buf, decoded_len, kHashSeed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string_view sv = GetSlice(&tl.tmp_str);
|
||||||
|
return XXH3_64bits_withSeed(sv.data(), sv.size(), kHashSeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t CompactObj::HashCode(string_view str) {
|
uint64_t CompactObj::HashCode(string_view str) {
|
||||||
|
@ -1111,7 +1126,8 @@ void CompactObj::GetString(char* dest) const {
|
||||||
detail::ascii_unpack(to_byte(u_.inline_str), taglen_ + 2, dest);
|
detail::ascii_unpack(to_byte(u_.inline_str), taglen_ + 2, dest);
|
||||||
break;
|
break;
|
||||||
case HUFFMAN_ENC:
|
case HUFFMAN_ENC:
|
||||||
tl.huff_decoder.Decode(u_.inline_str, taglen_, dest);
|
tl.huff_decoder.Decode({u_.inline_str + 1, size_t(taglen_ - 1)},
|
||||||
|
u_.inline_str[0] + taglen_ - 1, dest);
|
||||||
break;
|
break;
|
||||||
case NONE_ENC:
|
case NONE_ENC:
|
||||||
memcpy(dest, u_.inline_str, taglen_);
|
memcpy(dest, u_.inline_str, taglen_);
|
||||||
|
@ -1132,24 +1148,39 @@ void CompactObj::GetString(char* dest) const {
|
||||||
if (taglen_ == ROBJ_TAG) {
|
if (taglen_ == ROBJ_TAG) {
|
||||||
CHECK_EQ(OBJ_STRING, u_.r_obj.type());
|
CHECK_EQ(OBJ_STRING, u_.r_obj.type());
|
||||||
DCHECK_EQ(OBJ_ENCODING_RAW, u_.r_obj.encoding());
|
DCHECK_EQ(OBJ_ENCODING_RAW, u_.r_obj.encoding());
|
||||||
size_t decoded_len = DecodedLen(u_.r_obj.Size());
|
size_t decoded_len = DecodedLen(u_.r_obj.Size(), *(const uint8_t*)u_.r_obj.inner_obj());
|
||||||
|
if (mask_bits_.encoding == HUFFMAN_ENC) {
|
||||||
|
CHECK(tl.huff_decoder.Decode({(const char*)u_.r_obj.inner_obj() + 1, u_.r_obj.Size() - 1},
|
||||||
|
decoded_len, dest));
|
||||||
|
return;
|
||||||
|
}
|
||||||
detail::ascii_unpack_simd(to_byte(u_.r_obj.inner_obj()), decoded_len, dest);
|
detail::ascii_unpack_simd(to_byte(u_.r_obj.inner_obj()), decoded_len, dest);
|
||||||
} else if (taglen_ == SMALL_TAG) {
|
} else {
|
||||||
size_t decoded_len = DecodedLen(u_.small_str.size());
|
CHECK_EQ(SMALL_TAG, taglen_);
|
||||||
|
string_view slices[2];
|
||||||
|
unsigned num = u_.small_str.GetV(slices);
|
||||||
|
DCHECK_EQ(2u, num);
|
||||||
|
size_t decoded_len = DecodedLen(u_.small_str.size(), slices[0][0]);
|
||||||
|
|
||||||
|
if (mask_bits_.encoding == HUFFMAN_ENC) {
|
||||||
|
tl.tmp_buf.resize(slices[0].size() + slices[1].size() - 1);
|
||||||
|
uint8_t* next = tl.tmp_buf.data();
|
||||||
|
memcpy(next, slices[0].data() + 1, slices[0].size() - 1);
|
||||||
|
next += slices[0].size() - 1;
|
||||||
|
memcpy(next, slices[1].data(), slices[1].size());
|
||||||
|
string_view src(reinterpret_cast<const char*>(tl.tmp_buf.data()), tl.tmp_buf.size());
|
||||||
|
CHECK(tl.huff_decoder.Decode(src, decoded_len, dest));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// we left some space on the left to allow inplace ascii unpacking.
|
// we left some space on the left to allow inplace ascii unpacking.
|
||||||
size_t space_left = decoded_len - u_.small_str.size();
|
size_t space_left = decoded_len - u_.small_str.size();
|
||||||
|
|
||||||
string_view slices[2];
|
|
||||||
unsigned num = u_.small_str.GetV(slices);
|
|
||||||
DCHECK_EQ(2u, num);
|
|
||||||
char* next = dest + space_left;
|
char* next = dest + space_left;
|
||||||
memcpy(next, slices[0].data(), slices[0].size());
|
memcpy(next, slices[0].data(), slices[0].size());
|
||||||
next += slices[0].size();
|
next += slices[0].size();
|
||||||
memcpy(next, slices[1].data(), slices[1].size());
|
memcpy(next, slices[1].data(), slices[1].size());
|
||||||
detail::ascii_unpack_simd(reinterpret_cast<uint8_t*>(dest + space_left), decoded_len, dest);
|
detail::ascii_unpack_simd(reinterpret_cast<uint8_t*>(dest + space_left), decoded_len, dest);
|
||||||
} else {
|
|
||||||
LOG(FATAL) << "Unsupported tag " << int(taglen_);
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1343,8 +1374,25 @@ bool CompactObj::EqualNonInline(std::string_view sv) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CompactObj::CmpEncoded(string_view sv) const {
|
bool CompactObj::CmpEncoded(string_view sv) const {
|
||||||
size_t encode_len = binpacked_len(sv.size());
|
if (mask_bits_.encoding == HUFFMAN_ENC) {
|
||||||
|
size_t sz = Size();
|
||||||
|
if (sv.size() != sz)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (IsInline()) {
|
||||||
|
constexpr size_t kMaxHuffLen = kInlineLen * 3;
|
||||||
|
if (sz <= kMaxHuffLen) {
|
||||||
|
char buf[kMaxHuffLen];
|
||||||
|
CHECK(tl.huff_decoder.Decode({u_.inline_str + 1, size_t(taglen_ - 1)}, sz, buf));
|
||||||
|
return sv == string_view(buf, sz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tl.tmp_str.resize(sz);
|
||||||
|
GetString(tl.tmp_str.data());
|
||||||
|
return sv == tl.tmp_str;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t encode_len = binpacked_len(sv.size());
|
||||||
if (IsInline()) {
|
if (IsInline()) {
|
||||||
if (encode_len != taglen_)
|
if (encode_len != taglen_)
|
||||||
return false;
|
return false;
|
||||||
|
@ -1524,8 +1572,12 @@ StringOrView CompactObj::GetRawString() const {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t CompactObj::DecodedLen(size_t sz) const {
|
size_t CompactObj::DecodedLen(size_t sz, uint8_t b) const {
|
||||||
unsigned delta = (mask_bits_.encoding == ASCII1_ENC ? 1 : 0);
|
DCHECK(mask_bits_.encoding);
|
||||||
|
if (mask_bits_.encoding == HUFFMAN_ENC) {
|
||||||
|
return sz + b - 1;
|
||||||
|
}
|
||||||
|
unsigned delta = (mask_bits_.encoding == ASCII1_ENC) ? 1 : 0;
|
||||||
return ascii_len(sz) - delta;
|
return ascii_len(sz) - delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -410,7 +410,7 @@ class CompactObj {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void EncodeString(std::string_view str);
|
void EncodeString(std::string_view str);
|
||||||
size_t DecodedLen(size_t sz) const;
|
size_t DecodedLen(size_t sz, uint8_t firstb) const;
|
||||||
|
|
||||||
bool EqualNonInline(std::string_view sv) const;
|
bool EqualNonInline(std::string_view sv) const;
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "core/compact_object.h"
|
#include "core/compact_object.h"
|
||||||
|
|
||||||
#include <absl/strings/str_cat.h>
|
#include <absl/strings/str_cat.h>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
#include <mimalloc.h>
|
#include <mimalloc.h>
|
||||||
#include <xxhash.h>
|
#include <xxhash.h>
|
||||||
|
|
||||||
|
@ -13,6 +14,7 @@
|
||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
||||||
#include "core/detail/bitpacking.h"
|
#include "core/detail/bitpacking.h"
|
||||||
#include "core/flat_set.h"
|
#include "core/flat_set.h"
|
||||||
|
#include "core/huff_coder.h"
|
||||||
#include "core/mi_memory_resource.h"
|
#include "core/mi_memory_resource.h"
|
||||||
#include "core/string_set.h"
|
#include "core/string_set.h"
|
||||||
|
|
||||||
|
@ -656,6 +658,30 @@ TEST_F(CompactObjectTest, lpGetInteger) {
|
||||||
lpFree(lp);
|
lpFree(lp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(CompactObjectTest, HuffMan) {
|
||||||
|
array<unsigned, 256> hist;
|
||||||
|
hist.fill(1);
|
||||||
|
hist['a'] = 100;
|
||||||
|
hist['b'] = 50;
|
||||||
|
HuffmanEncoder encoder;
|
||||||
|
ASSERT_TRUE(encoder.Build(hist.data(), hist.size() - 1, nullptr));
|
||||||
|
string bindata = encoder.Export();
|
||||||
|
ASSERT_TRUE(CompactObj::InitHuffmanThreadLocal(bindata));
|
||||||
|
for (unsigned i = 30; i < 2048; i += 10) {
|
||||||
|
string data(i, 'a');
|
||||||
|
cobj_.SetString(data);
|
||||||
|
bool malloc_used = i >= 60;
|
||||||
|
ASSERT_EQ(malloc_used, cobj_.MallocUsed() > 0) << i;
|
||||||
|
ASSERT_EQ(data.size(), cobj_.Size());
|
||||||
|
ASSERT_EQ(CompactObj::HashCode(data), cobj_.HashCode());
|
||||||
|
|
||||||
|
string actual;
|
||||||
|
cobj_.GetString(&actual);
|
||||||
|
EXPECT_EQ(data, actual);
|
||||||
|
EXPECT_EQ(cobj_, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void ascii_pack_naive(const char* ascii, size_t len, uint8_t* bin) {
|
static void ascii_pack_naive(const char* ascii, size_t len, uint8_t* bin) {
|
||||||
const char* end = ascii + len;
|
const char* end = ascii + len;
|
||||||
|
|
||||||
|
|
|
@ -144,7 +144,7 @@ bool HuffmanDecoder::Decode(std::string_view src, size_t dest_size, char* dest)
|
||||||
HUF_decompress1X_usingDTable(dest, dest_size, src.data(), src.size(), huf_dtable_.get(), 1);
|
HUF_decompress1X_usingDTable(dest, dest_size, src.data(), src.size(), huf_dtable_.get(), 1);
|
||||||
|
|
||||||
if (HUF_isError(res)) {
|
if (HUF_isError(res)) {
|
||||||
LOG(FATAL) << "Failed to decompress: " << HUF_getErrorName(res);
|
LOG(DFATAL) << "Failed to decompress: " << HUF_getErrorName(res);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -16,13 +16,6 @@ using namespace std;
|
||||||
|
|
||||||
namespace dfly::search {
|
namespace dfly::search {
|
||||||
|
|
||||||
AstTermNode::AstTermNode(string term) : term{std::move(term)} {
|
|
||||||
}
|
|
||||||
|
|
||||||
AstPrefixNode::AstPrefixNode(string prefix) : prefix{std::move(prefix)} {
|
|
||||||
this->prefix.pop_back();
|
|
||||||
}
|
|
||||||
|
|
||||||
AstRangeNode::AstRangeNode(double lo, bool lo_excl, double hi, bool hi_excl)
|
AstRangeNode::AstRangeNode(double lo, bool lo_excl, double hi, bool hi_excl)
|
||||||
: lo{lo_excl ? nextafter(lo, hi) : lo}, hi{hi_excl ? nextafter(hi, lo) : hi} {
|
: lo{lo_excl ? nextafter(lo, hi) : lo}, hi{hi_excl ? nextafter(hi, lo) : hi} {
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "core/search/base.h"
|
#include "core/search/base.h"
|
||||||
|
#include "core/search/tag_types.h"
|
||||||
|
|
||||||
namespace dfly {
|
namespace dfly {
|
||||||
|
|
||||||
|
@ -25,18 +26,17 @@ struct AstStarNode {};
|
||||||
// Matches all documents where this field has a non-null value
|
// Matches all documents where this field has a non-null value
|
||||||
struct AstStarFieldNode {};
|
struct AstStarFieldNode {};
|
||||||
|
|
||||||
// Matches terms in text fields
|
template <TagType T> struct AstAffixNode {
|
||||||
struct AstTermNode {
|
explicit AstAffixNode(std::string affix) : affix{std::move(affix)} {
|
||||||
explicit AstTermNode(std::string term);
|
}
|
||||||
|
|
||||||
std::string term;
|
std::string affix;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AstPrefixNode {
|
using AstTermNode = AstAffixNode<TagType::REGULAR>;
|
||||||
explicit AstPrefixNode(std::string prefix);
|
using AstPrefixNode = AstAffixNode<TagType::PREFIX>;
|
||||||
|
using AstSuffixNode = AstAffixNode<TagType::SUFFIX>;
|
||||||
std::string prefix;
|
using AstInfixNode = AstAffixNode<TagType::INFIX>;
|
||||||
};
|
|
||||||
|
|
||||||
// Matches numeric range
|
// Matches numeric range
|
||||||
struct AstRangeNode {
|
struct AstRangeNode {
|
||||||
|
@ -73,15 +73,13 @@ struct AstFieldNode {
|
||||||
|
|
||||||
// Stores a list of tags for a tag query
|
// Stores a list of tags for a tag query
|
||||||
struct AstTagsNode {
|
struct AstTagsNode {
|
||||||
using TagValue = std::variant<AstTermNode, AstPrefixNode>;
|
using TagValue = std::variant<AstTermNode, AstPrefixNode, AstSuffixNode, AstInfixNode>;
|
||||||
|
|
||||||
struct TagValueProxy
|
struct TagValueProxy
|
||||||
: public AstTagsNode::TagValue { // bison needs it to be default constructible
|
: public AstTagsNode::TagValue { // bison needs it to be default constructible
|
||||||
TagValueProxy() : AstTagsNode::TagValue(AstTermNode("")) {
|
TagValueProxy() : AstTagsNode::TagValue(AstTermNode("")) {
|
||||||
}
|
}
|
||||||
TagValueProxy(AstPrefixNode tv) : AstTagsNode::TagValue(std::move(tv)) {
|
template <TagType T> TagValueProxy(AstAffixNode<T> tv) : AstTagsNode::TagValue(std::move(tv)) {
|
||||||
}
|
|
||||||
TagValueProxy(AstTermNode tv) : AstTagsNode::TagValue(std::move(tv)) {
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -111,8 +109,9 @@ struct AstKnnNode {
|
||||||
std::optional<float> ef_runtime;
|
std::optional<float> ef_runtime;
|
||||||
};
|
};
|
||||||
|
|
||||||
using NodeVariants = std::variant<std::monostate, AstStarNode, AstStarFieldNode, AstTermNode,
|
using NodeVariants =
|
||||||
AstPrefixNode, AstRangeNode, AstNegateNode, AstLogicalNode,
|
std::variant<std::monostate, AstStarNode, AstStarFieldNode, AstTermNode, AstPrefixNode,
|
||||||
|
AstSuffixNode, AstInfixNode, AstRangeNode, AstNegateNode, AstLogicalNode,
|
||||||
AstFieldNode, AstTagsNode, AstKnnNode>;
|
AstFieldNode, AstTagsNode, AstKnnNode>;
|
||||||
|
|
||||||
struct AstNode : public NodeVariants {
|
struct AstNode : public NodeVariants {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
%top{
|
%top{
|
||||||
// Our lexer need to know about Parser::symbol_type
|
// Our lexer need to know about Parser::symbol_type
|
||||||
#include "core/search/parser.hh"
|
#include "core/search/parser.hh"
|
||||||
|
#include "core/search/tag_types.h" // Include TagType enum
|
||||||
}
|
}
|
||||||
|
|
||||||
%{
|
%{
|
||||||
|
@ -25,18 +26,19 @@
|
||||||
// A number symbol corresponding to the value in S.
|
// A number symbol corresponding to the value in S.
|
||||||
using dfly::search::Parser;
|
using dfly::search::Parser;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
using dfly::search::TagType;
|
||||||
|
|
||||||
Parser::symbol_type make_StringLit(string_view src, const Parser::location_type& loc);
|
Parser::symbol_type make_StringLit(string_view src, const Parser::location_type& loc);
|
||||||
Parser::symbol_type make_TagVal(string_view src, bool is_prefix, const Parser::location_type& loc);
|
Parser::symbol_type make_Tag(string_view src, TagType type, const Parser::location_type& loc);
|
||||||
%}
|
%}
|
||||||
|
|
||||||
dq \"
|
dq \"
|
||||||
sq \'
|
sq \'
|
||||||
esc_chars ['"\?\\abfnrtv]
|
esc_chars ['"\?\\abfnrtv]
|
||||||
esc_seq \\{esc_chars}
|
esc_seq \\{esc_chars}
|
||||||
term_char \w
|
term_ch \w
|
||||||
tag_val_char {term_char}|\\[,.<>{}\[\]\\\"\':;!@#$%^&*()\-+=~\/ ]
|
tag_val_ch {term_ch}|\\[,.<>{}\[\]\\\"\':;!@#$%^&*()\-+=~\/ ]
|
||||||
asterisk_char \*
|
astrsk_ch \*
|
||||||
|
|
||||||
|
|
||||||
%{
|
%{
|
||||||
|
@ -73,13 +75,17 @@ asterisk_char \*
|
||||||
{dq}([^"]|{esc_seq})*{dq} return make_StringLit(matched_view(1, 1), loc());
|
{dq}([^"]|{esc_seq})*{dq} return make_StringLit(matched_view(1, 1), loc());
|
||||||
{sq}([^']|{esc_seq})*{sq} return make_StringLit(matched_view(1, 1), loc());
|
{sq}([^']|{esc_seq})*{sq} return make_StringLit(matched_view(1, 1), loc());
|
||||||
|
|
||||||
"$"{term_char}+ return ParseParam(str(), loc());
|
"$"{term_ch}+ return ParseParam(str(), loc());
|
||||||
"@"{term_char}+ return Parser::make_FIELD(str(), loc());
|
"@"{term_ch}+ return Parser::make_FIELD(str(), loc());
|
||||||
{term_char}+{asterisk_char} return Parser::make_PREFIX(str(), loc());
|
{astrsk_ch}{term_ch}+{astrsk_ch} return Parser::make_INFIX(string{matched_view(1, 1)}, loc());
|
||||||
|
{term_ch}+{astrsk_ch} return Parser::make_PREFIX(string{matched_view(0, 1)}, loc());
|
||||||
|
{astrsk_ch}{term_ch}+ return Parser::make_SUFFIX(string{matched_view(1, 0)}, loc());
|
||||||
|
|
||||||
{term_char}+ return Parser::make_TERM(str(), loc());
|
{term_ch}+ return Parser::make_TERM(str(), loc());
|
||||||
{tag_val_char}+{asterisk_char} return make_TagVal(str(), true, loc());
|
{tag_val_ch}+{astrsk_ch} return make_Tag(str(), TagType::PREFIX, loc());
|
||||||
{tag_val_char}+ return make_TagVal(str(), false, loc());
|
{astrsk_ch}{tag_val_ch}+ return make_Tag(str(), TagType::SUFFIX, loc());
|
||||||
|
{astrsk_ch}{tag_val_ch}+{astrsk_ch} return make_Tag(str(), TagType::INFIX, loc());
|
||||||
|
{tag_val_ch}+ return make_Tag(str(), TagType::REGULAR, loc());
|
||||||
|
|
||||||
<<EOF>> return Parser::make_YYEOF(loc());
|
<<EOF>> return Parser::make_YYEOF(loc());
|
||||||
%%
|
%%
|
||||||
|
@ -92,14 +98,20 @@ Parser::symbol_type make_StringLit(string_view src, const Parser::location_type&
|
||||||
return Parser::make_TERM(res, loc);
|
return Parser::make_TERM(res, loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
Parser::symbol_type make_TagVal(string_view src, bool is_prefix, const Parser::location_type& loc) {
|
Parser::symbol_type make_Tag(string_view src, TagType type, const Parser::location_type& loc) {
|
||||||
string res;
|
string res;
|
||||||
res.reserve(src.size());
|
res.reserve(src.size());
|
||||||
|
|
||||||
bool escaped = false;
|
// Determine processing boundaries
|
||||||
size_t len = is_prefix ? src.size() - 1 : src.size(); // Exclude the '*' at the end for prefix
|
size_t start = (type == TagType::SUFFIX || type == TagType::INFIX) ? 1 : 0;
|
||||||
|
size_t end = src.size();
|
||||||
|
if (type == TagType::PREFIX || type == TagType::INFIX) {
|
||||||
|
end--; // Skip the last '*' character
|
||||||
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < len; ++i) {
|
// Handle escaping
|
||||||
|
bool escaped = false;
|
||||||
|
for (size_t i = start; i < end; ++i) {
|
||||||
if (escaped) {
|
if (escaped) {
|
||||||
escaped = false;
|
escaped = false;
|
||||||
} else if (src[i] == '\\') {
|
} else if (src[i] == '\\') {
|
||||||
|
@ -109,11 +121,16 @@ Parser::symbol_type make_TagVal(string_view src, bool is_prefix, const Parser::l
|
||||||
res.push_back(src[i]);
|
res.push_back(src[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add '*' back for prefix
|
// Return the appropriate token type
|
||||||
if (is_prefix) {
|
switch (type) {
|
||||||
res.push_back('*');
|
case TagType::PREFIX:
|
||||||
return Parser::make_PREFIX(res, loc);
|
return Parser::make_PREFIX(res, loc);
|
||||||
}
|
case TagType::SUFFIX:
|
||||||
|
return Parser::make_SUFFIX(res, loc);
|
||||||
|
case TagType::INFIX:
|
||||||
|
return Parser::make_INFIX(res, loc);
|
||||||
|
case TagType::REGULAR:
|
||||||
|
default:
|
||||||
return Parser::make_TAG_VAL(res, loc);
|
return Parser::make_TAG_VAL(res, loc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,7 @@ double toDouble(string_view src);
|
||||||
|
|
||||||
// Needed 0 at the end to satisfy bison 3.5.1
|
// Needed 0 at the end to satisfy bison 3.5.1
|
||||||
%token YYEOF 0
|
%token YYEOF 0
|
||||||
%token <std::string> TERM "term" TAG_VAL "tag_val" PARAM "param" FIELD "field" PREFIX "prefix"
|
%token <std::string> TERM "term" TAG_VAL "tag_val" PARAM "param" FIELD "field" PREFIX "prefix" SUFFIX "suffix" INFIX "infix"
|
||||||
|
|
||||||
%precedence TERM TAG_VAL
|
%precedence TERM TAG_VAL
|
||||||
%left OR_OP
|
%left OR_OP
|
||||||
|
@ -138,6 +138,8 @@ search_unary_expr:
|
||||||
| NOT_OP search_unary_expr { $$ = AstNegateNode(std::move($2)); }
|
| NOT_OP search_unary_expr { $$ = AstNegateNode(std::move($2)); }
|
||||||
| TERM { $$ = AstTermNode(std::move($1)); }
|
| TERM { $$ = AstTermNode(std::move($1)); }
|
||||||
| PREFIX { $$ = AstPrefixNode(std::move($1)); }
|
| PREFIX { $$ = AstPrefixNode(std::move($1)); }
|
||||||
|
| SUFFIX { $$ = AstSuffixNode(std::move($1)); }
|
||||||
|
| INFIX { $$ = AstInfixNode(std::move($1)); }
|
||||||
| UINT32 { $$ = AstTermNode(std::move($1)); }
|
| UINT32 { $$ = AstTermNode(std::move($1)); }
|
||||||
| FIELD COLON field_cond { $$ = AstFieldNode(std::move($1), std::move($3)); }
|
| FIELD COLON field_cond { $$ = AstFieldNode(std::move($1), std::move($3)); }
|
||||||
|
|
||||||
|
@ -188,6 +190,8 @@ tag_list:
|
||||||
tag_list_element:
|
tag_list_element:
|
||||||
TERM { $$ = AstTermNode(std::move($1)); }
|
TERM { $$ = AstTermNode(std::move($1)); }
|
||||||
| PREFIX { $$ = AstPrefixNode(std::move($1)); }
|
| PREFIX { $$ = AstPrefixNode(std::move($1)); }
|
||||||
|
| SUFFIX { $$ = AstSuffixNode(std::move($1)); }
|
||||||
|
| INFIX { $$ = AstInfixNode(std::move($1)); }
|
||||||
| UINT32 { $$ = AstTermNode(std::move($1)); }
|
| UINT32 { $$ = AstTermNode(std::move($1)); }
|
||||||
| DOUBLE { $$ = AstTermNode(std::move($1)); }
|
| DOUBLE { $$ = AstTermNode(std::move($1)); }
|
||||||
| TAG_VAL { $$ = AstTermNode(std::move($1)); }
|
| TAG_VAL { $$ = AstTermNode(std::move($1)); }
|
||||||
|
|
|
@ -115,22 +115,22 @@ struct IndexResult {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ProfileBuilder {
|
struct ProfileBuilder {
|
||||||
string GetNodeInfo(const AstNode& node) {
|
|
||||||
struct NodeFormatter {
|
struct NodeFormatter {
|
||||||
void operator()(std::string* out, const AstPrefixNode& node) const {
|
template <TagType T> void operator()(std::string* out, const AstAffixNode<T>& node) const {
|
||||||
out->append(node.prefix);
|
out->append(node.affix);
|
||||||
}
|
|
||||||
void operator()(std::string* out, const AstTermNode& node) const {
|
|
||||||
out->append(node.term);
|
|
||||||
}
|
}
|
||||||
void operator()(std::string* out, const AstTagsNode::TagValue& value) const {
|
void operator()(std::string* out, const AstTagsNode::TagValue& value) const {
|
||||||
visit([this, out](const auto& n) { this->operator()(out, n); }, value);
|
visit([this, out](const auto& n) { this->operator()(out, n); }, value);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
string GetNodeInfo(const AstNode& node) {
|
||||||
Overloaded node_info{
|
Overloaded node_info{
|
||||||
[](monostate) -> string { return ""s; },
|
[](monostate) -> string { return ""s; },
|
||||||
[](const AstTermNode& n) { return absl::StrCat("Term{", n.term, "}"); },
|
[](const AstTermNode& n) { return absl::StrCat("Term{", n.affix, "}"); },
|
||||||
[](const AstPrefixNode& n) { return absl::StrCat("Prefix{", n.prefix, "}"); },
|
[](const AstPrefixNode& n) { return absl::StrCat("Prefix{", n.affix, "}"); },
|
||||||
|
[](const AstSuffixNode& n) { return absl::StrCat("Suffix{", n.affix, "}"); },
|
||||||
|
[](const AstInfixNode& n) { return absl::StrCat("Infix{", n.affix, "}"); },
|
||||||
[](const AstRangeNode& n) { return absl::StrCat("Range{", n.lo, "<>", n.hi, "}"); },
|
[](const AstRangeNode& n) { return absl::StrCat("Range{", n.lo, "<>", n.hi, "}"); },
|
||||||
[](const AstLogicalNode& n) {
|
[](const AstLogicalNode& n) {
|
||||||
auto op = n.op == AstLogicalNode::AND ? "and" : "or";
|
auto op = n.op == AstLogicalNode::AND ? "and" : "or";
|
||||||
|
@ -268,6 +268,20 @@ struct BasicSearch {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename C>
|
||||||
|
IndexResult CollectSuffixMatches(BaseStringIndex<C>* index, std::string_view suffix) {
|
||||||
|
// TODO: Implement full text search for suffix
|
||||||
|
error_ = "Not implemented";
|
||||||
|
return IndexResult{};
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename C>
|
||||||
|
IndexResult CollectInfixMatches(BaseStringIndex<C>* index, std::string_view infix) {
|
||||||
|
// TODO: Implement full text search for infix
|
||||||
|
error_ = "Not implemented";
|
||||||
|
return IndexResult{};
|
||||||
|
}
|
||||||
|
|
||||||
IndexResult Search(monostate, string_view) {
|
IndexResult Search(monostate, string_view) {
|
||||||
return vector<DocId>{};
|
return vector<DocId>{};
|
||||||
}
|
}
|
||||||
|
@ -279,7 +293,7 @@ struct BasicSearch {
|
||||||
|
|
||||||
// "term": access field's text index or unify results from all text indices if no field is set
|
// "term": access field's text index or unify results from all text indices if no field is set
|
||||||
IndexResult Search(const AstTermNode& node, string_view active_field) {
|
IndexResult Search(const AstTermNode& node, string_view active_field) {
|
||||||
std::string term = node.term;
|
std::string term = node.affix;
|
||||||
bool strip_whitespace = true;
|
bool strip_whitespace = true;
|
||||||
|
|
||||||
if (auto synonyms = indices_->GetSynonyms(); synonyms) {
|
if (auto synonyms = indices_->GetSynonyms(); synonyms) {
|
||||||
|
@ -341,11 +355,23 @@ struct BasicSearch {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto mapping = [&node, this](TextIndex* index) {
|
auto mapping = [&node, this](TextIndex* index) {
|
||||||
return CollectPrefixMatches(index, node.prefix);
|
return CollectPrefixMatches(index, node.affix);
|
||||||
};
|
};
|
||||||
return UnifyResults(GetSubResults(indices, mapping), LogicOp::OR);
|
return UnifyResults(GetSubResults(indices, mapping), LogicOp::OR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IndexResult Search(const AstSuffixNode& node, string_view active_field) {
|
||||||
|
// TODO: Implement full text search for suffix
|
||||||
|
error_ = "Not implemented";
|
||||||
|
return IndexResult{};
|
||||||
|
}
|
||||||
|
|
||||||
|
IndexResult Search(const AstInfixNode& node, string_view active_field) {
|
||||||
|
// TODO: Implement full text search for infix
|
||||||
|
error_ = "Not implemented";
|
||||||
|
return IndexResult{};
|
||||||
|
}
|
||||||
|
|
||||||
// [range]: access field's numeric index
|
// [range]: access field's numeric index
|
||||||
IndexResult Search(const AstRangeNode& node, string_view active_field) {
|
IndexResult Search(const AstRangeNode& node, string_view active_field) {
|
||||||
DCHECK(!active_field.empty());
|
DCHECK(!active_field.empty());
|
||||||
|
@ -388,10 +414,16 @@ struct BasicSearch {
|
||||||
return IndexResult{};
|
return IndexResult{};
|
||||||
|
|
||||||
Overloaded ov{[tag_index](const AstTermNode& term) -> IndexResult {
|
Overloaded ov{[tag_index](const AstTermNode& term) -> IndexResult {
|
||||||
return tag_index->Matching(term.term);
|
return tag_index->Matching(term.affix);
|
||||||
},
|
},
|
||||||
[tag_index, this](const AstPrefixNode& prefix) {
|
[tag_index, this](const AstPrefixNode& prefix) {
|
||||||
return CollectPrefixMatches(tag_index, prefix.prefix);
|
return CollectPrefixMatches(tag_index, prefix.affix);
|
||||||
|
},
|
||||||
|
[tag_index, this](const AstSuffixNode& suffix) {
|
||||||
|
return CollectSuffixMatches(tag_index, suffix.affix);
|
||||||
|
},
|
||||||
|
[tag_index, this](const AstInfixNode& infix) {
|
||||||
|
return CollectInfixMatches(tag_index, infix.affix);
|
||||||
}};
|
}};
|
||||||
auto mapping = [ov](const auto& tag) { return visit(ov, tag); };
|
auto mapping = [ov](const auto& tag) { return visit(ov, tag); };
|
||||||
return UnifyResults(GetSubResults(node.tags, mapping), LogicOp::OR);
|
return UnifyResults(GetSubResults(node.tags, mapping), LogicOp::OR);
|
||||||
|
|
|
@ -155,7 +155,7 @@ TEST_F(SearchParserTest, Scanner) {
|
||||||
|
|
||||||
// Prefix simple
|
// Prefix simple
|
||||||
SetInput("pre*");
|
SetInput("pre*");
|
||||||
NEXT_EQ(TOK_PREFIX, string, "pre*");
|
NEXT_EQ(TOK_PREFIX, string, "pre");
|
||||||
|
|
||||||
// TODO: uncomment when we support escaped terms
|
// TODO: uncomment when we support escaped terms
|
||||||
// Prefix escaped (redis doesn't support quoted prefix matches)
|
// Prefix escaped (redis doesn't support quoted prefix matches)
|
||||||
|
@ -167,7 +167,7 @@ TEST_F(SearchParserTest, Scanner) {
|
||||||
NEXT_EQ(TOK_FIELD, string, "@color");
|
NEXT_EQ(TOK_FIELD, string, "@color");
|
||||||
NEXT_TOK(TOK_COLON);
|
NEXT_TOK(TOK_COLON);
|
||||||
NEXT_TOK(TOK_LCURLBR);
|
NEXT_TOK(TOK_LCURLBR);
|
||||||
NEXT_EQ(TOK_PREFIX, string, "prefix*");
|
NEXT_EQ(TOK_PREFIX, string, "prefix");
|
||||||
NEXT_TOK(TOK_RCURLBR);
|
NEXT_TOK(TOK_RCURLBR);
|
||||||
|
|
||||||
// Prefix escaped star
|
// Prefix escaped star
|
||||||
|
@ -196,28 +196,28 @@ TEST_F(SearchParserTest, EscapedTagPrefixes) {
|
||||||
NEXT_EQ(TOK_FIELD, string, "@name");
|
NEXT_EQ(TOK_FIELD, string, "@name");
|
||||||
NEXT_TOK(TOK_COLON);
|
NEXT_TOK(TOK_COLON);
|
||||||
NEXT_TOK(TOK_LCURLBR);
|
NEXT_TOK(TOK_LCURLBR);
|
||||||
NEXT_EQ(TOK_PREFIX, string, "escape-err*");
|
NEXT_EQ(TOK_PREFIX, string, "escape-err");
|
||||||
NEXT_TOK(TOK_RCURLBR);
|
NEXT_TOK(TOK_RCURLBR);
|
||||||
|
|
||||||
SetInput("@name:{escape\\+pre*}");
|
SetInput("@name:{escape\\+pre*}");
|
||||||
NEXT_EQ(TOK_FIELD, string, "@name");
|
NEXT_EQ(TOK_FIELD, string, "@name");
|
||||||
NEXT_TOK(TOK_COLON);
|
NEXT_TOK(TOK_COLON);
|
||||||
NEXT_TOK(TOK_LCURLBR);
|
NEXT_TOK(TOK_LCURLBR);
|
||||||
NEXT_EQ(TOK_PREFIX, string, "escape+pre*");
|
NEXT_EQ(TOK_PREFIX, string, "escape+pre");
|
||||||
NEXT_TOK(TOK_RCURLBR);
|
NEXT_TOK(TOK_RCURLBR);
|
||||||
|
|
||||||
SetInput("@name:{escape\\.pre*}");
|
SetInput("@name:{escape\\.pre*}");
|
||||||
NEXT_EQ(TOK_FIELD, string, "@name");
|
NEXT_EQ(TOK_FIELD, string, "@name");
|
||||||
NEXT_TOK(TOK_COLON);
|
NEXT_TOK(TOK_COLON);
|
||||||
NEXT_TOK(TOK_LCURLBR);
|
NEXT_TOK(TOK_LCURLBR);
|
||||||
NEXT_EQ(TOK_PREFIX, string, "escape.pre*");
|
NEXT_EQ(TOK_PREFIX, string, "escape.pre");
|
||||||
NEXT_TOK(TOK_RCURLBR);
|
NEXT_TOK(TOK_RCURLBR);
|
||||||
|
|
||||||
SetInput("@name:{complex\\-escape\\+with\\.many\\*chars*}");
|
SetInput("@name:{complex\\-escape\\+with\\.many\\*chars*}");
|
||||||
NEXT_EQ(TOK_FIELD, string, "@name");
|
NEXT_EQ(TOK_FIELD, string, "@name");
|
||||||
NEXT_TOK(TOK_COLON);
|
NEXT_TOK(TOK_COLON);
|
||||||
NEXT_TOK(TOK_LCURLBR);
|
NEXT_TOK(TOK_LCURLBR);
|
||||||
NEXT_EQ(TOK_PREFIX, string, "complex-escape+with.many*chars*");
|
NEXT_EQ(TOK_PREFIX, string, "complex-escape+with.many*chars");
|
||||||
NEXT_TOK(TOK_RCURLBR);
|
NEXT_TOK(TOK_RCURLBR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,9 +237,8 @@ TEST_F(SearchParserTest, Parse) {
|
||||||
EXPECT_EQ(1, Parse(" @foo:@bar "));
|
EXPECT_EQ(1, Parse(" @foo:@bar "));
|
||||||
EXPECT_EQ(1, Parse(" @foo: "));
|
EXPECT_EQ(1, Parse(" @foo: "));
|
||||||
|
|
||||||
// We don't support suffix/any other position for now
|
EXPECT_EQ(0, Parse("*suffix"));
|
||||||
EXPECT_EQ(1, Parse("*pre"));
|
EXPECT_EQ(0, Parse("*infix*"));
|
||||||
EXPECT_EQ(1, Parse("*pre*"));
|
|
||||||
|
|
||||||
EXPECT_EQ(1, Parse("pre***"));
|
EXPECT_EQ(1, Parse("pre***"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -872,6 +872,32 @@ TEST_F(SearchTest, InvalidVectorParameter) {
|
||||||
ASSERT_FALSE(algo.Init("*=>[KNN 2 @v $b]", &query_params));
|
ASSERT_FALSE(algo.Init("*=>[KNN 2 @v $b]", &query_params));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(SearchTest, NotImplementedSearchTypes) {
|
||||||
|
auto schema = MakeSimpleSchema({{"title", SchemaField::TEXT}});
|
||||||
|
FieldIndices indices{schema, kEmptyOptions, PMR_NS::get_default_resource(), nullptr};
|
||||||
|
|
||||||
|
SearchAlgorithm algo{};
|
||||||
|
QueryParams params;
|
||||||
|
|
||||||
|
// Add a document for testing
|
||||||
|
MockedDocument doc{Map{{"title", "text for search"}}};
|
||||||
|
indices.Add(0, doc);
|
||||||
|
|
||||||
|
// Test suffix search (words ending with "search")
|
||||||
|
algo.Init("*search", ¶ms);
|
||||||
|
auto suffix_result = algo.Search(&indices);
|
||||||
|
EXPECT_TRUE(suffix_result.ids.empty()) << "Suffix search should return empty result";
|
||||||
|
EXPECT_THAT(suffix_result.error, testing::HasSubstr("Not implemented"))
|
||||||
|
<< "Suffix search should return a not implemented error";
|
||||||
|
|
||||||
|
// Test infix search (words containing "for")
|
||||||
|
algo.Init("*for*", ¶ms);
|
||||||
|
auto infix_result = algo.Search(&indices);
|
||||||
|
EXPECT_TRUE(infix_result.ids.empty()) << "Infix search should return empty result";
|
||||||
|
EXPECT_THAT(infix_result.error, testing::HasSubstr("Not implemented"))
|
||||||
|
<< "Infix search should return a not implemented error";
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace search
|
} // namespace search
|
||||||
|
|
||||||
} // namespace dfly
|
} // namespace dfly
|
||||||
|
|
13
src/core/search/tag_types.h
Normal file
13
src/core/search/tag_types.h
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2023, DragonflyDB authors. All rights reserved.
|
||||||
|
// See LICENSE for licensing terms.
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace dfly {
|
||||||
|
namespace search {
|
||||||
|
|
||||||
|
enum class TagType { PREFIX, SUFFIX, INFIX, REGULAR };
|
||||||
|
|
||||||
|
} // namespace search
|
||||||
|
} // namespace dfly
|
|
@ -50,6 +50,10 @@ class SmallString {
|
||||||
|
|
||||||
bool DefragIfNeeded(float ratio);
|
bool DefragIfNeeded(float ratio);
|
||||||
|
|
||||||
|
uint8_t first_byte() const {
|
||||||
|
return prefix_[0];
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// prefix of the string that is broken down into 2 parts.
|
// prefix of the string that is broken down into 2 parts.
|
||||||
char prefix_[kPrefLen];
|
char prefix_[kPrefLen];
|
||||||
|
|
|
@ -281,6 +281,11 @@ class Connection : public util::Connection {
|
||||||
return name_;
|
return name_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns protocol type of this connection
|
||||||
|
Protocol GetProtocol() const {
|
||||||
|
return protocol_;
|
||||||
|
}
|
||||||
|
|
||||||
struct MemoryUsage {
|
struct MemoryUsage {
|
||||||
size_t mem = 0;
|
size_t mem = 0;
|
||||||
io::IoBuf::MemoryUsage buf_mem;
|
io::IoBuf::MemoryUsage buf_mem;
|
||||||
|
|
|
@ -296,7 +296,11 @@ void RunEngine(ProactorPool* pool, AcceptServer* acceptor) {
|
||||||
|
|
||||||
if (mc_port > 0 && !tcp_disabled) {
|
if (mc_port > 0 && !tcp_disabled) {
|
||||||
auto listener = MakeListener(Protocol::MEMCACHE, &service);
|
auto listener = MakeListener(Protocol::MEMCACHE, &service);
|
||||||
acceptor->AddListener(mc_port, listener.get());
|
error_code ec = acceptor->AddListener(nullptr, mc_port, listener.get());
|
||||||
|
if (ec) {
|
||||||
|
LOG(ERROR) << "Could not open memcached port " << mc_port << ", error: " << ec.message();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
listeners.push_back(listener.release());
|
listeners.push_back(listener.release());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -119,12 +119,13 @@ void JournalSlice::SetFlushMode(bool allow_flush) {
|
||||||
DCHECK(allow_flush != enable_journal_flush_);
|
DCHECK(allow_flush != enable_journal_flush_);
|
||||||
enable_journal_flush_ = allow_flush;
|
enable_journal_flush_ = allow_flush;
|
||||||
if (allow_flush) {
|
if (allow_flush) {
|
||||||
JournalItem item;
|
// This lock is never blocking because it contends with UnregisterOnChange, which is cpu only.
|
||||||
item.lsn = -1;
|
// Hence this lock prevents the UnregisterOnChange to start running in the middle of
|
||||||
item.opcode = Op::NOOP;
|
// SetFlushMode.
|
||||||
item.data = "";
|
std::shared_lock lk(cb_mu_);
|
||||||
item.slot = {};
|
for (auto k_v : journal_consumers_arr_) {
|
||||||
CallOnChange(item);
|
k_v.second->ThrottleIfNeeded();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,7 +155,7 @@ void JournalSlice::AddLogRecord(const Entry& entry) {
|
||||||
void JournalSlice::CallOnChange(const JournalItem& item) {
|
void JournalSlice::CallOnChange(const JournalItem& item) {
|
||||||
// This lock is never blocking because it contends with UnregisterOnChange, which is cpu only.
|
// This lock is never blocking because it contends with UnregisterOnChange, which is cpu only.
|
||||||
// Hence this lock prevents the UnregisterOnChange to start running in the middle of CallOnChange.
|
// Hence this lock prevents the UnregisterOnChange to start running in the middle of CallOnChange.
|
||||||
// CallOnChange is atomic iff JournalSlice::SetFlushMode(false) is called before.
|
// CallOnChange is atomic if JournalSlice::SetFlushMode(false) is called before.
|
||||||
std::shared_lock lk(cb_mu_);
|
std::shared_lock lk(cb_mu_);
|
||||||
for (auto k_v : journal_consumers_arr_) {
|
for (auto k_v : journal_consumers_arr_) {
|
||||||
k_v.second->ConsumeJournalChange(item);
|
k_v.second->ConsumeJournalChange(item);
|
||||||
|
|
|
@ -51,7 +51,7 @@ class JournalStreamer : public journal::JournalConsumerInterface {
|
||||||
void ThrottleIfNeeded();
|
void ThrottleIfNeeded();
|
||||||
|
|
||||||
virtual bool ShouldWrite(const journal::JournalItem& item) const {
|
virtual bool ShouldWrite(const journal::JournalItem& item) const {
|
||||||
return cntx_->IsRunning() && item.opcode != journal::Op::NOOP;
|
return cntx_->IsRunning();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WaitForInflightToComplete();
|
void WaitForInflightToComplete();
|
||||||
|
|
|
@ -49,7 +49,7 @@ struct TransactionData {
|
||||||
DbIndex dbid{0};
|
DbIndex dbid{0};
|
||||||
journal::ParsedEntry::CmdData command;
|
journal::ParsedEntry::CmdData command;
|
||||||
|
|
||||||
journal::Op opcode = journal::Op::NOOP;
|
journal::Op opcode;
|
||||||
uint64_t lsn = 0;
|
uint64_t lsn = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
namespace dfly {
|
namespace dfly {
|
||||||
namespace journal {
|
namespace journal {
|
||||||
|
|
||||||
enum class Op : uint8_t { NOOP = 0, SELECT = 6, EXPIRED = 9, COMMAND = 10, PING = 13, LSN = 15 };
|
enum class Op : uint8_t { SELECT = 6, EXPIRED = 9, COMMAND = 10, PING = 13, LSN = 15 };
|
||||||
|
|
||||||
struct EntryBase {
|
struct EntryBase {
|
||||||
TxId txid;
|
TxId txid;
|
||||||
|
|
|
@ -1629,8 +1629,14 @@ facade::ConnectionContext* Service::CreateContext(facade::Connection* owner) {
|
||||||
} else if (owner->IsPrivileged() && RequirePrivilegedAuth()) {
|
} else if (owner->IsPrivileged() && RequirePrivilegedAuth()) {
|
||||||
res->req_auth = !GetPassword().empty();
|
res->req_auth = !GetPassword().empty();
|
||||||
} else if (!owner->IsPrivileged()) {
|
} else if (!owner->IsPrivileged()) {
|
||||||
|
// Memcached protocol doesn't support authentication, so we don't require it
|
||||||
|
if (owner->GetProtocol() == Protocol::MEMCACHE) {
|
||||||
|
res->req_auth = false;
|
||||||
|
res->authenticated = true; // Automatically authenticated for Memcached protocol
|
||||||
|
} else {
|
||||||
res->req_auth = !user_registry_.AuthUser("default", "");
|
res->req_auth = !user_registry_.AuthUser("default", "");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// a bit of a hack. I set up breaker callback here for the owner.
|
// a bit of a hack. I set up breaker callback here for the owner.
|
||||||
// Should work though it's confusing to have it here.
|
// Should work though it's confusing to have it here.
|
||||||
|
|
|
@ -482,11 +482,12 @@ void RdbLoaderBase::OpaqueObjLoader::CreateHMap(const LoadTrace* ltrace) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
std::string key;
|
std::string key;
|
||||||
|
std::string val;
|
||||||
for (size_t i = 0; i < ltrace->arr.size(); i += increment) {
|
for (size_t i = 0; i < ltrace->arr.size(); i += increment) {
|
||||||
// ToSV may reference an internal buffer, therefore we can use only before the
|
// ToSV may reference an internal buffer, therefore we can use only before the
|
||||||
// next call to ToSV. To workaround, copy the key locally.
|
// next call to ToSV. To workaround, copy the key locally.
|
||||||
key = ToSV(ltrace->arr[i].rdb_var);
|
key = ToSV(ltrace->arr[i].rdb_var);
|
||||||
string_view val = ToSV(ltrace->arr[i + 1].rdb_var);
|
val = ToSV(ltrace->arr[i + 1].rdb_var);
|
||||||
|
|
||||||
if (ec_)
|
if (ec_)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -141,7 +141,6 @@ ABSL_DECLARE_FLAG(string, tls_ca_cert_file);
|
||||||
ABSL_DECLARE_FLAG(string, tls_ca_cert_dir);
|
ABSL_DECLARE_FLAG(string, tls_ca_cert_dir);
|
||||||
ABSL_DECLARE_FLAG(int, replica_priority);
|
ABSL_DECLARE_FLAG(int, replica_priority);
|
||||||
ABSL_DECLARE_FLAG(double, rss_oom_deny_ratio);
|
ABSL_DECLARE_FLAG(double, rss_oom_deny_ratio);
|
||||||
ABSL_DECLARE_FLAG(uint32_t, memcached_port);
|
|
||||||
|
|
||||||
bool AbslParseFlag(std::string_view in, ReplicaOfFlag* flag, std::string* err) {
|
bool AbslParseFlag(std::string_view in, ReplicaOfFlag* flag, std::string* err) {
|
||||||
#define RETURN_ON_ERROR(cond, m) \
|
#define RETURN_ON_ERROR(cond, m) \
|
||||||
|
@ -300,12 +299,6 @@ bool ValidateServerTlsFlags() {
|
||||||
has_auth = true;
|
has_auth = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Allow TLS without authentication for memcached protocol
|
|
||||||
// We check if memcached_port is enabled, as this is a static check during startup
|
|
||||||
if (GetFlag(FLAGS_memcached_port) > 0) {
|
|
||||||
has_auth = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!has_auth) {
|
if (!has_auth) {
|
||||||
LOG(ERROR) << "TLS configured but no authentication method is used!";
|
LOG(ERROR) << "TLS configured but no authentication method is used!";
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -408,17 +408,13 @@ void SliceSnapshot::OnDbChange(DbIndex db_index, const DbSlice::ChangeReq& req)
|
||||||
// value. This is guaranteed by the fact that OnJournalEntry runs always after OnDbChange, and
|
// value. This is guaranteed by the fact that OnJournalEntry runs always after OnDbChange, and
|
||||||
// no database switch can be performed between those two calls, because they are part of one
|
// no database switch can be performed between those two calls, because they are part of one
|
||||||
// transaction.
|
// transaction.
|
||||||
// allow_flush is controlled by Journal::SetFlushMode
|
|
||||||
// (usually it's true unless we are in the middle of a critical section that can not preempt).
|
|
||||||
void SliceSnapshot::ConsumeJournalChange(const journal::JournalItem& item) {
|
void SliceSnapshot::ConsumeJournalChange(const journal::JournalItem& item) {
|
||||||
{
|
{
|
||||||
// We grab the lock in case we are in the middle of serializing a bucket, so it serves as a
|
// We grab the lock in case we are in the middle of serializing a bucket, so it serves as a
|
||||||
// barrier here for atomic serialization.
|
// barrier here for atomic serialization.
|
||||||
std::lock_guard barrier(big_value_mu_);
|
std::lock_guard barrier(big_value_mu_);
|
||||||
if (item.opcode != journal::Op::NOOP) {
|
|
||||||
std::ignore = serializer_->WriteJournalEntry(item.data);
|
std::ignore = serializer_->WriteJournalEntry(item.data);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SliceSnapshot::ThrottleIfNeeded() {
|
void SliceSnapshot::ThrottleIfNeeded() {
|
||||||
|
|
|
@ -186,7 +186,7 @@ def test_memcached_tls_no_requirepass(df_factory, with_tls_server_args, with_tls
|
||||||
the server with TLS enabled but without specifying requirepass and with the Memcached port.
|
the server with TLS enabled but without specifying requirepass and with the Memcached port.
|
||||||
"""
|
"""
|
||||||
# Create arguments for TLS without specifying requirepass
|
# Create arguments for TLS without specifying requirepass
|
||||||
server_args = {**DEFAULT_ARGS, **with_tls_server_args}
|
server_args = {**DEFAULT_ARGS, **with_tls_server_args, "requirepass": "test_password"}
|
||||||
|
|
||||||
# Create and start the server - it should not crash
|
# Create and start the server - it should not crash
|
||||||
server = df_factory.create(**server_args)
|
server = df_factory.create(**server_args)
|
||||||
|
@ -204,7 +204,7 @@ def test_memcached_tls_no_requirepass(df_factory, with_tls_server_args, with_tls
|
||||||
ssl_context.verify_mode = ssl.CERT_NONE
|
ssl_context.verify_mode = ssl.CERT_NONE
|
||||||
|
|
||||||
# Output port information for diagnostics
|
# Output port information for diagnostics
|
||||||
print(f"Connecting to memcached port: {server.mc_port} on host: 127.0.0.1")
|
logging.info(f"Connecting to memcached port: {server.mc_port} on host: 127.0.0.1")
|
||||||
|
|
||||||
# Connect to Memcached over TLS
|
# Connect to Memcached over TLS
|
||||||
client = MCClient(("127.0.0.1", server.mc_port), tls_context=ssl_context)
|
client = MCClient(("127.0.0.1", server.mc_port), tls_context=ssl_context)
|
||||||
|
|
|
@ -1,23 +1,18 @@
|
||||||
import random
|
|
||||||
|
|
||||||
from itertools import chain, repeat
|
|
||||||
import re
|
|
||||||
import pytest
|
|
||||||
import asyncio
|
|
||||||
import async_timeout
|
|
||||||
import platform
|
import platform
|
||||||
import pymemcache
|
import shutil
|
||||||
import logging
|
|
||||||
import tarfile
|
import tarfile
|
||||||
import urllib.request
|
import urllib.request
|
||||||
import shutil
|
from itertools import chain, repeat
|
||||||
from redis import asyncio as aioredis
|
|
||||||
from .utility import *
|
import async_timeout
|
||||||
from .instance import DflyInstanceFactory, DflyInstance
|
import pymemcache
|
||||||
from .seeder import Seeder as SeederV2
|
|
||||||
from . import dfly_args
|
from . import dfly_args
|
||||||
|
from .instance import DflyInstanceFactory, DflyInstance
|
||||||
from .proxy import Proxy
|
from .proxy import Proxy
|
||||||
from .seeder import DebugPopulateSeeder
|
from .seeder import DebugPopulateSeeder
|
||||||
|
from .seeder import Seeder as SeederV2
|
||||||
|
from .utility import *
|
||||||
|
|
||||||
ADMIN_PORT = 1211
|
ADMIN_PORT = 1211
|
||||||
|
|
||||||
|
@ -3115,3 +3110,23 @@ async def test_partial_replication_on_same_source_master(df_factory, use_takeove
|
||||||
lines = replica2.find_in_logs(f"Started full with localhost:{replica1.port}")
|
lines = replica2.find_in_logs(f"Started full with localhost:{replica1.port}")
|
||||||
assert len(lines) == 0
|
assert len(lines) == 0
|
||||||
assert len(replica1.find_in_logs("No partial sync due to diff")) > 0
|
assert len(replica1.find_in_logs("No partial sync due to diff")) > 0
|
||||||
|
|
||||||
|
|
||||||
|
async def test_replicate_hset_with_expiry(df_factory: DflyInstanceFactory):
|
||||||
|
master = df_factory.create(proactor_threads=2)
|
||||||
|
replica = df_factory.create(proactor_threads=2)
|
||||||
|
|
||||||
|
master.start()
|
||||||
|
replica.start()
|
||||||
|
|
||||||
|
cm = master.client()
|
||||||
|
await cm.execute_command("HSETEX key 86400 name 1234")
|
||||||
|
|
||||||
|
cr = replica.client()
|
||||||
|
await cr.execute_command(f"REPLICAOF localhost {master.port}")
|
||||||
|
await wait_available_async(cr)
|
||||||
|
|
||||||
|
result = await cr.hgetall("key")
|
||||||
|
|
||||||
|
assert "name" in result
|
||||||
|
assert result["name"] == "1234"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue