-
Notifications
You must be signed in to change notification settings - Fork 122
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implements an ArrowRootAllocationProvider spi
- Loading branch information
1 parent
3c93fee
commit 7e9b903
Showing
4 changed files
with
102 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
38 changes: 38 additions & 0 deletions
38
src/main/java/emissary/spi/ArrowRootAllocatorProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package emissary.spi; | ||
|
||
import org.apache.arrow.memory.BufferAllocator; | ||
import org.apache.arrow.memory.RootAllocator; | ||
|
||
public class ArrowRootAllocatorProvider implements InitializationProvider { | ||
|
||
private static final Object initalizationLock = new Object(); | ||
private static BufferAllocator arrowRootAllocator = null; | ||
|
||
@Override | ||
public void initialize() { | ||
synchronized (initalizationLock) { | ||
arrowRootAllocator = new RootAllocator(); | ||
} | ||
} | ||
|
||
@Override | ||
public void shutdown() { | ||
synchronized (initalizationLock) { | ||
arrowRootAllocator.close(); | ||
arrowRootAllocator = null; | ||
} | ||
InitializationProvider.super.shutdown(); | ||
} | ||
|
||
public static BufferAllocator getArrowRootAllocator() { | ||
synchronized (initalizationLock) { | ||
if (arrowRootAllocator == null) { | ||
throw new IllegalStateException("Arrow Root Allocator has not been initalized by the " + | ||
"ArrowRootAllocatorProvider or is already shutdown, is emissary.spi.ArrowRootAllocatorProver " + | ||
"listed in META-INF/services/emissary.spi.InitalizationProvider?"); | ||
} else { | ||
return arrowRootAllocator; | ||
} | ||
} | ||
} | ||
} |
1 change: 1 addition & 0 deletions
1
src/main/resources/META-INF/services/emissary.spi.InitializationProvider
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
emissary.spi.JavaCharSetInitializationProvider | ||
emissary.spi.ClassLocationVerificationProvider | ||
emissary.spi.ArrowRootAllocatorProvider |
30 changes: 30 additions & 0 deletions
30
src/test/java/emissary/spi/ArrowRootAllocatorProviderTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package emissary.spi; | ||
|
||
import emissary.test.core.junit5.UnitTest; | ||
|
||
import org.apache.arrow.memory.BufferAllocator; | ||
import org.junit.jupiter.api.Test; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertNotNull; | ||
import static org.junit.jupiter.api.Assertions.assertThrows; | ||
|
||
public class ArrowRootAllocatorProviderTest extends UnitTest { | ||
@Test | ||
public void testArrowRootAllocatorProvider() { | ||
ArrowRootAllocatorProvider provider = new ArrowRootAllocatorProvider(); | ||
provider.initialize(); | ||
BufferAllocator allocator = ArrowRootAllocatorProvider.getArrowRootAllocator(); | ||
assertNotNull(allocator); | ||
} | ||
|
||
@Test() | ||
public void testArrowRootAllocatorProviderAfterShutdown() { | ||
ArrowRootAllocatorProvider provider = new ArrowRootAllocatorProvider(); | ||
provider.initialize(); | ||
BufferAllocator allocatorOne = ArrowRootAllocatorProvider.getArrowRootAllocator(); | ||
assertNotNull(allocatorOne); | ||
provider.shutdown(); | ||
assertThrows(IllegalStateException.class, ArrowRootAllocatorProvider::getArrowRootAllocator, "expected IllegalStateException"); | ||
} | ||
} | ||
|