Skip to content

Commit 3479f62

Browse files
committed
Merge branch 'release/1.17.1'
2 parents df82eea + 9ec8e50 commit 3479f62

21 files changed

Lines changed: 622 additions & 340 deletions

CHANGELOG.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,20 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## [Unreleased]
8+
## Unreleased
99
### Added
10+
1011
### Changed
12+
1113
### Fixed
1214

15+
16+
## [1.17.1]
17+
### Changed
18+
- Improved PlanScore error logging & double timeout [#1204](https://github.com/PublicMapping/districtbuilder/pull/1204)
19+
- Revert to using JSON for data serialization [#1206](https://github.com/PublicMapping/districtbuilder/pull/1206)
20+
21+
1322
## [1.17.0]
1423

1524
### Added
@@ -490,7 +499,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
490499

491500
- Initial release.
492501

493-
[unreleased]: https://github.com/publicmapping/districtbuilder/compare/1.17.0...HEAD
502+
[unreleased]: https://github.com/publicmapping/districtbuilder/compare/1.17.1...HEAD
503+
[1.17.1]: https://github.com/publicmapping/districtbuilder/compare/1.17.0...1.17.1
494504
[1.17.0]: https://github.com/publicmapping/districtbuilder/compare/1.16.1...1.17.0
495505
[1.16.1]: https://github.com/publicmapping/districtbuilder/compare/1.16.0...1.16.1
496506
[1.16.0]: https://github.com/publicmapping/districtbuilder/compare/1.15.1...1.16.0

scripts/load-full-state-data

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
if [[ -n "${DB_DEBUG}" ]]; then
6+
set -x
7+
fi
8+
9+
S3_URIS=(
10+
"s3://global-districtbuilder-dev-us-east-1/regions/US/AK/2021-08-13T09:23:10.238Z/"
11+
"s3://global-districtbuilder-dev-us-east-1/regions/US/AL/2021-08-13T02:30:40.369Z/"
12+
"s3://global-districtbuilder-dev-us-east-1/regions/US/AR/2021-08-13T06:43:09.147Z/"
13+
"s3://global-districtbuilder-dev-us-east-1/regions/US/AZ/2021-08-12T21:42:38.860Z/"
14+
"s3://global-districtbuilder-dev-us-east-1/regions/US/CA/2022-04-26T14:12:02.125Z/"
15+
"s3://global-districtbuilder-dev-us-east-1/regions/US/CO/2021-10-26T03:41:25.119Z/"
16+
"s3://global-districtbuilder-dev-us-east-1/regions/US/CT/2021-10-26T00:33:03.521Z/"
17+
"s3://global-districtbuilder-dev-us-east-1/regions/US/DC/2021-08-13T09:30:57.826Z/"
18+
"s3://global-districtbuilder-dev-us-east-1/regions/US/DE/2021-08-13T09:33:21.756Z/"
19+
"s3://global-districtbuilder-dev-us-east-1/regions/US/FL/2021-08-12T23:20:51.764Z/"
20+
"s3://global-districtbuilder-dev-us-east-1/regions/US/GA/2021-08-13T00:54:52.804Z/"
21+
"s3://global-districtbuilder-dev-us-east-1/regions/US/HI/2021-08-13T08:14:36.412Z/"
22+
"s3://global-districtbuilder-dev-us-east-1/regions/US/IA/2021-08-13T07:04:13.080Z/"
23+
"s3://global-districtbuilder-dev-us-east-1/regions/US/ID/2021-08-12T22:37:52.328Z/"
24+
"s3://global-districtbuilder-dev-us-east-1/regions/US/IL/2021-08-12T21:17:43.961Z/"
25+
"s3://global-districtbuilder-dev-us-east-1/regions/US/IN/2021-09-25T22:14:17.196Z/"
26+
"s3://global-districtbuilder-dev-us-east-1/regions/US/KS/2021-08-13T07:25:22.917Z/"
27+
"s3://global-districtbuilder-dev-us-east-1/regions/US/KY/2021-08-13T10:53:12.868Z/"
28+
"s3://global-districtbuilder-dev-us-east-1/regions/US/LA/2021-08-13T06:19:58.665Z/"
29+
"s3://global-districtbuilder-dev-us-east-1/regions/US/MA/2021-08-26T04:34:52.224Z/"
30+
"s3://global-districtbuilder-dev-us-east-1/regions/US/MD/2021-10-26T04:11:55.734Z/"
31+
"s3://global-districtbuilder-dev-us-east-1/regions/US/ME/2021-11-09T05:45:39.150Z/"
32+
"s3://global-districtbuilder-dev-us-east-1/regions/US/MI/2021-08-12T22:15:23.087Z/"
33+
"s3://global-districtbuilder-dev-us-east-1/regions/US/MN/2021-08-13T05:36:28.223Z/"
34+
"s3://global-districtbuilder-dev-us-east-1/regions/US/MO/2021-08-26T06:00:34.143Z/"
35+
"s3://global-districtbuilder-dev-us-east-1/regions/US/MS/2021-08-16T22:06:02.598Z/"
36+
"s3://global-districtbuilder-dev-us-east-1/regions/US/MT/2021-08-12T23:47:43.719Z/"
37+
"s3://global-districtbuilder-dev-us-east-1/regions/US/NC/2021-08-13T02:01:34.979Z/"
38+
"s3://global-districtbuilder-dev-us-east-1/regions/US/ND/2021-11-09T05:17:57.283Z/"
39+
"s3://global-districtbuilder-dev-us-east-1/regions/US/NE/2021-08-13T08:11:04.020Z/"
40+
"s3://global-districtbuilder-dev-us-east-1/regions/US/NH/2021-08-13T08:31:17.998Z/"
41+
"s3://global-districtbuilder-dev-us-east-1/regions/US/NJ/2021-09-28T15:16:51.806Z/"
42+
"s3://global-districtbuilder-dev-us-east-1/regions/US/NM/2021-08-13T12:27:10.872Z/"
43+
"s3://global-districtbuilder-dev-us-east-1/regions/US/NV/2021-10-26T01:02:17.677Z/"
44+
"s3://global-districtbuilder-dev-us-east-1/regions/US/NY/2021-10-24T19:42:40.981Z/"
45+
"s3://global-districtbuilder-dev-us-east-1/regions/US/OH/2021-08-13T00:20:02.287Z/"
46+
"s3://global-districtbuilder-dev-us-east-1/regions/US/OK/2021-08-12T20:02:31.231Z/"
47+
"s3://global-districtbuilder-dev-us-east-1/regions/US/OR/2021-09-25T21:13:46.552Z/"
48+
"s3://global-districtbuilder-dev-us-east-1/regions/US/PA/2021-08-13T13:08:34.609Z/"
49+
"s3://global-districtbuilder-dev-us-east-1/regions/US/PR/2022-01-07T22:22:27.542Z/"
50+
"s3://global-districtbuilder-dev-us-east-1/regions/US/RI/2021-08-13T08:34:27.788Z/"
51+
"s3://global-districtbuilder-dev-us-east-1/regions/US/SC/2021-08-13T05:57:28.817Z/"
52+
"s3://global-districtbuilder-dev-us-east-1/regions/US/SD/2021-08-13T13:20:27.234Z/"
53+
"s3://global-districtbuilder-dev-us-east-1/regions/US/TN/2021-08-26T07:08:17.785Z/"
54+
"s3://global-districtbuilder-dev-us-east-1/regions/US/TX/2022-04-26T14:34:19.894Z/"
55+
"s3://global-districtbuilder-dev-us-east-1/regions/US/UT/2022-01-26T21:06:31.562Z/"
56+
"s3://global-districtbuilder-dev-us-east-1/regions/US/VA/2021-11-09T06:55:41.244Z/"
57+
"s3://global-districtbuilder-dev-us-east-1/regions/US/VT/2021-08-13T09:51:55.169Z/"
58+
"s3://global-districtbuilder-dev-us-east-1/regions/US/WA/2021-10-26T02:40:59.376Z/"
59+
"s3://global-districtbuilder-dev-us-east-1/regions/US/WI/2021-08-13T01:25:55.432Z/"
60+
"s3://global-districtbuilder-dev-us-east-1/regions/US/WV/2021-08-16T22:53:12.903Z/"
61+
"s3://global-districtbuilder-dev-us-east-1/regions/US/WY/2021-08-13T10:07:40.461Z/"
62+
);
63+
64+
function usage() {
65+
echo -n \
66+
"Usage: $(basename "$0")
67+
Load region configs for all 50 states + DC + PR
68+
"
69+
}
70+
71+
if [ "${BASH_SOURCE[0]}" = "${0}" ]; then
72+
if [ "${1:-}" = "--help" ]; then
73+
usage
74+
else
75+
# Bring up PostgreSQL and NestJS in a way that respects
76+
# configured service health checks.
77+
docker-compose \
78+
-f docker-compose.yml \
79+
up -d database server
80+
81+
for S3_URI in "${S3_URIS[@]}"; do
82+
docker-compose \
83+
exec database psql -U districtbuilder districtbuilder -c "
84+
INSERT INTO region_config
85+
VALUES (
86+
DEFAULT,
87+
'${S3_URI:53:2}',
88+
'US',
89+
'${S3_URI:53:2}',
90+
'$S3_URI'
91+
) ON CONFLICT DO NOTHING"
92+
done
93+
./scripts/yarn server run set-topology-size
94+
fi
95+
fi

scripts/manage

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ if [[ -n "${DB_DEBUG}" ]]; then
77
fi
88

99
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
10-
docker-compose run --rm manage ./bin/run "$@"
10+
docker-compose up -d database
11+
docker-compose run --no-deps --rm manage ./bin/run "$@"
1112
fi

scripts/yarn

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
2424
run --rm "${1}" \
2525
"${@:2}"
2626
else
27+
docker-compose up -d database
2728
docker-compose \
28-
run --rm "${1}" \
29+
run --rm --no-deps "${1}" \
2930
"${@:2}"
3031
fi
3132
else

src/manage/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"recursive-readdir": "2.2.2",
3232
"rxjs": "7.4.0",
3333
"streamifier": "0.1.1",
34+
"topobuf": "^1.1.0",
3435
"topojson-client": "3.1.0",
3536
"topojson-server": "3.0.1",
3637
"topojson-simplify": "3.0.3",

src/manage/src/commands/create-random-projects.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { connectionOptions } from "../lib/dbUtils";
88
import { RegionConfig } from "../../../server/src/region-configs/entities/region-config.entity";
99
import { Project } from "../../../server/src/projects/entities/project.entity";
1010
import { TopologyService } from "../../../server/src/districts/services/topology.service";
11+
import { WorkerPoolService } from "../../../server/src/districts/services/worker-pool.service";
1112
import { User } from "../../../server/src/users/entities/user.entity";
1213

1314
const PERCENT_COMPLETE = 0.25;
@@ -36,7 +37,8 @@ export default class CreateRandomProjects extends Command {
3637
const regionConfigRepo = connection.getRepository(RegionConfig);
3738
const projectRepo = connection.getRepository(Project);
3839
const userRepo = connection.getRepository(User);
39-
const topologyService = new TopologyService(regionConfigRepo);
40+
const topologyService = new TopologyService(regionConfigRepo, new WorkerPoolService());
41+
topologyService.loadLayers();
4042

4143
const regions = await regionConfigRepo.find(
4244
args.region === "all"

src/manage/src/commands/process-geojson.ts

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import { feature as topo2feature, mergeArcs, quantize } from "topojson-client";
2121
import { topology } from "topojson-server";
2222
import { planarTriangleArea, presimplify, simplify } from "topojson-simplify";
2323
import { GeometryCollection, GeometryObject, Objects, Topology } from "topojson-specification";
24-
import { serialize, deserialize } from "v8";
2524

2625
import {
2726
TypedArray,
@@ -504,36 +503,14 @@ it when necessary (file sizes ~1GB+).
504503
const bucket = uriComponents[2];
505504
const keyPrefix = uriComponents.slice(3).join("/");
506505

507-
console.log(bucket);
508-
const bufFileExists = await s3
509-
.headObject({
510-
Bucket: bucket,
511-
Key: `${keyPrefix}topo.buf`
512-
})
513-
.promise()
514-
.then(
515-
() => true,
516-
err => {
517-
if (err.code === "NotFound") {
518-
return false;
519-
}
520-
throw err;
521-
}
522-
);
523-
524-
// Use binary format if it exists, but fallback to text format otherwise
525-
const key = bufFileExists ? `${keyPrefix}topo.buf` : `${keyPrefix}topo.json`;
526-
527506
const response: any = await s3
528507
.getObject({
529508
Bucket: bucket,
530-
Key: key
509+
Key: `${keyPrefix}topo.json`
531510
})
532511
.promise();
533512

534-
return bufFileExists
535-
? deserialize(response.Body as Buffer)
536-
: JSON.parse(response.Body?.toString("utf8"));
513+
return JSON.parse(response.Body?.toString("utf8"));
537514
}
538515

539516
// Write TopoJSON file to disk
@@ -547,7 +524,7 @@ it when necessary (file sizes ~1GB+).
547524
this.log("Writing topojson file");
548525
const path = join(dir, "topo.buf");
549526
const output = createWriteStream(path, { encoding: "binary" });
550-
output.write(serialize(filteredTopojson));
527+
output.write(JSON.stringify(filteredTopojson));
551528
output.close();
552529
}
553530

src/manage/src/commands/publish-region.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { join } from "path";
88
import readDir from "recursive-readdir";
99
import { Topology } from "topojson-specification";
1010
import { createConnection } from "typeorm";
11-
import { deserialize } from "v8";
1211

1312
import { RegionConfig } from "../../../server/src/region-configs/entities/region-config.entity";
1413
import { getTopologyLayerSize } from "../../../server/src/common/functions";
@@ -79,7 +78,9 @@ export default class PublishRegion extends Command {
7978
cli.action.stop();
8079
this.log(`Received ${responses.length} responses`);
8180

82-
const topology = deserialize(await readFile(join(args.staticDataDir, "topo.buf"))) as Topology;
81+
const topology = JSON.parse(
82+
await readFile(join(args.staticDataDir, "topo.json"), { encoding: "utf-8" })
83+
) as Topology;
8384

8485
this.log("Saving region config to database");
8586
const regionConfig = new RegionConfig();

0 commit comments

Comments
 (0)