Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(mirror-node): Enhance mirror-node external database feature #1230

Merged
Merged
Show file tree
Hide file tree
Changes from 27 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
4984a66
added new flags, and placed them inside the mirror_node command to be…
instamenta Jan 29, 2025
0e6bf46
add color to the warming about the sql query for the external database
instamenta Jan 29, 2025
a8f09c8
add descriptions to the flags and prompt's
instamenta Jan 29, 2025
82fa778
change wording for description
instamenta Jan 29, 2025
204c6a5
fix mirror-node command logic for --quiet-mode
instamenta Jan 29, 2025
86b2128
working on adding the taskfiles for the external database testing and…
instamenta Jan 31, 2025
b52e772
dont prompt for the optional flags
instamenta Jan 31, 2025
948a67f
Merge remote-tracking branch 'origin/main' into 01226-enhance-mirror-…
instamenta Jan 31, 2025
451d5b6
rename dir and fix the logic for the query execution post the 'mirror…
instamenta Feb 3, 2025
9abc741
fix paths
instamenta Feb 3, 2025
63c0050
gits
instamenta Feb 3, 2025
cceb1b5
revert code that should be unnafected
instamenta Feb 3, 2025
f0869c6
make new command for deploying only the mirror-node
instamenta Feb 3, 2025
48d9d18
change init script
instamenta Feb 4, 2025
303525d
Merge remote-tracking branch 'origin/main' into 01226-enhance-mirror-…
instamenta Feb 4, 2025
a0fa4c9
revert obsolete changes
instamenta Feb 4, 2025
6fe7ff2
add implicit postgres version tag for external databse
instamenta Feb 4, 2025
fd003ee
cleanup
instamenta Feb 5, 2025
6b28b0b
fix failing importer's migration issue
instamenta Feb 5, 2025
8691928
Merge remote-tracking branch 'origin/main' into 01226-enhance-mirror-…
instamenta Feb 5, 2025
400d7da
fix failing test
instamenta Feb 5, 2025
ce9a6bb
Merge remote-tracking branch 'origin/main' into 01226-enhance-mirror-…
instamenta Feb 6, 2025
068facc
fix taskfile
instamenta Feb 6, 2025
9e364ce
Merge remote-tracking branch 'origin/main' into 01226-enhance-mirror-…
instamenta Feb 6, 2025
a2d7f79
fix taskfile and remove obsolete files, change paths after file and d…
instamenta Feb 6, 2025
8b1d9b5
working on solo_smoke_test for the external db test
instamenta Feb 6, 2025
b412ae3
fix logging inside index.ts and remove obsolete task
instamenta Feb 6, 2025
647c3c7
modify flow task test
instamenta Feb 6, 2025
6544cae
Merge remote-tracking branch 'origin/main' into 01226-enhance-mirror-…
instamenta Feb 7, 2025
06d8f40
apply requested changes for the flag descriptions and increase timeou…
instamenta Feb 7, 2025
adac81e
Merge remote-tracking branch 'origin/main' into 01226-enhance-mirror-…
instamenta Feb 10, 2025
f47ddfe
fix path to NamespaceName
instamenta Feb 10, 2025
399aebf
Merge remote-tracking branch 'origin/main' into 01226-enhance-mirror-…
instamenta Feb 10, 2025
43b1154
merge and changes to smoketest and it's helper for the new --deployme…
instamenta Feb 10, 2025
a879101
disabled node state validation for the moment
instamenta Feb 10, 2025
6f66cc2
Merge remote-tracking branch 'origin/main' into 01226-enhance-mirror-…
instamenta Feb 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions Taskfile.helper.yml
Original file line number Diff line number Diff line change
Expand Up @@ -464,3 +464,32 @@ tasks:
cmds:
- echo "Cleaning up temporary files..."
- rm -f /tmp/solo-${USER}-* || true

