Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
titleInterface
public interface CacheObjectTransformer {
    /** Additional space required to store the transformed data. */
    public int OVERHEAD = 2;

    /**
     * Transforms the data.
     *
     * @param original Original data.
     * @return Transformed data or {@code null} when transformation is not possible/suitable.
     */
    public ByteBuffer transform(ByteBuffer original);

    /**
     * Restores the data.
     *
     * @param transformed Transformed data.
     * @return Restored data.
     */
    public ByteBuffer restore(ByteBuffer transformed);

    /**
     * Returns {@code true} when direct byte buffers are required.
     *
     * @return Direct flag.
     */
    public boolean direct();
}

This API is known for the overhead used to store transformed data and allows users to use direct and wrapped byte buffers.

...

Code Block
languagejava
titleCompression
class CompressionTransformer extends CacheObjectTransformerAdapter {
	protected ByteBuffer transform(ByteBuffer original) throws IgniteCheckedException {                     
		int locOverhead = 4; // Original length.
        int totalOverhead = CacheObjectTransformerCacheObjectTransformerUtils.OVERHEAD + locOverhead;

        int origSize = original.remaining();
        int lim = origSize - totalOverhead;          

		if (lim <= 0)
            throw new IgniteCheckedException("Compression is not profitable.");

        ByteBuffer compressed = byteBuffer(lim);

		compressed.position(locOverhead);

		Zstd.compress(compressed, original, 1);

        compressed.flip(); 

		compressed.putInt(origSize);

		compressed.rewind();          

        return compressed;
    }

    protected ByteBuffer restore(ByteBuffer transformed) {
        ByteBuffer restored = byteBuffer(transformed.getInt());

        Zstd.decompress(restored, transformed);

        restored.flip();
              
        return restored;
    }
}

...