Skip to content

Commit 9c1f6c0

Browse files
committed
fix postgres impl
Signed-off-by: Davanum Srinivas <[email protected]>
1 parent a55619f commit 9c1f6c0

File tree

8 files changed

+136
-42
lines changed

8 files changed

+136
-42
lines changed

distros/kubernetes/nvsentinel/templates/configmap.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ data:
2424
"enableK8sPlatformConnector": "{{ .Values.platformConnector.k8sConnector.enabled }}",
2525
"K8sConnectorQps": {{ printf "%.2f" .Values.platformConnector.k8sConnector.qps }},
2626
"K8sConnectorBurst": {{ .Values.platformConnector.k8sConnector.burst }},
27-
"enableMongoDBStorePlatformConnector": "{{ .Values.global.mongodbStore.enabled }}"
27+
"enableMongoDBStorePlatformConnector": "{{ .Values.global.mongodbStore.enabled }}",
28+
"enablePostgresDBStorePlatformConnector": {{ eq .Values.global.datastore.provider "postgresql" | quote }}
2829
{{- if .Values.platformConnector.nodeMetadata }}
2930
,"nodeMetadataAugmentationEnabled": "{{ .Values.platformConnector.nodeMetadata.enabled }}"
3031
,"nodeMetadataCacheSize": {{ .Values.platformConnector.nodeMetadata.cacheSize }}

distros/kubernetes/nvsentinel/templates/daemonset.yaml

Lines changed: 67 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,49 @@ spec:
4141
{{- toYaml . | nindent 8 }}
4242
{{- end }}
4343
serviceAccountName: {{ include "nvsentinel.serviceAccountName" . }}
44+
{{- if and .Values.global.datastore (eq .Values.global.datastore.provider "postgresql") }}
45+
initContainers:
46+
- name: fix-cert-permissions
47+
image: "docker.io/bitnamilegacy/os-shell:12-debian-12-r30"
48+
imagePullPolicy: IfNotPresent
49+
securityContext:
50+
runAsUser: 1001
51+
runAsGroup: 1001
52+
command:
53+
- sh
54+
- -c
55+
- |
56+
echo "Copying PostgreSQL client certificates with correct permissions..."
57+
cp /etc/ssl/client-certs-original/tls.crt /etc/ssl/client-certs-fixed/
58+
cp /etc/ssl/client-certs-original/ca.crt /etc/ssl/client-certs-fixed/
59+
cp /etc/ssl/client-certs-original/tls.key /etc/ssl/client-certs-fixed/
60+
chmod 644 /etc/ssl/client-certs-fixed/tls.crt
61+
chmod 644 /etc/ssl/client-certs-fixed/ca.crt
62+
chmod 600 /etc/ssl/client-certs-fixed/tls.key
63+
echo "Certificate permissions fixed:"
64+
ls -la /etc/ssl/client-certs-fixed/
65+
volumeMounts:
66+
- name: postgresql-client-cert-original
67+
mountPath: /etc/ssl/client-certs-original
68+
readOnly: true
69+
- name: client-certs-fixed
70+
mountPath: /etc/ssl/client-certs-fixed
71+
{{- end }}
4472
containers:
4573
- name: platform-connector
74+
image: "{{ .Values.platformConnector.image.repository }}:{{ .Values.platformConnector.image.tag | default .Values.global.image.tag | default .Chart.AppVersion }}"
75+
imagePullPolicy: {{ .Values.platformConnector.image.pullPolicy }}
76+
{{- if and .Values.global.datastore (eq .Values.global.datastore.provider "postgresql") }}
77+
securityContext:
78+
runAsUser: 1001
79+
runAsGroup: 1001
80+
{{- else }}
81+
securityContext:
82+
runAsUser: 0
83+
capabilities:
84+
drop:
85+
- ALL
86+
{{- end }}
4687
ports:
4788
- name: metrics
4889
containerPort: {{ .Values.global.metricsPort }}
@@ -62,17 +103,14 @@ spec:
62103
periodSeconds: 10
63104
timeoutSeconds: 3
64105
failureThreshold: 3
65-
securityContext:
66-
runAsUser: 0
67-
capabilities:
68-
drop:
69-
- ALL
70-
image: "{{ .Values.platformConnector.image.repository }}:{{ .Values.platformConnector.image.tag | default .Values.global.image.tag | default .Chart.AppVersion }}"
71-
imagePullPolicy: {{ .Values.platformConnector.image.pullPolicy }}
72106
args:
73107
- "--config=/etc/config/config.json"
74108
- "--metrics-port={{ .Values.global.metricsPort }}"
75-
- "--mongo-client-cert-mount-path=/etc/ssl/mongo-client"
109+
{{- if and .Values.global.datastore (eq .Values.global.datastore.provider "postgresql") }}
110+
- "--database-client-cert-mount-path={{ .Values.platformConnector.postgresqlStore.clientCertMountPath }}"
111+
{{- else }}
112+
- "--mongo-client-cert-mount-path={{ .Values.platformConnector.mongodbStore.clientCertMountPath }}"
113+
{{- end }}
76114
- "--socket={{ .Values.socketPath }}"
77115
resources:
78116
{{- toYaml .Values.platformConnector.resources | nindent 12 }}
@@ -81,9 +119,15 @@ spec:
81119
mountPath: /var/run
82120
- name: platform-connector-configmap
83121
mountPath: /etc/config/
122+
{{- if and .Values.global.datastore (eq .Values.global.datastore.provider "postgresql") }}
123+
- name: client-certs-fixed
124+
mountPath: {{ .Values.platformConnector.postgresqlStore.clientCertMountPath }}
125+
readOnly: true
126+
{{- else }}
84127
- name: mongo-app-client-cert
85-
mountPath: /etc/ssl/mongo-client
128+
mountPath: {{ .Values.platformConnector.mongodbStore.clientCertMountPath }}
86129
readOnly: true
130+
{{- end }}
87131
env:
88132
- name: NODE_NAME
89133
valueFrom:
@@ -92,8 +136,13 @@ spec:
92136
fieldPath: spec.nodeName
93137
- name: LOG_LEVEL
94138
value: "{{ .Values.platformConnector.logLevel }}"
139+
{{- if and .Values.global.datastore (eq .Values.global.datastore.provider "postgresql") }}
140+
- name: POSTGRESQL_CLIENT_CERT_MOUNT_PATH
141+
value: {{ .Values.platformConnector.postgresqlStore.clientCertMountPath }}
142+
{{- else }}
95143
- name: MONGODB_CLIENT_CERT_MOUNT_PATH
96144
value: {{ .Values.platformConnector.mongodbStore.clientCertMountPath }}
145+
{{- end }}
97146
envFrom:
98147
- configMapRef:
99148
name: {{ if .Values.global.datastore }}{{ .Release.Name }}-datastore-config{{ else }}mongodb-config{{ end }}
@@ -106,10 +155,19 @@ spec:
106155
- name: platform-connector-configmap
107156
configMap:
108157
name: {{ include "nvsentinel.fullname" . }}
158+
{{- if and .Values.global.datastore (eq .Values.global.datastore.provider "postgresql") }}
159+
- name: postgresql-client-cert-original
160+
secret:
161+
secretName: postgresql-client-cert
162+
optional: false
163+
- name: client-certs-fixed
164+
emptyDir: {}
165+
{{- else }}
109166
- name: mongo-app-client-cert
110167
secret:
111168
secretName: mongo-app-client-cert-secret
112169
optional: true
170+
{{- end }}
113171
{{- with (.Values.global.tolerations | default .Values.platformConnector.tolerations) }}
114172
tolerations:
115173
{{- toYaml . | nindent 8 }}

