#cloud-config
#
# 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.


packages:
- default-jre
- netcat

write_files:
- path: /run/shardingsphere-proxy.service
  permissions: 0644
  content: |
    [Unit]
    Description=ShardingSphere Proxy Service
    Requires=network.target
    After=network.target
    [Service]
    Type=forking
    LimitNOFILE=65536
    ExecStart=/usr/local/shardingsphere-proxy/bin/start.sh
    ExecStop=/usr/local/shardingsphere-proxy/bin/stop.sh
    Restart=always
    RestartSec=3
    StartLimitInterval=0
    [Install]
    WantedBy=default.target

%{ if element(version_elems, 0) <= 5 && element(version_elems, 1) < 3 }
- path: /run/server.yaml
  permissions: 0644
  content: |
    mode:
      type: Cluster
      repository:
        type: ZooKeeper
        props:
          namespace: governance_ds
          server-lists: ${zk_servers}
          retryIntervalMilliseconds: 500
          timeToLiveSeconds: 60
          maxRetries: 3
          operationTimeoutMilliseconds: 500
    rules:
    - !AUTHORITY
      users:
        - root@%:root
        - sharding@:sharding
      provider:
        type: ALL_PERMITTED
    - !TRANSACTION
      defaultType: XA
      providerType: Atomikos
    - !SQL_PARSER
      sqlCommentParseEnabled: true
      sqlStatementCache:
        initialCapacity: 2000
        maximumSize: 65535
      parseTreeCache:
        initialCapacity: 128
        maximumSize: 1024
    props:
      max-connections-size-per-query: 1
      kernel-executor-size: 16  # Infinite by default.
      proxy-frontend-flush-threshold: 128  # The default value is 128.
      proxy-hint-enabled: false
      sql-show: false
      check-table-metadata-enabled: false
      # Proxy backend query fetch size. A larger value may increase the memory usage of ShardingSphere Proxy.
      # The default value is -1, which means set the minimum value for different JDBC drivers.
      proxy-backend-query-fetch-size: -1
      proxy-frontend-executor-size: 0 # Proxy frontend executor size. The default value is 0, which means let Netty decide.
      # Available options of proxy backend executor suitable: OLAP(default), OLTP. The OLTP option may reduce time cost of writing packets to client, but it may increase the latency of SQL execution
      # and block other clients if client connections are more than `proxy-frontend-executor-size`, especially executing slow SQL.
      proxy-backend-executor-suitable: OLAP
      proxy-frontend-max-connections: 0 # Less than or equal to 0 means no limitation.
      # Available sql federation type: NONE (default), ORIGINAL, ADVANCED
      sql-federation-type: NONE
      # Available proxy backend driver type: JDBC (default), ExperimentalVertx
      proxy-backend-driver-type: JDBC
      proxy-mysql-default-version: 5.7.22 # In the absence of schema name, the default version will be used.
      proxy-default-port: 3307 # Proxy default port.
      proxy-netty-backlog: 1024 # Proxy netty backlog.
%{ endif }
%{ if element(version_elems, 0) >= 5 && element(version_elems, 1) > 2 }
- path: /run/server.yaml
  permissions: 0644
  content: |
    mode:
      type: Cluster
      repository:
        type: ZooKeeper
        props:
          namespace: governance_ds
          server-lists: ${zk_servers}
          retryIntervalMilliseconds: 500
          timeToLiveSeconds: 60
          maxRetries: 3
          operationTimeoutMilliseconds: 500
%{ endif }
- path: /run/install_shardingsphere_proxy.sh
  permissions: 0700
  content: |
    #!/bin/bash
    echo Installing ShardingSphere v${version}
    wget -O /run/ss.tar.gz https://mirrors.huaweicloud.com/apache/shardingsphere/${version}/apache-shardingsphere-${version}-shardingsphere-proxy-bin.tar.gz
    mkdir -p /usr/local/shardingsphere-proxy
    tar xvf /run/ss.tar.gz --strip 1 -C /usr/local/shardingsphere-proxy
    if [ -f /run/server.yaml ]; then
      /bin/cp -avf /run/server.yaml /usr/local/shardingsphere-proxy/conf/server.yaml
    fi
    /bin/cp -avf /run/shardingsphere-proxy.service /usr/lib/systemd/system/shardingsphere-proxy.service
    systemctl daemon-reload
    systemctl enable shardingsphere-proxy
    systemctl start shardingsphere-proxy

runcmd:
- bash /run/install_shardingsphere_proxy.sh
