blob: b78ebcfb6d95f588199ea1561e641bf3bb7746ae [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.distributedlog.metadata;
import java.net.URI;
/**
* Class to represent the layout and metadata of the zookeeper-based log metadata
*/
public class LogMetadata {
protected static String getLogComponentPath(URI uri, String logName, String logIdentifier, String component) {
return String.format("%s/%s/%s%s", uri.getPath(), logName, logIdentifier, component);
}
/**
* Get the top stream path for a given log.
*
* @param uri namespace to store the log
* @param logName name of the log
* @return top stream path
*/
public static String getLogStreamPath(URI uri, String logName) {
return String.format("%s/%s", uri.getPath(), logName);
}
/**
* Get the log root path for a given log.
*
* @param uri
* namespace to store the log
* @param logName
* name of the log
* @param logIdentifier
* identifier of the log
* @return log root path
*/
public static String getLogRootPath(URI uri, String logName, String logIdentifier) {
return getLogComponentPath(uri, logName, logIdentifier, "");
}
/**
* Get the logsegments root path for a given log.
*
* @param uri
* namespace to store the log
* @param logName
* name of the log
* @param logIdentifier
* identifier of the log
* @return logsegments root path
*/
public static String getLogSegmentsPath(URI uri, String logName, String logIdentifier) {
return getLogComponentPath(uri, logName, logIdentifier, LOGSEGMENTS_PATH);
}
public static final int LAYOUT_VERSION = -1;
public final static String LOGSEGMENTS_PATH = "/ledgers";
public final static String VERSION_PATH = "/version";
// writer znodes
public final static String MAX_TXID_PATH = "/maxtxid";
public final static String LOCK_PATH = "/lock";
public final static String ALLOCATION_PATH = "/allocation";
// reader znodes
public final static String READ_LOCK_PATH = "/readLock";
protected final URI uri;
protected final String logName;
protected final String logIdentifier;
// Root path of the log
protected final String logRootPath;
// Components
protected final String logSegmentsPath;
protected final String lockPath;
protected final String maxTxIdPath;
protected final String allocationPath;
/**
* metadata representation of a log
*
* @param uri
* namespace to store the log
* @param logName
* name of the log
* @param logIdentifier
* identifier of the log
*/
protected LogMetadata(URI uri,
String logName,
String logIdentifier) {
this.uri = uri;
this.logName = logName;
this.logIdentifier = logIdentifier;
this.logRootPath = getLogRootPath(uri, logName, logIdentifier);
this.logSegmentsPath = logRootPath + LOGSEGMENTS_PATH;
this.lockPath = logRootPath + LOCK_PATH;
this.maxTxIdPath = logRootPath + MAX_TXID_PATH;
this.allocationPath = logRootPath + ALLOCATION_PATH;
}
public URI getUri() {
return uri;
}
public String getLogName() {
return logName;
}
/**
* Get the root path of the log.
*
* @return root path of the log.
*/
public String getLogRootPath() {
return logRootPath;
}
/**
* Get the root path for log segments.
*
* @return root path for log segments
*/
public String getLogSegmentsPath() {
return this.logSegmentsPath;
}
/**
* Get the path for a log segment of the log.
*
* @param segmentName
* segment name
* @return path for the log segment
*/
public String getLogSegmentPath(String segmentName) {
return this.logSegmentsPath + "/" + segmentName;
}
public String getLockPath() {
return lockPath;
}
public String getMaxTxIdPath() {
return maxTxIdPath;
}
public String getAllocationPath() {
return allocationPath;
}
/**
* Get the fully qualified name of the log.
*
* @return fully qualified name
*/
public String getFullyQualifiedName() {
return String.format("%s:%s", logName, logIdentifier);
}
}