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
/***/ public String blameNotCommittedYet;
/***/ public String blobNotFound;
/***/ public String blobNotFoundForPath;
+ /***/ public String blockLimitNotMultipleOfBlockSize;
+ /***/ public String blockLimitNotPositive;
/***/ public String blockSizeNotPowerOf2;
/***/ public String bothRefTargetsMustNotBeNull;
/***/ public String branchNameInvalid;
/**
* 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;
}
* <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,