private Collection<byte[]> getRowChanges() { // we resolve conflicts on row level of individual table List<byte[]> changes = new ArrayList<>(buff.size()); for (byte[] changedRow : buff.keySet()) { changes.add(Bytes.add(getNameAsTxChangePrefix(), changedRow)); } return changes; }
private Collection<byte[]> getRowChanges() { // we resolve conflicts on row level of individual table List<byte[]> changes = new ArrayList<>(buff.size()); for (byte[] changedRow : buff.keySet()) { changes.add(Bytes.add(getNameAsTxChangePrefix(), changedRow)); } return changes; }
private Collection<byte[]> getColumnChanges() { // we resolve conflicts on row level of individual table List<byte[]> changes = new ArrayList<>(buff.size()); for (Map.Entry<byte[], NavigableMap<byte[], Update>> rowChange : buff.entrySet()) { if (rowChange.getValue() == null) { // NOTE: as of now we cannot detect conflict between delete whole row and row's column value change. // this is not a big problem as of now, as row deletion is now act as deletion of every column, but this // will change in future, so we will have to address the issue. continue; } // using length + value format to prevent conflicts like row="ab", column="cd" vs row="abc", column="d" byte[] rowTxChange = Bytes.add(Bytes.toBytes(rowChange.getKey().length), rowChange.getKey()); for (byte[] column : rowChange.getValue().keySet()) { changes.add(Bytes.add(getNameAsTxChangePrefix(), rowTxChange, column)); } } return changes; }
private Collection<byte[]> getColumnChanges() { // we resolve conflicts on row level of individual table List<byte[]> changes = new ArrayList<>(buff.size()); for (Map.Entry<byte[], NavigableMap<byte[], Update>> rowChange : buff.entrySet()) { if (rowChange.getValue() == null) { // NOTE: as of now we cannot detect conflict between delete whole row and row's column value change. // this is not a big problem as of now, as row deletion is now act as deletion of every column, but this // will change in future, so we will have to address the issue. continue; } // using length + value format to prevent conflicts like row="ab", column="cd" vs row="abc", column="d" byte[] rowTxChange = Bytes.add(Bytes.toBytes(rowChange.getKey().length), rowChange.getKey()); for (byte[] column : rowChange.getValue().keySet()) { changes.add(Bytes.add(getNameAsTxChangePrefix(), rowTxChange, column)); } } return changes; }
table1.postTxCommit(); String tx1ChangePrefix = new String(table1.getNameAsTxChangePrefix()); String tx2ChangePrefix = new String(table2.getNameAsTxChangePrefix()); String tx1Change = new String(((ArrayList<byte []>) tx1Changes).get(0)); String tx2Change = new String(((ArrayList<byte []>) tx2Changes).get(0));