We only compact at when the queue start? Should we compact if the truncated size is greater than some bound? If yes, then I worry about the blocking on truncate() due to the synchronize block.