schema: increase size of column 'value' at table 'account_details' (#6080)

This PR increases the column value at table account_details from 255 chars to 4096, matching with the value allowed in the API command for updating the configuration of accounts.

When the value length is bigger than 255, the following log is presented right after the updateConfiguration API call:

2022-03-09 17:50:24,627 ERROR [c.c.a.ApiServer] (qtp30578394-234766:ctx-cad18b45 ctx-32e954dd) (logid:0948e203) unhandled exception executing api command: [Ljava.lang.String;@117c6ba7
com.cloud.utils.exception.CloudRuntimeException: DB Exception on: com.mysql.cj.jdbc.ClientPreparedStatement: INSERT INTO account_details (account_details.account_id, account_details.name, account_details.value) VALUES (123, _binary'api.allowed.source.cidr.list', _binary'<huge binary>')
	at com.cloud.utils.db.GenericDaoBase.persist(GenericDaoBase.java:1450)
	at jdk.internal.reflect.GeneratedMethodAccessor168.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	....
	....
	....
Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'value' at row 1
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092)
	... 83 more


Co-authored-by: Bart Meyers <bart.meyers@cldin.eu>
This commit is contained in:
Gabriel Beims Bräscher 2022-08-12 15:12:50 -03:00 committed by GitHub
parent 696b93f421
commit 9410a70454
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 5 additions and 2 deletions

View File

@ -50,7 +50,7 @@ public class UpdateCfgCmd extends BaseCmd {
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "the name of the configuration")
private String cfgName;
@Parameter(name = ApiConstants.VALUE, type = CommandType.STRING, description = "the value of the configuration", length = 4095)
@Parameter(name = ApiConstants.VALUE, type = CommandType.STRING, description = "the value of the configuration", length = 4096)
private String value;
@Parameter(name = ApiConstants.ZONE_ID,

View File

@ -42,7 +42,7 @@ public class AccountDetailVO implements InternalIdentity {
private String name;
@Encrypt
@Column(name = "value")
@Column(name = "value", length=4096)
private String value;
protected AccountDetailVO() {

View File

@ -126,3 +126,6 @@ CREATE VIEW `cloud`.`domain_router_view` AS
`cloud`.`async_job` ON async_job.instance_id = vm_instance.id
and async_job.instance_type = 'DomainRouter'
and async_job.job_status = 0;
-- PR #6080 Change column `value` size from 255 to 4096 characters, matching the API "updateConfiguration" "value" size
ALTER TABLE `cloud`.`account_details` MODIFY `value` VARCHAR(4096) NOT NULL;