A return value of -1 indicates that an estimate could not be produced, and should be ignored. The value returned by this method is really only useful when compared to previous or subsequent returned values.]]> A distributed implementation of {@link org.apache.hadoop.fs.FileSystem}. This is loosely modelled after Google's GFS.

The most important difference is that unlike GFS, Hadoop DFS files have strictly one writer at any one time. Bytes are always appended to the end of the writer's stream. There is no notion of "record appends" or "mutations" that are then checked or reordered. Writers simply emit a byte stream. That byte stream is guaranteed to be stored in the order written.

]]>
Since the list is fetched in batches, it does not represent a consistent snapshot of the entire list of encryption zones.

This method can only be called by HDFS superusers.]]> Inotify users may want to tune the following HDFS parameters to ensure that enough extra HDFS edits are saved to support inotify clients that fall behind the current state of the namespace while reading events. The default parameter values should generally be reasonable. If edits are deleted before their corresponding events can be read, clients will see a {@link org.apache.hadoop.hdfs.inotify.MissingEventsException} on {@link org.apache.hadoop.hdfs.DFSInotifyEventInputStream} method calls. It should generally be sufficient to tune these parameters: dfs.namenode.num.extra.edits.retained dfs.namenode.max.extra.edits.segments.retained Parameters that affect the number of created segments and the number of edits that are considered necessary, i.e. do not count towards the dfs.namenode.num.extra.edits.retained quota): dfs.namenode.checkpoint.period dfs.namenode.checkpoint.txns dfs.namenode.num.checkpoints.retained dfs.ha.log-roll.period

It is recommended that local journaling be configured (dfs.namenode.edits.dir) for inotify (in addition to a shared journal) so that edit transfers from the shared journal can be avoided. @throws IOException If there was an error obtaining the stream.]]> Use {@link Expiration#NEVER} to indicate an Expiration that never expires. @param ms how long until the CacheDirective expires, in milliseconds @return A relative Expiration]]> Use {@link Expiration#NEVER} to indicate an Expiration that never expires. @param date when the CacheDirective expires @return An absolute Expiration]]> Use {@link Expiration#NEVER} to indicate an Expiration that never expires. @param ms when the CacheDirective expires, in milliseconds since the Unix epoch. @return An absolute Expiration]]> In either case, the server-side clock is used to determine when a CacheDirective expires.]]>
To add a new layout version:

  • Define a new enum constant with a short enum name, the new layout version and description of the added feature.
  • When adding a layout version with an ancestor that is not same as its immediate predecessor, use the constructor where a specific ancestor can be passed.
]]>
Location type]]> This is usually the last block of a file opened for write or append.]]> localMachine and add them into excludeNodes as replica should not be duplicated for nodes within the same nodegroup @return number of new excluded nodes]]>
To add a new layout version:
  • Define a new enum constant with a short enum name, the new layout version and description of the added feature.
  • When adding a layout version with an ancestor that is not same as its immediate predecessor, use the constructor where a specific ancestor can be passed.
]]>
They are all managed by the DataNode's BlockScanner.]]>
{@code try (FsVolumeReference ref = volume.obtainReference()) { // Do IOs on the volume volume.createRwb(...); ... } } ]]> Note that this block may be removed in between the time we list it, and the time the caller tries to use it, or it may represent a stale entry. Callers should handle the case where the returned block no longer exists. @return The next block, or null if there are no more blocks. Null if there was an error determining the next block. @throws IOException If there was an error getting the next block in this volume. In this case, EOF will be set on the iterator.]]> A maximum staleness of 0 means we will never return stale entries; a larger value will allow us to reduce resource consumption in exchange for returning more potentially stale entries. Even with staleness set to 0, consumers of this API must handle race conditions where block disappear before they can be processed.]]> BlockIterator objects themselves do not always have internal synchronization, so they can only safely be used by a single thread at a time.

Closing the iterator does not save it. You must call save to save it.]]> An ACL entry is represented by a 32-bit integer in Big Endian format.
The bits can be divided in four segments:
[0:1) || [1:3) || [3:6) || [6:7) || [7:32)

[0:1) -- the scope of the entry (AclEntryScope)
[1:3) -- the type of the entry (AclEntryType)
[3:6) -- the permission of the entry (FsAction)
[6:7) -- A flag to indicate whether Named entry or not
[7:32) -- the name of the entry, which is an ID that points to a
string in the StringTableSection.
]]>
This method must return as quickly as possible, since it's called in a critical section of the NameNode's operation. @param succeeded Whether authorization succeeded. @param userName Name of the user executing the request. @param addr Remote address of the request. @param cmd The requested command. @param src Path of affected source file. @param dst Path of affected destination file (if any). @param stat File information for operations that change the file's metadata (permissions, owner, times, etc).]]> The EncryptionZoneManager has its own lock, but relies on the FSDirectory lock being held for many operations. The FSDirectory lock should not be taken if the manager lock is already held.]]> An instance of {@link SafeModeInfo} is created when the name node enters safe mode.

