4 #ifndef CVMFS_CACHE_PLUGIN_CHANNEL_H_
5 #define CVMFS_CACHE_PLUGIN_CHANNEL_H_
37 , client_instance(client_instance)
51 void Set(uint64_t
id,
char *reponame,
char *client_instance);
53 void Get(uint64_t *
id,
char **reponame,
char **client_instance);
94 bool Listen(
const std::string &locator);
109 int32_t change_by) = 0;
111 ObjectInfo *info) = 0;
115 unsigned char *buffer) = 0;
117 const uint64_t txn_id,
118 const ObjectInfo &info) = 0;
119 virtual cvmfs::EnumStatus
WriteTxn(
const uint64_t txn_id,
120 unsigned char *buffer,
122 virtual cvmfs::EnumStatus
AbortTxn(
const uint64_t txn_id) = 0;
123 virtual cvmfs::EnumStatus
CommitTxn(
const uint64_t txn_id) = 0;
125 virtual cvmfs::EnumStatus
GetInfo(Info *info) = 0;
126 virtual cvmfs::EnumStatus
Shrink(uint64_t shrink_to,
127 uint64_t *used_bytes) = 0;
129 cvmfs::EnumObjectType
type) = 0;
130 virtual cvmfs::EnumStatus
ListingNext(int64_t lst_id,
131 ObjectInfo *item) = 0;
132 virtual cvmfs::EnumStatus
ListingEnd(int64_t lst_id) = 0;
153 return !(*
this == other);
182 char *reponame = NULL;
183 char *client_instance = NULL;
184 std::map<uint64_t, SessionInfo>::const_iterator iter =
187 reponame = iter->second.reponame;
188 client_instance = iter->second.client_instance;
192 session_ctx->
Set(session_id, reponame, client_instance);
198 session_ctx->
Unset();
244 cvmfs::EnumStatus status,
245 const std::string &msg);
271 #endif // CVMFS_CACHE_PLUGIN_CHANNEL_H_
void Get(uint64_t *id, char **reponame, char **client_instance)
void HandleBreadcrumbStore(cvmfs::MsgBreadcrumbStoreReq *msg_req, CacheTransport *transport)
virtual cvmfs::EnumStatus ListingNext(int64_t lst_id, ObjectInfo *item)=0
atomic_int64 next_session_id_
void HandleObjectInfo(cvmfs::MsgObjectInfoReq *msg_req, CacheTransport *transport)
static void CleanupInstance()
void Set(uint64_t id, char *reponame, char *client_instance)
static const uint64_t kSizeUnknown
bool is_set
either not yet set or deliberately unset
void HandleIoctl(cvmfs::MsgIoctl *msg_req)
std::set< int > connections_
std::map< uint64_t, SessionInfo > sessions_
uint64_t capabilities() const
SessionCtxGuard(uint64_t session_id, CachePlugin *plugin)
void ProcessRequests(unsigned num_workers)
cvmfs::EnumObjectType object_type
virtual cvmfs::EnumStatus GetInfo(Info *info)=0
static SessionCtx * instance_
static const unsigned kDefaultMaxObjectSize
assert((mem||(size==0))&&"Out Of Memory")
virtual cvmfs::EnumStatus LoadBreadcrumb(const std::string &fqrn, manifest::Breadcrumb *breadcrumb)=0
static uint32_t HashUniqueRequest(const UniqueRequest &req)
void HandleShrink(cvmfs::MsgShrinkReq *msg_req, CacheTransport *transport)
virtual cvmfs::EnumStatus StartTxn(const shash::Any &id, const uint64_t txn_id, const ObjectInfo &info)=0
CachePlugin(uint64_t capabilities)
uint64_t num_inlimbo_clients_
virtual cvmfs::EnumStatus WriteTxn(const uint64_t txn_id, unsigned char *buffer, uint32_t size)=0
void HandleRefcount(cvmfs::MsgRefcountReq *msg_req, CacheTransport *transport)
bool Listen(const std::string &locator)
virtual cvmfs::EnumStatus ListingEnd(int64_t lst_id)=0
static const unsigned kListingSize
static void TlsDestructor(void *data)
void NotifySupervisor(char signal)
unsigned max_object_size_
ThreadLocalStorage(uint64_t id, char *reponame, char *client_instance)
virtual cvmfs::EnumStatus CommitTxn(const uint64_t txn_id)=0
static const char kSignalDetach
virtual cvmfs::EnumStatus StoreBreadcrumb(const std::string &fqrn, const manifest::Breadcrumb &breadcrumb)=0
void LogSessionError(uint64_t session_id, cvmfs::EnumStatus status, const std::string &msg)
std::vector< ThreadLocalStorage * > tls_blocks_
static const unsigned kPbProtocolVersion
virtual cvmfs::EnumStatus Shrink(uint64_t shrink_to, uint64_t *used_bytes)=0
void HandleStoreAbort(cvmfs::MsgStoreAbortReq *msg_req, CacheTransport *transport)
pthread_mutex_t * lock_tls_blocks_
virtual cvmfs::EnumStatus ListingBegin(uint64_t lst_id, cvmfs::EnumObjectType type)=0
unsigned max_object_size() const
void HandleList(cvmfs::MsgListReq *msg_req, CacheTransport *transport)
void HandleRead(cvmfs::MsgReadReq *msg_req, CacheTransport *transport)
void HandleHandshake(cvmfs::MsgHandshake *msg_req, CacheTransport *transport)
void SendDetachRequests()
SmallHashDynamic< UniqueRequest, uint64_t > txn_ids_
atomic_int64 next_lst_id_
UniqueRequest(int64_t s, int64_t r)
void HandleStore(cvmfs::MsgStoreReq *msg_req, CacheTransport::Frame *frame, CacheTransport *transport)
virtual cvmfs::EnumStatus AbortTxn(const uint64_t txn_id)=0
static void * MainProcessRequests(void *data)
pthread_key_t thread_local_storage_
bool operator==(const UniqueRequest &other) const
virtual cvmfs::EnumStatus Pread(const shash::Any &id, uint64_t offset, uint32_t *size, unsigned char *buffer)=0
static const char kSignalTerminate
virtual cvmfs::EnumStatus ChangeRefcount(const shash::Any &id, int32_t change_by)=0
virtual cvmfs::EnumStatus GetObjectInfo(const shash::Any &id, ObjectInfo *info)=0
bool operator!=(const UniqueRequest &other) const
atomic_int64 next_txn_id_
void HandleInfo(cvmfs::MsgInfoReq *msg_req, CacheTransport *transport)
void LogSessionInfo(uint64_t session_id, const std::string &msg)
void HandleBreadcrumbLoad(cvmfs::MsgBreadcrumbLoadReq *msg_req, CacheTransport *transport)
uint32_t MurmurHash2(const void *key, int len, uint32_t seed)
bool HandleRequest(int fd_con)
static SessionCtx * GetInstance()