solo:external-database:
silent: false
desc: setup external database PostgreSQL with helm
cmds:
- |
{{.solo_bin_dir}}/helm install {{.postgres_name}} bitnami/postgresql \
--set image.tag=16.4.0 \
--namespace {{.postgres_database_namespace}} --create-namespace \
--set global.postgresql.auth.postgresPassword={{.postgres_password}} \
--set primary.persistence.enabled=false --set secondary.enabled=false
- name: "Wait for PostgreSQL pod to be ready"
cmd: |
kubectl wait --for=condition=ready pod/{{.postgres_container_name}} \
-n {{.postgres_database_namespace}} --timeout=60s
- name: "Copy init.sql inside the database pod"
cmd: |
kubectl cp ../external-database-test/scripts/init.sh \
{{.postgres_container_name}}:/tmp/init.sh \
-n {{.postgres_database_namespace}}
- name: "Make init.sh executable"
cmd: |
kubectl exec -it {{.postgres_container_name}} \
-n {{.postgres_database_namespace}} -- chmod +x /tmp/init.sh
- name: "Execute init.sh inside the database pod"
cmd: |
kubectl exec -it {{.postgres_container_name}} \
-n {{.postgres_database_namespace}} \
-- /bin/bash /tmp/init.sh "{{.postgres_username}}" "{{.postgres_password}}"
144 changes: 0 additions & 144 deletions examples/custom-mirror-node-database/scripts/init.sh

This file was deleted.

42 changes: 0 additions & 42 deletions examples/custom-mirror-node-database/values.yaml

This file was deleted.

61 changes: 61 additions & 0 deletions examples/external-database-test/Taskfile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
version: 3
includes:
main:
taskfile: ../../Taskfile.helper.yml
flatten: true
vars:
use_port_forwards: "true"
postgres_username: "postgres"
postgres_password: "XXXXXXXXX"
postgres_name: "my-postgresql"
postgres_container_name: "{{.postgres_name}}-0"
postgres_host_fqdn: "{{.postgres_name}}.database.svc.cluster.local"
postgres_container_fdqn: "{{.postgres_container_name}}.database.svc.cluster.local"
postgres_mirror_node_database_name: "mirror_node"
postgres_database_namespace: "database"
env:
SOLO_NETWORK_SIZE: "1"
SOLO_NAMESPACE: "external-database-test"
MIRROR_NODE_DEPLOY_EXTRA_FLAGS: "--use-external-database --external-database-host {{.postgres_host_fqdn}} --external-database-owner-username {{.postgres_username}} --external-database-owner-password {{.postgres_password}}"
tasks:
default:
silent: true
desc: install Solo, create a kind cluster, deploy the network, set it up, and start it
deps:
- task: "init"
cmds:
- echo "This command is meant to deploy a Solo network to a Kind cluster on your local machine, "
- echo "ctrl-c if this is not what you want to do."
- sleep 5

install:
desc: create the cluster, solo init, solo cluster create, solo node keys, solo network deploy
deps:
- task: "init"
cmds:
- task: "cluster:create"
- task: "solo:init"
- task: "solo:cluster:setup"
- task: "solo:keys"
- task: "solo:network:deploy"
- task: "solo:node:setup"
- task: "solo:node:start"
- task: "solo:external-database"
- task: "solo:mirror-node"
- name: "Copy database-seeding-query.sql inside the database pod"
cmd: |
kubectl cp {{.HOME}}/.solo/cache/database-seeding-query.sql {{.postgres_container_name}}:/tmp/database-seeding-query.sql \
-n {{.postgres_database_namespace}}
- name: "Execute the database-seeding–query.sql against the database"
cmd: |
kubectl exec -it {{.postgres_container_name}} -n {{.postgres_database_namespace}} -- env PGPASSWORD={{.postgres_password}} psql -U {{.postgres_username}} \
-f /tmp/database-seeding-query.sql \
-d {{.postgres_mirror_node_database_name}}
- name: "Run smoke test"
cmd: (cd ../../ && ./examples/external-database-test/scripts/solo_smoke_test.sh)
destroy:
desc: destroy relay, mirror-node, and network
deps:
- task: "init"
cmds:
- task: "cluster:destroy"
84 changes: 84 additions & 0 deletions examples/external-database-test/scripts/init.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
#!/bin/bash
set -e

