TestMergeV2MultiDataStructuresConcurrent tests merge with all data structures together
(t *testing.T)
| 1799 | |
| 1800 | // TestMergeV2MultiDataStructuresConcurrent tests merge with all data structures together |
| 1801 | func TestMergeV2MultiDataStructuresConcurrent(t *testing.T) { |
| 1802 | opts := DefaultOptions |
| 1803 | dir := t.TempDir() |
| 1804 | opts.Dir = dir |
| 1805 | opts.SegmentSize = 256 * 1024 // 256KB |
| 1806 | opts.EnableHintFile = true |
| 1807 | |
| 1808 | db, err := Open(opts) |
| 1809 | if err != nil { |
| 1810 | t.Fatalf("open: %v", err) |
| 1811 | } |
| 1812 | defer func() { |
| 1813 | if db != nil { |
| 1814 | _ = db.Close() |
| 1815 | } |
| 1816 | }() |
| 1817 | |
| 1818 | bucketBTree := "btree-bucket" |
| 1819 | bucketList := "list-bucket" |
| 1820 | bucketSet := "set-bucket" |
| 1821 | bucketZSet := "zset-bucket" |
| 1822 | |
| 1823 | if err := db.Update(func(tx *Tx) error { |
| 1824 | if err := tx.NewBucket(DataStructureBTree, bucketBTree); err != nil { |
| 1825 | return err |
| 1826 | } |
| 1827 | |
| 1828 | if err := tx.NewBucket(DataStructureList, bucketList); err != nil { |
| 1829 | return err |
| 1830 | } |
| 1831 | |
| 1832 | if err := tx.NewBucket(DataStructureSet, bucketSet); err != nil { |
| 1833 | return err |
| 1834 | } |
| 1835 | |
| 1836 | if err := tx.NewBucket(DataStructureSortedSet, bucketZSet); err != nil { |
| 1837 | return err |
| 1838 | } |
| 1839 | |
| 1840 | return nil |
| 1841 | }); err != nil { |
| 1842 | t.Fatalf("create buckets: %v", err) |
| 1843 | } |
| 1844 | |
| 1845 | // Phase 1: Create data across all data structures to trigger multiple files |
| 1846 | numKeys := 2000 |
| 1847 | valueSize := bytes.Repeat([]byte("x"), 200) |
| 1848 | |
| 1849 | for i := 0; i < numKeys; i++ { |
| 1850 | if err := db.Update(func(tx *Tx) error { |
| 1851 | // BTree key-value |
| 1852 | key := fmt.Sprintf("btree-key-%03d", i) |
| 1853 | value := append([]byte(fmt.Sprintf("btree-val-%03d-", i)), valueSize...) |
| 1854 | if err := tx.Put(bucketBTree, []byte(key), value, Persistent); err != nil { |
| 1855 | return err |
| 1856 | } |
| 1857 | |
| 1858 | // List operations |