All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.hadoop.hdfs.protocol.ZoneReencryptionStatus Maven / Gradle / Ivy

There is a newer version: 3.4.1
Show newest version
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.hadoop.hdfs.protocol; import com.google.common.base.Preconditions; import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.ReencryptionInfoProto; /** * A class representing information about re-encryption of an encryption zone. *

* FSDirectory lock is used for synchronization (except test-only methods, which * are not protected). */ public class ZoneReencryptionStatus { /** * State of re-encryption. */ public enum State { /** * Submitted for re-encryption but hasn't been picked up. * This is the initial state. */ Submitted, /** * Currently re-encrypting. */ Processing, /** * Re-encryption completed. */ Completed } private long id; private String zoneName; /** * The re-encryption status of the zone. Note this is a in-memory only * variable. On failover it will always be submitted, or completed if * completionTime != 0; */ private State state; private String ezKeyVersionName; private long submissionTime; private long completionTime; private boolean canceled; /** * Name of last file processed. It's important to record name (not inode) * because we want to restore to the position even if the inode is removed. */ private String lastCheckpointFile; private long filesReencrypted; private long numReencryptionFailures; /** * Builder of {@link ZoneReencryptionStatus}. */ public static final class Builder { private long id; private String zoneName; private State state; private String ezKeyVersionName; private long submissionTime; private long completionTime; private boolean canceled; private String lastCheckpointFile; private long filesReencrypted; private long fileReencryptionFailures; public Builder() { } public Builder id(final long inodeid) { id = inodeid; return this; } public Builder zoneName(final String ezName) { zoneName = ezName; return this; } public Builder state(final State st) { state = st; return this; } public Builder ezKeyVersionName(final String ezkvn) { ezKeyVersionName = ezkvn; return this; } public Builder submissionTime(final long submission) { submissionTime = submission; return this; } public Builder completionTime(final long completion) { completionTime = completion; return this; } public Builder canceled(final boolean isCanceled) { canceled = isCanceled; return this; } public Builder lastCheckpointFile(final String lastFile) { lastCheckpointFile = lastFile; return this; } public Builder filesReencrypted(final long numReencrypted) { filesReencrypted = numReencrypted; return this; } public Builder fileReencryptionFailures(final long numFailures) { fileReencryptionFailures = numFailures; return this; } public ZoneReencryptionStatus build() { ZoneReencryptionStatus ret = new ZoneReencryptionStatus(); Preconditions.checkArgument(id != 0, "no inode id set."); Preconditions.checkNotNull(state, "no state id set."); Preconditions.checkNotNull(ezKeyVersionName, "no keyVersionName set."); Preconditions .checkArgument(submissionTime != 0, "no submission time set."); ret.id = this.id; ret.zoneName = this.zoneName; ret.state = this.state; ret.ezKeyVersionName = this.ezKeyVersionName; ret.submissionTime = this.submissionTime; ret.completionTime = this.completionTime; ret.canceled = this.canceled; ret.lastCheckpointFile = this.lastCheckpointFile; ret.filesReencrypted = this.filesReencrypted; ret.numReencryptionFailures = this.fileReencryptionFailures; return ret; } } public ZoneReencryptionStatus() { reset(); } void resetMetrics() { filesReencrypted = 0; numReencryptionFailures = 0; } public long getId() { return id; } public String getZoneName() { return zoneName; } void setState(final State s) { state = s; } public State getState() { return state; } public String getEzKeyVersionName() { return ezKeyVersionName; } public long getSubmissionTime() { return submissionTime; } public long getCompletionTime() { return completionTime; } public boolean isCanceled() { return canceled; } public String getLastCheckpointFile() { return lastCheckpointFile; } public long getFilesReencrypted() { return filesReencrypted; } public long getNumReencryptionFailures() { return numReencryptionFailures; } public void reset() { state = State.Submitted; ezKeyVersionName = null; submissionTime = 0; completionTime = 0; canceled = false; lastCheckpointFile = null; resetMetrics(); } /** * Set the zone name. The zone name is resolved from inode id and set during * a listReencryptionStatus call, for the crypto admin to consume. */ public void setZoneName(final String name) { Preconditions.checkNotNull(name, "zone name cannot be null"); zoneName = name; } public void cancel() { canceled = true; } void markZoneCompleted(final ReencryptionInfoProto proto) { state = ZoneReencryptionStatus.State.Completed; completionTime = proto.getCompletionTime(); lastCheckpointFile = null; canceled = proto.getCanceled(); filesReencrypted = proto.getNumReencrypted(); numReencryptionFailures = proto.getNumFailures(); } void markZoneSubmitted(final ReencryptionInfoProto proto) { reset(); state = ZoneReencryptionStatus.State.Submitted; ezKeyVersionName = proto.getEzKeyVersionName(); submissionTime = proto.getSubmissionTime(); filesReencrypted = proto.getNumReencrypted(); numReencryptionFailures = proto.getNumFailures(); } void updateZoneProcess(final ReencryptionInfoProto proto) { lastCheckpointFile = proto.getLastFile(); filesReencrypted = proto.getNumReencrypted(); numReencryptionFailures = proto.getNumFailures(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy