Browse Source

Improve database migration - create indexes after inserts

pull/2706/head
Igor Kulikov 7 years ago
parent
commit
44d24327c8
  1. 8
      application/src/main/java/org/thingsboard/server/service/install/CassandraAbstractDatabaseSchemaService.java
  2. 4
      application/src/main/java/org/thingsboard/server/service/install/DatabaseSchemaService.java
  3. 13
      application/src/main/java/org/thingsboard/server/service/install/SqlAbstractDatabaseSchemaService.java
  4. 3
      application/src/main/java/org/thingsboard/server/service/install/migrate/CassandraEntitiesToSqlMigrateService.java

8
application/src/main/java/org/thingsboard/server/service/install/CassandraAbstractDatabaseSchemaService.java

@ -45,10 +45,18 @@ public abstract class CassandraAbstractDatabaseSchemaService implements Database
@Override @Override
public void createDatabaseSchema() throws Exception { public void createDatabaseSchema() throws Exception {
this.createDatabaseSchema(true);
}
@Override
public void createDatabaseSchema(boolean createIndexes) throws Exception {
log.info("Installing Cassandra DataBase schema part: " + schemaCql); log.info("Installing Cassandra DataBase schema part: " + schemaCql);
Path schemaFile = Paths.get(installScripts.getDataDir(), CASSANDRA_DIR, schemaCql); Path schemaFile = Paths.get(installScripts.getDataDir(), CASSANDRA_DIR, schemaCql);
loadCql(schemaFile); loadCql(schemaFile);
}
@Override
public void createDatabaseIndexes() throws Exception {
} }
private void loadCql(Path cql) throws Exception { private void loadCql(Path cql) throws Exception {

4
application/src/main/java/org/thingsboard/server/service/install/DatabaseSchemaService.java

@ -19,4 +19,8 @@ public interface DatabaseSchemaService {
void createDatabaseSchema() throws Exception; void createDatabaseSchema() throws Exception;
void createDatabaseSchema(boolean createIndexes) throws Exception;
void createDatabaseIndexes() throws Exception;
} }

13
application/src/main/java/org/thingsboard/server/service/install/SqlAbstractDatabaseSchemaService.java

@ -53,6 +53,11 @@ public abstract class SqlAbstractDatabaseSchemaService implements DatabaseSchema
@Override @Override
public void createDatabaseSchema() throws Exception { public void createDatabaseSchema() throws Exception {
this.createDatabaseSchema(true);
}
@Override
public void createDatabaseSchema(boolean createIndexes) throws Exception {
log.info("Installing SQL DataBase schema part: " + schemaSql); log.info("Installing SQL DataBase schema part: " + schemaSql);
@ -62,9 +67,15 @@ public abstract class SqlAbstractDatabaseSchemaService implements DatabaseSchema
conn.createStatement().execute(sql); //NOSONAR, ignoring because method used to load initial thingsboard database schema conn.createStatement().execute(sql); //NOSONAR, ignoring because method used to load initial thingsboard database schema
} }
if (createIndexes) {
this.createDatabaseIndexes();
}
}
@Override
public void createDatabaseIndexes() throws Exception {
if (schemaIdxSql != null) { if (schemaIdxSql != null) {
log.info("Installing SQL DataBase schema indexes part: " + schemaIdxSql); log.info("Installing SQL DataBase schema indexes part: " + schemaIdxSql);
Path schemaIdxFile = Paths.get(installScripts.getDataDir(), SQL_DIR, schemaIdxSql); Path schemaIdxFile = Paths.get(installScripts.getDataDir(), SQL_DIR, schemaIdxSql);
try (Connection conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword)) { try (Connection conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword)) {
String sql = new String(Files.readAllBytes(schemaIdxFile), Charset.forName("UTF-8")); String sql = new String(Files.readAllBytes(schemaIdxFile), Charset.forName("UTF-8"));

3
application/src/main/java/org/thingsboard/server/service/install/migrate/CassandraEntitiesToSqlMigrateService.java

@ -66,7 +66,7 @@ public class CassandraEntitiesToSqlMigrateService implements EntitiesMigrateServ
@Override @Override
public void migrate() throws Exception { public void migrate() throws Exception {
log.info("Performing migration of entities data from cassandra to SQL database ..."); log.info("Performing migration of entities data from cassandra to SQL database ...");
entityDatabaseSchemaService.createDatabaseSchema(); entityDatabaseSchemaService.createDatabaseSchema(false);
try (Connection conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword)) { try (Connection conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword)) {
conn.setAutoCommit(false); conn.setAutoCommit(false);
for (CassandraToSqlTable table: tables) { for (CassandraToSqlTable table: tables) {
@ -76,6 +76,7 @@ public class CassandraEntitiesToSqlMigrateService implements EntitiesMigrateServ
log.error("Unexpected error during ThingsBoard entities data migration!", e); log.error("Unexpected error during ThingsBoard entities data migration!", e);
throw e; throw e;
} }
entityDatabaseSchemaService.createDatabaseIndexes();
} }
private static List<CassandraToSqlTable> tables = Arrays.asList( private static List<CassandraToSqlTable> tables = Arrays.asList(

Loading…
Cancel
Save