#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

## A reference of https://github.com/apache/incubator-pulsar/blob/master/kubernetes/google-container-engine/bookie.yaml

apiVersion: v1
kind: ConfigMap
metadata:
    name: bookie-config
data:
    BK_BOOKIE_EXTRA_OPTS: "\"-Xms1g -Xmx1g -XX:MaxDirectMemorySize=1g -XX:+UseG1GC  -XX:MaxGCPauseMillis=10 -XX:+ParallelRefProcEnabled -XX:+UnlockExperimentalVMOptions -XX:+AggressiveOpts -XX:+DoEscapeAnalysis -XX:ParallelGCThreads=32 -XX:ConcGCThreads=32 -XX:G1NewSizePercent=50 -XX:+DisableExplicitGC -XX:-ResizePLAB\""
    BK_bookiePort: "3181"
    BK_journalDirectory: "/bookkeeper/data/journal"
    BK_ledgerDirectories: "/bookkeeper/data/ledgers"
    BK_indexDirectories: "/bookkeeper/data/ledgers"
    BK_zkServers: zookeeper
    # TODO: Issue 458: https://github.com/apache/bookkeeper/issues/458
    #BK_statsProviderClass: org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider
---

## BookKeeper servers need to access the local disks and the pods
## cannot be moved across different nodes.
## For this reason, we run BK as a daemon set, one for each node in the
## cluster, unless restricted by label selectors
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
    name: bookie
    labels:
        app: bookkeeper
        component: bookie
spec:
    template:
        metadata:
            labels:
                app: bookkeeper
                component: bookie
                # Specify cluster to allow aggregation by cluster in
                # the metrics
                cluster: bookkeeper-gke
            annotations:
                prometheus.io/scrape: "true"
                prometheus.io/port: "8000"

        spec:
            containers:
              - name: bookie
                image: apache/bookkeeper:latest
                resources:
                  requests:
                    memory: "3Gi"
                    cpu: "1000m"
                  limits:
                    memory: "5Gi"
                    cpu: "2000m"
                command: [ "/bin/bash", "/opt/bookkeeper/entrypoint.sh" ]
                args: ["/opt/bookkeeper/bin/bookkeeper", "bookie"]
                ports:
                  - name: client
                    containerPort: 3181
                    # we are using `status.hostIP` for the bookie's advertised address. export 3181 as the hostPort,
                    # so that the containers are able to access the host port
                    hostPort: 3181
                envFrom:
                  - configMapRef:
                        name: bookie-config
                env:
                  - name: BK_advertisedAddress
                    valueFrom:
                      fieldRef:
                        fieldPath: status.hostIP
                        

                volumeMounts:
                  - name: journal-disk
                    mountPath: /bookkeeper/data/journal
                  - name: ledgers-disk
                    mountPath: /bookkeeper/data/ledgers

            volumes:
                # Mount local disks
              - name: journal-disk
                hostPath:
                    path: /mnt/disks/ssd0
              - name: ledgers-disk
                hostPath:
                    path: /mnt/disks/ssd1

---

##
## Define the Bookie headless service
## In practice, in this case, it is only useful to have a view of
## all the bookie pods that are present
##
apiVersion: v1
kind: Service
metadata:
    name: bookie
    labels:
        app: bookkeeper
        component: bookie
spec:
    ports:
      - port: 3181
        name: server
    clusterIP: None
    selector:
        app: bookkeeper
        component: bookie

---
##
## Run BookKeeper auto-recovery from a different set of containers
## Auto-Recovery makes sure to restore the replication factor when any bookie
## crashes and it's not recovering on its own.
##
apiVersion: apps/v1beta1
kind: Deployment
metadata:
    name: bookie-autorecovery
spec:
    replicas: 2
    template:
        metadata:
            labels:
                app: bookkeeper
                component: bookkeeper-replication
        spec:
            containers:
              - name: replication-worker
                image: apache/bookkeeper:latest
                command: [ "/bin/bash", "/opt/bookkeeper/entrypoint.sh" ]
                args: ["/opt/bookkeeper/bin/bookkeeper", "autorecovery"]
                envFrom:
                  - configMapRef:
                        name: bookie-config
