Commit Graph

20207 Commits

Author SHA1 Message Date
e0fac66223 [branch-2.1](fix) fix snappy decompressor bug (#40862)
## Proposed changes
Hadoop snappycodec source :

https://github.com/apache/hadoop/blob/trunk/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src/main/native/src/codec/SnappyCodec.cc
Example:
OriginData(The original data will be divided into several large data
block.) :
     large data block1 | large data block2 | large data block3 | ....
The large data block will be divided into several small data block.
Suppose a large data block is divided into three small blocks:
large data block1: | small block1 | small block2 | small block3 |
CompressData: <A [B1 compress(small block1) ] [B2 compress(small block1)
] [B3 compress(small block1)]>

A : original length of the current block of large data block.
sizeof(A) = 4 bytes.
A = length(small block1) + length(small block2) + length(small block3)
Bx : length of  small data block bx.
sizeof(Bx) = 4 bytes.
Bx = length(compress(small blockx))
2024-09-20 11:57:14 +08:00
3249931fa6 [Fix](test) fix flake case in both test_insert_strict_fail_url and test_insert_partition_fail_url #40998 (#41024)
cherry pick from #40998
2024-09-20 09:52:09 +08:00
64880a10d6 [branch-2.1] Picks "[Fix](partial update) Fix partial update failed when merge_type=MERGE #40730" (#40951)
picks https://github.com/apache/doris/pull/40730
2024-09-20 00:02:17 +08:00
8b1906be81 [branch-2.1][fix](jdbc catalog) Fixed FE memory leak by enabling weak references in HikariCP (#40923)
pick  (#40773)

When FE collects statistics, its ThreadLocal will hold the ThreadLocal
of HikariCP in JdbcClient, making it difficult for HikariCP to be gc, so
this problem can be alleviated by enabling weak references of HikariCP.
2024-09-19 23:59:14 +08:00
549bc3e288 [fix](pipelinex) fix fragment instance progress reports (#40325) (#40987)
backport #40325
2024-09-19 23:58:38 +08:00
49dec9f39d [branch-2.1] Picks "[opt](merge-on-write) Reduce the version not continuous logs for merge-on-write table #40946" (#40996)
picks https://github.com/apache/doris/pull/40946
2024-09-19 23:58:05 +08:00
f81d087bab [enhance](mtmv)Improve the speed of obtaining table snapshots (#40717) (#40995)
pick: https://github.com/apache/doris/pull/40717
2024-09-19 22:47:50 +08:00
fd5423145d [enhance](mtmv)tasks tvf not getLock (#40816) (#40994)
pick: https://github.com/apache/doris/pull/40816
2024-09-19 22:40:17 +08:00
7ecf088a61 [enhance](mtmv)when drop temp partition, not trigger materialized vie… (#40993)
…w refresh (#40875)

pick: https://github.com/apache/doris/pull/40875
2024-09-19 22:35:31 +08:00
f32d540ac5 [test](move-memtable) add more fault injection cases for writer v2 (#39169) (#40986)
backport #39169
2024-09-19 22:31:12 +08:00
7a24719f48 [enhance](mtmv) Refuse to execute insert overwrite on the same table … (#40992)
…(#40558)

pick: https://github.com/apache/doris/pull/40558
2024-09-19 22:18:46 +08:00
b7ded71bfb [fix](stream-load) catch exception when parsing CONTENT_LENGTH (#40796) (#40988)
backport #40796
2024-09-19 22:15:08 +08:00
5f583fa329 [branch-2.1][test](jdbc catalog) add oceanbase ce jdbc catalog test (#40978)
pick #34972)
2024-09-19 22:11:24 +08:00
e7d41eb143 [test](p2) print error message when assert fails (#40699) (#40977)
cherry-pick #40699
2024-09-19 22:01:40 +08:00
b8bc9b699c [fix](scan) Incorrect scan keys lead to wrong query results. (#40814) (#40971)
## Proposed changes
pick #40814
```
mysql [doris_14555]>select * from table_9436528_3;
+------+------+------+------+------------------------+--------------------+------+
| col1 | col2 | col3 | col5 | col4                   | col6               | col7 |
+------+------+------+------+------------------------+--------------------+------+
| -100 |    1 |  -82 |    1 | 2024-02-16 04:37:37.00 | -1299962421.904282 | NULL |
| -100 |    1 |   92 |    1 | 2024-02-16 04:37:37.00 |   23423423.0324234 | NULL |
| -100 |    0 |  -82 |    0 | 2023-11-11 10:49:43.00 |   840968969.872149 | NULL |
```
wrong result:
```
mysql [doris_14555]>select * from table_9436528_3 where col1 <= -100 and col2 in (true, false) and col3 = -82;
+------+------+------+------+------------------------+--------------------+------+
| col1 | col2 | col3 | col5 | col4                   | col6               | col7 |
+------+------+------+------+------------------------+--------------------+------+
| -100 |    1 |  -82 |    1 | 2024-02-16 04:37:37.00 | -1299962421.904282 | NULL |
| -100 |    1 |   92 |    1 | 2024-02-16 04:37:37.00 |   23423423.0324234 | NULL |
+------+------+------+------+------------------------+--------------------+------+
```

## Proposed changes

Issue Number: close #xxx

<!--Describe your changes.-->
2024-09-19 22:01:02 +08:00
f2b93d5896 [Fix](load) Restrict the import of VARCHAR(0) data to avoid coredump #40940 (#40974)
cherry pick from #40940
2024-09-19 17:40:46 +08:00
8302261dd2 [Fix](nereids) set all nullable aggregate function to alwaysnullable in window expression (#40693) (#40809)
cherry-pick from master #40693
2024-09-19 15:19:06 +08:00
f483a7605c [fix](nestedtypes) fix nested type with is_exclusive (#40434)
is_exclusive in column_array/map/struct has wrong semantic , we should
make sure it's nested column is also is_exclusive which can make
behavior right in some operator like join.

## Proposed changes
backport: https://github.com/apache/doris/pull/40398
Issue Number: close #xxx

<!--Describe your changes.-->
2024-09-19 12:28:51 +08:00
84f0b1fbfe [feature](view) support create or replace view stmt (#40715) (#40915)
pick #40715 to branch-2.1
2024-09-19 01:10:43 +08:00
774efe78e6 [fix](regression)fix maxcompute p0 case (#40933)
## Proposed changes

Issue Number: close #xxx

<!--Describe your changes.-->
2024-09-19 01:09:53 +08:00
fbed56639c [fix](compaction) catch exception in compaction (#40900) (#40930)
## Proposed changes
pick #40900 
```

terminate called after throwing an instance of 'doris::Exception'
 {color:red} what():  [E6] Too large string size.{color}

	0#  doris::Exception::Exception(int, std::basic_string_view<char, std::char_traits<char> > const&) at /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_ptr.h:173
	1#  doris::vectorized::read_string_binary(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, doris::vectorized::BufferReadable&, unsigned long) at /root/doris_branch-2.1/doris/be/src/vec/io/io_helper.h:177
	2#  doris::vectorized::IAggregateFunctionHelper<doris::vectorized::AggregateFunctionNullUnaryInline<doris::vectorized::AggregateFunctionGroupConcat<doris::vectorized::AggregateFunctionGroupConcatImplStr>, true> >::deserialize_and_merge_from_column_range(char*, doris::vectorized::IColumn const&, unsigned long, unsigned long, doris::vectorized::Arena*) const at /root/doris_branch-2.1/doris/be/src/vec/aggregate_functions/aggregate_function.h:0
	3#  doris::vectorized::IAggregateFunctionHelper<doris::vectorized::AggregateStateUnion>::add_batch_range(unsigned long, unsigned long, char*, doris::vectorized::IColumn const**, doris::vectorized::Arena*, bool) at /root/doris_branch-2.1/doris/be/src/vec/aggregate_functions/aggregate_function.h:0
	4#  doris::vectorized::VerticalBlockReader::_update_agg_value(std::vector<COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn>, std::allocator<COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn> > >&, int, int, bool) at /root/doris_branch-2.1/doris/be/src/vec/olap/vertical_block_reader.cpp:326
	5#  doris::vectorized::VerticalBlockReader::_update_agg_data(std::vector<COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn>, std::allocator<COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn> > >&) at /root/doris_branch-2.1/doris/be/src/vec/olap/vertical_block_reader.cpp:308
	6#  doris::vectorized::VerticalBlockReader::_agg_key_next_block(doris::vectorized::Block*, bool*) at /root/doris_branch-2.1/doris/be/src/vec/olap/vertical_block_reader.cpp:0
	7#  doris::vectorized::VerticalBlockReader::next_block_with_aggregation(doris::vectorized::Block*, bool*) at /root/doris_branch-2.1/doris/be/src/common/status.h:491
	8#  doris::Merger::vertical_compact_one_group(std::shared_ptr<doris::Tablet>, doris::ReaderType, std::shared_ptr<doris::TabletSchema>, bool, std::vector<unsigned int, std::allocator<unsigned int> > const&, doris::vectorized::RowSourcesBuffer*, std::vector<std::shared_ptr<doris::RowsetReader>, std::allocator<std::shared_ptr<doris::RowsetReader> > > const&, doris::RowsetWriter*, long, doris::Merger::Statistics*, std::vector<unsigned int, std::allocator<unsigned int> >, long, doris::CompactionSampleInfo*) at /root/doris_branch-2.1/doris/be/src/olap/merger.cpp:0
	9#  doris::Merger::vertical_merge_rowsets(std::shared_ptr<doris::Tablet>, doris::ReaderType, std::shared_ptr<doris::TabletSchema>, std::vector<std::shared_ptr<doris::RowsetReader>, std::allocator<std::shared_ptr<doris::RowsetReader> > > const&, doris::RowsetWriter*, long, long, doris::Merger::Statistics*) at /root/doris_branch-2.1/doris/be/src/olap/merger.cpp:445
	10# doris::Compaction::do_compaction_impl(long) at /root/doris_branch-2.1/doris/be/src/olap/compaction.cpp:385
	11# doris::Compaction::do_compaction(long) at /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/shared_ptr_base.h:1291
	12# doris::CumulativeCompaction::execute_compact_impl() at /root/doris_branch-2.1/doris/be/src/common/status.h:491
	13# doris::Compaction::execute_compact() at /root/doris_branch-2.1/doris/be/src/common/status.h:491
	14# doris::Tablet::execute_compaction(doris::Compaction&) at /root/doris_branch-2.1/doris/be/src/common/status.h:491
	15# std::_Function_handler<void (), doris::StorageEngine::_submit_compaction_task(std::shared_ptr<doris::Tablet>, doris::CompactionType, bool)::$_0>::_M_invoke(std::_Any_data const&) at /root/doris_branch-2.1/doris/be/src/olap/olap_server.cpp:1018
	16# doris::ThreadPool::dispatch_thread() at /root/doris_branch-2.1/doris/be/src/util/threadpool.cpp:0
	17# doris::Thread::supervise_thread(void*) at /var/local/ldb-toolchain/bin/../usr/include/pthread.h:562
	18# ?
	19# ?

*** Query id: 0-0 ***
*** is nereids: 0 ***
*** tablet id: 38266341 ***
*** Aborted at 1726615633 (unix time) try "date -d @1726615633" if you are using GNU date ***
*** Current BE git commitID: db06c678a3 ***
*** SIGABRT unknown detail explain (@0x26af02) received by PID 2535170 (TID 2536168 OR 0x7f48c81cd640) from PID 2535170; stack trace: ***
 0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, siginfo_t*, void*) at /root/doris_branch-2.1/doris/be/src/common/signal_handler.h:421
 1# 0x00007F4AB18F8520 in /lib/x86_64-linux-gnu/libc.so.6
 2# pthread_kill at ./nptl/pthread_kill.c:89
 3# raise at ../sysdeps/posix/raise.c:27
 4# abort at ./stdlib/abort.c:81
 5# __gnu_cxx::__verbose_terminate_handler() [clone .cold] at ../../../../libstdc++-v3/libsupc++/vterminate.cc:75
 6# __cxxabiv1::__terminate(void (*)()) at ../../../../libstdc++-v3/libsupc++/eh_terminate.cc:48
 7# 0x000055C401EF7811 in /mnt/disk1/STRESS_ENV/be/lib/doris_be
 8# 0x000055C401EF7964 in /mnt/disk1/STRESS_ENV/be/lib/doris_be
 9# doris::vectorized::read_string_binary(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, doris::vectorized::BufferReadable&, unsigned long) at /root/doris_branch-2.1/doris/be/src/vec/io/io_helper.h:180
10# doris::vectorized::IAggregateFunctionHelper<doris::vectorized::AggregateFunctionNullUnaryInline<doris::vectorized::AggregateFunctionGroupConcat<doris::vectorized::AggregateFunctionGroupConcatImplStr>, true> >::deserialize_and_merge_from_column_range(char*, doris::vectorized::IColumn const&, unsigned long, unsigned long, doris::vectorized::Arena*) const in /mnt/disk1/STRESS_ENV/be/lib/doris_be
11# doris::vectorized::IAggregateFunctionHelper<doris::vectorized::AggregateStateUnion>::add_batch_range(unsigned long, unsigned long, char*, doris::vectorized::IColumn const**, doris::vectorized::Arena*, bool) in /mnt/disk1/STRESS_ENV/be/lib/doris_be
12# doris::vectorized::VerticalBlockReader::_update_agg_value(std::vector<COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn>, std::allocator<COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn> > >&, int, int, bool) at /root/doris_branch-2.1/doris/be/src/vec/olap/vertical_block_reader.cpp:326
13# doris::vectorized::VerticalBlockReader::_update_agg_data(std::vector<COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn>, std::allocator<COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn> > >&) at /root/doris_branch-2.1/doris/be/src/vec/olap/vertical_block_reader.cpp:308
14# doris::vectorized::VerticalBlockReader::_agg_key_next_block(doris::vectorized::Block*, bool*) in /mnt/disk1/STRESS_ENV/be/lib/doris_be
15# doris::vectorized::VerticalBlockReader::next_block_with_aggregation(doris::vectorized::Block*, bool*) at /root/doris_branch-2.1/doris/be/src/vec/olap/vertical_block_reader.cpp:58
16# doris::Merger::vertical_compact_one_group(std::shared_ptr<doris::Tablet>, doris::ReaderType, std::shared_ptr<doris::TabletSchema>, bool, std::vector<unsigned int, std::allocator<unsigned int> > const&, doris::vectorized::RowSourcesBuffer*, std::vector<std::shared_ptr<doris::RowsetReader>, std::allocator<std::shared_ptr<doris::RowsetReader> > > const&, doris::RowsetWriter*, long, doris::Merger::Statistics*, std::vector<unsigned int, std::allocator<unsigned int> >, long, doris::CompactionSampleInfo*) in /mnt/disk1/STRESS_ENV/be/lib/doris_be
17# doris::Merger::vertical_merge_rowsets(std::shared_ptr<doris::Tablet>, doris::ReaderType, std::shared_ptr<doris::TabletSchema>, std::vector<std::shared_ptr<doris::RowsetReader>, std::allocator<std::shared_ptr<doris::RowsetReader> > > const&, doris::RowsetWriter*, long, long, doris::Merger::Statistics*) at /root/doris_branch-2.1/doris/be/src/olap/merger.cpp:445
18# doris::Compaction::do_compaction_impl(long) at /root/doris_branch-2.1/doris/be/src/olap/compaction.cpp:385
19# doris::Compaction::do_compaction(long) at /root/doris_branch-2.1/doris/be/src/olap/compaction.cpp:136
20# doris::CumulativeCompaction::execute_compact_impl() at /root/doris_branch-2.1/doris/be/src/olap/cumulative_compaction.cpp:79
21# doris::Compaction::execute_compact() at /root/doris_branch-2.1/doris/be/src/olap/compaction.cpp:118
22# doris::Tablet::execute_compaction(doris::Compaction&) at /root/doris_branch-2.1/doris/be/src/olap/tablet.cpp:2067
23# std::_Function_handler<void (), doris::StorageEngine::_submit_compaction_task(std::shared_ptr<doris::Tablet>, doris::CompactionType, bool)::$_0>::_M_invoke(std::_Any_data const&) at /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291
24# doris::ThreadPool::dispatch_thread() in /mnt/disk1/STRESS_ENV/be/lib/doris_be
25# doris::Thread::supervise_thread(void*) at /root/doris_branch-2.1/doris/be/src/util/thread.cpp:499
26# start_thread at ./nptl/pthread_create.c:442
27# 0x00007F4AB19DC850 at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:83
```

## Proposed changes

Issue Number: close #xxx

<!--Describe your changes.-->
2024-09-19 01:08:34 +08:00
7847dad4b8 [enhancement](show) Move storage policy info from show create table to show partitions (#39923) (#40824)
## Proposed changes

pick: #39923
2024-09-18 23:35:19 +08:00
5c70fe35ea [fix](Nereids) sink distribute is wrong when table is unpartitioned (#40541) (#40901)
pick from master #40541
2024-09-18 15:18:41 +08:00
956b56c664 [pick](short circuit) avoid set cacheId when non prepared execute (#40909)
#40525
2024-09-18 14:50:50 +08:00
f3a42faf40 [branch-2.1][improvement](jdbc catalog) support jdbc external catalog insert stmt in nereids (#40902)
pick  (#39813)
2024-09-18 14:02:20 +08:00
7d23a7c587 [fix](planner) throw NPE when insert overwrite partition(*) (#40656) (#40903)
pick from master #40656
2024-09-18 13:48:48 +08:00
3336e6acbb [fix](Nereids) avoid bad cast when compute scale for round (#40776) (#40904)
pick from master #40776

for pass test case, also fix errors in computeResultInFe

computeResultInFe will generate wrong result set if output does not
match between final result and the node executing computeResultInFe
2024-09-18 13:48:01 +08:00
8a575d0891 [improvement](statistics)User admin instead of root to run stats sql. (#40867) (#40898)
backport: https://github.com/apache/doris/pull/40867
2024-09-18 13:36:50 +08:00
c176c9feb0 [fix](statistics)Fix empty table keep auto analyze bug. (#40811) (#40896)
backport: https://github.com/apache/doris/pull/40811
2024-09-18 12:51:44 +08:00
4511d3e900 [cherry-pick](branch2.1) fix unstable case of partitions (#40886)
## Proposed changes

Issue Number: close #xxx
backport #40861
2024-09-18 09:49:24 +08:00
76c7bf0785 [bugfix](loadmem) load memory is too small because flush memory is not right (#40696) (#40884) 2024-09-16 12:25:30 +08:00
a6e2364f56 [cherrypick](branch21) pick some exception handleing pr in page io (#40883)
## Proposed changes

pick
https://github.com/apache/doris/pull/39536
https://github.com/apache/doris/pull/39913
https://github.com/apache/doris/pull/39964
https://github.com/apache/doris/pull/40020

---------

Co-authored-by: yiguolei <yiguolei@gmail.com>
2024-09-16 08:56:43 +08:00
782973ee77 [fix](auth)Http api check auth (#40688) (#40865)
pick: https://github.com/apache/doris/pull/40688
2024-09-15 23:50:54 +08:00
fe9f4fdd95 [pick](mtmv)Pick some pr to 21 #39998 #40332 #40485 (#40843)
## Proposed changes
pr: https://github.com/apache/doris/pull/40485
commitId: 18a374f6

pr: https://github.com/apache/doris/pull/40332
commitId: cd2062ae

pr: https://github.com/apache/doris/pull/39998
commitId: 948fb2ab
2024-09-15 23:48:33 +08:00
b52b572ade [branch-2.1](memory) When Load ends, check memory tracker value returns is equal to 0 (#40850)
pick
#38960
#39908
#40043
#40092
#40016
#40439

---------

Co-authored-by: hui lai <1353307710@qq.com>
Co-authored-by: yiguolei <676222867@qq.com>
2024-09-15 23:47:53 +08:00
148f385901 [fix](tests) Fix export p2 2.1 (#40852)
bp: #40198
2024-09-15 21:38:43 +08:00
f3b1f1c19b [fix](encrypt) wrong mode arg of encrypt and decrypt function make BE crash (#40726) (#40868)
pick #40726 to branch-2.1
2024-09-15 21:31:00 +08:00
0d3b9c3f18 [branch-2.1](load) fix wrong replica number when loading to table with no partition (#40635) (#40881)
pick https://github.com/apache/doris/pull/40635
2024-09-15 19:58:53 +08:00
ea4d166edb [branch-2.1] Picks "[opt](partial update) Allow to only specify key columns in partial update #40736" (#40863)
picks https://github.com/apache/doris/pull/40736
2024-09-15 18:57:43 +08:00
7bb9ca91c8 [branch-2.1](fix) adjust data download url about hive docker (#40846)
## Proposed changes

fix paimon regression test

Co-authored-by: Dongyang Li <hello_stephen@qq.com>
Co-authored-by: stephen <hello-stephen@qq.com>
2024-09-14 23:19:54 +08:00
b7103bf00c [fix](statistics)Fix drop stats log editlog bug. Catch drop stats exception while truncate table. (#40738) (#40853)
backport: https://github.com/apache/doris/pull/40738
2024-09-14 23:08:24 +08:00
cecd214345 [branch-2.1](Column) refactor ColumnNullable to provide flags safety (#40769) (#40848)
pick https://github.com/apache/doris/pull/40769

Co-authored-by: Jerry Hu <mrhhsg@gmail.com>
2024-09-14 16:27:43 +08:00
963415ce45 [test](case) add some test case for encrypt/decrypt functions (#40427) (#40847)
pick #40427 to branch-2.1

Co-authored-by: zhangstar333 <87313068+zhangstar333@users.noreply.github.com>
2024-09-14 16:26:39 +08:00
55e92da7e7 2.1.7-rc01 (#40851)
## Proposed changes

Issue Number: close #xxx

<!--Describe your changes.-->

Co-authored-by: yiguolei <yiguolei@gmail.com>
2024-09-14 13:58:53 +08:00
0b1d517caa [improvement](statistics)Return -1 to neredis if report olap table row count for new table is not done for all tablets. (#40457) (#40838)
backport: https://github.com/apache/doris/pull/40457
2024-09-14 13:19:35 +08:00
6ab8a7e5df [fix](p0)Fix case timeout. (#40788) (#40840)
backport: https://github.com/apache/doris/pull/40788
2024-09-14 12:49:37 +08:00
f16615a1fc [branch-2.1](memory) Allocator support address sanitizers (#40836)
pick
#33396
#33862
#33853
#33732
#33841
#33933
#34901
#35014

---------

Co-authored-by: yiguolei <676222867@qq.com>
Co-authored-by: yiguolei <yiguolei@gmail.com>
2024-09-14 12:12:44 +08:00
341b2e0693 [enhancement](compaction) Abort compaction tasks when correspoding tablet states have been changed (#40271) (#40828)
## Proposed changes

pick: #40271

1. Change the standard for cumu compaction capability. Tablets under
state `running` or `not ready` are capable to do cumulative compaction.
2. Abort a compaction task at the beginning when the tablet is no more
capable to do compaction.
2024-09-14 11:19:31 +08:00
c79621fff1 [enhancement](schema-change) Make the schema change memory space adaptive (#40822)
pick: #34350
2024-09-14 11:17:41 +08:00
9a79edca84 [cherry-pick](branch-21) fix partition_topn not reset output rows after do_partition_topn_sort (#40761) (#40792)
## Proposed changes

cherry-pick from master https://github.com/apache/doris/pull/40761

<!--Describe your changes.-->
2024-09-14 11:15:56 +08:00