Skip to content

Commit 95dc76e

Browse files
author
Yong Xu
committed
SNOW-1621763 update example for na + spcs upgrade
1 parent c7c986c commit 95dc76e

File tree

7 files changed

+229
-47
lines changed

7 files changed

+229
-47
lines changed

spcs-three-tier/app/manifest.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
manifest_version: 1
22
version:
3-
name: V1
3+
name: versioned_schema
44
label: "First Version"
55

66
configuration:
7-
grant_callback: v1.create_services
7+
grant_callback: versioned_schema.create_services
88

99
artifacts:
1010
setup_script: setup.sql
@@ -20,7 +20,7 @@ artifacts:
2020
- /spcs_app/napp/img_repo/eap_router
2121

2222
lifecycle_callbacks:
23-
version_initializer: v1.init
23+
version_initializer: versioned_schema.init
2424

2525
privileges:
2626
- BIND SERVICE ENDPOINT:
@@ -39,13 +39,13 @@ references:
3939
- SELECT
4040
object_type: VIEW
4141
multi_valued: false
42-
register_callback: v1.register_single_callback
42+
register_callback: versioned_schema.register_single_callback
4343

4444
- WIKIPEDIA_EAI:
4545
label: "Wikipedia Access Integration"
4646
description: "EAI for Egress from NA+SPCS"
4747
privileges: [USAGE]
4848
object_type: EXTERNAL_ACCESS_INTEGRATION
49-
register_callback: v1.register_single_callback
50-
configuration_callback: v1.get_configuration
49+
register_callback: versioned_schema.register_single_callback
50+
configuration_callback: versioned_schema.get_configuration
5151
required_at_setup: true

spcs-three-tier/app/setup.sql

Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ CREATE APPLICATION ROLE IF NOT EXISTS app_user;
33
CREATE SCHEMA IF NOT EXISTS app_public;
44
GRANT USAGE ON SCHEMA app_public TO APPLICATION ROLE app_admin;
55
GRANT USAGE ON SCHEMA app_public TO APPLICATION ROLE app_user;
6-
CREATE OR ALTER VERSIONED SCHEMA v1;
7-
GRANT USAGE ON SCHEMA v1 TO APPLICATION ROLE app_admin;
6+
CREATE OR ALTER VERSIONED SCHEMA versioned_schema;
7+
GRANT USAGE ON SCHEMA versioned_schema TO APPLICATION ROLE app_admin;
88

99