distros/kubernetes/nvsentinel/values.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ platformConnector:
9191
enabled: false
9292
clientCertMountPath: "/etc/ssl/mongo-client"
9393

94+
postgresqlStore:
95+
clientCertMountPath: "/etc/ssl/client-certs"
96+
9497
k8sConnector:
9598
enabled: true
9699
qps: 5.0

platform-connectors/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func initializeConnectors(
212212
}
213213

214214
// Keep the legacy config key name for backward compatibility with existing ConfigMaps
215-
if config["enableMongoDBStorePlatformConnector"] == True {
215+
if config["enableMongoDBStorePlatformConnector"] == True || config["enablePostgresDBStorePlatformConnector"] == True {
216216
storeConnector, err = initializeDatabaseStoreConnector(ctx, databaseClientCertMountPath)
217217
if err != nil {
218218
return nil, nil, nil, fmt.Errorf("failed to initialize database store connector: %w", err)

store-client/pkg/datastore/providers/postgresql/database_client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ func (c *PostgreSQLDatabaseClient) FindOne(
254254
}
255255

256256
//nolint:gosec // G201: table name is controlled internally, not from user input
257-
query := fmt.Sprintf("SELECT data FROM %s WHERE %s LIMIT 1", c.tableName, whereClause)
257+
query := fmt.Sprintf("SELECT document FROM %s WHERE %s LIMIT 1", c.tableName, whereClause)
258258

259259
var jsonData []byte
260260

@@ -293,7 +293,7 @@ func (c *PostgreSQLDatabaseClient) Find(
293293
}
294294

295295
//nolint:gosec // G201: table name is controlled internally, not from user input
296-
query := fmt.Sprintf("SELECT data FROM %s WHERE %s", c.tableName, whereClause)
296+
query := fmt.Sprintf("SELECT document FROM %s WHERE %s", c.tableName, whereClause)
297297

298298
// Apply options
299299
if options != nil {

store-client/pkg/datastore/providers/postgresql/health_events.go

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"fmt"
2222
"log/slog"
2323
"strings"
24-
"time"
2524

2625
"github.com/nvidia/nvsentinel/store-client/pkg/datastore"
2726
)
@@ -268,6 +267,14 @@ func (p *PostgreSQLHealthEventStore) FindHealthEventsByNode(
268267
return nil, fmt.Errorf("failed to unmarshal health event: %w", err)
269268
}
270269

270+
// Populate RawEvent for cold-start support
271+
var rawEvent map[string]interface{}
272+
if err := json.Unmarshal(documentJSON, &rawEvent); err != nil {
273+
return nil, fmt.Errorf("failed to unmarshal raw event: %w", err)
274+
}
275+
276+
event.RawEvent = rawEvent
277+
271278
events = append(events, event)
272279
}
273280

@@ -368,6 +375,14 @@ func (p *PostgreSQLHealthEventStore) executeFilterQuery(
368375
return nil, fmt.Errorf("failed to unmarshal health event: %w", err)
369376
}
370377

378+
// Populate RawEvent for cold-start support
379+
var rawEvent map[string]interface{}
380+
if err := json.Unmarshal(documentJSON, &rawEvent); err != nil {
381+
return nil, fmt.Errorf("failed to unmarshal raw event: %w", err)
382+
}
383+
384+
event.RawEvent = rawEvent
385+
371386
events = append(events, event)
372387
}
373388

@@ -407,6 +422,14 @@ func (p *PostgreSQLHealthEventStore) FindHealthEventsByStatus(
407422
return nil, fmt.Errorf("failed to unmarshal health event: %w", err)
408423
}
409424

425+
// Populate RawEvent for cold-start support
426+
var rawEvent map[string]interface{}
427+
if err := json.Unmarshal(documentJSON, &rawEvent); err != nil {
428+
return nil, fmt.Errorf("failed to unmarshal raw event: %w", err)
429+
}
430+
431+
event.RawEvent = rawEvent
432+
410433
events = append(events, event)
411434
}
412435

