Skip to content

Commit 0323460

Browse files
committed
Merge remote-tracking branch 'baidu_tera/master' into rb.m.ng
2 parents 1b2eddb + 2e5dec2 commit 0323460

10 files changed

Lines changed: 107 additions & 81 deletions

File tree

src/io/tablet_io.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,12 @@ std::string TabletIO::GetTableName() const {
9898

9999
std::string TabletIO::GetTablePath() const {
100100
if (!m_tablet_path.empty()) {
101-
return m_tablet_path.substr(FLAGS_tera_tabletnode_path_prefix.size());
101+
std::string path =
102+
m_tablet_path.substr(FLAGS_tera_tabletnode_path_prefix.size());
103+
if (path.at(0) == '/') {
104+
path = path.substr(1);
105+
}
106+
return path;
102107
} else {
103108
return m_tablet_path;
104109
}
@@ -1482,7 +1487,6 @@ void TabletIO::SetupOptionsForLG() {
14821487
<< ", buffer_size:" << lg_info->memtable_ldb_write_buffer_size
14831488
<< ", block_size:" << lg_info->memtable_ldb_block_size;
14841489
}
1485-
LOG(INFO) << ", sst_size: " << lg_schema.sst_size() << " Bytes.";
14861490
lg_info->sst_size = lg_schema.sst_size();
14871491
m_ldb_options.sst_size = lg_schema.sst_size();
14881492
exist_lg_list->insert(lg_i);

src/leveldb/db/db_impl.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1697,10 +1697,10 @@ void DBImpl::GetApproximateSizes(uint64_t* size, std::vector<uint64_t>* lgsize)
16971697
// add mem&imm size
16981698
if (size) {
16991699
if (mem_) {
1700-
size += mem_->ApproximateMemoryUsage();
1700+
*size += mem_->ApproximateMemoryUsage();
17011701
}
17021702
if (imm_) {
1703-
size += imm_->ApproximateMemoryUsage();
1703+
*size += imm_->ApproximateMemoryUsage();
17041704
}
17051705
}
17061706
}

src/leveldb/include/leveldb/env.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,6 @@ class EnvWrapper : public Env {
379379
return target_->NewLogger(fname, result);
380380
}
381381
virtual void SetLogger(Logger* logger) {
382-
Logger::SetDefaultLogger(logger);
383382
return target_->SetLogger(logger);
384383
}
385384
uint64_t NowMicros() {

src/leveldb/util/env_posix.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -795,6 +795,7 @@ class PosixEnv : public Env {
795795
}
796796
}
797797
virtual void SetLogger(Logger* logger) {
798+
Logger::SetDefaultLogger(logger);
798799
info_log_ = logger;
799800
thread_pool_.SetLogger(logger);
800801
}

src/master/master_impl.cc

Lines changed: 54 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ DECLARE_bool(tera_ins_enabled);
9292
DECLARE_int64(tera_sdk_perf_counter_log_interval);
9393

9494
DECLARE_bool(tera_acl_enabled);
95+
DECLARE_bool(tera_only_root_create_table);
9596
DECLARE_string(tera_master_gc_strategy);
9697

9798
namespace tera {
@@ -155,6 +156,7 @@ bool MasterImpl::Init() {
155156
m_zk_adapter.reset(new FakeMasterZkAdapter(this, m_local_addr));
156157
}
157158

159+
LOG(INFO) << "[acl] " << (FLAGS_tera_acl_enabled ? "enabled" : "disabled");
158160
SetMasterStatus(kIsSecondary);
159161
m_thread_pool->AddTask(boost::bind(&MasterImpl::InitAsync, this));
160162
return true;
@@ -462,16 +464,37 @@ bool MasterImpl::IsRootUser(const std::string& token) {
462464
return m_user_manager->UserNameToToken("root") == token;
463465
}
464466

467+
// user is admin or user is in admin_group
468+
bool MasterImpl::CheckUserPermissionOnTable(const std::string& token, TablePtr table) {
469+
std::string group_name = table->GetSchema().admin_group();
470+
std::string user_name = m_user_manager->TokenToUserName(token);
471+
return (m_user_manager->IsUserInGroup(user_name, group_name)
472+
|| (table->GetSchema().admin() == m_user_manager->TokenToUserName(token)));
473+
}
474+
475+
template <typename Request>
476+
bool MasterImpl::HasPermissionOnTable(const Request* request, TablePtr table) {
477+
if (!FLAGS_tera_acl_enabled
478+
|| IsRootUser(request->user_token())
479+
|| ((table->GetSchema().admin_group() == "") && (table->GetSchema().admin() == ""))
480+
|| (request->has_user_token()
481+
&& CheckUserPermissionOnTable(request->user_token(), table))) {
482+
return true;
483+
484+
}
485+
return false;
486+
}
487+
465488
template <typename Request, typename Response, typename Callback>
466-
bool MasterImpl::HasTablePermission(const Request* request, Response* response,
467-
Callback* done, TablePtr table, const char* operate) {
489+
bool MasterImpl::HasPermissionOrReturn(const Request* request, Response* response,
490+
Callback* done, TablePtr table, const char* operate) {
468491
// check permission
469-
if (!FLAGS_tera_acl_enabled
470-
|| IsRootUser(request->user_token())) {
471-
LOG(INFO) << "[acl] is acl enabled: " << FLAGS_tera_acl_enabled;
492+
if (HasPermissionOnTable(request, table)) {
472493
return true;
473494
} else {
474-
LOG(INFO) << "[acl] fail to " << operate;
495+
std::string token = request->has_user_token() ? request->user_token() : "";
496+
LOG(INFO) << "[acl] " << m_user_manager->TokenToUserName(token)
497+
<< ":" << token << " fail to " << operate;
475498
response->set_sequence_id(request->sequence_id());
476499
response->set_status(kNotPermission);
477500
done->Run();
@@ -661,11 +684,13 @@ void MasterImpl::CreateTable(const CreateTableRequest* request,
661684
done->Run();
662685
return;
663686
}
664-
if (FLAGS_tera_acl_enabled && !IsRootUser(request->user_token())) {
665-
response->set_sequence_id(request->sequence_id());
666-
response->set_status(kNotPermission);
667-
done->Run();
668-
return;
687+
if (FLAGS_tera_acl_enabled
688+
&& !IsRootUser(request->user_token())
689+
&& FLAGS_tera_only_root_create_table) {
690+
response->set_sequence_id(request->sequence_id());
691+
response->set_status(kNotPermission);
692+
done->Run();
693+
return;
669694
}
670695
if (!request->schema().alias().empty()) {
671696
bool alias_exist = false;
@@ -786,7 +811,7 @@ void MasterImpl::DeleteTable(const DeleteTableRequest* request,
786811
done->Run();
787812
return;
788813
}
789-
if (!HasTablePermission(request, response, done, table, "delete table")) {
814+
if (!HasPermissionOrReturn(request, response, done, table, "delete table")) {
790815
return;
791816
}
792817

@@ -842,7 +867,7 @@ void MasterImpl::DisableTable(const DisableTableRequest* request,
842867
done->Run();
843868
return;
844869
}
845-
if (!HasTablePermission(request, response, done, table, "disable table")) {
870+
if (!HasPermissionOrReturn(request, response, done, table, "disable table")) {
846871
return;
847872
}
848873

@@ -901,7 +926,7 @@ void MasterImpl::EnableTable(const EnableTableRequest* request,
901926
done->Run();
902927
return;
903928
}
904-
if (!HasTablePermission(request, response, done, table, "enable table")) {
929+
if (!HasPermissionOrReturn(request, response, done, table, "enable table")) {
905930
return;
906931
}
907932

@@ -952,7 +977,7 @@ void MasterImpl::UpdateTable(const UpdateTableRequest* request,
952977
done->Run();
953978
return;
954979
}
955-
if (!HasTablePermission(request, response, done, table, "update table")) {
980+
if (!HasPermissionOrReturn(request, response, done, table, "update table")) {
956981
return;
957982
}
958983

@@ -1074,11 +1099,19 @@ void MasterImpl::ShowTables(const ShowTablesRequest* request,
10741099
TableMetaList* table_meta_list = response->mutable_table_meta_list();
10751100
for (uint32_t i = 0; i < table_list.size(); ++i) {
10761101
TablePtr table = table_list[i];
1102+
// if a user has NO permission on a table,
1103+
// he/she should not notice this table
1104+
if (!HasPermissionOnTable(request, table)) {
1105+
continue;
1106+
}
10771107
table->ToMeta(table_meta_list->add_meta());
10781108
}
10791109
TabletMetaList* tablet_meta_list = response->mutable_tablet_meta_list();
10801110
for (uint32_t i = 0; i < tablet_list.size(); ++i) {
10811111
TabletPtr tablet = tablet_list[i];
1112+
if (!HasPermissionOnTable(request, tablet->GetTable())) {
1113+
continue;
1114+
}
10821115
TabletMeta meta;
10831116
tablet->ToMeta(&meta);
10841117
tablet_meta_list->add_meta()->CopyFrom(meta);
@@ -1128,6 +1161,9 @@ void MasterImpl::ShowTabletNodes(const ShowTabletNodesRequest* request,
11281161
std::vector<TabletPtr> tablet_list;
11291162
m_tablet_manager->FindTablet(request->addr(), &tablet_list);
11301163
for (size_t i = 0; i < tablet_list.size(); ++i) {
1164+
if (!HasPermissionOnTable(request, tablet_list[i]->GetTable())) {
1165+
continue;
1166+
}
11311167
TabletMeta* meta = response->mutable_tabletmeta_list()->add_meta();
11321168
TabletCounter* counter = response->mutable_tabletmeta_list()->add_counter();
11331169
tablet_list[i]->ToMeta(meta);
@@ -3460,12 +3496,13 @@ void MasterImpl::QueryTabletNodeCallback(std::string addr, QueryRequest* request
34603496
ClearUnusedSnapshots(tablet, meta);
34613497
VLOG(30) << "[query] " << tablet;
34623498
} else {
3463-
VLOG(30) << "fail to match tablet: " << meta.table_name()
3499+
LOG(WARNING) << "fail to match tablet: " << meta.table_name()
34643500
<< ", path: " << meta.path()
34653501
<< ", range: [" << DebugString(key_start)
34663502
<< ", " << DebugString(key_end)
34673503
<< "], size: " << meta.size()
3468-
<< ", addr: " << meta.server_addr();
3504+
<< ", addr: " << meta.server_addr()
3505+
<< ", tablet: " << tablet;
34693506
}
34703507
}
34713508

src/master/master_impl.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -528,9 +528,15 @@ class MasterImpl {
528528

529529
bool IsRootUser(const std::string& token);
530530

531+
bool CheckUserPermissionOnTable(const std::string& token, TablePtr table);
532+
533+
template <typename Request>
534+
bool HasPermissionOnTable(const Request* request, TablePtr table);
535+
531536
template <typename Request, typename Response, typename Callback>
532-
bool HasTablePermission(const Request* request, Response* response,
533-
Callback* done, TablePtr table, const char* operate);
537+
bool HasPermissionOrReturn(const Request* request, Response* response,
538+
Callback* done, TablePtr table, const char* operate);
539+
534540
void FillAlias(const std::string& key, const std::string& value);
535541
private:
536542
mutable Mutex m_status_mutex;

src/sdk/client_impl.cc

Lines changed: 23 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -511,43 +511,24 @@ bool ClientImpl::ShowTablesInfo(const string& name,
511511
TableMeta* meta,
512512
TabletMetaList* tablet_list,
513513
ErrorCode* err) {
514-
if (meta == NULL || tablet_list == NULL) {
515-
return false;
516-
}
517-
tablet_list->Clear();
518-
std::string internal_table_name;
519-
if (!GetInternalTableName(name, err, &internal_table_name)) {
520-
LOG(ERROR) << "faild to scan meta schema";
521-
return false;
514+
TableMetaList table_list;
515+
bool result = DoShowTablesInfo(&table_list, tablet_list, name, err);
516+
if (result) {
517+
meta->CopyFrom(table_list.meta(0));
522518
}
523-
master::MasterClient master_client(_cluster->MasterAddr());
524-
525-
ShowTablesRequest request;
526-
ShowTablesResponse response;
527-
request.set_sequence_id(0);
528-
request.set_start_table_name(internal_table_name);
529-
request.set_max_table_num(1);
530-
request.set_user_token(GetUserToken(_user_identity, _user_passcode));
531-
532-
if (master_client.ShowTables(&request, &response) &&
533-
response.status() == kMasterOk) {
534-
if (response.table_meta_list().meta_size() == 0) {
535-
return false;
536-
} else if (response.table_meta_list().meta(0).table_name() != internal_table_name) {
537-
return false;
538-
}
539-
meta->CopyFrom(response.table_meta_list().meta(0));
540-
tablet_list->CopyFrom(response.tablet_meta_list());
541-
return true;
542-
}
543-
LOG(ERROR) << "fail to show table info: " << name;
544-
err->SetFailed(ErrorCode::kSystem, StatusCodeToString(response.status()));
545-
return false;
519+
return result;
546520
}
547521

548522
bool ClientImpl::ShowTablesInfo(TableMetaList* table_list,
549523
TabletMetaList* tablet_list,
550524
ErrorCode* err) {
525+
return DoShowTablesInfo(table_list, tablet_list, "", err);
526+
}
527+
528+
bool ClientImpl::DoShowTablesInfo(TableMetaList* table_list,
529+
TabletMetaList* tablet_list,
530+
const string& table_name,
531+
ErrorCode* err) {
551532
if (table_list == NULL || tablet_list == NULL) {
552533
return false;
553534
}
@@ -556,14 +537,17 @@ bool ClientImpl::ShowTablesInfo(TableMetaList* table_list,
556537

557538
master::MasterClient master_client(_cluster->MasterAddr());
558539
std::string start_tablet_key;
559-
std::string start_table_name;
540+
std::string start_table_name = table_name;
560541
bool has_more = true;
561542
bool has_error = false;
562543
bool table_meta_copied = false;
563544
std::string err_msg;
564545
while(has_more && !has_error) {
565546
ShowTablesRequest request;
566547
ShowTablesResponse response;
548+
if (!table_name.empty()) {
549+
request.set_max_table_num(1);
550+
}
567551
request.set_start_table_name(start_table_name);
568552
request.set_start_tablet_key(start_tablet_key);
569553
request.set_max_tablet_num(FLAGS_tera_sdk_show_max_num); //tablets be fetched at most in one RPC
@@ -614,17 +598,18 @@ bool ClientImpl::ShowTablesInfo(TableMetaList* table_list,
614598

615599
if (has_error) {
616600
LOG(ERROR) << "fail to show table info.";
617-
err->SetFailed(ErrorCode::kSystem, err_msg);
601+
if (err != NULL) {
602+
err->SetFailed(ErrorCode::kSystem, err_msg);
603+
}
618604
return false;
619605
}
620606
return true;
621607
}
622608

623-
624609
bool ClientImpl::ShowTabletNodesInfo(const string& addr,
625-
TabletNodeInfo* info,
626-
TabletMetaList* tablet_list,
627-
ErrorCode* err) {
610+
TabletNodeInfo* info,
611+
TabletMetaList* tablet_list,
612+
ErrorCode* err) {
628613
if (info == NULL || tablet_list == NULL) {
629614
return false;
630615
}
@@ -655,7 +640,7 @@ bool ClientImpl::ShowTabletNodesInfo(const string& addr,
655640
}
656641

657642
bool ClientImpl::ShowTabletNodesInfo(std::vector<TabletNodeInfo>* infos,
658-
ErrorCode* err) {
643+
ErrorCode* err) {
659644
if (infos == NULL) {
660645
return false;
661646
}

src/sdk/client_impl.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,13 @@ class ClientImpl : public Client {
140140
bool CheckReturnValue(StatusCode status, std::string& reason, ErrorCode* err);
141141
bool GetInternalTableName(const std::string& table_name, ErrorCode* err,
142142
std::string* internal_table_name);
143+
144+
/// show all tables info: `table_name' should be an empty string
145+
/// show a single table info: `table_name' should be the table name
146+
bool DoShowTablesInfo(TableMetaList* table_list,
147+
TabletMetaList* tablet_list,
148+
const string& table_name,
149+
ErrorCode* err);
143150
private:
144151
ClientImpl(const ClientImpl&);
145152
void operator=(const ClientImpl&);

src/tabletnode/tabletnode_impl.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#include "proto/master_rpc.pb.h"
1515
#include "proto/tabletnode.pb.h"
1616
#include "proto/tabletnode_rpc.pb.h"
17-
#include "proto/table_meta.pb.h"
1817
#include "tabletnode/rpc_compactor.h"
1918
#include "tabletnode/tabletnode_sysinfo.h"
2019
#include "utils/rpc_timer_list.h"

0 commit comments

Comments
 (0)