10-
CREATE OR REPLACE PROCEDURE v1.register_single_callback(ref_name STRING, operation STRING, ref_or_alias STRING)
10+
CREATE OR REPLACE PROCEDURE versioned_schema.register_single_callback(ref_name STRING, operation STRING, ref_or_alias STRING)
1111
RETURNS STRING
1212
LANGUAGE SQL
1313
AS $$
@@ -25,9 +25,9 @@ CREATE OR REPLACE PROCEDURE v1.register_single_callback(ref_name STRING, operati
2525
RETURN 'Operation ' || operation || ' succeeds.';
2626
END;
2727
$$;
28-
GRANT USAGE ON PROCEDURE v1.register_single_callback(STRING, STRING, STRING) TO APPLICATION ROLE app_admin;
28+
GRANT USAGE ON PROCEDURE versioned_schema.register_single_callback(STRING, STRING, STRING) TO APPLICATION ROLE app_admin;
2929

30-
CREATE OR REPLACE PROCEDURE v1.get_configuration(ref_name STRING)
30+
CREATE OR REPLACE PROCEDURE versioned_schema.get_configuration(ref_name STRING)
3131
RETURNS STRING
3232
LANGUAGE SQL
3333
AS
@@ -47,26 +47,9 @@ BEGIN
4747
END;
4848
$$;
4949

50-
GRANT USAGE ON PROCEDURE v1.get_configuration(STRING) TO APPLICATION ROLE app_admin;
50+
GRANT USAGE ON PROCEDURE versioned_schema.get_configuration(STRING) TO APPLICATION ROLE app_admin;
5151

52-
-- The version initializer callback is executed after a successful installation, upgrade, or downgrade of an application object.
53-
-- In case the application fails to upgrade, the version initializer of the previous (successful) version will be executed so you
54-
-- can clean up application state that may have been modified during the failed upgrade.
55-
CREATE OR REPLACE PROCEDURE v1.init()
56-
RETURNS STRING
57-
LANGUAGE SQL
58-
EXECUTE AS OWNER
59-
AS
60-
$$
61-
BEGIN
62-
ALTER SERVICE IF EXISTS app_public.frontend FROM SPECIFICATION_FILE='frontend.yaml';
63-
ALTER SERVICE IF EXISTS app_public.backend FROM SPECIFICATION_FILE='backend.yaml';
64-
RETURN 'init complete';
65-
END $$;
66-
67-
GRANT USAGE ON PROCEDURE v1.init() TO APPLICATION ROLE app_admin;
68-
69-
CREATE OR REPLACE PROCEDURE v1.start_backend(pool_name VARCHAR)
52+
CREATE OR REPLACE PROCEDURE versioned_schema.start_backend(pool_name VARCHAR)
7053
RETURNS string
7154
LANGUAGE sql
7255
AS $$
@@ -78,9 +61,9 @@ BEGIN
7861
GRANT USAGE ON SERVICE app_public.backend TO APPLICATION ROLE app_user;
7962
END
8063
$$;
81-
GRANT USAGE ON PROCEDURE v1.start_backend(VARCHAR) TO APPLICATION ROLE app_admin;
64+
GRANT USAGE ON PROCEDURE versioned_schema.start_backend(VARCHAR) TO APPLICATION ROLE app_admin;
8265

83-
CREATE OR REPLACE PROCEDURE v1.start_frontend(pool_name VARCHAR)
66+
CREATE OR REPLACE PROCEDURE versioned_schema.start_frontend(pool_name VARCHAR)
8467
RETURNS string
8568
LANGUAGE sql
8669
AS $$
@@ -95,10 +78,10 @@ BEGIN
9578
RETURN 'Service started. Check status, and when ready, get URL';
9679
END
9780
$$;
98-
GRANT USAGE ON PROCEDURE v1.start_frontend(VARCHAR) TO APPLICATION ROLE app_admin;
81+
GRANT USAGE ON PROCEDURE versioned_schema.start_frontend(VARCHAR) TO APPLICATION ROLE app_admin;
9982

10083

101-
CREATE OR REPLACE PROCEDURE v1.create_services(privileges array)
84+
CREATE OR REPLACE PROCEDURE versioned_schema.create_services(privileges array)
10285
RETURNS STRING
10386
LANGUAGE SQL
10487
AS
@@ -114,11 +97,14 @@ CREATE OR REPLACE PROCEDURE v1.create_services(privileges array)
11497
MAX_NODES = 1
11598
INSTANCE_FAMILY = CPU_X64_XS;
11699

117-
CALL v1.start_backend('backend_compute_pool');
118-
CALL v1.start_frontend('frontend_compute_pool');
100+
CALL versioned_schema.start_backend('backend_compute_pool');
101+
CALL versioned_schema.start_frontend('frontend_compute_pool');
102+
# needed for installation from listing/cross account
103+
GRANT SERVICE ROLE app_public.frontend!ALL_ENDPOINTS_USAGE TO APPLICATION ROLE app_admin;
104+
119105
END;
120106
$$;
121-
GRANT USAGE ON PROCEDURE v1.create_services(array) TO APPLICATION ROLE app_admin;
107+
GRANT USAGE ON PROCEDURE versioned_schema.create_services(array) TO APPLICATION ROLE app_admin;
122108

123109

124110
CREATE OR REPLACE PROCEDURE app_public.stop_app()
@@ -133,7 +119,7 @@ END
133119
$$;
134120
GRANT USAGE ON PROCEDURE app_public.stop_app() TO APPLICATION ROLE app_admin;
135121

136-
CREATE OR REPLACE PROCEDURE v1.app_url()
122+
CREATE OR REPLACE PROCEDURE versioned_schema.app_url()
137123
RETURNS string
138124
LANGUAGE sql
139125
AS
@@ -146,8 +132,8 @@ BEGIN
146132
RETURN ingress_url;
147133
END
148134
$$;
149-
GRANT USAGE ON PROCEDURE v1.app_url() TO APPLICATION ROLE app_admin;
150-
GRANT USAGE ON PROCEDURE v1.app_url() TO APPLICATION ROLE app_user;
135+
GRANT USAGE ON PROCEDURE versioned_schema.app_url() TO APPLICATION ROLE app_admin;
136+
GRANT USAGE ON PROCEDURE versioned_schema.app_url() TO APPLICATION ROLE app_user;
151137

152138
-- Support functions
153139
EXECUTE IMMEDIATE FROM 'support.sql';

spcs-three-tier/app_v2/manifest.yml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
manifest_version: 2
2+
version:
3+
name: versioned_schema
4+
label: "Second Version"
5+
6+
artifacts:
7+
setup_script: setup.sql
8+
9+
default_web_endpoint:
10+
service: app_public.frontend
11+
endpoint: app
12+
13+
container_services:
14+
images:
15+
- /spcs_app/napp/img_repo/eap_frontend
16+
- /spcs_app/napp/img_repo/eap_backend
17+
- /spcs_app/napp/img_repo/eap_router
18+
19+
lifecycle_callbacks:
20+
version_initializer: versioned_schema.init
21+
22+
privileges:
23+
- BIND SERVICE ENDPOINT:
24+
description: "Ability to create ingress URLs."
25+
required_at_setup: true
26+
- CREATE COMPUTE POOL:
27+
required_at_setup: true
28+
description: "Enable appplication to create its own compute pool(s)"
29+
30+
31+
references:
32+
- ORDERS_TABLE:
33+
label: "Orders table"
34+
description: "Orders table in TPC-H samples"
35+
privileges:
36+
- SELECT
37+
object_type: VIEW
38+
multi_valued: false
39+
register_callback: versioned_schema.register_single_callback
40+
41+
- WIKIPEDIA_EAI:
42+
label: "Wikipedia Access Integration"
43+
description: "EAI for Egress from NA+SPCS"
44+
privileges: [USAGE]
45+
object_type: EXTERNAL_ACCESS_INTEGRATION
46+
register_callback: versioned_schema.register_single_callback
47+
configuration_callback: versioned_schema.get_configuration
48+
required_at_setup: true

spcs-three-tier/app_v2/setup.sql

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
CREATE APPLICATION ROLE IF NOT EXISTS app_admin;
2+
CREATE APPLICATION ROLE IF NOT EXISTS app_user;
3+
CREATE SCHEMA IF NOT EXISTS app_public;
4+
GRANT USAGE ON SCHEMA app_public TO APPLICATION ROLE app_admin;
5+
GRANT USAGE ON SCHEMA app_public TO APPLICATION ROLE app_user;
6+
CREATE OR ALTER VERSIONED SCHEMA versioned_schema;
7+
GRANT USAGE ON SCHEMA versioned_schema TO APPLICATION ROLE app_admin;
8+
9+
10+
CREATE OR REPLACE PROCEDURE versioned_schema.register_single_callback(ref_name STRING, operation STRING, ref_or_alias STRING)
11+
RETURNS STRING
12+
LANGUAGE SQL
13+
AS $$
14+
BEGIN
15+
CASE (operation)
16+
WHEN 'ADD' THEN
17+
SELECT system$set_reference(:ref_name, :ref_or_alias);
18+
WHEN 'REMOVE' THEN
19+
SELECT system$remove_reference(:ref_name);
20+
WHEN 'CLEAR' THEN
21+
SELECT system$remove_reference(:ref_name);
22+
ELSE
23+
RETURN 'Unknown operation: ' || operation;
24+
END CASE;
25+
RETURN 'Operation ' || operation || ' succeeds.';
26+
END;
27+
$$;
28+
GRANT USAGE ON PROCEDURE versioned_schema.register_single_callback(STRING, STRING, STRING) TO APPLICATION ROLE app_admin;
29+
30+
CREATE OR REPLACE PROCEDURE versioned_schema.get_configuration(ref_name STRING)
31+
RETURNS STRING
32+
LANGUAGE SQL
33+
AS
34+
$$
35+
BEGIN
36+
CASE (UPPER(ref_name))
37+
WHEN 'WIKIPEDIA_EAI' THEN
38+
RETURN OBJECT_CONSTRUCT(
39+
'type', 'CONFIGURATION',
40+
'payload', OBJECT_CONSTRUCT(
41+
'host_ports', ARRAY_CONSTRUCT('upload.wikimedia.org'),
42+
'allowed_secrets', 'NONE')
43+
)::STRING;
44+
ELSE
45+
RETURN '';
46+
END CASE;
47+
END;
48+
$$;
49+
50+
GRANT USAGE ON PROCEDURE versioned_schema.get_configuration(STRING) TO APPLICATION ROLE app_admin;
51+
52+
-- The version initializer callback is executed after a successful installation, upgrade, or downgrade of an application object.
53+
-- In case the application fails to upgrade, the version initializer of the previous (successful) version will be executed so you
54+
-- can clean up application state that may have been modified during the failed upgrade.
55+
CREATE OR REPLACE PROCEDURE versioned_schema.init()
56+
RETURNS STRING
57+
LANGUAGE SQL
58+
EXECUTE AS OWNER
59+
AS
60+
$$
61+
BEGIN
62+
ALTER SERVICE IF EXISTS app_public.frontend FROM SPECIFICATION_FILE='frontend.yaml';
63+
ALTER SERVICE IF EXISTS app_public.backend FROM SPECIFICATION_FILE='backend.yaml';
64+
GRANT SERVICE ROLE app_public.frontend!ALL_ENDPOINTS_USAGE TO APPLICATION ROLE app_admin;
65+
RETURN 'init complete';
66+
END $$;
67+
68+
GRANT USAGE ON PROCEDURE versioned_schema.init() TO APPLICATION ROLE app_admin;
69+
70+
CREATE OR REPLACE PROCEDURE versioned_schema.start_backend(pool_name VARCHAR)
71+
RETURNS string
72+
LANGUAGE sql
73+
AS $$
74+
BEGIN
75+
CREATE SERVICE IF NOT EXISTS app_public.backend
76+
IN COMPUTE POOL Identifier(:pool_name)
77+
FROM SPECIFICATION_FILE='backend.yaml'
78+
QUERY_WAREHOUSE = 'WH_NAC';
79+
GRANT USAGE ON SERVICE app_public.backend TO APPLICATION ROLE app_user;
80+
END
81+
$$;
82+
GRANT USAGE ON PROCEDURE versioned_schema.start_backend(VARCHAR) TO APPLICATION ROLE app_admin;
83+
84+
CREATE OR REPLACE PROCEDURE versioned_schema.start_frontend(pool_name VARCHAR)
85+
RETURNS string
86+
LANGUAGE sql
87+
AS $$
88+
BEGIN
89+
CREATE SERVICE IF NOT EXISTS app_public.frontend
90+
IN COMPUTE POOL Identifier(:pool_name)
91+
FROM SPECIFICATION_FILE='frontend.yaml'
92+
EXTERNAL_ACCESS_INTEGRATIONS=( reference('WIKIPEDIA_EAI') );
93+
94+
GRANT USAGE ON SERVICE app_public.frontend TO APPLICATION ROLE app_user;
95+
96+
RETURN 'Service started. Check status, and when ready, get URL';
97+
END
98+
$$;
99+
GRANT USAGE ON PROCEDURE versioned_schema.start_frontend(VARCHAR) TO APPLICATION ROLE app_admin;
100+
101+
102+
CREATE OR REPLACE PROCEDURE versioned_schema.create_services(privileges array)
103+
RETURNS STRING
104+
LANGUAGE SQL
105+
AS
106+
$$
107+
BEGIN
108+
CREATE COMPUTE POOL IF NOT EXISTS frontend_compute_pool
109+
MIN_NODES = 1
110+
MAX_NODES = 1
111+
INSTANCE_FAMILY = CPU_X64_XS;
112+
113+
CREATE COMPUTE POOL IF NOT EXISTS backend_compute_pool
114+
MIN_NODES = 1
115+
MAX_NODES = 1
116+
INSTANCE_FAMILY = CPU_X64_XS;
117+
118+
CALL versioned_schema.start_backend('backend_compute_pool');
119+
CALL versioned_schema.start_frontend('frontend_compute_pool');
120+
END;
121+
$$;
122+
GRANT USAGE ON PROCEDURE versioned_schema.create_services(array) TO APPLICATION ROLE app_admin;
123+
124+
125+
CREATE OR REPLACE PROCEDURE app_public.stop_app()
126+
RETURNS string
127+
LANGUAGE sql
128+
AS
129+
$$
130+
BEGIN
131+
DROP SERVICE IF EXISTS app_public.backend;
132+
DROP SERVICE IF EXISTS app_public.frontend;
133+
END
134+
$$;
135+
GRANT USAGE ON PROCEDURE app_public.stop_app() TO APPLICATION ROLE app_admin;
136+
137+
CREATE OR REPLACE PROCEDURE versioned_schema.app_url()
138+
RETURNS string
139+
LANGUAGE sql
140+
AS
141+
$$
142+
DECLARE
143+
ingress_url VARCHAR;
144+
BEGIN
145+
SHOW ENDPOINTS IN SERVICE app_public.frontend;
146+
SELECT "ingress_url" INTO :ingress_url FROM TABLE (RESULT_SCAN (LAST_QUERY_ID())) LIMIT 1;
147+
RETURN ingress_url;
148+
END
149+
$$;
150+
GRANT USAGE ON PROCEDURE versioned_schema.app_url() TO APPLICATION ROLE app_admin;
151+
GRANT USAGE ON PROCEDURE versioned_schema.app_url() TO APPLICATION ROLE app_user;
152+
153+
-- Support functions
154+
EXECUTE IMMEDIATE FROM 'support.sql';

spcs-three-tier/prepare/spcs_setup.sql

Lines changed: 0 additions & 5 deletions
This file was deleted.

spcs-three-tier/register_callback.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
USE ROLE nac;
22
USE WAREHOUSE wh_nac;
33
GRANT USAGE ON WAREHOUSE wh_nac TO APPLICATION spcs_app_instance;
4-
CALL spcs_app_instance.v1.register_single_callback('ORDERS_TABLE' , 'ADD', SYSTEM$REFERENCE('VIEW', 'NAC_TEST.DATA.ORDERS', 'PERSISTENT', 'SELECT'));
4+
CALL spcs_app_instance.versioned_schema.register_single_callback('ORDERS_TABLE' , 'ADD', SYSTEM$REFERENCE('VIEW', 'NAC_TEST.DATA.ORDERS', 'PERSISTENT', 'SELECT'));

spcs-three-tier/setup.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
set -e
2-
snow sql -f "prepare/spcs_setup.sql"
32
snow sql -f "prepare/provider_setup.sql"
43
snow sql -f "prepare/consumer_setup.sql"
54

0 commit comments

Comments
 (0)