예제 #1
0
        /// <exception cref="System.IO.IOException"/>
        public KeyManager(string blockpoolID, NamenodeProtocol namenode, bool encryptDataTransfer
                          , Configuration conf)
        {
            this.namenode            = namenode;
            this.encryptDataTransfer = encryptDataTransfer;
            ExportedBlockKeys keys = namenode.GetBlockKeys();

            this.isBlockTokenEnabled = keys.IsBlockTokenEnabled();
            if (isBlockTokenEnabled)
            {
                long updateInterval = keys.GetKeyUpdateInterval();
                long tokenLifetime  = keys.GetTokenLifetime();
                Log.Info("Block token params received from NN: update interval=" + StringUtils.FormatTime
                             (updateInterval) + ", token lifetime=" + StringUtils.FormatTime(tokenLifetime));
                string encryptionAlgorithm = conf.Get(DFSConfigKeys.DfsDataEncryptionAlgorithmKey
                                                      );
                this.blockTokenSecretManager = new BlockTokenSecretManager(updateInterval, tokenLifetime
                                                                           , blockpoolID, encryptionAlgorithm);
                this.blockTokenSecretManager.AddKeys(keys);
                // sync block keys with NN more frequently than NN updates its block keys
                this.blockKeyUpdater = new KeyManager.BlockKeyUpdater(this, updateInterval / 4);
                this.shouldRun       = true;
            }
            else
            {
                this.blockTokenSecretManager = null;
                this.blockKeyUpdater         = null;
            }
        }
예제 #2
0
        /// <exception cref="Com.Google.Protobuf.ServiceException"/>
        public virtual NamenodeProtocolProtos.GetBlockKeysResponseProto GetBlockKeys(RpcController
                                                                                     unused, NamenodeProtocolProtos.GetBlockKeysRequestProto request)
        {
            ExportedBlockKeys keys;

            try
            {
                keys = impl.GetBlockKeys();
            }
            catch (IOException e)
            {
                throw new ServiceException(e);
            }
            NamenodeProtocolProtos.GetBlockKeysResponseProto.Builder builder = NamenodeProtocolProtos.GetBlockKeysResponseProto
                                                                               .NewBuilder();
            if (keys != null)
            {
                builder.SetKeys(PBHelper.Convert(keys));
            }
            return((NamenodeProtocolProtos.GetBlockKeysResponseProto)builder.Build());
        }