blob: af9485e07412d8ed92efe08ed68da04181fa269b [file] [log] [blame]
/*
* 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()));
}
}
}