...
But, most customers just want to thansform the data, so, they may extend the adapter with the simple API.
Code Block |
---|
language | java |
---|
title | CacheObjectTransformerSpiAdapter |
---|
|
public abstract class CacheObjectTransformerSpiAdapter extends IgniteSpiAdapter implements CacheObjectTransformerSpi {
...
/**
* Transforms the data.
*
* @param original Original data.
* @return Transformed data.
* @throws IgniteCheckedException when transformation is not possible/suitable.
*/
protected abstract ByteBuffer transform(ByteBuffer original) throws IgniteCheckedException;
/**
* Restores the data.
*
* @param transformed Transformed data.
* @param length Original data length.
* @return Restored data.
*/
protected abstract ByteBuffer restore(ByteBuffer transformed, int length);
} |
Compression Example
Code Block |
---|
language | java |
---|
title | CompressionSpi |
---|
|
protected static class CompressionTransformerSpi extends CacheObjectTransformerSpiAdapter {
private static final LZ4Factory lz4Factory = LZ4Factory.fastestInstance();
protected ByteBuffer transform(ByteBuffer original) throws IgniteCheckedException {
int lim = original.remaining() - CacheObjectTransformerSpi.OVERHEAD;
if (lim <= 0)
throw new IgniteCheckedException("Compression is not profitable.");
ByteBuffer compressed = byteBuffer(lim);
Zstd.compress(compressed, original, 1);
compressed.flip();
return compressed;
}
protected ByteBuffer restore(ByteBuffer transformed, int length) {
ByteBuffer restored = byteBuffer(length);
Zstd.decompress(restored, transformed);
restored.flip();
return restored;
}
} |
Encryption example
Code Block |
---|
language | java |
---|
title | EncryptionSpi |
---|
|
|
Risks and Assumptions
Transformation requires additional memory allocation and subsequent GC work.
...