@@ -585,6 +585,74 @@ CTEST2(large_inserts_stress, test_random_keys_random_values_threaded)
585585 close (random_val_fd );
586586}
587587
588+ CTEST2 (large_inserts_stress ,
589+ test_fp_num_tuples_out_of_bounds_bug_trunk_build_filters )
590+ {
591+ char key_data [TEST_KEY_SIZE ];
592+ char val_data [TEST_VALUE_SIZE ];
593+
594+ uint64 start_key = 0 ;
595+
596+ uint64 start_time = platform_get_timestamp ();
597+
598+ threadid thread_idx = platform_get_tid ();
599+
600+ // Test is written to insert multiples of millions per thread.
601+ ASSERT_EQUAL (0 , (data -> num_inserts % MILLION ));
602+
603+ platform_default_log ("%s()::%d:Thread-%-lu inserts %lu (%lu million)"
604+ ", sequential key, sequential value, "
605+ "KV-pairs starting from %lu ...\n" ,
606+ __func__ ,
607+ __LINE__ ,
608+ thread_idx ,
609+ data -> num_inserts ,
610+ (data -> num_inserts / MILLION ),
611+ start_key );
612+
613+ uint64 ictr = 0 ;
614+ uint64 jctr = 0 ;
615+
616+ bool verbose_progress = TRUE;
617+ memset (val_data , 'V' , sizeof (val_data ));
618+ uint64 val_len = sizeof (val_data );
619+
620+ for (ictr = 0 ; ictr < (data -> num_inserts / MILLION ); ictr ++ ) {
621+ for (jctr = 0 ; jctr < MILLION ; jctr ++ ) {
622+
623+ uint64 id = (start_key + (ictr * MILLION ) + jctr );
624+
625+ // Generate sequential key data
626+ snprintf (key_data , sizeof (key_data ), "%lu" , id );
627+ uint64 key_len = strlen (key_data );
628+
629+ slice key = slice_create (key_len , key_data );
630+ slice val = slice_create (val_len , val_data );
631+
632+ int rc = splinterdb_insert (data -> kvsb , key , val );
633+ ASSERT_EQUAL (0 , rc );
634+ }
635+ if (verbose_progress ) {
636+ platform_default_log (
637+ "%s()::%d:Thread-%lu Inserted %lu million KV-pairs ...\n" ,
638+ __func__ ,
639+ __LINE__ ,
640+ thread_idx ,
641+ (ictr + 1 ));
642+ }
643+ }
644+ uint64 elapsed_ns = platform_timestamp_elapsed (start_time );
645+
646+ platform_default_log ("%s()::%d:Thread-%lu Inserted %lu million KV-pairs in "
647+ "%lu s, %lu rows/s\n" ,
648+ __func__ ,
649+ __LINE__ ,
650+ thread_idx ,
651+ ictr , // outer-loop ends at #-of-Millions inserted
652+ NSEC_TO_SEC (elapsed_ns ),
653+ (data -> num_inserts / NSEC_TO_SEC (elapsed_ns )));
654+ }
655+
588656/*
589657 * ----------------------------------------------------------------------------
590658 * do_inserts_n_threads() - Driver function that will fire-up n-threads to
0 commit comments