Skip to content

Commit

Permalink
Fix DB_NAME conflict
Browse files Browse the repository at this point in the history
  • Loading branch information
warrenchristian1telus committed Sep 9, 2024
1 parent 20b6888 commit 34db96b
Show file tree
Hide file tree
Showing 13 changed files with 83 additions and 77 deletions.
10 changes: 5 additions & 5 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ on:

workflow_call:
secrets:
DB_NAME:
DB_POD_NAME:
required: true
DB_USER:
required: true
Expand All @@ -60,12 +60,12 @@ jobs:
DEPLOY_NAMESPACE: ${{ env.OPENSHIFT_DEPLOY_PROJECT }}-${{ env.BRANCH }}
IMAGE_REPO: ${{ env.IMAGE_REPO }}
BUILD_NAMESPACE: ${{ env.OPENSHIFT_DEPLOY_PROJECT }}-${{ env.BRANCH }}
DB_NAME: ${{ env.DB_NAME }}
DB_POD_NAME: ${{ env.DB_POD_NAME }}
DATABASE_NAME: ${{ env.DATABASE_NAME }}
WEB_NAME: ${{ env.WEB_NAME }}
WEB_IMAGE: ${{ env.WEB_IMAGE }}
DB_HOST: ${{ env.DB_HOST }}
DB_PORT: ${{ env.DB_PORT }}
DB_NAME: ${{ env.DB_NAME }}
DB_IMAGE: ${{ env.DB_IMAGE }}
PHP_NAME: ${{ env.PHP_NAME }}
CRON_NAME: ${{ env.CRON_NAME }}
Expand Down Expand Up @@ -162,7 +162,7 @@ jobs:
BRANCH: ${{ needs.checkEnv.outputs.BRANCH }}
BUILD_NAMESPACE: ${{ needs.checkEnv.outputs.BUILD_NAMESPACE }}
DEPLOY_NAMESPACE: ${{ needs.checkEnv.outputs.DEPLOY_NAMESPACE }}
DB_NAME: ${{ needs.checkEnv.outputs.DB_NAME }}
DB_POD_NAME: ${{ needs.checkEnv.outputs.DB_POD_NAME }}
WEB_NAME: ${{ needs.checkEnv.outputs.WEB_NAME }}
PHP_NAME: ${{ needs.checkEnv.outputs.PHP_NAME }}
CRON_NAME: ${{ needs.checkEnv.outputs.CRON_NAME }}
Expand All @@ -186,7 +186,7 @@ jobs:
DB_IMAGE: ${{ needs.checkEnv.outputs.DB_IMAGE }}
DB_HOST: ${{ needs.checkEnv.outputs.DB_HOST }}
DB_PORT: ${{ needs.checkEnv.outputs.DB_PORT }}
DB_NAME: ${{ needs.checkEnv.outputs.DB_NAME }}
DB_POD_NAME: ${{ needs.checkEnv.outputs.DB_POD_NAME }}
DB_BACKUP_DEPLOYMENT_NAME: ${{ needs.checkEnv.outputs.DB_BACKUP_DEPLOYMENT_NAME }}
DB_BACKUP_DEPLOYMENT_FULL_NAME: ${{ needs.checkEnv.outputs.DB_BACKUP_DEPLOYMENT_FULL_NAME }}
BACKUP_IMAGE: ${{ needs.checkEnv.outputs.BACKUP_IMAGE }}
Expand Down
26 changes: 13 additions & 13 deletions .github/workflows/cleanup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ on:
DEPLOY_NAMESPACE:
required: true
type: string
DB_NAME:
DB_POD_NAME:
required: true
type: string
WEB_NAME:
Expand Down Expand Up @@ -117,28 +117,28 @@ jobs:
oc delete configmap ${{ inputs.REDIS_NAME }}-redis-cluster-scripts
fi
- name: 🧹️ Clean ${{ inputs.DB_NAME }}
- name: 🧹️ Clean ${{ inputs.DB_POD_NAME }}
run: |
configmap_name="${{ inputs.DB_NAME }}-config"
if [[ `oc describe sts ${{ inputs.DB_NAME }} 2>&1` =~ "NotFound" ]]; then
echo "${{ inputs.DB_NAME }} NOT FOUND: Skipping..."
configmap_name="${{ inputs.DB_POD_NAME }}-config"
if [[ `oc describe sts ${{ inputs.DB_POD_NAME }} 2>&1` =~ "NotFound" ]]; then
echo "${{ inputs.DB_POD_NAME }} NOT FOUND: Skipping..."
else
echo "${{ inputs.DB_NAME }} FOUND: Cleaning..."
oc scale sts/${{ inputs.DB_NAME }} --replicas=0
oc delete sts/${{ inputs.DB_NAME }}
echo "${{ inputs.DB_POD_NAME }} FOUND: Cleaning..."
oc scale sts/${{ inputs.DB_POD_NAME }} --replicas=0
oc delete sts/${{ inputs.DB_POD_NAME }}
# for i in 0 1 2; do
# if ! [[ `oc describe pvc datadir-${{ inputs.DB_NAME }}-$i 2>&1` =~ "NotFound" ]]; then
# kubectl delete pvc datadir-${{ inputs.DB_NAME }}-$i;
# if ! [[ `oc describe pvc datadir-${{ inputs.DB_POD_NAME }}-$i 2>&1` =~ "NotFound" ]]; then
# kubectl delete pvc datadir-${{ inputs.DB_POD_NAME }}-$i;
# else
# echo "pvc datadir-${{ inputs.DB_NAME }}-$i NOT FOUND: Skipping..."
# echo "pvc datadir-${{ inputs.DB_POD_NAME }}-$i NOT FOUND: Skipping..."
# fi
# done
fi
if ! [[ `oc describe configmap $configmap_name 2>&1` =~ "NotFound" ]]; then
oc delete configmap $configmap_name
fi
if ! [[ `oc describe service ${{ inputs.DB_NAME }} 2>&1` =~ "NotFound" ]]; then
oc delete service ${{ inputs.DB_NAME }}
if ! [[ `oc describe service ${{ inputs.DB_POD_NAME }} 2>&1` =~ "NotFound" ]]; then
oc delete service ${{ inputs.DB_POD_NAME }}
fi
- name: 🧹️ Clean ${{ inputs.WEB_NAME }}
Expand Down
17 changes: 10 additions & 7 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@ on:
DB_PORT:
required: true
type: string
DB_NAME:
DB_POD_NAME:
required: true
type: string
DATABASE_NAME:
required: true
type: string
CRON_IMAGE:
Expand Down Expand Up @@ -130,7 +133,7 @@ jobs:
BACKUP_HELM_CHART: ${{ inputs.BACKUP_HELM_CHART }}
DB_BACKUP_IMAGE: ${{ inputs.BACKUP_IMAGE }}
DB_HOST: ${{ inputs.DB_HOST }}
DB_NAME: ${{ secrets.DB_NAME }}
DATABASE_NAME: ${{ inputs.DATABASE_NAME }}
DB_PORT: ${{ inputs.DB_PORT }}

