Browse Source

refactored upgrade to be executed with PostgreSQL

pull/8110/head
dashevchenko 4 years ago
parent
commit
76f74766fd
  1. 8
      application/src/main/data/upgrade/3.4.4/schema_update.sql
  2. 31
      application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java
  3. 2
      common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java
  4. 7
      dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java
  5. 8
      dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java
  6. 7
      dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java
  7. 2
      dao/src/main/resources/sql/schema-entities.sql

8
application/src/main/data/upgrade/3.4.4/schema_update.sql

@ -32,4 +32,10 @@ CREATE TABLE IF NOT EXISTS user_settings (
);
ALTER TABLE user_credentials
ADD COLUMN IF NOT EXISTS additional_info varchar DEFAULT '{}';
ADD COLUMN IF NOT EXISTS additional_info varchar DEFAULT '{}';
UPDATE user_credentials
SET additional_info = json_build_object('userPasswordHistory', (u.additional_info::json -> 'userPasswordHistory'))
FROM tb_user u WHERE user_credentials.user_id = u.id AND u.additional_info::jsonb ? 'userPasswordHistory';
UPDATE tb_user SET additional_info = tb_user.additional_info::jsonb - 'userPasswordHistory';

31
application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java

@ -116,9 +116,6 @@ public class SqlDatabaseUpgradeService implements DatabaseEntitiesUpgradeService
@Autowired
private TenantService tenantService;
@Autowired
private UserService userService;
@Autowired
private TenantRepository tenantRepository;
@ -710,34 +707,6 @@ public class SqlDatabaseUpgradeService implements DatabaseEntitiesUpgradeService
} catch (Exception e) {
}
PageLink pageLink = new PageLink(1000);
PageData<User> users;
do {
List<ListenableFuture<?>> futures = new ArrayList<>();
users = userService.findAllUsers(pageLink);
for (User user : users.getData()) {
futures.add(dbUpgradeExecutor.submit(() -> {
try {
log.info("Migrating password history for user: " + user.getId());
JsonNode additionalInfo = user.getAdditionalInfo();
if (additionalInfo != null && additionalInfo.has("userPasswordHistory")){
UserCredentials creds = userService.findUserCredentialsByUserId(user.getTenantId(), user.getId());
if (creds != null) {
creds.setAdditionalInfo(JacksonUtil.newObjectNode().set("userPasswordHistory", additionalInfo.get("userPasswordHistory")));
userService.saveUserCredentials(user.getTenantId(), creds);
}
((ObjectNode) additionalInfo).remove("userPasswordHistory");
userService.saveUser(user);
}
} catch (Exception e){
log.error("Failed to migrate password history for user: " + user.getId(), e);
}
}));
}
Futures.allAsList(futures).get();
pageLink = pageLink.nextPageLink();
} while (users.hasNext());
conn.createStatement().execute("UPDATE tb_schema_settings SET schema_version = 3005000;");
}
log.info("Schema updated.");

2
common/dao-api/src/main/java/org/thingsboard/server/dao/user/UserService.java

@ -58,8 +58,6 @@ public interface UserService extends EntityDaoService {
PageData<User> findUsersByTenantId(TenantId tenantId, PageLink pageLink);
PageData<User> findAllUsers(PageLink pageLink);
PageData<User> findTenantAdmins(TenantId tenantId, PageLink pageLink);
void deleteTenantAdmins(TenantId tenantId);

7
dao/src/main/java/org/thingsboard/server/dao/sql/user/JpaUserDao.java

@ -75,13 +75,6 @@ public class JpaUserDao extends JpaAbstractSearchTextDao<UserEntity, User> imple
DaoUtil.toPageable(pageLink)));
}
@Override
public PageData<User> findAll(PageLink pageLink) {
return DaoUtil.toPageData(
userRepository
.findAll(DaoUtil.toPageable(pageLink)));
}
@Override
public PageData<User> findTenantAdmins(UUID tenantId, PageLink pageLink) {
return DaoUtil.toPageData(

8
dao/src/main/java/org/thingsboard/server/dao/user/UserDao.java

@ -60,14 +60,6 @@ public interface UserDao extends Dao<User>, TenantEntityDao {
*/
PageData<User> findByTenantId(UUID tenantId, PageLink pageLink);
/**
* Find users by page link.
*
* @param pageLink the page link
* @return the list of user entities
*/
PageData<User> findAll(PageLink pageLink);
/**
* Find tenant admin users by tenantId and page link.
*

7
dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java

@ -240,13 +240,6 @@ public class UserServiceImpl extends AbstractEntityService implements UserServic
return userDao.findByTenantId(tenantId.getId(), pageLink);
}
@Override
public PageData<User> findAllUsers(PageLink pageLink) {
log.trace("Executing findAllUsers, pageLink [{}]", pageLink);
validatePageLink(pageLink);
return userDao.findAll(pageLink);
}
@Override
public PageData<User> findTenantAdmins(TenantId tenantId, PageLink pageLink) {
log.trace("Executing findTenantAdmins, tenantId [{}], pageLink [{}]", tenantId, pageLink);

2
dao/src/main/resources/sql/schema-entities.sql

@ -488,7 +488,7 @@ CREATE TABLE IF NOT EXISTS user_credentials (
password varchar(255),
reset_token varchar(255) UNIQUE,
user_id uuid UNIQUE,
additional_info varchar
additional_info varchar DEFAULT '{}'
);
CREATE TABLE IF NOT EXISTS widget_type (

Loading…
Cancel
Save