mirror of
https://github.com/ceph/ceph
synced 2025-03-10 10:19:26 +00:00
Bump the version for new maps to 3 Make clone less efficient but simpler Add rename operation (use instead of clone/unlink) For now keep code that understands version 2 maps Signed-off-by: David Zafman <dzafman@redhat.com>
169 lines
5.7 KiB
C++
169 lines
5.7 KiB
C++
// -*- 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 <sage@newdream.net>
|
|
*
|
|
* 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 "include/memory.h"
|
|
#include "kv/KeyValueDB.h"
|
|
#include "common/hobject.h"
|
|
|
|
class SequencerPosition;
|
|
|
|
/**
|
|
* Encapsulates the FileStore key value store
|
|
*
|
|
* Implementations of this interface will be used to implement TMAP
|
|
*/
|
|
class ObjectMap {
|
|
public:
|
|
CephContext* cct;
|
|
/// Set keys and values from specified map
|
|
virtual int set_keys(
|
|
const ghobject_t &oid, ///< [in] object containing map
|
|
const map<string, bufferlist> &set, ///< [in] key to value map to set
|
|
const SequencerPosition *spos=0 ///< [in] sequencer position
|
|
) = 0;
|
|
|
|
/// Set header
|
|
virtual int set_header(
|
|
const ghobject_t &oid, ///< [in] object containing map
|
|
const bufferlist &bl, ///< [in] header to set
|
|
const SequencerPosition *spos=0 ///< [in] sequencer position
|
|
) = 0;
|
|
|
|
/// Retrieve header
|
|
virtual int get_header(
|
|
const ghobject_t &oid, ///< [in] object containing map
|
|
bufferlist *bl ///< [out] header to set
|
|
) = 0;
|
|
|
|
/// Clear all map keys and values from oid
|
|
virtual int clear(
|
|
const ghobject_t &oid, ///< [in] object containing map
|
|
const SequencerPosition *spos=0 ///< [in] sequencer position
|
|
) = 0;
|
|
|
|
/// Clear all map keys and values in to_clear from oid
|
|
virtual int rm_keys(
|
|
const ghobject_t &oid, ///< [in] object containing map
|
|
const set<string> &to_clear, ///< [in] Keys to clear
|
|
const SequencerPosition *spos=0 ///< [in] sequencer position
|
|
) = 0;
|
|
|
|
/// Clear all omap keys and the header
|
|
virtual int clear_keys_header(
|
|
const ghobject_t &oid, ///< [in] oid to clear
|
|
const SequencerPosition *spos=0 ///< [in] sequencer position
|
|
) = 0;
|
|
|
|
/// Get all keys and values
|
|
virtual int get(
|
|
const ghobject_t &oid, ///< [in] object containing map
|
|
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 ghobject_t &oid, ///< [in] object containing map
|
|
set<string> *keys ///< [out] Keys defined on oid
|
|
) = 0;
|
|
|
|
/// Get values for supplied keys
|
|
virtual int get_values(
|
|
const ghobject_t &oid, ///< [in] object containing map
|
|
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 ghobject_t &oid, ///< [in] object containing map
|
|
const set<string> &keys, ///< [in] Keys to check
|
|
set<string> *out ///< [out] Subset of keys defined on oid
|
|
) = 0;
|
|
|
|
/// Get xattrs
|
|
virtual int get_xattrs(
|
|
const ghobject_t &oid, ///< [in] object
|
|
const set<string> &to_get, ///< [in] keys to get
|
|
map<string, bufferlist> *out ///< [out] subset of attrs/vals defined
|
|
) = 0;
|
|
|
|
/// Get all xattrs
|
|
virtual int get_all_xattrs(
|
|
const ghobject_t &oid, ///< [in] object
|
|
set<string> *out ///< [out] attrs and values
|
|
) = 0;
|
|
|
|
/// set xattrs in to_set
|
|
virtual int set_xattrs(
|
|
const ghobject_t &oid, ///< [in] object
|
|
const map<string, bufferlist> &to_set,///< [in] attrs/values to set
|
|
const SequencerPosition *spos=0 ///< [in] sequencer position
|
|
) = 0;
|
|
|
|
/// remove xattrs in to_remove
|
|
virtual int remove_xattrs(
|
|
const ghobject_t &oid, ///< [in] object
|
|
const set<string> &to_remove, ///< [in] attrs to remove
|
|
const SequencerPosition *spos=0 ///< [in] sequencer position
|
|
) = 0;
|
|
|
|
|
|
/// Clone keys from oid map to target map
|
|
virtual int clone(
|
|
const ghobject_t &oid, ///< [in] object containing map
|
|
const ghobject_t &target, ///< [in] target of clone
|
|
const SequencerPosition *spos=0 ///< [in] sequencer position
|
|
) { return 0; }
|
|
|
|
/// Rename map because of name change
|
|
virtual int rename(
|
|
const ghobject_t &from, ///< [in] object containing map
|
|
const ghobject_t &to, ///< [in] new name
|
|
const SequencerPosition *spos=0 ///< [in] sequencer position
|
|
) { return 0; }
|
|
|
|
/// For testing clone keys from oid map to target map using faster but more complex method
|
|
virtual int legacy_clone(
|
|
const ghobject_t &oid, ///< [in] object containing map
|
|
const ghobject_t &target, ///< [in] target of clone
|
|
const SequencerPosition *spos=0 ///< [in] sequencer position
|
|
) { return 0; }
|
|
|
|
/// Ensure all previous writes are durable
|
|
virtual int sync(
|
|
const ghobject_t *oid=0, ///< [in] object
|
|
const SequencerPosition *spos=0 ///< [in] Sequencer
|
|
) { return 0; }
|
|
|
|
virtual int check(std::ostream &out, bool repair = false) { return 0; }
|
|
|
|
typedef KeyValueDB::GenericIteratorImpl ObjectMapIteratorImpl;
|
|
typedef ceph::shared_ptr<ObjectMapIteratorImpl> ObjectMapIterator;
|
|
virtual ObjectMapIterator get_iterator(const ghobject_t &oid) {
|
|
return ObjectMapIterator();
|
|
}
|
|
|
|
|
|
ObjectMap(CephContext* cct) : cct(cct) {}
|
|
virtual ~ObjectMap() {}
|
|
};
|
|
|
|
#endif
|