Skip to content

Commit

Permalink
FLASH-143: Enable CI tests (#7)
Browse files Browse the repository at this point in the history
* Add mutable test stuff

* Add docker compose for running tests

* Move more mutable test stuff here

* Adjust tics dockerfile

* Advance docker tests

* Update git ignore

* Finish test script

* Fix tty in docker compose run
  • Loading branch information
zanmato1984 authored Mar 6, 2019
1 parent 6250291 commit 736e072
Show file tree
Hide file tree
Showing 1,952 changed files with 59,555 additions and 3 deletions.
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -236,3 +236,9 @@ node_modules
public
website/docs
website/presentations

# TiCS built and test files
build_docker
docker/builder/tics
tests/docker/data
tests/docker/log
6 changes: 3 additions & 3 deletions docker/builder/Dockerfile-tics
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
FROM ubuntu:17.10

RUN apt update && \
apt install -y tzdata
apt install -y tzdata python

COPY tics /tics

WORKDIR /tics
WORKDIR /

ENV LD_LIBRARY_PATH /tics

ENTRYPOINT ["./theflash", "server"]
ENTRYPOINT ["/tics/theflash", "server"]
22 changes: 22 additions & 0 deletions tests/_env.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/bash

# Executable path

if [ `uname` == "Darwin" ]; then
export storage_bin="../../build_clang/dbms/src/Server/theflash"
else
export storage_bin="../../build/dbms/src/Server/theflash"
fi

# Serve config for launching
export storage_server_config="../../running/config/config.xml"

# Server address for connecting
export storage_server="127.0.0.1"

# Default database for scripts
export storage_db="default"

# Setup running env vars
source ../../_vars.sh
setup_dylib_path
10 changes: 10 additions & 0 deletions tests/docker/_env.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash

# Executable path
export storage_bin="/tics/theflash"

# Server address for connecting
export storage_server="127.0.0.1"

# Default database for scripts
export storage_db="default"
186 changes: 186 additions & 0 deletions tests/docker/config/config.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
<?xml version="1.0"?>
<yandex>
<application>
<runAsDaemon>true</runAsDaemon>
</application>

<logger>
<level>trace</level>
<log>/log/server.log</log>
<errorlog>/log/error.log</errorlog>
<size>1000M</size>
<count>10</count>
<!-- <console>1</console> --> <!-- Default behavior is autodetection (log to console if not daemon mode and is tty) -->
</logger>

<display_name>the flash</display_name>

<raft>
<service_addr>0.0.0.0:3930</service_addr>
<kvstore_path>/data/kvstore</kvstore_path>
<!--pd_addr>127.0.0.1:2379</pd_addr-->
</raft>

<tidb>
<service_ip>127.0.0.1</service_ip>
<status_port>10080</status_port>
</tidb>

<http_port>8123</http_port>
<tcp_port>9000</tcp_port>
<interserver_http_port>9009</interserver_http_port>
<!--listen_host>::1</listen_host-->
<listen_host>0.0.0.0</listen_host>

<!-- Don't exit if ipv6 or ipv4 unavailable, but listen_host with this protocol specified -->
<!-- <listen_try>0</listen_try> -->

<!-- Allow listen on same address:port -->
<!-- <listen_reuse_port>0</listen_reuse_port> -->

<!-- <listen_backlog>64</listen_backlog> -->

<max_connections>4096</max_connections>
<keep_alive_timeout>3</keep_alive_timeout>

<!-- Maximum number of concurrent queries. -->
<max_concurrent_queries>100</max_concurrent_queries>

<!-- Set limit on number of open files (default: maximum). This setting makes sense on Mac OS X because getrlimit() fails to retrieve
correct maximum value. -->
<!-- <max_open_files>262144</max_open_files> -->

<!-- Size of cache of uncompressed blocks of data, used in tables of MergeTree family.
In bytes. Cache is single for server. Memory is allocated only on demand.
Cache is used when 'use_uncompressed_cache' user setting turned on (off by default).
Uncompressed cache is advantageous only for very short queries and in rare cases.
-->
<uncompressed_cache_size>8589934592</uncompressed_cache_size>

<!-- Approximate size of mark cache, used in tables of MergeTree family.
In bytes. Cache is single for server. Memory is allocated only on demand.
You should not lower this value.
-->
<mark_cache_size>5368709120</mark_cache_size>

<!-- Path of persisted mapping cache in fast(er) disk device.
Empty means disabled.
Seperated with ';' if there are more than one path.
-->
<persisted_mapping_cache_path></persisted_mapping_cache_path>
<!-- Quota size in bytes of persisted mapping cache, in bytes. 0 means unlimited. -->
<persisted_mapping_cache_size>0</persisted_mapping_cache_size>

<!-- Path to data directory, with trailing slash. -->
<path>/data/db</path>

<!-- Path to temporary data for processing hard queries. -->
<tmp_path>/data/tmp</tmp_path>

<l0_optimize>false</l0_optimize>

<!-- Path to configuration file with users, access rights, profiles of settings, quotas. -->
<users_config>users.xml</users_config>

<!-- Default profile of settings. -->
<default_profile>default</default_profile>

<!-- System profile of settings. This settings are used by internal processes (Buffer storage, Distibuted DDL worker and so on). -->
<!-- <system_profile>default</system_profile> -->

<!-- Default database. -->
<default_database>default</default_database>

<!-- Server time zone could be set here.
Time zone is used when converting between String and DateTime types,
when printing DateTime in text formats and parsing DateTime from text,
it is used in date and time related functions, if specific time zone was not passed as an argument.
Time zone is specified as identifier from IANA time zone database, like UTC or Africa/Abidjan.
If not specified, system time zone at server startup is used.
Please note, that server could display time zone alias instead of specified name.
Example: W-SU is an alias for Europe/Moscow and Zulu is an alias for UTC.
-->
<!-- <timezone></timezone> -->

<!-- You can specify umask here (see "man umask"). Server will apply it on startup.
Number is always parsed as octal. Default umask is 027 (other users cannot read logs, data files, etc; group can only read).
-->
<!-- <umask>022</umask> -->

<!-- Reloading interval for embedded dictionaries, in seconds. Default: 3600. -->
<builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>

<!-- Maximum session timeout, in seconds. Default: 3600. -->
<max_session_timeout>3600</max_session_timeout>

<!-- Default session timeout, in seconds. Default: 60. -->
<default_session_timeout>600</default_session_timeout>

<!-- Query log. Used only for queries with setting log_queries = 1. -->
<query_log>
<!-- What table to insert data. If table is not exist, it will be created.
When query log structure is changed after system update,
then old table will be renamed and new table will be created automatically.
-->
<database>system</database>
<table>query_log</table>
<!--
PARTITION BY expr https://clickhouse.yandex/docs/en/table_engines/custom_partitioning_key/
Example:
event_date
toMonday(event_date)
toYYYYMM(event_date)
toStartOfHour(event_time)
-->
<partition_by>toYYYYMM(event_date)</partition_by>
<!-- Interval of flushing data. -->
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>

<!-- Uncomment if use part_log
<part_log>
<database>system</database>
<table>part_log</table>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</part_log>
-->

<dictionaries_config>*_dictionary.xml</dictionaries_config>

<!-- Uncomment if you want data to be compressed 30-100% better.
Don't do that if you just started using ClickHouse.
-->
<compression>
<!--
<!- - Set of variants. Checked in order. Last matching case wins. If nothing matches, lz4 will be used. - ->
<case>
<!- - Conditions. All must be satisfied. Some conditions may be omitted. - ->
<min_part_size>10000000000</min_part_size> <!- - Min part size in bytes. - ->
<min_part_size_ratio>0.01</min_part_size_ratio> <!- - Min size of part relative to whole table size. - ->
<!- - What compression method to use. - ->
<method>zstd</method>
</case>
-->
</compression>

<!-- Settings to fine tune MergeTree tables. See documentation in source code, in MergeTreeSettings.h -->
<!--
<merge_tree>
<max_suspicious_broken_parts>5</max_suspicious_broken_parts>
</merge_tree>
-->

<!-- Protection from accidental DROP.
If size of a MergeTree table is greater than max_table_size_to_drop (in bytes) than table could not be dropped with any DROP query.
If you want do delete one table and don't want to restart clickhouse-server, you could create special file <clickhouse-path>/flags/force_drop_table and make DROP once.
By default max_table_size_to_drop is 50GB, max_table_size_to_drop=0 allows to DROP any tables.
Uncomment to disable protection.
-->
<max_table_size_to_drop>0</max_table_size_to_drop>
</yandex>
108 changes: 108 additions & 0 deletions tests/docker/config/users.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<?xml version="1.0"?>
<yandex>
<!-- Profiles of settings. -->
<profiles>
<!-- Default settings. -->
<default>
<!-- Maximum memory usage for processing single query, in bytes. -->
<max_memory_usage>4000000000</max_memory_usage>

<!-- Use cache of uncompressed blocks of data. Meaningful only for processing many of very short queries. -->
<use_uncompressed_cache>0</use_uncompressed_cache>

<!-- How to choose between replicas during distributed query processing.
random - choose random replica from set of replicas with minimum number of errors
nearest_hostname - from set of replicas with minimum number of errors, choose replica
with minumum number of different symbols between replica's hostname and local hostname
(Hamming distance).
in_order - first live replica is choosen in specified order.
-->
<load_balancing>random</load_balancing>
</default>

<!-- Profile that allows only read queries. -->
<readonly>
<readonly>1</readonly>
</readonly>
</profiles>

<!-- Users and ACL. -->
<users>
<!-- If user name was not specified, 'default' user is used. -->
<default>
<!-- Password could be specified in plaintext or in SHA256 (in hex format).
If you want to specify password in plaintext (not recommended), place it in 'password' element.
Example: <password>qwerty</password>.
Password could be empty.
If you want to specify SHA256, place it in 'password_sha256_hex' element.
Example: <password_sha256_hex>65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5</password_sha256_hex>
How to generate decent password:
Execute: PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
In first line will be password and in second - corresponding SHA256.
-->
<password></password>

<!-- List of networks with open access.
To open access from everywhere, specify:
<ip>::/0</ip>
To open access only from localhost, specify:
<ip>::1</ip>
<ip>127.0.0.1</ip>
Each element of list has one of the following forms:
<ip> IP-address or network mask. Examples: 213.180.204.3 or 10.0.0.1/8 or 2a02:6b8::3 or 2a02:6b8::3/64.
<host> Hostname. Example: server01.yandex.ru.
To check access, DNS query is performed, and all received addresses compared to peer address.
<host_regexp> Regular expression for host names. Example, ^server\d\d-\d\d-\d\.yandex\.ru$
To check access, DNS PTR query is performed for peer address and then regexp is applied.
Then, for result of PTR query, another DNS query is performed and all received addresses compared to peer address.
Strongly recommended that regexp is ends with $
All results of DNS requests are cached till server restart.
-->
<networks>
<ip>::/0</ip>
</networks>

<!-- Settings profile for user. -->
<profile>default</profile>

<!-- Quota for user. -->
<quota>default</quota>
</default>

<!-- Example of user with readonly access. -->
<readonly>
<password></password>
<networks>
<ip>::1</ip>
<ip>127.0.0.1</ip>
</networks>
<profile>readonly</profile>
<quota>default</quota>
</readonly>
</users>

<!-- Quotas. -->
<quotas>
<!-- Name of quota. -->
<default>
<!-- Limits for time interval. You could specify many intervals with different limits. -->
<interval>
<!-- Length of interval. -->
<duration>3600</duration>

<!-- No limits. Just calculate resource usage for time interval. -->
<queries>0</queries>
<errors>0</errors>
<result_rows>0</result_rows>
<read_rows>0</read_rows>
<execution_time>0</execution_time>
</interval>
</default>
</quotas>
</yandex>
20 changes: 20 additions & 0 deletions tests/docker/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
version: '2.3'

services:
tics0:
image: hub.pingcap.net/tiflash/tics:${TAG:-raft}
ports:
- "3930:3930"
- "9000:9000"
- "8123:8123"
- "9009:9009"
volumes:
- ./config/config.xml:/config.xml:ro
- ./config/users.xml:/users.xml:ro
- ./data:/data
- ./log:/log
- ..:/tests
- ./_env.sh:/tests/_env.sh
command:
- --config-file
- /config.xml
9 changes: 9 additions & 0 deletions tests/docker/run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash

rm -rf ./data ./log

docker-compose up -d

docker-compose exec -T tics0 bash -c 'cd /tests ; ./run-test.sh mutable-test'

docker-compose down
Loading

0 comments on commit 736e072

Please sign in to comment.