Kubernetes MySql image persistent volume is non empty during init
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I am working through the persistent disks tutorial found here while also creating it as a StatefulSet instead of a deployment.
When I run the yaml file into GKE the database fails to start, looking at the logs it has the following error.
[ERROR] --initialize specified but the data directory has files in it. Aborting.
Is it possible to inspect the volume created to see what is in the directory? Otherwise, what am I doing wrong that is causing the disk to be non empty?
Thanks
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: datalayer-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
---
apiVersion: v1
kind: Service
metadata:
name: datalayer-svc
labels:
app: myapplication
spec:
ports:
- port: 80
name: dbadmin
clusterIP: None
selector:
app: database
---
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
name: datalayer
spec:
selector:
matchLabels:
app: myapplication
serviceName: "datalayer-svc"
replicas: 1
template:
metadata:
labels:
app: myapplication
spec:
terminationGracePeriodSeconds: 10
containers:
- name: database
image: mysql:5.7.22
env:
- name: "MYSQL_ROOT_PASSWORD"
valueFrom:
secretKeyRef:
name: mysql-root-password
key: password
- name: "MYSQL_DATABASE"
value: "appdatabase"
- name: "MYSQL_USER"
value: "app_user"
- name: "MYSQL_PASSWORD"
value: "app_password"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: datalayer-pv
mountPath: /var/lib/mysql
volumes:
- name: datalayer-pv
persistentVolumeClaim:
claimName: datalayer-pvc
mysql docker kubernetes gke
add a comment |
I am working through the persistent disks tutorial found here while also creating it as a StatefulSet instead of a deployment.
When I run the yaml file into GKE the database fails to start, looking at the logs it has the following error.
[ERROR] --initialize specified but the data directory has files in it. Aborting.
Is it possible to inspect the volume created to see what is in the directory? Otherwise, what am I doing wrong that is causing the disk to be non empty?
Thanks
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: datalayer-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
---
apiVersion: v1
kind: Service
metadata:
name: datalayer-svc
labels:
app: myapplication
spec:
ports:
- port: 80
name: dbadmin
clusterIP: None
selector:
app: database
---
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
name: datalayer
spec:
selector:
matchLabels:
app: myapplication
serviceName: "datalayer-svc"
replicas: 1
template:
metadata:
labels:
app: myapplication
spec:
terminationGracePeriodSeconds: 10
containers:
- name: database
image: mysql:5.7.22
env:
- name: "MYSQL_ROOT_PASSWORD"
valueFrom:
secretKeyRef:
name: mysql-root-password
key: password
- name: "MYSQL_DATABASE"
value: "appdatabase"
- name: "MYSQL_USER"
value: "app_user"
- name: "MYSQL_PASSWORD"
value: "app_password"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: datalayer-pv
mountPath: /var/lib/mysql
volumes:
- name: datalayer-pv
persistentVolumeClaim:
claimName: datalayer-pvc
mysql docker kubernetes gke
add a comment |
I am working through the persistent disks tutorial found here while also creating it as a StatefulSet instead of a deployment.
When I run the yaml file into GKE the database fails to start, looking at the logs it has the following error.
[ERROR] --initialize specified but the data directory has files in it. Aborting.
Is it possible to inspect the volume created to see what is in the directory? Otherwise, what am I doing wrong that is causing the disk to be non empty?
Thanks
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: datalayer-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
---
apiVersion: v1
kind: Service
metadata:
name: datalayer-svc
labels:
app: myapplication
spec:
ports:
- port: 80
name: dbadmin
clusterIP: None
selector:
app: database
---
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
name: datalayer
spec:
selector:
matchLabels:
app: myapplication
serviceName: "datalayer-svc"
replicas: 1
template:
metadata:
labels:
app: myapplication
spec:
terminationGracePeriodSeconds: 10
containers:
- name: database
image: mysql:5.7.22
env:
- name: "MYSQL_ROOT_PASSWORD"
valueFrom:
secretKeyRef:
name: mysql-root-password
key: password
- name: "MYSQL_DATABASE"
value: "appdatabase"
- name: "MYSQL_USER"
value: "app_user"
- name: "MYSQL_PASSWORD"
value: "app_password"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: datalayer-pv
mountPath: /var/lib/mysql
volumes:
- name: datalayer-pv
persistentVolumeClaim:
claimName: datalayer-pvc
mysql docker kubernetes gke
I am working through the persistent disks tutorial found here while also creating it as a StatefulSet instead of a deployment.
When I run the yaml file into GKE the database fails to start, looking at the logs it has the following error.
[ERROR] --initialize specified but the data directory has files in it. Aborting.
Is it possible to inspect the volume created to see what is in the directory? Otherwise, what am I doing wrong that is causing the disk to be non empty?
Thanks
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: datalayer-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
---
apiVersion: v1
kind: Service
metadata:
name: datalayer-svc
labels:
app: myapplication
spec:
ports:
- port: 80
name: dbadmin
clusterIP: None
selector:
app: database
---
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
name: datalayer
spec:
selector:
matchLabels:
app: myapplication
serviceName: "datalayer-svc"
replicas: 1
template:
metadata:
labels:
app: myapplication
spec:
terminationGracePeriodSeconds: 10
containers:
- name: database
image: mysql:5.7.22
env:
- name: "MYSQL_ROOT_PASSWORD"
valueFrom:
secretKeyRef:
name: mysql-root-password
key: password
- name: "MYSQL_DATABASE"
value: "appdatabase"
- name: "MYSQL_USER"
value: "app_user"
- name: "MYSQL_PASSWORD"
value: "app_password"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: datalayer-pv
mountPath: /var/lib/mysql
volumes:
- name: datalayer-pv
persistentVolumeClaim:
claimName: datalayer-pvc
mysql docker kubernetes gke
mysql docker kubernetes gke
edited Oct 2 '18 at 3:59
Morgan Philo
asked Oct 2 '18 at 3:36
Morgan PhiloMorgan Philo
233
233
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
This issue could be caused by the lost+found
directory on the filesystem of the PersistentVolume.
I was able to verify this by adding a k8s.gcr.io/busybox
container (in PVC set accessModes: [ReadWriteMany]
, OR comment out the database
container):
- name: init
image: "k8s.gcr.io/busybox"
command: ["/bin/sh","-c","ls -l /var/lib/mysql"]
volumeMounts:
- name: database
mountPath: "/var/lib/mysql"
There are a few potential workarounds...
Most preferable is to use a subPath
on the volumeMounts
object. This uses a subdirectory of the PersistentVolume, which should be empty at creation time, instead of the volume root:
volumeMounts:
- name: database
mountPath: "/var/lib/mysql"
subPath: mysql
Less preferable workarounds include:
- Use a one-time container to
rm -rf /var/lib/mysql/lost+found
(not a great solution, because the directory is managed by the filesystem and is likely to re-appear) - Use
mysql:5
image, and addargs: ["--ignore-db-dir=lost+found"]
to the container (this option was removed in mysql 8) - Use
mariadb
image instead ofmysql
More details might be available at docker-library/mysql issues: #69 and #186
Thank you for the subPath solution.... wasted a good 2 hours on this irritation. Using mySql 8.0.13 which got rid of the ignore-db-dir option... so that didn't work for me... and removing the lost+found is def not a good idea.
– David
Jan 21 at 19:24
add a comment |
You would usually see if your volumes were mounted with:
kubectl get pods # gets you all the pods on the default namespace
# and
kubectl describe pod <pod-created-by-your-statefulset>
Then you can these commands to check on your PVs and PVCs
kubectl get pv # gets all the PVs on the default namespace
kubectl get pvc # same for PVCs
kubectl describe pv <pv-name>
kubectl describe pvc <pvc-name>
Then you can to the GCP console on disks and see if your disks got created:
The disks are there, it it possible to see the contents of the disk? I would really like to get to the bottom of why the mysql docker image doesnt start
– Morgan Philo
Oct 2 '18 at 3:59
Yes, you can add it to a VM in stopped state, then start it and mount it on its local filesystem.
– Rico
Oct 2 '18 at 4:06
thanks Rico. I have connected to the VM and the mount points for the drives is all the same.{ /home/kubernetes/containerized_mounter/rootfs/var/lib/} so I am a little lost as to how this works. Are you able to run my yaml script and see where I am going wrong?
– Morgan Philo
Oct 2 '18 at 6:40
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f52601684%2fkubernetes-mysql-image-persistent-volume-is-non-empty-during-init%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
This issue could be caused by the lost+found
directory on the filesystem of the PersistentVolume.
I was able to verify this by adding a k8s.gcr.io/busybox
container (in PVC set accessModes: [ReadWriteMany]
, OR comment out the database
container):
- name: init
image: "k8s.gcr.io/busybox"
command: ["/bin/sh","-c","ls -l /var/lib/mysql"]
volumeMounts:
- name: database
mountPath: "/var/lib/mysql"
There are a few potential workarounds...
Most preferable is to use a subPath
on the volumeMounts
object. This uses a subdirectory of the PersistentVolume, which should be empty at creation time, instead of the volume root:
volumeMounts:
- name: database
mountPath: "/var/lib/mysql"
subPath: mysql
Less preferable workarounds include:
- Use a one-time container to
rm -rf /var/lib/mysql/lost+found
(not a great solution, because the directory is managed by the filesystem and is likely to re-appear) - Use
mysql:5
image, and addargs: ["--ignore-db-dir=lost+found"]
to the container (this option was removed in mysql 8) - Use
mariadb
image instead ofmysql
More details might be available at docker-library/mysql issues: #69 and #186
Thank you for the subPath solution.... wasted a good 2 hours on this irritation. Using mySql 8.0.13 which got rid of the ignore-db-dir option... so that didn't work for me... and removing the lost+found is def not a good idea.
– David
Jan 21 at 19:24
add a comment |
This issue could be caused by the lost+found
directory on the filesystem of the PersistentVolume.
I was able to verify this by adding a k8s.gcr.io/busybox
container (in PVC set accessModes: [ReadWriteMany]
, OR comment out the database
container):
- name: init
image: "k8s.gcr.io/busybox"
command: ["/bin/sh","-c","ls -l /var/lib/mysql"]
volumeMounts:
- name: database
mountPath: "/var/lib/mysql"
There are a few potential workarounds...
Most preferable is to use a subPath
on the volumeMounts
object. This uses a subdirectory of the PersistentVolume, which should be empty at creation time, instead of the volume root:
volumeMounts:
- name: database
mountPath: "/var/lib/mysql"
subPath: mysql
Less preferable workarounds include:
- Use a one-time container to
rm -rf /var/lib/mysql/lost+found
(not a great solution, because the directory is managed by the filesystem and is likely to re-appear) - Use
mysql:5
image, and addargs: ["--ignore-db-dir=lost+found"]
to the container (this option was removed in mysql 8) - Use
mariadb
image instead ofmysql
More details might be available at docker-library/mysql issues: #69 and #186
Thank you for the subPath solution.... wasted a good 2 hours on this irritation. Using mySql 8.0.13 which got rid of the ignore-db-dir option... so that didn't work for me... and removing the lost+found is def not a good idea.
– David
Jan 21 at 19:24
add a comment |
This issue could be caused by the lost+found
directory on the filesystem of the PersistentVolume.
I was able to verify this by adding a k8s.gcr.io/busybox
container (in PVC set accessModes: [ReadWriteMany]
, OR comment out the database
container):
- name: init
image: "k8s.gcr.io/busybox"
command: ["/bin/sh","-c","ls -l /var/lib/mysql"]
volumeMounts:
- name: database
mountPath: "/var/lib/mysql"
There are a few potential workarounds...
Most preferable is to use a subPath
on the volumeMounts
object. This uses a subdirectory of the PersistentVolume, which should be empty at creation time, instead of the volume root:
volumeMounts:
- name: database
mountPath: "/var/lib/mysql"
subPath: mysql
Less preferable workarounds include:
- Use a one-time container to
rm -rf /var/lib/mysql/lost+found
(not a great solution, because the directory is managed by the filesystem and is likely to re-appear) - Use
mysql:5
image, and addargs: ["--ignore-db-dir=lost+found"]
to the container (this option was removed in mysql 8) - Use
mariadb
image instead ofmysql
More details might be available at docker-library/mysql issues: #69 and #186
This issue could be caused by the lost+found
directory on the filesystem of the PersistentVolume.
I was able to verify this by adding a k8s.gcr.io/busybox
container (in PVC set accessModes: [ReadWriteMany]
, OR comment out the database
container):
- name: init
image: "k8s.gcr.io/busybox"
command: ["/bin/sh","-c","ls -l /var/lib/mysql"]
volumeMounts:
- name: database
mountPath: "/var/lib/mysql"
There are a few potential workarounds...
Most preferable is to use a subPath
on the volumeMounts
object. This uses a subdirectory of the PersistentVolume, which should be empty at creation time, instead of the volume root:
volumeMounts:
- name: database
mountPath: "/var/lib/mysql"
subPath: mysql
Less preferable workarounds include:
- Use a one-time container to
rm -rf /var/lib/mysql/lost+found
(not a great solution, because the directory is managed by the filesystem and is likely to re-appear) - Use
mysql:5
image, and addargs: ["--ignore-db-dir=lost+found"]
to the container (this option was removed in mysql 8) - Use
mariadb
image instead ofmysql
More details might be available at docker-library/mysql issues: #69 and #186
edited Nov 16 '18 at 18:38
answered Nov 16 '18 at 18:20
thinkmassivethinkmassive
458312
458312
Thank you for the subPath solution.... wasted a good 2 hours on this irritation. Using mySql 8.0.13 which got rid of the ignore-db-dir option... so that didn't work for me... and removing the lost+found is def not a good idea.
– David
Jan 21 at 19:24
add a comment |
Thank you for the subPath solution.... wasted a good 2 hours on this irritation. Using mySql 8.0.13 which got rid of the ignore-db-dir option... so that didn't work for me... and removing the lost+found is def not a good idea.
– David
Jan 21 at 19:24
Thank you for the subPath solution.... wasted a good 2 hours on this irritation. Using mySql 8.0.13 which got rid of the ignore-db-dir option... so that didn't work for me... and removing the lost+found is def not a good idea.
– David
Jan 21 at 19:24
Thank you for the subPath solution.... wasted a good 2 hours on this irritation. Using mySql 8.0.13 which got rid of the ignore-db-dir option... so that didn't work for me... and removing the lost+found is def not a good idea.
– David
Jan 21 at 19:24
add a comment |
You would usually see if your volumes were mounted with:
kubectl get pods # gets you all the pods on the default namespace
# and
kubectl describe pod <pod-created-by-your-statefulset>
Then you can these commands to check on your PVs and PVCs
kubectl get pv # gets all the PVs on the default namespace
kubectl get pvc # same for PVCs
kubectl describe pv <pv-name>
kubectl describe pvc <pvc-name>
Then you can to the GCP console on disks and see if your disks got created:
The disks are there, it it possible to see the contents of the disk? I would really like to get to the bottom of why the mysql docker image doesnt start
– Morgan Philo
Oct 2 '18 at 3:59
Yes, you can add it to a VM in stopped state, then start it and mount it on its local filesystem.
– Rico
Oct 2 '18 at 4:06
thanks Rico. I have connected to the VM and the mount points for the drives is all the same.{ /home/kubernetes/containerized_mounter/rootfs/var/lib/} so I am a little lost as to how this works. Are you able to run my yaml script and see where I am going wrong?
– Morgan Philo
Oct 2 '18 at 6:40
add a comment |
You would usually see if your volumes were mounted with:
kubectl get pods # gets you all the pods on the default namespace
# and
kubectl describe pod <pod-created-by-your-statefulset>
Then you can these commands to check on your PVs and PVCs
kubectl get pv # gets all the PVs on the default namespace
kubectl get pvc # same for PVCs
kubectl describe pv <pv-name>
kubectl describe pvc <pvc-name>
Then you can to the GCP console on disks and see if your disks got created:
The disks are there, it it possible to see the contents of the disk? I would really like to get to the bottom of why the mysql docker image doesnt start
– Morgan Philo
Oct 2 '18 at 3:59
Yes, you can add it to a VM in stopped state, then start it and mount it on its local filesystem.
– Rico
Oct 2 '18 at 4:06
thanks Rico. I have connected to the VM and the mount points for the drives is all the same.{ /home/kubernetes/containerized_mounter/rootfs/var/lib/} so I am a little lost as to how this works. Are you able to run my yaml script and see where I am going wrong?
– Morgan Philo
Oct 2 '18 at 6:40
add a comment |
You would usually see if your volumes were mounted with:
kubectl get pods # gets you all the pods on the default namespace
# and
kubectl describe pod <pod-created-by-your-statefulset>
Then you can these commands to check on your PVs and PVCs
kubectl get pv # gets all the PVs on the default namespace
kubectl get pvc # same for PVCs
kubectl describe pv <pv-name>
kubectl describe pvc <pvc-name>
Then you can to the GCP console on disks and see if your disks got created:
You would usually see if your volumes were mounted with:
kubectl get pods # gets you all the pods on the default namespace
# and
kubectl describe pod <pod-created-by-your-statefulset>
Then you can these commands to check on your PVs and PVCs
kubectl get pv # gets all the PVs on the default namespace
kubectl get pvc # same for PVCs
kubectl describe pv <pv-name>
kubectl describe pvc <pvc-name>
Then you can to the GCP console on disks and see if your disks got created:
answered Oct 2 '18 at 3:50
RicoRico
29.7k105472
29.7k105472
The disks are there, it it possible to see the contents of the disk? I would really like to get to the bottom of why the mysql docker image doesnt start
– Morgan Philo
Oct 2 '18 at 3:59
Yes, you can add it to a VM in stopped state, then start it and mount it on its local filesystem.
– Rico
Oct 2 '18 at 4:06
thanks Rico. I have connected to the VM and the mount points for the drives is all the same.{ /home/kubernetes/containerized_mounter/rootfs/var/lib/} so I am a little lost as to how this works. Are you able to run my yaml script and see where I am going wrong?
– Morgan Philo
Oct 2 '18 at 6:40
add a comment |
The disks are there, it it possible to see the contents of the disk? I would really like to get to the bottom of why the mysql docker image doesnt start
– Morgan Philo
Oct 2 '18 at 3:59
Yes, you can add it to a VM in stopped state, then start it and mount it on its local filesystem.
– Rico
Oct 2 '18 at 4:06
thanks Rico. I have connected to the VM and the mount points for the drives is all the same.{ /home/kubernetes/containerized_mounter/rootfs/var/lib/} so I am a little lost as to how this works. Are you able to run my yaml script and see where I am going wrong?
– Morgan Philo
Oct 2 '18 at 6:40
The disks are there, it it possible to see the contents of the disk? I would really like to get to the bottom of why the mysql docker image doesnt start
– Morgan Philo
Oct 2 '18 at 3:59
The disks are there, it it possible to see the contents of the disk? I would really like to get to the bottom of why the mysql docker image doesnt start
– Morgan Philo
Oct 2 '18 at 3:59
Yes, you can add it to a VM in stopped state, then start it and mount it on its local filesystem.
– Rico
Oct 2 '18 at 4:06
Yes, you can add it to a VM in stopped state, then start it and mount it on its local filesystem.
– Rico
Oct 2 '18 at 4:06
thanks Rico. I have connected to the VM and the mount points for the drives is all the same.{ /home/kubernetes/containerized_mounter/rootfs/var/lib/} so I am a little lost as to how this works. Are you able to run my yaml script and see where I am going wrong?
– Morgan Philo
Oct 2 '18 at 6:40
thanks Rico. I have connected to the VM and the mount points for the drives is all the same.{ /home/kubernetes/containerized_mounter/rootfs/var/lib/} so I am a little lost as to how this works. Are you able to run my yaml script and see where I am going wrong?
– Morgan Philo
Oct 2 '18 at 6:40
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f52601684%2fkubernetes-mysql-image-persistent-volume-is-non-empty-during-init%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown