Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Changed content to match workflow

Table of Contents
Overview

...

Stage NumberStageCategorySummaryEnvironmentIterationsEstimated Person TimeEstimated Computer Time
1Import and parse reference dataset (Optional)ParsingThis optional step in the Bulk Loader process is to cross check an address for a match in a reference data set. If a source address is found in the reference dataset the address makes it to the next step. If not found the address is put aside in an exclusion set for later review.

Python 3

PostgreSQL / pgAdmin

Once per Bulk Loader process1 hour10 minutes
2Import, parse and filter source datasetParsingImport the dataset destined for the EAS. Parse and filter the set.

Python 3

PostgreSQL / pgAdmin

Once per Bulk Loader process90 minutes15 minutes

3

Geocode and filterGeocodingGeocode the set and filter further based on the geocoder score and status.ArcMapOnce per Bulk Loader process1 hour 5 minutes
4Export full set (single batch) or subset (multiple batches)GeocodingFor large datasets, create one of many subsets that will be run through the Bulk Loader in multiple batches.ArcMapOne or more batches for each Bulk Loader process30 minutes per batch5 minutes per batch
5Bulk Load batch (full set or subset)Bulk LoadingRun the entire batch or each subset batch through the Bulk Loader.

EAS <environment>(+)

PostgreSQL / pgAdmin

One or more batches for each Bulk Loader process1 hour per batch5 minutes per batch
6Extract resultsBulk LoadingExtract and archive the list of addresses that were added to the EAS . Also archive the unique EAS 'change request id' associated with this batch. Also archive the addresses that were rejected by the Bulk Loader in this batch.PostgreSQL / pgAdminOne or more batches for each Bulk Loader process1 hour per batch5 minutes per batch
7Cleanup and RestorationBulk LoadingClean up database, restore services and in the event of a failure, restore from backup.PostgreSQL / pgAdminOne or more batches for each Bulk Loader process1 hour per batch5 minutes per batch

...

Anchor
stage1
stage1
Stage 1 Import and parse reference dataset (Optional)

This optional stage is run once per Bulk Loader process. This stage can be skipped if the reference dataset is already available or if the optional 'filter by reference' step (Step 2.5) is skipped.

...

Anchor
stage3
stage3
Stage 3 
Geocode and filter

  •  

    Step 3.1 - Geocode source dataset

...

Anchor
stage4
stage4
Stage 4 
Export shapefile - full set (single batch) or subset (multiple batches)

Note
titleA note about batches

Stages 4, 5 and 6 can be run one time with the results from Stage 3, or they can be run in multiple batches of subsets.

A major consideration of when to run the full set at once versus in batches is the number of records being Bulk Loaded.

The size of each Bulk Loader operation affects the following aspects of the EAS:

  • The disk space consumed by the database server
  • The EAS user interface section that lists addresses loaded in a given Bulk Loader operation
  • The weekly email attachment listing new addresses added to the EAS

For medium-to-large datasets (input sets with over 1,000 records) it is recommended that the Bulk Loading process be run in batches over several days or weeks.

Reminder! It is required that the process first be run on a development server to assess the implications of the operation.

The remaining steps will document a single batch iteration. Repeat these steps in a multi-batch process.

...

 e.g. R:\Tec\..\Eas\_Task\2018_2019\path\to\archive\bulkloader_process_YYYYMMDD\bulkloader\batch_002NNN\bulkload.shp

  1. Artifacts
    1. bulkload.shp - Shapefile for loading into the Bulk Loader in the next stage.

Anchor
stage5
stage5
Stage 5 
Run the Bulk Loader

(info) For a complete set of steps and background about the Bulk Loader, see also Running the Bulk Loader, a page dedicated to its input, operation and results.

...

  •  

    Step 5.1 - Disable front-end access to EAS

  1. Notify relevant recipients that the Bulk Loader Process is starting
  2. Disable web service on <environment>_WEB (SF DEV WEB, SF QA WEB, SF PROD WEB)

    Code Block
    languagebash
    linenumberstrue
    cd /var/www/html
    sudo ./set_eas_mode.sh MAINT


    1. Browse to web site, http://eas.sfgov.org/, to confirm the service has stopped. (Expect to see message that EAS is currently out of service.)

...

  1. Halt Services

    Warning
    titleReason for halting services

    These steps are being performed to facilitate immediate roll-back of the EAS database if the Bulk Load Process ends in failure


    1. SKIP Turn off the replication server

      1. Disable database replication by shutting down the database service on the replication server (DR PROD DB).


        Code Block
        languagebash
        titleStop PostgreSQL
        linenumberstrue
        sudo#sudo -u postgres -i
        #/usr/pgsql-9.0/bin/pg_ctl -D /data/9.0/data stop


    2. Turn off downstream database propagation service(s)

      1. Suspend downstream replication to internal business system database (SF PROD WEB).

        Code Block
        languagetext
        titlestop xmit
        linenumberstrue
        sudo /var/www/html/eas/bin/xmit_change_notifications.bsh stop


  2. Backup Database
    1. Make a backup of the EAS database

...

  1. Connect to the database, <environment>_DB, and clear any leftover records from previous Bulk Loader batches.

    Code Block
    languagesql
    titleTRUNCATE
    linenumberstrue
    TRUNCATE bulkloader.address_extract, bulkloader.blocks_nearest;


    Code Block
    languagesql
    titleVACUUM
    linenumberstrue
    VACUUM FULL ANALYZE bulkloader.address_extract;


    Code Block
    languagesql
    titleVACUUM
    linenumberstrue
    VACUUM FULL ANALYZE bulkloader.blocks_nearest;


  2. Make note of EAS record counts before the Bulk Loading operation.

    Code Block
    languagesql
    firstline1
    titleRecord Counts
    linenumberstrue
    SELECT schemaname,relname,n_live_tup FROM pg_stat_user_tables ORDER BY schemaname,relname,n_live_tup
    1. Save results in artifact as record_counts_before.csv 
    2. Also save results in Excel spreadsheet artifact as bulkloader BulkLoader_resultsProcess_YYYYMMDD.xlsx(TODO provide path to a template)
  3. Make note of the database partition size on the file system at the current point in time.

    Code Block
    languagebash
    firstline1
    titledisk usage
    linenumberstrue
    date; df /data # 1st of 3


...

  1. Make note of the database partition size on the file system at this point. Compare with size of partition prior to loading to get the total disk space used as a result of running the Bulk Loader.

    Code Block
    languagebash
    firstline1
    titledisk usage
    linenumberstrue
    date; df /data # 2nd of 3


  2. Make note of EAS record counts after the Bulk Load operation.

    Code Block
    languagesql
    firstline1
    titleRecord Counts
    linenumberstrue
    SELECT schemaname,relname,n_live_tup FROM pg_stat_user_tables ORDER BY schemaname,relname,n_live_tup


    • Save results as artifact record-_counts-_after.csv
    • Also save results in Excel spreadsheet artifact as bulkloader BulkLoader_resultsProcess_YYYYMMDD.xlsxxlsx
    • In the spreadsheet, calculate the difference between the 'before' and 'after' record counts. The results will indicate the number of new base addresses added to the table `public.address_base` and the number of new addresses and units added to the table `public.addresses`.

    • (info) See dedicated Bulk Loader page, Running the Bulk Loader, for more analysis options.

Anchor
stage6
stage6
Stage 6 
Extract results

  •  

    Step 6.1 - Archive exceptions

...

  1. Get the unique EAS change_request_id created by the Bulk Load operation. The value of <change_request_id> will be used in the next steps to count addresses added to the EAS.
    1. Query the 'public.change_requests' table for the new 'change_request_id' value.

      Code Block
      languagesql
      firstline1
      titlechange_request_id
      linenumberstrue
      SELECT change_request_id FROM public.change_requests 
      WHERE requestor_comment LIKE 'bulk load change request' 
      ORDER BY change_request_id DESC 
      LIMIT 1;


    2. Save the file in the network folder dedicated to artifacts for the Bulk Loader iteration.
      • For example, R:\Tec\..\Eas\_Task\path\to\archive\bulkloader_YYYYMMDD\bulkloader\batch_002NNN\change_request_id.csv
  2. Artifacts
    1. change_request_id.csv - The unique EAS change_request_id created by the Bulk Load operation.

