tursodatabase / tursodatabase/libsql

null pointer while sync from remote

Open
#2,069 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C
Stars
17.2k
Forks
531
Avg merge
1h 12m
Merged PRs (30d)
1

Description

I'm using sqld docker as the remote server and using remote_replica. Got this error.

let db = libsql::Builder::new_remote_replica(
        db_path,
        url,
        token,
    )
    .build()
    .await
    .expect("fail to build DB");
 db.sync().await
thread 'tokio-runtime-worker' panicked at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-sys-0.9.7/src/wal/ffi.rs:449:59:
null pointer dereference occurred
stack backtrace:
   0: rust_begin_unwind
             at /rustc/05f9846f893b09a1be1fc8560e33fc3c815cfecb/library/std/src/panicking.rs:695:5
   1: core::panicking::panic_nounwind_fmt::runtime
             at /rustc/05f9846f893b09a1be1fc8560e33fc3c815cfecb/library/core/src/panicking.rs:117:22
   2: core::panicking::panic_nounwind_fmt
             at /rustc/05f9846f893b09a1be1fc8560e33fc3c815cfecb/library/core/src/intrinsics/mod.rs:3886:9
   3: core::panicking::panic_null_pointer_dereference
             at /rustc/05f9846f893b09a1be1fc8560e33fc3c815cfecb/library/core/src/panicking.rs:304:5
   4: libsql_sys::wal::ffi::checkpoint
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-sys-0.9.7/src/wal/ffi.rs:449:59
   5: sqlite3PagerCheckpoint
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-ffi-0.9.7/bundled/src/sqlite3.c:65110:10
   6: sqlite3BtreeCheckpoint
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-ffi-0.9.7/bundled/src/sqlite3.c:82419:12
   7: sqlite3Checkpoint
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-ffi-0.9.7/bundled/src/sqlite3.c:183635:12
   8: sqlite3_wal_checkpoint_v2
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-ffi-0.9.7/bundled/src/sqlite3.c:183573:10
   9: sqlite3_wal_checkpoint
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-ffi-0.9.7/bundled/src/sqlite3.c:183598:10
  10: sqlite3WalDefaultHook
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-ffi-0.9.7/bundled/src/sqlite3.c:183464:5
  11: doWalCallbacks
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-ffi-0.9.7/bundled/src/sqlite3.c:92182:14
  12: sqlite3Step
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-ffi-0.9.7/bundled/src/sqlite3.c:92309:15
  13: sqlite3_step
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-ffi-0.9.7/bundled/src/sqlite3.c:92371:16
  14: rusqlite::raw_statement::RawStatement::step
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-rusqlite-0.9.7/src/raw_statement.rs:106:18
  15: rusqlite::statement::Statement::execute_with_bound_parameters
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-rusqlite-0.9.7/src/statement.rs:648:17
  16: rusqlite::statement::Statement::execute
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql-rusqlite-0.9.7/src/statement.rs:114:9
  17: libsql_replication::injector::sqlite_injector::SqliteInjectorInner::try_flush
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql_replication-0.9.7/src/injector/sqlite_injector/mod.rs:203:33
  18: libsql_replication::injector::sqlite_injector::SqliteInjectorInner::flush
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql_replication-0.9.7/src/injector/sqlite_injector/mod.rs:153:15
  19: libsql_replication::injector::sqlite_injector::SqliteInjectorInner::inject_frame
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql_replication-0.9.7/src/injector/sqlite_injector/mod.rs:135:20
  20: <libsql_replication::injector::sqlite_injector::SqliteInjector as libsql_replication::injector::Injector>::inject_frame::{{closure}}::{{closure}}
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/libsql_replication-0.9.7/src/injector/sqlite_injector/mod.rs:33:32
  21: <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/runtime/blocking/task.rs:42:21
  22: tokio::runtime::task::core::Core<T,S>::poll::{{closure}}
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/runtime/task/core.rs:331:17
  23: tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/loom/std/unsafe_cell.rs:16:9
  24: tokio::runtime::task::core::Core<T,S>::poll
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/runtime/task/core.rs:320:13
  25: tokio::runtime::task::harness::poll_future::{{closure}}
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/runtime/task/harness.rs:532:19
  26: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /Users/username/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/panic/unwind_safe.rs:272:9
  27: std::panicking::try::do_call
             at /Users/username/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:587:40
  28: ___rust_try
  29: std::panicking::try
             at /Users/username/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:550:19
  30: std::panic::catch_unwind
             at /Users/username/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panic.rs:358:14
  31: tokio::runtime::task::harness::poll_future
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/runtime/task/harness.rs:520:18
  32: tokio::runtime::task::harness::Harness<T,S>::poll_inner
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/runtime/task/harness.rs:209:27
  33: tokio::runtime::task::harness::Harness<T,S>::poll
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/runtime/task/harness.rs:154:15
  34: tokio::runtime::task::raw::poll
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/runtime/task/raw.rs:271:5
  35: tokio::runtime::task::raw::RawTask::poll
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/runtime/task/raw.rs:201:18
  36: tokio::runtime::task::UnownedTask<S>::run
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/runtime/task/mod.rs:500:9
  37: tokio::runtime::blocking::pool::Task::run
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/runtime/blocking/pool.rs:161:9
  38: tokio::runtime::blocking::pool::Inner::run
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/runtime/blocking/pool.rs:511:17
  39: tokio::runtime::blocking::pool::Spawner::spawn_thread::{{closure}}
             at /Users/username/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.45.0/src/runtime/blocking/pool.rs:469:13
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
thread caused non-unwinding panic. aborting.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the remote-replica sync with sqld using the issue's Builder example, then inspect libsql-sys/src/wal/ffi.rs at checkpoint and libsql_replication/src/injector/sqlite_injector/mod.rs around flush and try_flush. Done means sync no longer aborts on the null pointer and the regression is covered by an appropriate test.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust, sqlite
Domain
database, distributed-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
32/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.