* Explicitly type 1e3 as int
Fixes issue causing binding tester to throw error ('float' object cannot be interpreted as an integer) when using certain Python versions (encountered with 3.12.6).
* Explicitly type 1e8 as int
Additional occurrence throwing intermittent errors.
* Go binding: fix bug with R/O transaction destroyed before futures, add GC references for db/tx
In a previous PR the R/O transaction was optimized and the finalizer was removed; however this prevents using
any future, since transaction is already destroyed by the time future is attempted evaluation.
Additionally, a new issue is uncovered and addressed: the Go Database, Transaction and Future objects are all
garbage-collected independently, which is incorrect because Database and Transaction must not be garbage-collected
if any future has not yet been garbage-collected.
* Go binding: add test for future evaluated outside of R/O transaction
All API calls which create a database are guaranteed to happen while the network thread is running;
there is no performance penalty for calls happening after network thread has already been started.
Notable change: if the call to run network thread fails, a panic will be generated instead of a logged error.
Setting the finalizer prevents user from calling Close(),
as it would randomly result in SIGSEGV or some other silent memory corruption.
No finalizer is set for the database and user is expected to call Close() to
avoid memory leaks.
CC sets a version to int_max in ClientDBInfo indicating a refresh, however,
proxy server would reject this version for the error of future_version.
This change fixes this issue by not sending int_max, instead maintaining a
lastKnown in memory and send it to grvproxy to get latest globalconfig.
this change also fixes some java tests that were used to test the fix
This a marginal improvement which follows the C API documentation:
> It is not necessary to commit a read-only transaction – you can simply call fdb_transaction_destroy().
Read-only transactions will be always destroyed before returning to caller,
without relying on Go garbage collection; the read-only transactions
can be destroyed so early because futures created within them must never be used
outside of them.
The CTest item
* update_bindings_go_src_fdb_generated_go
will compare the generated go api with hardcoded go api to test the
generation. New FDB option will cause hardcoded go code outdated.
This change attempts to address the SIGSEGV happening when network routine is started
multiple times concurrently.
It changes the network mutex to be a RW mutex, to optimize the case
of calls when network is already started.
fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x1 addr=0x7f4600000011 pc=0x7f46a405678e]
runtime stack:
runtime.throw({0x1169773?, 0x7f46a479f96c?})
/usr/local/go/src/runtime/panic.go:1047 +0x5d fp=0x7f465affb790 sp=0x7f465affb760 pc=0x44e45d
runtime.sigpanic()
/usr/local/go/src/runtime/signal_unix.go:821 +0x3e9 fp=0x7f465affb7f0 sp=0x7f465affb790 pc=0x466e49
goroutine 60 [syscall]:
runtime.cgocall(0xf4f640, 0xc0001f7f80)
/usr/local/go/src/runtime/cgocall.go:157 +0x6e fp=0xc0001f7f58 sp=0xc0001f7f20 pc=0x41840e
github.com/apple/foundationdb/bindings/go/src/fdb._Cfunc_fdb_run_network()
_cgo_gotypes.go:378 +0x85 fp=0xc0001f7f80 sp=0xc0001f7f58 pc=0xd19d25
github.com/apple/foundationdb/bindings/go/src/fdb.startNetwork.func1()
/home/user/go/pkg/mod/github.com/apple/foundationdb/bindings/go@v0.0.0-20221026173525-97cc643cef69/src/fdb/fdb.go:209 +0x2a fp=0xc0001f7fe0 sp=0xc0001f7f80 pc=0xd2704a
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:1598 +0x1 fp=0xc0001f7fe8 sp=0xc0001f7fe0 pc=0x487741
created by github.com/apple/foundationdb/bindings/go/src/fdb.startNetwork
/home/user/go/pkg/mod/github.com/apple/foundationdb/bindings/go@v0.0.0-20221026173525-97cc643cef69/src/fdb/fdb.go:208 +0x72
goroutine 1 [running]:
goroutine running on other thread; stack unavailable
* throttle hot shards
* expire throttled shards over time
* add backoff
* Parallelize messaging from RK to CP
* Obtain shards from a single SS
* handle expired transactions
* bump transaction_throttled_hot_shard
* Change SevError to SevWarn for CannotMonitorHotShardForSS
* Add log per request
* Update main branch to 7.4
* Update API version to 740
* Makes fdb_c_client_config_tests.py passing after API version update
* Remove from_7.3.0_until_7.4.0 and add from_7.3.0
* Update tests in fdb_c_client_config_tests.py
* Test watch cleanup on cancel
* Fix clearing the database in Java integration tests
* Always cancel the futures wrapped by MVC abortable futures
* More tests for watch cleanup
* Fix clear database database in some Java integration tests