Commit Graph

1660 Commits

Author SHA1 Message Date
53fed2d35e [BUG] Fix the bug of query in expr (#6767) (#6768) 2021-10-05 12:26:10 +08:00
5f3559a94c [Bug][Binlog] Fix Bug that multiple sync jobs can connect to the same canal instance (#6756)
When creating sync jobs, we should ban that different jobs can connect to the same canal instance,
or else these jobs will compete with each other for the data produced by the same canal instance,
which may cause data inconsistency.
2021-10-03 12:21:06 +08:00
fb7fc27a0a [Bug] Fix duplicate result in colocated agg node (#6727)
Fixed #6726

If the plan fragment contains colocated agg plan node, it will be a colocated fragment.
The scan range and backend id of colocated fragment instance should be different from ordinary scheduler logic.
Tablets in the same bucket must fall on the same be.
For example, for the same bucket in different partitions,
even though the tablet id is different, they must be scheduled to the same be for scan node.
2021-10-03 11:59:38 +08:00
7a20d6d4c2 [Doc] Modify document of resource tag (#6778)
Fix typo
2021-10-03 11:37:45 +08:00
e7707c8180 [FOLLOWUP] create table like clause support copy rollup (#6580)
* Remove `ALL` key word to make grammar more clear.

Co-authored-by: qzsee <shizhiqiang03@meituan.com>
2021-09-30 18:26:21 +08:00
ad3c9390a2 [Bug] Fix bdbje getDatabaseNames() bug and scan node close bug (#6769)
1. This bug is introduced from #6582
2. Optimize the error log of Address used used error msg.
3. Add some document about compilation.
    1. Add a custom thirdparty download url.
    2. Add a custom com.alibaba maven jar package for DataX.
4. Fix bug that BE crash when closing scan node, introduced from #6622.
2021-09-29 11:11:28 +08:00
cdf9f9e980 [Dynamic Partition] reserve specific history periods by dynamic partition. (#6554)
Add RESERVED_HISTORY_STARTS and RESERVED_HISTORY_ENDS.
Fixes #6514
2021-09-28 11:39:35 +08:00
982b76c3c0 [Bug] Fix resource tag bug, add documents and some other bug fix (#6708)
1. Fix bug of UNKNOWN Operation Type 91
2. Support using resource_tag property of user to limit the usage of BE
3. Add new FE config `disable_tablet_scheduler` to disable tablet scheduler.
4. Add documents for resource tag.
5. Modify the default value of FE config `default_db_data_quota_bytes` to 1PB.
6. Add a new BE config `disable_compaction_trace_log` to disable the trace log of compaction time cost.
7. Modify the default value of BE config `remote_storage_read_buffer_mb` to 16MB
8. Fix `show backends` results error
9. Add new BE config `external_table_connect_timeout_sec` to set the timeout when connecting to odbc and mysql table.
10. Modify issue template to enable blank issue, for release note or other specific usage.
11. Fix a bug in alpha_row_set split_range() function.
2021-09-28 10:37:42 +08:00
e4d999274f [BUG] Fix a bug when modify table's colocate group with same name (#6695)
If new group name is the same as old group name when mod table colocate group name,
the group has been in an unstable state
2021-09-27 10:34:41 +08:00
3db8160400 [Bug] Fix Tuple is null predicate may cause be cores (#6466) 2021-09-27 10:31:48 +08:00
11ec38dd6f [Bug] When using view, make toSql method generates the final sql (#6736)
1. Fix the problem that the WITH statement cannot be printed when `UNION` is included in SQL
2. In the `toSql` method, convert the normal VIEW into the final statement
3. Replace `selectStmt.originSql` with `selectStmt.toSql`
2021-09-26 11:44:23 +08:00
ce7f9bef91 [Bug][bdbje] handle bdb rollbackexception (#6582)
when use 3 FE follower, when restart the fe, and regardless of order, we probability can't start fe success,
and bdb throw RollbackException,
In this scenario, the bdb suggests to catch the exception, simply closing all your ReplicatedEnvironment handles,
and then reopening.

so we catch the RollbackException, and reopen the ReplicatedEnvironment
2021-09-26 11:43:58 +08:00
537a542dba [Bugs] Fix the bugs list of sync job (#6705)
1、Fix bug that the sync jobs are not cancelled after deleting the database.
2、The MySQL and Doris tables should have a one-to-one correspondence. 
      If they are not, they should fail when creating the task.
3、When the cluster has multiple FE, the non-master will core when replay create the sync job.
4、Inconsistent data when updating key column
5、Failed to synchronize data when there are multiple tables in single sync job.
6、After restarting the master, resuming the paused syncjob will fail.
2021-09-25 12:24:29 +08:00
36d6788bc3 [Optimize] Use compact mode to send query plan thrift data structure. (#6702)
In some cases, the query plan thrift structure of a query may be very large
(for example, when there are many columns in SQL), resulting in a large number
of "send fragment timeout" errors.

This PR adds an FE config to control whether to transmit the query plan in a compressed format.

Using compressed format transmission can reduce the size by ~50%. But it may reduce
the concurrency by ~10%. Therefore, in the high concurrency small query scenario,
you can choose to turn off compaction.
2021-09-25 12:13:29 +08:00
f73af475ce [HTTP API] Add aggregation type information in table schema api (#6686)
```
{
	"msg": "success",
	"code": 0,
	"data": {
		"properties": [{
			"type": "INT",
			"name": "k1",
			"comment": "",
			"aggregation_type":""
		}, {
			"type": "INT",
			"name": "k2",
			"comment": "",
			"aggregation_type":"MAX"
		}],
		"status": 200
	},
	"count": 0
}
```
2021-09-24 21:42:24 +08:00
af771bee5a [Improvement] Try to finish transaction if all backends of unfinished tasks have been dead (#6662) 2021-09-24 21:39:20 +08:00
39fd839cd1 [Bug] fix backup bug when comparisons case sensitive (#6648)
#6633
2021-09-24 21:35:50 +08:00
a52104fe40 [Bug] Fix bug that DROP SCHEMA will forcibly database (#6729) 2021-09-24 10:35:40 +08:00
bdc8c98008 [Outfile] Support hdfs in select outfile clause (#6644)
Support hdfs in select outfile clause without broker.
This PR implement a HDFS writer in BE which is used to write HDFS file directly without using broker.
Also the hdfs outfile clause syntax check has been added in FE.
The syntax:
```
select * from xx into outfile "hdfs://user/outfile_" format as csv
properties ("hdfs.fs.dafultFS" = "xxx", "hdfs.hdfs_user" = "xxx");
```
Note that all hdfs configurations need to carry a prefix `hdfs.`.
2021-09-24 10:07:11 +08:00
521fb15a9b [Bug] Fix some memory bugs (#6699)
1. Fix a memory leak in `collect_iterator.cpp` (Fix #6700)
2. Add a new BE config `max_segment_num_per_rowset` to limit the num of segment in new rowset.(Fix #6701)
3. Make the error msg of stream load more friendly.
2021-09-22 12:30:14 +08:00
fee8e6afc5 [Bug] Fix some bugs (#6665)
1.Fix a potential BE coredump of sending batch when loading data. (Fix [Bug] BE crash when loading data #6656)
2.Fix a potential BE coredump when doing schema change. (Fix [Bug] BE crash when doing alter task #6657)
3.Optimize the metric of base_compaction_request_failed.
4.Add Order column in show tablet result. (Fix [Feature] Add order column in SHOW TABLET stmt result #6658)
5.Fix bug that tablet repair slot not being released. (Fix [Bug] Tablet scheduler stop working #6659)
6.Fix bug that REPLICA_MISSING error can not be handled. (Fix [Bug] REPLICA_MISSING error can not be handled. #6660)
7.Modify column name of SHOW PROC "/cluster_balance/cluster_load_stat"
8.Optimize the result of SHOW PROC "/statistic" to show COLOCATE_MISMATCH tablets (Fix [Feature] the health status of colocate table's tablet is not shown in show proc statistic #6663)
9.Fix bug that show load where state='pending' can not be executed. (Fix [Bug] show load where state='pending' can not be executed. #6664)
2021-09-17 10:11:37 +08:00
95cdb7cc0c [Enhance] [Binlog] Reduce thread number of SyncJob to save resources (#6418)
This commit is going to reduce thread number of SyncJob .
1、Submit send task to thread pool to send data.
2、Submit eof task to thread pool to block and wake up client to commit transactions.
3、Use SerialExecutorService to ensure correct order of sent data in every channel.

Besides,some bugs have been fixed in this commit
1、Failed to resume syncJob.
2、Failed to do sync data when set multiple tables in a syncJob.
3、In a cluster with multiple Fe, master may hang up after creating syncJob.
2021-09-17 10:01:27 +08:00
dd8a1da159 [Performance] Improve performance for showing proc statistic(#6567)
Co-authored-by: 迟成 <chicheng@meituan.com>
2021-09-16 10:43:57 +08:00
67472f3518 [Meta][Refactor] Use lambda expressions to save Image (#6646)
The original code in MetaWriter is tedious,So I try use lambda expressions to make the code more clean.
2021-09-16 10:28:40 +08:00
7f5631717e [Bug] Fix the bug of generating sql_key in SqlCache (#6668)
The current SqlCache sql_key is generated by taking the md5 value of selectStmt.toSql(), but selectStmt.toSql() is spliced through the operator tree, and sometimes some specific parameters cannot be displayed, resulting in sql hits with different parameters The same cache is used, and the query results are inconsistent with expectations.

For example, our user has a sql with more than 300 rows, which contains a lot of parameters, including partitions. But the result of selectStmt.toSql() is:

SELECT `tb`.`type` AS `type`, `tb`.`name` AS `name`, `tb`.`name1` AS `name1`, `tb`.`name2` AS `name2`, `tb`.`name3` AS `name3`
FROM (
  SELECT 3 AS `type`, `cc`.`name` AS `name`, `cc`.`name1` AS `name1`
    , coalesce(`bb`.`name`, '请联系您的品牌业务经理进行咨询。') AS `name2`, `bb`.`name1` AS `name3`
  FROM `cc`
    LEFT JOIN `bb` ON `cc`.`id` = `bb`.`id1`
  UNION ALL
  SELECT `dd`.`type` AS `type`, `dd`.`name` AS `name`, `dd`.`name1` AS `name1`, `dd`.`name2` AS `name2`, `dd`.`name3` AS `name3`
  FROM `dd`
  UNION ALL
  SELECT `ee`.`type` AS `type`, `ee`.`name` AS `name`, `ee`.`name1` AS `name1`, `ee`.`name2` AS `name2`, `ee`.`name3` AS `name3`
  FROM `ee`
) tb
LIMIT 10
In this way, the user specified different partitions for query, and the same cache was queried, which was inconsistent with the expected result. Therefore, it is recommended to use originStmt instead of selectStmt.toSql() to generate sql_key.
2021-09-16 10:26:15 +08:00
61c9d11fdb support change column type from decimal to string (#6643) 2021-09-14 15:56:44 +08:00
6d94b7bde2 Do not print exception in fe.out (#6626) 2021-09-14 09:58:55 +08:00
6c02ca5a8c fix fe UT failed due to rename string to text (#6627) 2021-09-13 13:39:50 +08:00
2c58724c84 Support create table as select (#6102) 2021-09-10 09:54:44 +08:00
b2f1e21a3b [Bugs] Fix some bugs (#6586)
* fix regex lazy

* fix result file core

* fix dynamic partition replica and table name length bug

* fix replicanum 0

* fix delete bug

* renew proxy

Co-authored-by: morningman <chenmingyu@baidu.com>
2021-09-10 09:53:30 +08:00
4f744333c2 fix some core in local test: (#6594)
1. insert very large string value may coredump
    2. some analitic functiuon and agg function result may be incorrect
    3. string compare may be coredump when string type is too large
    4. string type in delete condition can not process correctly
    5. add text/blob as alias of string to compitable with mysql
    6. fix string type min/max agg may  process incorrectly
2021-09-10 09:52:03 +08:00
30b54cae23 [bug] Fix dataTables bootstrap js version differ. (#6591)
Co-authored-by: 潘利杰 <panlijie@inspur.com>
2021-09-09 14:26:11 +08:00
de66312a1a [Job Clean] Sort out the cleanup logic of historical jobs (#6553)
There are many historical job records in Doris, such as load jobs, alter jobs, export jobs and so on.

These historical jobs are generally cleaned up periodically by the cleanup thread, to avoid taking too much memory.

This PR reorganized the cleanup logic of historical jobs and optimized the cleanup logic of some historical jobs
to reduce the memory usage of historical jobs.

The following FE configuration items are related to historical job cleaning:

1. label_keep_max_second

    Used to determine whether LoadJob, LoadJobV2, RoutineLoadJob or TransactionState are expired.

2. streaming_label_keep_max_second

    Used to determine whether InsertJob, DeleteJob  or TransactionState are expired.
    Different from label_keep_max_second, this config is used to clean up these frequently submitted jobs or load transactions.

3. history_job_keep_max_second

    Used to determine whether AlterJob, ExportJob are expired
2021-09-07 16:57:45 +08:00
56b2a33a4d [Feature] Support Integer-Types value in like predicate (#6579)
The basic idea is adding a rewrite rule to rewriete the expr of `SlotRef`, 
which type is fixedPointValue, aka Integer-Types, to a `CastExpr`, it will cast the fixedPoint value to string.
2021-09-07 11:56:52 +08:00
74ddea8d83 [Optimize] Remove some unused code to reduce lock contention (#6566)
1. Remove global runtime profile counter
2. Remove unused thread token register
2021-09-07 11:56:12 +08:00
bf6d043a7e [Bug] Fix bug that can not repair replica in DECOMMISSION state (#6560)
Fix bug that if a tablet belongs to a colocation table, and one of its
replica is in DECOMMISSION state. This tablet can not be repaired.

Also fix a bug that quota does not escape in show create table result.

```
COMMENT "a"bc" to COMMENT "a\"bc"
```
2021-09-07 11:55:23 +08:00
80cb22c880 [Bug] [Truncate] Fix tablet number is different between the new partition and base partition after truncate operation (#6552)
Fix #6551 

`Truncate` operation will create new partition to replace base partition.
Tablets in new partition would be created based on table default bucket number.
If the number of tablet for a partition is different from table default bucket number,
the number of tablet will be different between the new created partition and base partition after truncate operation.

In any case, the new partition should have the same number of tablet as the base partition after truncate operation. 
Tablets in new partition should be created based on tablet number of base partition rather than table default bucket number for truncate operation.
2021-09-07 11:54:15 +08:00
9469b2ce1a [Outfile] Support concurrent export of query results (#6539)
This pr mainly supports
1. Export query result sets concurrently
2. Query result set export supports s3 protocol

Among them, there are several preconditions for concurrently exporting query result sets
1. Enable concurrent export variables
2. The query itself can be exported concurrently
    (some queries containing sort nodes at the top level cannot be exported concurrently)
3. Export the s3 protocol used instead of the broker

After exporting the result set concurrently,
the file prefix is changed to outfile_{query_instance_id}_filenumber.{file_format}
2021-09-07 11:53:32 +08:00
d25f5ed911 [Metric] Add more metrics for FE checkpoint operation (#6522)
Counter of image write success or failure:
image_write{"type" = "success"}
image_write{"type" = "failed"}

Counter of image push to other FE nodes success or failure:
image_push{"type" = "success"}
image_push{"type" = "failed"}

Counter of old image clean success or failure:
image_clean{"type" = "success"}
image_clean{"type" = "failed"}

Counter of old edit log clean success or failure:
edit_log_clean{"type" = "success"}
edit_log_clean{"type" = "failed"}
2021-09-07 11:52:55 +08:00
2324e28288 [Enhance] Add a rewrite rule of compoundPredicate 'OR' 'AND' to hit prefix index (#6518)
add a rewrite rule of compoundPredicate 'OR' 'AND' to hit prefix index
unit test added.

`````
case true AND expr ==> expr
case expr AND true ==> expr
case false Or expr ==> expr
case expr Or false ==> expr
 
case false AND expr ==> false
case expr AND false ==> false
case true Or expr ==> true
case expr Or true ==> true
`````
2021-09-07 11:52:41 +08:00
1fc6ee1597 [Config] Add config to support long table name (#6501)
Support length of table name large than 64
2021-09-07 11:52:07 +08:00
f591098b08 [Feature] Support fe login using sql tools when no be is available. (#6150)
When no backend(be) available, eg first time before setup or all be is down, we cannot login to fe using most sql tools, eg datagrip, querious.

This is because these tools call `select version()` or  `select @@version_comment …` right after login, when there is no backend available, the login will fail.

I make this pr to support login when no be available, so we can add backend or modify some configuaration using GUI sql tools, especially the first setup time.

This pr is working at precondition that,sql tools only query very simple information that fe can handle, there is no need to send the request to be.

So I check the query type and BE status, if we can handle the query and no BE is available, we will intercept and process in fe.
2021-09-07 11:51:46 +08:00
b3cb1e271d [bug] Fix the bug that http redirects to master cannot be authenticated, and redirect several http interfaces to master. (#6557)
Redirect the following http requests to master:
    /rest/v2/api/cluster_overview
    /rest/v2/manager/node/frontends
    /rest/v2/manager/node/backends
    /rest/v2/manager/node/brokers
2021-09-06 11:00:39 +08:00
00ecb2904b [Bug] Fix colocate agg error when group of colocate table is unstable (#6559)
If the colocate group of the table is not stable,
then even if it is a colocate table,
its data distribution is Random.
So the distribution info of OlapScanNode is also Random instead of Hash Partition.

Fixed #6558
2021-09-04 11:00:12 +08:00
7db8841ae2 [Feature][ResourceTag] Support Resource Tag (#6203)
#5902 
This CL mainly changes:

1. Support setting tags for BE nodes:

    ```
    alter system add backend "1272:9050, 1212:9050" properties("tag.location": "zoneA");
    alter system modify backend "1272:9050, 1212:9050" set ("tag.location": "zoneB");
    ```
    And for compatibility, all BE nodes will be set a "default" tag when upgrading: `"tag.location": "default"`.

2. Create a new class `ReplicaAllocation` to replace the previous `replication_num`.

    `ReplicaAllocation` represents the allocation of the replicas of a tablet. It contains a map from 
    Tag to number of replicas.
    For example, if user set a table's replication num to 3, it will be converted to a ReplicaAllocation
    like: `"tag.location.default" : "3"`, which means the tablet will have 3 replicas and all of them will be
    allocated in BE nodes with tag "default";

3. Support create table with replication allocation:

    ```
    CREATE TABLE example_db.table_hash
    (
    k1 TINYINT
    )
    DISTRIBUTED BY HASH(k1) BUCKETS 32
    PROPERTIES (
        "replication_allocation"="tag.location.zone1:1, tag.location.zone2:2"
    );
    ```
    
    Also support set replica allocation for dynamic tables, and modify replica allocation at runtime.

    For compatibility, user can still set "replication_num" = "3", and it will be automatically converted to:
    ` "replication_allocation"="tag.location.default:3"`

4. Support tablet repair and balance based on Tag

    1. For tablets of non-colocate table, most of the logic is the same as before,
       but when selecting the destination node for clone, the tag of the node will be considered.
       If the required tag does not exist, it cannot be repaired.
       Similarly, under the condition of ensuring that the replicas are complete, the tablet will be
       reallocated according to the tag or the replicas will be balanced.

       Balancing is performed separately within each resource group.

    2. For tablets of colocate table, the backends sequence of buckets will be splitted by tag.
       For example, if replica allocation is "tag.location.zone1:1, tag.location.zone2:2",

       And zone1 has 2 BE: A, B; zone2 has 3 BE: C, D, F

       there will be 2 backend sequences: one is for zone1, and the other is for zone2.
       And one posible seqeunces will be:


       zone1: [A]   [B]   [A]   [B]
       zone2: [C, D][D, F][F, C][C, D]

5. Support setting tags for user and restrict execution node with tags:


    ```
    set property for 'cmy' 'resource_tags.location' : 'zone1, zone2';
    ```

    After setting, the user 'cmy' can only query data stored on backends with tag zone1 and zone2,
    And query can only be executed on backends with tag zone1 and zone2


    For compatibility, after upgrading, the property `resource_tags.location` will be empty,
    so that user can still query data stored on any backends.

6. Modify the Unit test frame of FE so that we can created multi backends with different mocked IP in unit test.

    This help us to easily test some distributed cases like query, tablet repair and balance

The document will be added in another PR.

Also fix a bug described in #6194
2021-09-04 10:59:35 +08:00
df54b34f98 [Catalog] Enforce null check at Catalog.getDb and Database.getTable (#6416)
fix #5378 #5391 #5688 #5973 #6155 and all replay NPE. All replay method can now throw MetaNotFoundException and caught to log a warning for potential inconsistent metadata cases.

try to establish a clear notice for future developer to check null.
2021-09-03 13:34:49 +08:00
6ac0ab6b29 fix(sparkload): bitmap deep copy in or operator (#6480)
* fix(sparkload): bitmap deep copy in `or` operator

fix multi rollup hold the same Ref of bitmapvalue which may be updated repeatedly.

* fix(sparkload): bitmap deep copy in `or` operator

fix multi rollup hold the same Ref of bitmapvalue which may be updated repeatedly.

Co-authored-by: weixiang <weixiang06@meituan.com>
2021-09-02 12:15:02 +08:00
7a15e583a7 [Feature]Support functions of json_array, json_object, json_quote (#6504) 2021-09-02 09:59:02 +08:00
9f7d4cf741 [BUG] fix bugs with string type (#6538)
* fix bugs with string type
1. not support string with agg type min/max
2. agg_update with large string may coredump
3. stringval with large string may coredump
4. not support string as partition key
2021-09-01 15:59:55 +08:00
e795c7d2cc [Community] Add new template for issues (#6534)
* [Community] Add new template for issues

Inpired by Apache Skywalking

https://github.com/apache/skywalking/issues/new?assignees=&labels=bug&template=bug-report.yml&title=%5BBug%5D+
2021-09-01 09:59:44 +08:00