2012-01-19 16:49:54 +00:00
|
|
|
/*
|
|
|
|
* LSMServerHandler.h
|
|
|
|
*
|
|
|
|
* Copyright 2011-2012 Yahoo! Inc.
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
2011-08-23 00:10:43 +00:00
|
|
|
#include "MapKeeper.h"
|
2011-05-11 22:27:48 +00:00
|
|
|
#include <protocol/TBinaryProtocol.h>
|
|
|
|
#include <transport/TServerSocket.h>
|
|
|
|
#include <transport/TBufferTransports.h>
|
|
|
|
|
|
|
|
using namespace ::apache::thrift;
|
|
|
|
using namespace ::apache::thrift::protocol;
|
|
|
|
using namespace ::apache::thrift::transport;
|
|
|
|
|
2011-08-23 00:10:43 +00:00
|
|
|
using namespace mapkeeper;
|
2011-05-11 22:27:48 +00:00
|
|
|
using boost::shared_ptr;
|
|
|
|
|
2011-08-23 00:10:43 +00:00
|
|
|
class LSMServerHandler : virtual public MapKeeperIf {
|
2011-05-11 22:27:48 +00:00
|
|
|
public:
|
|
|
|
LSMServerHandler(int argc, char **argv);
|
|
|
|
ResponseCode::type ping();
|
2011-06-08 23:58:29 +00:00
|
|
|
ResponseCode::type shutdown();
|
2011-08-23 00:10:43 +00:00
|
|
|
ResponseCode::type addMap(const std::string& databaseName);
|
|
|
|
ResponseCode::type dropMap(const std::string& databaseName);
|
|
|
|
void listMaps(StringListResponse& _return);
|
2011-05-11 22:27:48 +00:00
|
|
|
void scan(RecordListResponse& _return, const std::string& databaseName, const ScanOrder::type order,
|
|
|
|
const std::string& startKey, const bool startKeyIncluded,
|
|
|
|
const std::string& endKey, const bool endKeyIncluded,
|
|
|
|
const int32_t maxRecords, const int32_t maxBytes);
|
|
|
|
void get(BinaryResponse& _return, const std::string& databaseName, const std::string& recordName);
|
2011-08-23 00:10:43 +00:00
|
|
|
ResponseCode::type put(const std::string& databaseName, const std::string& recordName, const std::string& recordBody);
|
2011-05-11 22:27:48 +00:00
|
|
|
ResponseCode::type insert(const std::string& databaseName, const std::string& recordName, const std::string& recordBody);
|
|
|
|
ResponseCode::type insertMany(const std::string& databaseName, const std::vector<Record> & records);
|
|
|
|
ResponseCode::type update(const std::string& databaseName, const std::string& recordName, const std::string& recordBody);
|
|
|
|
ResponseCode::type remove(const std::string& databaseName, const std::string& recordName);
|
2012-01-13 00:13:33 +00:00
|
|
|
short port;
|
2011-05-11 22:27:48 +00:00
|
|
|
|
|
|
|
private:
|
2012-02-23 01:11:55 +00:00
|
|
|
ResponseCode::type insert(dataTuple* tuple);
|
2011-05-12 00:30:02 +00:00
|
|
|
uint32_t getDatabaseId(const std::string& databaseName);
|
2011-05-12 20:41:18 +00:00
|
|
|
uint32_t nextDatabaseId();
|
2012-02-23 01:11:55 +00:00
|
|
|
dataTuple* get(uint32_t databaseId, const std::string& recordName);
|
|
|
|
dataTuple* get(dataTuple* tuple);
|
|
|
|
dataTuple* buildTuple(uint32_t databaseId, const std::string& recordName);
|
|
|
|
dataTuple* buildTuple(uint32_t databaseId, const std::string& recordName, const std::string& recordBody);
|
|
|
|
dataTuple* buildTuple(uint32_t databaseId, const std::string& recordName, const void* body, uint32_t bodySize);
|
2011-05-12 20:41:18 +00:00
|
|
|
void initNextDatabaseId();
|
2012-02-23 01:11:55 +00:00
|
|
|
bLSM* ltable_;
|
2011-05-12 00:30:02 +00:00
|
|
|
uint32_t nextDatabaseId_;
|
2011-05-12 20:41:18 +00:00
|
|
|
pthread_mutex_t mutex_;
|
2011-05-11 22:27:48 +00:00
|
|
|
};
|