From 91e4aa5b718fc814564541b013eb50bb70ba416e Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 1 Oct 2024 14:25:34 -0400 Subject: [PATCH 1/7] - Moved docs to new dir - Added connector app to support restoring DBs --- .../db-upgrade}/cloud-foundry-db-upgrade.md | 60 +++--- tdrs-backend/db-upgrade/manifest.yml | 12 ++ .../new-cloud-foundry-db-upgrade.md | 198 ++++++++++++++++++ 3 files changed, 241 insertions(+), 29 deletions(-) rename {docs/Technical-Documentation => tdrs-backend/db-upgrade}/cloud-foundry-db-upgrade.md (78%) create mode 100644 tdrs-backend/db-upgrade/manifest.yml create mode 100644 tdrs-backend/db-upgrade/new-cloud-foundry-db-upgrade.md diff --git a/docs/Technical-Documentation/cloud-foundry-db-upgrade.md b/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md similarity index 78% rename from docs/Technical-Documentation/cloud-foundry-db-upgrade.md rename to tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md index 466b562f6..6fd95eb9e 100644 --- a/docs/Technical-Documentation/cloud-foundry-db-upgrade.md +++ b/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md @@ -2,35 +2,37 @@ ## Process -If you are performing this process for the staging or production, you need to ensure you are performing the changes through the [HHS](https://github.com/HHS/TANF-app) repo and not the [Raft](https://github.com/raft-tech/TANF-app) repo. +If you are performing this process for the staging or production, you need to ensure you are performing the changes through the [HHS](https://github.com/HHS/TANF-app) repo and not the [Raft](https://github.com/raft-tech/TANF-app) repo. You also need to have the postgres client binaries installed on your local machine.
-### 1. SSH into a backend app in your desired environment -```bash -cf ssh tdp-backend- +### 1. Open an SSH tunnel to the service +To execute commands on the RDS instance we can open an SSH tunnel to the service and run all our commands locally. ``` -
- -### 2. Create a backup of all the databases in the ENV's RDS instance -Note: you can get the required field values from `VCAP_SERVICES`. -```bash -/home/vcap/deps/0/apt/usr/lib/postgresql//bin/pg_dump -h -p -d -U -F c --no-acl --no-owner -f .pg +cf connect-to-service --no-client ``` -
- -### 3. Copy the backup(s) to your local machine -Note: This assumes you ran the backup command above in the home directory of the app. As an added bonus for later steps, you should execute this command from somewhere within `tdrs-backend` directory! Make sure not to commit the files/directories that are copied to your local directory. -```bash -cf ssh tdp-backend-- -c 'tar cfz - ~/app/*.pg' | tar xfz - -C . +You should see out put similar to: +``` +Finding the service instance details... +Setting up SSH tunnel... +SSH tunnel created. +Skipping call to client CLI. Connection information: + +Host: localhost +Port: 63634 +Username: +Password: +Name: + +Leave this terminal open while you want to use the SSH tunnel. Press Control-C to stop. ```
-### 4. Verify backup file size(s) match the backup size(s) in the app -```bash -ls -lh /home/vcap/app +### 2. Create a backup of the database(s) in the RDS instance +Note: the , , , and are the values you received from the output of the SSH tunnel. The parameter is the name of the DB you want to export, e.g `tdp_db_raft`. You will need to run this command for each DB in the instance. ``` -As an added verification step, you should consider restoring the backups into a local server and verifying the contents with `psql` or `pgAdmin`. -

+pg_dump -h -p -d -U -F c --no-acl --no-owner -f .pg +``` +
### 5. Update the `version` key in the `json_params` item in the `database` resource in the `main.tf` file in the environment(s) you're upgrading with the new database server version ```yaml @@ -57,7 +59,7 @@ Follow the instuctions in the `terraform/README.md` and proceed from there. Modi

