blob: c149817299f25c1dd0e45119524971a6f4c8dbc4 [file] [log] [blame]
/*
* 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.ignite.internal.processors.cache.persistence.wal.serializer;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.internal.pagemem.wal.WALPointer;
import org.apache.ignite.internal.pagemem.wal.record.MarshalledRecord;
import org.apache.ignite.internal.pagemem.wal.record.WALRecord;
import org.apache.ignite.internal.processors.cache.GridCacheSharedContext;
import org.apache.ignite.lang.IgniteBiPredicate;
/**
*
*/
public class RecordSerializerFactoryImpl implements RecordSerializerFactory {
/** Context. */
private GridCacheSharedContext cctx;
/** Write pointer. */
private boolean needWritePointer;
/** Read record filter. */
private IgniteBiPredicate<WALRecord.RecordType, WALPointer> recordDeserializeFilter;
/**
* Marshalled mode flag.
* Records are not deserialized in this mode, {@link MarshalledRecord} with binary representation are read instead.
*/
private boolean marshalledMode;
/** Skip position check flag. Should be set for reading compacted wal file with skipped physical records. */
private boolean skipPositionCheck;
/**
* @param cctx Cctx.
*/
public RecordSerializerFactoryImpl(GridCacheSharedContext cctx) {
this(cctx, null);
}
/**
* @param cctx Cctx.
*/
public RecordSerializerFactoryImpl(
GridCacheSharedContext cctx,
IgniteBiPredicate<WALRecord.RecordType, WALPointer> readTypeFilter
) {
this.cctx = cctx;
this.recordDeserializeFilter = readTypeFilter;
}
/** {@inheritDoc} */
@Override public RecordSerializer createSerializer(int ver) throws IgniteCheckedException {
if (ver <= 0)
throw new IgniteCheckedException("Failed to create a serializer (corrupted WAL file).");
switch (ver) {
case 1:
return new RecordV1Serializer(
new RecordDataV1Serializer(cctx),
needWritePointer,
marshalledMode,
skipPositionCheck,
recordDeserializeFilter);
case 2:
return new RecordV2Serializer(
new RecordDataV2Serializer(cctx),
needWritePointer,
marshalledMode,
skipPositionCheck,
recordDeserializeFilter
);
default:
throw new IgniteCheckedException("Failed to create a serializer with the given version " +
"(forward compatibility is not supported): " + ver);
}
}
/**
* @return Write pointer.
*/
public boolean writePointer() {
return needWritePointer;
}
/** {@inheritDoc} */
@Override public RecordSerializerFactoryImpl writePointer(boolean writePointer) {
this.needWritePointer = writePointer;
return this;
}
/**
* @return Read type filter.
*/
public IgniteBiPredicate<WALRecord.RecordType, WALPointer> recordDeserializeFilter() {
return recordDeserializeFilter;
}
/** {@inheritDoc} */
@Override public RecordSerializerFactoryImpl recordDeserializeFilter(
IgniteBiPredicate<WALRecord.RecordType, WALPointer> readTypeFilter
) {
this.recordDeserializeFilter = readTypeFilter;
return this;
}
/**
* @return Marshalled mode. Records are not deserialized in this mode, with binary representation are read instead.
*/
public boolean marshalledMode() {
return marshalledMode;
}
/** {@inheritDoc} */
@Override public RecordSerializerFactoryImpl marshalledMode(boolean marshalledMode) {
this.marshalledMode = marshalledMode;
return this;
}
/**
* @return Skip position check flag. Should be set for reading compacted wal file with skipped physical records.
*/
public boolean skipPositionCheck() {
return skipPositionCheck;
}
/** {@inheritDoc} */
@Override public RecordSerializerFactoryImpl skipPositionCheck(boolean skipPositionCheck) {
this.skipPositionCheck = skipPositionCheck;
return this;
}
}