public ReturnCode filterCell()

in hbase-coprocessor/src/main/java/org/apache/omid/transaction/TransactionVisibilityFilterBase.java [75:121]


    public ReturnCode filterCell(Cell v) throws IOException {
        if (CellUtils.isShadowCell(v)) {
            Long commitTs =  Bytes.toLong(CellUtil.cloneValue(v));
            commitCache.put(v.getTimestamp(), commitTs);
            // Continue getting shadow cells until one of them fits this transaction
            if (hbaseTransaction.getStartTimestamp() >= commitTs) {
                return ReturnCode.NEXT_COL;
            } else {
                return ReturnCode.SKIP;
            }
        }

        Optional<Long> commitTS = getCommitIfInSnapshot(v, CellUtils.isFamilyDeleteCell(v));
        if (commitTS.isPresent()) {
            if (hbaseTransaction.getVisibilityLevel() == AbstractTransaction.VisibilityLevel.SNAPSHOT_ALL &&
                    snapshotFilter.getTSIfInTransaction(v, hbaseTransaction).isPresent()) {
                return runUserFilter(v, ReturnCode.INCLUDE);
            }
            if (CellUtils.isFamilyDeleteCell(v)) {
                familyDeletionCache.put(createImmutableBytesWritable(v), commitTS.get());
                if (hbaseTransaction.getVisibilityLevel() == AbstractTransaction.VisibilityLevel.SNAPSHOT_ALL) {
                    return runUserFilter(v, ReturnCode.INCLUDE_AND_NEXT_COL);
                } else {
                    return ReturnCode.NEXT_COL;
                }
            }
            Long deleteCommit = familyDeletionCache.get(createImmutableBytesWritable(v));
            if (deleteCommit != null && deleteCommit >= v.getTimestamp()) {
                if (hbaseTransaction.getVisibilityLevel() == AbstractTransaction.VisibilityLevel.SNAPSHOT_ALL) {
                    return runUserFilter(v, ReturnCode.INCLUDE_AND_NEXT_COL);
                } else {
                    return ReturnCode.NEXT_COL;
                }
            }
            if (CellUtils.isTombstone(v)) {
                if (hbaseTransaction.getVisibilityLevel() == AbstractTransaction.VisibilityLevel.SNAPSHOT_ALL) {
                    return runUserFilter(v, ReturnCode.INCLUDE_AND_NEXT_COL);
                } else {
                    return ReturnCode.NEXT_COL;
                }
            }

            return runUserFilter(v, ReturnCode.INCLUDE_AND_NEXT_COL);
        }

        return ReturnCode.SKIP;
    }