New btrees are currently created with WT_BTREE_AWAITS_PUBLISH flag, which prevents any pages to be written to storage until the btree is actually published. Most importantly, this prevents WiredTiger to write out empty root pages for btrees with just unstable data (that are otherwise empty).
WiredTiger checks all btrees during the checkpoint prepare phase and removes the WT_BTREE_AWAITS_PUBLISH state from all btrees that can be published as of that checkpoint. This has the unfortunate consequence that a btree retains its WT_BTREE_AWAITS_PUBLISH state even after the stable schema epoch moves past the schema epoch associated with the btree's publish, making it impossible for WiredTiger to evict stable data from it even though the btree's create operation is already "stable" (for a lack of better word). This could create a problem if a user tries to create and bulk-load a table before its first checkpoint.
Here is one way that we could go around it: When eviction visits a btree and sees that it is WT_BTREE_AWAITS_PUBLISH, check if its create operation's schema epoch is greater or equal to the stable schema epoch. If so, it can safely remove that flag and proceed with eviction.
To accelerate the process, we might want to add a new field to WT_BTREE, which tracks the schema epoch of the btree's create (if known) and populate it during WT_SESSION::publish.