Пример #1
0
        private static QuotaCounts ComputeQuotaDeltas(FSDirectory fsd, INodeFile target,
                                                      INodeFile[] srcList)
        {
            QuotaCounts deltas     = new QuotaCounts.Builder().Build();
            short       targetRepl = target.GetBlockReplication();

            foreach (INodeFile src in srcList)
            {
                short srcRepl  = src.GetBlockReplication();
                long  fileSize = src.ComputeFileSize();
                if (targetRepl != srcRepl)
                {
                    deltas.AddStorageSpace(fileSize * (targetRepl - srcRepl));
                    BlockStoragePolicy bsp = fsd.GetBlockStoragePolicySuite().GetPolicy(src.GetStoragePolicyID
                                                                                            ());
                    if (bsp != null)
                    {
                        IList <StorageType> srcTypeChosen = bsp.ChooseStorageTypes(srcRepl);
                        foreach (StorageType t in srcTypeChosen)
                        {
                            if (t.SupportTypeQuota())
                            {
                                deltas.AddTypeSpace(t, -fileSize);
                            }
                        }
                        IList <StorageType> targetTypeChosen = bsp.ChooseStorageTypes(targetRepl);
                        foreach (StorageType t_1 in targetTypeChosen)
                        {
                            if (t_1.SupportTypeQuota())
                            {
                                deltas.AddTypeSpace(t_1, fileSize);
                            }
                        }
                    }
                }
            }
            return(deltas);
        }