| /* |
| * 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.ignite.internal.processors.igfs; |
| |
| import java.io.Externalizable; |
| import java.io.IOException; |
| import java.io.ObjectInput; |
| import java.io.ObjectOutput; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.Map; |
| import org.apache.ignite.igfs.IgfsMode; |
| import org.apache.ignite.internal.util.typedef.internal.U; |
| |
| /** |
| * IGFS attributes. |
| * <p> |
| * This class contains information on a single IGFS configured on some node. |
| */ |
| public class IgfsAttributes implements Externalizable { |
| /** */ |
| private static final long serialVersionUID = 0L; |
| |
| /** IGFS name. */ |
| private String igfsName; |
| |
| /** File's data block size (bytes). */ |
| private int blockSize; |
| |
| /** Size of the group figured in {@link org.apache.ignite.igfs.IgfsGroupDataBlocksKeyMapper}. */ |
| private int grpSize; |
| |
| /** Meta cache name. */ |
| private String metaCacheName; |
| |
| /** Data cache name. */ |
| private String dataCacheName; |
| |
| /** Default mode. */ |
| private IgfsMode dfltMode; |
| |
| /** Fragmentizer enabled flag. */ |
| private boolean fragmentizerEnabled; |
| |
| /** Path modes. */ |
| private Map<String, IgfsMode> pathModes; |
| |
| /** |
| * @param igfsName IGFS name. |
| * @param blockSize File's data block size (bytes). |
| * @param grpSize Size of the group figured in {@link org.apache.ignite.igfs.IgfsGroupDataBlocksKeyMapper}. |
| * @param metaCacheName Meta cache name. |
| * @param dataCacheName Data cache name. |
| * @param dfltMode Default mode. |
| * @param pathModes Path modes. |
| */ |
| public IgfsAttributes(String igfsName, int blockSize, int grpSize, String metaCacheName, String dataCacheName, |
| IgfsMode dfltMode, Map<String, IgfsMode> pathModes, boolean fragmentizerEnabled) { |
| this.blockSize = blockSize; |
| this.igfsName = igfsName; |
| this.grpSize = grpSize; |
| this.metaCacheName = metaCacheName; |
| this.dataCacheName = dataCacheName; |
| this.dfltMode = dfltMode; |
| this.pathModes = pathModes; |
| this.fragmentizerEnabled = fragmentizerEnabled; |
| } |
| |
| /** |
| * Public no-arg constructor for {@link Externalizable}. |
| */ |
| public IgfsAttributes() { |
| // No-op. |
| } |
| |
| /** |
| * @return IGFS name. |
| */ |
| public String igfsName() { |
| return igfsName; |
| } |
| |
| /** |
| * @return File's data block size (bytes). |
| */ |
| public int blockSize() { |
| return blockSize; |
| } |
| |
| /** |
| * @return Size of the group figured in {@link org.apache.ignite.igfs.IgfsGroupDataBlocksKeyMapper}. |
| */ |
| public int groupSize() { |
| return grpSize; |
| } |
| |
| /** |
| * @return Metadata cache name. |
| */ |
| public String metaCacheName() { |
| return metaCacheName; |
| } |
| |
| /** |
| * @return Data cache name. |
| */ |
| public String dataCacheName() { |
| return dataCacheName; |
| } |
| |
| /** |
| * @return Default mode. |
| */ |
| public IgfsMode defaultMode() { |
| return dfltMode; |
| } |
| |
| /** |
| * @return Path modes. |
| */ |
| public Map<String, IgfsMode> pathModes() { |
| return pathModes != null ? Collections.unmodifiableMap(pathModes) : null; |
| } |
| |
| /** |
| * @return {@code True} if fragmentizer is enabled. |
| */ |
| public boolean fragmentizerEnabled() { |
| return fragmentizerEnabled; |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void writeExternal(ObjectOutput out) throws IOException { |
| U.writeString(out, igfsName); |
| out.writeInt(blockSize); |
| out.writeInt(grpSize); |
| U.writeString(out, metaCacheName); |
| U.writeString(out, dataCacheName); |
| U.writeEnum(out, dfltMode); |
| out.writeBoolean(fragmentizerEnabled); |
| |
| if (pathModes != null) { |
| out.writeBoolean(true); |
| |
| out.writeInt(pathModes.size()); |
| |
| for (Map.Entry<String, IgfsMode> pathMode : pathModes.entrySet()) { |
| U.writeString(out, pathMode.getKey()); |
| U.writeEnum(out, pathMode.getValue()); |
| } |
| } |
| else |
| out.writeBoolean(false); |
| } |
| |
| /** {@inheritDoc} */ |
| @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { |
| igfsName = U.readString(in); |
| blockSize = in.readInt(); |
| grpSize = in.readInt(); |
| metaCacheName = U.readString(in); |
| dataCacheName = U.readString(in); |
| dfltMode = IgfsMode.fromOrdinal(in.readByte()); |
| fragmentizerEnabled = in.readBoolean(); |
| |
| if (in.readBoolean()) { |
| int size = in.readInt(); |
| |
| pathModes = new HashMap<>(size, 1.0f); |
| |
| for (int i = 0; i < size; i++) |
| pathModes.put(U.readString(in), IgfsMode.fromOrdinal(in.readByte())); |
| } |
| } |
| } |