15 changed files with 76 additions and 362 deletions
@ -1,117 +0,0 @@ |
|||||
/** |
|
||||
* Copyright © 2016-2024 The Thingsboard Authors |
|
||||
* |
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||
* you may not use this file except in compliance with the License. |
|
||||
* You may obtain a copy of the License at |
|
||||
* |
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||
* |
|
||||
* Unless required by applicable law or agreed to in writing, software |
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||
* See the License for the specific language governing permissions and |
|
||||
* limitations under the License. |
|
||||
*/ |
|
||||
package org.thingsboard.server.service.install; |
|
||||
|
|
||||
import lombok.extern.slf4j.Slf4j; |
|
||||
import org.springframework.beans.factory.annotation.Autowired; |
|
||||
import org.springframework.beans.factory.annotation.Value; |
|
||||
|
|
||||
import java.nio.charset.StandardCharsets; |
|
||||
import java.nio.file.Files; |
|
||||
import java.nio.file.Path; |
|
||||
import java.sql.Connection; |
|
||||
import java.sql.ResultSet; |
|
||||
import java.sql.SQLException; |
|
||||
import java.sql.SQLWarning; |
|
||||
import java.sql.Statement; |
|
||||
|
|
||||
@Slf4j |
|
||||
public abstract class AbstractSqlTsDatabaseUpgradeService { |
|
||||
|
|
||||
protected static final String CALL_REGEX = "call "; |
|
||||
protected static final String DROP_TABLE = "DROP TABLE "; |
|
||||
protected static final String DROP_PROCEDURE_IF_EXISTS = "DROP PROCEDURE IF EXISTS "; |
|
||||
protected static final String TS_KV_SQL = "ts_kv.sql"; |
|
||||
protected static final String PATH_TO_USERS_PUBLIC_FOLDER = "C:\\Users\\Public"; |
|
||||
protected static final String THINGSBOARD_WINDOWS_UPGRADE_DIR = "THINGSBOARD_WINDOWS_UPGRADE_DIR"; |
|
||||
|
|
||||
@Value("${spring.datasource.url}") |
|
||||
protected String dbUrl; |
|
||||
|
|
||||
@Value("${spring.datasource.username}") |
|
||||
protected String dbUserName; |
|
||||
|
|
||||
@Value("${spring.datasource.password}") |
|
||||
protected String dbPassword; |
|
||||
|
|
||||
@Autowired |
|
||||
protected InstallScripts installScripts; |
|
||||
|
|
||||
protected abstract void loadSql(Connection conn, String fileName, String version); |
|
||||
|
|
||||
protected void loadFunctions(Path sqlFile, Connection conn) throws Exception { |
|
||||
String sql = new String(Files.readAllBytes(sqlFile), StandardCharsets.UTF_8); |
|
||||
conn.createStatement().execute(sql); //NOSONAR, ignoring because method used to execute thingsboard database upgrade script
|
|
||||
} |
|
||||
|
|
||||
protected boolean checkVersion(Connection conn) { |
|
||||
boolean versionValid = false; |
|
||||
try { |
|
||||
Statement statement = conn.createStatement(); |
|
||||
ResultSet resultSet = statement.executeQuery("SELECT current_setting('server_version_num')"); |
|
||||
resultSet.next(); |
|
||||
if(resultSet.getLong(1) > 110000) { |
|
||||
versionValid = true; |
|
||||
} |
|
||||
statement.close(); |
|
||||
} catch (Exception e) { |
|
||||
log.info("Failed to check current PostgreSQL version due to: {}", e.getMessage()); |
|
||||
} |
|
||||
return versionValid; |
|
||||
} |
|
||||
|
|
||||
protected boolean isOldSchema(Connection conn, long fromVersion) { |
|
||||
boolean isOldSchema = true; |
|
||||
try { |
|
||||
Statement statement = conn.createStatement(); |
|
||||
statement.execute("CREATE TABLE IF NOT EXISTS tb_schema_settings ( schema_version bigint NOT NULL, CONSTRAINT tb_schema_settings_pkey PRIMARY KEY (schema_version));"); |
|
||||
Thread.sleep(1000); |
|
||||
ResultSet resultSet = statement.executeQuery("SELECT schema_version FROM tb_schema_settings;"); |
|
||||
if (resultSet.next()) { |
|
||||
isOldSchema = resultSet.getLong(1) <= fromVersion; |
|
||||
} else { |
|
||||
resultSet.close(); |
|
||||
statement.execute("INSERT INTO tb_schema_settings (schema_version) VALUES (" + fromVersion + ")"); |
|
||||
} |
|
||||
statement.close(); |
|
||||
} catch (InterruptedException | SQLException e) { |
|
||||
log.info("Failed to check current PostgreSQL schema due to: {}", e.getMessage()); |
|
||||
} |
|
||||
return isOldSchema; |
|
||||
} |
|
||||
|
|
||||
protected void executeQuery(Connection conn, String query) { |
|
||||
try { |
|
||||
Statement statement = conn.createStatement(); |
|
||||
statement.execute(query); //NOSONAR, ignoring because method used to execute thingsboard database upgrade script
|
|
||||
SQLWarning warnings = statement.getWarnings(); |
|
||||
if (warnings != null) { |
|
||||
log.info("{}", warnings.getMessage()); |
|
||||
SQLWarning nextWarning = warnings.getNextWarning(); |
|
||||
while (nextWarning != null) { |
|
||||
log.info("{}", nextWarning.getMessage()); |
|
||||
nextWarning = nextWarning.getNextWarning(); |
|
||||
} |
|
||||
} |
|
||||
Thread.sleep(2000); |
|
||||
log.info("Successfully executed query: {}", query); |
|
||||
} catch (InterruptedException | SQLException e) { |
|
||||
log.error("Failed to execute query: {} due to: {}", query, e.getMessage()); |
|
||||
throw new RuntimeException("Failed to execute query:" + query + " due to: ", e); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
@ -1,37 +0,0 @@ |
|||||
/** |
|
||||
* Copyright © 2016-2024 The Thingsboard Authors |
|
||||
* |
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||
* you may not use this file except in compliance with the License. |
|
||||
* You may obtain a copy of the License at |
|
||||
* |
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||
* |
|
||||
* Unless required by applicable law or agreed to in writing, software |
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||
* See the License for the specific language governing permissions and |
|
||||
* limitations under the License. |
|
||||
*/ |
|
||||
package org.thingsboard.server.service.install; |
|
||||
|
|
||||
import lombok.extern.slf4j.Slf4j; |
|
||||
import org.springframework.context.annotation.Profile; |
|
||||
import org.springframework.stereotype.Service; |
|
||||
import org.thingsboard.server.dao.util.NoSqlTsDao; |
|
||||
|
|
||||
@Service |
|
||||
@NoSqlTsDao |
|
||||
@Profile("install") |
|
||||
@Slf4j |
|
||||
public class CassandraTsDatabaseUpgradeService extends AbstractCassandraDatabaseUpgradeService implements DatabaseTsUpgradeService { |
|
||||
|
|
||||
@Override |
|
||||
public void upgradeDatabase(String fromVersion) throws Exception { |
|
||||
switch (fromVersion) { |
|
||||
default: |
|
||||
throw new RuntimeException("Unable to upgrade Cassandra database, unsupported fromVersion: " + fromVersion); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
@ -1,22 +0,0 @@ |
|||||
/** |
|
||||
* Copyright © 2016-2024 The Thingsboard Authors |
|
||||
* |
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||
* you may not use this file except in compliance with the License. |
|
||||
* You may obtain a copy of the License at |
|
||||
* |
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||
* |
|
||||
* Unless required by applicable law or agreed to in writing, software |
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||
* See the License for the specific language governing permissions and |
|
||||
* limitations under the License. |
|
||||
*/ |
|
||||
package org.thingsboard.server.service.install; |
|
||||
|
|
||||
public interface DatabaseTsUpgradeService { |
|
||||
|
|
||||
void upgradeDatabase(String fromVersion) throws Exception; |
|
||||
|
|
||||
} |
|
||||
@ -1,51 +0,0 @@ |
|||||
/** |
|
||||
* Copyright © 2016-2024 The Thingsboard Authors |
|
||||
* |
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||
* you may not use this file except in compliance with the License. |
|
||||
* You may obtain a copy of the License at |
|
||||
* |
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||
* |
|
||||
* Unless required by applicable law or agreed to in writing, software |
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||
* See the License for the specific language governing permissions and |
|
||||
* limitations under the License. |
|
||||
*/ |
|
||||
package org.thingsboard.server.service.install; |
|
||||
|
|
||||
import lombok.extern.slf4j.Slf4j; |
|
||||
import org.springframework.context.annotation.Profile; |
|
||||
import org.springframework.stereotype.Service; |
|
||||
import org.thingsboard.server.dao.util.SqlTsDao; |
|
||||
|
|
||||
import java.nio.file.Path; |
|
||||
import java.nio.file.Paths; |
|
||||
import java.sql.Connection; |
|
||||
|
|
||||
@Service |
|
||||
@Profile("install") |
|
||||
@Slf4j |
|
||||
@SqlTsDao |
|
||||
public class SqlTsDatabaseUpgradeService extends AbstractSqlTsDatabaseUpgradeService implements DatabaseTsUpgradeService { |
|
||||
|
|
||||
@Override |
|
||||
public void upgradeDatabase(String fromVersion) throws Exception { |
|
||||
switch (fromVersion) { |
|
||||
default: |
|
||||
throw new RuntimeException("Unable to upgrade SQL database, unsupported fromVersion: " + fromVersion); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
protected void loadSql(Connection conn, String fileName, String version) { |
|
||||
Path schemaUpdateFile = Paths.get(installScripts.getDataDir(), "upgrade", version, fileName); |
|
||||
try { |
|
||||
loadFunctions(schemaUpdateFile, conn); |
|
||||
log.info("Functions successfully loaded!"); |
|
||||
} catch (Exception e) { |
|
||||
log.info("Failed to load PostgreSQL upgrade functions due to: {}", e.getMessage()); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,55 +0,0 @@ |
|||||
/** |
|
||||
* Copyright © 2016-2024 The Thingsboard Authors |
|
||||
* |
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||
* you may not use this file except in compliance with the License. |
|
||||
* You may obtain a copy of the License at |
|
||||
* |
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||
* |
|
||||
* Unless required by applicable law or agreed to in writing, software |
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||
* See the License for the specific language governing permissions and |
|
||||
* limitations under the License. |
|
||||
*/ |
|
||||
package org.thingsboard.server.service.install; |
|
||||
|
|
||||
import lombok.extern.slf4j.Slf4j; |
|
||||
import org.springframework.beans.factory.annotation.Autowired; |
|
||||
import org.springframework.context.annotation.Profile; |
|
||||
import org.springframework.stereotype.Service; |
|
||||
import org.thingsboard.server.dao.util.TimescaleDBTsDao; |
|
||||
|
|
||||
import java.nio.file.Path; |
|
||||
import java.nio.file.Paths; |
|
||||
import java.sql.Connection; |
|
||||
|
|
||||
@Service |
|
||||
@Profile("install") |
|
||||
@Slf4j |
|
||||
@TimescaleDBTsDao |
|
||||
public class TimescaleTsDatabaseUpgradeService extends AbstractSqlTsDatabaseUpgradeService implements DatabaseTsUpgradeService { |
|
||||
|
|
||||
@Autowired |
|
||||
private InstallScripts installScripts; |
|
||||
|
|
||||
@Override |
|
||||
public void upgradeDatabase(String fromVersion) throws Exception { |
|
||||
switch (fromVersion) { |
|
||||
default: |
|
||||
throw new RuntimeException("Unable to upgrade SQL database, unsupported fromVersion: " + fromVersion); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
protected void loadSql(Connection conn, String fileName, String version) { |
|
||||
Path schemaUpdateFile = Paths.get(installScripts.getDataDir(), "upgrade", version, fileName); |
|
||||
try { |
|
||||
loadFunctions(schemaUpdateFile, conn); |
|
||||
log.info("Functions successfully loaded!"); |
|
||||
} catch (Exception e) { |
|
||||
log.info("Failed to load PostgreSQL upgrade functions due to: {}", e.getMessage()); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
Loading…
Reference in new issue