Skip to content

Commit 4dd8830

Browse files
akojimadahlerlend
authored andcommitted
Bug#37608230 Endpoint Config Options Not Being Inherited Across Levels
Metadata options were not being propagated from service to schema and object endpoints. They are now merged instead of only falling back when the options column is NULL. (POST-PUSH FIX WL#15440) Change-Id: I4acbf857634f8a2ae57cd4be14dbce35afc5a407
1 parent 6420a84 commit 4dd8830

File tree

8 files changed

+915
-13
lines changed

8 files changed

+915
-13
lines changed
Lines changed: 371 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,371 @@
1+
# MySQL Rest Service schema created.
2+
# MySQL Rest Service, server accounts configured.
3+
# DB `basic_schema` - created
4+
CREATE FUNCTION `basic_schema`.`nothing` () RETURNS INTEGER
5+
BEGIN
6+
RETURN 0;
7+
END;$$
8+
# Registred SERVICE at path: /svc
9+
# Registred DB_SCHEMA at path: /svc/basic
10+
set @basic_id=@schema_id;
11+
# Registred DB_OBJECT at path: /svc/basic/t1
12+
# Registred DB_OBJECT at path: /svc/basic/t2
13+
# Registred DB_OBJECT at path: /svc/basic/t3
14+
set @basic_t3_id=@db_object_id;
15+
# Registred DB_OBJECT at path: /svc/basic/proc1
16+
# Registred DB_OBJECT at path: /svc/basic/proc2
17+
# Registred DB_OBJECT at path: /svc/basic/proc3
18+
set @basic_proc3_id=@db_object_id;
19+
# Registred DB_OBJECT at path: /svc/basic/func1
20+
# Registred DB_OBJECT at path: /svc/basic/func2
21+
# Registred DB_OBJECT at path: /svc/basic/func3
22+
set @basic_func3_id=@db_object_id;
23+
# Registred DB_SCHEMA at path: /svc/basic2
24+
set @basic2_id=@schema_id;
25+
# Registred DB_OBJECT at path: /svc/basic2/t1
26+
# Registred DB_OBJECT at path: /svc/basic2/t2
27+
# Registred DB_OBJECT at path: /svc/basic2/t3
28+
set @basic2_t3_id=@db_object_id;
29+
no links
30+
GET /svc/basic2/t1/1
31+
{
32+
"id": 1,
33+
"_metadata": {
34+
"etag": "349A978B6EEAC86C01C2D7FD0F0C13EEAEE998366EF4D2B4881E22957865400F"
35+
}
36+
}
37+
OK
38+
no links
39+
GET /svc/basic2/t2/1
40+
{
41+
"id": 1,
42+
"_metadata": {
43+
"etag": "349A978B6EEAC86C01C2D7FD0F0C13EEAEE998366EF4D2B4881E22957865400F"
44+
}
45+
}
46+
OK
47+
with links
48+
GET /svc/basic2/t3/1
49+
{
50+
"id": 1,
51+
"links": [
52+
{
53+
"rel": "self",
54+
"href": "/svc/basic2/t3/1"
55+
}
56+
],
57+
"_metadata": {
58+
"etag": "349A978B6EEAC86C01C2D7FD0F0C13EEAEE998366EF4D2B4881E22957865400F"
59+
}
60+
}
61+
OK
62+
### change schema and object options
63+
with links
64+
GET /svc/basic2/t1/1
65+
{
66+
"id": 1,
67+
"links": [
68+
{
69+
"rel": "self",
70+
"href": "/svc/basic2/t1/1"
71+
}
72+
],
73+
"_metadata": {
74+
"etag": "349A978B6EEAC86C01C2D7FD0F0C13EEAEE998366EF4D2B4881E22957865400F"
75+
}
76+
}
77+
OK
78+
with links
79+
GET /svc/basic2/t2/1
80+
{
81+
"id": 1,
82+
"links": [
83+
{
84+
"rel": "self",
85+
"href": "/svc/basic2/t2/1"
86+
}
87+
],
88+
"_metadata": {
89+
"etag": "349A978B6EEAC86C01C2D7FD0F0C13EEAEE998366EF4D2B4881E22957865400F"
90+
}
91+
}
92+
OK
93+
with links
94+
GET /svc/basic2/t3/1
95+
{
96+
"id": 1,
97+
"_metadata": {
98+
"etag": "349A978B6EEAC86C01C2D7FD0F0C13EEAEE998366EF4D2B4881E22957865400F"
99+
}
100+
}
101+
OK
102+
drop schema basic_schema;
103+
500 with error
104+
GET /svc/basic/t1
105+
{
106+
"message": "Unknown database 'basic_schema'",
107+
"sqlcode": "1049",
108+
"what": "Error executing MySQL query \"SELECT /*+ MAX_EXECUTION_TIME(2000) */ JSON_OBJECT('id', `t`.`id`,'links', JSON_ARRAY(JSON_OBJECT('rel','self','href',CONCAT('/svc/basic/t1','/',CONCAT_WS(',',`t`.`id`))))) as doc FROM `basic_schema`.`table1` as `t` LIMIT 0,26\": Unknown database 'basic_schema' (1049)",
109+
"status": 500
110+
}
111+
OK
112+
POST /svc/basic/proc1 (payload-size:2)
113+
{
114+
"message": "PROCEDURE basic_schema.procedure1 does not exist",
115+
"sqlcode": "1305",
116+
"what": "Error preparing MySQL query \"CALL `basic_schema`.`procedure1`()\": PROCEDURE basic_schema.procedure1 does not exist (1305)",
117+
"status": 500
118+
}
119+
OK
120+
POST /svc/basic/func1 (payload-size:2)
121+
{
122+
"message": "FUNCTION basic_schema.nothing does not exist",
123+
"sqlcode": "1305",
124+
"what": "Error executing MySQL query \"SELECT `basic_schema`.`nothing`()\": FUNCTION basic_schema.nothing does not exist (1305)",
125+
"status": 500
126+
}
127+
OK
128+
500 with error
129+
GET /svc/basic/t2
130+
{
131+
"message": "Unknown database 'basic_schema'",
132+
"sqlcode": "1049",
133+
"what": "Error executing MySQL query \"SELECT /*+ MAX_EXECUTION_TIME(2000) */ JSON_OBJECT('id', `t`.`id`,'links', JSON_ARRAY(JSON_OBJECT('rel','self','href',CONCAT('/svc/basic/t2','/',CONCAT_WS(',',`t`.`id`))))) as doc FROM `basic_schema`.`table1` as `t` LIMIT 0,26\": Unknown database 'basic_schema' (1049)",
134+
"status": 500
135+
}
136+
OK
137+
POST /svc/basic/proc2 (payload-size:2)
138+
{
139+
"message": "PROCEDURE basic_schema.procedure1 does not exist",
140+
"sqlcode": "1305",
141+
"what": "Error preparing MySQL query \"CALL `basic_schema`.`procedure1`()\": PROCEDURE basic_schema.procedure1 does not exist (1305)",
142+
"status": 500
143+
}
144+
OK
145+
POST /svc/basic/func2 (payload-size:2)
146+
{
147+
"message": "FUNCTION basic_schema.nothing does not exist",
148+
"sqlcode": "1305",
149+
"what": "Error executing MySQL query \"SELECT `basic_schema`.`nothing`()\": FUNCTION basic_schema.nothing does not exist (1305)",
150+
"status": 500
151+
}
152+
OK
153+
no error
154+
GET /svc/basic/t3
155+
{
156+
"message": "Internal Error",
157+
"status": 500
158+
}
159+
OK
160+
POST /svc/basic/proc3 (payload-size:2)
161+
{
162+
"message": "Internal Error",
163+
"status": 500
164+
}
165+
OK
166+
POST /svc/basic/func3 (payload-size:2)
167+
{
168+
"message": "Internal Error",
169+
"status": 500
170+
}
171+
OK
172+
### change schema options
173+
500 with error
174+
GET /svc/basic/t1
175+
{
176+
"message": "Unknown database 'basic_schema'",
177+
"sqlcode": "1049",
178+
"what": "Error executing MySQL query \"SELECT /*+ MAX_EXECUTION_TIME(2000) */ JSON_OBJECT('id', `t`.`id`,'links', JSON_ARRAY(JSON_OBJECT('rel','self','href',CONCAT('/svc/basic/t1','/',CONCAT_WS(',',`t`.`id`))))) as doc FROM `basic_schema`.`table1` as `t` LIMIT 0,26\": Unknown database 'basic_schema' (1049)",
179+
"status": 500
180+
}
181+
OK
182+
POST /svc/basic/proc1 (payload-size:2)
183+
{
184+
"message": "PROCEDURE basic_schema.procedure1 does not exist",
185+
"sqlcode": "1305",
186+
"what": "Error preparing MySQL query \"CALL `basic_schema`.`procedure1`()\": PROCEDURE basic_schema.procedure1 does not exist (1305)",
187+
"status": 500
188+
}
189+
OK
190+
POST /svc/basic/func1 (payload-size:2)
191+
{
192+
"message": "FUNCTION basic_schema.nothing does not exist",
193+
"sqlcode": "1305",
194+
"what": "Error executing MySQL query \"SELECT `basic_schema`.`nothing`()\": FUNCTION basic_schema.nothing does not exist (1305)",
195+
"status": 500
196+
}
197+
OK
198+
500 with error
199+
GET /svc/basic/t2
200+
{
201+
"message": "Unknown database 'basic_schema'",
202+
"sqlcode": "1049",
203+
"what": "Error executing MySQL query \"SELECT /*+ MAX_EXECUTION_TIME(2000) */ JSON_OBJECT('id', `t`.`id`,'links', JSON_ARRAY(JSON_OBJECT('rel','self','href',CONCAT('/svc/basic/t2','/',CONCAT_WS(',',`t`.`id`))))) as doc FROM `basic_schema`.`table1` as `t` LIMIT 0,26\": Unknown database 'basic_schema' (1049)",
204+
"status": 500
205+
}
206+
OK
207+
POST /svc/basic/proc2 (payload-size:2)
208+
{
209+
"message": "PROCEDURE basic_schema.procedure1 does not exist",
210+
"sqlcode": "1305",
211+
"what": "Error preparing MySQL query \"CALL `basic_schema`.`procedure1`()\": PROCEDURE basic_schema.procedure1 does not exist (1305)",
212+
"status": 500
213+
}
214+
OK
215+
POST /svc/basic/func2 (payload-size:2)
216+
{
217+
"message": "FUNCTION basic_schema.nothing does not exist",
218+
"sqlcode": "1305",
219+
"what": "Error executing MySQL query \"SELECT `basic_schema`.`nothing`()\": FUNCTION basic_schema.nothing does not exist (1305)",
220+
"status": 500
221+
}
222+
OK
223+
with no error
224+
GET /svc/basic/t3
225+
{
226+
"message": "Internal Error",
227+
"status": 500
228+
}
229+
OK
230+
POST /svc/basic/proc3 (payload-size:2)
231+
{
232+
"message": "Internal Error",
233+
"status": 500
234+
}
235+
OK
236+
POST /svc/basic/func3 (payload-size:2)
237+
{
238+
"message": "Internal Error",
239+
"status": 500
240+
}
241+
OK
242+
### change service options
243+
500 with no error
244+
GET /svc/basic/t1
245+
{
246+
"message": "Internal Error",
247+
"status": 500
248+
}
249+
OK
250+
POST /svc/basic/proc1 (payload-size:2)
251+
{
252+
"message": "Internal Error",
253+
"status": 500
254+
}
255+
OK
256+
POST /svc/basic/func1 (payload-size:2)
257+
{
258+
"message": "Internal Error",
259+
"status": 500
260+
}
261+
OK
262+
500 with no error
263+
GET /svc/basic/t2
264+
{
265+
"message": "Internal Error",
266+
"status": 500
267+
}
268+
OK
269+
POST /svc/basic/proc2 (payload-size:2)
270+
{
271+
"message": "Internal Error",
272+
"status": 500
273+
}
274+
OK
275+
POST /svc/basic/func2 (payload-size:2)
276+
{
277+
"message": "Internal Error",
278+
"status": 500
279+
}
280+
OK
281+
with no error
282+
GET /svc/basic/t3
283+
{
284+
"message": "Internal Error",
285+
"status": 500
286+
}
287+
OK
288+
POST /svc/basic/proc3 (payload-size:2)
289+
{
290+
"message": "Internal Error",
291+
"status": 500
292+
}
293+
OK
294+
POST /svc/basic/func3 (payload-size:2)
295+
{
296+
"message": "Internal Error",
297+
"status": 500
298+
}
299+
OK
300+
### change object options
301+
500 with no error
302+
GET /svc/basic/t1
303+
{
304+
"message": "Internal Error",
305+
"status": 500
306+
}
307+
OK
308+
POST /svc/basic/proc1 (payload-size:2)
309+
{
310+
"message": "Internal Error",
311+
"status": 500
312+
}
313+
OK
314+
POST /svc/basic/func1 (payload-size:2)
315+
{
316+
"message": "Internal Error",
317+
"status": 500
318+
}
319+
OK
320+
500 with no error
321+
GET /svc/basic/t2
322+
{
323+
"message": "Internal Error",
324+
"status": 500
325+
}
326+
OK
327+
POST /svc/basic/proc2 (payload-size:2)
328+
{
329+
"message": "Internal Error",
330+
"status": 500
331+
}
332+
OK
333+
POST /svc/basic/func2 (payload-size:2)
334+
{
335+
"message": "Internal Error",
336+
"status": 500
337+
}
338+
OK
339+
with error
340+
GET /svc/basic/t3
341+
{
342+
"message": "Unknown database 'basic_schema'",
343+
"sqlcode": "1049",
344+
"what": "Error executing MySQL query \"SELECT /*+ MAX_EXECUTION_TIME(2000) */ JSON_OBJECT('id', `t`.`id`,'links', JSON_ARRAY(JSON_OBJECT('rel','self','href',CONCAT('/svc/basic/t3','/',CONCAT_WS(',',`t`.`id`))))) as doc FROM `basic_schema`.`table1` as `t` LIMIT 0,26\": Unknown database 'basic_schema' (1049)",
345+
"status": 500
346+
}
347+
OK
348+
POST /svc/basic/proc3 (payload-size:2)
349+
{
350+
"message": "PROCEDURE basic_schema.procedure1 does not exist",
351+
"sqlcode": "1305",
352+
"what": "Error preparing MySQL query \"CALL `basic_schema`.`procedure1`()\": PROCEDURE basic_schema.procedure1 does not exist (1305)",
353+
"status": 500
354+
}
355+
OK
356+
POST /svc/basic/func3 (payload-size:2)
357+
{
358+
"message": "FUNCTION basic_schema.nothing does not exist",
359+
"sqlcode": "1305",
360+
"what": "Error executing MySQL query \"SELECT `basic_schema`.`nothing`()\": FUNCTION basic_schema.nothing does not exist (1305)",
361+
"status": 500
362+
}
363+
OK
364+
create schema basic_schema;
365+
DROP SCHEMA basic_schema;
366+
DROP SCHEMA mysql_rest_service_metadata;
367+
DROP ROLE mysql_rest_service_admin;
368+
DROP ROLE mysql_rest_service_schema_admin;
369+
DROP ROLE mysql_rest_service_meta_provider;
370+
DROP ROLE mysql_rest_service_data_provider;
371+
DROP ROLE mysql_rest_service_dev;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
[DEFAULT]
2+
3+
[logger]
4+
level=DEBUG
5+
6+
[routing:static]
7+
bind_address=0.0.0.0
8+
routing_strategy=round-robin
9+
protocol=classic
10+
client_ssl_mode=PREFERRED
11+
server_ssl_mode=PREFERRED
12+
server_ssl_verify=DISABLED
13+
14+
[http_server]
15+
16+
[mysql_rest_service]
17+
mysql_read_write_route=static
18+
wait_for_metadata_schema_access=320
19+
20+
mysql_user=root
21+
mysql_user_data_access=root
22+
metadata_refresh_interval=1
23+
developer=my_user

0 commit comments

Comments
 (0)