During name node startup {@link SafeModeInfo} counts the number of safe blocks, those that have at least the minimal number of replicas, and calculates the ratio of safe blocks to the total number of blocks in the system, which is the size of blocks in {@link FSNamesystem#blockManager}. When the ratio reaches the {@link #threshold} it starts the SafeModeMonitor daemon in order to monitor whether the safe mode {@link #extension} is passed. Then it leaves safe mode and destroys itself.

If safe mode is turned on manually then the number of safe blocks is not tracked because the name node is not intended to leave safe mode automatically in the case. @see ClientProtocol#setSafeMode(HdfsConstants.SafeModeAction, boolean)]]> 1) remove the WithName node from the deleted list (if it exists) 2) replace the WithName node in the created list with srcChild 3) add srcChild back as a child of srcParent. Note that we already add the node into the created list of a snapshot diff in step 2, we do not need to add srcChild to the created list of the latest snapshot. We do not need to update quota usage because the old child is in the deleted list before. @param oldChild The reference node to be removed/replaced @param newChild The node to be added back @throws QuotaExceededException should not throw this exception]]> To destroy a DstReference node, we first remove its link with the referred node. If the reference number of the referred node is <= 0, we destroy the subtree of the referred node. Otherwise, we clean the referred node's subtree and delete everything created after the last rename operation, i.e., everything outside of the scope of the prior WithName nodes.]]> = 0; otherwise, i < 0, return the (length + i)-th inode.]]>
To add a new layout version:

  • Define a new enum constant with a short enum name, the new layout version and description of the added feature.
  • When adding a layout version with an ancestor that is not same as its immediate predecessor, use the constructor where a specific ancestor can be passed.
]]>
1. Lock the {@link FSNamesystem} lock in {@link FSNamesystem} before calling into {@link SnapshotManager} methods.
2. Lock the {@link FSDirectory} lock for the {@link SnapshotManager} methods if necessary.]]>
Function which applies {@link #getStartTxId()}]]>
  • If adding a simple option to get a value corresponding to a key in the configuration, use regular {@link GetConf.CommandHandler}. See {@link GetConf.Command#EXCLUDE_FILE} example.
  • If adding an option that is does not return a value for a key, add a subclass of {@link GetConf.CommandHandler} and set it up in {@link GetConf.Command}. See {@link GetConf.Command#NAMENODE} for example. Add for the new option added, a map entry with the corresponding {@link GetConf.CommandHandler}. ]]> NOTE: on Windows platforms, it will not atomically replace the target file - instead the target file is deleted before this one is moved into place.]]> 1. For (c, 0) in the posterior diff, check the element in this diff: 1.1 (c', 0) in this diff: impossible 1.2 (0, d') in this diff: put in c-list --> (c, d') 1.3 (c', d') in this diff: impossible 1.4 (0, 0) in this diff: put in c-list --> (c, 0) This is the same logic as create(E). 2. For (0, d) in the posterior diff, 2.1 (c', 0) in this diff: remove from c-list --> (0, 0) 2.2 (0, d') in this diff: impossible 2.3 (c', d') in this diff: remove from c-list --> (0, d') 2.4 (0, 0) in this diff: put in d-list --> (0, d) This is the same logic as delete(E). 3. For (c, d) in the posterior diff, 3.1 (c', 0) in this diff: replace the element in c-list --> (c, 0) 3.2 (0, d') in this diff: impossible 3.3 (c', d') in this diff: replace the element in c-list --> (c, d') 3.4 (0, 0) in this diff: put in c-list and d-list --> (c, d) This is the same logic as modify(E, E). @param posterior The posterior diff to combine with. @param deletedProcesser process the deleted/overwritten elements in case 2.1, 2.3, 3.1 and 3.3.]]> Two lists are maintained in the algorithm: - c-list for newly created elements - d-list for the deleted elements Denote the state of an element by the following (0, 0): neither in c-list nor d-list (c, 0): in c-list but not in d-list (0, d): in d-list but not in c-list (c, d): in both c-list and d-list For each case below, ( , ) at the end shows the result state of the element. Case 1. Suppose the element i is NOT in the previous state. (0, 0) 1.1. create i in current: add it to c-list (c, 0) 1.1.1. create i in current and then create: impossible 1.1.2. create i in current and then delete: remove it from c-list (0, 0) 1.1.3. create i in current and then modify: replace it in c-list (c', 0) 1.2. delete i from current: impossible 1.3. modify i in current: impossible Case 2. Suppose the element i is ALREADY in the previous state. (0, 0) 2.1. create i in current: impossible 2.2. delete i from current: add it to d-list (0, d) 2.2.1. delete i from current and then create: add it to c-list (c, d) 2.2.2. delete i from current and then delete: impossible 2.2.2. delete i from current and then modify: impossible 2.3. modify i in current: put it in both c-list and d-list (c, d) 2.3.1. modify i in current and then create: impossible 2.3.2. modify i in current and then delete: remove it from c-list (0, d) 2.3.3. modify i in current and then modify: replace it in c-list (c', d) @param The key type. @param The element type, which must implement {@link Element} interface.]]> enum Fruit { APPLE, ORANGE, GRAPE } An {@link EnumCounters} object can be created for counting the numbers of APPLE, ORANGLE and GRAPE. @param the enum type]]> the enum type @param the counter type]]> the key type @param the enum type @param the counter type]]> the enum type]]> @return webhdfs]]>