### 9. Bind backend to the new RDS instance to get credentials -```bash +``` cf bind-service tdp-backend- tdp-db- ``` Be sure to re-stage the app when prompted @@ -65,37 +67,37 @@ Be sure to re-stage the app when prompted ### 10. Apply the backend manifest to begin the restore process If you copied the backups as mentioned in the note from step 3, the backups will be copied for you to the app instance in the command below. If not, you will need to use `scp` to copy the backups to the app instance after running the command below. -```bash +``` cf push tdp-backend- --no-route -f manifest.buildpack.yml -t 180 --strategy rolling ```
### 11. SSH into the app you just pushed -```bash +``` cf ssh tdp-backend- ```
### 12. Create the appropriate database(s) in the new RDS server Note: you can get the required field values from `VCAP_SERVICES`. -```bash +``` /home/vcap/deps/0/apt/usr/lib/postgresql//bin/createdb -U -h ```
### 13. Restore the backup(s) to the appropriate database(s) Note: you can get the required field values from `VCAP_SERVICES`. -```bash +``` /home/vcap/deps/0/apt/usr/lib/postgresql//bin/pg_restore -p -h -U -d .pg ``` During this step, you may see errors similar to the message below. Note `` is imputed in the message to avoid leaking environment specific usernames/roles. -```bash +``` pg_restore: from TOC entry 215; 1259 17313 SEQUENCE users_user_user_permissions_id_seq pg_restore: error: could not execute query: ERROR: role "" does not exist Command was: ALTER TABLE public.users_user_user_permissions_id_seq OWNER TO ; ``` and the result and total amount of these errors should be: -```bash +``` pg_restore: warning: errors ignored on restore: 68 ``` If this is what you see, everything is OK. This happens because the `pg_dump` doesn't remove owner associations on sequences for some reason. But you will see in the blocks above that `pg_restore` correctly alters the sequence owner to the new database user. @@ -103,7 +105,7 @@ If this is what you see, everything is OK. This happens because the `pg_dump` do ### 14. Use `psql` to get into the database to check state Note: you can get the required field values from `VCAP_SERVICES`. -```bash +``` /home/vcap/deps/0/apt/usr/lib/postgresql//bin/psql ```
diff --git a/tdrs-backend/db-upgrade/manifest.yml b/tdrs-backend/db-upgrade/manifest.yml new file mode 100644 index 000000000..33f655e96 --- /dev/null +++ b/tdrs-backend/db-upgrade/manifest.yml @@ -0,0 +1,12 @@ +version: 1 +applications: +- name: db-connector + instances: 1 + memory: 512M + disk_quota: 2G + env: + POSTGRES_PASSWORD: password + docker: + image: postgres:15.7-alpine3.20 + services: + - diff --git a/tdrs-backend/db-upgrade/new-cloud-foundry-db-upgrade.md b/tdrs-backend/db-upgrade/new-cloud-foundry-db-upgrade.md new file mode 100644 index 000000000..13b794281 --- /dev/null +++ b/tdrs-backend/db-upgrade/new-cloud-foundry-db-upgrade.md @@ -0,0 +1,198 @@ +# Cloud Foundry, Cloud.gov AWS RDS Database Upgrade + +## Process + +If you are performing this process for the staging or production, you need to ensure you are performing the changes through the [HHS](https://github.com/HHS/TANF-app) repo and not the [Raft](https://github.com/raft-tech/TANF-app) repo. You also need to have the postgres client binaries installed on your local machine. + +### 1. Open an SSH tunnel to the service +To execute commands on the RDS instance we can open an SSH tunnel to the service and run all our commands locally. Keep this tunnel open in a separate terminal window until this process is complete! + +``` +cf connect-to-service --no-client +``` + +You should see out put similar to: + +``` +Finding the service instance details... +Setting up SSH tunnel... +SSH tunnel created. +Skipping call to client CLI. Connection information: + +Host: localhost +Port: 63634 +Username: +Password: +Name: + +Leave this terminal open while you want to use the SSH tunnel. Press Control-C to stop. +``` + +### 2. Create a backup of the database(s) in the RDS instance +In a separate terminal from your SSH tunnel terminal, generate the `pg_dump` files. +Note: the , , , and are the values you received from the output of the SSH tunnel. The parameter is the name of the DB you want to export, e.g `tdp_db_raft`. You will need to run this command for each DB in the instance. + +``` +pg_dump -h -p -d -U -F c --no-acl --no-owner -f .pg +``` + +After the command finishes, you should see .pg in your current working directory. Do some sanity checks on this backup file to assert it makes sense. Now that we have our backup(s), we need to begin making the Terraform changes required to support the upgrade. +
+ +### 3. Update Terraform to create a new RDS instance +Follow the instructions in the `terraform/README.md` to get Terraform configured. Modify the `main.tf` file in the `terraform/` to include a new RDS instance. E.g if you were updating `prod` to version 15.x you would add the following code to the `main.tf` file. We are NOT removing the existing `resource "cloudfoundry_service_instance" "database"` from the `main.tf` file. Note that the resource and the `name` of the new RDS instance are not the same as the original resource name and RDS name. This is on purpose and we will remedy this in later steps. + +```yaml +resource "cloudfoundry_service_instance" "new-database" { + name = "tdp-db-prod-new" + space = data.cloudfoundry_space.space.id + service_plan = data.cloudfoundry_service.rds.service_plans["medium-gp-psql"] + json_params = "{\"version\": \"15\", \"storage_type\": \"gp3\", \"storage\": 500}" + recursive_delete = true + timeouts { + create = "60m" + update = "60m" + delete = "2h" + } +} +``` +After adding the new RDS resource to `main.tf`, you can follow the rest of the instructions in the `terraform/README.md` to plan and then apply this change with Terraform. + +### 4. Bind an app to the new RDS instance +In the `tdrs-backend/db-upgrade` directory, open the `manifest.yml` file and update the `services` block to reference the new RDS service you just created: in the example this would be: `- tdp-db-prod-new`. Then deploy this manifest: `cf push --no-route -f manifest.yml -t 180`. Wait for the connector app to deploy. We need to deploy a temporary app to avoid too much downtime for the backend app(s) and so that we can start new SSH tunnel to the new RDS instance. You should now close the original SSH tunnel we opened in step 1. + +### 5. Open an SSH tunnel to the new RDS instance +Again, in a separate terminal execute the following command and leave that terminal/connection alive until further notice. +``` +cf connect-to-service --no-client db-connector +``` + +### 6. Create the appropriate database(s) in the new RDS server +Using the credentials from the new SSH tunnel, create the same DB(s) you dumped in the new RDS instance. +``` +createdb -U -h -p +``` + +### 7. Restore the backup(s) to the appropriate database(s) +Using the credentials from the new SSH tunnel, restore the backups to the appropriate DBs. +``` +pg_restore -p -h -U -d .pg +``` + +During this step, you may see errors similar to the message below. Note `` is imputed in the message to avoid leaking environment specific usernames/roles. + +``` +pg_restore: from TOC entry 215; 1259 17313 SEQUENCE users_user_user_permissions_id_seq +pg_restore: error: could not execute query: ERROR: role "" does not exist +Command was: ALTER TABLE public.users_user_user_permissions_id_seq OWNER TO ; +``` + +and the result and total amount of these errors should be something like: + +``` +pg_restore: warning: errors ignored on restore: 68 +``` + +If this is what you see, everything is OK. This happens because the `pg_dump` doesn't remove owner associations on sequences for some reason. But you will see in the blocks above that `pg_restore` correctly alters the sequence owner to the new database user. + +### 8. Use `psql` to get into the database(s) to check state +Using the credentials from the new SSH tunnel, use the psql cli to inspect the restored DBs. +``` +psql -p -h -U -d +``` +
+ +### 9. Rename and Move RDS instances +Now that we have verified that the data in our new RDS instance looks good. We need to lift and shift the backend app(s) to point to our new RDS instance as if it is the existing (now old) RDS instance. + +First we need to unbind the existing RDS instance from the backend app(s) so that way we can make name changes. +``` +cf unbind service +``` + +After unbinding the service we want to update the "old RDS" service `name` to something different, plan, and then apply those changes with Terraform. +```yaml +resource "cloudfoundry_service_instance" "database" { + name = "something-that-isnt-tdp-db-prod" + space = data.cloudfoundry_space.space.id + service_plan = data.cloudfoundry_service.rds.service_plans["medium-gp-psql"] + json_params = "{\"version\": \"15\", \"storage_type\": \"gp3\", \"storage\": 500}" + recursive_delete = true + timeouts { + create = "60m" + update = "60m" + delete = "2h" + } +} +``` + +Now we can name our "new RDS" service to the expected `name`. Then we can also plan and apply those changes with Terraform + +```yaml +resource "cloudfoundry_service_instance" "new-database" { + name = "tdp-db-prod" + space = data.cloudfoundry_space.space.id + service_plan = data.cloudfoundry_service.rds.service_plans["medium-gp-psql"] + json_params = "{\"version\": \"15\", \"storage_type\": \"gp3\", \"storage\": 500}" + recursive_delete = true + timeouts { + create = "60m" + update = "60m" + delete = "2h" + } +} +``` + +Now we will bind the new RDS service back to the backend app(s) and restage it. Be sure to monitor the app's logs to ensure it connects to the instance. + +``` +cf bind service +``` + +Then + +``` +cf restage +``` + +If the backend app is running with no issues, we can now safely remove the "old RDS" service from Terraform. Remove the entire resource block named `database` from `main.tf` re-plan and then apply the changes to remove that instance with Terraform. + +Finally, to get our Terraform state looking like it originally did, we want to rename our `new-database` resource back to `database`. That way we are consistent. To do so we rename the resource, and to avoid Terraform from deleting it (since `database` won't exist in the state) we want to inform Terraform that we have "moved" the resource. We do so by adding the following code to the `main.tf`. Note, when running `terraform plan ...` it will not show any infrastructure changes, only a name change. Ensure you still apply even if it looks like there are no changes! + +```yaml +moved { + from = cloudfoundry_service_instance.new-database + to = cloudfoundry_service_instance.database +} +``` + +After adding the above code, re-plan and apply the changes with Terrform. Once Terraform has successfully applied the change, remove the `moved` block from `main.tf`. Re-plan with Terraform and assert it agrees that there are no changes to be made. If Terraform reports changes, you have made a mistake and need to figure out where you made the mistake. + +### 10. Access the re-staged app(s) and run a smoke test +- Log in +- Submit a few datafiles +- Make sure new and existing submission histories populate correctly +- Checkout the DACs data + +If everything looks good, there is nothing to do. If apps aren't working/connecting to the new RDS instance, you will need to debug manually and determine if/where you made a mistake. + +### 11. Update the `postgresql-client` version to the new version in `tdrs-backend/apt.yml` +```yaml +- postgresql-client- +``` +Note: if the underlying OS for CloudFoundry is no longer `cflinuxfs4` (code name `jammy`) you may also need to update the repo we point to for the postgres client binaries. + +### 12. Update the postgres container version in `tdrs-backend/docker-compose.yml` +```yaml +postgres: +image: postgres: +``` + +### 13. Commit and push correct changes, revert unnecessary changes. +Commit and push the changes for: +- `main.tf` +- `tdrs-backend/apt.yml` +- `tdrs-backend/docker-compose.yml` + +Revert the changes for: +- `manifest.yml` From 2c83c9601716615591b0b4ab624dba87da31a8a9 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Wed, 2 Oct 2024 12:06:29 -0400 Subject: [PATCH 2/7] - remove unnecessary document --- .../db-upgrade/cloud-foundry-db-upgrade.md | 184 +++++++++++----- .../new-cloud-foundry-db-upgrade.md | 198 ------------------ 2 files changed, 130 insertions(+), 252 deletions(-) delete mode 100644 tdrs-backend/db-upgrade/new-cloud-foundry-db-upgrade.md diff --git a/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md b/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md index 6fd95eb9e..13b794281 100644 --- a/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md +++ b/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md @@ -3,14 +3,16 @@ ## Process If you are performing this process for the staging or production, you need to ensure you are performing the changes through the [HHS](https://github.com/HHS/TANF-app) repo and not the [Raft](https://github.com/raft-tech/TANF-app) repo. You also need to have the postgres client binaries installed on your local machine. -
### 1. Open an SSH tunnel to the service -To execute commands on the RDS instance we can open an SSH tunnel to the service and run all our commands locally. +To execute commands on the RDS instance we can open an SSH tunnel to the service and run all our commands locally. Keep this tunnel open in a separate terminal window until this process is complete! + ``` cf connect-to-service --no-client ``` + You should see out put similar to: + ``` Finding the service instance details... Setting up SSH tunnel... @@ -25,98 +27,172 @@ Name: Leave this terminal open while you want to use the SSH tunnel. Press Control-C to stop. ``` -
### 2. Create a backup of the database(s) in the RDS instance +In a separate terminal from your SSH tunnel terminal, generate the `pg_dump` files. Note: the , , , and are the values you received from the output of the SSH tunnel. The parameter is the name of the DB you want to export, e.g `tdp_db_raft`. You will need to run this command for each DB in the instance. + ``` pg_dump -h -p -d -U -F c --no-acl --no-owner -f .pg ``` -
-### 5. Update the `version` key in the `json_params` item in the `database` resource in the `main.tf` file in the environment(s) you're upgrading with the new database server version -```yaml -json_params = "{\"version\": \"\"}" -``` +After the command finishes, you should see .pg in your current working directory. Do some sanity checks on this backup file to assert it makes sense. Now that we have our backup(s), we need to begin making the Terraform changes required to support the upgrade.
-### 6. Update the `postgresql-client` version to the new version in `tdrs-backend/apt.yml` -```yaml -- postgresql-client- -``` -Note: if the underlying OS for CloudFoundry is no longer `cflinuxfs4` you may also need to update the repo we point to for the postgres client binaries. -

