mirror of
https://github.com/ceph/ceph
synced 2025-02-08 19:38:47 +00:00
git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@2100 29311d96-e01e-0410-9327-a35deaab8ce9
93 lines
2.2 KiB
C++
93 lines
2.2 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 __BLINKER_H
|
|
#define __BLINKER_H
|
|
|
|
class Blinker {
|
|
|
|
public:
|
|
|
|
class Op {
|
|
int op;
|
|
static const int LOOKUP = 1;
|
|
static const int INSERT = 2;
|
|
static const int REMOVE = 3;
|
|
static const int CLEAR = 4;
|
|
Op(int o) : op(o) {}
|
|
};
|
|
|
|
class OpLookup : public Op {
|
|
public:
|
|
bufferptr key;
|
|
OpLookup(bufferptr& k) : Op(Op::LOOKUP), key(k) {}
|
|
};
|
|
|
|
class OpInsert : public Op {
|
|
bufferptr key;
|
|
bufferlist val;
|
|
OpInsert(bufferptr& k, bufferlist& v) : Op(Op::INSERT), key(k), val(v) {}
|
|
};
|
|
|
|
class OpRemove : public Op {
|
|
public:
|
|
bufferptr key;
|
|
OpRemove(bufferptr& k) : Op(Op::REMOVE), key(k) {}
|
|
};
|
|
|
|
class OpClear : public Op {
|
|
public:
|
|
OpClear() : Op(Op::CLEAR) {}
|
|
};
|
|
|
|
|
|
|
|
private:
|
|
Objecter *objecter;
|
|
|
|
// in-flight operations.
|
|
|
|
|
|
// cache information about tree structure.
|
|
|
|
|
|
|
|
public:
|
|
// public interface
|
|
|
|
// simple accessors
|
|
void lookup(inode_t& inode, bufferptr& key, bufferlist *pval, Context *onfinish);
|
|
|
|
// simple modifiers
|
|
void insert(inode_t& inode, bufferptr& key, bufferlist& val, Context *onack, Context *onsafe);
|
|
void remove(inode_t& inode, bufferptr& key, Context *onack, Context *onsafe);
|
|
void clear(inode_t& inode, Context *onack, Context *onsafe);
|
|
|
|
// these are dangerous: the table may be large.
|
|
void listkeys(inode_t& inode, list<bufferptr>* pkeys, Context *onfinish);
|
|
void listvals(inode_t& inode, list<bufferptr>* pkeys, list<bufferlist>* pvals, Context *onfinish);
|
|
|
|
// fetch *at least* key, but also anything else that is convenient.
|
|
// include lexical bounds for which this is a complete result.
|
|
// (if *start and *end are empty, it's the entire table)
|
|
void prefetch(inode_t& inode, bufferptr& key,
|
|
list<bufferptr>* pkeys, list<bufferlist>* pvals,
|
|
bufferptr *start, bufferptr *end,
|
|
Context *onfinish);
|
|
|
|
|
|
};
|
|
|
|
#endif
|