Skip to content

Commit 873487c

Browse files
authored
Fixed LOB column issue for H2 and Postgres (#1341)
fixed LOB for H2 and Postgres
1 parent 1bec6bf commit 873487c

12 files changed

Lines changed: 55 additions & 53 deletions

File tree

backend/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ dependencies {
191191
implementation("org.springframework.security:spring-security-data")
192192
implementation("org.springframework.security:spring-security-messaging")
193193
implementation("org.springframework.security:spring-security-web")
194-
implementation("org.testcontainers:postgresql:1.18.3")
194+
implementation("org.testcontainers:postgresql")
195195
implementation(files("$projectDir/src/main/resources/third-party/j2ts-api.jar"))
196196
implementation(group = "com.fasterxml.jackson.dataformat", name = "jackson-dataformat-yaml", version = "2.13.1")
197197
implementation(group = "com.github.luben", name = "zstd-jni", version = "1.5.2-3")

backend/src/main/java/ai/giskard/GiskardApp.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import ai.giskard.config.ApplicationProperties;
44
import ai.giskard.config.GiskardConstants;
5+
import jakarta.annotation.PostConstruct;
6+
import lombok.RequiredArgsConstructor;
57
import org.apache.commons.lang3.StringUtils;
68
import org.slf4j.Logger;
79
import org.slf4j.LoggerFactory;
@@ -13,7 +15,6 @@
1315
import org.springframework.core.env.Environment;
1416
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
1517

16-
import jakarta.annotation.PostConstruct;
1718
import java.net.InetAddress;
1819
import java.net.UnknownHostException;
1920
import java.util.Arrays;
@@ -24,16 +25,13 @@
2425
@SpringBootApplication
2526
@EnableConfigurationProperties({LiquibaseProperties.class, ApplicationProperties.class})
2627
@EnableJpaAuditing
28+
@RequiredArgsConstructor
2729
public class GiskardApp {
2830

2931
private static final Logger log = LoggerFactory.getLogger(GiskardApp.class);
3032

3133
private final Environment env;
3234

33-
public GiskardApp(Environment env) {
34-
this.env = env;
35-
}
36-
3735
/**
3836
* Initializes giskard.
3937
* <p>
@@ -99,13 +97,15 @@ private static void logApplicationStartup(Environment env) {
9997
\tMax: %s MB
10098
\tFree: %s MB""", totalMemory, maxMemory, freeMemory);
10199
String swaggerURL = hasApiDocsProfile ? String.format("Swagger UI: %s://localhost:%s%sswagger-ui/index.html\t%n\t", protocol, serverPort, contextPath) : "";
100+
102101
log.info(
103102
"\n----------------------------------------------------------\n\t" +
104103
memoryStatusLine +
105104
"\n----------------------------------------------------------\n\t" +
106-
"Application '{}' is running! Access URLs:\n\t" +
105+
"Application '{}' is running!\n\t" +
107106
"Local: \t\t{}://localhost:{}{}\n\t" +
108107
"External: \t{}://{}:{}{}\n\t" +
108+
"DB URL: \t"+env.getProperty("spring.datasource.url")+"\n\t" +
109109
swaggerURL +
110110
"Giskard Home: " + giskardHome + "\n\t" +
111111
"Profile(s): \t{}\n----------------------------------------------------------",

backend/src/main/java/ai/giskard/config/LiquibaseConfiguration.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package ai.giskard.config;
22

3+
import ai.giskard.service.GiskardRuntimeException;
34
import liquibase.integration.spring.SpringLiquibase;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
47
import org.springframework.beans.factory.ObjectProvider;
58
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
69
import org.springframework.boot.autoconfigure.liquibase.DataSourceClosingSpringLiquibase;
@@ -12,11 +15,13 @@
1215
import org.springframework.core.env.Environment;
1316

1417
import javax.sql.DataSource;
18+
import java.sql.SQLException;
1519
import java.util.Optional;
1620
import java.util.function.Supplier;
1721

1822
@Configuration
1923
public class LiquibaseConfiguration {
24+
private static final Logger log = LoggerFactory.getLogger(LiquibaseConfiguration.class);
2025

2126
private final Environment env;
2227

@@ -59,6 +64,11 @@ public SpringLiquibase liquibase(
5964
if (ds != null) {
6065
liquibase = new SpringLiquibase();
6166
liquibase.setDataSource(ds);
67+
try (var conn = ds.getConnection()) {
68+
log.info("Liquibase connection: {}", conn.getMetaData().getURL());
69+
} catch (SQLException e) {
70+
throw new GiskardRuntimeException("Failed to get connection from liquibase datasource");
71+
}
6272
} else {
6373
liquibase = new DataSourceClosingSpringLiquibase();
6474
liquibase.setDataSource(createNewDataSource(liquibaseProperties, dataSourceProperties));
@@ -72,7 +82,7 @@ public SpringLiquibase liquibase(
7282
liquibase.setDatabaseChangeLogLockTable(liquibaseProperties.getDatabaseChangeLogLockTable());
7383
liquibase.setDatabaseChangeLogTable(liquibaseProperties.getDatabaseChangeLogTable());
7484
liquibase.setDropFirst(liquibaseProperties.isDropFirst());
75-
liquibase.setLabels(liquibaseProperties.getLabels());
85+
liquibase.setLabelFilter(liquibaseProperties.getLabelFilter());
7686
liquibase.setChangeLogParameters(liquibaseProperties.getParameters());
7787
liquibase.setRollbackFile(liquibaseProperties.getRollbackFile());
7888
liquibase.setTestRollbackOnUpdate(liquibaseProperties.isTestRollbackOnUpdate());

backend/src/main/java/ai/giskard/config/SecurityConfiguration.java

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
1313
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
1414
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
15-
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
1615
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
1716
import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer;
1817
import org.springframework.security.config.http.SessionCreationPolicy;
@@ -47,41 +46,41 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
4746
.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin)
4847
).sessionManagement(conf -> conf.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
4948
.authorizeHttpRequests(authorize -> authorize
50-
.requestMatchers(antMatcher("/api/v2/dev/**")).permitAll()
51-
.requestMatchers(antMatcher("/api/v2/settings/license")).permitAll()
49+
.requestMatchers(
50+
antMatcher(WEBSOCKET_ENDPOINT),
51+
antMatcher(MLWORKER_WEBSOCKET_ENDPOINT),
52+
antMatcher(HttpMethod.OPTIONS, "/**"),
53+
antMatcher("/swagger-ui/**"),
54+
antMatcher("/v3/api-docs/**"),
55+
antMatcher("/test/**"),
56+
antMatcher("/api/v2/dev/**"),
57+
antMatcher("/api/v2/settings/license"),
58+
antMatcher("/api/v2/settings"),
59+
antMatcher("/api/v2/setup"),
60+
antMatcher("/api/v2/ee/license"),
61+
antMatcher("/api/v2/authenticate"),
62+
antMatcher("/api/v2/register"),
63+
antMatcher("/api/v2/register"),
64+
antMatcher("/api/v2/activate"),
65+
antMatcher("/api/v2/account/password-recovery"),
66+
antMatcher("/api/v2/account/reset-password"),
67+
antMatcher("/management/health"),
68+
antMatcher("/management/health/**"),
69+
antMatcher("/management/info"),
70+
antMatcher("/management/prometheus")
71+
).permitAll()
72+
.requestMatchers(
73+
antMatcher("/api/admin/**"),
74+
antMatcher("/management/**")
75+
).hasAuthority(AuthoritiesConstants.ADMIN)
5276
.requestMatchers(antMatcher("/api/v2/settings/ml-worker-connect")).hasAuthority(AuthoritiesConstants.API)
53-
.requestMatchers(antMatcher("/api/v2/settings")).permitAll()
54-
.requestMatchers(antMatcher("/api/v2/setup")).permitAll()
55-
.requestMatchers(antMatcher("/api/v2/ee/license")).permitAll()
56-
.requestMatchers(antMatcher("/api/v2/authenticate")).permitAll()
57-
.requestMatchers(antMatcher("/api/v2/register")).permitAll()
58-
.requestMatchers(antMatcher("/api/v2/register")).permitAll()
59-
.requestMatchers(antMatcher("/api/v2/activate")).permitAll()
60-
.requestMatchers(antMatcher("/api/v2/account/password-recovery")).permitAll()
61-
.requestMatchers(antMatcher("/api/v2/account/reset-password")).permitAll()
62-
.requestMatchers(antMatcher("/api/admin/**")).hasAuthority(AuthoritiesConstants.ADMIN)
6377
.requestMatchers(antMatcher("/api/**")).authenticated()
64-
.requestMatchers(antMatcher("/management/health")).permitAll()
65-
.requestMatchers(antMatcher("/management/health/**")).permitAll()
66-
.requestMatchers(antMatcher("/management/info")).permitAll()
67-
.requestMatchers(antMatcher("/management/prometheus")).permitAll()
68-
.requestMatchers(antMatcher("/management/**")).hasAuthority(AuthoritiesConstants.ADMIN)
6978
)
7079
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
7180
.apply(securityConfigurerAdapter());
7281
return http.build();
7382
}
7483

75-
@Bean
76-
public WebSecurityCustomizer webSecurityCustomizer() {
77-
return web -> web.ignoring()
78-
.requestMatchers(antMatcher(WEBSOCKET_ENDPOINT))
79-
.requestMatchers(antMatcher(MLWORKER_WEBSOCKET_ENDPOINT))
80-
.requestMatchers(antMatcher(HttpMethod.OPTIONS, "/**"))
81-
.requestMatchers(antMatcher("/swagger-ui/**"))
82-
.requestMatchers(antMatcher("/v3/api-docs/**"))
83-
.requestMatchers(antMatcher("/test/**"));
84-
}
8584

8685
@Bean
8786
public PasswordEncoder passwordEncoder() {

backend/src/main/java/ai/giskard/domain/BaseEntity.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package ai.giskard.domain;
22

33
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
import jakarta.persistence.GeneratedValue;
5+
import jakarta.persistence.Id;
6+
import jakarta.persistence.MappedSuperclass;
47
import lombok.Getter;
58

6-
import jakarta.persistence.*;
79
import java.io.Serializable;
810

911
@Getter
1012
@MappedSuperclass
11-
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
1213
public abstract class BaseEntity implements Serializable {
1314
@Id
1415
@JsonIgnore

backend/src/main/java/ai/giskard/domain/ml/FunctionInput.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package ai.giskard.domain.ml;
22

33
import ai.giskard.ml.dto.MLWorkerWSGeneratedTestInputDTO;
4+
import jakarta.persistence.*;
5+
import jakarta.validation.constraints.NotNull;
46
import lombok.Getter;
57
import lombok.NoArgsConstructor;
68
import lombok.Setter;
79

8-
import jakarta.persistence.*;
9-
import jakarta.validation.constraints.NotNull;
1010
import java.io.Serializable;
1111
import java.util.ArrayList;
1212
import java.util.List;
@@ -27,7 +27,7 @@ public class FunctionInput implements Serializable {
2727

2828
private String type;
2929

30-
@Column(columnDefinition = "CLOB", name = "input_value")
30+
@Column(columnDefinition = "text", name = "input_value")
3131
@Lob
3232
private String value;
3333

backend/src/main/java/ai/giskard/web/rest/errors/GlobalExceptionHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ private static HttpStatus getHttpStatus(Throwable ex) {
3434
if (ex instanceof ConcurrencyFailureException) return HttpStatus.CONFLICT;
3535
if (ex instanceof BadCredentialsException) return HttpStatus.UNAUTHORIZED;
3636
if (ex instanceof AccessDeniedException) return HttpStatus.FORBIDDEN;
37+
if (ex instanceof IllegalArgumentException) return HttpStatus.BAD_REQUEST;
3738
return HttpStatus.INTERNAL_SERVER_ERROR;
3839
}
3940
}

backend/src/main/resources/config/application-dev.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ logging:
1616
ROOT: INFO
1717
org.hibernate.SQL: INFO
1818
ai.giskard: INFO
19-
com.zaxxer.hikari.HikariConfig: DEBUG
19+
com.zaxxer.hikari.HikariConfig: INFO
2020
com.zaxxer.hikari: INFO
2121

2222
spring:

backend/src/main/resources/config/application-prod.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ logging:
1515
level:
1616
ROOT: INFO
1717
ai.giskard: INFO
18-
com.zaxxer.hikari.HikariConfig: DEBUG
18+
com.zaxxer.hikari.HikariConfig: INFO
1919

2020
management:
2121
metrics:

backend/src/main/resources/logback-spring.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
<logger name="com.ryantenney" level="WARN"/>
1313
<logger name="com.sun" level="WARN"/>
1414
<logger name="com.zaxxer" level="WARN"/>
15-
<logger name="io.undertow" level="WARN"/>
16-
<logger name="io.undertow.websockets.jsr" level="ERROR"/>
1715
<logger name="org.apache" level="WARN"/>
1816
<logger name="org.apache.catalina.startup.DigesterFactory" level="OFF"/>
1917
<logger name="org.bson" level="WARN"/>

0 commit comments

Comments
 (0)