+### 3. Update Terraform to create a new RDS instance +Follow the instructions in the `terraform/README.md` to get Terraform configured. Modify the `main.tf` file in the `terraform/` to include a new RDS instance. E.g if you were updating `prod` to version 15.x you would add the following code to the `main.tf` file. We are NOT removing the existing `resource "cloudfoundry_service_instance" "database"` from the `main.tf` file. Note that the resource and the `name` of the new RDS instance are not the same as the original resource name and RDS name. This is on purpose and we will remedy this in later steps. -### 7. Update the postgres container version in `tdrs-backend/docker-compose.yml` ```yaml -postgres: -image: postgres: +resource "cloudfoundry_service_instance" "new-database" { + name = "tdp-db-prod-new" + space = data.cloudfoundry_space.space.id + service_plan = data.cloudfoundry_service.rds.service_plans["medium-gp-psql"] + json_params = "{\"version\": \"15\", \"storage_type\": \"gp3\", \"storage\": 500}" + recursive_delete = true + timeouts { + create = "60m" + update = "60m" + delete = "2h" + } +} ``` -
+After adding the new RDS resource to `main.tf`, you can follow the rest of the instructions in the `terraform/README.md` to plan and then apply this change with Terraform. -### 8. Update Terraform state to delete then re-create RDS instance -Follow the instuctions in the `terraform/README.md` and proceed from there. Modify the `main.tf` file in the `terraform/` directory to inform TF of the changes. To delete the existing RDS instance you can simply comment out the whole database `resource` in the file (even though you made changes in the steps above). TF will see that the resource is no longer there, delete it, and appropriately update it's state. Then you simply re-comment the database `resource` back in with the changes you made in previous steps. TF will create the new RDS instance with your new updates, and also update the state in S3. -

+### 4. Bind an app to the new RDS instance +In the `tdrs-backend/db-upgrade` directory, open the `manifest.yml` file and update the `services` block to reference the new RDS service you just created: in the example this would be: `- tdp-db-prod-new`. Then deploy this manifest: `cf push --no-route -f manifest.yml -t 180`. Wait for the connector app to deploy. We need to deploy a temporary app to avoid too much downtime for the backend app(s) and so that we can start new SSH tunnel to the new RDS instance. You should now close the original SSH tunnel we opened in step 1. -### 9. Bind backend to the new RDS instance to get credentials +### 5. Open an SSH tunnel to the new RDS instance +Again, in a separate terminal execute the following command and leave that terminal/connection alive until further notice. ``` -cf bind-service tdp-backend- tdp-db- +cf connect-to-service --no-client db-connector ``` -Be sure to re-stage the app when prompted -

-### 10. Apply the backend manifest to begin the restore process -If you copied the backups as mentioned in the note from step 3, the backups will be copied for you to the app instance in the command below. If not, you will need to use `scp` to copy the backups to the app instance after running the command below. +### 6. Create the appropriate database(s) in the new RDS server +Using the credentials from the new SSH tunnel, create the same DB(s) you dumped in the new RDS instance. ``` -cf push tdp-backend- --no-route -f manifest.buildpack.yml -t 180 --strategy rolling +createdb -U -h -p ``` -
-### 11. SSH into the app you just pushed +### 7. Restore the backup(s) to the appropriate database(s) +Using the credentials from the new SSH tunnel, restore the backups to the appropriate DBs. ``` -cf ssh tdp-backend- +pg_restore -p -h -U -d .pg ``` -
- -### 12. Create the appropriate database(s) in the new RDS server -Note: you can get the required field values from `VCAP_SERVICES`. -``` -/home/vcap/deps/0/apt/usr/lib/postgresql//bin/createdb -U -h -``` -
-### 13. Restore the backup(s) to the appropriate database(s) -Note: you can get the required field values from `VCAP_SERVICES`. -``` -/home/vcap/deps/0/apt/usr/lib/postgresql//bin/pg_restore -p -h -U -d .pg -``` During this step, you may see errors similar to the message below. Note `` is imputed in the message to avoid leaking environment specific usernames/roles. + ``` pg_restore: from TOC entry 215; 1259 17313 SEQUENCE users_user_user_permissions_id_seq pg_restore: error: could not execute query: ERROR: role "" does not exist Command was: ALTER TABLE public.users_user_user_permissions_id_seq OWNER TO ; ``` -and the result and total amount of these errors should be: + +and the result and total amount of these errors should be something like: + ``` pg_restore: warning: errors ignored on restore: 68 ``` + If this is what you see, everything is OK. This happens because the `pg_dump` doesn't remove owner associations on sequences for some reason. But you will see in the blocks above that `pg_restore` correctly alters the sequence owner to the new database user. -

-### 14. Use `psql` to get into the database to check state -Note: you can get the required field values from `VCAP_SERVICES`. +### 8. Use `psql` to get into the database(s) to check state +Using the credentials from the new SSH tunnel, use the psql cli to inspect the restored DBs. ``` -/home/vcap/deps/0/apt/usr/lib/postgresql//bin/psql +psql -p -h -U -d ```
-### 15. Re-deploy or Re-stage the backend and frontend apps -Pending your environment you can do this GitHub labels or you can re-stage the apps from Cloud.gov. -

