summaryrefslogtreecommitdiffstats
path: root/src/ceph/doc/man/8/ceph-dencoder.rst
blob: cf2e429e103cd06349c3dae7d7d24a08fa6434b5 (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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
:orphan:

==============================================
 ceph-dencoder -- ceph encoder/decoder utility
==============================================

.. program:: ceph-dencoder

Synopsis
========

| **ceph-dencoder** [commands...]


Description
===========

**ceph-dencoder** is a utility to encode, decode, and dump ceph data
structures.  It is used for debugging and for testing inter-version
compatibility.

**ceph-dencoder** takes a simple list of commands and performs them
in order.

Commands
========

.. option:: version

   Print the version string for the **ceph-dencoder** binary.

.. option:: import <file>

   Read a binary blob of encoded data from the given file.  It will be
   placed in an in-memory buffer.

.. option:: export <file>

   Write the contents of the current in-memory buffer to the given
   file.

.. option:: list_types

   List the data types known to this build of **ceph-dencoder**.

.. option:: type <name>

   Select the given type for future ``encode`` or ``decode`` operations.

.. option:: skip <bytes>

   Seek <bytes> into the imported file before reading data structure, use
   this with objects that have a preamble/header before the object of interest.

.. option:: decode

   Decode the contents of the in-memory buffer into an instance of the
   previously selected type.  If there is an error, report it.

.. option:: encode

   Encode the contents of the in-memory instance of the previously
   selected type to the in-memory buffer.

.. option:: dump_json

   Print a JSON-formatted description of the in-memory object.

.. option:: count_tests

   Print the number of built-in test instances of the previosly
   selected type that **ceph-dencoder** is able to generate.

.. option:: select_test <n>

   Select the given build-in test instance as a the in-memory instance
   of the type.

.. option:: get_features

   Print the decimal value of the feature set supported by this version
   of **ceph-dencoder**.  Each bit represents a feature.  These correspond to
   CEPH_FEATURE_* defines in src/include/ceph_features.h.

.. option:: set_features <f>

   Set the feature bits provided to ``encode`` to *f*.  This allows
   you to encode objects such that they can be understood by old
   versions of the software (for those types that support it).

Example
=======

Say you want to examine an attribute on an object stored by ``ceph-osd``.  You can do this:

::

    $ cd /mnt/osd.12/current/2.b_head
    $ attr -l foo_bar_head_EFE6384B
    Attribute "ceph.snapset" has a 31 byte value for foo_bar_head_EFE6384B
    Attribute "ceph._" has a 195 byte value for foo_bar_head_EFE6384B
    $ attr foo_bar_head_EFE6384B -g ceph._ -q > /tmp/a
    $ ceph-dencoder type object_info_t import /tmp/a decode dump_json
    { "oid": { "oid": "foo",
          "key": "bar",
          "snapid": -2,
          "hash": 4024842315,
          "max": 0},
      "locator": { "pool": 2,
          "preferred": -1,
          "key": "bar"},
      "category": "",
      "version": "9'1",
      "prior_version": "0'0",
      "last_reqid": "client.4116.0:1",
      "size": 1681,
      "mtime": "2012-02-21 08:58:23.666639",
      "lost": 0,
      "wrlock_by": "unknown.0.0:0",
      "snaps": [],
      "truncate_seq": 0,
      "truncate_size": 0,
      "watchers": {}}

Alternatively, perhaps you wish to dump an internal CephFS metadata object, you might
do that like this:

::

   $ rados -p metadata get mds_snaptable mds_snaptable.bin
   $ ceph-dencoder type SnapServer skip 8 import mds_snaptable.bin decode dump_json
   { "snapserver": { "last_snap": 1,
      "pending_noop": [],
      "snaps": [],
      "need_to_purge": {},
      "pending_create": [],
      "pending_destroy": []}} 


Availability
============

**ceph-dencoder** is part of Ceph, a massively scalable, open-source, distributed storage system. Please
refer to the Ceph documentation at http://ceph.com/docs for more
information.


See also
========

:doc:`ceph <ceph>`\(8)