cockroachdb / cockroach

CockroachDB — the cloud native, distributed SQL database designed for high availability, effortless scale, and control over data placement.
https://www.cockroachlabs.com
Other
29.99k stars 3.79k forks source link

debug: rocksdb --value_hex takes boolean arg, panics with hex arg #27596

Closed minglinlu closed 4 years ago

minglinlu commented 6 years ago

https://github.com/cockroachdb/cockroach/blob/master/docs/tech-notes/encoding.md I'm reading this article and have a try: ./cockroach debug rocksdb scan --value_hex=0xB244BD870A3505348D0F4272 Am I right? It always return the following error message: libc++abi.dylib: terminating with uncaught exception of type char const* SIGABRT: abort PC=0x7fffc7d0ed42 m=0 sigcode=0 signal arrived during cgo execution

goroutine 1 [syscall, locked to thread]: runtime.cgocall(0x52634b0, 0xc420673ba0, 0x5bd8381) /usr/local/go/src/runtime/cgocall.go:132 +0xe4 fp=0xc420673b60 sp=0xc420673b20 pc=0x4005d34 github.com/cockroachdb/cockroach/pkg/storage/engine._Cfunc_DBRunLDB(0x3, 0xc4202bda00) github.com/cockroachdb/cockroach/pkg/storage/engine/_obj/_cgo_gotypes.go:674 +0x45 fp=0xc420673ba0 sp=0xc420673b60 pc=0x4982855 github.com/cockroachdb/cockroach/pkg/storage/engine.RunLDB.func2(0xc4202bda00, 0x3, 0x3, 0x3, 0xc4202bda00) /Users/lml/golang/src/github.com/cockroachdb/cockroach/pkg/storage/engine/rocksdb.go:2163 +0xde fp=0xc420673bf8 sp=0xc420673ba0 pc=0x499653e github.com/cockroachdb/cockroach/pkg/storage/engine.RunLDB(0xc4202bd960, 0x2, 0x2) /Users/lml/golang/src/github.com/cockroachdb/cockroach/pkg/storage/engine/rocksdb.go:2163 +0x208 fp=0xc420673c88 sp=0xc420673bf8 pc=0x49910a8 github.com/cockroachdb/cockroach/pkg/cli.glob..func4(0x6e38f40, 0xc4202bd960, 0x2, 0x2) /Users/lml/golang/src/github.com/cockroachdb/cockroach/pkg/cli/debug.go:699 +0x3f fp=0xc420673cb0 sp=0xc420673c88 pc=0x524e20f github.com/cockroachdb/cockroach/vendor/github.com/spf13/cobra.(Command).execute(0x6e38f40, 0xc4202bd960, 0x2, 0x2, 0x6e38f40, 0xc4202bd960) /Users/lml/golang/src/github.com/cockroachdb/cockroach/vendor/github.com/spf13/cobra/command.go:702 +0x2c6 fp=0xc420673d58 sp=0xc420673cb0 pc=0x51eb7a6 github.com/cockroachdb/cockroach/vendor/github.com/spf13/cobra.(Command).ExecuteC(0x6e3e660, 0x402e539, 0xc420280260, 0xc420673ef0) /Users/lml/golang/src/github.com/cockroachdb/cockroach/vendor/github.com/spf13/cobra/command.go:783 +0x30e fp=0xc420673e88 sp=0xc420673d58 pc=0x51ec12e github.com/cockroachdb/cockroach/vendor/github.com/spf13/cobra.(*Command).Execute(0x6e3e660, 0xc420673ee8, 0x0) /Users/lml/golang/src/github.com/cockroachdb/cockroach/vendor/github.com/spf13/cobra/command.go:736 +0x2b fp=0xc420673eb8 sp=0xc420673e88 pc=0x51ebdfb github.com/cockroachdb/cockroach/pkg/cli.Run(0xc420010150, 0x4, 0x4, 0xc420014088, 0xc42009e000) /Users/lml/golang/src/github.com/cockroachdb/cockroach/pkg/cli/cli.go:159 +0x6d fp=0xc420673ee0 sp=0xc420673eb8 pc=0x521cadd github.com/cockroachdb/cockroach/pkg/cli.Main() /Users/lml/golang/src/github.com/cockroachdb/cockroach/pkg/cli/cli.go:52 +0x16c fp=0xc420673f70 sp=0xc420673ee0 pc=0x521c62c main.main() /Users/lml/golang/src/github.com/cockroachdb/cockroach/main.go:27 +0x20 fp=0xc420673f80 sp=0xc420673f70 pc=0x5262390 runtime.main() /usr/local/go/src/runtime/proc.go:195 +0x226 fp=0xc420673fe0 sp=0xc420673f80 pc=0x4031356 runtime.goexit() /usr/local/go/src/runtime/asm_amd64.s:2337 +0x1 fp=0xc420673fe8 sp=0xc420673fe0 pc=0x40605f1

knz commented 6 years ago

