| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|\
| |
| | |
Revert "replace unix implementation to be the same as solaris to fix …"
|
|/
|
|
|
|
| |
issue with glusterfs"
This reverts commit ca9f2088aab4fc9832e587655f0026875bddbf9b.
|
|\
| |
| | |
hexidecimal -> hexadecimal
|
|/
|
| |
Small spelling fix :)
|
|\
| |
| | |
Ensure that keys generated by testing/quick are unique
|
|/
|
|
|
|
|
|
| |
Quick seed 21691 used to generate duplicate keys,
which caused some Puts of values to overwrite other values,
causing spurious test failures.
Fixes #629.
|
|
|
|
|
|
| |
The new FCTNL locking does not support multiple locks from the
same process which makes those tests fail. The lock tests have
been removed.
|
|\
| |
| | |
Fix return statement inside else block at the end of function
|
| |
| |
| |
| |
| |
| | |
windows file
Signed-off-by: nick <nicholasjamesrusso@gmail.com>
|
|\ \
| | |
| | | |
replace unix implementation to be the same as solaris to fix an issue with glusterfs
|
| | |
| | |
| | |
| | | |
glusterfs
|
|\ \ \
| | | |
| | | | |
Fix prefix scan example
|
| | | |
| | | |
| | | | |
The example is correct in isolation, but if people just copy the loop, it will go into infinite loop when given an empty byte slice.
|
|\ \ \ \
| | | | |
| | | | | |
Minor cleanup and bug fixes
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
The existing append-based implementation left a hanging reference to
the last tx.
For example, if db.txs was:
[]*Tx{0x1, 0x2, 0x3, 0x4, 0x5}
and we removed the second element, db.txs would now be:
[]*Tx{0x1, 0x3, 0x4, 0x5, 0x5}[:4]
The garbage collector cannot reclaim anything anywhere in a slice,
even pointers between its len and cap, because the len can always
be extended up to the cap.
This hanging reference to the Tx could last indefinitely,
and since the Tx has a reference to user-provided functions,
which could be closures, this bug could prevent arbitrary
amounts of user garbage from being collected.
Since db.txs is unordered anyway, switch to a simpler--and O(1) instead
of O(n)--implementation. Swap the last element into the spot to be
deleted, nil out the original last element, and shrink the slice.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
freelist.size did not account for the extra
fake freelist item used to hold the number of
elements when the freelist is large.
|
| | | | |
| | | | |
| | | | |
| | | | | |
This recovers the slight alloc regression in #636.
|
|/ / / /
| | | |
| | | |
| | | |
| | | | |
freelist.lenall duplicated freelist.count.
freelist.copyall and mergepgids docs had typos.
|
|\ \ \ \
| | | | |
| | | | | |
Don't allocate huge slices to merge pgids in freelist.write
|
| |/ / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Using a large (50gb) database with a read-write-delete heavy load,
nearly 100% of allocated space came from freelists.
1/3 came from freelist.release, 1/3 from freelist.write,
and 1/3 came from tx.allocate to make space for freelist.write.
In the case of freelist.write, the newly allocated giant slice gets
copied to the space prepared by tx.allocate and then discarded.
To avoid this, add func mergepgids that accepts a destination slice,
and use it in freelist.write.
This has a mild negative impact on the existing benchmarks,
but cuts allocated space in my real world db by over 30%.
name old time/op new time/op delta
_FreelistRelease10K-8 18.7µs ±10% 18.2µs ± 4% ~ (p=0.548 n=5+5)
_FreelistRelease100K-8 233µs ± 5% 258µs ±20% ~ (p=0.151 n=5+5)
_FreelistRelease1000K-8 3.34ms ± 8% 3.13ms ± 8% ~ (p=0.151 n=5+5)
_FreelistRelease10000K-8 32.3ms ± 1% 32.2ms ± 7% ~ (p=0.690 n=5+5)
DBBatchAutomatic-8 2.18ms ± 3% 2.19ms ± 4% ~ (p=0.421 n=5+5)
DBBatchSingle-8 140ms ± 6% 140ms ± 4% ~ (p=0.841 n=5+5)
DBBatchManual10x100-8 4.41ms ± 2% 4.37ms ± 3% ~ (p=0.548 n=5+5)
name old alloc/op new alloc/op delta
_FreelistRelease10K-8 82.5kB ± 0% 82.5kB ± 0% ~ (all samples are equal)
_FreelistRelease100K-8 805kB ± 0% 805kB ± 0% ~ (all samples are equal)
_FreelistRelease1000K-8 8.05MB ± 0% 8.05MB ± 0% ~ (all samples are equal)
_FreelistRelease10000K-8 80.4MB ± 0% 80.4MB ± 0% ~ (p=1.000 n=5+5)
DBBatchAutomatic-8 384kB ± 0% 384kB ± 0% ~ (p=0.095 n=5+5)
DBBatchSingle-8 17.2MB ± 1% 17.2MB ± 1% ~ (p=0.310 n=5+5)
DBBatchManual10x100-8 908kB ± 0% 902kB ± 1% ~ (p=0.730 n=4+5)
name old allocs/op new allocs/op delta
_FreelistRelease10K-8 5.00 ± 0% 5.00 ± 0% ~ (all samples are equal)
_FreelistRelease100K-8 5.00 ± 0% 5.00 ± 0% ~ (all samples are equal)
_FreelistRelease1000K-8 5.00 ± 0% 5.00 ± 0% ~ (all samples are equal)
_FreelistRelease10000K-8 5.00 ± 0% 5.00 ± 0% ~ (all samples are equal)
DBBatchAutomatic-8 10.2k ± 0% 10.2k ± 0% +0.07% (p=0.032 n=5+5)
DBBatchSingle-8 58.6k ± 0% 59.6k ± 0% +1.70% (p=0.008 n=5+5)
DBBatchManual10x100-8 6.02k ± 0% 6.03k ± 0% +0.17% (p=0.029 n=4+4)
|
|\ \ \ \
| | | | |
| | | | | |
Document multi-process limitation in README
|
|/ / / /
| | | |
| | | | |
Add limitation about multiple processes opening databases concurrently.
|
|\ \ \ \
| |/ / /
|/| | | |
[ppc64] added missing variable
|
| | |/
| |/|
| | | |
The variable `brokenUnaligned` was missing for ppc64.
|
|\ \ \
| |_|/
|/| | |
Added BoltHold and Ironsmith to the projects list
|
|/ / |
|
|\ \
| |/
|/| |
Add btcwallet and dcrwallet to projects using bolt.
|
| | |
|
|/ |
|
|\
| |
| | |
enhc: update example for nested buckets
|
| | |
|
|\ \
| |/
|/| |
Add 'bolter' to the list of projects that use Bolt
|
|/
|
| |
[bolter](https://github.com/hasit/bolter) is a command-line app for viewing BoltDB file in your terminal using [tablewriter](https://github.com/olekukonko/tablewriter).
|
|\
| |
| | |
fix typo in README.md
|
|/ |
|
|\
| |
| | |
Add gopherpit to projects that use Bolt
|
|/ |
|
|\
| |
| | |
Fix Stats.Sub() for Stats.TxN.
|
|/
|
|
|
|
| |
The subtraction for `TxN` was previously transposed which caused
the result to be a negative number. This change alters the order
to return the correct (positive) result.
|
|\
| |
| | |
Update README.md
|
|/
|
|
|
| |
Add warning to README.md that keys and values in `ForEach()` are
invalid outside of transaction.
|
|\
| |
| | |
Update README.md
|
| |
| |
| | |
Add anacrolix/torrent to users.
|
|\ \
| | |
| | | |
README
|
|/ /
| |
| | |
Added note to README that the file format is fixed.
|
|\ \
| | |
| | | |
task#560 print leaf k/v with right value
|
| | | |
|
|\ \ \
| | | |
| | | | |
Correct broken unaligned load/store in armv5
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
armv5 devices and older (i.e. <= arm9 generation) require addresses that are
stored to and loaded from to to be 4-byte aligned.
If this is not the case the lower 2 bits of the address are cleared and the load
is performed in an unexpected order, including up to 3 bytes of data located
prior to the address.
Inlined buckets are stored after their key in a page and since there is no
guarantee that the key will be of a length that is a multiple of 4, it is
possible for unaligned load/stores to occur when they are cast back to bucket
and page pointer types.
The fix adds a new field to track whether the current architecture exhibits this
issue, sets it on module load for ARM architectures, and then on bucket open, if
this field is set and the address is unaligned, a byte-by-byte copy of the
inlined bucket is performed.
Ref: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka15414.html
|
|\ \ \ \
| | | | |
| | | | | |
Compaction Command
|