public class StageBuilder
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
private static byte[] |
PEEL |
private static int |
SMALL_BATCH_SIZE
Acceptable number of references to send in a single stage transaction.
|
private static int |
TEMP_PARENT_BATCH_SIZE
Acceptable number of commits to chain together using parent pointers.
|
private java.lang.String |
txnId |
private java.lang.String |
txnStage |
Constructor and Description |
---|
StageBuilder(java.lang.String txnStageNamespace,
ObjectId txnId)
Construct a stage builder for a transaction.
|
Modifier and Type | Method and Description |
---|---|
java.util.List<ReceiveCommand> |
makeStageList(Repository git,
ObjectId oldTree,
ObjectId newTree)
Compare two RefTrees and return commands to stage new objects.
|
java.util.List<ReceiveCommand> |
makeStageList(java.util.Set<ObjectId> newObjs,
Repository git,
ObjectInserter inserter)
Construct a set of commands to stage objects on a replica.
|
private void |
reduceObjects(java.util.List<ReceiveCommand> cmds,
java.util.List<RevCommit> commits,
Repository git,
java.util.Set<ObjectId> newObjs) |
private void |
stage(java.util.List<ReceiveCommand> cmds,
ObjectId id) |
private static PersonIdent |
tmpAuthor(java.util.List<RevCommit> commits) |
private static final int SMALL_BATCH_SIZE
If the number of unique objects exceeds this amount the builder will attempt to decrease the reference count by chaining commits..
private static final int TEMP_PARENT_BATCH_SIZE
When staging many unique commits the StageBuilder
batches
together unrelated commits as parents of a temporary commit. After the
proposal completes the temporary commit is discarded and can be garbage
collected by all replicas.
private static final byte[] PEEL
private final java.lang.String txnStage
private final java.lang.String txnId
public StageBuilder(java.lang.String txnStageNamespace, ObjectId txnId)
txnStageNamespace
- namespace for transaction references to build
"txnStageNamespace/txnId.n"
style names.txnId
- identifier used to name temporary staging refs.public java.util.List<ReceiveCommand> makeStageList(Repository git, ObjectId oldTree, ObjectId newTree) throws java.io.IOException
This method ignores the lineage between the two RefTrees and does a straight diff on the two trees. New objects will be staged. The diff strategy is useful to catch-up a lagging replica, without sending every intermediate step. This may mean the replica does not have the same object set as other replicas if there are rewinds or branch deletes.
git
- source repository to read oldTree
and newTree
from.oldTree
- accepted RefTree on the replica (refs/txn/accepted
).
Use ObjectId.zeroId()
if the
remote does not have any ref tree, e.g. a new replica catching
up.newTree
- RefTree being sent to the replica. The trees will be compared."refs/txn/stage/..."
references on replicas anchoring new objects into the repository
while a transaction gains consensus.java.io.IOException
- git
cannot be accessed to compare oldTree
and
newTree
to build the object set.public java.util.List<ReceiveCommand> makeStageList(java.util.Set<ObjectId> newObjs, @Nullable Repository git, @Nullable ObjectInserter inserter) throws java.io.IOException
newObjs
- objects to send to a replica.git
- local repository to read source objects from. Required to
perform minification of newObjs
.inserter
- inserter to write temporary commit objects during minification
if many new branches are created by newObjs
."refs/txn/stage/..."
references on replicas anchoring newObjs
into the
repository while a transaction gains consensus.java.io.IOException
- git
cannot be accessed to perform minification of
newObjs
.private static PersonIdent tmpAuthor(java.util.List<RevCommit> commits)
private void reduceObjects(java.util.List<ReceiveCommand> cmds, java.util.List<RevCommit> commits, Repository git, java.util.Set<ObjectId> newObjs) throws java.io.IOException
java.io.IOException
private void stage(java.util.List<ReceiveCommand> cmds, ObjectId id)