Open HustCoderHu opened 5 years ago
@HustCoderHu thanks for reporting the issue, would it be possible to get pstack
on the process when the suspected deadlock happens? that would help us identify the problem.
Thread 21 (Thread 0x7f514b7fe700 (LWP 84397)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51acf4eb3d in rocksdb::port::CondVar::Wait() () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#2 0x00007f51acd04b38 in rocksdb::InstrumentedCondVar::Wait() () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51acdd9899 in rocksdb::Benchmark::DoWrite(rocksdb::ThreadState*, rocksdb::Benchmark::WriteMode) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51acdbdd74 in rocksdb::Benchmark::ThreadBody(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#5 0x00007f51acf4efa2 in rocksdb::(anonymous namespace)::StartThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#6 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#7 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 20 (Thread 0x7f514affd700 (LWP 84396)):
#0 0x00007f51ac3751e6 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51acf4eba2 in rocksdb::port::CondVar::TimedWait(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#2 0x00007f51acbc34ab in std::thread::_State_impl<std::thread::_Invoker<std::tuple<rocksdb::RepeatableThread::RepeatableThread(std::function<void ()>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rocksdb::Env*, unsigned long, unsigned long)::{lambda()#1}> > >::_M_run() () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#4 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#5 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 19 (Thread 0x7f518dffb700 (LWP 84380)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51acf4eb3d in rocksdb::port::CondVar::Wait() () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#2 0x00007f51acd04b38 in rocksdb::InstrumentedCondVar::Wait() () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace2b688 in rocksdb::DeleteScheduler::BackgroundEmptyTrash() () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 18 (Thread 0x7f518e7fc700 (LWP 84361)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 17 (Thread 0x7f518effd700 (LWP 84360)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 16 (Thread 0x7f51907f8700 (LWP 84359)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 15 (Thread 0x7f5190ff9700 (LWP 84358)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 14 (Thread 0x7f51917fa700 (LWP 84357)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 13 (Thread 0x7f5191ffb700 (LWP 84356)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 12 (Thread 0x7f51927fc700 (LWP 84355)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 11 (Thread 0x7f5192ffd700 (LWP 84354)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 10 (Thread 0x7f51937fe700 (LWP 84353)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 9 (Thread 0x7f518f7fe700 (LWP 84352)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 8 (Thread 0x7f5193fff700 (LWP 84351)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 7 (Thread 0x7f51a8e88700 (LWP 84350)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 6 (Thread 0x7f51a9689700 (LWP 84349)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 5 (Thread 0x7f51a9e8a700 (LWP 84348)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 4 (Thread 0x7f51aa68b700 (LWP 84347)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 3 (Thread 0x7f51aae8c700 (LWP 84345)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 2 (Thread 0x7f51ab68d700 (LWP 84344)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51ac09523c in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
#2 0x00007f51ace4b679 in rocksdb::ThreadPoolImpl::Impl::BGThread(unsigned long) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51ace4ba0f in rocksdb::ThreadPoolImpl::Impl::BGThreadWrapper(void*) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51ac09b53f in execute_native_thread_routine () from /lib64/libstdc++.so.6
#5 0x00007f51ac36e609 in start_thread () from /lib64/libpthread.so.0
#6 0x00007f51ab7a7e6f in clone () from /lib64/libc.so.6
Thread 1 (Thread 0x7f51ad4514c0 (LWP 84340)):
#0 0x00007f51ac374c3b in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1 0x00007f51acf4eb3d in rocksdb::port::CondVar::Wait() () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#2 0x00007f51acdce758 in rocksdb::Benchmark::RunBenchmark(int, rocksdb::Slice, void (rocksdb::Benchmark::*)(rocksdb::ThreadState*)) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#3 0x00007f51acdd3919 in rocksdb::Benchmark::Run() () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#4 0x00007f51acdb707f in rocksdb::db_bench_tool(int, char**) () from /home/hustzyw/rocksdb/rocksdb/Release/librocksdb.so.5
#5 0x00007f51ab6af03a in __libc_start_main () from /lib64/libc.so.6
#6 0x000000000041395a in _start ()
I ran the command and it completed successfully:
TEST_TMPDIR=/tmp ./db_bench --benchmarks="fillrandom,readrandom" --key_size=16 --reads=100000 --write_buffer_size=`expr 64 \* 1048576` --max_bytes_for_level_base=`expr 256 \* 1048576` --use_existing_db=0 --max_background_compactions=16 --value_size=1024 --num=80000000
Initializing RocksDB Options from the specified file
Initializing RocksDB Options from command-line flags
RocksDB: version 5.18
Date: Thu Dec 20 11:07:58 2018
CPU: 24 * Intel Core Processor (Skylake)
CPUCache: 16384 KB
Keys: 16 bytes each
Values: 1024 bytes each (512 bytes after compression)
Entries: 80000000
Prefix: 0 bytes
Keys per prefix: 0
RawSize: 79345.7 MB (estimated)
FileSize: 40283.2 MB (estimated)
Write rate: 0 bytes/second
Read rate: 0 ops/second
Compression: Snappy
Memtablerep: skip_list
Perf Level: 1
WARNING: Assertions are enabled; benchmarks unnecessarily slow
------------------------------------------------
Initializing RocksDB Options from the specified file
Initializing RocksDB Options from command-line flags
DB path: [/tmp/dbbench]
fillrandom : 15.092 micros/op 66262 ops/sec; 65.7 MB/s
DB path: [/tmp/dbbench]
readrandom : 1006.608 micros/op 993 ops/sec; 1.0 MB/s (100000 of 100000 found)
Given the command line and the thread stack show DoWrite I assume that this occurs with fillrandom, not readrandom.
Grep LOG for "error" and first is this which is fixed by using ulimit to change per-user limit for open SST or by configuring RocksDB to keep fewer open files.
2018/12/19-17:04:13.811622 7f51917fa700 [WARN] [db/db_impl_compaction_flush.cc:2601] Compaction error: IO error: While open a file for random read: /mnt/ssd//005648.sst: Too many open files
Expected behavior
Would have finished at least.
Actual behavior
It got stuck at 72300000 ops. Ram and ssd still had much free space(ram 10g+, ssd 500g+), and cpu utilization was nearly 0. I guess deadlock occurred
Steps to reproduce the behavior
version: last commit on Dec 15, 2018 a914a1c6dc37c63ac06186767235aa9d8f17469c
heres the LOG https://raw.githubusercontent.com/HustCoderHu/CodingPractice/master/database/LOG