Skip to content

Commit

Permalink
Add support for Oracle as backend database
Browse files Browse the repository at this point in the history
  • Loading branch information
posulliv committed Feb 6, 2024
1 parent 918b8f8 commit 1b600dd
Show file tree
Hide file tree
Showing 7 changed files with 109 additions and 18 deletions.
4 changes: 2 additions & 2 deletions docs/resource-groups-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,12 +111,12 @@ curl -X POST http://localhost:8080/trino/resourcegroup/delete/{INSERT_ID_HERE}

## Add a selector

To add a single selector, specify all relevant fields in the body. Resource
group id should not be specified since the database should autoincrement it.
To add a single selector, specify all relevant fields in the body.

```$xslt
curl -X POST http://localhost:8080/trino/selector/create \
-d '{
"resourceGroupId": 1, \
"priority": 1, \
"userRegex": "selector1", \
"sourceRegex": "resourcegroup1", \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ public static List<ResourceGroupsDetail> upcast(List<ResourceGroups> resourceGro
*/
public static void create(ResourceGroups model, ResourceGroupsDetail resourceGroupDetail)
{
model.set(resourceGroupId, resourceGroupDetail.getResourceGroupId());
model.set(name, resourceGroupDetail.getName());

model.set(parent, resourceGroupDetail.getParent());
Expand Down
70 changes: 70 additions & 0 deletions gateway-ha/src/main/resources/gateway-ha-persistence-oracle.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
CREATE TABLE gateway_backend (
name VARCHAR(256) PRIMARY KEY,
routing_group VARCHAR (256),
backend_url VARCHAR (256),
external_url VARCHAR (256),
active NUMBER(1)
);

CREATE TABLE query_history (
query_id VARCHAR(256) PRIMARY KEY,
query_text VARCHAR (256),
created NUMBER,
backend_url VARCHAR (256),
user_name VARCHAR(256),
source VARCHAR(256)
);
CREATE INDEX query_history_created_idx ON query_history(created);

CREATE TABLE resource_groups (
resource_group_id NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
name VARCHAR(250) NOT NULL,
-- OPTIONAL POLICY CONTROLS
parent NUMBER,
jmx_export CHAR(1),
scheduling_policy VARCHAR(128),
scheduling_weight NUMBER,
-- REQUIRED QUOTAS
soft_memory_limit VARCHAR(128) NOT NULL,
max_queued INT NOT NULL,
hard_concurrency_limit NUMBER NOT NULL,
-- OPTIONAL QUOTAS
soft_concurrency_limit NUMBER,
soft_cpu_limit VARCHAR(128),
hard_cpu_limit VARCHAR(128),
environment VARCHAR(128),
PRIMARY KEY(resource_group_id),
FOREIGN KEY (parent) REFERENCES resource_groups (resource_group_id) ON DELETE CASCADE
);

CREATE TABLE selectors (
resource_group_id NUMBER NOT NULL,
priority NUMBER NOT NULL,
-- Regex fields -- these will be used as a regular expression pattern to
-- match against the field of the same name on queries
user_regex VARCHAR(512),
source_regex VARCHAR(512),
-- Selector fields -- these must match exactly.
query_type VARCHAR(512),
client_tags VARCHAR(512),
selector_resource_estimate VARCHAR(1024),
FOREIGN KEY (resource_group_id) REFERENCES resource_groups (resource_group_id) ON DELETE CASCADE
);

CREATE TABLE resource_groups_global_properties (
name VARCHAR(128) NOT NULL PRIMARY KEY,
value VARCHAR(512) NULL,
CHECK (name in ('cpu_quota_period'))
);

CREATE TABLE exact_match_source_selectors(
environment VARCHAR(256),
update_time TIMESTAMP NOT NULL,
-- Selector fields which must exactly match a query
source VARCHAR(512) NOT NULL,
query_type VARCHAR(512),
resource_group_id VARCHAR(256) NOT NULL,
PRIMARY KEY (environment, source, resource_group_id),
UNIQUE (source, environment, query_type, resource_group_id)
);

4 changes: 2 additions & 2 deletions gateway-ha/src/main/resources/gateway-ha-persistence.sql
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CREATE INDEX query_history_created_idx ON query_history(created);

CREATE TABLE IF NOT EXISTS resource_groups (
resource_group_id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(250) NOT NULL UNIQUE,
name VARCHAR(250) NOT NULL,

-- OPTIONAL POLICY CONTROLS
parent BIGINT NULL,
Expand Down Expand Up @@ -75,4 +75,4 @@ CREATE TABLE IF NOT EXISTS exact_match_source_selectors (

PRIMARY KEY (environment, source, query_type),
UNIQUE (source, environment, query_type, resource_group_id)
);
);
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public void testReadResourceGroup()
List<ResourceGroupsDetail> resourceGroups = resourceGroupManager.readAllResourceGroups(null);
assertThat(resourceGroups).hasSize(1);

assertThat(resourceGroups.get(0).getResourceGroupId()).isEqualTo(0L);
assertThat(resourceGroups.get(0).getResourceGroupId()).isEqualTo(1L);
assertThat(resourceGroups.get(0).getName()).isEqualTo("admin");
assertThat(resourceGroups.get(0).getHardConcurrencyLimit()).isEqualTo(20);
assertThat(resourceGroups.get(0).getMaxQueued()).isEqualTo(200);
Expand All @@ -83,7 +83,7 @@ public void testReadResourceGroup()
public void testUpdateResourceGroup()
{
ResourceGroupsDetail resourceGroup = new ResourceGroupsDetail();
resourceGroup.setResourceGroupId(0L);
resourceGroup.setResourceGroupId(1L);
resourceGroup.setName("admin");
resourceGroup.setHardConcurrencyLimit(50);
resourceGroup.setMaxQueued(50);
Expand All @@ -96,7 +96,7 @@ public void testUpdateResourceGroup()

/* Update resourceGroups that do not exist yet.
* In this case, new resourceGroups should be created. */
resourceGroup.setResourceGroupId(1L);
resourceGroup.setResourceGroupId(2L);
resourceGroup.setName("localization-eng");
resourceGroup.setHardConcurrencyLimit(50);
resourceGroup.setMaxQueued(70);
Expand All @@ -118,14 +118,14 @@ public void testUpdateResourceGroup()

assertThat(resourceGroups).hasSize(3); // updated 2 non-existing groups, so count should be 3

assertThat(resourceGroups.get(0).getResourceGroupId()).isEqualTo(0L);
assertThat(resourceGroups.get(0).getResourceGroupId()).isEqualTo(1L);
assertThat(resourceGroups.get(0).getName()).isEqualTo("admin");
assertThat(resourceGroups.get(0).getHardConcurrencyLimit()).isEqualTo(50);
assertThat(resourceGroups.get(0).getMaxQueued()).isEqualTo(50);
assertThat(resourceGroups.get(0).getJmxExport()).isEqualTo(Boolean.FALSE);
assertThat(resourceGroups.get(0).getSoftMemoryLimit()).isEqualTo("20%");

assertThat(resourceGroups.get(1).getResourceGroupId()).isEqualTo(1L);
assertThat(resourceGroups.get(1).getResourceGroupId()).isEqualTo(2L);
assertThat(resourceGroups.get(1).getName()).isEqualTo("localization-eng");
assertThat(resourceGroups.get(1).getHardConcurrencyLimit()).isEqualTo(50);
assertThat(resourceGroups.get(1).getMaxQueued()).isEqualTo(70);
Expand All @@ -141,15 +141,15 @@ public void testDeleteResourceGroup()
List<ResourceGroupsDetail> resourceGroups = resourceGroupManager.readAllResourceGroups(null);
assertThat(resourceGroups).hasSize(3);

assertThat(resourceGroups.get(0).getResourceGroupId()).isEqualTo(0L);
assertThat(resourceGroups.get(1).getResourceGroupId()).isEqualTo(1L);
assertThat(resourceGroups.get(0).getResourceGroupId()).isEqualTo(1L);
assertThat(resourceGroups.get(1).getResourceGroupId()).isEqualTo(2L);
assertThat(resourceGroups.get(2).getResourceGroupId()).isEqualTo(3L);

resourceGroupManager.deleteResourceGroup(resourceGroups.get(1).getResourceGroupId(), null);
resourceGroups = resourceGroupManager.readAllResourceGroups(null);

assertThat(resourceGroups).hasSize(2);
assertThat(resourceGroups.get(0).getResourceGroupId()).isEqualTo(0L);
assertThat(resourceGroups.get(0).getResourceGroupId()).isEqualTo(1L);
assertThat(resourceGroups.get(1).getResourceGroupId()).isEqualTo(3L);
}

Expand All @@ -158,7 +158,7 @@ public void testDeleteResourceGroup()
public void testCreateSelector()
{
SelectorsDetail selector = new SelectorsDetail();
selector.setResourceGroupId(0L);
selector.setResourceGroupId(1L);
selector.setPriority(0L);
selector.setUserRegex("data-platform-admin");
selector.setSourceRegex("admin");
Expand All @@ -178,7 +178,7 @@ public void testReadSelector()
List<SelectorsDetail> selectors = resourceGroupManager.readAllSelectors(null);

assertThat(selectors).hasSize(1);
assertThat(selectors.get(0).getResourceGroupId()).isEqualTo(0L);
assertThat(selectors.get(0).getResourceGroupId()).isEqualTo(1L);
assertThat(selectors.get(0).getPriority()).isEqualTo(0L);
assertThat(selectors.get(0).getUserRegex()).isEqualTo("data-platform-admin");
assertThat(selectors.get(0).getSourceRegex()).isEqualTo("admin");
Expand All @@ -193,7 +193,7 @@ public void testUpdateSelector()
{
SelectorsDetail selector = new SelectorsDetail();

selector.setResourceGroupId(0L);
selector.setResourceGroupId(1L);
selector.setPriority(0L);
selector.setUserRegex("data-platform-admin_updated");
selector.setSourceRegex("admin_updated");
Expand Down Expand Up @@ -246,7 +246,7 @@ public void testDeleteSelector()
{
List<SelectorsDetail> selectors = resourceGroupManager.readAllSelectors(null);
assertThat(selectors).hasSize(3);
assertThat(selectors.get(0).getResourceGroupId()).isEqualTo(0L);
assertThat(selectors.get(0).getResourceGroupId()).isEqualTo(1L);
resourceGroupManager.deleteSelector(selectors.get(0), null);
selectors = resourceGroupManager.readAllSelectors(null);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ private void createResourceGroup()
{
ResourceGroupsDetail resourceGroup = new ResourceGroupsDetail();

resourceGroup.setResourceGroupId(1L);
resourceGroup.setName("admin2");
resourceGroup.setHardConcurrencyLimit(20);
resourceGroup.setMaxQueued(200);
Expand Down
23 changes: 23 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,29 @@
<air.java.version>17</air.java.version>
<air.check.skip-spotbugs>true</air.check.skip-spotbugs>
<air.check.skip-pmd>true</air.check.skip-pmd>

<!-- dependency versions -->
<dep.activejdbc.version>2.3</dep.activejdbc.version>
<dep.apache.commons.version>3.13.0</dep.apache.commons.version>
<dep.apache.httpcomponents>4.5.13</dep.apache.httpcomponents>
<dep.dropwizard.version>4.0.2</dep.dropwizard.version>
<dep.ehcache.version>3.8.1</dep.ehcache.version>
<dep.h2.version>1.4.192</dep.h2.version>
<dep.jakarta.annotations.version>2.1.1</dep.jakarta.annotations.version>
<dep.jakarta.mail.version>2.0.0</dep.jakarta.mail.version>
<dep.jeasy.version>4.1.0</dep.jeasy.version>
<dep.jetty.version>11.0.15</dep.jetty.version>
<dep.mockito.version>5.8.0</dep.mockito.version>
<dep.mysqlconnector.version>8.0.17</dep.mysqlconnector.version>
<dep.okhttp.version>3.9.0</dep.okhttp.version>
<dep.oracle.version>21.9.0.0</dep.oracle.version>
<dep.plugin.maven.shade>2.3</dep.plugin.maven.shade>
<dep.plugin.maven.source>3.0.0</dep.plugin.maven.source>
<dep.postgresql.version>42.6.0</dep.postgresql.version>
<dep.reflections.version>0.9.10</dep.reflections.version>
<dep.trino.version>433</dep.trino.version>
<dep.wiremock.version>3.0.1</dep.wiremock.version>

</properties>

<dependencyManagement>
Expand Down

0 comments on commit 1b600dd

Please sign in to comment.