diff --git a/src/main/java/com/lbry/database/PrefixDB.java b/src/main/java/com/lbry/database/PrefixDB.java index c405c36..4fb0212 100644 --- a/src/main/java/com/lbry/database/PrefixDB.java +++ b/src/main/java/com/lbry/database/PrefixDB.java @@ -118,45 +118,45 @@ public class PrefixDB{ this.maxUndoDepth = maxUndoDepth; - this.claim_to_support = new ClaimToSupportPrefixRow(this); - this.support_to_claim = new SupportToClaimPrefixRow(this); - this.claim_to_txo = new ClaimToTXOPrefixRow(this); - this.txo_to_claim = new TXOToClaimPrefixRow(this); - this.claim_to_channel = new ClaimToChannelPrefixRow(this); - this.channel_to_claim = new ChannelToClaimPrefixRow(this); - this.claim_short_id = new ClaimShortIDPrefixRow(this); - this.claim_expiration = new ClaimExpirationPrefixRow(this); - this.claim_takeover = new ClaimTakeoverPrefixRow(this); - this.pending_activation = new PendingActivationPrefixRow(this); - this.activated = new ActivatedPrefixRow(this); - this.active_amount = new ActiveAmountPrefixRow(this); - this.bid_order = new BidOrderPrefixRow(this); - this.repost = new RepostPrefixRow(this); - this.reposted_claim = new RepostedPrefixRow(this); - this.reposted_count = new RepostedCountPrefixRow(this); - this.undo = new UndoPrefixRow(this); - this.utxo = new UTXOPrefixRow(this); - this.hashX_utxo = new HashXUTXOPrefixRow(this); - this.hashX_history = new HashXHistoryPrefixRow(this); - this.block_hash = new BlockHashPrefixRow(this); - this.tx_count = new TxCountPrefixRow(this); - this.tx_hash = new TXHashPrefixRow(this); - this.tx_num = new TXNumPrefixRow(this); - this.tx = new TXPrefixRow(this); - this.header = new BlockHeaderPrefixRow(this); - this.touched_or_deleted = new TouchedOrDeletedPrefixRow(this); - this.channel_count = new ChannelCountPrefixRow(this); - this.db_state = new DBStatePrefixRow(this); - this.support_amount = new SupportAmountPrefixRow(this); - this.block_txs = new BlockTxsPrefixRow(this); - this.mempool_tx = new MempoolTXPrefixRow(this); - this.trending_notification = new TrendingNotificationPrefixRow(this); - this.touched_hashX = new TouchedHashXPrefixRow(this); - this.hashX_status = new HashXStatusPrefixRow(this); - this.hashX_mempool_status = new HashXMempoolStatusPrefixRow(this); - this.effective_amount = new EffectiveAmountPrefixRow(this); - this.future_effective_amount = new FutureEffectiveAmountPrefixRow(this); - this.hashX_history_hasher = new HashXHistoryHasherPrefixRow(this); + this.claim_to_support = new ClaimToSupportPrefixRow(this,this.operationStack); + this.support_to_claim = new SupportToClaimPrefixRow(this,this.operationStack); + this.claim_to_txo = new ClaimToTXOPrefixRow(this,this.operationStack); + this.txo_to_claim = new TXOToClaimPrefixRow(this,this.operationStack); + this.claim_to_channel = new ClaimToChannelPrefixRow(this,this.operationStack); + this.channel_to_claim = new ChannelToClaimPrefixRow(this,this.operationStack); + this.claim_short_id = new ClaimShortIDPrefixRow(this,this.operationStack); + this.claim_expiration = new ClaimExpirationPrefixRow(this,this.operationStack); + this.claim_takeover = new ClaimTakeoverPrefixRow(this,this.operationStack); + this.pending_activation = new PendingActivationPrefixRow(this,this.operationStack); + this.activated = new ActivatedPrefixRow(this,this.operationStack); + this.active_amount = new ActiveAmountPrefixRow(this,this.operationStack); + this.bid_order = new BidOrderPrefixRow(this,this.operationStack); + this.repost = new RepostPrefixRow(this,this.operationStack); + this.reposted_claim = new RepostedPrefixRow(this,this.operationStack); + this.reposted_count = new RepostedCountPrefixRow(this,this.operationStack); + this.undo = new UndoPrefixRow(this,this.operationStack); + this.utxo = new UTXOPrefixRow(this,this.operationStack); + this.hashX_utxo = new HashXUTXOPrefixRow(this,this.operationStack); + this.hashX_history = new HashXHistoryPrefixRow(this,this.operationStack); + this.block_hash = new BlockHashPrefixRow(this,this.operationStack); + this.tx_count = new TxCountPrefixRow(this,this.operationStack); + this.tx_hash = new TXHashPrefixRow(this,this.operationStack); + this.tx_num = new TXNumPrefixRow(this,this.operationStack); + this.tx = new TXPrefixRow(this,this.operationStack); + this.header = new BlockHeaderPrefixRow(this,this.operationStack); + this.touched_or_deleted = new TouchedOrDeletedPrefixRow(this,this.operationStack); + this.channel_count = new ChannelCountPrefixRow(this,this.operationStack); + this.db_state = new DBStatePrefixRow(this,this.operationStack); + this.support_amount = new SupportAmountPrefixRow(this,this.operationStack); + this.block_txs = new BlockTxsPrefixRow(this,this.operationStack); + this.mempool_tx = new MempoolTXPrefixRow(this,this.operationStack); + this.trending_notification = new TrendingNotificationPrefixRow(this,this.operationStack); + this.touched_hashX = new TouchedHashXPrefixRow(this,this.operationStack); + this.hashX_status = new HashXStatusPrefixRow(this,this.operationStack); + this.hashX_mempool_status = new HashXMempoolStatusPrefixRow(this,this.operationStack); + this.effective_amount = new EffectiveAmountPrefixRow(this,this.operationStack); + this.future_effective_amount = new FutureEffectiveAmountPrefixRow(this,this.operationStack); + this.hashX_history_hasher = new HashXHistoryHasherPrefixRow(this,this.operationStack); } /** diff --git a/src/main/java/com/lbry/database/revert/RevertibleOperationStack.java b/src/main/java/com/lbry/database/revert/RevertibleOperationStack.java index 56b292c..51744fc 100644 --- a/src/main/java/com/lbry/database/revert/RevertibleOperationStack.java +++ b/src/main/java/com/lbry/database/revert/RevertibleOperationStack.java @@ -85,7 +85,7 @@ public class RevertibleOperationStack{ if(this.enforceIntegrity && !uniqueKeys.isEmpty()){ List uniqueKeysList = new ArrayList<>(uniqueKeys); for(int idx=0;idx batch = uniqueKeysList.subList(idx,idx+10000); + List batch = uniqueKeysList.subList(idx,Math.min(uniqueKeysList.size(),idx+10000)); Iterator> iterator = this.multiGet.apply(batch).iterator(); for(byte[] k : batch){ byte[] v = iterator.next().get(); diff --git a/src/main/java/com/lbry/database/rows/ActivatedPrefixRow.java b/src/main/java/com/lbry/database/rows/ActivatedPrefixRow.java index bc118e0..268b0a0 100644 --- a/src/main/java/com/lbry/database/rows/ActivatedPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/ActivatedPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.ActivationKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.ActivationValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class ActivatedPrefixRow extends PrefixRow{ - public ActivatedPrefixRow(PrefixDB database){ - super(database); + public ActivatedPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/ActiveAmountPrefixRow.java b/src/main/java/com/lbry/database/rows/ActiveAmountPrefixRow.java index a116188..a385e1d 100644 --- a/src/main/java/com/lbry/database/rows/ActiveAmountPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/ActiveAmountPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.ActiveAmountKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.ActiveAmountValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class ActiveAmountPrefixRow extends PrefixRow{ - public ActiveAmountPrefixRow(PrefixDB database){ - super(database); + public ActiveAmountPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/BidOrderPrefixRow.java b/src/main/java/com/lbry/database/rows/BidOrderPrefixRow.java index af251eb..fb229ed 100644 --- a/src/main/java/com/lbry/database/rows/BidOrderPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/BidOrderPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.BidOrderKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.BidOrderValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class BidOrderPrefixRow extends PrefixRow{ - public BidOrderPrefixRow(PrefixDB database){ - super(database); + public BidOrderPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/BlockHashPrefixRow.java b/src/main/java/com/lbry/database/rows/BlockHashPrefixRow.java index 48aae28..cc4060a 100644 --- a/src/main/java/com/lbry/database/rows/BlockHashPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/BlockHashPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.BlockHashKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.BlockHashValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class BlockHashPrefixRow extends PrefixRow{ - public BlockHashPrefixRow(PrefixDB database){ - super(database); + public BlockHashPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/BlockHeaderPrefixRow.java b/src/main/java/com/lbry/database/rows/BlockHeaderPrefixRow.java index c12798b..2e3bd87 100644 --- a/src/main/java/com/lbry/database/rows/BlockHeaderPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/BlockHeaderPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.BlockHeaderKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.BlockHeaderValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class BlockHeaderPrefixRow extends PrefixRow{ - public BlockHeaderPrefixRow(PrefixDB database){ - super(database); + public BlockHeaderPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/BlockTxsPrefixRow.java b/src/main/java/com/lbry/database/rows/BlockTxsPrefixRow.java index 3c43ed9..a0eb5f2 100644 --- a/src/main/java/com/lbry/database/rows/BlockTxsPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/BlockTxsPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.BlockTxsKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.BlockTxsValue; import java.nio.ByteBuffer; @@ -11,8 +12,8 @@ import java.util.ArrayList; public class BlockTxsPrefixRow extends PrefixRow{ - public BlockTxsPrefixRow(PrefixDB database){ - super(database); + public BlockTxsPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/ChannelCountPrefixRow.java b/src/main/java/com/lbry/database/rows/ChannelCountPrefixRow.java index 5c0a364..4809d14 100644 --- a/src/main/java/com/lbry/database/rows/ChannelCountPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/ChannelCountPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.ChannelCountKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.ChannelCountValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class ChannelCountPrefixRow extends PrefixRow{ - public ChannelCountPrefixRow(PrefixDB database){ - super(database); + public ChannelCountPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/ChannelToClaimPrefixRow.java b/src/main/java/com/lbry/database/rows/ChannelToClaimPrefixRow.java index 96cf595..d76222d 100644 --- a/src/main/java/com/lbry/database/rows/ChannelToClaimPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/ChannelToClaimPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.ChannelToClaimKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.ChannelToClaimValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class ChannelToClaimPrefixRow extends PrefixRow{ - public ChannelToClaimPrefixRow(PrefixDB database){ - super(database); + public ChannelToClaimPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/ClaimExpirationPrefixRow.java b/src/main/java/com/lbry/database/rows/ClaimExpirationPrefixRow.java index 0dc6389..db37319 100644 --- a/src/main/java/com/lbry/database/rows/ClaimExpirationPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/ClaimExpirationPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.ClaimExpirationKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.ClaimExpirationValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class ClaimExpirationPrefixRow extends PrefixRow{ - public ClaimExpirationPrefixRow(PrefixDB database){ - super(database); + public ClaimExpirationPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/ClaimShortIDPrefixRow.java b/src/main/java/com/lbry/database/rows/ClaimShortIDPrefixRow.java index 8aa4a44..8e9e39a 100644 --- a/src/main/java/com/lbry/database/rows/ClaimShortIDPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/ClaimShortIDPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.ClaimShortIDKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.ClaimShortIDValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class ClaimShortIDPrefixRow extends PrefixRow{ - public ClaimShortIDPrefixRow(PrefixDB database){ - super(database); + public ClaimShortIDPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/ClaimTakeoverPrefixRow.java b/src/main/java/com/lbry/database/rows/ClaimTakeoverPrefixRow.java index 35a3b17..9ad0da5 100644 --- a/src/main/java/com/lbry/database/rows/ClaimTakeoverPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/ClaimTakeoverPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.ClaimTakeoverKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.ClaimTakeoverValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class ClaimTakeoverPrefixRow extends PrefixRow{ - public ClaimTakeoverPrefixRow(PrefixDB database){ - super(database); + public ClaimTakeoverPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/ClaimToChannelPrefixRow.java b/src/main/java/com/lbry/database/rows/ClaimToChannelPrefixRow.java index 791b643..9e3dc77 100644 --- a/src/main/java/com/lbry/database/rows/ClaimToChannelPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/ClaimToChannelPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.ClaimToChannelKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.ClaimToChannelValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class ClaimToChannelPrefixRow extends PrefixRow{ - public ClaimToChannelPrefixRow(PrefixDB database){ - super(database); + public ClaimToChannelPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/ClaimToSupportPrefixRow.java b/src/main/java/com/lbry/database/rows/ClaimToSupportPrefixRow.java index b78cdc2..bf266aa 100644 --- a/src/main/java/com/lbry/database/rows/ClaimToSupportPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/ClaimToSupportPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.ClaimToSupportKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.ClaimToSupportValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class ClaimToSupportPrefixRow extends PrefixRow{ - public ClaimToSupportPrefixRow(PrefixDB database){ - super(database); + public ClaimToSupportPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/ClaimToTXOPrefixRow.java b/src/main/java/com/lbry/database/rows/ClaimToTXOPrefixRow.java index f0ad6dd..7c398ec 100644 --- a/src/main/java/com/lbry/database/rows/ClaimToTXOPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/ClaimToTXOPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.ClaimToTXOKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.ClaimToTXOValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class ClaimToTXOPrefixRow extends PrefixRow{ - public ClaimToTXOPrefixRow(PrefixDB database){ - super(database); + public ClaimToTXOPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/DBStatePrefixRow.java b/src/main/java/com/lbry/database/rows/DBStatePrefixRow.java index 1b10b9a..9d6cf34 100644 --- a/src/main/java/com/lbry/database/rows/DBStatePrefixRow.java +++ b/src/main/java/com/lbry/database/rows/DBStatePrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.KeyInterface; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.DBState; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class DBStatePrefixRow extends PrefixRow{ - public DBStatePrefixRow(PrefixDB database){ - super(database); + public DBStatePrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/EffectiveAmountPrefixRow.java b/src/main/java/com/lbry/database/rows/EffectiveAmountPrefixRow.java index d42728a..162de66 100644 --- a/src/main/java/com/lbry/database/rows/EffectiveAmountPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/EffectiveAmountPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.EffectiveAmountKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.EffectiveAmountValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class EffectiveAmountPrefixRow extends PrefixRow{ - public EffectiveAmountPrefixRow(PrefixDB database){ - super(database); + public EffectiveAmountPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/FutureEffectiveAmountPrefixRow.java b/src/main/java/com/lbry/database/rows/FutureEffectiveAmountPrefixRow.java index 12fe5b7..c91ac15 100644 --- a/src/main/java/com/lbry/database/rows/FutureEffectiveAmountPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/FutureEffectiveAmountPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.FutureEffectiveAmountKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.FutureEffectiveAmountValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class FutureEffectiveAmountPrefixRow extends PrefixRow{ - public FutureEffectiveAmountPrefixRow(PrefixDB database){ - super(database); + public FutureEffectiveAmountPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/HashXHistoryHasherPrefixRow.java b/src/main/java/com/lbry/database/rows/HashXHistoryHasherPrefixRow.java index 42ddca7..1f97f4c 100644 --- a/src/main/java/com/lbry/database/rows/HashXHistoryHasherPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/HashXHistoryHasherPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.HashXHistoryHasherKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.HashXHistoryHasherValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class HashXHistoryHasherPrefixRow extends PrefixRow{ - public HashXHistoryHasherPrefixRow(PrefixDB database){ - super(database); + public HashXHistoryHasherPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/HashXHistoryPrefixRow.java b/src/main/java/com/lbry/database/rows/HashXHistoryPrefixRow.java index 8b3494e..4984048 100644 --- a/src/main/java/com/lbry/database/rows/HashXHistoryPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/HashXHistoryPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.HashXHistoryKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.HashXHistoryValue; import java.nio.ByteBuffer; @@ -11,8 +12,8 @@ import java.util.ArrayList; public class HashXHistoryPrefixRow extends PrefixRow{ - public HashXHistoryPrefixRow(PrefixDB database){ - super(database); + public HashXHistoryPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/HashXMempoolStatusPrefixRow.java b/src/main/java/com/lbry/database/rows/HashXMempoolStatusPrefixRow.java index a316332..339f98f 100644 --- a/src/main/java/com/lbry/database/rows/HashXMempoolStatusPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/HashXMempoolStatusPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.HashXStatusKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.HashXStatusValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class HashXMempoolStatusPrefixRow extends PrefixRow{ - public HashXMempoolStatusPrefixRow(PrefixDB database){ - super(database); + public HashXMempoolStatusPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/HashXStatusPrefixRow.java b/src/main/java/com/lbry/database/rows/HashXStatusPrefixRow.java index 2f65de9..8445680 100644 --- a/src/main/java/com/lbry/database/rows/HashXStatusPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/HashXStatusPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.HashXStatusKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.HashXStatusValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class HashXStatusPrefixRow extends PrefixRow{ - public HashXStatusPrefixRow(PrefixDB database){ - super(database); + public HashXStatusPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/HashXUTXOPrefixRow.java b/src/main/java/com/lbry/database/rows/HashXUTXOPrefixRow.java index da9d6f9..3bd57fb 100644 --- a/src/main/java/com/lbry/database/rows/HashXUTXOPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/HashXUTXOPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.HashXUTXOKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.HashXUTXOValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class HashXUTXOPrefixRow extends PrefixRow{ - public HashXUTXOPrefixRow(PrefixDB database){ - super(database); + public HashXUTXOPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/MempoolTXPrefixRow.java b/src/main/java/com/lbry/database/rows/MempoolTXPrefixRow.java index 5d8039e..d126af2 100644 --- a/src/main/java/com/lbry/database/rows/MempoolTXPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/MempoolTXPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.MempoolTxKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.MempoolTxValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class MempoolTXPrefixRow extends PrefixRow{ - public MempoolTXPrefixRow(PrefixDB database){ - super(database); + public MempoolTXPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/PendingActivationPrefixRow.java b/src/main/java/com/lbry/database/rows/PendingActivationPrefixRow.java index 1e67318..6f941bf 100644 --- a/src/main/java/com/lbry/database/rows/PendingActivationPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/PendingActivationPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.PendingActivationKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.PendingActivationValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class PendingActivationPrefixRow extends PrefixRow{ - public PendingActivationPrefixRow(PrefixDB database){ - super(database); + public PendingActivationPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/PrefixRow.java b/src/main/java/com/lbry/database/rows/PrefixRow.java index ad644f0..f6b394f 100644 --- a/src/main/java/com/lbry/database/rows/PrefixRow.java +++ b/src/main/java/com/lbry/database/rows/PrefixRow.java @@ -3,12 +3,11 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.KeyInterface; +import com.lbry.database.revert.RevertibleOperation; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.ValueInterface; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import org.rocksdb.ColumnFamilyHandle; @@ -21,9 +20,11 @@ public abstract class PrefixRow public static final Map> TYPES = new HashMap<>(); private final PrefixDB database; + private final RevertibleOperationStack operationStack; - public PrefixRow(PrefixDB database){ + public PrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ this.database = database; + this.operationStack = operationStack; PrefixRow.TYPES.put(this.prefix(),this); } @@ -75,13 +76,7 @@ public abstract class PrefixRow }).collect(Collectors.toList()); } - public void stashMultiDelete(Map items){ - Map map = new LinkedHashMap<>(); - for(Map.Entry entry : items.entrySet()){ - map.put(this.packKey(entry.getKey()),this.packValue(entry.getValue())); - } - this.database.multiDelete(map); - } + //TODO multiGetAsyncGen public void stashMultiPut(Map items){ Map map = new LinkedHashMap<>(); @@ -91,14 +86,48 @@ public abstract class PrefixRow this.database.multiPut(map); } - public void stashDelete(K key,V value){ - this.database.stashRawDelete(this.packKey(key),this.packValue(value)); + public void stashMultiDelete(Map items){ + Map map = new LinkedHashMap<>(); + for(Map.Entry entry : items.entrySet()){ + map.put(this.packKey(entry.getKey()),this.packValue(entry.getValue())); + } + this.database.multiDelete(map); } + public V getPending(K key){ + return this.getPending(key,true); + } + + public V getPending(K key,boolean fillCache){ + return this.getPending(key,fillCache,true); + } + + public V getPending(K key,boolean fillCache,boolean deserializeValue){ +// byte[] packedKey = this.packKey(key); +// Optional pendingOperation = this.operationStack.getPendingOperation(packedKey); +// if(pendingOperation.isPresent() && pendingOperation.get().isDelete()){ +// return null; +// } +// byte[] v; +// if(pendingOperation.isPresent()){ +// v = pendingOperation.get().getValue(); +// }else{ +// v = this.database.get(this.getColumnFamily(),fillCache); +// } + return null; + } + + //TODO getPending + public void stashPut(K key,V value){ this.database.stashRawPut(this.packKey(key),this.packValue(value)); } + + public void stashDelete(K key,V value){ + this.database.stashRawDelete(this.packKey(key),this.packValue(value)); + } + public ColumnFamilyHandle getColumnFamily() throws RocksDBException{ return this.database.getColumnFamilyByPrefix(this.prefix()); } diff --git a/src/main/java/com/lbry/database/rows/RepostPrefixRow.java b/src/main/java/com/lbry/database/rows/RepostPrefixRow.java index 983e22d..ee4ce25 100644 --- a/src/main/java/com/lbry/database/rows/RepostPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/RepostPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.RepostKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.RepostValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class RepostPrefixRow extends PrefixRow{ - public RepostPrefixRow(PrefixDB database){ - super(database); + public RepostPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/RepostedCountPrefixRow.java b/src/main/java/com/lbry/database/rows/RepostedCountPrefixRow.java index 4450088..9c13775 100644 --- a/src/main/java/com/lbry/database/rows/RepostedCountPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/RepostedCountPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.RepostedCountKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.RepostedCountValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class RepostedCountPrefixRow extends PrefixRow{ - public RepostedCountPrefixRow(PrefixDB database){ - super(database); + public RepostedCountPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/RepostedPrefixRow.java b/src/main/java/com/lbry/database/rows/RepostedPrefixRow.java index e17d388..780c046 100644 --- a/src/main/java/com/lbry/database/rows/RepostedPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/RepostedPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.RepostedKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.RepostedValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class RepostedPrefixRow extends PrefixRow{ - public RepostedPrefixRow(PrefixDB database){ - super(database); + public RepostedPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/SupportAmountPrefixRow.java b/src/main/java/com/lbry/database/rows/SupportAmountPrefixRow.java index 1b0a417..b74539b 100644 --- a/src/main/java/com/lbry/database/rows/SupportAmountPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/SupportAmountPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.SupportAmountKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.SupportAmountValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class SupportAmountPrefixRow extends PrefixRow{ - public SupportAmountPrefixRow(PrefixDB database){ - super(database); + public SupportAmountPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/SupportToClaimPrefixRow.java b/src/main/java/com/lbry/database/rows/SupportToClaimPrefixRow.java index 671dcf3..1fc9f81 100644 --- a/src/main/java/com/lbry/database/rows/SupportToClaimPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/SupportToClaimPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.SupportToClaimKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.SupportToClaimValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class SupportToClaimPrefixRow extends PrefixRow{ - public SupportToClaimPrefixRow(PrefixDB database){ - super(database); + public SupportToClaimPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/TXHashPrefixRow.java b/src/main/java/com/lbry/database/rows/TXHashPrefixRow.java index 5c648b9..bfea80e 100644 --- a/src/main/java/com/lbry/database/rows/TXHashPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/TXHashPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.TxHashKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.TxHashValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class TXHashPrefixRow extends PrefixRow{ - public TXHashPrefixRow(PrefixDB database){ - super(database); + public TXHashPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/TXNumPrefixRow.java b/src/main/java/com/lbry/database/rows/TXNumPrefixRow.java index 6b1465c..b9ff926 100644 --- a/src/main/java/com/lbry/database/rows/TXNumPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/TXNumPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.TxNumKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.TxNumValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class TXNumPrefixRow extends PrefixRow{ - public TXNumPrefixRow(PrefixDB database){ - super(database); + public TXNumPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/TXOToClaimPrefixRow.java b/src/main/java/com/lbry/database/rows/TXOToClaimPrefixRow.java index 1e3d74d..63ca7a5 100644 --- a/src/main/java/com/lbry/database/rows/TXOToClaimPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/TXOToClaimPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.TXOToClaimKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.TXOToClaimValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class TXOToClaimPrefixRow extends PrefixRow{ - public TXOToClaimPrefixRow(PrefixDB database){ - super(database); + public TXOToClaimPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/TXPrefixRow.java b/src/main/java/com/lbry/database/rows/TXPrefixRow.java index a174483..3cfc0bc 100644 --- a/src/main/java/com/lbry/database/rows/TXPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/TXPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.TxKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.TxValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class TXPrefixRow extends PrefixRow{ - public TXPrefixRow(PrefixDB database){ - super(database); + public TXPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/TouchedHashXPrefixRow.java b/src/main/java/com/lbry/database/rows/TouchedHashXPrefixRow.java index 03b8efe..8ee9466 100644 --- a/src/main/java/com/lbry/database/rows/TouchedHashXPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/TouchedHashXPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.TouchedHashXKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.TouchedHashXValue; import java.nio.ByteBuffer; @@ -11,8 +12,8 @@ import java.util.ArrayList; public class TouchedHashXPrefixRow extends PrefixRow{ - public TouchedHashXPrefixRow(PrefixDB database){ - super(database); + public TouchedHashXPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/TouchedOrDeletedPrefixRow.java b/src/main/java/com/lbry/database/rows/TouchedOrDeletedPrefixRow.java index 0d04475..a572cb9 100644 --- a/src/main/java/com/lbry/database/rows/TouchedOrDeletedPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/TouchedOrDeletedPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.TouchedOrDeletedClaimKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.TouchedOrDeletedClaimValue; import java.nio.ByteBuffer; @@ -11,8 +12,8 @@ import java.util.LinkedHashSet; public class TouchedOrDeletedPrefixRow extends PrefixRow{ - public TouchedOrDeletedPrefixRow(PrefixDB database){ - super(database); + public TouchedOrDeletedPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/TrendingNotificationPrefixRow.java b/src/main/java/com/lbry/database/rows/TrendingNotificationPrefixRow.java index 53b6d25..4a94745 100644 --- a/src/main/java/com/lbry/database/rows/TrendingNotificationPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/TrendingNotificationPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.TrendingNotificationKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.TrendingNotificationValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class TrendingNotificationPrefixRow extends PrefixRow{ - public TrendingNotificationPrefixRow(PrefixDB database){ - super(database); + public TrendingNotificationPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/TxCountPrefixRow.java b/src/main/java/com/lbry/database/rows/TxCountPrefixRow.java index d7633e6..d8ad7c8 100644 --- a/src/main/java/com/lbry/database/rows/TxCountPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/TxCountPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.TxCountKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.TxCountValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class TxCountPrefixRow extends PrefixRow{ - public TxCountPrefixRow(PrefixDB database){ - super(database); + public TxCountPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/UTXOPrefixRow.java b/src/main/java/com/lbry/database/rows/UTXOPrefixRow.java index 67cae9d..e8af9c5 100644 --- a/src/main/java/com/lbry/database/rows/UTXOPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/UTXOPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.UTXOKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.UTXOValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class UTXOPrefixRow extends PrefixRow{ - public UTXOPrefixRow(PrefixDB database){ - super(database); + public UTXOPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/rows/UndoPrefixRow.java b/src/main/java/com/lbry/database/rows/UndoPrefixRow.java index fdbd5cd..8bba311 100644 --- a/src/main/java/com/lbry/database/rows/UndoPrefixRow.java +++ b/src/main/java/com/lbry/database/rows/UndoPrefixRow.java @@ -3,6 +3,7 @@ package com.lbry.database.rows; import com.lbry.database.Prefix; import com.lbry.database.PrefixDB; import com.lbry.database.keys.UndoKey; +import com.lbry.database.revert.RevertibleOperationStack; import com.lbry.database.values.UndoValue; import java.nio.ByteBuffer; @@ -10,8 +11,8 @@ import java.nio.ByteOrder; public class UndoPrefixRow extends PrefixRow{ - public UndoPrefixRow(PrefixDB database){ - super(database); + public UndoPrefixRow(PrefixDB database,RevertibleOperationStack operationStack){ + super(database,operationStack); } @Override diff --git a/src/main/java/com/lbry/database/util/ArrayHelper.java b/src/main/java/com/lbry/database/util/ArrayHelper.java new file mode 100644 index 0000000..f105f03 --- /dev/null +++ b/src/main/java/com/lbry/database/util/ArrayHelper.java @@ -0,0 +1,14 @@ +package com.lbry.database.util; + +import java.util.Arrays; + +public class ArrayHelper{ + + public static byte[] fill(byte[] arr,byte val){ + if(arr!=null){ + Arrays.fill(arr,val); + } + return arr; + } + +} \ No newline at end of file diff --git a/src/test/java/com/lbry/database/tests/RevertablePrefixDBTest.java b/src/test/java/com/lbry/database/tests/RevertablePrefixDBTest.java new file mode 100644 index 0000000..d482b3e --- /dev/null +++ b/src/test/java/com/lbry/database/tests/RevertablePrefixDBTest.java @@ -0,0 +1,153 @@ +package com.lbry.database.tests; + +import com.lbry.database.PrefixDB; +import com.lbry.database.keys.ClaimTakeoverKey; +import com.lbry.database.util.ArrayHelper; +import com.lbry.database.values.ClaimTakeoverValue; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.Arrays; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.rocksdb.RocksDBException; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class RevertablePrefixDBTest{ + + private File tmpDir; + private PrefixDB database; + + @BeforeAll + public void setUp() throws IOException,RocksDBException{ + this.tmpDir = Files.createTempDirectory("tmp").toFile(); + System.err.println(this.tmpDir); + this.database = new PrefixDB(this.tmpDir.getAbsolutePath(),32); + } + + @AfterAll + public void tearDown(){} + + @Test + public void testRollback() throws RocksDBException{ + String name = "derp"; + byte[] claim_hash1 = new byte[20]; + Arrays.fill(claim_hash1, (byte) 0x00); + byte[] claim_hash2 = new byte[20]; + Arrays.fill(claim_hash2, (byte) 0x01); + byte[] claim_hash3 = new byte[20]; + Arrays.fill(claim_hash3, (byte) 0x02); + + int takeoverHeight = 10000000; + + assertNull(this.database.claim_takeover.get(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }})); + this.database.claim_takeover.stashPut(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }},new ClaimTakeoverValue(){{ + this.claim_hash = claim_hash1; + this.height = takeoverHeight; + }}); + assertNull(this.database.claim_takeover.get(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }})); + assertEquals(10000000,this.database.claim_takeover.getPending(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }}).height); + + ///////////////////// + + this.database.commit(10000000,ArrayHelper.fill(new byte[32],(byte) 0x00)); + assertEquals(10000000,((ClaimTakeoverValue)this.database.claim_takeover.get(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }})).height); + + ///////////////////// + + this.database.claim_takeover.stashDelete(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }},new ClaimTakeoverValue(){{ + this.claim_hash = claim_hash1; + this.height = takeoverHeight; + }}); + this.database.claim_takeover.stashPut(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }},new ClaimTakeoverValue(){{ + this.claim_hash = claim_hash2; + this.height = takeoverHeight + 1; + }}); + this.database.claim_takeover.stashDelete(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }},new ClaimTakeoverValue(){{ + this.claim_hash = claim_hash2; + this.height = takeoverHeight + 1; + }}); + this.database.commit(10000001,ArrayHelper.fill(new byte[32],(byte) 0x01)); + assertNull(this.database.claim_takeover.get(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }})); + this.database.claim_takeover.stashPut(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }},new ClaimTakeoverValue(){{ + this.claim_hash = claim_hash3; + this.height = takeoverHeight + 2; + }}); + this.database.commit(10000002,ArrayHelper.fill(new byte[32],(byte) 0x02)); + assertEquals(10000002,((ClaimTakeoverValue)this.database.claim_takeover.get(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }})).height); + + ///////////////////// + + this.database.claim_takeover.stashDelete(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }},new ClaimTakeoverValue(){{ + this.claim_hash = claim_hash3; + this.height = takeoverHeight + 2; + }}); + this.database.claim_takeover.stashPut(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }},new ClaimTakeoverValue(){{ + this.claim_hash = claim_hash2; + this.height = takeoverHeight + 3; + }}); + this.database.commit(10000003,ArrayHelper.fill(new byte[32],(byte) 0x03)); + assertEquals(10000003,((ClaimTakeoverValue)this.database.claim_takeover.get(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }})).height); + + ///////////////////// + + this.database.rollback(10000003,ArrayHelper.fill(new byte[32],(byte) 0x03)); + assertEquals(10000002,((ClaimTakeoverValue)this.database.claim_takeover.get(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }})).height); + this.database.rollback(10000002,ArrayHelper.fill(new byte[32],(byte) 0x02)); + assertNull(this.database.claim_takeover.get(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }})); + this.database.rollback(10000001,ArrayHelper.fill(new byte[32],(byte) 0x01)); + assertEquals(10000000,((ClaimTakeoverValue)this.database.claim_takeover.get(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }})).height); + this.database.rollback(10000000,ArrayHelper.fill(new byte[32],(byte) 0x00)); + assertNull(this.database.claim_takeover.get(new ClaimTakeoverKey(){{ + this.normalized_name = name; + }})); + } + + @Test + public void testHubDatabaseIterator(){} + + @Test + public void testHubDatabaseIteratorStartStop(){} + +} \ No newline at end of file diff --git a/src/test/java/com/lbry/database/tests/RevertibleOperationStackTest.java b/src/test/java/com/lbry/database/tests/RevertibleOperationStackTest.java index edaa10b..2b628c9 100644 --- a/src/test/java/com/lbry/database/tests/RevertibleOperationStackTest.java +++ b/src/test/java/com/lbry/database/tests/RevertibleOperationStackTest.java @@ -78,19 +78,19 @@ public class RevertibleOperationStackTest { ClaimToTXOKey k1 = new ClaimToTXOKey(); k1.claim_hash = new byte[20]; Arrays.fill(k1.claim_hash,(byte) 0x01); - byte[] key1 = new ClaimToTXOPrefixRow(null).packKey(k1); + byte[] key1 = new ClaimToTXOPrefixRow(null,null).packKey(k1); ClaimToTXOKey k2 = new ClaimToTXOKey(); k2.claim_hash = new byte[20]; Arrays.fill(k2.claim_hash,(byte) 0x02); - byte[] key2 = new ClaimToTXOPrefixRow(null).packKey(k2); + byte[] key2 = new ClaimToTXOPrefixRow(null,null).packKey(k2); // ClaimToTXOKey k3 = new ClaimToTXOKey(); // k3.claim_hash = new byte[20]; // Arrays.fill(k3.claim_hash,(byte) 0x03); -// byte[] key3 = new ClaimToTXOPrefixRow(null).packKey(k3); +// byte[] key3 = new ClaimToTXOPrefixRow(null,null).packKey(k3); // ClaimToTXOKey k4 = new ClaimToTXOKey(); // k4.claim_hash = new byte[20]; // Arrays.fill(k4.claim_hash,(byte) 0x04); -// byte[] key4 = new ClaimToTXOPrefixRow(null).packKey(k4); +// byte[] key4 = new ClaimToTXOPrefixRow(null,null).packKey(k4); ClaimToTXOValue v1 = new ClaimToTXOValue(); v1.tx_num = 1; @@ -100,7 +100,7 @@ public class RevertibleOperationStackTest { v1.amount = 1; v1.channel_signature_is_valid = false; v1.name = "derp"; - byte[] val1 = new ClaimToTXOPrefixRow(null).packValue(v1); + byte[] val1 = new ClaimToTXOPrefixRow(null,null).packValue(v1); ClaimToTXOValue v2 = new ClaimToTXOValue(); v2.tx_num = 1; v2.position = 0; @@ -109,7 +109,7 @@ public class RevertibleOperationStackTest { v2.amount = 1; v2.channel_signature_is_valid = false; v2.name = "oops"; - byte[] val2 = new ClaimToTXOPrefixRow(null).packValue(v2); + byte[] val2 = new ClaimToTXOPrefixRow(null,null).packValue(v2); ClaimToTXOValue v3 = new ClaimToTXOValue(); v3.tx_num = 1; v3.position = 0; @@ -118,7 +118,7 @@ public class RevertibleOperationStackTest { v3.amount = 1; v3.channel_signature_is_valid = false; v3.name = "other"; - byte[] val3 = new ClaimToTXOPrefixRow(null).packValue(v3); + byte[] val3 = new ClaimToTXOPrefixRow(null,null).packValue(v3); // Check that we can't delete a non-existent value. assertThrows(OperationStackIntegrityException.class,() -> this.stack.appendOperation(new RevertibleDelete(key1,val1)));