forked from fghaas/ceph
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathObjectMap.h
136 lines (117 loc) · 4.66 KB
/
ObjectMap.h
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
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
/*
* Ceph - scalable distributed file system
*
* Copyright (C) 2004-2006 Sage Weil <[email protected]>
*
* 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 OS_KEYVALUESTORE_H
#define OS_KEYVALUESTORE_H
#include <string>
#include <vector>
#include <tr1/memory>
#include "CollectionIndex.h"
/**
* Encapsulates the FileStore key value store
*
* Implementations of this interface will be used to implement TMAP
*/
class ObjectMap {
public:
/// Set keys and values from specified map
virtual int set_keys(
const hobject_t &hoid, ///< [in] object containing map
CollectionIndex::IndexedPath path, ///< [in] Path to hoid
const map<string, bufferlist> &set ///< [in] key to value map to set
) = 0;
/// Set header
virtual int set_header(
const hobject_t &hoid, ///< [in] object containing map
CollectionIndex::IndexedPath path, ///< [in] Path to hoid
const bufferlist &bl ///< [in] header to set
) = 0;
/// Retrieve header
virtual int get_header(
const hobject_t &hoid, ///< [in] object containing map
CollectionIndex::IndexedPath path, ///< [in] Path to hoid
bufferlist *bl ///< [out] header to set
) = 0;
/// Clear all map keys and values from hoid
virtual int clear(
const hobject_t &hoid, ///< [in] object containing map
CollectionIndex::IndexedPath path ///< [in] Path to hoid
) = 0;
/// Clear all map keys and values from hoid
virtual int rm_keys(
const hobject_t &hoid, ///< [in] object containing map
CollectionIndex::IndexedPath path, ///< [in] Path to hoid
const set<string> &to_clear ///< [in] Keys to clear
) = 0;
/// Get all keys and values
virtual int get(
const hobject_t &hoid, ///< [in] object containing map
CollectionIndex::IndexedPath path, ///< [in] Path to hoid
bufferlist *header, ///< [out] Returned Header
map<string, bufferlist> *out ///< [out] Returned keys and values
) = 0;
/// Get values for supplied keys
virtual int get_keys(
const hobject_t &hoid, ///< [in] object containing map
CollectionIndex::IndexedPath path, ///< [in] Path to hoid
set<string> *keys ///< [out] Keys defined on hoid
) = 0;
/// Get values for supplied keys
virtual int get_values(
const hobject_t &hoid, ///< [in] object containing map
CollectionIndex::IndexedPath path, ///< [in] Path to hoid
const set<string> &keys, ///< [in] Keys to get
map<string, bufferlist> *out ///< [out] Returned keys and values
) = 0;
/// Check key existence
virtual int check_keys(
const hobject_t &hoid, ///< [in] object containing map
CollectionIndex::IndexedPath path, ///< [in] Path to hoid
const set<string> &keys, ///< [in] Keys to check
set<string> *out ///< [out] Subset of keys defined on hoid
) = 0;
/// Clone keys efficiently from hoid map to target map
virtual int clone_keys(
const hobject_t &hoid, ///< [in] object containing map
CollectionIndex::IndexedPath path, ///< [in] Path to hoid
const hobject_t &target, ///< [in] target of clone
CollectionIndex::IndexedPath target_path ///< [in] path to target
) { return 0; }
/// Efficiently tie <target, target_path> to same key space as <hoid, path>
virtual int link_keys(
const hobject_t &hoid, ///< [in] object containing map
CollectionIndex::IndexedPath path, ///< [in] Path to hoid
const hobject_t &target, ///< [in] target of link
CollectionIndex::IndexedPath target_path ///< [in] path to target
) { return 0; }
virtual bool check(std::ostream &out) { return true; }
class ObjectMapIteratorImpl {
public:
virtual int seek_to_first() = 0;
virtual int upper_bound(const string &after) = 0;
virtual int lower_bound(const string &to) = 0;
virtual bool valid() = 0;
virtual int next() = 0;
virtual string key() = 0;
virtual bufferlist value() = 0;
virtual int status() = 0;
virtual ~ObjectMapIteratorImpl() {}
};
typedef std::tr1::shared_ptr<ObjectMapIteratorImpl> ObjectMapIterator;
virtual ObjectMapIterator get_iterator(const hobject_t &hoid,
CollectionIndex::IndexedPath path) {
return ObjectMapIterator();
}
virtual ~ObjectMap() {}
};
#endif