/*
 * Copyright (C) 2017, Google Inc. and others
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Distribution License v. 1.0 which is available at
 * https://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

package org.eclipse.jgit.internal.storage.reftable;

import static org.eclipse.jgit.internal.storage.reftable.ReftableConstants.MAX_BLOCK_SIZE;

import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.Repository;

Configuration used by a reftable writer when constructing the stream.
/** * Configuration used by a reftable writer when constructing the stream. */
public class ReftableConfig { private int refBlockSize = 4 << 10; private int logBlockSize; private int restartInterval; private int maxIndexLevels; private boolean alignBlocks = true; private boolean indexObjects = true;
Create a default configuration.
/** * Create a default configuration. */
public ReftableConfig() { }
Create a configuration honoring the repository's settings.
Params:
  • db – the repository to read settings from. The repository is not retained by the new configuration, instead its settings are copied during the constructor.
/** * Create a configuration honoring the repository's settings. * * @param db * the repository to read settings from. The repository is not * retained by the new configuration, instead its settings are * copied during the constructor. */
public ReftableConfig(Repository db) { fromConfig(db.getConfig()); }
Create a configuration honoring settings in a Config.
Params:
  • cfg – the source to read settings from. The source is not retained by the new configuration, instead its settings are copied during the constructor.
/** * Create a configuration honoring settings in a * {@link org.eclipse.jgit.lib.Config}. * * @param cfg * the source to read settings from. The source is not retained * by the new configuration, instead its settings are copied * during the constructor. */
public ReftableConfig(Config cfg) { fromConfig(cfg); }
Copy an existing configuration to a new instance.
Params:
  • cfg – the source configuration to copy from.
/** * Copy an existing configuration to a new instance. * * @param cfg * the source configuration to copy from. */
public ReftableConfig(ReftableConfig cfg) { this.refBlockSize = cfg.refBlockSize; this.logBlockSize = cfg.logBlockSize; this.restartInterval = cfg.restartInterval; this.maxIndexLevels = cfg.maxIndexLevels; this.alignBlocks = cfg.alignBlocks; this.indexObjects = cfg.indexObjects; }
Get desired output block size for references, in bytes.
Returns:desired output block size for references, in bytes.
/** * Get desired output block size for references, in bytes. * * @return desired output block size for references, in bytes. */
public int getRefBlockSize() { return refBlockSize; }
Set desired output block size for references, in bytes.
Params:
  • szBytes – desired output block size for references, in bytes.
/** * Set desired output block size for references, in bytes. * * @param szBytes * desired output block size for references, in bytes. */
public void setRefBlockSize(int szBytes) { if (szBytes > MAX_BLOCK_SIZE) { throw new IllegalArgumentException(); } refBlockSize = Math.max(0, szBytes); }
Get desired output block size for log entries, in bytes.
Returns:desired output block size for log entries, in bytes. If 0 the writer will default to 2 * getRefBlockSize().
/** * Get desired output block size for log entries, in bytes. * * @return desired output block size for log entries, in bytes. If 0 the * writer will default to {@code 2 * getRefBlockSize()}. */
public int getLogBlockSize() { return logBlockSize; }
Set desired output block size for log entries, in bytes.
Params:
  • szBytes – desired output block size for log entries, in bytes. If 0 will default to 2 * getRefBlockSize().
/** * Set desired output block size for log entries, in bytes. * * @param szBytes * desired output block size for log entries, in bytes. If 0 will * default to {@code 2 * getRefBlockSize()}. */
public void setLogBlockSize(int szBytes) { if (szBytes > MAX_BLOCK_SIZE) { throw new IllegalArgumentException(); } logBlockSize = Math.max(0, szBytes); }
Get number of references between binary search markers.
Returns:number of references between binary search markers.
/** * Get number of references between binary search markers. * * @return number of references between binary search markers. */
public int getRestartInterval() { return restartInterval; }

Setter for the field restartInterval.

Params:
  • interval – number of references between binary search markers. If interval is 0 (default), the writer will select a default value based on the block size.
/** * <p>Setter for the field <code>restartInterval</code>.</p> * * @param interval * number of references between binary search markers. If * {@code interval} is 0 (default), the writer will select a * default value based on the block size. */
public void setRestartInterval(int interval) { restartInterval = Math.max(0, interval); }
Get maximum depth of the index; 0 for unlimited.
Returns:maximum depth of the index; 0 for unlimited.
/** * Get maximum depth of the index; 0 for unlimited. * * @return maximum depth of the index; 0 for unlimited. */
public int getMaxIndexLevels() { return maxIndexLevels; }
Set maximum number of levels to use in indexes.
Params:
  • levels – maximum number of levels to use in indexes. Lower levels of the index respect getRefBlockSize(), and the highest level may exceed that if the number of levels is limited.
/** * Set maximum number of levels to use in indexes. * * @param levels * maximum number of levels to use in indexes. Lower levels of * the index respect {@link #getRefBlockSize()}, and the highest * level may exceed that if the number of levels is limited. */
public void setMaxIndexLevels(int levels) { maxIndexLevels = Math.max(0, levels); }
Whether the writer should align blocks.
Returns:true if the writer should align blocks.
/** * Whether the writer should align blocks. * * @return {@code true} if the writer should align blocks. */
public boolean isAlignBlocks() { return alignBlocks; }
Whether blocks are written aligned to multiples of getRefBlockSize().
Params:
  • align – if true blocks are written aligned to multiples of getRefBlockSize(). May increase file size due to NUL padding bytes added between blocks. Default is true.
/** * Whether blocks are written aligned to multiples of * {@link #getRefBlockSize()}. * * @param align * if {@code true} blocks are written aligned to multiples of * {@link #getRefBlockSize()}. May increase file size due to NUL * padding bytes added between blocks. Default is {@code true}. */
public void setAlignBlocks(boolean align) { alignBlocks = align; }
Whether the writer should index object to ref.
Returns:true if the writer should index object to ref.
/** * Whether the writer should index object to ref. * * @return {@code true} if the writer should index object to ref. */
public boolean isIndexObjects() { return indexObjects; }
Whether the reftable may include additional storage to efficiently map from ObjectId to reference names.
Params:
  • index – if true the reftable may include additional storage to efficiently map from ObjectId to reference names. By default, true.
/** * Whether the reftable may include additional storage to efficiently map * from {@code ObjectId} to reference names. * * @param index * if {@code true} the reftable may include additional storage to * efficiently map from {@code ObjectId} to reference names. By * default, {@code true}. */
public void setIndexObjects(boolean index) { indexObjects = index; }
Update properties by setting fields from the configuration. If a property's corresponding variable is not defined in the supplied configuration, then it is left unmodified.
Params:
  • rc – configuration to read properties from.
/** * Update properties by setting fields from the configuration. * * If a property's corresponding variable is not defined in the supplied * configuration, then it is left unmodified. * * @param rc * configuration to read properties from. */
public void fromConfig(Config rc) { refBlockSize = rc.getInt("reftable", "blockSize", refBlockSize); //$NON-NLS-1$ //$NON-NLS-2$ logBlockSize = rc.getInt("reftable", "logBlockSize", logBlockSize); //$NON-NLS-1$ //$NON-NLS-2$ restartInterval = rc.getInt("reftable", "restartInterval", restartInterval); //$NON-NLS-1$ //$NON-NLS-2$ maxIndexLevels = rc.getInt("reftable", "indexLevels", maxIndexLevels); //$NON-NLS-1$ //$NON-NLS-2$ alignBlocks = rc.getBoolean("reftable", "alignBlocks", alignBlocks); //$NON-NLS-1$ //$NON-NLS-2$ indexObjects = rc.getBoolean("reftable", "indexObjects", indexObjects); //$NON-NLS-1$ //$NON-NLS-2$ } }