# Deploy Redis
Expand All @@ -144,24 +147,24 @@ jobs:
REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }}
REPLICAS: 3

- name: Deploy Database StatefulSet (${{ inputs.DB_NAME }})
- name: Deploy Database StatefulSet (${{ inputs.DB_POD_NAME }})
id: deploy_database
if: success()
run: bash ./openshift/scripts/deploy-database.sh
env:
IMAGE_REPO: ${{ inputs.IMAGE_REPO }}
DB_IMAGE: ${{ inputs.DB_IMAGE }}
DEPLOY_NAMESPACE: ${{ inputs.DEPLOY_NAMESPACE }}
DB_NAME: ${{ inputs.DB_NAME }}
DB_POD_NAME: ${{ inputs.DB_POD_NAME }}
DB_BACKUP_DEPLOYMENT_FULL_NAME: ${{ inputs.DB_BACKUP_DEPLOYMENT_FULL_NAME }}
DB_NAME: ${{ secrets.DB_NAME }}
DB_POD_NAME: ${{ secrets.DB_POD_NAME }}

- name: Deploy Moodle Template and Run Upgrades
if: success()
run: bash ./openshift/scripts/deploy-template.sh
env:
APP: ${{ inputs.APP }}
DB_NAME: ${{ secrets.DB_NAME }}
DB_POD_NAME: ${{ secrets.DB_POD_NAME }}
DB_USER: ${{ secrets.DB_USER }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
BUILD_TAG: ${{ inputs.OPENSHIFT_DEPLOY_PROJECT }}-${{ github.ref_name }}
Expand All @@ -172,7 +175,7 @@ jobs:
WEB_NAME: ${{ inputs.WEB_NAME }}
WEB_IMAGE: ${{ secrets.ARTIFACTORY_URL }}/${{ inputs.WEB_IMAGE }}
PHP_NAME: ${{ inputs.PHP_NAME }}
DB_NAME: ${{ inputs.DB_NAME }}
DB_POD_NAME: ${{ inputs.DB_POD_NAME }}
CRON_NAME: ${{ inputs.CRON_NAME }}
CRON_IMAGE: ${{ inputs.CRON_IMAGE }}
REDIS_NAME: ${{ inputs.REDIS_NAME }}
Expand Down
18 changes: 9 additions & 9 deletions app/MicrosoftGraph/adminer_with_otp/adminer.php
Original file line number Diff line number Diff line change
Expand Up @@ -981,7 +981,7 @@ enum_input($T,$Ha,$o,$Y,$xc=null){global$b;preg_match_all("~'((?:[^']|'')*)'~",$
fields($Q){return
fields_from_edit();}function
found_rows($R,$Z){global$g;return$g->_db->selectCollection($_GET["select"])->count($Z);}$uf=array("=");}elseif(class_exists('MongoDB\Driver\Manager')){class
Min_DB{var$extension="MongoDB",$server_info=MONGODB_VERSION,$affected_rows,$error,$last_id;var$_link;var$_db,$_db_name;function
Min_DB{var$extension="MongoDB",$server_info=MONGODB_VERSION,$affected_rows,$error,$last_id;var$_link;var$_db,$_DB_POD_NAME;function
connect($Ji,$xf){$gb='MongoDB\Driver\Manager';$this->_link=new$gb($Ji,$xf);$this->executeCommand('admin',array('ping'=>1));}function
executeCommand($l,$pb){$gb='MongoDB\Driver\Command';try{return$this->_link->executeCommand($l,new$gb($pb));}catch(Exception$pc){$this->error=$pc->getMessage();return
array();}}function
Expand All @@ -990,7 +990,7 @@ enum_input($T,$Ha,$o,$Y,$xc=null){global$b;preg_match_all("~'((?:[^']|'')*)'~",$
false;}}function
query($G){return
false;}function
select_db($j){$this->_db_name=$j;return
select_db($j){$this->_DB_POD_NAME=$j;return
true;}function
quote($P){return$P;}}class
Min_Result{var$num_rows,$_rows=array(),$_offset=0,$_charset=array();function
Expand All @@ -1008,22 +1008,22 @@ enum_input($T,$Ha,$o,$Y,$xc=null){global$b;preg_match_all("~'((?:[^']|'')*)'~",$
select($Q,$L,$Z,$qd,$zf=array(),$_=1,$E=0,$mg=false){global$g;$L=($L==array("*")?array():array_fill_keys($L,1));if(count($L)&&!isset($L['_id']))$L['_id']=0;$Z=where_to_query($Z);$uh=array();foreach($zf
as$X){$X=preg_replace('~ DESC$~','',$X,1,$Gb);$uh[$X]=($Gb?-1:1);}if(isset($_GET['limit'])&&is_numeric($_GET['limit'])&&$_GET['limit']>0)$_=$_GET['limit'];$_=min(200,max(1,(int)$_));$rh=$E*$_;$gb='MongoDB\Driver\Query';try{return
new
Min_Result($g->_link->executeQuery("$g->_db_name.$Q",new$gb($Z,array('projection'=>$L,'limit'=>$_,'skip'=>$rh,'sort'=>$uh))));}catch(Exception$pc){$g->error=$pc->getMessage();return
Min_Result($g->_link->executeQuery("$g->_DB_POD_NAME.$Q",new$gb($Z,array('projection'=>$L,'limit'=>$_,'skip'=>$rh,'sort'=>$uh))));}catch(Exception$pc){$g->error=$pc->getMessage();return
false;}}function
update($Q,$N,$wg,$_=0,$hh="\n"){global$g;$l=$g->_db_name;$Z=sql_query_where_parser($wg);$gb='MongoDB\Driver\BulkWrite';$Wa=new$gb(array());if(isset($N['_id']))unset($N['_id']);$Ig=array();foreach($N
update($Q,$N,$wg,$_=0,$hh="\n"){global$g;$l=$g->_DB_POD_NAME;$Z=sql_query_where_parser($wg);$gb='MongoDB\Driver\BulkWrite';$Wa=new$gb(array());if(isset($N['_id']))unset($N['_id']);$Ig=array();foreach($N
as$z=>$Y){if($Y=='NULL'){$Ig[$z]=1;unset($N[$z]);}}$Ii=array('$set'=>$N);if(count($Ig))$Ii['$unset']=$Ig;$Wa->update($Z,$Ii,array('upsert'=>false));return$g->executeBulkWrite("$l.$Q",$Wa,'getModifiedCount');}function
delete($Q,$wg,$_=0){global$g;$l=$g->_db_name;$Z=sql_query_where_parser($wg);$gb='MongoDB\Driver\BulkWrite';$Wa=new$gb(array());$Wa->delete($Z,array('limit'=>$_));return$g->executeBulkWrite("$l.$Q",$Wa,'getDeletedCount');}function
insert($Q,$N){global$g;$l=$g->_db_name;$gb='MongoDB\Driver\BulkWrite';$Wa=new$gb(array());if($N['_id']=='')unset($N['_id']);$Wa->insert($N);return$g->executeBulkWrite("$l.$Q",$Wa,'getInsertedCount');}}function
delete($Q,$wg,$_=0){global$g;$l=$g->_DB_POD_NAME;$Z=sql_query_where_parser($wg);$gb='MongoDB\Driver\BulkWrite';$Wa=new$gb(array());$Wa->delete($Z,array('limit'=>$_));return$g->executeBulkWrite("$l.$Q",$Wa,'getDeletedCount');}function
insert($Q,$N){global$g;$l=$g->_DB_POD_NAME;$gb='MongoDB\Driver\BulkWrite';$Wa=new$gb(array());if($N['_id']=='')unset($N['_id']);$Wa->insert($N);return$g->executeBulkWrite("$l.$Q",$Wa,'getInsertedCount');}}function
get_databases($dd){global$g;$I=array();foreach($g->executeCommand('admin',array('listDatabases'=>1))as$Ub){foreach($Ub->databases
as$l)$I[]=$l->name;}return$I;}function
count_tables($k){$I=array();return$I;}function
tables_list(){global$g;$mb=array();foreach($g->executeCommand($g->_db_name,array('listCollections'=>1))as$H)$mb[$H->name]='table';return$mb;}function
tables_list(){global$g;$mb=array();foreach($g->executeCommand($g->_DB_POD_NAME,array('listCollections'=>1))as$H)$mb[$H->name]='table';return$mb;}function
drop_databases($k){return
false;}function
indexes($Q,$h=null){global$g;$I=array();foreach($g->executeCommand($g->_db_name,array('listIndexes'=>$Q))as$w){$cc=array();$f=array();foreach(get_object_vars($w->key)as$e=>$T){$cc[]=($T==-1?'1':null);$f[]=$e;}$I[$w->name]=array("type"=>($w->name=="_id_"?"PRIMARY":(isset($w->unique)?"UNIQUE":"INDEX")),"columns"=>$f,"lengths"=>array(),"descs"=>$cc,);}return$I;}function
indexes($Q,$h=null){global$g;$I=array();foreach($g->executeCommand($g->_DB_POD_NAME,array('listIndexes'=>$Q))as$w){$cc=array();$f=array();foreach(get_object_vars($w->key)as$e=>$T){$cc[]=($T==-1?'1':null);$f[]=$e;}$I[$w->name]=array("type"=>($w->name=="_id_"?"PRIMARY":(isset($w->unique)?"UNIQUE":"INDEX")),"columns"=>$f,"lengths"=>array(),"descs"=>$cc,);}return$I;}function
fields($Q){global$m;$p=fields_from_edit();if(!$p){$H=$m->select($Q,array("*"),null,null,array(),10);if($H){while($J=$H->fetch_assoc()){foreach($J
as$z=>$X){$J[$z]=null;$p[$z]=array("field"=>$z,"type"=>"string","null"=>($z!=$m->primary),"auto_increment"=>($z==$m->primary),"privileges"=>array("insert"=>1,"select"=>1,"update"=>1,),);}}}}return$p;}function
found_rows($R,$Z){global$g;$Z=where_to_query($Z);$mi=$g->executeCommand($g->_db_name,array('count'=>$R['Name'],'query'=>$Z))->toArray();return$mi[0]->n;}function
found_rows($R,$Z){global$g;$Z=where_to_query($Z);$mi=$g->executeCommand($g->_DB_POD_NAME,array('count'=>$R['Name'],'query'=>$Z))->toArray();return$mi[0]->n;}function
sql_query_where_parser($wg){$wg=preg_replace('~^\sWHERE \(?\(?(.+?)\)?\)?$~','\1',$wg);$ij=explode(' AND ',$wg);$jj=explode(') OR (',$wg);$Z=array();foreach($ij
as$gj)$Z[]=trim($gj);if(count($jj)==1)$jj=array();elseif(count($jj)>1)$Z=array();return
where_to_query($Z,$jj);}function
Expand Down
2 changes: 1 addition & 1 deletion config/database.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
// 'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'db'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_NAME', 'performance'),
'database' => env('DATABASE_NAME', 'performance'),
'username' => env('DB_USER', 'performance'),
'password' => env('DB_PASSWORD', 'performance'),
'unix_socket' => env('DB_SOCKET', ''),
Expand Down
8 changes: 4 additions & 4 deletions devops/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export TEMPLATE_FILE_NAME := $(or $(TEMPLATE_FILE_NAME), $$FILE)
export BRANCH := $(or $(BRANCH), dev)
export BUILD_NAMESPACE := $(or $(BUILD_NAMESPACE), $$BUILD_NS)
export DOMAIN := $(or $(DOMAIN), apps.silver.devops.gov.bc.ca)
export DB_NAME := $(or $(DB_NAME), court-interpreter-scheduling)
export DB_POD_NAME := $(or $(DB_POD_NAME), court-interpreter-scheduling)
export KC_AUTH_URL := $(or $(KC_AUTH_URL), https://oidc.gov.bc.ca/auth/)
export KC_REALM := $(or $(KC_REALM), joxo7v8f)

Expand Down Expand Up @@ -47,7 +47,7 @@ define DB_SERVICE_NAME
"patroni-master"
endef

define TEMPLATE_PATH
define TEMPLATE_PATH
"./openshift/$(TEMPLATE_FILE_NAME)"
endef

Expand All @@ -68,7 +68,7 @@ define APP
endef

# The front-end when routed through the justice proxy
define APP_PROXIED
define APP_PROXIED
"proxied-app-$(APP_NAME)"
endef

Expand Down Expand Up @@ -136,7 +136,7 @@ print-status:
@echo " +---------------------------------------------------------+ "

init-project:
@echo "Run initial set-up for the project, including network security\n"
@echo "Run initial set-up for the project, including network security\n"
@oc process -f openshift/networkpolicy.yml -p NAMESPACE=$$(oc project --short) | oc apply -f -
@oc -n $(BUILD_NAMESPACE) policy add-role-to-group system:image-puller system:serviceaccounts:$$(oc project --short)

Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ services:
- example.versions.env
environment:
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: YES
MARIADB_DATABASE: ${DB_NAME:-performance}
MARIADB_DATABASE: ${DB_POD_NAME:-performance}
MARIADB_USER: ${DB_USER:-performance}
MARIADB_PASSWORD: ${DB_PASSWORD:-performance}
MARIADB_AUTO_UPGRADE: 1
Expand Down
4 changes: 2 additions & 2 deletions example.env
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
# Actual images / version are in fle: example.versions.env
APP_NAME=performance
PHP_NAME=php
DB_NAME=db
DB_POD_NAME=db
CRON_NAME=cron
WEB_NAME=web
REDIS_NAME=redis
Expand All @@ -39,7 +39,7 @@ LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_NAME=performance
DATABASE_NAME=performance
DB_USER=performance
DB_PASSWORD=performance

Expand Down
12 changes: 7 additions & 5 deletions openshift/app/performance-dc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ objects:
metadata:
name: '${APP_NAME}-secrets'
stringData:
database-name: '${DB_NAME}'
database-name: '${DATABASE_NAME}'
database-password: '${DB_PASSWORD}'
database-root-password: '${DB_ROOT_PASSWORD}'
database-user: '${DB_USER}'
Expand Down Expand Up @@ -140,8 +140,10 @@ objects:
value: '${DB_PORT}'
- name: PROJECT_NAMESPACE
value: '${PROJECT_NAMESPACE}'
- name: DB_NAME
value: '${DB_NAME}'
- name: DB_POD_NAME
value: '${DB_POD_NAME}'
- name: DATABASE_NAME
value: '${DATABASE_NAME}'
- name: DB_USER
valueFrom:
secretKeyRef:
Expand Down Expand Up @@ -263,9 +265,9 @@ parameters:
value: '${PROJECT_NAMESPACE}'
- description: Name of the MySQL database accessed.
displayName: MySQL Database Name
name: DB_NAME
name: DB_POD_NAME
required: true
value: '${DB_NAME}'
value: '${DB_POD_NAME}'
- description: Username for MySQL user that will be used for accessing the database.
displayName: MySQL Connection Username
name: DB_USER
Expand Down
3 changes: 2 additions & 1 deletion openshift/scripts/build-docker-image.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ echo "BUILIDING $DEPLOYMENT_NAME:$BRANCH"
-p IMAGE_TAG=$BUILD_NAMESPACE \
-p SOURCE_REPOSITORY_URL=$SOURCE_REPOSITORY_URL \
-p DOCKER_FILE_PATH=$DOCKER_FILE_PATH \
-p DB_NAME: $DB_NAME \
-p DB_POD_NAME: $DB_POD_NAME \
-p DATABASE_NAME: $DATABASE_NAME \
-p DB_USER: $DB_USER \
-p DB_PASSWORD: $DB_PASSWORD \
-p PHP_INI_ENVIRONMENT=$PHP_INI_ENVIRONMENT \
Expand Down
4 changes: 2 additions & 2 deletions openshift/scripts/deploy-database-backups.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ if helm list -q | grep -q "^$DB_BACKUP_DEPLOYMENT_NAME$"; then
# Create a temporary values file with the updated backupConfig
cat <<EOF > temp-values.yaml
backupConfig: |
mariadb=$DB_HOST:$DB_PORT/$DB_NAME
mariadb=$DB_HOST:$DB_PORT/$DATABASE_NAME
0 1 * * * default ./backup.sh -s
0 4 * * * default ./backup.sh -s -v all
EOF
Expand Down Expand Up @@ -48,7 +48,7 @@ else
storageClassName: netapp-file-standard
backupConfig: |
mariadb=$DB_HOST:$DB_PORT/$DB_NAME
mariadb=$DB_HOST:$DB_PORT/$DATABASE_NAME
0 1 * * * default ./backup.sh -s
0 4 * * * default ./backup.sh -s -v all
Expand Down
Loading

0 comments on commit 34db96b

Please sign in to comment.