+### 9. Rename and Move RDS instances +Now that we have verified that the data in our new RDS instance looks good. We need to lift and shift the backend app(s) to point to our new RDS instance as if it is the existing (now old) RDS instance. + +First we need to unbind the existing RDS instance from the backend app(s) so that way we can make name changes. +``` +cf unbind service +``` + +After unbinding the service we want to update the "old RDS" service `name` to something different, plan, and then apply those changes with Terraform. +```yaml +resource "cloudfoundry_service_instance" "database" { + name = "something-that-isnt-tdp-db-prod" + space = data.cloudfoundry_space.space.id + service_plan = data.cloudfoundry_service.rds.service_plans["medium-gp-psql"] + json_params = "{\"version\": \"15\", \"storage_type\": \"gp3\", \"storage\": 500}" + recursive_delete = true + timeouts { + create = "60m" + update = "60m" + delete = "2h" + } +} +``` + +Now we can name our "new RDS" service to the expected `name`. Then we can also plan and apply those changes with Terraform + +```yaml +resource "cloudfoundry_service_instance" "new-database" { + name = "tdp-db-prod" + space = data.cloudfoundry_space.space.id + service_plan = data.cloudfoundry_service.rds.service_plans["medium-gp-psql"] + json_params = "{\"version\": \"15\", \"storage_type\": \"gp3\", \"storage\": 500}" + recursive_delete = true + timeouts { + create = "60m" + update = "60m" + delete = "2h" + } +} +``` + +Now we will bind the new RDS service back to the backend app(s) and restage it. Be sure to monitor the app's logs to ensure it connects to the instance. + +``` +cf bind service +``` -### 16. Access the re-deployed/re-staged apps and run a smoke test +Then + +``` +cf restage +``` + +If the backend app is running with no issues, we can now safely remove the "old RDS" service from Terraform. Remove the entire resource block named `database` from `main.tf` re-plan and then apply the changes to remove that instance with Terraform. + +Finally, to get our Terraform state looking like it originally did, we want to rename our `new-database` resource back to `database`. That way we are consistent. To do so we rename the resource, and to avoid Terraform from deleting it (since `database` won't exist in the state) we want to inform Terraform that we have "moved" the resource. We do so by adding the following code to the `main.tf`. Note, when running `terraform plan ...` it will not show any infrastructure changes, only a name change. Ensure you still apply even if it looks like there are no changes! + +```yaml +moved { + from = cloudfoundry_service_instance.new-database + to = cloudfoundry_service_instance.database +} +``` + +After adding the above code, re-plan and apply the changes with Terrform. Once Terraform has successfully applied the change, remove the `moved` block from `main.tf`. Re-plan with Terraform and assert it agrees that there are no changes to be made. If Terraform reports changes, you have made a mistake and need to figure out where you made the mistake. + +### 10. Access the re-staged app(s) and run a smoke test - Log in - Submit a few datafiles - Make sure new and existing submission histories populate correctly - Checkout the DACs data -
+ +If everything looks good, there is nothing to do. If apps aren't working/connecting to the new RDS instance, you will need to debug manually and determine if/where you made a mistake. + +### 11. Update the `postgresql-client` version to the new version in `tdrs-backend/apt.yml` +```yaml +- postgresql-client- +``` +Note: if the underlying OS for CloudFoundry is no longer `cflinuxfs4` (code name `jammy`) you may also need to update the repo we point to for the postgres client binaries. + +### 12. Update the postgres container version in `tdrs-backend/docker-compose.yml` +```yaml +postgres: +image: postgres: +``` + +### 13. Commit and push correct changes, revert unnecessary changes. +Commit and push the changes for: +- `main.tf` +- `tdrs-backend/apt.yml` +- `tdrs-backend/docker-compose.yml` + +Revert the changes for: +- `manifest.yml` diff --git a/tdrs-backend/db-upgrade/new-cloud-foundry-db-upgrade.md b/tdrs-backend/db-upgrade/new-cloud-foundry-db-upgrade.md deleted file mode 100644 index 13b794281..000000000 --- a/tdrs-backend/db-upgrade/new-cloud-foundry-db-upgrade.md +++ /dev/null @@ -1,198 +0,0 @@ -# Cloud Foundry, Cloud.gov AWS RDS Database Upgrade - -## Process - -If you are performing this process for the staging or production, you need to ensure you are performing the changes through the [HHS](https://github.com/HHS/TANF-app) repo and not the [Raft](https://github.com/raft-tech/TANF-app) repo. You also need to have the postgres client binaries installed on your local machine. - -### 1. Open an SSH tunnel to the service -To execute commands on the RDS instance we can open an SSH tunnel to the service and run all our commands locally. Keep this tunnel open in a separate terminal window until this process is complete! - -``` -cf connect-to-service --no-client -``` - -You should see out put similar to: - -``` -Finding the service instance details... -Setting up SSH tunnel... -SSH tunnel created. -Skipping call to client CLI. Connection information: - -Host: localhost -Port: 63634 -Username: -Password: -Name: - -Leave this terminal open while you want to use the SSH tunnel. Press Control-C to stop. -``` - -### 2. Create a backup of the database(s) in the RDS instance -In a separate terminal from your SSH tunnel terminal, generate the `pg_dump` files. -Note: the , , , and are the values you received from the output of the SSH tunnel. The parameter is the name of the DB you want to export, e.g `tdp_db_raft`. You will need to run this command for each DB in the instance. - -``` -pg_dump -h -p -d -U -F c --no-acl --no-owner -f .pg -``` - -After the command finishes, you should see .pg in your current working directory. Do some sanity checks on this backup file to assert it makes sense. Now that we have our backup(s), we need to begin making the Terraform changes required to support the upgrade. -
- -### 3. Update Terraform to create a new RDS instance -Follow the instructions in the `terraform/README.md` to get Terraform configured. Modify the `main.tf` file in the `terraform/` to include a new RDS instance. E.g if you were updating `prod` to version 15.x you would add the following code to the `main.tf` file. We are NOT removing the existing `resource "cloudfoundry_service_instance" "database"` from the `main.tf` file. Note that the resource and the `name` of the new RDS instance are not the same as the original resource name and RDS name. This is on purpose and we will remedy this in later steps. - -```yaml -resource "cloudfoundry_service_instance" "new-database" { - name = "tdp-db-prod-new" - space = data.cloudfoundry_space.space.id - service_plan = data.cloudfoundry_service.rds.service_plans["medium-gp-psql"] - json_params = "{\"version\": \"15\", \"storage_type\": \"gp3\", \"storage\": 500}" - recursive_delete = true - timeouts { - create = "60m" - update = "60m" - delete = "2h" - } -} -``` -After adding the new RDS resource to `main.tf`, you can follow the rest of the instructions in the `terraform/README.md` to plan and then apply this change with Terraform. - -### 4. Bind an app to the new RDS instance -In the `tdrs-backend/db-upgrade` directory, open the `manifest.yml` file and update the `services` block to reference the new RDS service you just created: in the example this would be: `- tdp-db-prod-new`. Then deploy this manifest: `cf push --no-route -f manifest.yml -t 180`. Wait for the connector app to deploy. We need to deploy a temporary app to avoid too much downtime for the backend app(s) and so that we can start new SSH tunnel to the new RDS instance. You should now close the original SSH tunnel we opened in step 1. - -### 5. Open an SSH tunnel to the new RDS instance -Again, in a separate terminal execute the following command and leave that terminal/connection alive until further notice. -``` -cf connect-to-service --no-client db-connector -``` - -### 6. Create the appropriate database(s) in the new RDS server -Using the credentials from the new SSH tunnel, create the same DB(s) you dumped in the new RDS instance. -``` -createdb -U -h -p -``` - -### 7. Restore the backup(s) to the appropriate database(s) -Using the credentials from the new SSH tunnel, restore the backups to the appropriate DBs. -``` -pg_restore -p -h -U -d .pg -``` - -During this step, you may see errors similar to the message below. Note `` is imputed in the message to avoid leaking environment specific usernames/roles. - -``` -pg_restore: from TOC entry 215; 1259 17313 SEQUENCE users_user_user_permissions_id_seq -pg_restore: error: could not execute query: ERROR: role "" does not exist -Command was: ALTER TABLE public.users_user_user_permissions_id_seq OWNER TO ; -``` - -and the result and total amount of these errors should be something like: - -``` -pg_restore: warning: errors ignored on restore: 68 -``` - -If this is what you see, everything is OK. This happens because the `pg_dump` doesn't remove owner associations on sequences for some reason. But you will see in the blocks above that `pg_restore` correctly alters the sequence owner to the new database user. - -### 8. Use `psql` to get into the database(s) to check state -Using the credentials from the new SSH tunnel, use the psql cli to inspect the restored DBs. -``` -psql -p -h -U -d -``` -
- -### 9. Rename and Move RDS instances -Now that we have verified that the data in our new RDS instance looks good. We need to lift and shift the backend app(s) to point to our new RDS instance as if it is the existing (now old) RDS instance. - -First we need to unbind the existing RDS instance from the backend app(s) so that way we can make name changes. -``` -cf unbind service -``` - -After unbinding the service we want to update the "old RDS" service `name` to something different, plan, and then apply those changes with Terraform. -```yaml -resource "cloudfoundry_service_instance" "database" { - name = "something-that-isnt-tdp-db-prod" - space = data.cloudfoundry_space.space.id - service_plan = data.cloudfoundry_service.rds.service_plans["medium-gp-psql"] - json_params = "{\"version\": \"15\", \"storage_type\": \"gp3\", \"storage\": 500}" - recursive_delete = true - timeouts { - create = "60m" - update = "60m" - delete = "2h" - } -} -``` - -Now we can name our "new RDS" service to the expected `name`. Then we can also plan and apply those changes with Terraform - -```yaml -resource "cloudfoundry_service_instance" "new-database" { - name = "tdp-db-prod" - space = data.cloudfoundry_space.space.id - service_plan = data.cloudfoundry_service.rds.service_plans["medium-gp-psql"] - json_params = "{\"version\": \"15\", \"storage_type\": \"gp3\", \"storage\": 500}" - recursive_delete = true - timeouts { - create = "60m" - update = "60m" - delete = "2h" - } -} -``` - -Now we will bind the new RDS service back to the backend app(s) and restage it. Be sure to monitor the app's logs to ensure it connects to the instance. - -``` -cf bind service -``` - -Then - -``` -cf restage -``` - -If the backend app is running with no issues, we can now safely remove the "old RDS" service from Terraform. Remove the entire resource block named `database` from `main.tf` re-plan and then apply the changes to remove that instance with Terraform. - -Finally, to get our Terraform state looking like it originally did, we want to rename our `new-database` resource back to `database`. That way we are consistent. To do so we rename the resource, and to avoid Terraform from deleting it (since `database` won't exist in the state) we want to inform Terraform that we have "moved" the resource. We do so by adding the following code to the `main.tf`. Note, when running `terraform plan ...` it will not show any infrastructure changes, only a name change. Ensure you still apply even if it looks like there are no changes! - -```yaml -moved { - from = cloudfoundry_service_instance.new-database - to = cloudfoundry_service_instance.database -} -``` - -After adding the above code, re-plan and apply the changes with Terrform. Once Terraform has successfully applied the change, remove the `moved` block from `main.tf`. Re-plan with Terraform and assert it agrees that there are no changes to be made. If Terraform reports changes, you have made a mistake and need to figure out where you made the mistake. - -### 10. Access the re-staged app(s) and run a smoke test -- Log in -- Submit a few datafiles -- Make sure new and existing submission histories populate correctly -- Checkout the DACs data - -If everything looks good, there is nothing to do. If apps aren't working/connecting to the new RDS instance, you will need to debug manually and determine if/where you made a mistake. - -### 11. Update the `postgresql-client` version to the new version in `tdrs-backend/apt.yml` -```yaml -- postgresql-client- -``` -Note: if the underlying OS for CloudFoundry is no longer `cflinuxfs4` (code name `jammy`) you may also need to update the repo we point to for the postgres client binaries. - -### 12. Update the postgres container version in `tdrs-backend/docker-compose.yml` -```yaml -postgres: -image: postgres: -``` - -### 13. Commit and push correct changes, revert unnecessary changes. -Commit and push the changes for: -- `main.tf` -- `tdrs-backend/apt.yml` -- `tdrs-backend/docker-compose.yml` - -Revert the changes for: -- `manifest.yml` From e57e58ba8d0af0b7f1c4a677ca9309c2e02eea2d Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Wed, 2 Oct 2024 14:37:31 -0400 Subject: [PATCH 3/7] - add intro --- tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md b/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md index 13b794281..cec613351 100644 --- a/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md +++ b/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md @@ -1,9 +1,8 @@ # Cloud Foundry, Cloud.gov AWS RDS Database Upgrade +The process below provides a guide to roll our backend applications over to a new RDS version and instance. The entire process can take several hours and does involve downtime for the environment which you are upgrading. Be sure to take those factors into account when commencing the process. ## Process -If you are performing this process for the staging or production, you need to ensure you are performing the changes through the [HHS](https://github.com/HHS/TANF-app) repo and not the [Raft](https://github.com/raft-tech/TANF-app) repo. You also need to have the postgres client binaries installed on your local machine. - ### 1. Open an SSH tunnel to the service To execute commands on the RDS instance we can open an SSH tunnel to the service and run all our commands locally. Keep this tunnel open in a separate terminal window until this process is complete! From 17bdbcb364f41608d42b04c4dcc38b76e13262e0 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Thu, 3 Oct 2024 09:47:32 -0400 Subject: [PATCH 4/7] - Clean up docs --- .../db-upgrade/cloud-foundry-db-upgrade.md | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md b/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md index cec613351..abb9caa30 100644 --- a/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md +++ b/tdrs-backend/db-upgrade/cloud-foundry-db-upgrade.md @@ -4,13 +4,13 @@ The process below provides a guide to roll our backend applications over to a ne ## Process ### 1. Open an SSH tunnel to the service -To execute commands on the RDS instance we can open an SSH tunnel to the service and run all our commands locally. Keep this tunnel open in a separate terminal window until this process is complete! +To execute commands on the RDS instance we can open an SSH tunnel to the service and run all our commands from our local machine. Keep this tunnel open in a separate terminal window until this process is complete! ``` cf connect-to-service --no-client ``` -You should see out put similar to: +You should see output similar to: ``` Finding the service instance details... @@ -29,17 +29,16 @@ Leave this terminal open while you want to use the SSH tunnel. Press Control-C t ### 2. Create a backup of the database(s) in the RDS instance In a separate terminal from your SSH tunnel terminal, generate the `pg_dump` files. -Note: the , , , and are the values you received from the output of the SSH tunnel. The parameter is the name of the DB you want to export, e.g `tdp_db_raft`. You will need to run this command for each DB in the instance. +Note: the HOST, PORT, DB_USER, and PASSWORD are the values you received from the output of the SSH tunnel. The DB_NAME parameter is the name of the DB you want to export, e.g `tdp_db_raft`. You will need to run this command for each DB in the instance. ``` pg_dump -h -p -d -U -F c --no-acl --no-owner -f .pg ``` -After the command finishes, you should see .pg in your current working directory. Do some sanity checks on this backup file to assert it makes sense. Now that we have our backup(s), we need to begin making the Terraform changes required to support the upgrade. -
+After the command finishes, you should see .pg in your current working directory. ### 3. Update Terraform to create a new RDS instance -Follow the instructions in the `terraform/README.md` to get Terraform configured. Modify the `main.tf` file in the `terraform/` to include a new RDS instance. E.g if you were updating `prod` to version 15.x you would add the following code to the `main.tf` file. We are NOT removing the existing `resource "cloudfoundry_service_instance" "database"` from the `main.tf` file. Note that the resource and the `name` of the new RDS instance are not the same as the original resource name and RDS name. This is on purpose and we will remedy this in later steps. +Follow the instructions in the `terraform/README.md` to get Terraform configured. Modify the `main.tf` file in the `terraform/` to include a new RDS instance. E.g if you were updating `prod` to version 15.x you would add the following code to the `main.tf` file. We are **NOT** removing the existing `resource "cloudfoundry_service_instance" "database"` from the `main.tf` file. Note that the resource name (i.e. `new-database`) and the `name` of the new RDS instance are not the same as the original resource name and RDS name. This is on purpose and we will remedy this in later steps. ```yaml resource "cloudfoundry_service_instance" "new-database" { @@ -55,25 +54,29 @@ resource "cloudfoundry_service_instance" "new-database" { } } ``` + After adding the new RDS resource to `main.tf`, you can follow the rest of the instructions in the `terraform/README.md` to plan and then apply this change with Terraform. ### 4. Bind an app to the new RDS instance -In the `tdrs-backend/db-upgrade` directory, open the `manifest.yml` file and update the `services` block to reference the new RDS service you just created: in the example this would be: `- tdp-db-prod-new`. Then deploy this manifest: `cf push --no-route -f manifest.yml -t 180`. Wait for the connector app to deploy. We need to deploy a temporary app to avoid too much downtime for the backend app(s) and so that we can start new SSH tunnel to the new RDS instance. You should now close the original SSH tunnel we opened in step 1. +In the `tdrs-backend/db-upgrade` directory, open the `manifest.yml` file and update the `services` block to reference the new RDS service you just created: in the example this would be: `- tdp-db-prod-new`. Then deploy this manifest: `cf push --no-route -f manifest.yml -t 180`. Wait for the connector app to deploy. We need to deploy a temporary app to avoid too much downtime for the backend app(s), erroneous transactions on the new RDS instance, and so that we can start a new SSH tunnel to the new RDS instance. If you haven't already, you should now close the original SSH tunnel we opened in step 1. ### 5. Open an SSH tunnel to the new RDS instance Again, in a separate terminal execute the following command and leave that terminal/connection alive until further notice. + ``` cf connect-to-service --no-client db-connector ``` ### 6. Create the appropriate database(s) in the new RDS server Using the credentials from the new SSH tunnel, create the same DB(s) you dumped in the new RDS instance. + ``` createdb -U -h -p ``` ### 7. Restore the backup(s) to the appropriate database(s) Using the credentials from the new SSH tunnel, restore the backups to the appropriate DBs. + ``` pg_restore -p -h -U -d .pg ``` @@ -92,24 +95,26 @@ and the result and total amount of these errors should be something like: pg_restore: warning: errors ignored on restore: 68 ``` -If this is what you see, everything is OK. This happens because the `pg_dump` doesn't remove owner associations on sequences for some reason. But you will see in the blocks above that `pg_restore` correctly alters the sequence owner to the new database user. +If this is what you see, everything is OK. This happens because the `pg_dump` doesn't remove all owner associations on DB objects for some reason. But you will see in the blocks above that `pg_restore` correctly alters the object owner to the new database user. ### 8. Use `psql` to get into the database(s) to check state -Using the credentials from the new SSH tunnel, use the psql cli to inspect the restored DBs. +Using the credentials from the new SSH tunnel, use the psql cli to inspect the restored DBs. You should consider counting the number of tables in the new and old DBs, counting some records across different tables, etc... + ``` psql -p -h -U -d ``` -
### 9. Rename and Move RDS instances -Now that we have verified that the data in our new RDS instance looks good. We need to lift and shift the backend app(s) to point to our new RDS instance as if it is the existing (now old) RDS instance. +Now that we have verified the data in our new RDS instance looks good, we need to lift and shift the backend app(s) to point to our new RDS instance as if it is the existing (now old) RDS instance. + +First we need to unbind the existing RDS instance from the backend app(s) it is bound to. -First we need to unbind the existing RDS instance from the backend app(s) so that way we can make name changes. ``` cf unbind service ``` After unbinding the service we want to update the "old RDS" service `name` to something different, plan, and then apply those changes with Terraform. + ```yaml resource "cloudfoundry_service_instance" "database" { name = "something-that-isnt-tdp-db-prod" @@ -125,7 +130,7 @@ resource "cloudfoundry_service_instance" "database" { } ``` -Now we can name our "new RDS" service to the expected `name`. Then we can also plan and apply those changes with Terraform +Now we can name our "new RDS" service to the expected `name` (i.e. the original `name` field from our old RDS instance). Then we plan and apply those changes with Terraform. ```yaml resource "cloudfoundry_service_instance" "new-database" { @@ -142,7 +147,7 @@ resource "cloudfoundry_service_instance" "new-database" { } ``` -Now we will bind the new RDS service back to the backend app(s) and restage it. Be sure to monitor the app's logs to ensure it connects to the instance. +Next we will bind the new RDS service back to the backend app(s) we unbound the old instance from and restage them. Be sure to monitor the backend app's logs to ensure it connects to the instance and starts as expected. ``` cf bind service @@ -154,7 +159,7 @@ Then cf restage ``` -If the backend app is running with no issues, we can now safely remove the "old RDS" service from Terraform. Remove the entire resource block named `database` from `main.tf` re-plan and then apply the changes to remove that instance with Terraform. +If the backend app(s) are running with no issues, we can now safely remove the "old RDS" service from Terraform. Remove the entire resource block named `database` from `main.tf`, plan and then apply the changes to remove that instance with Terraform. Finally, to get our Terraform state looking like it originally did, we want to rename our `new-database` resource back to `database`. That way we are consistent. To do so we rename the resource, and to avoid Terraform from deleting it (since `database` won't exist in the state) we want to inform Terraform that we have "moved" the resource. We do so by adding the following code to the `main.tf`. Note, when running `terraform plan ...` it will not show any infrastructure changes, only a name change. Ensure you still apply even if it looks like there are no changes! @@ -165,7 +170,7 @@ moved { } ``` -After adding the above code, re-plan and apply the changes with Terrform. Once Terraform has successfully applied the change, remove the `moved` block from `main.tf`. Re-plan with Terraform and assert it agrees that there are no changes to be made. If Terraform reports changes, you have made a mistake and need to figure out where you made the mistake. +After adding the above code, plan and apply the changes with Terrform. Once Terraform has successfully applied the change, remove the `moved` block from `main.tf`. Run `terraform plan ...` again and assert it agrees that there are no changes to be made. If Terraform reports changes, you have made a mistake and need to figure out where you made the mistake. ### 10. Access the re-staged app(s) and run a smoke test - Log in @@ -176,9 +181,11 @@ After adding the above code, re-plan and apply the changes with Terrform. Once T If everything looks good, there is nothing to do. If apps aren't working/connecting to the new RDS instance, you will need to debug manually and determine if/where you made a mistake. ### 11. Update the `postgresql-client` version to the new version in `tdrs-backend/apt.yml` + ```yaml - postgresql-client- ``` + Note: if the underlying OS for CloudFoundry is no longer `cflinuxfs4` (code name `jammy`) you may also need to update the repo we point to for the postgres client binaries. ### 12. Update the postgres container version in `tdrs-backend/docker-compose.yml` From 073c82ffaab17de41c37461831ff1b1946152df2 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Thu, 3 Oct 2024 09:57:19 -0400 Subject: [PATCH 5/7] - remove credentials key --- docs/Technical-Documentation/nexus-repo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Technical-Documentation/nexus-repo.md b/docs/Technical-Documentation/nexus-repo.md index 5e504a384..2cf5190be 100644 --- a/docs/Technical-Documentation/nexus-repo.md +++ b/docs/Technical-Documentation/nexus-repo.md @@ -123,7 +123,7 @@ Now you will no longer have to enter the password when logging in. ## Local Docker Login After logging into the `tanf-dev` space with the `cf` cli, execute the following commands to authenticate your local docker daemon ``` -export NEXUS_DOCKER_PASSWORD=`cf service-key tanf-keys nexus-dev | tail -n +2 | jq .credentials.password` +export NEXUS_DOCKER_PASSWORD=`cf service-key tanf-keys nexus-dev | tail -n +2 | jq .password` echo "$NEXUS_DOCKER_PASSWORD" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-dev --password-stdin ``` From 7844b939970abc41139e264953ba86f2ee6af070 Mon Sep 17 00:00:00 2001 From: Victoria Amoroso <106103383+victoriaatraft@users.noreply.github.com> Date: Thu, 10 Oct 2024 13:39:39 -0700 Subject: [PATCH 6/7] 3.6.4 release notes and KC updates (#3216) * Release notes 3.6.4 and Updates to KC Added 3.6.4 updates and Interpreting Error Types under Understanding Error Reports and File Structure sub page * list correction * Release Notes Updates and KC 3.6.4 release notes added fical/calendar table and tightened content for interpreting error types table * Typo * 3.6.4 updates KC and release notes * 3.6.4 updates * KC Impact column * 3.6.4 table and KC updates * 3.6.4 table and Common Errors KC fixed icon spacing for release notes and ordering of Examples of Common Errors in the KC * a11y list issue in index * KC updates viewing error reports Commas added * 3.6.4 date and kc change --------- Co-authored-by: Alex P. <63075587+ADPennington@users.noreply.github.com> --- .../img/error-reports/error-report.png | Bin 60095 -> 47210 bytes product-updates/knowledge-center/index.html | 93 +++++++++++ .../viewing-error-reports.html | 145 +++++++++++++----- 3 files changed, 201 insertions(+), 37 deletions(-) diff --git a/product-updates/img/error-reports/error-report.png b/product-updates/img/error-reports/error-report.png index bbb9594e98e5e198a9b9a8e6ca4ba2303ed97e3e..79f96d81ba6386c21e59f8cb176084a8e1566537 100644 GIT binary patch literal 47210 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 literal 60095 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 an existing Login.gov AccountWhat's new in TDP + +

