org.apache.flink.runtime.state.gemini.engine.rm.GSharedUnreferencedByteBuffer Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.flink.runtime.state.gemini.engine.rm;
import org.apache.flink.runtime.state.gemini.engine.exceptions.GeminiRuntimeException;
import java.nio.ByteBuffer;
/**
* {@link GSharedUnreferencedByteBuffer} is a {@link GByteBuffer} that shared the actual buffer with another {@link GByteBuffer}.
* We don't need to consider the reference count of it.
* If the {@link GByteBuffer} that {@link GSharedUnreferencedByteBuffer} shard buffer with is released, read or write the data of
* this {@link GSharedUnreferencedByteBuffer} will raise an exception.
*/
public class GSharedUnreferencedByteBuffer implements GByteBuffer {
private final GByteBuffer buddy;
private final int len;
public GSharedUnreferencedByteBuffer(GByteBuffer gByteBuffer) {
this.buddy = gByteBuffer;
this.len = gByteBuffer.capacity();
}
@Override
public int capacity() {
return len;
}
@Override
public ByteBuffer getByteBuffer() {
if (isFreed()) {
throw new GeminiRuntimeException("GSharedUnreferencedByteBuffer is released.");
}
return buddy.getByteBuffer();
}
@Override
public void retain() {
}
@Override
public void release() {
}
@Override
public int refCnt() {
return 0;
}
@Override
public void doFree() throws GeminiRuntimeException {
}
@Override
public boolean isFreed() {
return buddy == null || buddy.isFreed();
}
@Override
public FinalizableCleaner getCleaner() {
return new AbstractGByteBufferReference.EmptyCleaner();
}
@Override
public boolean isPooled() {
return false;
}
@Override
public void setSeqID(long seqID) {
}
@Override
public long getSeqID() {
return 0;
}
@Override
public void close() {
}
@Override
public boolean canSyncFree() {
return true;
}
@Override
public void setWaitSeqId() {
}
}