Skip to content

Commit 6581253

Browse files
author
billy clark
committed
Merge branch 'release-prep-from-develop'
2 parents 968965c + cb3ce87 commit 6581253

18 files changed

+132
-147
lines changed

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ services:
191191
command: sh -c "postconf -e 'default_transport = retry:no outbound email allowed' && /run.sh"
192192

193193
db:
194-
image: mongo:4.4
194+
image: mongo:4.2
195195
container_name: lf-db
196196
ports:
197197
# exposed this to host for admin tools

docker/deployment/Makefile

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ logs-mail:
2626

2727
shell-app:
2828
kubectl exec -it deploy/app -- sh
29+
shell-db:
30+
kubectl exec -it deploy/db -- sh
2931
shell-lfmerge:
3032
kubectl exec -it deploy/lfmerge -- sh
3133
shell-next-app:
@@ -89,6 +91,33 @@ delete-next-proxy:
8991
delete-next-app:
9092
kubectl delete deployment,service next-app
9193

94+
scale-down: scale-down-app scale-down-lfmerge scale-down-next-proxy scale-down-next-app scale-down-mail scale-down-db
95+
scale-down-db:
96+
kubectl scale deploy/db --replicas 0
97+
scale-down-mail:
98+
kubectl scale deploy/mail --replicas 0
99+
scale-down-app:
100+
kubectl scale deploy/app --replicas 0
101+
scale-down-lfmerge:
102+
kubectl scale deploy/lfmerge --replicas 0
103+
scale-down-next-app:
104+
kubectl scale deploy/next-app --replicas 0
105+
scale-down-next-proxy:
106+
kubectl scale deploy/next-proxy --replicas 0
107+
scale-up: scale-up-db scale-up-next-proxy scale-up-next-app scale-up-mail scale-up-app scale-up-lfmerge
108+
scale-up-db:
109+
kubectl scale deploy/db --replicas 1
110+
scale-up-mail:
111+
kubectl scale deploy/mail --replicas 1
112+
scale-up-app:
113+
kubectl scale deploy/app --replicas 1
114+
scale-up-lfmerge:
115+
kubectl scale deploy/lfmerge --replicas 1
116+
scale-up-next-app:
117+
kubectl scale deploy/next-app --replicas 1
118+
scale-up-next-proxy:
119+
kubectl scale deploy/next-proxy --replicas 1
120+
92121
APPPOD = $(shell kubectl get pods --selector='app=app' -o name | sed -e s'/pod\///')
93122
lfmerge-copy-state:
94123
rm -rf all_projects/*.state on_hold/*.state

docker/deployment/db-deployment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ spec:
4949
spec:
5050
containers:
5151
- name: db
52-
image: mongo:4.4
52+
image: mongo:4.2
5353
# https://kubernetes.io/docs/concepts/configuration/manage-resources-containers
5454
resources:
5555
requests:
Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,39 @@
11
#!/bin/bash
22

33
set -e
4+
set -x
45

5-
echo Mongo Dump
6-
ssh mongo-xf mongodump
6+
PRODCONTEXT=--context='languageforge'
7+
QACONTEXT=--context='qa-languageforge'
8+
PRODSERVER=$(kubectl $PRODCONTEXT get pods --selector='app=db' -o name | sed -e s'/pod\///')
9+
QASERVER=$(kubectl $QACONTEXT get pods --selector='app=db' -o name | sed -e s'/pod\///')
710

8-
echo Remove Scripture Forge data from dump
9-
ssh mongo-xf rm -r dump/xforge
11+
echo "Mongo Dump on production"
12+
kubectl $PRODCONTEXT exec -c db $PRODSERVER -- bash -c "cd /data/db && mongodump"
1013

11-
echo Create tar file of dump
12-
ssh mongo-xf tar -czvf mongodump.tgz dump
14+
echo "Create tar file of dump"
15+
kubectl $PRODCONTEXT exec -c db $PRODSERVER -- bash -c "cd /data/db && tar -czvf mongodump.tgz dump"
1316

14-
echo Copy tar file to local filesystem
15-
scp mongo-xf:mongodump.tgz .
17+
echo "Copy tgz file to local filesystem"
18+
kubectl $PRODCONTEXT cp -c db $PRODSERVER:/data/db/mongodump.tgz .
1619

17-
MONGOPOD=$(kubectl get pods --selector='app=db' -o name | sed -e s'/pod\///')
20+
echo "See how big mongo dump file is"
21+
ls -lh mongodump.tgz
1822

19-
echo Copying mongodump.tgz into $MONGOPOD/data/db
20-
kubectl cp -c db mongodump.tgz $MONGOPOD:/data/db
23+
echo "Copy tgz file to QA"
24+
kubectl $QACONTEXT cp -c db mongodump.tgz $QASERVER:/data/db
2125

22-
echo Untarring mongodump.tgz
23-
kubectl exec -c db $MONGOPOD -- bash -c "cd /data/db \
24-
&& tar -xvzf mongodump.tgz"
26+
echo "Untar mongodump.tgz on QA"
27+
kubectl $QACONTEXT exec -c db $QASERVER -- bash -c "cd /data/db && tar -xvzf mongodump.tgz"
2528

26-
echo MongoRestore
27-
kubectl exec -c db $MONGOPOD -- bash -c "cd /data/db \
28-
&& mongorestore --drop dump"
29+
#echo "Drop and load prod data on QA"
30+
#kubectl $QACONTEXT exec -c db $QASERVER -- bash -c "cd /data/db && mongorestore --drop dump"
2931

30-
echo Run Mongo migration
31-
kubectl exec -c db $MONGOPOD -- bash -c 'mongo scriptureforge --eval "db.projects.updateMany({}, {"\$unset": {userProperties: 1}});"'
32+
#echo "Clean up on PROD"
33+
#kubectl $PRODCONTEXT exec -c db $PRODSERVER -- bash -c "rm -r /data/db/dump && rm /data/db/mongodump.tgz"
3234

33-
echo Clean up on mongo-xf remote
34-
ssh mongo-xf rm -r dump
35-
ssh mongo-xf rm mongodump.tgz
35+
#echo "Clean up on QA"
36+
#kubectl $QACONTEXT exec -c db $QASERVER -- bash -c "rm -r /data/db/dump && rm /data/db/mongodump.tgz"
3637

37-
echo Clean up on lf-mongo-data volume
38-
kubectl exec -c db $MONGOPOD -- bash -c "rm -r /data/db/dump && rm /data/db/mongodump.tgz"
39-
40-
echo Clean up local tarball
41-
rm mongodump.tgz
38+
#echo "Clean up local tarball"
39+
#rm mongodump.tgz

docs/RELEASE.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,17 @@ Backups will be established automatically by LTOps and utilized by LF through th
5252
1. Scale the app up (LTOps/App team)
5353
1. Test the app (App team)
5454
1. Communicate maintenance completion
55+
56+
### Database upgrades
57+
58+
Since database upgrades are so infrequent, require extra care and a brief outage, they are to be done manually:
59+
60+
1. Follow the MongoDB release notes / upgrade guide for the version of Mongo you plan to upgrade to. e.g. [Mongo 5.0 standalone upgrade guide](https://www.mongodb.com/docs/manual/release-notes/5.0-upgrade-standalone/)
61+
1. `make scale-down` and ensure all containers are stopped. It's also a good idea to watch the logs for the `db` container ensuring the shutdown was "clean".
62+
1. `make deploy-db` and ensure configs are applied to the deployment
63+
1. `make scale-up` and ensure all containers start back up. It's also a good idea to watch the logs for the `db` container ensuring the startup was "clean" and the new version is actually running.
64+
1. Verify that the running MongoDB version is in fact the version you expect. Connecting to QA or PROD mongo instance using the `mongo` client should confirm this (the server version is printed when you connect). You can also check the image name of the deployment you are inspecting.
65+
1. Run the `db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )` command to verify that feature version is set to the previous db version
66+
1. Ensure a recent backup of the mongo databases was successful and is available in case a restore/revert is necessary.
67+
1. To perform the actual upgrade run `db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } )` Change the version to the desired new version number. This operation may take some time to complete as it may trigger an internal data migration on existing collections.
68+
1. Run the `db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )` command again to verify that feature version is now set to the newly upgraded version.

package-lock.json

Lines changed: 6 additions & 30 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
"ng-table": "^3.0.1",
4444
"npm-run-all": "^4.1.5",
4545
"oclazyload": "^1.1.0",
46-
"offline-js": "0.7.11",
4746
"webm-fix-duration": "^1.0.1",
4847
"zxcvbn": "^4.4.2"
4948
},
@@ -67,7 +66,6 @@
6766
"@types/ng-file-upload": "^12.2.3",
6867
"@types/node": "^17.0.21",
6968
"@types/oclazyload": "0.0.32",
70-
"@types/offline-js": "^0.7.28",
7169
"@types/rangy": "0.0.30",
7270
"@types/webpack-env": "^1.16.0",
7371
"copy-webpack-plugin": "^8.1.0",

src/angular-app/bellows/core/api/project.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export class ProjectService {
8080
}
8181

8282
list() {
83-
if (navigator.onLine /* TODO use Offline.state */) {
83+
if (navigator.onLine) {
8484
const deferred = this.$q.defer();
8585

8686
this.api.call('project_list_dto', [], response => {

src/angular-app/bellows/core/offline/editor-data.service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ export class EditorDataService {
166166
const deferred = this.$q.defer();
167167

168168
// get data from the server
169-
if (Offline.state === 'up') {
169+
if (navigator.onLine) {
170170
this.api.dbeDtoUpdatesOnly(this.browserInstanceId, timestamp, (update: any) => {
171171
this.processEditorDto(update, true).then((result: any) => {
172172
if (result.data.itemCount > 0) {
@@ -269,7 +269,7 @@ export class EditorDataService {
269269
return index;
270270
}
271271

272-
// find entry id from index number, used to goto and display editor record
272+
// find entry id from index number, used to goto and display editor record
273273
getIdInFilteredList = (index: number): string => {
274274
let list = this.filteredEntries;
275275
let id: string;

src/angular-app/languageforge/lexicon/editor/field/dc-entry.component.html

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
<div class="dc-entry">
22
<div class="card card-outline-primary entry-card">
33
<div class="card-header">
4-
<div data-ng-if="$ctrl.control.rights.canDeleteEntry() && $ctrl.isAtEditorEntry()"
5-
class="dropdown float-right" uib-dropdown>
6-
<a class="btn ellipsis-menu-toggle pui-no-caret" uib-dropdown-toggle>
7-
<span class="fa fa-ellipsis-v"></span>
4+
<div data-ng-if="$ctrl.control.rights.canDeleteEntry() && $ctrl.isAtEditorEntry()" class="d-flex align-items-center justify-content-between">
5+
Entry
6+
7+
<a href data-ng-click="$ctrl.deleteEntry()" class="text-danger" role="button">
8+
<span class="fa fa-trash"></span>
89
</a>
9-
<div class="dropdown-menu-right" uib-dropdown-menu>
10-
<a href data-ng-click="$ctrl.deleteEntry()" class="dropdown-item">Delete Entry</a>
11-
</div>
1210
</div>
1311
<div class="comment-bubble-entry">
1412
<comment-bubble control="$ctrl.control" field="$ctrl.fieldName" model="$ctrl.model" parent-context-guid="$ctrl.contextGuid"></comment-bubble>
1513
</div>
16-
&nbsp;Entry
1714
</div>
18-
<div class="card-body">
15+
16+
<div class="card-body">
1917
<dc-fieldrepeat config="$ctrl.config" model="$ctrl.model" control="$ctrl.control" parent-context-guid="$ctrl.contextGuid"></dc-fieldrepeat>
2018
</div>
2119
</div>

src/angular-app/languageforge/lexicon/editor/field/dc-example.component.html

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
<div class="dc-example card">
22
<div class="card-header">
3-
<div data-ng-show="$ctrl.control.rights.canEditEntry() && $ctrl.isAtEditorEntry()"
4-
class="dropdown float-right" uib-dropdown>
5-
<a class="btn ellipsis-menu-toggle pui-no-caret" uib-dropdown-toggle>
6-
<span class="fa fa-ellipsis-v"></span>
7-
</a>
8-
<div class="dropdown-menu-right" uib-dropdown-menu>
9-
<a href data-ng-click="$ctrl.remove($ctrl.index)" class="dropdown-item">
10-
<span class="fa fa-trash"></span> Delete Example {{$ctrl.index+1}}
11-
</a>
12-
<a href data-ng-show="$ctrl.index > 0" data-ng-click="$ctrl.move($ctrl.index, -1)" class="dropdown-item">
13-
<span class="fa fa-arrow-up"></span> Move Up
14-
</a>
15-
<a href data-ng-show="$ctrl.index+1 < $ctrl.numExamples()" data-ng-click="$ctrl.move($ctrl.index, 1)" class="dropdown-item">
16-
<span class="fa fa-arrow-down"></span> Move Down
17-
</a>
18-
</div>
3+
<div data-ng-if="$ctrl.control.rights.canEditEntry() && $ctrl.isAtEditorEntry()" class="d-flex align-items-center">
4+
Example <span class="notranslate pl-1">{{$ctrl.index+1}}</span>
5+
6+
<span class="flex-grow"></span>
7+
8+
<div class="mr-4">
9+
<a href data-ng-show="$ctrl.index > 0" data-ng-click="$ctrl.move($ctrl.index, -1)" class="mr-1" role="button">
10+
<span class="fa fa-arrow-up"></span>
11+
</a>
12+
<a href data-ng-show="$ctrl.index+1 < $ctrl.numExamples()" data-ng-click="$ctrl.move($ctrl.index, 1)" class="mr-1" role="button">
13+
<span class="fa fa-arrow-down"></span>
14+
</a>
15+
</div>
16+
17+
<a href data-ng-click="$ctrl.remove($ctrl.index)" class="text-danger" role="button">
18+
<span class="fa fa-trash"></span>
19+
</a>
1920
</div>
20-
Example <span class="notranslate">{{$ctrl.index+1}}</span>
2121
</div>
2222
<div class="card-body">
2323
<dc-fieldrepeat config="$ctrl.config" model="$ctrl.model" control="$ctrl.control" parent-context-guid="$ctrl.contextGuid"></dc-fieldrepeat>

src/angular-app/languageforge/lexicon/editor/field/dc-sense.component.html

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
<div class="dc-sense card">
22
<div class="meaning-label card-header">
3-
<div data-ng-if="$ctrl.control.rights.canEditEntry() && $ctrl.isAtEditorEntry()"
4-
class="dropdown float-right" uib-dropdown>
5-
<a class="btn ellipsis-menu-toggle pui-no-caret" uib-dropdown-toggle>
6-
<span class="fa fa-ellipsis-v"></span>
7-
</a>
8-
<div class="dropdown-menu-right" uib-dropdown-menu>
9-
<a href data-ng-click="$ctrl.remove($ctrl.index)" class="dropdown-item">
10-
<span class="fa fa-trash"></span> Delete Meaning {{$ctrl.index+1}}
11-
</a>
12-
<a href data-ng-show="$ctrl.index > 0" data-ng-click="$ctrl.move($ctrl.index, -1)" class="dropdown-item">
13-
<span class="fa fa-arrow-up"></span> Move Up
14-
</a>
15-
<a href data-ng-show="$ctrl.index+1 < $ctrl.numSenses()" data-ng-click="$ctrl.move($ctrl.index, 1)" class="dropdown-item">
16-
<span class="fa fa-arrow-down"></span> Move Down
17-
</a>
18-
</div>
3+
<div data-ng-if="$ctrl.control.rights.canEditEntry() && $ctrl.isAtEditorEntry()" class="d-flex align-items-center">
4+
Meaning <span class="notranslate pl-1">{{$ctrl.index+1}}</span>
5+
6+
<span class="flex-grow"></span>
7+
8+
<div class="mr-4">
9+
<a href data-ng-show="$ctrl.index > 0" data-ng-click="$ctrl.move($ctrl.index, -1)" class="mr-1" role="button">
10+
<span class="fa fa-arrow-up"></span>
11+
</a>
12+
<a href data-ng-show="$ctrl.index+1 < $ctrl.numSenses()" data-ng-click="$ctrl.move($ctrl.index, 1)" class="mr-1" role="button">
13+
<span class="fa fa-arrow-down"></span>
14+
</a>
15+
</div>
16+
17+
<a href data-ng-click="$ctrl.remove($ctrl.index)" class="text-danger" role="button">
18+
<span class="fa fa-trash"></span>
19+
</a>
1920
</div>
20-
Meaning <span class="notranslate">{{$ctrl.index+1}}</span>
2121
</div>
2222
<div class="card-body">
2323
<dc-fieldrepeat config="$ctrl.config" model="$ctrl.model" control="$ctrl.control" parent-context-guid="$ctrl.contextGuid"></dc-fieldrepeat>

0 commit comments

Comments
 (0)