You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Alexander Lapin (Jira)" <ji...@apache.org> on 2021/08/31 12:29:00 UTC

[jira] [Updated] (IGNITE-15403) Eliminate excessive storage directories creation for table partitions

     [ https://issues.apache.org/jira/browse/IGNITE-15403?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alexander Lapin updated IGNITE-15403:
-------------------------------------
    Description: 
It's requited to create and resolve directories for storage only if a local node hosts partition raft node:
{code:java}
if (nodes.stream().map(ClusterNode::name).collect(Collectors.toSet()).contains(locNodeName))
{code}
However, at this moment it's ignored and storage directory will be created on every node:
{code:java}
private void createTableLocally(
    String name,
    UUID tblId,
    List<List<ClusterNode>> assignment,
    SchemaRegistry schemaReg
) {
    int partitions = assignment.size();

    var partitionsGroupsFutures = new ArrayList<CompletableFuture<RaftGroupService>>();

    Path storageDir = partitionsStoreDir.resolve(name);

    try {
        Files.createDirectories(storageDir);
    } catch (IOException e) {
        throw new IgniteInternalException(
            "Failed to create partitions store directory for " + name + ": " + e.getMessage(),
            e
        );
    }

    for (int p = 0; p < partitions; p++) {
        RocksDbStorage storage = new RocksDbStorage(
            storageDir.resolve(String.valueOf(p)),
            ByteBuffer::compareTo
        );
{code}
In other words, storage directory is created regardless of whether a raft node is created or not.

 

  was:
It's requited to create and resolve directories for storage only if a local node hosts partition raft node:

 
{code:java}
if (nodes.stream().map(ClusterNode::name).collect(Collectors.toSet()).contains(locNodeName))
{code}
However, at this moment it's ignored and storage directory will be created on every node:

 

 
{code:java}
private void createTableLocally(
    String name,
    UUID tblId,
    List<List<ClusterNode>> assignment,
    SchemaRegistry schemaReg
) {
    int partitions = assignment.size();

    var partitionsGroupsFutures = new ArrayList<CompletableFuture<RaftGroupService>>();

    Path storageDir = partitionsStoreDir.resolve(name);

    try {
        Files.createDirectories(storageDir);
    } catch (IOException e) {
        throw new IgniteInternalException(
            "Failed to create partitions store directory for " + name + ": " + e.getMessage(),
            e
        );
    }

    for (int p = 0; p < partitions; p++) {
        RocksDbStorage storage = new RocksDbStorage(
            storageDir.resolve(String.valueOf(p)),
            ByteBuffer::compareTo
        );
{code}
In other words, storage directory is created regardless of whether a raft node is created or not.

 


> Eliminate excessive storage directories creation for table partitions
> ---------------------------------------------------------------------
>
>                 Key: IGNITE-15403
>                 URL: https://issues.apache.org/jira/browse/IGNITE-15403
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Alexander Lapin
>            Assignee: Alexander Lapin
>            Priority: Major
>              Labels: ignite-3
>
> It's requited to create and resolve directories for storage only if a local node hosts partition raft node:
> {code:java}
> if (nodes.stream().map(ClusterNode::name).collect(Collectors.toSet()).contains(locNodeName))
> {code}
> However, at this moment it's ignored and storage directory will be created on every node:
> {code:java}
> private void createTableLocally(
>     String name,
>     UUID tblId,
>     List<List<ClusterNode>> assignment,
>     SchemaRegistry schemaReg
> ) {
>     int partitions = assignment.size();
>     var partitionsGroupsFutures = new ArrayList<CompletableFuture<RaftGroupService>>();
>     Path storageDir = partitionsStoreDir.resolve(name);
>     try {
>         Files.createDirectories(storageDir);
>     } catch (IOException e) {
>         throw new IgniteInternalException(
>             "Failed to create partitions store directory for " + name + ": " + e.getMessage(),
>             e
>         );
>     }
>     for (int p = 0; p < partitions; p++) {
>         RocksDbStorage storage = new RocksDbStorage(
>             storageDir.resolve(String.valueOf(p)),
>             ByteBuffer::compareTo
>         );
> {code}
> In other words, storage directory is created regardless of whether a raft node is created or not.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)