Java Code Examples for com.alibaba.rocketmq.common.UtilAll#offset2FileName()

The following examples show how to use com.alibaba.rocketmq.common.UtilAll#offset2FileName() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: MapedFileQueue.java    From reading-and-annotate-rocketmq-3.4.6 with GNU General Public License v3.0 4 votes vote down vote up
/**
 * 是否以创建新的MapFile的方式获取一个新的文件。
 * @param startOffset 开始的起始位点,
 * @param needCreate 是否需要创建新的mapfile .
 * 当消息到达broker时,需要获取最新的MapedFile写入数据,调用MapedFileQueue的getLastMapedFile获取,此函数如果集合中一个
 * 也没有创建一个,如果最后一个写满了也创建一个新的。
 * @return
 */
public MapedFile getLastMapedFile(final long startOffset, boolean needCreate) {
    long createOffset = -1;
    MapedFile mapedFileLast = null;
    {
        this.readWriteLock.readLock().lock();
        if (this.mapedFiles.isEmpty()) { // mapfile为空的情况,则从startOffset做为create offset .
            createOffset = startOffset - (startOffset % this.mapedFileSize);
        }
        else {  //拿到了最后一个mapfile .
            mapedFileLast = this.mapedFiles.get(this.mapedFiles.size() - 1);
        }
        this.readWriteLock.readLock().unlock();
    }

    if (mapedFileLast != null && mapedFileLast.isFull()) { //拿到了最后一个mapfile 并且已经写满,  那么Createoffset
        // 就是最后一个mapfile的文件名(offset + 文件大小) 。
        createOffset = mapedFileLast.getFileFromOffset() + this.mapedFileSize;
    }

    if (createOffset != -1 && needCreate) {
        //创建下一个mapfile和下下个mapfile的路径。
        String nextFilePath = this.storePath + File.separator + UtilAll.offset2FileName(createOffset);
        String nextNextFilePath =
                this.storePath + File.separator
                        + UtilAll.offset2FileName(createOffset + this.mapedFileSize);
        MapedFile mapedFile = null;

        if (this.allocateMapedFileService != null) { //有异步分配Mapfile的服务。
            mapedFile =
                    this.allocateMapedFileService.putRequestAndReturnMapedFile(nextFilePath,
                        nextNextFilePath, this.mapedFileSize);
        }
        else {//  没有异步分配Mapfile的服务, 就创建一个。
            try {
                mapedFile = new MapedFile(nextFilePath, this.mapedFileSize);
            }
            catch (IOException e) {
                log.error("create mapedfile exception", e);
            }
        }

        if (mapedFile != null) { //加写锁,加入到mapfile队列。
            this.readWriteLock.writeLock().lock();
            if (this.mapedFiles.isEmpty()) {
                mapedFile.setFirstCreateInQueue(true);
            }
            this.mapedFiles.add(mapedFile);
            this.readWriteLock.writeLock().unlock();
        }

        return mapedFile;
    }

    return mapedFileLast;
}
 
Example 2
Source File: MapedFileQueue.java    From rocketmq with Apache License 2.0 4 votes vote down vote up
public MapedFile getLastMapedFile(final long startOffset, boolean needCreate) {
    long createOffset = -1;
    MapedFile mapedFileLast = null;
    {
        this.readWriteLock.readLock().lock();
        if (this.mapedFiles.isEmpty()) {
            createOffset = startOffset - (startOffset % this.mapedFileSize);
        } else {
            mapedFileLast = this.mapedFiles.get(this.mapedFiles.size() - 1);
        }
        this.readWriteLock.readLock().unlock();
    }

    if (mapedFileLast != null && mapedFileLast.isFull()) {
        createOffset = mapedFileLast.getFileFromOffset() + this.mapedFileSize;
    }

    if (createOffset != -1 && needCreate) {
        String nextFilePath = this.storePath + File.separator + UtilAll.offset2FileName(createOffset);
        String nextNextFilePath =
                this.storePath + File.separator
                        + UtilAll.offset2FileName(createOffset + this.mapedFileSize);
        MapedFile mapedFile = null;

        if (this.allocateMapedFileService != null) {
            mapedFile =
                    this.allocateMapedFileService.putRequestAndReturnMapedFile(nextFilePath,
                            nextNextFilePath, this.mapedFileSize);
        } else {
            try {
                mapedFile = new MapedFile(nextFilePath, this.mapedFileSize);
            } catch (IOException e) {
                log.error("create mapedfile exception", e);
            }
        }

        if (mapedFile != null) {
            this.readWriteLock.writeLock().lock();
            if (this.mapedFiles.isEmpty()) {
                mapedFile.setFirstCreateInQueue(true);
            }
            this.mapedFiles.add(mapedFile);
            this.readWriteLock.writeLock().unlock();
        }

        return mapedFile;
    }

    return mapedFileLast;
}
 
Example 3
Source File: MapedFileQueue.java    From RocketMQ-Master-analyze with Apache License 2.0 4 votes vote down vote up
/**
 * 获取最后一个MapedFile对象,如果一个都没有,则新创建一个,如果最后一个写满了,则新创建一个
 *
 * @param startOffset
 *            起始offset
 * @return
 */
public MapedFile getLastMapedFile(final long startOffset) {
    long createOffset = -1;
    MapedFile mapedFileLast = null;
    {
        this.readWriteLock.readLock().lock();
        if (this.mapedFiles.isEmpty()) {
            createOffset = startOffset - (startOffset % this.mapedFileSize);
        }
        else {
            mapedFileLast = this.mapedFiles.get(this.mapedFiles.size() - 1);
        }
        this.readWriteLock.readLock().unlock();
    }

    if (mapedFileLast != null && mapedFileLast.isFull()) {
        createOffset = mapedFileLast.getFileFromOffset() + this.mapedFileSize;
    }

    if (createOffset != -1) {
        String nextFilePath = this.storePath + File.separator + UtilAll.offset2FileName(createOffset);
        String nextNextFilePath = this.storePath + File.separator
                + UtilAll.offset2FileName(createOffset + this.mapedFileSize);
        MapedFile mapedFile = null;

        if (this.allocateMapedFileService != null) {
            //
            mapedFile = this.allocateMapedFileService.putRequestAndReturnMapedFile(nextFilePath,
                nextNextFilePath, this.mapedFileSize);
        }
        else {
            try {
                mapedFile = new MapedFile(nextFilePath, this.mapedFileSize);
            }
            catch (IOException e) {
                log.error("create mapedfile exception", e);
            }
        }

        if (mapedFile != null) {
            this.readWriteLock.writeLock().lock();
            if (this.mapedFiles.isEmpty()) {
                // 标记改mapedfile是队列首
                mapedFile.setFirstCreateInQueue(true);
            }
            this.mapedFiles.add(mapedFile);
            this.readWriteLock.writeLock().unlock();
        }

        return mapedFile;
    }

    return mapedFileLast;
}