export HEDERA_MIRROR_DATABASE_NAME="mirror_node"
HEDERA_MIRROR_OWNER="$1"
HEDERA_MIRROR_OWNER_PASSWORD="$2"

Check warning on line 6 in examples/external-database-test/scripts/init.sh

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

examples/external-database-test/scripts/init.sh#L6

HEDERA_MIRROR_OWNER_PASSWORD appears unused. Verify use (or export if used externally).

export HEDERA_MIRROR_GRPC_DB_HOST="localhost"

export HEDERA_MIRROR_IMPORTER_DB_HOST="localhost"
export HEDERA_MIRROR_IMPORTER_DB_NAME="${HEDERA_MIRROR_DATABASE_NAME}"
export HEDERA_MIRROR_IMPORTER_DB_OWNER="${HEDERA_MIRROR_OWNER}"
export HEDERA_MIRROR_IMPORTER_DB_SCHEMA="public"
export HEDERA_MIRROR_IMPORTER_DB_TEMPSCHEMA="temporary"


PGHBACONF="/opt/bitnami/postgresql/conf/pg_hba.conf"
if [[ -f "${PGHBACONF}" ]]; then
cp "${PGHBACONF}" "${PGHBACONF}.bak"
echo "local all all trust" > "${PGHBACONF}"
pg_ctl reload
fi

psql -d "user=postgres connect_timeout=3" \
--set ON_ERROR_STOP=1 \
--set "dbName=${HEDERA_MIRROR_IMPORTER_DB_NAME}" \
--set "dbSchema=${HEDERA_MIRROR_IMPORTER_DB_SCHEMA}" \
--set "ownerUsername=${HEDERA_MIRROR_IMPORTER_DB_OWNER}" \
--set "tempSchema=${HEDERA_MIRROR_IMPORTER_DB_TEMPSCHEMA}" <<__SQL__

-- Create database & owner
create database :dbName with owner :ownerUsername;

-- Create roles
create role readonly;
create role readwrite in role readonly;
create role temporary_admin in role readwrite;

-- Create users
alter user :ownerUsername with createrole;

-- Grant temp schema admin privileges
grant temporary_admin to :ownerUsername;

-- Add extensions
\connect :dbName
create extension if not exists btree_gist;
create extension if not exists pg_stat_statements;
create extension if not exists pg_trgm;

-- Create schema
\connect :dbName :ownerUsername
create schema if not exists :dbSchema authorization :ownerUsername;
grant usage on schema :dbSchema to public;
revoke create on schema :dbSchema from public;

-- Create temp table schema
create schema if not exists :tempSchema authorization temporary_admin;
grant usage on schema :tempSchema to public;
revoke create on schema :tempSchema from public;

-- Grant readonly privileges
grant connect on database :dbName to readonly;
grant select on all tables in schema :dbSchema, :tempSchema to readonly;
grant select on all sequences in schema :dbSchema, :tempSchema to readonly;
grant usage on schema :dbSchema, :tempSchema to readonly;
alter default privileges in schema :dbSchema, :tempSchema grant select on tables to readonly;
alter default privileges in schema :dbSchema, :tempSchema grant select on sequences to readonly;

-- Grant readwrite privileges
grant insert, update, delete on all tables in schema :dbSchema to readwrite;
grant usage on all sequences in schema :dbSchema to readwrite;
alter default privileges in schema :dbSchema grant insert, update, delete on tables to readwrite;
alter default privileges in schema :dbSchema grant usage on sequences to readwrite;

-- Alter search path
\connect postgres postgres
alter database :dbName set search_path = :dbSchema, public, :tempSchema;
__SQL__

if [[ -f "${PGHBACONF}.bak" ]]; then
mv "${PGHBACONF}.bak" "${PGHBACONF}"
pg_ctl reload
fi
Loading
Loading