syntax = "proto2";

package alluxio.proto.meta;

import "grpc/common.proto";
import "proto/shared/acl.proto";

// Protocol buffers used for storing file system master metadata.

/**
 * General inode metadata. This includes most inode metadata, but does not include the inode's
 * children or time of last modification.
 *
 * next available id: 31
 */
message Inode {
    optional int64 id = 1;
    optional int64 creation_time_ms = 2;
    optional bool is_directory = 3;

    optional int64 ttl = 4;
    optional grpc.TtlAction ttl_action = 5;

    optional int64 last_modified_ms = 25;
    optional string name = 6;
    optional int64 parent_id = 7;
    optional string persistence_state = 8;
    optional bool is_pinned = 9;
    optional alluxio.proto.shared.AccessControlList access_acl = 10;
    optional string ufs_fingerprint = 11;
    repeated string medium_type = 27;
    optional int64 last_accessed_ms = 30;

    // directory only
    optional bool is_mount_point = 12;
    optional bool has_direct_children_loaded = 13;
    optional int64 child_count = 26;
    optional alluxio.proto.shared.AccessControlList default_acl = 14;

    // file only
    optional int64 block_size_bytes = 15;
    repeated int64 blocks = 16;
    optional bool is_cacheable = 17;
    optional bool is_completed = 18;
    optional int64 length = 19;
    optional int32 replication_durable = 20;
    optional int32 replication_max = 21;
    optional int32 replication_min = 22;
    optional int64 should_persist_time = 28;

    // Used for recovering in-progress file persist jobs on master start.
    optional int64 persist_job_id = 23;
    optional string persist_job_temp_ufs_path = 24;

    // Extended attributes, general purpose. Should be used with care as long string identifiers will use a
    // comparatively large amount of memory to other fields
    map<string, bytes> xAttr = 29;
}