cc @petermattis

benesch commented 6 years ago

This reproduces trivially. Here's a more complete stack trace:

#0  0x00007ffff70f2428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1  0x00007ffff70f402a in __GI_abort () at abort.c:89
#2  0x000000000224d7cd in __gnu_cxx::__verbose_terminate_handler() ()
#3  0x00000000021b669d in __cxxabiv1::__terminate(void (*)()) ()
#4  0x00000000021b66c0 in std::terminate() ()
#5  0x00000000021b7e0f in __cxa_throw ()
#6  0x000000000207ecd0 in rocksdb::LDBCommand::StringToBool () at /go/src/github.com/cockroachdb/cockroach/c-deps/rocksdb/tools/ldb_cmd.cc:770
#7  0x0000000002086e1b in rocksdb::LDBCommand::ParseBooleanOption () at /go/src/github.com/cockroachdb/cockroach/c-deps/rocksdb/tools/ldb_cmd.cc:756
#8  0x0000000002089f71 in rocksdb::LDBCommand::LDBCommand () at /go/src/github.com/cockroachdb/cockroach/c-deps/rocksdb/tools/ldb_cmd.cc:307
#9  0x0000000002091cff in rocksdb::ScanCommand::ScanCommand () at /go/src/github.com/cockroachdb/cockroach/c-deps/rocksdb/tools/ldb_cmd.cc:2230
#10 0x0000000002094299 in rocksdb::LDBCommand::SelectCommand () at /go/src/github.com/cockroachdb/cockroach/c-deps/rocksdb/tools/ldb_cmd.cc:174
#11 0x000000000208d9a2 in std::function<rocksdb::LDBCommand* (rocksdb::LDBCommand::ParsedParams const&)>::operator()(rocksdb::LDBCommand::ParsedParams const&) const ()
    at /x-tools/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/include/c++/6.3.0/functional:2127
#12 rocksdb::LDBCommand::InitFromCmdLineArgs(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, rocksdb::Options const&, rocksdb::LDBOptions const&, std::vector<rocksdb::ColumnFamilyDescriptor, std::allocator<rocksdb::ColumnFamilyDescriptor> > const*, std::function<rocksdb::LDBCommand* (rocksdb::LDBCommand::ParsedParams const&)> const&) () at /go/src/github.com/cockroachdb/cockroach/c-deps/rocksdb/tools/ldb_cmd.cc:153
#13 0x000000000208ea5a in rocksdb::LDBCommand::InitFromCmdLineArgs () at /go/src/github.com/cockroachdb/cockroach/c-deps/rocksdb/tools/ldb_cmd.cc:99
#14 0x0000000001fe410f in rocksdb::LDBCommandRunner::RunCommand () at /go/src/github.com/cockroachdb/cockroach/c-deps/rocksdb/tools/ldb_tool.cc:104
#15 0x0000000001fe50bf in rocksdb::LDBTool::Run () at /go/src/github.com/cockroachdb/cockroach/c-deps/rocksdb/tools/ldb_tool.cc:127
#16 0x0000000001e27be0 in DBRunLDB () at /go/src/github.com/cockroachdb/cockroach/c-deps/libroach/ldb.cc:43
#17 0x0000000000703c80 in runtime.asmcgocall () at /usr/local/go/src/runtime/asm_amd64.s:688
#18 0x0000000000700a51 in runtime.newdefer.func2 () at /usr/local/go/src/runtime/panic.go:223
#19 0x00000000007024a9 in runtime.systemstack () at /usr/local/go/src/runtime/asm_amd64.s:409
#20 0x00000000006d99e0 in ?? () at /usr/local/go/src/runtime/proc.go:1087
#21 0x0000000000000000 in ?? ()
benesch commented 6 years ago

Ah, of course. The exception being thrown is "Invalid value for boolean argument". --value_hex takes a boolean argument (true or false), not a hex key.

What are you trying to do? Scan from a certain key, maybe?

./cockroach debug rocksdb scan --from=0xB244BD870A3505348D0F4272 --db=cockroach-data
benesch commented 6 years ago

Also, @knz, given that this is a cockroach debug command I'm not sure the S-3 is warranted.

minglinlu commented 6 years ago

Sorry, I misunderstood, --value_hex is the output format, which displays the value in hex format. It just a flag, --db=cockroach-data determines where your data source comes from.

benesch commented 6 years ago

That's right. This user experience of this command is far from ideal, but it comes from upstream, so there's not much we can do to improve it. I'll keep this issue open as an indication that we should at least catch exceptions and pretty-print them.

knz commented 6 years ago

And perhaps detail the meaning of the flags in the online help.

petermattis commented 4 years ago

The debug rocksdb tool leaves a lot to be desired from a usability perspective. In 20.1, the debug pebble tool will be the preferable choice. Note that the pebble tool works perfectly fine on RocksDB data stores. I'm closing this issue because we have no plans to fix or enhance the rocksdb tool.