...

  1. Get all the address records (including units) added to the EAS during the Bulk Loader operation..
    1. Query the public.addresses table on the new change_request_id value.

      Code Block
      languagesql
      firstline1
      titleaddresses
      linenumberstrue
      SELECT * FROM public.addresses
      WHERE activate_change_request_id = <change_request_id>;


    2. Save the file in the network folder dedicated to artifacts for the Bulk Loader iteration.
      • For example, R:\Tec\..\Eas\_Task\path\to\archive\bulkloader_YYYYMMDD\bulkloader\batch_002NNN\addresses.csv
  2. Extract sample unit address from the output
    1. Pick a random record from the results where unit_num is not NULL. Gather the value in the address_base_id field.
    2. Construct a URL from this value like this: http://eas.sfgov.org/?address=NNNNNN
      • Where NNNNNN is the value from the address_base_id field.
    3. Make note of this URL for use in Step 7 when testing EAS after services are restored.
  3.  Artifacts
    1. addresses.csv - All the address records (including units) added to the EAS during the Bulk Loader operation.

...

  1. Get all the base records added to the EAS during the Bulk Loader operation.
    1. Query the public.address_base table on the new change_request_id value.

      Code Block
      languagesql
      firstline1
      titleaddress_base
      linenumberstrue
      SELECT activate_change_request_id, address_id, public.address_base.*
      FROM public.address_base, public.addresses
      WHERE public.address_base.address_base_id = public.addresses.address_base_id
      AND public.addresses.address_base_flg = TRUE
      AND public.addresses.activate_change_request_id = <change_request_id>;


    2. Save the file in the network folder dedicated to artifacts for the Bulk Loader iteration.
      • For example, R:\Tec\..\Eas\_Task\path\to\archive\bulkloader_YYYYMMDD\bulkloader\batch_002NNN\address_base.csv
  2. Extract sample base address from the output
    1. Pick a random record from the results. Gather the value in the address_base_id field.
    2. Construct a URL from this value like this: http://eas.sfgov.org/?address=NNNNNN
      • Where NNNNNN is the value from the address_base_id field.
    3. Make note of this URL for use in Step 7 when testing EAS after services are restored.
  3. Artifacts
    1. address_base.csv - All the base records added to the EAS during the Bulk Loader operation.

...

Code Block
languagebash
titledisk usage
linenumberstrue
date; df /data # 3rd of 3
# Optional step: archive output to 'df.txt' artifact
exit


  •  

    Step 7.2 - Clean automation machine

...

  1. If the Bulk Loader failed and corrupted any data then restore from the database backup.
    1. Follow these steps to restore from backup.


  •  

    Step 7.4 - Restore Services (

    Non-production Only)
  1. TODO: Remove this step if nothing to populate with
  •  Step 7.5 - Restore Services (

    Production Only)

  1. SKIP Turn on production-to-replication service
    • Re-enable database replication by restarting the database service on the replication server (DR PROD DB).


      Code Block
      languagebash
      titleStop PostgreSQL
      linenumberstrue
      sudo#sudo -u postgres -i
      #/usr/pgsql-9.0/bin/pg_ctl -D /data/9.0/data start


  2. SKIP Turn on downstream database propagation service(s)
    • Resume downstream replication to internal business system database (SF PROD WEB).

      Code Block
      languagetext
      firstline1
      titlestart xmit
      sudo#sudo /var/www/html/eas/bin/xmit_change_notifications.bsh start


  •  

    Anchor
    step7.5
    step7.5
    Step 7.

    6

    5 - Enable front-end access to EAS

  1. Enable web service on <environment>_WEB (SF DEV WEB, SF QA WEB, SF PROD WEB)nable front-end access to EAS

    Code Block
    languagebash
    linenumberstrue
    cd /var/www/html
    sudo ./set_eas_mode.sh LIVE
    Review
    
    exit


  2. Browse to website, http://eas.sfgov.org/, and review sample addresses gathered in Step 6.3 and Step 6.4

  3. Notify relevant recipients that the Bulk Loader Process is complete

  •  

    Step 7.

    7

    6 - Archive artifacts

Notes

Anchor
env
env
(+)  Substitute EAS <environment> with one of the relevant environments: SF_DEV, SF_QA, SF_PROD, SD_PROD

...