summaryrefslogtreecommitdiffstats
path: root/src/mds/cephfs_features.h
blob: d1fc942666603151b7bf3a4adabfbcdc46c44884 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
/*
 * Ceph - scalable distributed file system
 *

 *
 * This is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License version 2.1, as published by the Free Software
 * Foundation.  See file COPYING.
 *
 */

#ifndef CEPHFS_FEATURES_H
#define CEPHFS_FEATURES_H

#include "include/cephfs/metrics/Types.h"

class feature_bitset_t;
namespace ceph {
  class Formatter;
}

// When adding a new release, please update the "current" release below, add a
// feature bit for that release, add that feature bit to CEPHFS_FEATURES_ALL,
// and update Server::update_required_client_features(). This feature bit
// is used to indicate that operator only wants clients from that release or
// later to mount CephFS.
#define CEPHFS_CURRENT_RELEASE  CEPH_RELEASE_PACIFIC

// The first 5 bits are reserved for old ceph releases.
#define CEPHFS_FEATURE_JEWEL                5
#define CEPHFS_FEATURE_KRAKEN               6
#define CEPHFS_FEATURE_LUMINOUS             7
#define CEPHFS_FEATURE_MIMIC                8
#define CEPHFS_FEATURE_REPLY_ENCODING       9
#define CEPHFS_FEATURE_RECLAIM_CLIENT       10
#define CEPHFS_FEATURE_LAZY_CAP_WANTED      11
#define CEPHFS_FEATURE_MULTI_RECONNECT      12
#define CEPHFS_FEATURE_NAUTILUS             12
#define CEPHFS_FEATURE_DELEG_INO            13
#define CEPHFS_FEATURE_OCTOPUS              13
#define CEPHFS_FEATURE_METRIC_COLLECT       14
#define CEPHFS_FEATURE_ALTERNATE_NAME       15
#define CEPHFS_FEATURE_NOTIFY_SESSION_STATE 16
#define CEPHFS_FEATURE_OP_GETVXATTR         17
#define CEPHFS_FEATURE_MAX                  17

#define CEPHFS_FEATURES_ALL {		\
  0, 1, 2, 3, 4,			\
  CEPHFS_FEATURE_JEWEL,			\
  CEPHFS_FEATURE_KRAKEN,		\
  CEPHFS_FEATURE_LUMINOUS,		\
  CEPHFS_FEATURE_MIMIC,			\
  CEPHFS_FEATURE_REPLY_ENCODING,        \
  CEPHFS_FEATURE_RECLAIM_CLIENT,	\
  CEPHFS_FEATURE_LAZY_CAP_WANTED,	\
  CEPHFS_FEATURE_MULTI_RECONNECT,	\
  CEPHFS_FEATURE_NAUTILUS,              \
  CEPHFS_FEATURE_DELEG_INO,             \
  CEPHFS_FEATURE_OCTOPUS,               \
  CEPHFS_FEATURE_METRIC_COLLECT,        \
  CEPHFS_FEATURE_ALTERNATE_NAME,        \
  CEPHFS_FEATURE_NOTIFY_SESSION_STATE,  \
  CEPHFS_FEATURE_OP_GETVXATTR,          \
}

#define CEPHFS_METRIC_FEATURES_ALL {		\
    CLIENT_METRIC_TYPE_CAP_INFO,		\
    CLIENT_METRIC_TYPE_READ_LATENCY,		\
    CLIENT_METRIC_TYPE_WRITE_LATENCY,		\
    CLIENT_METRIC_TYPE_METADATA_LATENCY,	\
    CLIENT_METRIC_TYPE_DENTRY_LEASE,		\
    CLIENT_METRIC_TYPE_OPENED_FILES,		\
    CLIENT_METRIC_TYPE_PINNED_ICAPS,		\
    CLIENT_METRIC_TYPE_OPENED_INODES,		\
    CLIENT_METRIC_TYPE_READ_IO_SIZES,		\
    CLIENT_METRIC_TYPE_WRITE_IO_SIZES,		\
    CLIENT_METRIC_TYPE_AVG_READ_LATENCY,	\
    CLIENT_METRIC_TYPE_STDEV_READ_LATENCY,	\
    CLIENT_METRIC_TYPE_AVG_WRITE_LATENCY,	\
    CLIENT_METRIC_TYPE_STDEV_WRITE_LATENCY,	\
    CLIENT_METRIC_TYPE_AVG_METADATA_LATENCY,	\
    CLIENT_METRIC_TYPE_STDEV_METADATA_LATENCY,	\
}

#define CEPHFS_FEATURES_MDS_SUPPORTED CEPHFS_FEATURES_ALL
#define CEPHFS_FEATURES_MDS_REQUIRED {}

#define CEPHFS_FEATURES_CLIENT_SUPPORTED CEPHFS_FEATURES_ALL
#define CEPHFS_FEATURES_CLIENT_REQUIRED {}

extern std::string_view cephfs_feature_name(size_t id);
extern int cephfs_feature_from_name(std::string_view name);
std::string cephfs_stringify_features(const feature_bitset_t& features);
void cephfs_dump_features(ceph::Formatter *f, const feature_bitset_t& features);

#endif