October 10th 2024 (v 3.6.4)

+

Added:

+
    +
  • +
    + +
    +
    +
    + New Error Type Column Added to Error Report +
    +

    A new column called "Error Type" has been added to error reports. This feature will help users quickly locate high-priority errors affecting file submission.

    +

    The new column categorizes four types of errors by their priority and impact on file status. Detailed guidance to filter high-priority errors along with further information on this update is available in the Knowledge Center.

    + +
    +
  • + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Error TypePriorityImpactFile Status
File Pre-Check + High + + Some or all of the record(s) in the file are rejected + + Rejected or Partially Accepted with errors +
Case Consistency + High + + Record(s) rejected + + Partially accepted with errors +
Record Value Invalid + Low + + Record(s) accepted + + Accepted with errors +
Record Value Inconsistency + Low + + Record(s) accepted + + Accepted with errors +
+ + + + +
+ +

September 10th 2024 (v 3.6.0)

In Development:

@@ -565,13 +564,101 @@

Overview of the Error Report

TDP error report containing some of the error examples below opened in Excel + +
+

Interpreting Error Types

+
+

There are four error types which affect data submission differently. Unlike low priority errors, high priority errors will prevent some/all records in the file from being accepted into the TDP system's database. You may filter the report to display high-priority errors first. Low priority errors will not affect whether a record makes it into the data base, but we encourage you to refer to the coding instructions to make corrections for the most accurate data. Learn how to filter data here.

