resource "aws_rds_cluster_parameter_group" "s3_aurora" {
  name        = "${local.name_prefix}-s3-aurora"
  family      = "aurora5.6"
  description = "RDS default cluster parameter group"

  parameter {
    name  = "aurora_select_into_s3_role"
    value = module.rds_s3_role.role.arn
  }
  parameter {
    name  = "aurora_load_from_s3_role"
    value = module.rds_s3_role.role.arn
  }
  parameter {
    name  = "innodb_flush_log_at_trx_commit"
    value = "0"
  }

  parameter {
    name         = "binlog_format"
    value        = "ROW"
    apply_method = "pending-reboot"
  }

  parameter {
    apply_method = "immediate"
    name         = "server_audit_logging"
    value        = "1"
  }

  parameter {
    apply_method = "immediate"
    name         = "server_audit_events"
    value        = "TABLE,QUERY_DML"
  }

  parameter {
    apply_method = "immediate"
    name         = "connect_timeout"
    value        = 60
  }

  parameter {
    apply_method = "immediate"
    name         = "net_read_timeout"
    value        = 60
  }
}

resource "aws_rds_cluster_parameter_group" "main" {
  name        = "${local.name_prefix}-main-5-7"
  family      = "aurora-mysql5.7"
  description = "RDS default cluster parameter group"

  parameter {
    apply_method = "pending-reboot"
    name         = "aurora_select_into_s3_role"
    value        = module.rds_s3_role.role.arn
  }
  parameter {
    apply_method = "pending-reboot"
    name         = "aurora_load_from_s3_role"
    value        = module.rds_s3_role.role.arn
  }
  parameter {
    apply_method = "pending-reboot"
    name         = "aws_default_s3_role"
    value        = module.rds_s3_role.role.arn
  }
  parameter {
    name  = "innodb_flush_log_at_trx_commit"
    value = "0"
  }
  parameter {
    name         = "binlog_format"
    value        = "ROW"
    apply_method = "pending-reboot"
  }
  parameter {
    apply_method = "immediate"
    name         = "server_audit_logging"
    value        = "1"
  }
  parameter {
    apply_method = "immediate"
    name         = "server_audit_events"
    value        = "TABLE,QUERY_DML"
  }
  parameter {
    apply_method = "immediate"
    name         = "connect_timeout"
    value        = 60
  }
  parameter {
    apply_method = "immediate"
    name         = "net_read_timeout"
    value        = 60
  }

  parameter {
    apply_method = "immediate"
    name         = "max_execution_time" //only applies to SELECT
    value        = 14400000             // 4 hours, the value is in milliseconds
  }

  parameter {
    apply_method = "pending-reboot"
    name         = "innodb_lock_wait_timeout"
    value        = 150 // the default value is 50, trying x3
  }

  parameter {
    apply_method = "pending-reboot"
    name         = "innodb_rollback_on_timeout"
    value        = 1 // the default value is 0
  }
}

resource "aws_rds_cluster_parameter_group" "s3_aurora_8" {
  name        = "${local.name_prefix}-s3-aurora-8"
  family      = "aurora-mysql8.0"
  description = "RDS default cluster parameter group"

  parameter {
    apply_method = "pending-reboot"
    name         = "aws_default_s3_role"
    value        = module.rds_s3_role.role.arn
  }
  parameter {
    apply_method = "pending-reboot"
    name         = "binlog_format"
    value        = "ROW"
  }
  parameter {
    apply_method = "immediate"
    name         = "server_audit_logging"
    value        = "1"
  }
  parameter {
    apply_method = "immediate"
    name         = "server_audit_events"
    value        = "TABLE,QUERY_DML"
  }
  parameter {
    apply_method = "immediate"
    name         = "connect_timeout"
    value        = 60
  }
  parameter {
    apply_method = "immediate"
    name         = "net_read_timeout"
    value        = 60
  }
  parameter {
    apply_method = "immediate"
    name         = "max_execution_time" //only applies to SELECT
    value        = 14400000             // 4 hours, the value is in milliseconds
  }
  parameter {
    apply_method = "pending-reboot"
    name         = "innodb_lock_wait_timeout"
    value        = 150 // the default value is 50, trying x3
  }
  parameter {
    apply_method = "pending-reboot"
    name         = "innodb_rollback_on_timeout"
    value        = 1 // the default value is 0
  }

  parameter {
    apply_method = "immediate"
    name         = "temptable_max_ram"
    value        = "2147483648" //default is 1Gib
  }

  parameter {
    apply_method = "immediate"
    name         = "temptable_max_mmap"
    value        = "107374182400" //default is 1Gib
  }


  #  lifecycle {
  #    ignore_changes = [parameter]
  #  }
}

resource "aws_db_parameter_group" "main" {
  name   = "${local.name_prefix}-main-5-7"
  family = "aurora-mysql5.7"
}

resource "aws_db_parameter_group" "main_8" {
  name   = "${local.name_prefix}-main-8"
  family = "aurora-mysql8.0"
}
