@@ -363,6 +363,47 @@ public void mergeSpillsWithFileStreamAndNoCompression() throws Exception {
363363 testMergingSpills (false , null );
364364 }
365365
366+ @ Test
367+ public void writeEnoughDataToTriggerSpill () throws Exception {
368+ when (shuffleMemoryManager .tryToAcquire (anyLong ()))
369+ .then (returnsFirstArg ()) // Allocate initial sort buffer
370+ .then (returnsFirstArg ()) // Allocate initial data page
371+ .thenReturn (0L ) // Deny request to allocate new data page
372+ .then (returnsFirstArg ()); // Grant new sort buffer and data page.
373+ final UnsafeShuffleWriter <Object , Object > writer = createWriter (false );
374+ final ArrayList <Product2 <Object , Object >> dataToWrite = new ArrayList <Product2 <Object , Object >>();
375+ final byte [] bigByteArray = new byte [PackedRecordPointer .MAXIMUM_PAGE_SIZE_BYTES / 128 ];
376+ for (int i = 0 ; i < 128 + 1 ; i ++) {
377+ dataToWrite .add (new Tuple2 <Object , Object >(i , bigByteArray ));
378+ }
379+ writer .write (dataToWrite .iterator ());
380+ verify (shuffleMemoryManager , times (5 )).tryToAcquire (anyLong ());
381+ Assert .assertEquals (2 , spillFilesCreated .size ());
382+ writer .stop (true );
383+ readRecordsFromFile ();
384+ assertSpillFilesWereCleanedUp ();
385+ }
386+
387+ @ Test
388+ public void writeEnoughRecordsToTriggerSortBufferExpansionAndSpill () throws Exception {
389+ when (shuffleMemoryManager .tryToAcquire (anyLong ()))
390+ .then (returnsFirstArg ()) // Allocate initial sort buffer
391+ .then (returnsFirstArg ()) // Allocate initial data page
392+ .thenReturn (0L ) // Deny request to grow sort buffer
393+ .then (returnsFirstArg ()); // Grant new sort buffer and data page.
394+ final UnsafeShuffleWriter <Object , Object > writer = createWriter (false );
395+ final ArrayList <Product2 <Object , Object >> dataToWrite = new ArrayList <Product2 <Object , Object >>();
396+ for (int i = 0 ; i < UnsafeShuffleWriter .INITIAL_SORT_BUFFER_SIZE ; i ++) {
397+ dataToWrite .add (new Tuple2 <Object , Object >(i , i ));
398+ }
399+ writer .write (dataToWrite .iterator ());
400+ verify (shuffleMemoryManager , times (5 )).tryToAcquire (anyLong ());
401+ Assert .assertEquals (2 , spillFilesCreated .size ());
402+ writer .stop (true );
403+ readRecordsFromFile ();
404+ assertSpillFilesWereCleanedUp ();
405+ }
406+
366407 @ Test
367408 public void writeRecordsThatAreBiggerThanDiskWriteBufferSize () throws Exception {
368409 final UnsafeShuffleWriter <Object , Object > writer = createWriter (false );
0 commit comments