+
+

For users familiar with the legacy system, errors are equivalent to edits. File Pre-Check and Case Consistency errors are similar to fatal edits and Record Value Invalid and Record Value Inconsistency are similar to warnings.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Error TypeDescriptionPriorityImpactFile Status
File Pre-Check + Relate to the format of the records within a file (e.g. incorrect headers, incorrect record length). + + High + + Some or all of the record(s) in the file are rejected + Rejected or Partially Accepted with errors + +
Case Consistency + Relates to inconsistency across records (e.g. inconsistency across related person- and family-level records). + These errors are triggered by a series of checks that confirm that all the records for a family in a given month are related in a meaningful way. + High + + Record(s) rejected + + Partially accepted with errors +
Record Value Invalid + These errors involve unexpected values in the record (e.g. missing values or out-of-range values). + + Low + + Record(s) accepted + + Accepted with errors +
Record Value Inconsistency + These errors stem from inconsistencies in the record (e.g. conflicting data between items in the same record). + + Low + + Record(s) accepted + + Accepted with errors +
+
+ + +

Examples of Common Errors

Below are examples of error messages associated with common issues that may be listed in an error report.

- -

@@ -581,11 +668,10 @@

Examples of Common Errors

-

Errors related to header or trailer records:

+

File Pre-Check: Errors related to header or trailer records:

