Github user ohadshacham commented on a diff in the pull request: https://github.com/apache/incubator-omid/pull/39#discussion_r206422025 --- Diff: hbase-client/src/main/java/org/apache/omid/transaction/SnapshotFilterImpl.java --- @@ -298,26 +291,62 @@ public CommitTimestamp locateCellCommitTimestamp(long cellStartTimestamp, long e return commitCache; } - private void buildFamilyDeletionCache(List<Cell> rawCells, Map<String, List<Cell>> familyDeletionCache) { - + private void buildFamilyDeletionCache(HBaseTransaction transaction, List<Cell> rawCells, Map<String, Long> familyDeletionCache, Map<Long, Long> commitCache, Map<String,byte[]> attributeMap) throws IOException { for (Cell cell : rawCells) { if (CellUtil.matchingQualifier(cell, CellUtils.FAMILY_DELETE_QUALIFIER) && CellUtil.matchingValue(cell, HConstants.EMPTY_BYTE_ARRAY)) { - String row = Bytes.toString(cell.getRow()); - List<Cell> cells = familyDeletionCache.get(row); - if (cells == null) { - cells = new ArrayList<>(); - familyDeletionCache.put(row, cells); + String family = Bytes.toString(cell.getFamily()); + String key = row + ":" + family; + + if (familyDeletionCache.containsKey(key)) + return; + + Optional<Long> commitTimeStamp = isCellInSnapshot(cell, transaction, commitCache); + + if (!commitTimeStamp.isPresent()) { + commitTimeStamp = isCellInTransaction(cell, transaction, commitCache); } - cells.add(cell); + if (commitTimeStamp.isPresent()) { + familyDeletionCache.put(key, commitTimeStamp.get()); + } else { + Cell lastCell = cell; + Map<Long, Long> cmtCache; + boolean foundCommitttedFamilyDeletion = false; + while (!foundCommitttedFamilyDeletion) { + + Get g = createPendingGet(lastCell, 3); + for (Map.Entry<String,byte[]> entry : attributeMap.entrySet()) { --- End diff -- I don't know which attribute the user wrote and whether he/she wrote a coprocessor that looks on these attributes and do something.
---