Browse Source

Enforce DFS blockLimit is a multiple of blockSize

Change-Id: I2821124ff88d7d1812a846ed20f3828fc9123b38
stable-4.11
Dave Borowitz 7 years ago
parent
commit
14167272c2
  1. 2
      org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
  2. 2
      org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
  3. 33
      org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsBlockCacheConfig.java

2
org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties

@ -41,6 +41,8 @@ bitmapsMustBePrepared=Bitmaps must be prepared before they may be written.
blameNotCommittedYet=Not Committed Yet
blobNotFound=Blob not found: {0}
blobNotFoundForPath=Blob not found: {0} for path: {1}
blockLimitNotMultipleOfBlockSize=blockLimit {0} must be a multiple of blockSize {1}
blockLimitNotPositive=blockLimit must be positive: {0}
blockSizeNotPowerOf2=blockSize must be a power of 2
bothRefTargetsMustNotBeNull=both old and new ref targets must not be null.
branchNameInvalid=Branch name {0} is not allowed

2
org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java

@ -102,6 +102,8 @@ public class JGitText extends TranslationBundle {
/***/ public String blameNotCommittedYet;
/***/ public String blobNotFound;
/***/ public String blobNotFoundForPath;
/***/ public String blockLimitNotMultipleOfBlockSize;
/***/ public String blockLimitNotPositive;
/***/ public String blockSizeNotPowerOf2;
/***/ public String bothRefTargetsMustNotBeNull;
/***/ public String branchNameInvalid;

33
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsBlockCacheConfig.java

@ -95,13 +95,23 @@ public class DfsBlockCacheConfig {
/**
* Set maximum number bytes of heap memory to dedicate to caching pack file
* data.
* <p>
* It is strongly recommended to set the block limit to be an integer multiple
* of the block size. This constraint is not enforced by this method (since
* it may be called before {@link #setBlockSize(int)}), but it is enforced by
* {@link #fromConfig(Config)}.
*
* @param newLimit
* maximum number bytes of heap memory to dedicate to caching
* pack file data.
* pack file data; must be positive.
* @return {@code this}
*/
public DfsBlockCacheConfig setBlockLimit(final long newLimit) {
if (newLimit <= 0) {
throw new IllegalArgumentException(MessageFormat.format(
JGitText.get().blockLimitNotPositive,
Long.valueOf(newLimit)));
}
blockLimit = newLimit;
return this;
}
@ -188,23 +198,34 @@ public class DfsBlockCacheConfig {
* <p>
* If a property is not defined in the configuration, then it is left
* unmodified.
* <p>
* Enforces certain constraints on the combination of settings in the config,
* for example that the block limit is a multiple of the block size.
*
* @param rc
* configuration to read properties from.
* @return {@code this}
*/
public DfsBlockCacheConfig fromConfig(final Config rc) {
setBlockLimit(rc.getLong(
long cfgBlockLimit = rc.getLong(
CONFIG_CORE_SECTION,
CONFIG_DFS_SECTION,
CONFIG_KEY_BLOCK_LIMIT,
getBlockLimit()));
setBlockSize(rc.getInt(
getBlockLimit());
int cfgBlockSize = rc.getInt(
CONFIG_CORE_SECTION,
CONFIG_DFS_SECTION,
CONFIG_KEY_BLOCK_SIZE,
getBlockSize()));
getBlockSize());
if (cfgBlockLimit % cfgBlockSize != 0) {
throw new IllegalArgumentException(MessageFormat.format(
JGitText.get().blockLimitNotMultipleOfBlockSize,
Long.valueOf(cfgBlockLimit),
Long.valueOf(cfgBlockSize)));
}
setBlockLimit(cfgBlockLimit);
setBlockSize(cfgBlockSize);
setConcurrencyLevel(rc.getInt(
CONFIG_CORE_SECTION,

Loading…
Cancel
Save