Header-related errors are often the result of submitting files for a fiscal period that is not consistent with the time period in the header record (e.g. trying to submit 2022 data for a 2024 submission). Other header or trailer errors may be related to how the file was generated (e.g. the file produced is missing a header or trailer record). Some examples of how these types of error may appear in your error report are included below:

-
Submitted reporting year: 2024, quarter: 1 doesn't match file reporting year 2022, quarter: 4. @@ -593,29 +679,31 @@

Errors related to header or trailer records:

Your file does not begin with a HEADER record.
- -

Please refer to the Transmission File Header Record definitions to compare your file's header or trailer to the expected layout.

-

Errors related to record length:

+

File Pre-Check: Errors related to record length:

Record length-related errors will be raised if the specified record is not aligned with the record layout requirements. For example, this kind of error may appear as follows in the report:

- - - - T6 record length is 409 characters but must be 379. +
+

Please refer to the Transmission File Layout documents to compare your records against their expected layouts.

-
-

Please refer to the Transmission File Layout documents to compare your records against their expected layouts.

+
+ +
+

Errors with inconsistent values across related records may require review of the coding instructions to determine the proper correction. In the example below, the error is communicating that a T1 (family) record was found in the file that did not have a corresponding T2 (adult) or T3 (child) record, which effectively means that person-level records associated with this family are missing from the file.

+
+ Every T1 record should have at least one corresponding T2 or T3 record with the same Report Month & Year and Case Number. + +
-

Errors related to invalid values for a specific item/data element:

+

Record Value Invalid: Errors related to invalid values for a specific item/data element:

Invalid value errors can come up when a specific item/data element has an unexpected value (e.g. a letter or a symbol was reported for the zip code field, such as: "462$1"):

@@ -630,32 +718,15 @@

Errors related to invalid values for a specific item/data element:

  • TANF (ACF-199) and SSP-MOE (ACF-209) Coding Instructions
  • -
    -

    Errors related to inconsistent values for related items/data elements in the same record:

    +

    Record Value Inconsistency: Errors related to inconsistent values for related items/data elements in the same record:

    Some errors may require review of the coding instructions for multiple items (and their respective values) to determine the proper correction. In the example below, the error is communicating that the value reported for Item 49 is in a conflict with the value for Item 30 in the same record. This message suggests a problem with either the value of Item 49 or the value of Item 30. Refer to the coding instructions and your own data to determine which value needs to be corrected.

    - - - -
    - If Item 30 (Family Affiliation) is 1 then Item 49 (Work Participation Status) must be in set of values [01, 02, 05, 07, 09, 15, 17, 18, 19, 99]. -
    - -
    - -
    -

    Errors with inconsistent values across related records may require review of the coding instructions to determine the proper correction. In the example below, the error is communicating that a T1 (family) record was found in the file that did not have a corresponding T2 (adult) or T3 (child) record, which effectively means that person-level records associated with this family are missing from the file.

    - - - -
    - Every T1 record should have at least one corresponding T2 or T3 record with the same Report Month & Year and Case Number. - +If Item 30 (Family Affiliation) is 1 then Item 49 (Work Participation Status) must be in set of values [01, 02, 05, 07, 09, 15, 17, 18, 19, 99]. + +
    - -