@@ -563,6 +586,14 @@ func (p *PostgreSQLHealthEventStore) FindLatestEventForNode(
563586
return nil, fmt.Errorf("failed to unmarshal health event: %w", err)
564587
}
565588

589+
// Populate RawEvent for cold-start support
590+
var rawEvent map[string]interface{}
591+
if err := json.Unmarshal(documentJSON, &rawEvent); err != nil {
592+
return nil, fmt.Errorf("failed to unmarshal raw event: %w", err)
593+
}
594+
595+
event.RawEvent = rawEvent
596+
566597
return &event, nil
567598
}
568599

@@ -576,10 +607,9 @@ func (p *PostgreSQLHealthEventStore) FindHealthEventsByQuery(ctx context.Context
576607
// Build the full query
577608
//nolint:gosec // G202 false positive - using parameterized query with placeholders
578609
query := `
579-
SELECT id, data, createdAt, updatedAt
610+
SELECT document
580611
FROM health_events
581612
WHERE ` + whereClause + `
582-
ORDER BY createdAt DESC
583613
`
584614

585615
rows, err := p.db.QueryContext(ctx, query, args...)
@@ -591,13 +621,9 @@ func (p *PostgreSQLHealthEventStore) FindHealthEventsByQuery(ctx context.Context
591621
var events []datastore.HealthEventWithStatus
592622

593623
for rows.Next() {
594-
var id string
595-
596624
var documentJSON []byte
597625

598-
var createdAt, updatedAt time.Time
599-
600-
if err := rows.Scan(&id, &documentJSON, &createdAt, &updatedAt); err != nil {
626+
if err := rows.Scan(&documentJSON); err != nil {
601627
return nil, fmt.Errorf("failed to scan health event row: %w", err)
602628
}
603629

@@ -606,7 +632,13 @@ func (p *PostgreSQLHealthEventStore) FindHealthEventsByQuery(ctx context.Context
606632
return nil, fmt.Errorf("failed to unmarshal health event: %w", err)
607633
}
608634

609-
event.CreatedAt = createdAt
635+
// Populate RawEvent for cold-start support
636+
var rawEvent map[string]interface{}
637+
if err := json.Unmarshal(documentJSON, &rawEvent); err != nil {
638+
return nil, fmt.Errorf("failed to unmarshal raw event: %w", err)
639+
}
640+
641+
event.RawEvent = rawEvent
610642
events = append(events, event)
611643
}
612644

store-client/pkg/query/builder.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ func mongoFieldToJSONB(fieldPath string) string {
407407
return fieldPath
408408
}
409409

410-
return fmt.Sprintf("data->>'%s'", fieldPath)
410+
return fmt.Sprintf("document->>'%s'", fieldPath)
411411
}
412412

413413
// Split the path into parts
@@ -417,7 +417,7 @@ func mongoFieldToJSONB(fieldPath string) string {
417417
// All intermediate parts use -> operator
418418
// Final part uses ->> operator to extract as text
419419
var jsonbPath strings.Builder
420-
jsonbPath.WriteString("data")
420+
jsonbPath.WriteString("document")
421421

422422
for i, part := range parts {
423423
if i < len(parts)-1 {

0 commit comments

Comments
 (0)